{
  "version": 3,
  "sources": ["../src/icons/createGlassIcon.tsx", "../src/icons/components.tsx", "../src/primitives/glass/GlassAdvanced.tsx", "../src/design-system/utilsCore.ts", "../src/hooks/useReducedMotion.tsx", "../src/utils/env.ts", "../src/utils/deviceCapabilities.ts", "../src/tokens/glass.ts", "../src/core/mixins/glassMixins.ts", "../src/primitives/glass/OptimizedGlassAdvanced.tsx", "../src/primitives/GlassCore.tsx", "../src/lib/utilsComprehensive.ts", "../src/primitives/motion/MotionFramer.tsx", "../src/primitives/MotionNative.tsx", "../src/animations/hooks/useMultiSpringBasic.ts", "../src/primitives/OptimizedGlassCore.tsx", "../src/primitives/LiquidGlassMaterial.tsx", "../src/utils/contrastGuard.ts", "../src/hooks/useLiquidGlassBackdrop.ts", "../src/primitives/LiquidGlassEffectGroup.tsx", "../src/primitives/LiquidGlassLayerProvider.tsx", "../src/primitives/LiquidGlassBackdropSampler.tsx", "../src/primitives/LiquidGlassConcentricFrame.tsx", "../src/primitives/LiquidGlassScrollEdge.tsx", "../src/primitives/LiquidGlassSourceTransition.tsx", "../src/lib/GlassLocalizationProvider.tsx", "../src/theme/GlassContext.tsx", "../src/theme/ThemeProvider.tsx", "../src/theme/designMatrix.ts", "../src/theme/themeConstants.ts", "../src/components/theme/PersonaPicker.tsx", "../src/components/layout/GlassAppShell.tsx", "../src/primitives/Slot.tsx", "../src/primitives/Label.tsx", "../src/primitives/Portal.tsx", "../src/primitives/DismissableLayer.tsx", "../src/primitives/FocusScope.tsx", "../src/primitives/RovingFocusGroup.tsx", "../src/primitives/Positioner.tsx", "../src/components/layout/GlassContainer.tsx", "../src/components/advanced/GlassAchievementSystem.tsx", "../src/utils/a11y.ts", "../src/components/accessibility/ContrastGuard.tsx", "../src/tokens/designConstants.ts", "../src/components/advanced/GlassBiometricAdaptation.tsx", "../src/contexts/MotionPreferenceContext.tsx", "../src/components/advanced/GlassEyeTracking.tsx", "../src/components/advanced/GlassPredictiveEngine.tsx", "../src/components/advanced/GlassSpatialAudio.tsx", "../src/components/layout/GlassStack.tsx", "../src/components/layout/Box.tsx", "../src/components/layout/GlassBox.tsx", "../src/components/layout/GlassFlex.tsx", "../src/components/layout/GlassGrid.tsx", "../src/components/layout/GlassMasonry.tsx", "../src/components/layout/GlassScrollArea.tsx", "../src/components/layout/GlassSeparator.tsx", "../src/components/layout/GlassSplitPane.tsx", "../src/components/layout/HStack.tsx", "../src/components/layout/VStack.tsx", "../src/components/layout/OptimizedGlassContainer.tsx", "../src/components/layout/ZSpaceAppLayout.tsx", "../src/utils/createGlassStyle.ts", "../src/components/navigation/GlassBottomNav.tsx", "../src/components/button/GlassButton.tsx", "../src/components/data-display/GlassBadge.tsx", "../src/components/navigation/GlassBreadcrumb.tsx", "../src/components/navigation/GlassCommandBar.tsx", "../src/components/navigation/GlassContextMenu.tsx", "../src/components/navigation/GlassDropdownMenu.tsx", "../src/components/navigation/GlassHeader.tsx", "../src/primitives/focus/FocusTrap.tsx", "../src/components/input/GlassInput.tsx", "../src/components/input/GlassTextarea.tsx", "../src/components/navigation/GlassMenubar.tsx", "../src/components/navigation/GlassMenuPrimitive.tsx", "../src/components/navigation/GlassMobileNav.tsx", "../src/components/navigation/GlassNavigation.tsx", "../src/contexts/AnimationContext.tsx", "../src/animations/physics/springPhysics.ts", "../src/utils/a11yHooks.ts", "../src/components/navigation/GlassNavigationMenu.tsx", "../src/components/navigation/GlassPagination.tsx", "../src/components/navigation/GlassPageTabs.tsx", "../src/components/navigation/GlassResponsiveNav.tsx", "../src/components/navigation/GlassSegmentedControl.tsx", "../src/components/navigation/LiquidGlassSegmentedControl.tsx", "../src/components/modal/GlassPopover.tsx", "../src/components/navigation/GlassSidebar.tsx", "../src/components/navigation/GlassTabBar.tsx", "../src/hooks/useAccessibilitySettings.ts", "../src/components/navigation/styled.tsx", "../src/components/navigation/GlassTabBar.module.css", "../src/components/navigation/components/TabItem.tsx", "../src/components/navigation/components/CollapsedMenu.tsx", "../src/components/navigation/components/ScrollButtons.tsx", "../src/components/navigation/hooks/useResponsive.ts", "../src/components/navigation/hooks/useTabAnimations.ts", "../src/components/navigation/utils/tabUtils.ts", "../src/components/navigation/GlassTabItem.tsx", "../src/components/navigation/GlassTabs.tsx", "../src/components/navigation/EnhancedGlassTabs.tsx", "../src/components/navigation/GlassToolbar.tsx", "../src/components/navigation/LiquidGlassToolbar.tsx", "../src/components/navigation/LiquidGlassBottomAccessory.tsx", "../src/components/navigation/LiquidGlassInsetSidebar.tsx", "../src/components/navigation/LiquidGlassInspectorPanel.tsx", "../src/components/navigation/LiquidGlassTabBar.tsx", "../src/components/modal/GlassBottomSheet.tsx", "../src/components/modal/LiquidGlassAdaptiveSheet.tsx", "../src/components/modal/GlassDialog.tsx", "../src/utils/focus.ts", "../src/components/modal/GlassDrawer.tsx", "../src/components/modal/GlassHoverCard.tsx", "../src/components/modal/GlassModal.tsx", "../src/components/modal/LiquidGlassPopoverMenu.tsx", "../src/components/input/GlassCheckbox.tsx", "../src/components/input/GlassCheckboxGroup.tsx", "../src/hooks/useMotionPreference.ts", "../src/utils/soundDesign.ts", "../src/components/input/GlassColorPicker.tsx", "../src/components/button/GlassFab.tsx", "../src/components/button/GlassMagneticButton.tsx", "../src/components/button/LiquidGlassButtonStyle.tsx", "../src/components/card/index.ts", "../src/components/card/GlassCard.tsx", "../src/utils/colorInput.ts", "../src/components/input/GlassCombobox.tsx", "../src/components/input/GlassDateField.tsx", "../src/components/input/GlassDatePicker.tsx", "../src/components/input/GlassDateRangePicker.tsx", "../src/components/input/GlassFieldGroup.tsx", "../src/components/input/GlassForm.tsx", "../src/components/input/GlassLabel.tsx", "../src/components/input/GlassFormField.tsx", "../src/components/input/GlassValidationMessage.tsx", "../src/components/input/GlassFormStepper.tsx", "../src/components/input/GlassFormTable.tsx", "../src/components/input/GlassMultiSelect.tsx", "../src/components/icons/ClearIcon.tsx", "../src/components/input/GlassMultiSelect.module.css", "../src/components/input/GlassMultiStepForm.tsx", "../src/components/data-display/GlassAccordion.tsx", "../src/components/data-display/GlassAlert.tsx", "../src/components/data-display/GlassAvatar.tsx", "../src/components/data-display/GlassBadgeLine.tsx", "../src/components/data-display/GlassDataGrid.tsx", "../src/components/data-display/GlassDataGrid.module.css", "../src/components/data-display/GlassDataGridPro.tsx", "../src/components/data-display/GlassDataTable.tsx", "../src/components/input/GlassSelect.tsx", "../src/components/data-display/GlassDiffViewer.tsx", "../src/components/data-display/GlassEmptyState.tsx", "../src/components/data-display/GlassErrorState.tsx", "../src/components/data-display/GlassHeatmap.tsx", "../src/components/data-display/GlassJSONViewer.tsx", "../src/components/data-display/GlassLoadingState.tsx", "../src/components/data-display/GlassLoadingSkeleton.tsx", "../src/components/data-display/GlassMetricChip.tsx", "../src/components/data-display/GlassProgress.tsx", "../src/components/data-display/GlassSchemaViewer.tsx", "../src/components/data-display/GlassSparkline.tsx", "../src/components/data-display/GlassStatusDot.tsx", "../src/components/data-display/GlassTimeline.tsx", "../src/components/data-display/GlassToast.tsx", "../src/components/data-display/GlassVirtualTable.tsx", "../src/components/data-display/LiquidGlassBadgeCluster.tsx", "../src/components/data-display/LiquidGlassCarouselRail.tsx", "../src/components/data-display/GlassSkeletonLoader.tsx", "../src/utils/errorBoundary.tsx", "../src/components/data-display/GlassSkeleton.tsx", "../src/components/data-display/GlassNotificationCenter.tsx", "../src/components/data-display/GlassAnimatedNumber.tsx", "../src/components/input/GlassRadioGroup.tsx", "../src/components/input/GlassSearchField.tsx", "../src/components/input/GlassSelectCompound.tsx", "../src/components/input/GlassSlider.tsx", "../src/components/input/GlassStep.tsx", "../src/components/input/GlassStepIcon.tsx", "../src/components/input/GlassStepLabel.tsx", "../src/components/input/GlassSwitch.tsx", "../src/components/input/GlassTimeField.tsx", "../src/components/input/GlassToggle.tsx", "../src/components/input/GlassWizard.tsx", "../src/components/input/LiquidGlassControlGroup.tsx", "../src/components/card/glass-card-link.tsx", "../src/components/card/GlowingCard.tsx", "../src/components/marketing/AuroraBackground.tsx", "../src/components/marketing/AuroraOrb.tsx", "../src/components/marketing/DisplayText.tsx", "../src/components/marketing/FeatureTile.tsx", "../src/components/marketing/ShowcaseCard.tsx", "../src/components/marketing/InstallCommand.tsx", "../src/components/marketing/LogoMark.tsx", "../src/components/charts/GlassAreaChart.tsx", "../src/components/charts/GlassBarChart.tsx", "../src/components/charts/GlassChart.tsx", "../src/components/charts/GlassLineChart.tsx", "../src/components/charts/GlassPieChart.tsx", "../src/components/charts/GlassChart.module.css", "../src/components/charts/GlassDataChart.tsx", "../src/components/charts/GlassDataChart.module.css", "../src/components/modal/GlassTooltip.tsx", "../src/components/charts/hooks/useQualityTier.ts", "../src/components/charts/utils/chartColors.ts", "../src/components/animations/GlassMotionController.tsx", "../src/components/interactive/GlassCodeEditor.tsx", "../src/components/interactive/GlassColorSchemeGenerator.tsx", "../src/components/interactive/GlassA11yAuditor.tsx", "../src/components/interactive/GlassComponentPlayground.tsx", "../src/components/interactive/GlassMindMap.tsx", "../src/components/interactive/GlassWhiteboard.tsx", "../src/components/houdini/HoudiniGlassProvider.tsx", "../src/components/houdini/HoudiniGlassCard.tsx", "../src/components/interactive/GlassAdvancedSearch.tsx", "../src/components/interactive/GlassAvatarGroup.tsx", "../src/components/interactive/GlassCarousel.tsx", "../src/components/interactive/GlassChat.tsx", "../src/components/interactive/GlassChatInput.tsx", "../src/components/interactive/GlassCoachmarks.tsx", "../src/components/interactive/GlassCommand.tsx", "../src/components/interactive/GlassCommandPalette.tsx", "../src/components/interactive/LiquidGlassCommandSurface.tsx", "../src/components/interactive/LiquidGlassMapControls.tsx", "../src/components/interactive/GlassCommentThread.tsx", "../src/components/interactive/GlassDraggable.tsx", "../src/components/interactive/GlassFacetSearch.tsx", "../src/components/interactive/GlassFileExplorer.tsx", "../src/components/interactive/GlassFileTree.tsx", "../src/components/interactive/GlassFileUpload.tsx", "../src/components/interactive/GlassFilterBar.tsx", "../src/components/interactive/GlassFilterPanel.tsx", "../src/components/interactive/GlassFocusRing.tsx", "../src/hooks/extended/useGlassFocus.ts", "../src/components/interactive/GlassFocusRing.module.css", "../src/components/interactive/GlassFormBuilder.tsx", "../src/components/interactive/GlassGallery.tsx", "../src/components/interactive/GlassImageViewer.tsx", "../src/components/interactive/GlassGradientPicker.tsx", "../src/components/interactive/GlassInfiniteScroll.tsx", "../src/components/interactive/GlassInlineEdit.tsx", "../src/components/interactive/GlassKanban.tsx", "../src/components/interactive/GlassKeyValueEditor.tsx", "../src/components/interactive/GlassLazyImage.tsx", "../src/components/interactive/GlassMentionList.tsx", "../src/components/interactive/GlassMessageList.tsx", "../src/components/interactive/GlassQueryBuilder.tsx", "../src/components/interactive/GlassReactionBar.tsx", "../src/components/interactive/GlassSearchInterface.tsx", "../src/components/interactive/GlassSpotlight.tsx", "../src/components/interactive/GlassStepper.tsx", "../src/components/interactive/GlassTagInput.tsx", "../src/components/interactive/GlassThemeDemo.tsx", "../src/components/data-display/Typography.tsx", "../src/components/interactive/GlassThemeSwitcher.tsx", "../src/components/interactive/CursorGlow.tsx", "../src/components/interactive/GlassUserPresence.tsx", "../src/components/interactive/GlassVideoPlayer.tsx", "../src/components/interactive/GlassVirtualList.tsx", "../src/components/ai/GlassIntelligentFormBuilder.tsx", "../src/hooks/useAccessibility.ts", "../src/hooks/usePerformance.ts", "../src/components/dashboard/GlassActivityFeed.tsx", "../src/components/dashboard/GlassChartWidget.tsx", "../src/components/dashboard/GlassKPICard.tsx", "../src/components/dashboard/GlassMetricCard.tsx", "../src/components/dashboard/GlassStatCard.tsx", "../src/components/dashboard/DimensionalDashboardContainer.tsx", "../src/components/calendar/GlassCalendar.tsx", "../src/components/templates/dashboard/GlassDashboard.tsx", "../src/components/templates/detail/GlassDetailView.tsx", "../src/components/templates/forms/GlassFormTemplate.tsx", "../src/components/templates/forms/GlassFormWizardSteps.tsx", "../src/components/templates/forms/GlassWizardTemplate.tsx", "../src/components/templates/list/GlassListView.tsx", "../src/components/data-display/GlassChip.tsx", "../src/components/data-display/GlassDivider.tsx", "../src/components/data-display/GlassGanttChart.tsx", "../src/components/data-display/GlassKanbanBoard.tsx", "../src/components/data-display/GlassMetricsGrid.tsx", "../src/components/data-display/GlassTreeView.tsx", "../src/components/backgrounds/GlassDynamicAtmosphere.tsx", "../src/core/zspace.ts", "../src/components/backgrounds/GlassDynamicAtmosphere.module.css", "../src/components/layouts/GlassMasonryGrid.tsx", "../src/components/editor/GlassRichTextEditor.tsx", "../src/components/chat/GlassTypingIndicator.tsx", "../src/components/accessibility/GlassA11y.tsx", "../src/components/advanced/LiquidGlassGPU.tsx", "../src/components/advanced/GlassParallaxLayers.tsx", "../src/components/advanced/GlassMeshGradient.tsx", "../src/components/advanced/GlassParticles.tsx", "../src/components/advanced/GlassMagneticCursor.tsx", "../src/components/advanced/GlassLiquidTransition.tsx", "../src/components/advanced/GlassWebGLShader.tsx", "../src/components/advanced/GlassEngine.tsx", "../src/components/advanced/BrandColorIntegration.tsx", "../src/components/advanced/IntelligentColorSystem.tsx", "../src/components/advanced/GlassMetaEngine.tsx", "../src/components/advanced/GlassNeuroSync.tsx", "../src/components/advanced/GlassSelfHealingSystem.tsx", "../src/components/advanced/GlassAutoComposer.tsx", "../src/components/advanced/GlassContextualEngine.tsx", "../src/components/advanced/GlassPerformanceOptimization.tsx", "../src/components/advanced/GlassQuantumStates.tsx", "../src/components/advanced/GlassFoldableSupport.tsx", "../src/components/advanced/GlassOrientationEffects.tsx", "../src/components/advanced/GlassContextAware.tsx", "../src/components/spatial/SpatialComputingEngine.tsx", "../src/components/ai/AIGlassThemeProvider.tsx", "../src/components/ai/GlassDeepDreamGlass.tsx", "../src/components/ai/GlassGANGenerator.tsx", "../src/components/ai/GlassGenerativeArt.tsx", "../src/components/search/GlassIntelligentSearch.tsx", "../src/components/search/LiquidGlassSearchField.tsx", "../src/components/search/LiquidGlassSearchTab.tsx", "../src/components/ai/GlassLiveFilter.tsx", "../src/components/ai/GlassMusicVisualizer.tsx", "../src/components/ai/NeuralWeightVisualization.tsx", "../src/components/ai/NeuromorphicLearningNetwork.tsx", "../src/components/ai/GlassStyleTransfer.tsx", "../src/components/animations/GlassTransitions.tsx", "../src/components/animations/AdvancedAnimations.tsx", "../src/components/accessibility/AccessibilityProvider.tsx", "../src/components/accessibility/GlassFocusIndicators.tsx", "../src/components/button/EnhancedGlassButton.tsx", "../src/components/effects/GlassPhysicsEngine.tsx", "../src/components/effects/GlassMorphingEngine.tsx", "../src/components/effects/Glass3DEngine.tsx", "../src/components/animations/OrganicAnimationEngine.tsx", "../src/utils/emotionalIntelligence.ts", "../src/utils/aiPersonalization.ts", "../src/components/charts/plugins/GalileoElementInteractionPlugin.ts", "../src/animations/physics/interpolation.ts", "../src/components/visualization/GlassAdvancedDataViz.tsx", "../src/components/website-components/GlassChartsDemo.tsx", "../src/components/immersive/Glass360Viewer.tsx", "../src/components/immersive/GlassARPreview.tsx", "../src/components/immersive/GlassFluidSimulation.tsx", "../src/components/immersive/GlassHologram.tsx", "../src/components/immersive/GlassParticleField.tsx", "../src/components/immersive/GlassVortexPortal.tsx", "../src/components/atmospheric/GlassAuroraDisplay.tsx", "../src/components/atmospheric/GlassBiomeSimulator.tsx", "../src/components/atmospheric/GlassNebulaClouds.tsx", "../src/components/atmospheric/GlassWeatherGlass.tsx", "../src/components/experiential/GlassMoodRing.tsx", "../src/components/advanced/GlassLiveCursorPresence.tsx", "../src/components/advanced/GlassReactions.tsx", "../src/components/advanced/LivingEcosystemSimulator.tsx", "../src/components/advanced/MolecularBondingInterface.tsx", "../src/components/advanced/MultiDimensionalGestureRecognizer.tsx", "../src/components/quantum/GlassCoherenceIndicator.tsx", "../src/components/quantum/GlassProbabilityCloud.tsx", "../src/components/quantum/GlassQuantumField.tsx", "../src/components/quantum/GlassQuantumTunnel.tsx", "../src/components/quantum/GlassSuperpositionalMenu.tsx", "../src/components/quantum/GlassWaveFunction.tsx", "../src/components/quantum/QuantumEntanglementVisualizer.tsx", "../src/components/quantum/QuantumNeuromorphicEngine.ts", "../src/components/collaboration/CollaborativeGlassWorkspace.tsx", "../src/components/collaboration/GlassCollaborationProvider.tsx", "../src/components/collaboration/GlassCollaborativeCursor.tsx", "../src/components/collaboration/GlassCollaborationDashboard.tsx", "../src/components/collaboration/GlassCollaborativeComments.tsx", "../src/components/collaboration/MultiUserGlassEditor.tsx", "../src/components/cms/GlassDragDropProvider.tsx", "../src/components/cms/GlassPageBuilder.tsx", "../src/components/cms/GlassComponentPalette.tsx", "../src/components/cms/GlassCanvas.tsx", "../src/components/cms/GlassPropertyPanel.tsx", "../src/components/cms/GlassPageStructure.tsx", "../src/components/ecommerce/GlassEcommerceProvider.tsx", "../src/components/ecommerce/GlassSmartShoppingCart.tsx", "../src/components/ecommerce/GlassProductRecommendations.tsx", "../src/components/image/GlassImageProcessingProvider.tsx", "../src/components/image/GlassIntelligentImageUploader.tsx", "../src/components/media/GlassMediaProvider.tsx", "../src/components/media/GlassAdvancedVideoPlayer.tsx", "../src/components/media/GlassAdvancedAudioPlayer.tsx", "../src/components/media/LiquidGlassMediaControls.tsx", "../src/components/media/LiquidGlassNowPlayingBar.tsx", "../src/components/media/LiquidGlassPhotoInspector.tsx", "../src/components/mobile/GlassActionSheet.tsx", "../src/components/showcase/LiquidGlassShowcase.tsx", "../src/components/mobile/GlassPullToRefresh.tsx", "../src/components/mobile/TouchGlassOptimization.tsx", "../src/components/social/GlassPresenceIndicator.tsx", "../src/components/social/GlassReactionBubbles.tsx", "../src/components/social/GlassSharedWhiteboard.tsx", "../src/components/social/GlassSocialFeed.tsx", "../src/components/social/GlassVoiceWaveform.tsx", "../src/components/voice/VoiceGlassControl.tsx", "../src/contexts/ConsciousnessStreamProvider.tsx", "../src/types/consciousness.ts", "../src/reports/componentInventory.ts", "../src/reports/legacyDocuments.ts", "../src/components/surfaces/GlassDepthLayer.tsx", "../src/components/layouts/GlassFractalLayout.tsx", "../src/components/layouts/GlassGoldenRatioGrid.tsx", "../src/components/layouts/GlassIslandLayout.tsx", "../src/components/layouts/GlassOrbitalMenu.tsx", "../src/components/layouts/GlassTessellation.tsx", "../src/components/surfaces/DimensionalGlass.tsx", "../src/components/surfaces/FrostedGlass.tsx", "../src/hooks/useGlassParallax.ts", "../src/components/surfaces/HeatGlass.tsx", "../src/components/surfaces/PageGlassContainer.tsx", "../src/components/surfaces/WidgetGlass.tsx", "../src/components/backgrounds/AtmosphericBackground.tsx", "../src/components/backgrounds/AtmosphericBackground.module.css", "../src/components/backgrounds/ParticleBackground.tsx", "../src/components/backgrounds/ParticleBackground.module.css", "../src/components/speed-dial/SpeedDial.tsx", "../src/components/speed-dial/SpeedDialAction.tsx", "../src/components/speed-dial/SpeedDialAction.module.css", "../src/components/speed-dial/SpeedDialIcon.tsx", "../src/components/speed-dial/SpeedDialIcon.module.css", "../src/components/speed-dial/SpeedDial.module.css", "../src/components/toggle-button/ToggleButton.tsx", "../src/components/toggle-button/ToggleButtonGroup.tsx", "../src/components/tree-view/TreeItem.tsx", "../src/components/tree-view/TreeView.tsx", "../src/components/tree-view/TreeView.module.css", "../src/components/tree-view/TreeItem.module.css", "../src/components/visual-feedback/FocusIndicator.tsx", "../src/components/visual-feedback/RippleButton.tsx", "../src/components/visual-feedback/RippleButton.module.css", "../src/components/visual-feedback/StateIndicator.tsx", "../src/components/visual-feedback/StateIndicator.module.css", "../src/components/visual-feedback/VisualFeedback.tsx", "../src/components/visual-feedback/VisualFeedback.module.css", "../src/components/image-list/ImageList.tsx", "../src/components/image-list/ImageList.module.css", "../src/components/image-list/ImageListItem.tsx", "../src/components/image-list/ImageListItem.module.css", "../src/components/image-list/ImageListItemBar.tsx", "../src/components/image-list/ImageListItemBar.module.css", "../src/components/cookie-consent/CompactCookieNotice.tsx", "../src/hooks/useGalileoStateSpring.ts", "../src/components/cookie-consent/CompactCookieNotice.module.css", "../src/components/cookie-consent/CookieConsent.tsx", "../src/components/cookie-consent/CookieConsent.module.css", "../src/components/cookie-consent/GlobalCookieConsent.tsx", "../src/components/cookie-consent/GlobalCookieConsent.module.css", "../src/components/ui-components/glass-panel.tsx", "../src/components/ui-components/GlassAccordionUI.tsx", "../src/components/ui-components/GlassCheckboxUI.tsx", "../src/components/website-components/GlassLinkButton.tsx", "../src/components/website-components/GlassPrismComparison.tsx", "../src/hooks/useAutoTextContrast.ts", "../src/components/website-components/GlassWipeSlider.tsx", "../src/lib/motionPrimitives.ts", "../src/components/website-components/MotionAwareGlass.tsx", "../src/hooks/useEnhancedPerformance.ts", "../src/core/mixins/performanceMixins.ts", "../src/hooks/useErrorBoundary.tsx", "../src/hooks/useGlassIntersection.ts", "../src/hooks/useGlassOptimization.tsx", "../src/hooks/useEnhancedReducedMotion.ts", "../src/hooks/usePhysicsInteraction.ts", "../src/hooks/useVirtualization.ts", "../src/hooks/useDeviceCapabilities.ts", "../src/components/charts/hooks/useChartPhysicsInteraction.ts", "../src/utils/adaptiveAI.ts", "../src/components/ssr/AuraGlassClientBoundary.tsx", "../src/hooks/physics/usePhysicsEngine.ts", "../src/types/common.ts", "../src/physics/AuraPhysicsEngine.ts", "../src/hooks/physics/usePhysicsLayout.ts", "../src/hooks/extended/use3DTransform.ts", "../src/hooks/extended/useAmbientTilt.ts", "../src/hooks/extended/useMagneticElement.ts", "../src/hooks/extended/useZSpaceAnimation.ts", "../src/core/mixins/zSpaceLayer.ts", "../src/hooks/extended/useGlassPerformance.ts", "../src/utils/ssr.ts", "../src/utils/performanceOptimizations.ts", "../src/hooks/extended/useSortableData.ts", "../src/hooks/extended/useDraggableListPhysics.ts", "../src/hooks/extended/useGalileoSprings.ts", "../src/animations/physics/galileoPhysicsSystem.ts", "../src/animations/physics/gesturePhysics.ts", "../src/animations/orchestration/useOrchestration.ts", "../src/core/mixins/edgeEffects.ts", "../src/core/mixins/glowEffects.ts", "../src/core/mixins/interactiveGlass.ts", "../src/animations/hooks/useMouseMagneticEffect.ts", "../src/animations/hooks/useAnimationSequenceBasic.ts", "../src/animations/physics/chartAnimations.ts", "../src/animations/orchestration/useAnimationSequenceOrchestrator.ts", "../src/animations/accessibleAnimation.ts", "../src/animations/physics/useMultiSpringPhysics.ts", "../src/utils/productionUtils.ts", "../src/utils/glassStyleProbes.ts", "../src/utils/consciousnessOptimization.ts", "../src/utils/dateAdapters.ts", "../src/utils/browserCompatibility.ts", "../src/core/productionCore.ts", "../src/utils/elementTypes.ts", "../src/utils/themeHelpers.ts", "../src/utils/random.ts", "../src/tokens/themeTokens.ts", "../src/ssr/StyleSheetManager.tsx", "../src/index.ts"],
  "sourcesContent": ["import * as React from \"react\";\n\nexport type GlassIconNode = readonly [\n  tag: keyof React.JSX.IntrinsicElements,\n  attrs: Record<string, string | number | boolean | undefined>,\n];\n\nexport interface GlassIconProps extends React.SVGProps<SVGSVGElement> {\n  size?: string | number;\n  absoluteStrokeWidth?: boolean;\n}\n\nexport type GlassIcon = React.ForwardRefExoticComponent<\n  Omit<GlassIconProps, \"ref\"> & React.RefAttributes<SVGSVGElement>\n>;\n\nexport function createGlassIcon(\n  displayName: string,\n  iconNode: readonly GlassIconNode[]\n): GlassIcon {\n  const Icon = React.forwardRef<SVGSVGElement, GlassIconProps>(\n    (\n      {\n        color = \"currentColor\",\n        size = 24,\n        strokeWidth = 2,\n        absoluteStrokeWidth,\n        children,\n        ...rest\n      },\n      ref\n    ) => {\n      const numericSize =\n        typeof size === \"number\" ? size : Number.parseFloat(size);\n      const renderedStrokeWidth =\n        absoluteStrokeWidth && Number.isFinite(numericSize) && numericSize > 0\n          ? (Number(strokeWidth) * 24) / numericSize\n          : strokeWidth;\n\n      return (\n        <svg\n          ref={ref}\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width={size}\n          height={size}\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke={color}\n          strokeWidth={renderedStrokeWidth}\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          {...rest}\n          aria-hidden={rest[\"aria-hidden\"] ?? true}\n        >\n          {iconNode.map(([tag, attrs], index) =>\n            React.createElement(tag, { key: index, ...attrs })\n          )}\n          {children}\n        </svg>\n      );\n    }\n  );\n\n  Icon.displayName = displayName;\n  return Icon;\n}\n", "import {\n  createGlassIcon,\n  type GlassIconNode,\n  type GlassIconProps,\n} from \"./createGlassIcon\";\n\nexport type {\n  GlassIcon as GlassIconComponent,\n  GlassIconNode,\n  GlassIconProps,\n} from \"./createGlassIcon\";\n\nconst check: GlassIconNode[] = [[\"path\", { d: \"m5 12 4 4L19 6\" }]];\nconst x: GlassIconNode[] = [\n  [\"path\", { d: \"M18 6 6 18\" }],\n  [\"path\", { d: \"m6 6 12 12\" }],\n];\nconst circle: GlassIconNode[] = [[\"circle\", { cx: 12, cy: 12, r: 9 }]];\nconst square: GlassIconNode[] = [\n  [\"rect\", { x: 5, y: 5, width: 14, height: 14, rx: 2 }],\n];\nconst dotCircle: GlassIconNode[] = [\n  ...circle,\n  [\"circle\", { cx: 12, cy: 12, r: 2, fill: \"currentColor\", stroke: \"none\" }],\n];\nconst alertCircle: GlassIconNode[] = [\n  ...circle,\n  [\"path\", { d: \"M12 7v6\" }],\n  [\"path\", { d: \"M12 17h.01\" }],\n];\nconst alertTriangle: GlassIconNode[] = [\n  [\"path\", { d: \"M12 3 22 20H2L12 3Z\" }],\n  [\"path\", { d: \"M12 9v5\" }],\n  [\"path\", { d: \"M12 17h.01\" }],\n];\nconst chevronRight: GlassIconNode[] = [[\"path\", { d: \"m9 18 6-6-6-6\" }]];\nconst chevronLeft: GlassIconNode[] = [[\"path\", { d: \"m15 18-6-6 6-6\" }]];\nconst chevronDown: GlassIconNode[] = [[\"path\", { d: \"m6 9 6 6 6-6\" }]];\nconst chevronUp: GlassIconNode[] = [[\"path\", { d: \"m18 15-6-6-6 6\" }]];\nconst arrowRight: GlassIconNode[] = [\n  [\"path\", { d: \"M5 12h14\" }],\n  [\"path\", { d: \"m13 6 6 6-6 6\" }],\n];\nconst arrowUp: GlassIconNode[] = [\n  [\"path\", { d: \"M12 19V5\" }],\n  [\"path\", { d: \"m6 11 6-6 6 6\" }],\n];\nconst arrowDown: GlassIconNode[] = [\n  [\"path\", { d: \"M12 5v14\" }],\n  [\"path\", { d: \"m6 13 6 6 6-6\" }],\n];\nconst plus: GlassIconNode[] = [\n  [\"path\", { d: \"M12 5v14\" }],\n  [\"path\", { d: \"M5 12h14\" }],\n];\nconst minus: GlassIconNode[] = [[\"path\", { d: \"M5 12h14\" }]];\nconst search: GlassIconNode[] = [\n  [\"circle\", { cx: 11, cy: 11, r: 7 }],\n  [\"path\", { d: \"m20 20-4.2-4.2\" }],\n];\nconst calendar: GlassIconNode[] = [\n  [\"rect\", { x: 3, y: 4, width: 18, height: 17, rx: 2 }],\n  [\"path\", { d: \"M8 2v4\" }],\n  [\"path\", { d: \"M16 2v4\" }],\n  [\"path\", { d: \"M3 10h18\" }],\n];\nconst clock: GlassIconNode[] = [...circle, [\"path\", { d: \"M12 7v5l3 2\" }]];\nconst user: GlassIconNode[] = [\n  [\"circle\", { cx: 12, cy: 8, r: 4 }],\n  [\"path\", { d: \"M5 21a7 7 0 0 1 14 0\" }],\n];\nconst users: GlassIconNode[] = [\n  [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2\" }],\n  [\"circle\", { cx: 9, cy: 7, r: 4 }],\n  [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\" }],\n  [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\" }],\n];\nconst file: GlassIconNode[] = [\n  [\"path\", { d: \"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z\" }],\n  [\"path\", { d: \"M14 2v6h6\" }],\n];\nconst folder: GlassIconNode[] = [\n  [\n    \"path\",\n    {\n      d: \"M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z\",\n    },\n  ],\n];\nconst image: GlassIconNode[] = [\n  [\"rect\", { x: 3, y: 5, width: 18, height: 14, rx: 2 }],\n  [\"circle\", { cx: 8, cy: 10, r: 1.5 }],\n  [\"path\", { d: \"m21 16-5-5L5 19\" }],\n];\nconst video: GlassIconNode[] = [\n  [\"rect\", { x: 3, y: 6, width: 13, height: 12, rx: 2 }],\n  [\"path\", { d: \"m16 10 5-3v10l-5-3Z\" }],\n];\nconst mail: GlassIconNode[] = [\n  [\"rect\", { x: 3, y: 5, width: 18, height: 14, rx: 2 }],\n  [\"path\", { d: \"m3 7 9 6 9-6\" }],\n];\nconst home: GlassIconNode[] = [\n  [\"path\", { d: \"m3 11 9-8 9 8\" }],\n  [\"path\", { d: \"M5 10v10h14V10\" }],\n  [\"path\", { d: \"M10 20v-6h4v6\" }],\n];\nconst settings: GlassIconNode[] = [\n  [\"circle\", { cx: 12, cy: 12, r: 3 }],\n  [\"path\", { d: \"M12 2v3\" }],\n  [\"path\", { d: \"M12 19v3\" }],\n  [\"path\", { d: \"M2 12h3\" }],\n  [\"path\", { d: \"M19 12h3\" }],\n  [\"path\", { d: \"m4.9 4.9 2.1 2.1\" }],\n  [\"path\", { d: \"m17 17 2.1 2.1\" }],\n  [\"path\", { d: \"m19.1 4.9-2.1 2.1\" }],\n  [\"path\", { d: \"m7 17-2.1 2.1\" }],\n];\nconst star: GlassIconNode[] = [\n  [\n    \"path\",\n    {\n      d: \"m12 2 3 6 6.5.9-4.7 4.6 1.1 6.5-5.9-3.1L6.1 20l1.1-6.5L2.5 8.9 9 8Z\",\n    },\n  ],\n];\nconst heart: GlassIconNode[] = [\n  [\n    \"path\",\n    {\n      d: \"M20.8 5.6a5.5 5.5 0 0 0-7.8 0L12 6.6l-1-1a5.5 5.5 0 0 0-7.8 7.8L12 22l8.8-8.6a5.5 5.5 0 0 0 0-7.8Z\",\n    },\n  ],\n];\nconst bell: GlassIconNode[] = [\n  [\"path\", { d: \"M18 8a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9\" }],\n  [\"path\", { d: \"M10 21h4\" }],\n];\nconst chartBars: GlassIconNode[] = [\n  [\"path\", { d: \"M4 19V9\" }],\n  [\"path\", { d: \"M12 19V5\" }],\n  [\"path\", { d: \"M20 19v-7\" }],\n];\nconst lineChart: GlassIconNode[] = [\n  [\"path\", { d: \"M3 19h18\" }],\n  [\"path\", { d: \"m5 15 4-4 4 3 6-8\" }],\n];\nconst activity: GlassIconNode[] = [[\"path\", { d: \"M3 12h4l3-8 4 16 3-8h4\" }]];\nconst trendingUp: GlassIconNode[] = [\n  [\"path\", { d: \"m3 17 6-6 4 4 8-8\" }],\n  [\"path\", { d: \"M14 7h7v7\" }],\n];\nconst trendingDown: GlassIconNode[] = [\n  [\"path\", { d: \"m3 7 6 6 4-4 8 8\" }],\n  [\"path\", { d: \"M14 17h7v-7\" }],\n];\nconst target: GlassIconNode[] = [\n  ...circle,\n  [\"circle\", { cx: 12, cy: 12, r: 5 }],\n  [\"circle\", { cx: 12, cy: 12, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n];\nconst zap: GlassIconNode[] = [[\"path\", { d: \"M13 2 4 14h7l-1 8 10-13h-7Z\" }]];\nconst palette: GlassIconNode[] = [\n  [\n    \"path\",\n    {\n      d: \"M12 3a9 9 0 0 0 0 18h1.5a2.5 2.5 0 0 0 0-5H12a2 2 0 0 1 0-4h1a8 8 0 0 0-1-9Z\",\n    },\n  ],\n  [\n    \"circle\",\n    { cx: 7.5, cy: 10.5, r: 0.7, fill: \"currentColor\", stroke: \"none\" },\n  ],\n  [\"circle\", { cx: 10, cy: 7.5, r: 0.7, fill: \"currentColor\", stroke: \"none\" }],\n  [\"circle\", { cx: 14, cy: 7.5, r: 0.7, fill: \"currentColor\", stroke: \"none\" }],\n];\nconst eye: GlassIconNode[] = [\n  [\"path\", { d: \"M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12Z\" }],\n  [\"circle\", { cx: 12, cy: 12, r: 3 }],\n];\nconst eyeOff: GlassIconNode[] = [\n  [\"path\", { d: \"m2 2 20 20\" }],\n  [\"path\", { d: \"M10.6 10.6a2 2 0 0 0 2.8 2.8\" }],\n  [\"path\", { d: \"M6.4 6.4C3.7 8.2 2 12 2 12s4 7 10 7c1.7 0 3.2-.5 4.5-1.2\" }],\n  [\"path\", { d: \"M14 5.2c4.9 1 8 6.8 8 6.8a17.5 17.5 0 0 1-2.2 3.1\" }],\n];\nconst lock: GlassIconNode[] = [\n  [\"rect\", { x: 5, y: 11, width: 14, height: 10, rx: 2 }],\n  [\"path\", { d: \"M8 11V7a4 4 0 0 1 8 0v4\" }],\n];\nconst unlock: GlassIconNode[] = [\n  [\"rect\", { x: 5, y: 11, width: 14, height: 10, rx: 2 }],\n  [\"path\", { d: \"M8 11V7a4 4 0 0 1 7.5-2\" }],\n];\nconst upload: GlassIconNode[] = [\n  [\"path\", { d: \"M12 16V4\" }],\n  [\"path\", { d: \"m6 10 6-6 6 6\" }],\n  [\"path\", { d: \"M4 20h16\" }],\n];\nconst download: GlassIconNode[] = [\n  [\"path\", { d: \"M12 4v12\" }],\n  [\"path\", { d: \"m6 10 6 6 6-6\" }],\n  [\"path\", { d: \"M4 20h16\" }],\n];\nconst cloud: GlassIconNode[] = [\n  [\n    \"path\",\n    { d: \"M17.5 19H7a5 5 0 0 1-.5-10 7 7 0 0 1 13.4 2.2A4 4 0 0 1 17.5 19Z\" },\n  ],\n];\nconst code: GlassIconNode[] = [\n  [\"path\", { d: \"m8 16-4-4 4-4\" }],\n  [\"path\", { d: \"m16 8 4 4-4 4\" }],\n  [\"path\", { d: \"m14 4-4 16\" }],\n];\nconst database: GlassIconNode[] = [\n  [\"ellipse\", { cx: 12, cy: 5, rx: 8, ry: 3 }],\n  [\"path\", { d: \"M4 5v14c0 1.7 3.6 3 8 3s8-1.3 8-3V5\" }],\n  [\"path\", { d: \"M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3\" }],\n];\nconst copy: GlassIconNode[] = [\n  [\"rect\", { x: 9, y: 9, width: 12, height: 12, rx: 2 }],\n  [\"path\", { d: \"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" }],\n];\nconst trash: GlassIconNode[] = [\n  [\"path\", { d: \"M3 6h18\" }],\n  [\"path\", { d: \"M8 6V4h8v2\" }],\n  [\"path\", { d: \"M19 6 18 21H6L5 6\" }],\n  [\"path\", { d: \"M10 11v6\" }],\n  [\"path\", { d: \"M14 11v6\" }],\n];\nconst refresh: GlassIconNode[] = [\n  [\"path\", { d: \"M21 12a9 9 0 0 1-15 6.7L3 16\" }],\n  [\"path\", { d: \"M3 12a9 9 0 0 1 15-6.7L21 8\" }],\n  [\"path\", { d: \"M3 21v-5h5\" }],\n  [\"path\", { d: \"M21 3v5h-5\" }],\n];\nconst rotateCcw: GlassIconNode[] = [\n  [\"path\", { d: \"M3 12a9 9 0 1 0 3-6.7L3 8\" }],\n  [\"path\", { d: \"M3 3v5h5\" }],\n];\nconst rotateCw: GlassIconNode[] = [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-3-6.7L21 8\" }],\n  [\"path\", { d: \"M21 3v5h-5\" }],\n];\nconst play: GlassIconNode[] = [[\"path\", { d: \"m8 5 12 7-12 7Z\" }]];\nconst pause: GlassIconNode[] = [\n  [\"path\", { d: \"M8 5v14\" }],\n  [\"path\", { d: \"M16 5v14\" }],\n];\nconst mic: GlassIconNode[] = [\n  [\"rect\", { x: 9, y: 2, width: 6, height: 12, rx: 3 }],\n  [\"path\", { d: \"M5 10a7 7 0 0 0 14 0\" }],\n  [\"path\", { d: \"M12 17v5\" }],\n  [\"path\", { d: \"M8 22h8\" }],\n];\nconst micOff: GlassIconNode[] = [...mic, [\"path\", { d: \"m2 2 20 20\" }]];\nconst message: GlassIconNode[] = [\n  [\"path\", { d: \"M21 12a8 8 0 0 1-8 8H7l-4 3 1.2-5A8 8 0 1 1 21 12Z\" }],\n];\nconst moreHorizontal: GlassIconNode[] = [\n  [\"circle\", { cx: 6, cy: 12, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n  [\"circle\", { cx: 12, cy: 12, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n  [\"circle\", { cx: 18, cy: 12, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n];\nconst moreVertical: GlassIconNode[] = [\n  [\"circle\", { cx: 12, cy: 6, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n  [\"circle\", { cx: 12, cy: 12, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n  [\"circle\", { cx: 12, cy: 18, r: 1, fill: \"currentColor\", stroke: \"none\" }],\n];\nconst menu: GlassIconNode[] = [\n  [\"path\", { d: \"M4 6h16\" }],\n  [\"path\", { d: \"M4 12h16\" }],\n  [\"path\", { d: \"M4 18h16\" }],\n];\nconst mapPin: GlassIconNode[] = [\n  [\"path\", { d: \"M20 10c0 5-8 12-8 12S4 15 4 10a8 8 0 1 1 16 0Z\" }],\n  [\"circle\", { cx: 12, cy: 10, r: 3 }],\n];\nconst shield: GlassIconNode[] = [\n  [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z\" }],\n];\nconst sparkles: GlassIconNode[] = [\n  [\"path\", { d: \"m12 3 1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8Z\" }],\n  [\"path\", { d: \"m19 15 .8 2.2L22 18l-2.2.8L19 21l-.8-2.2L16 18l2.2-.8Z\" }],\n];\nconst sun: GlassIconNode[] = [\n  [\"circle\", { cx: 12, cy: 12, r: 4 }],\n  [\"path\", { d: \"M12 2v2\" }],\n  [\"path\", { d: \"M12 20v2\" }],\n  [\"path\", { d: \"m4.9 4.9 1.4 1.4\" }],\n  [\"path\", { d: \"m17.7 17.7 1.4 1.4\" }],\n  [\"path\", { d: \"M2 12h2\" }],\n  [\"path\", { d: \"M20 12h2\" }],\n  [\"path\", { d: \"m4.9 19.1 1.4-1.4\" }],\n  [\"path\", { d: \"m17.7 6.3 1.4-1.4\" }],\n];\nconst moon: GlassIconNode[] = [\n  [\"path\", { d: \"M21 13a8 8 0 1 1-10-10 7 7 0 0 0 10 10Z\" }],\n];\nconst volume: GlassIconNode[] = [\n  [\"path\", { d: \"M11 5 6 9H3v6h3l5 4Z\" }],\n  [\"path\", { d: \"M15 9a5 5 0 0 1 0 6\" }],\n];\nconst volume2: GlassIconNode[] = [\n  ...volume,\n  [\"path\", { d: \"M18 6a9 9 0 0 1 0 12\" }],\n];\nconst maximize: GlassIconNode[] = [\n  [\"path\", { d: \"M8 3H3v5\" }],\n  [\"path\", { d: \"M16 3h5v5\" }],\n  [\"path\", { d: \"M21 16v5h-5\" }],\n  [\"path\", { d: \"M3 16v5h5\" }],\n];\nconst minimize: GlassIconNode[] = [\n  [\"path\", { d: \"M8 3v5H3\" }],\n  [\"path\", { d: \"M16 3v5h5\" }],\n  [\"path\", { d: \"M21 16h-5v5\" }],\n  [\"path\", { d: \"M3 16h5v5\" }],\n];\nconst send: GlassIconNode[] = [\n  [\"path\", { d: \"M22 2 11 13\" }],\n  [\"path\", { d: \"m22 2-7 20-4-9-9-4Z\" }],\n];\nconst paperclip: GlassIconNode[] = [\n  [\n    \"path\",\n    {\n      d: \"m21 12-8.5 8.5a6 6 0 0 1-8.5-8.5L13 3a4 4 0 0 1 5.7 5.7l-9 9a2 2 0 0 1-2.8-2.8L15 6.8\",\n    },\n  ],\n];\nconst bold: GlassIconNode[] = [\n  [\"path\", { d: \"M7 5h6a4 4 0 0 1 0 8H7Z\" }],\n  [\"path\", { d: \"M7 13h7a4 4 0 0 1 0 8H7Z\" }],\n  [\"path\", { d: \"M7 5v16\" }],\n];\nconst italic: GlassIconNode[] = [\n  [\"path\", { d: \"M11 5h6\" }],\n  [\"path\", { d: \"M7 19h6\" }],\n  [\"path\", { d: \"m14 5-4 14\" }],\n];\nconst underline: GlassIconNode[] = [\n  [\"path\", { d: \"M7 5v6a5 5 0 0 0 10 0V5\" }],\n  [\"path\", { d: \"M5 21h14\" }],\n];\nconst grid: GlassIconNode[] = [\n  [\"rect\", { x: 3, y: 3, width: 7, height: 7, rx: 1 }],\n  [\"rect\", { x: 14, y: 3, width: 7, height: 7, rx: 1 }],\n  [\"rect\", { x: 3, y: 14, width: 7, height: 7, rx: 1 }],\n  [\"rect\", { x: 14, y: 14, width: 7, height: 7, rx: 1 }],\n];\nconst list: GlassIconNode[] = [\n  [\"path\", { d: \"M8 6h13\" }],\n  [\"path\", { d: \"M8 12h13\" }],\n  [\"path\", { d: \"M8 18h13\" }],\n  [\"path\", { d: \"M3 6h.01\" }],\n  [\"path\", { d: \"M3 12h.01\" }],\n  [\"path\", { d: \"M3 18h.01\" }],\n];\n\nexport const Accessibility = createGlassIcon(\"Accessibility\", [\n  ...circle,\n  [\"path\", { d: \"M12 7v10\" }],\n  [\"path\", { d: \"M8 10h8\" }],\n  [\"path\", { d: \"m9 21 3-6 3 6\" }],\n]);\nexport const Activity = createGlassIcon(\"Activity\", activity);\nexport const AlertCircle = createGlassIcon(\"AlertCircle\", alertCircle);\nexport const AlertTriangle = createGlassIcon(\"AlertTriangle\", alertTriangle);\nexport const Archive = createGlassIcon(\"Archive\", [\n  [\"path\", { d: \"M3 5h18v4H3Z\" }],\n  [\"path\", { d: \"M5 9v10h14V9\" }],\n  [\"path\", { d: \"M10 13h4\" }],\n]);\nexport const ArrowRight = createGlassIcon(\"ArrowRight\", arrowRight);\nexport const ArrowUp = createGlassIcon(\"ArrowUp\", arrowUp);\nexport const ArrowDown = createGlassIcon(\"ArrowDown\", arrowDown);\nexport const BarChart3 = createGlassIcon(\"BarChart3\", chartBars);\nexport const Bell = createGlassIcon(\"Bell\", bell);\nexport const Bold = createGlassIcon(\"Bold\", bold);\nexport const BookOpen = createGlassIcon(\"BookOpen\", [\n  [\"path\", { d: \"M4 5a3 3 0 0 1 3-3h13v17H7a3 3 0 0 0-3 3Z\" }],\n  [\"path\", { d: \"M4 5v17\" }],\n]);\nexport const Brain = createGlassIcon(\"Brain\", [\n  [\n    \"path\",\n    {\n      d: \"M8 6a4 4 0 0 1 8 0 4 4 0 0 1 2 7 4 4 0 0 1-4 6h-4a4 4 0 0 1-4-6 4 4 0 0 1 2-7Z\",\n    },\n  ],\n  [\"path\", { d: \"M12 4v16\" }],\n]);\nexport const Building2 = createGlassIcon(\"Building2\", [\n  [\"rect\", { x: 4, y: 3, width: 16, height: 18, rx: 2 }],\n  [\"path\", { d: \"M9 8h.01M15 8h.01M9 12h.01M15 12h.01M9 16h.01M15 16h.01\" }],\n]);\nexport const Calendar = createGlassIcon(\"Calendar\", calendar);\nexport const Camera = createGlassIcon(\"Camera\", [\n  [\n    \"path\",\n    {\n      d: \"M5 7h3l2-3h4l2 3h3a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2Z\",\n    },\n  ],\n  [\"circle\", { cx: 12, cy: 13, r: 4 }],\n]);\nexport const Check = createGlassIcon(\"Check\", check);\nexport const CheckCheck = createGlassIcon(\"CheckCheck\", [\n  [\"path\", { d: \"m3 12 3 3 6-6\" }],\n  [\"path\", { d: \"m11 12 3 3 7-8\" }],\n]);\nexport const CheckCircle = createGlassIcon(\"CheckCircle\", [\n  ...circle,\n  ...check,\n]);\nexport const CheckCircle2 = CheckCircle;\nexport const ChevronDown = createGlassIcon(\"ChevronDown\", chevronDown);\nexport const ChevronLeft = createGlassIcon(\"ChevronLeft\", chevronLeft);\nexport const ChevronRight = createGlassIcon(\"ChevronRight\", chevronRight);\nexport const ChevronUp = createGlassIcon(\"ChevronUp\", chevronUp);\nexport const ChevronsLeft = createGlassIcon(\"ChevronsLeft\", [\n  [\"path\", { d: \"m11 17-5-5 5-5\" }],\n  [\"path\", { d: \"m18 17-5-5 5-5\" }],\n]);\nexport const ChevronsRight = createGlassIcon(\"ChevronsRight\", [\n  [\"path\", { d: \"m6 17 5-5-5-5\" }],\n  [\"path\", { d: \"m13 17 5-5-5-5\" }],\n]);\nexport const Circle = createGlassIcon(\"Circle\", circle);\nexport const ClipboardPaste = createGlassIcon(\"ClipboardPaste\", [\n  [\"path\", { d: \"M9 3h6l1 2h3v16H5V5h3Z\" }],\n  [\"path\", { d: \"M9 13h6\" }],\n  [\"path\", { d: \"m12 10 3 3-3 3\" }],\n]);\nexport const Clock = createGlassIcon(\"Clock\", clock);\nexport const Cloud = createGlassIcon(\"Cloud\", cloud);\nexport const CloudUpload = createGlassIcon(\"CloudUpload\", [\n  ...cloud,\n  [\"path\", { d: \"M12 16V9\" }],\n  [\"path\", { d: \"m8 13 4-4 4 4\" }],\n]);\nexport const Code = createGlassIcon(\"Code\", code);\nexport const Code2 = Code;\nexport const Columns3 = createGlassIcon(\"Columns3\", [\n  [\"rect\", { x: 3, y: 4, width: 18, height: 16, rx: 2 }],\n  [\"path\", { d: \"M9 4v16\" }],\n  [\"path\", { d: \"M15 4v16\" }],\n]);\nexport const Contrast = createGlassIcon(\"Contrast\", [\n  ...circle,\n  [\n    \"path\",\n    { d: \"M12 3a9 9 0 0 0 0 18Z\", fill: \"currentColor\", stroke: \"none\" },\n  ],\n]);\nexport const Copy = createGlassIcon(\"Copy\", copy);\nexport const Cpu = createGlassIcon(\"Cpu\", [\n  [\"rect\", { x: 8, y: 8, width: 8, height: 8, rx: 1 }],\n  [\n    \"path\",\n    { d: \"M4 10h4M4 14h4M16 10h4M16 14h4M10 4v4M14 4v4M10 16v4M14 16v4\" },\n  ],\n]);\nexport const CreditCard = createGlassIcon(\"CreditCard\", [\n  [\"rect\", { x: 3, y: 5, width: 18, height: 14, rx: 2 }],\n  [\"path\", { d: \"M3 10h18\" }],\n]);\nexport const Crown = createGlassIcon(\"Crown\", [\n  [\"path\", { d: \"m3 7 5 4 4-7 4 7 5-4-2 12H5Z\" }],\n]);\nexport const Database = createGlassIcon(\"Database\", database);\nexport const Diamond = createGlassIcon(\"Diamond\", [\n  [\"path\", { d: \"m12 2 9 10-9 10L3 12Z\" }],\n]);\nexport const DollarSign = createGlassIcon(\"DollarSign\", [\n  [\"path\", { d: \"M12 2v20\" }],\n  [\"path\", { d: \"M17 5H9.5a3.5 3.5 0 0 0 0 7H14a3.5 3.5 0 0 1 0 7H6\" }],\n]);\nexport const Download = createGlassIcon(\"Download\", download);\nexport const Droplets = createGlassIcon(\"Droplets\", [\n  [\"path\", { d: \"M7 3s5 5 5 9a5 5 0 0 1-10 0c0-4 5-9 5-9Z\" }],\n  [\"path\", { d: \"M17 8s4 4 4 7a4 4 0 0 1-8 0c0-3 4-7 4-7Z\" }],\n]);\nexport const Edit = createGlassIcon(\"Edit\", [\n  [\"path\", { d: \"M12 20h9\" }],\n  [\"path\", { d: \"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z\" }],\n]);\nexport const Eye = createGlassIcon(\"Eye\", eye);\nexport const EyeOff = createGlassIcon(\"EyeOff\", eyeOff);\nexport const File = createGlassIcon(\"File\", file);\nexport const FileCheck2 = createGlassIcon(\"FileCheck2\", [...file, ...check]);\nexport const FilePenLine = createGlassIcon(\"FilePenLine\", [\n  ...file,\n  [\"path\", { d: \"m9 16 6-6 2 2-6 6H9Z\" }],\n]);\nexport const FileText = createGlassIcon(\"FileText\", [\n  ...file,\n  [\"path\", { d: \"M8 12h8\" }],\n  [\"path\", { d: \"M8 16h6\" }],\n]);\nexport const Filter = createGlassIcon(\"Filter\", [\n  [\"path\", { d: \"M4 5h16l-6 7v6l-4 2v-8Z\" }],\n]);\nexport const Flame = createGlassIcon(\"Flame\", [\n  [\n    \"path\",\n    { d: \"M12 22a7 7 0 0 0 7-7c0-5-4-7-5-12-3 3-8 6-8 12a6 6 0 0 0 6 7Z\" },\n  ],\n]);\nexport const Flower = createGlassIcon(\"Flower\", [\n  [\"circle\", { cx: 12, cy: 12, r: 2 }],\n  [\n    \"path\",\n    {\n      d: \"M12 2c2 3 2 5 0 8-2-3-2-5 0-8ZM12 22c-2-3-2-5 0-8 2 3 2 5 0 8ZM2 12c3-2 5-2 8 0-3 2-5 2-8 0ZM22 12c-3 2-5 2-8 0 3-2 5-2 8 0Z\",\n    },\n  ],\n]);\nexport const Folder = createGlassIcon(\"Folder\", folder);\nexport const FolderKanban = Folder;\nexport const FolderOpen = createGlassIcon(\"FolderOpen\", [\n  ...folder,\n  [\"path\", { d: \"M3 18 6 10h15l-3 8\" }],\n]);\nexport const FolderSearch = createGlassIcon(\"FolderSearch\", [\n  ...folder,\n  ...search,\n]);\nexport const Gauge = createGlassIcon(\"Gauge\", [\n  [\"path\", { d: \"M4 14a8 8 0 0 1 16 0\" }],\n  [\"path\", { d: \"M12 14l4-4\" }],\n  [\"path\", { d: \"M6 20h12\" }],\n]);\nexport const Gift = createGlassIcon(\"Gift\", [\n  [\"rect\", { x: 3, y: 8, width: 18, height: 13, rx: 2 }],\n  [\"path\", { d: \"M12 8v13\" }],\n  [\"path\", { d: \"M3 12h18\" }],\n  [\"path\", { d: \"M7.5 8A2.5 2.5 0 1 1 12 6a2.5 2.5 0 1 1 4.5 2\" }],\n]);\nexport const Globe = createGlassIcon(\"Globe\", [\n  ...circle,\n  [\"path\", { d: \"M3 12h18\" }],\n  [\"path\", { d: \"M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18Z\" }],\n]);\nexport const Grid = createGlassIcon(\"Grid\", grid);\nexport const Grid3X3 = createGlassIcon(\"Grid3X3\", [\n  [\"path\", { d: \"M3 3h18v18H3Z\" }],\n  [\"path\", { d: \"M3 9h18M3 15h18M9 3v18M15 3v18\" }],\n]);\nexport const GripVertical = createGlassIcon(\"GripVertical\", [\n  [\"path\", { d: \"M9 5h.01M15 5h.01M9 12h.01M15 12h.01M9 19h.01M15 19h.01\" }],\n]);\nexport const Hand = createGlassIcon(\"Hand\", [\n  [\"path\", { d: \"M8 13V5a2 2 0 0 1 4 0v6\" }],\n  [\"path\", { d: \"M12 11V4a2 2 0 0 1 4 0v8\" }],\n  [\"path\", { d: \"M16 12V8a2 2 0 0 1 4 0v5a7 7 0 0 1-14 0v-2a2 2 0 0 1 2-2Z\" }],\n]);\nexport const HardDrive = createGlassIcon(\"HardDrive\", [\n  [\"rect\", { x: 3, y: 5, width: 18, height: 14, rx: 2 }],\n  [\"path\", { d: \"M3 15h18\" }],\n  [\"path\", { d: \"M7 18h.01M11 18h.01\" }],\n]);\nexport const Hash = createGlassIcon(\"Hash\", [\n  [\"path\", { d: \"M4 9h16M4 15h16M10 3 8 21M16 3l-2 18\" }],\n]);\nexport const Heart = createGlassIcon(\"Heart\", heart);\nexport const HelpCircle = createGlassIcon(\"HelpCircle\", [\n  ...circle,\n  [\"path\", { d: \"M9.5 9a2.5 2.5 0 0 1 5 0c0 2-2.5 2-2.5 4\" }],\n  [\"path\", { d: \"M12 17h.01\" }],\n]);\nexport const Hexagon = createGlassIcon(\"Hexagon\", [\n  [\"path\", { d: \"M21 16V8l-9-5-9 5v8l9 5Z\" }],\n]);\nexport const History = createGlassIcon(\"History\", [\n  [\"path\", { d: \"M3 12a9 9 0 1 0 3-6.7L3 8\" }],\n  [\"path\", { d: \"M3 3v5h5\" }],\n  [\"path\", { d: \"M12 7v5l3 2\" }],\n]);\nexport const Home = createGlassIcon(\"Home\", home);\nexport const Image = createGlassIcon(\"Image\", image);\nexport const Info = createGlassIcon(\"Info\", [\n  ...circle,\n  [\"path\", { d: \"M12 11v5\" }],\n  [\"path\", { d: \"M12 8h.01\" }],\n]);\nexport const Italic = createGlassIcon(\"Italic\", italic);\nexport const Keyboard = createGlassIcon(\"Keyboard\", [\n  [\"rect\", { x: 3, y: 5, width: 18, height: 14, rx: 2 }],\n  [\"path\", { d: \"M7 9h.01M11 9h.01M15 9h.01M17 13H7\" }],\n]);\nexport const Layers = createGlassIcon(\"Layers\", [\n  [\"path\", { d: \"m12 2 10 5-10 5L2 7Z\" }],\n  [\"path\", { d: \"m2 12 10 5 10-5\" }],\n  [\"path\", { d: \"m2 17 10 5 10-5\" }],\n]);\nexport const LayoutDashboard = createGlassIcon(\"LayoutDashboard\", [\n  [\"rect\", { x: 3, y: 3, width: 7, height: 9, rx: 1 }],\n  [\"rect\", { x: 14, y: 3, width: 7, height: 5, rx: 1 }],\n  [\"rect\", { x: 14, y: 12, width: 7, height: 9, rx: 1 }],\n  [\"rect\", { x: 3, y: 16, width: 7, height: 5, rx: 1 }],\n]);\nexport const Leaf = createGlassIcon(\"Leaf\", [\n  [\"path\", { d: \"M20 3c-8 1-14 7-15 15 8-1 14-7 15-15Z\" }],\n  [\"path\", { d: \"M5 18 14 9\" }],\n]);\nexport const LineChart = createGlassIcon(\"LineChart\", lineChart);\nexport const Link = createGlassIcon(\"Link\", [\n  [\"path\", { d: \"M10 13a5 5 0 0 0 7 0l2-2a5 5 0 0 0-7-7l-1 1\" }],\n  [\"path\", { d: \"M14 11a5 5 0 0 0-7 0l-2 2a5 5 0 0 0 7 7l1-1\" }],\n]);\nexport const List = createGlassIcon(\"List\", list);\nexport const Loader2 = createGlassIcon(\"Loader2\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-6.2-8.6\" }],\n]);\nexport const Lock = createGlassIcon(\"Lock\", lock);\nexport const Mail = createGlassIcon(\"Mail\", mail);\nexport const MapPin = createGlassIcon(\"MapPin\", mapPin);\nexport const Maximize = createGlassIcon(\"Maximize\", maximize);\nexport const Maximize2 = Maximize;\nexport const Menu = createGlassIcon(\"Menu\", menu);\nexport const MessageCircle = createGlassIcon(\"MessageCircle\", message);\nexport const MessageSquare = createGlassIcon(\"MessageSquare\", message);\nexport const MessageSquareText = createGlassIcon(\"MessageSquareText\", [\n  ...message,\n  [\"path\", { d: \"M8 10h8M8 14h5\" }],\n]);\nexport const Mic = createGlassIcon(\"Mic\", mic);\nexport const MicOff = createGlassIcon(\"MicOff\", micOff);\nexport const Minimize = createGlassIcon(\"Minimize\", minimize);\nexport const Minimize2 = Minimize;\nexport const Minus = createGlassIcon(\"Minus\", minus);\nexport const Monitor = createGlassIcon(\"Monitor\", [\n  [\"rect\", { x: 3, y: 4, width: 18, height: 13, rx: 2 }],\n  [\"path\", { d: \"M8 21h8M12 17v4\" }],\n]);\nexport const Moon = createGlassIcon(\"Moon\", moon);\nexport const MoreHorizontal = createGlassIcon(\"MoreHorizontal\", moreHorizontal);\nexport const MoreVertical = createGlassIcon(\"MoreVertical\", moreVertical);\nexport const MousePointer2 = createGlassIcon(\"MousePointer2\", [\n  [\"path\", { d: \"m4 3 7 18 2-8 8-2Z\" }],\n]);\nexport const Move = createGlassIcon(\"Move\", [\n  [\"path\", { d: \"M12 2v20M2 12h20\" }],\n  [\"path\", { d: \"m15 5-3-3-3 3M15 19l-3 3-3-3M5 9l-3 3 3 3M19 9l3 3-3 3\" }],\n]);\nexport const Music = createGlassIcon(\"Music\", [\n  [\"path\", { d: \"M9 18V5l12-2v13\" }],\n  [\"circle\", { cx: 6, cy: 18, r: 3 }],\n  [\"circle\", { cx: 18, cy: 16, r: 3 }],\n]);\nexport const Palette = createGlassIcon(\"Palette\", palette);\nexport const PanelsTopLeft = createGlassIcon(\"PanelsTopLeft\", [\n  [\"rect\", { x: 3, y: 3, width: 18, height: 18, rx: 2 }],\n  [\"path\", { d: \"M3 9h18M9 9v12\" }],\n]);\nexport const Paperclip = createGlassIcon(\"Paperclip\", paperclip);\nexport const Pause = createGlassIcon(\"Pause\", pause);\nexport const Phone = createGlassIcon(\"Phone\", [\n  [\n    \"path\",\n    {\n      d: \"M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1A19.5 19.5 0 0 1 3.2 10.8 19.8 19.8 0 0 1 .1 2.2 2 2 0 0 1 2.1 0h3a2 2 0 0 1 2 1.7l.5 3a2 2 0 0 1-.6 1.8L5.7 7.8a16 16 0 0 0 6.5 6.5l1.3-1.3a2 2 0 0 1 1.8-.6l3 .5a2 2 0 0 1 1.7 2Z\",\n      transform: \"translate(1 1) scale(.92)\",\n    },\n  ],\n]);\nexport const PieChart = createGlassIcon(\"PieChart\", [\n  [\"path\", { d: \"M12 2v10h10A10 10 0 1 1 12 2Z\" }],\n  [\"path\", { d: \"M14 2.2A10 10 0 0 1 21.8 10H14Z\" }],\n]);\nexport const Play = createGlassIcon(\"Play\", play);\nexport const Plus = createGlassIcon(\"Plus\", plus);\nexport const Redo = createGlassIcon(\"Redo\", [\n  [\"path\", { d: \"M21 7v6h-6\" }],\n  [\"path\", { d: \"M3 17a9 9 0 0 1 15-6.7L21 13\" }],\n]);\nexport const RefreshCw = createGlassIcon(\"RefreshCw\", refresh);\nexport const Reply = createGlassIcon(\"Reply\", [\n  [\"path\", { d: \"m9 17-6-5 6-5v4h5a7 7 0 0 1 7 7v1\" }],\n]);\nexport const RotateCcw = createGlassIcon(\"RotateCcw\", rotateCcw);\nexport const RotateCw = createGlassIcon(\"RotateCw\", rotateCw);\nexport const Save = createGlassIcon(\"Save\", [\n  [\"path\", { d: \"M5 3h12l2 2v16H5Z\" }],\n  [\"path\", { d: \"M8 3v6h8V3\" }],\n  [\"path\", { d: \"M8 21v-7h8v7\" }],\n]);\nexport const Search = createGlassIcon(\"Search\", search);\nexport const Send = createGlassIcon(\"Send\", send);\nexport const Server = createGlassIcon(\"Server\", [\n  [\"rect\", { x: 4, y: 3, width: 16, height: 8, rx: 2 }],\n  [\"rect\", { x: 4, y: 13, width: 16, height: 8, rx: 2 }],\n  [\"path\", { d: \"M8 7h.01M8 17h.01\" }],\n]);\nexport const Settings = createGlassIcon(\"Settings\", settings);\nexport const Share = createGlassIcon(\"Share\", [\n  [\"path\", { d: \"M4 12v7h16v-7\" }],\n  [\"path\", { d: \"M12 3v12\" }],\n  [\"path\", { d: \"m7 8 5-5 5 5\" }],\n]);\nexport const Share2 = createGlassIcon(\"Share2\", [\n  [\"circle\", { cx: 18, cy: 5, r: 3 }],\n  [\"circle\", { cx: 6, cy: 12, r: 3 }],\n  [\"circle\", { cx: 18, cy: 19, r: 3 }],\n  [\"path\", { d: \"m8.6 13.5 6.8 4M15.4 6.5l-6.8 4\" }],\n]);\nexport const Shield = createGlassIcon(\"Shield\", shield);\nexport const ShieldCheck = createGlassIcon(\"ShieldCheck\", [\n  ...shield,\n  ...check,\n]);\nexport const Shuffle = createGlassIcon(\"Shuffle\", [\n  [\"path\", { d: \"M16 3h5v5\" }],\n  [\"path\", { d: \"M4 20 21 3\" }],\n  [\"path\", { d: \"M21 16v5h-5\" }],\n  [\"path\", { d: \"m15 15 6 6\" }],\n  [\"path\", { d: \"M4 4l5 5\" }],\n]);\nexport const SkipBack = createGlassIcon(\"SkipBack\", [\n  [\"path\", { d: \"M19 20 9 12l10-8Z\" }],\n  [\"path\", { d: \"M5 19V5\" }],\n]);\nexport const SkipForward = createGlassIcon(\"SkipForward\", [\n  [\"path\", { d: \"m5 4 10 8-10 8Z\" }],\n  [\"path\", { d: \"M19 5v14\" }],\n]);\nexport const SlidersHorizontal = createGlassIcon(\"SlidersHorizontal\", [\n  [\"path\", { d: \"M3 6h18M3 12h18M3 18h18\" }],\n  [\"circle\", { cx: 8, cy: 6, r: 2 }],\n  [\"circle\", { cx: 16, cy: 12, r: 2 }],\n  [\"circle\", { cx: 10, cy: 18, r: 2 }],\n]);\nexport const Smile = createGlassIcon(\"Smile\", [\n  ...circle,\n  [\"path\", { d: \"M8 14s1.5 2 4 2 4-2 4-2\" }],\n  [\"path\", { d: \"M9 9h.01M15 9h.01\" }],\n]);\nexport const Snowflake = createGlassIcon(\"Snowflake\", [\n  [\"path\", { d: \"M12 2v20M4 6l16 12M20 6 4 18\" }],\n]);\nexport const SortAsc = createGlassIcon(\"SortAsc\", [\n  [\"path\", { d: \"M11 5h10M11 12h7M11 19h4\" }],\n  [\"path\", { d: \"M4 17V7\" }],\n  [\"path\", { d: \"m2 9 2-2 2 2\" }],\n]);\nexport const SortDesc = createGlassIcon(\"SortDesc\", [\n  [\"path\", { d: \"M11 5h4M11 12h7M11 19h10\" }],\n  [\"path\", { d: \"M4 7v10\" }],\n  [\"path\", { d: \"m2 15 2 2 2-2\" }],\n]);\nexport const Sparkles = createGlassIcon(\"Sparkles\", sparkles);\nexport const Square = createGlassIcon(\"Square\", square);\nexport const Star = createGlassIcon(\"Star\", star);\nexport const Sun = createGlassIcon(\"Sun\", sun);\nexport const Tag = createGlassIcon(\"Tag\", [\n  [\"path\", { d: \"M20 13 11 22 2 13V4h9Z\" }],\n  [\"path\", { d: \"M7 8h.01\" }],\n]);\nexport const Target = createGlassIcon(\"Target\", target);\nexport const TestTube = createGlassIcon(\"TestTube\", [\n  [\"path\", { d: \"M10 2v7L4 19a3 3 0 0 0 2.6 4h10.8A3 3 0 0 0 20 19L14 9V2\" }],\n  [\"path\", { d: \"M8 2h8\" }],\n  [\"path\", { d: \"M7 15h10\" }],\n]);\nexport const ThumbsUp = createGlassIcon(\"ThumbsUp\", [\n  [\"path\", { d: \"M7 10v11H3V10Z\" }],\n  [\n    \"path\",\n    {\n      d: \"M7 10 12 2l1 2a5 5 0 0 1-.4 4H20a2 2 0 0 1 2 2l-2 9a3 3 0 0 1-3 2H7\",\n    },\n  ],\n]);\nexport const Trash2 = createGlassIcon(\"Trash2\", trash);\nexport const TrendingDown = createGlassIcon(\"TrendingDown\", trendingDown);\nexport const TrendingUp = createGlassIcon(\"TrendingUp\", trendingUp);\nexport const Triangle = createGlassIcon(\"Triangle\", [\n  [\"path\", { d: \"M12 3 22 21H2Z\" }],\n]);\nexport const Trophy = createGlassIcon(\"Trophy\", [\n  [\"path\", { d: \"M8 21h8\" }],\n  [\"path\", { d: \"M12 17v4\" }],\n  [\"path\", { d: \"M7 4h10v5a5 5 0 0 1-10 0Z\" }],\n  [\"path\", { d: \"M7 6H3a4 4 0 0 0 4 4M17 6h4a4 4 0 0 1-4 4\" }],\n]);\nexport const Underline = createGlassIcon(\"Underline\", underline);\nexport const Undo = createGlassIcon(\"Undo\", [\n  [\"path\", { d: \"M3 7v6h6\" }],\n  [\"path\", { d: \"M21 17a9 9 0 0 0-15-6.7L3 13\" }],\n]);\nexport const Undo2 = Undo;\nexport const Unlock = createGlassIcon(\"Unlock\", unlock);\nexport const Upload = createGlassIcon(\"Upload\", upload);\nexport const User = createGlassIcon(\"User\", user);\nexport const UserRound = User;\nexport const Users = createGlassIcon(\"Users\", users);\nexport const Video = createGlassIcon(\"Video\", video);\nexport const Volume1 = createGlassIcon(\"Volume1\", volume);\nexport const Volume2 = createGlassIcon(\"Volume2\", volume2);\nexport const VolumeX = createGlassIcon(\"VolumeX\", [...volume, ...x]);\nexport const Waves = createGlassIcon(\"Waves\", [\n  [\"path\", { d: \"M2 8c3-3 5 3 8 0s5 3 8 0 4 1 4 1\" }],\n  [\"path\", { d: \"M2 14c3-3 5 3 8 0s5 3 8 0 4 1 4 1\" }],\n]);\nexport const Wifi = createGlassIcon(\"Wifi\", [\n  [\"path\", { d: \"M5 13a10 10 0 0 1 14 0\" }],\n  [\"path\", { d: \"M8.5 16.5a5 5 0 0 1 7 0\" }],\n  [\"path\", { d: \"M12 20h.01\" }],\n]);\nexport const Wind = createGlassIcon(\"Wind\", [\n  [\"path\", { d: \"M3 8h11a3 3 0 1 0-3-3\" }],\n  [\"path\", { d: \"M3 12h17\" }],\n  [\"path\", { d: \"M3 16h12a3 3 0 1 1-3 3\" }],\n]);\nexport const X = createGlassIcon(\"X\", x);\nexport const XCircle = createGlassIcon(\"XCircle\", [...circle, ...x]);\nexport const Zap = createGlassIcon(\"Zap\", zap);\nexport const ZoomIn = createGlassIcon(\"ZoomIn\", [...search, ...plus]);\nexport const ZoomOut = createGlassIcon(\"ZoomOut\", [...search, ...minus]);\n\nconst glassIconRegistry = {\n  activity: Activity,\n  alert: AlertCircle,\n  archive: Archive,\n  calendar: Calendar,\n  check: Check,\n  close: X,\n  command: Search,\n  data: Database,\n  filter: Filter,\n  home: Home,\n  loading: Loader2,\n  menu: Menu,\n  notification: Bell,\n  search: Search,\n  settings: Settings,\n  spark: Sparkles,\n  user: User,\n  users: Users,\n  warning: AlertTriangle,\n} as const;\n\nexport interface NamedGlassIconProps extends GlassIconProps {\n  name: keyof typeof glassIconRegistry | string;\n}\n\nexport const GlassIcon = ({ name, ...props }: NamedGlassIconProps) => {\n  const Icon =\n    glassIconRegistry[name as keyof typeof glassIconRegistry] ?? Circle;\n  return <Icon {...props} />;\n};\n\nexport const ActivityIcon = Activity;\nexport const AlertCircleIcon = AlertCircle;\nexport const AlertTriangleIcon = AlertTriangle;\nexport const ArrowDownIcon = ArrowDown;\nexport const ArrowRightIcon = ArrowRight;\nexport const ArrowUpIcon = ArrowUp;\nexport const BellIcon = Bell;\nexport const CalendarIcon = Calendar;\nexport const CheckIcon = Check;\nexport const ChevronDownIcon = ChevronDown;\nexport const ChevronLeftIcon = ChevronLeft;\nexport const ChevronRightIcon = ChevronRight;\nexport const ChevronUpIcon = ChevronUp;\nexport const ClockIcon = Clock;\nexport const CloseIcon = X;\nexport const CommandIcon = Search;\nexport const CopyIcon = Copy;\nexport const DashboardIcon = LayoutDashboard;\nexport const DatabaseIcon = Database;\nexport const DownloadIcon = Download;\nexport const ErrorIcon = AlertCircle;\nexport const FileIcon = File;\nexport const FilterIcon = Filter;\nexport const FolderIcon = Folder;\nexport const GridIcon = Grid;\nexport const HomeIcon = Home;\nexport const ImageIcon = Image;\nexport const InfoIcon = Info;\nexport const ListIcon = List;\nexport const LoaderIcon = Loader2;\nexport const MediaIcon = Play;\nexport const MenuIcon = Menu;\nexport const MicIcon = Mic;\nexport const MoreHorizontalIcon = MoreHorizontal;\nexport const MoreVerticalIcon = MoreVertical;\nexport const NotificationIcon = Bell;\nexport const PaletteIcon = Palette;\nexport const PlayIcon = Play;\nexport const PlusIcon = Plus;\nexport const RefreshIcon = RefreshCw;\nexport const SaveIcon = Save;\nexport const SearchIcon = Search;\nexport const SendIcon = Send;\nexport const SettingsIcon = Settings;\nexport const SparkIcon = Sparkles;\nexport const SuccessIcon = CheckCircle;\nexport const UserIcon = User;\nexport const UsersIcon = Users;\nexport const VideoIcon = Video;\nexport const WarningIcon = AlertTriangle;\nexport const XIcon = X;\nexport const ZapIcon = Zap;\n", "\"use client\";\nimport React, { forwardRef, HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"@/design-system/utilsCore\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport type { GlassElevation, GlassIntent } from \"../../tokens/glass\";\n\nexport interface GlassProps extends HTMLAttributes<HTMLDivElement> {\n  /**\n   * HTML element tag to render as\n   */\n  as?: React.ElementType;\n\n  /**\n   * Elevation level for depth perception (0-6)\n   */\n  elev?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n  /**\n   * Glass variant for semantic surfaces\n   */\n  variant?: \"default\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\n  /**\n   * Border radius preset\n   */\n  radius?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n\n  /**\n   * Blur intensity\n   */\n  blur?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\n  /**\n   * Motion animation preset\n   */\n  motion?: \"none\" | \"float\" | \"shimmer\" | \"ambient\" | \"press\";\n\n  /**\n   * Enable interactive states\n   */\n  interactive?: boolean;\n\n  /**\n   * Contrast guard mode\n   */\n  contrast?: \"auto\" | \"on\" | \"off\";\n\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n\n  /**\n   * Add noise texture overlay\n   */\n  noise?: boolean;\n\n  /**\n   * Add specular overlay\n   */\n  specular?: boolean;\n\n  /**\n   * Add edge frost effect\n   */\n  edge?: boolean;\n\n  /**\n   * Glow effect variant\n   */\n  glow?:\n    | \"none\"\n    | \"default\"\n    | \"primary\"\n    | \"success\"\n    | \"warning\"\n    | \"danger\"\n    | \"info\";\n\n  /**\n   * Compact surface treatment for docs, cards, drawers, and preview slots.\n   */\n  compact?: boolean;\n\n  /**\n   * Preview preset that makes the surface visibly glassy in small frames\n   * without requiring callers to hand-tune blur/elevation/min-height.\n   */\n  preview?: boolean;\n\n  /**\n   * Optional minimum height for constrained demos or embedded panels.\n   */\n  minHeight?: number | string;\n}\n\n/**\n * Advanced Glass Primitive Component\n * Token-first glassmorphism with full a11y support\n */\nexport const GlassAdvanced = forwardRef<HTMLDivElement, GlassProps>(\n  (\n    {\n      as: Component = \"div\",\n      elev = 2,\n      variant = \"default\",\n      radius = \"lg\",\n      blur = \"lg\",\n      motion = \"none\",\n      interactive = false,\n      contrast = \"auto\",\n      disabled = false,\n      noise = false,\n      specular = false,\n      edge = false,\n      glow = \"none\",\n      compact = false,\n      preview = false,\n      minHeight,\n      className,\n      children,\n      style,\n      onKeyDown,\n      onClick,\n      role,\n      tabIndex,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      ...props\n    },\n    ref\n  ) => {\n    // MOTION_RESPECT: Check for reduced motion preference\n    const prefersReducedMotion = useReducedMotion();\n\n    // Handle keyboard accessibility for interactive elements\n    const isClickable = !!onClick && !disabled;\n    const computedRole =\n      role || (isClickable && Component === \"div\" ? \"button\" : undefined);\n    const computedTabIndex =\n      tabIndex ?? (isClickable || interactive ? 0 : undefined);\n\n    const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n      // Call custom handler first\n      onKeyDown?.(e);\n\n      // Handle space/enter for clickable divs\n      if (\n        isClickable &&\n        Component === \"div\" &&\n        (e.key === \"Enter\" || e.key === \" \")\n      ) {\n        e.preventDefault();\n        onClick?.(e as any);\n      }\n    };\n\n    // Build class names using tokens\n    const classes = cn(\n      // Base glass foundation\n      \"glass-foundation-complete\",\n\n      // Elevation\n      elev > 0 && `glass-elev-${elev}`,\n\n      // Radius\n      `glass-radius-${radius}`,\n\n      // CLASS_PREFIX: Blur classes use 'glass-' prefix\n      blur !== \"lg\" && `glass-blur-${blur}`,\n\n      // Variant surfaces\n      variant !== \"default\" && `glass-surface-${variant}`,\n\n      // MOTION_RESPECT: Respect reduced motion preference for animations\n      motion !== \"none\" && !prefersReducedMotion && `glass-animate-${motion}`,\n\n      // Interactive states\n      interactive && \"glass-state-hoverable glass-state-active\",\n\n      // CONTRAST_GUARD: Glass elements need contrast guard class\n      contrast === \"auto\" && \"glass-contrast-guard\",\n\n      // Disabled state\n      disabled && \"glass-state-disabled\",\n\n      // Overlay effects\n      noise && \"glass-overlay-noise\",\n      specular && \"glass-overlay-specular\",\n      edge && \"glass-edge\",\n\n      // Glow effects\n      glow !== \"none\" && `glass-glow${glow !== \"default\" ? `-${glow}` : \"\"}`,\n\n      // INTERACTIVE_FOCUS: Interactive elements with onClick need glass-focus class\n      (isClickable || interactive) && \"glass-focus\",\n\n      // Custom classes\n      className\n    );\n\n    // TOUCH_TARGET: Ensure minimum touch target for interactive elements\n    const touchTargetClasses =\n      isClickable || interactive ? \"glass-touch-target\" : \"\";\n    const resolvedMinHeight =\n      typeof minHeight === \"number\" ? `${minHeight}px` : minHeight;\n    const glassIntent: GlassIntent =\n      variant === \"default\" ? \"neutral\" : variant;\n    const glassElevation: GlassElevation = `level${Math.max(\n      preview ? 3 : elev,\n      1\n    )}` as GlassElevation;\n    const defaultSurfaceStyle: React.CSSProperties = {\n      ...createGlassStyle({\n        intent: glassIntent,\n        elevation: glassElevation,\n        tier: \"high\",\n        interactive: isClickable || interactive,\n        focusRing: isClickable || interactive,\n      }),\n      position: \"relative\",\n      overflow: \"hidden\",\n      minHeight:\n        resolvedMinHeight ??\n        (preview ? (compact ? \"96px\" : \"128px\") : undefined),\n      ...style,\n    };\n\n    return React.createElement(\n      Component,\n      {\n        ref,\n        className: cn(classes, touchTargetClasses),\n        style: defaultSurfaceStyle,\n        role: computedRole,\n        tabIndex: computedTabIndex,\n        \"aria-disabled\": disabled || undefined,\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledBy,\n        \"aria-describedby\": ariaDescribedBy,\n        onClick: disabled ? undefined : onClick,\n        onKeyDown: handleKeyDown,\n        ...(props as any),\n      } as any,\n      React.createElement(\"div\", { className: \"glass-layer-frost\" }),\n      React.createElement(\"div\", { className: \"glass-layer-ink\" }, children)\n    );\n  }\n);\n\nGlassAdvanced.displayName = \"GlassAdvanced\";\n\n/**\n * SSR-safe class composition helper\n */\nexport function composeGlassClasses(props: Partial<GlassProps>): string {\n  const {\n    elev = 2,\n    variant = \"default\",\n    radius = \"lg\",\n    blur = \"lg\",\n    motion = \"none\",\n    interactive = false,\n    contrast = \"auto\",\n    disabled = false,\n    noise = false,\n    specular = false,\n    edge = false,\n    glow = \"none\",\n  } = props;\n\n  return cn(\n    \"glass-foundation-complete\",\n    elev > 0 && `glass-elev-${elev}`,\n    `glass-radius-${radius}`,\n    blur !== \"lg\" && `glass-blur-${blur}`,\n    variant !== \"default\" && `glass-surface-${variant}`,\n    motion !== \"none\" && `glass-animate-${motion}`,\n    interactive && \"glass-state-hoverable glass-state-active\",\n    contrast === \"auto\" && \"glass-contrast-guard\",\n    disabled && \"glass-state-disabled\",\n    noise && \"glass-overlay-noise\",\n    specular && \"glass-overlay-specular\",\n    edge && \"glass-edge\",\n    glow !== \"none\" && `glass-glow${glow !== \"default\" ? `-${glow}` : \"\"}`,\n    interactive && \"glass-focus\"\n  );\n}\n", "import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n    return twMerge(clsx(inputs));\n}\n", "'use client';\n/**\n * Reduced Motion Hook and Utilities\n * Respects user's prefers-reduced-motion preference\n * WCAG 2.1 Success Criterion 2.3.3 (AAA)\n */\n\nimport React from 'react';\nimport { useEffect, useState } from 'react';\nimport { getSafeDocument, isBrowser, safeMatchMedia } from '../utils/env';\n\n/**\n * Hook to detect user's reduced motion preference\n *\n * CRITICAL: Defaults to `false` (no reduced motion) on both server and initial client render\n * to prevent SSR hydration mismatches. The actual preference is detected after hydration.\n *\n * @returns boolean - true if user prefers reduced motion\n */\nexport function useReducedMotion(): boolean {\n  // CRITICAL FIX: Start with `false` on both server and client to prevent hydration mismatch\n  // The server cannot access matchMedia, so we default to false (motion allowed)\n  // This matches the first client render, preventing inline style mismatches\n  const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n  useEffect(() => {\n    // Detect actual motion preference after hydration\n    if (!isBrowser()) {\n      return;\n    }\n\n    const mediaQuery = safeMatchMedia('(prefers-reduced-motion: reduce)');\n    if (!mediaQuery) return;\n\n    // Update to actual preference\n    setPrefersReducedMotion(mediaQuery.matches);\n\n    // Listen for changes\n    const handleChange = (event: MediaQueryListEvent | MediaQueryList) => {\n      setPrefersReducedMotion(event.matches);\n    };\n\n    // Modern browsers\n    if (typeof mediaQuery.addEventListener === 'function') {\n      mediaQuery.addEventListener('change', handleChange);\n      return () => mediaQuery.removeEventListener('change', handleChange);\n    }\n    // Fallback for older browsers\n    if (typeof (mediaQuery as any).addListener === 'function') {\n      (mediaQuery as any).addListener(handleChange);\n      return () => (mediaQuery as any).removeListener(handleChange);\n    }\n  }, []);\n\n  return prefersReducedMotion;\n}\n\n/**\n * Get animation duration based on reduced motion preference\n * @param defaultDuration - Default duration in ms\n * @param prefersReducedMotion - Whether user prefers reduced motion\n * @returns duration in ms (0 if reduced motion)\n */\nexport function getAnimationDuration(\n  defaultDuration: number,\n  prefersReducedMotion: boolean\n): number {\n  return prefersReducedMotion ? 0 : defaultDuration;\n}\n\n/**\n * Get transition duration CSS variable\n * @param prefersReducedMotion - Whether user prefers reduced motion\n * @returns CSS duration value\n */\nexport function getTransitionDuration(prefersReducedMotion: boolean): string {\n  return prefersReducedMotion ? '0ms' : 'var(--glass-motion-duration-normal, 250ms)';\n}\n\n/**\n * Get animation CSS class based on reduced motion preference\n * @param animationClass - Animation class to apply\n * @param prefersReducedMotion - Whether user prefers reduced motion\n * @returns animation class or empty string\n */\nexport function getAnimationClass(\n  animationClass: string,\n  prefersReducedMotion: boolean\n): string {\n  return prefersReducedMotion ? '' : animationClass;\n}\n\n/**\n * Motion configuration based on reduced motion preference\n */\nexport interface MotionConfig {\n  duration: number;\n  delay: number;\n  easing: string;\n  scale: number;\n  opacity: number;\n}\n\n/**\n * Get motion configuration\n * @param prefersReducedMotion - Whether user prefers reduced motion\n * @param defaultConfig - Default motion configuration\n * @returns Motion configuration\n */\nexport function getMotionConfig(\n  prefersReducedMotion: boolean,\n  defaultConfig: Partial<MotionConfig> = {}\n): MotionConfig {\n  const defaults: MotionConfig = {\n    duration: 250,\n    delay: 0,\n    easing: 'ease-in-out',\n    scale: 1,\n    opacity: 1,\n  };\n\n  if (prefersReducedMotion) {\n    return {\n      duration: 0,\n      delay: 0,\n      easing: 'linear',\n      scale: 1,\n      opacity: 1,\n    };\n  }\n\n  return {\n    ...defaults,\n    ...defaultConfig,\n  };\n}\n\n/**\n * Apply reduced motion to inline styles\n * @param prefersReducedMotion - Whether user prefers reduced motion\n * @returns CSS properties object\n */\nexport function getReducedMotionStyles(prefersReducedMotion: boolean): React.CSSProperties {\n  if (prefersReducedMotion) {\n    return {\n      animationDuration: '0.001ms !important' as any,\n      animationIterationCount: '1 !important' as any,\n      transitionDuration: '0.001ms !important' as any,\n      scrollBehavior: 'auto !important' as any,\n    };\n  }\n  return {};\n}\n\n/**\n * Wrapper component that respects reduced motion\n */\nexport interface ReducedMotionWrapperProps {\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const ReducedMotionWrapper: React.FC<ReducedMotionWrapperProps> = ({\n  children,\n  className,\n  style,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n\n  return (\n    <div\n      className={className}\n      style={{\n        ...style,\n        ...getReducedMotionStyles(prefersReducedMotion),\n      }}\n      data-reduced-motion={prefersReducedMotion}\n    >\n      {children}\n    </div>\n  );\n};\n\n/**\n * CSS-in-JS animation utilities\n */\nexport const reducedMotionStyles = `\n  @media (prefers-reduced-motion: reduce) {\n    *,\n    *::before,\n    *::after {\n      animation-duration: 0.001ms !important;\n      animation-iteration-count: 1 !important;\n      transition-duration: 0.001ms !important;\n      scroll-behavior: auto !important;\n    }\n  }\n`;\n\n/**\n * Add reduced motion CSS to document\n */\nexport function injectReducedMotionStyles(): void {\n  const doc = getSafeDocument();\n  if (!doc) return;\n\n  const styleId = 'reduced-motion-styles';\n\n  // Check if already injected\n  if (doc.getElementById(styleId)) return;\n\n  const styleElement = doc.createElement('style');\n  styleElement.id = styleId;\n  styleElement.textContent = reducedMotionStyles;\n  doc.head?.appendChild(styleElement);\n}\n\n/**\n * HOC to add reduced motion support to components\n */\nexport function withReducedMotion<P extends object>(\n  Component: React.ComponentType<P & { prefersReducedMotion?: boolean }>\n) {\n  return function ReducedMotionComponent(props: P) {\n    const prefersReducedMotion = useReducedMotion();\n\n    return <Component {...props} prefersReducedMotion={prefersReducedMotion} />;\n  };\n}\n\nexport default useReducedMotion;", "import type { DependencyList, EffectCallback } from 'react';\n\n/**\n * Environment helpers to centralize SSR/browser detection and safe global access.\n *\n * CRITICAL: These must check dynamically, NOT cache at module load time,\n * to handle polyfills and avoid locking in server environment values.\n */\n\n/**\n * Dynamic check - re-evaluates on every call to support polyfills\n */\nconst hasWindow = (): boolean => typeof window !== 'undefined';\nconst hasDocument = (): boolean => typeof document !== 'undefined';\nconst hasNavigator = (): boolean => typeof navigator !== 'undefined';\n\n/**\n * Returns true when executed in a browser-like environment.\n */\nexport const isBrowser = (): boolean => hasWindow() && hasDocument();\n\n/**\n * Convenience inverse helper.\n */\nexport const isServer = (): boolean => !isBrowser();\n\n/**\n * Safely access the `window` object when available.\n */\nexport const getSafeWindow = (): typeof window | undefined => (hasWindow() ? window : undefined);\n\n/**\n * Safely access the `document` object when available.\n */\nexport const getSafeDocument = (): Document | undefined => (hasDocument() ? document : undefined);\n\n/**\n * Safely access the `navigator` object when available.\n */\nexport const getSafeNavigator = (): Navigator | undefined => (hasNavigator() ? navigator : undefined);\n\n/**\n * Helper to guard feature detection against SSR environments.\n */\nexport const safeMatchMedia = (query: string): MediaQueryList | undefined => {\n  const win = getSafeWindow();\n  return win?.matchMedia ? win.matchMedia(query) : undefined;\n};\n\n/**\n * Executes a side effect only when running in the browser. Returns a no-op cleanup on the server.\n */\nexport const runClientEffect = (effect: EffectCallback): ReturnType<EffectCallback> | undefined => {\n  if (!isBrowser()) {\n    return undefined;\n  }\n  return effect();\n};\n\n/**\n * React hook compatible helper to defer `useEffect` logic to the client.\n *\n * Example:\n *   useClientEffect(() => { /* browser only *\\/ });\n */\nexport const useClientEffect = (\n  useEffectImpl: (effect: EffectCallback, deps?: DependencyList) => void,\n  effect: EffectCallback,\n  deps?: DependencyList\n): void => {\n  useEffectImpl(() => runClientEffect(effect), deps);\n};\n\n/**\n * Creates a lazy accessor that only evaluates the factory on the client.\n */\nexport const lazyClientValue = <T>(factory: () => T, fallback: T): T => {\n  return isBrowser() ? factory() : fallback;\n};\n", "import { getSafeDocument, getSafeNavigator, getSafeWindow, isBrowser, safeMatchMedia } from './env';\n// Device capability detection and optimization\n\nexport interface DeviceInfo {\n  type: 'mobile' | 'tablet' | 'desktop' | 'unknown';\n  os: 'ios' | 'android' | 'windows' | 'macos' | 'linux' | 'unknown';\n  browser: string;\n  capabilities: DeviceCapabilities;\n  performance: DevicePerformance;\n  screen: ScreenInfo;\n  input: InputCapabilities;\n}\n\nexport interface DeviceCapabilities {\n  touch: boolean;\n  multiTouch: boolean;\n  hover: boolean;\n  pointer: boolean;\n  gpu: boolean;\n  webgl: boolean;\n  webgl2: boolean;\n  hardwareAcceleration: boolean;\n  highDPI: boolean;\n  vibration: boolean;\n  geolocation: boolean;\n  camera: boolean;\n  microphone: boolean;\n  speakers: boolean;\n  bluetooth: boolean;\n  usb: boolean;\n}\n\nexport interface DevicePerformance {\n  memory: number; // MB\n  cores: number;\n  clockSpeed: number; // MHz\n  battery: boolean;\n  network: 'slow' | 'fast' | 'unknown';\n  storage: 'low' | 'medium' | 'high';\n  tier: 'low' | 'medium' | 'high' | 'ultra';\n}\n\nexport interface ScreenInfo {\n  width: number;\n  height: number;\n  pixelRatio: number;\n  orientation: 'portrait' | 'landscape';\n  colorDepth: number;\n  refreshRate: number;\n  touchScreen: boolean;\n  ppi: number;\n}\n\nexport interface InputCapabilities {\n  keyboard: boolean;\n  mouse: boolean;\n  touch: boolean;\n  stylus: boolean;\n  gamepad: boolean;\n  microphone: boolean;\n  camera: boolean;\n}\n\nexport const DEFAULT_DEVICE_INFO: DeviceInfo = {\n  type: 'unknown',\n  os: 'unknown',\n  browser: 'Unknown',\n  capabilities: {\n    touch: false,\n    multiTouch: false,\n    hover: false,\n    pointer: false,\n    gpu: false,\n    webgl: false,\n    webgl2: false,\n    hardwareAcceleration: false,\n    highDPI: false,\n    vibration: false,\n    geolocation: false,\n    camera: false,\n    microphone: false,\n    speakers: false,\n    bluetooth: false,\n    usb: false,\n  },\n  performance: {\n    memory: 4,\n    cores: 4,\n    clockSpeed: 2000,\n    battery: false,\n    network: 'unknown',\n    storage: 'medium',\n    tier: 'medium',\n  },\n  screen: {\n    width: 1920,\n    height: 1080,\n    pixelRatio: 1,\n    orientation: 'landscape',\n    colorDepth: 24,\n    refreshRate: 60,\n    touchScreen: false,\n    ppi: 96,\n  },\n  input: {\n    keyboard: true,\n    mouse: true,\n    touch: false,\n    stylus: false,\n    gamepad: false,\n    microphone: false,\n    camera: false,\n  },\n};\n\n// Device detection\nlet __cachedDeviceInfo: DeviceInfo | null = null;\nlet __lastDetectTs = 0;\nconst DETECT_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\n// Safely probe WebGL support with minimal overhead and explicit cleanup\nconst probeWebGLSupport = (): { webgl: boolean; webgl2: boolean; gpu: boolean } => {\n  const doc = getSafeDocument();\n  if (!doc) {\n    return { webgl: false, webgl2: false, gpu: false };\n  }\n\n  const canvas = doc.createElement('canvas');\n  // Keep it tiny and hint low-power\n  canvas.width = 1;\n  canvas.height = 1;\n\n  const attrs: WebGLContextAttributes & { powerPreference?: any } = {\n    alpha: false,\n    antialias: false,\n    depth: false,\n    stencil: false,\n    preserveDrawingBuffer: false,\n    desynchronized: true as any,\n    failIfMajorPerformanceCaveat: true,\n    powerPreference: 'low-power',\n  };\n\n  let gl: WebGLRenderingContext | null = null;\n  let gl2: WebGL2RenderingContext | null = null;\n  try {\n    gl2 = (canvas.getContext('webgl2', attrs) as WebGL2RenderingContext | null) || null;\n  } catch {\n    gl2 = null;\n  }\n  if (!gl2) {\n    try {\n      gl = (canvas.getContext('webgl', attrs) as WebGLRenderingContext | null) ||\n           (canvas.getContext('experimental-webgl', attrs) as WebGLRenderingContext | null) ||\n           null;\n    } catch {\n      gl = null;\n    }\n  }\n\n  const webgl2 = !!gl2;\n  const webgl = webgl2 || !!gl;\n  const gpu = webgl; // If we can get a GL context, assume GPU available\n\n  // Explicitly release the context if possible\n  try {\n    const ctx: any = gl2 || gl;\n    const lose = ctx && typeof ctx.getExtension === 'function' && ctx.getExtension('WEBGL_lose_context');\n    if (lose && typeof lose.loseContext === 'function') {\n      lose.loseContext();\n    }\n  } catch {}\n  try {\n    canvas.width = 0;\n    canvas.height = 0;\n    if (canvas.parentNode) {\n      canvas.parentNode.removeChild(canvas);\n    }\n  } catch {}\n\n  gl = null as any;\n  gl2 = null as any;\n  return { webgl, webgl2, gpu };\n};\n\nexport const detectDevice = (): DeviceInfo => {\n  // Basic caching to avoid repeatedly creating GL contexts across mounts\n  const now = Date.now();\n  if (__cachedDeviceInfo && now - __lastDetectTs < DETECT_CACHE_TTL_MS) {\n    return __cachedDeviceInfo;\n  }\n\n  if (!isBrowser()) {\n    __cachedDeviceInfo = { ...DEFAULT_DEVICE_INFO };\n    __lastDetectTs = now;\n    return __cachedDeviceInfo;\n  }\n\n  const navigatorRef = getSafeNavigator();\n  const ua = navigatorRef?.userAgent ?? '';\n  const platform = navigatorRef?.platform ?? '';\n\n  // Detect device type\n  const type = detectDeviceType(ua, platform);\n\n  // Detect OS\n  const os = detectOS(ua, platform);\n\n  // Detect browser\n  const browser = detectBrowser(ua);\n\n  // Detect capabilities\n  const capabilities = detectDeviceCapabilities();\n\n  // Detect performance\n  const performance = detectDevicePerformance();\n\n  // Detect screen info\n  const screen = detectScreenInfo();\n\n  // Detect input capabilities\n  const input = detectInputCapabilities();\n\n  const info: DeviceInfo = {\n    type,\n    os,\n    browser,\n    capabilities,\n    performance,\n    screen,\n    input,\n  };\n  __cachedDeviceInfo = info;\n  __lastDetectTs = now;\n  return info;\n};\n\nconst detectDeviceType = (ua: string, platform: string): DeviceInfo['type'] => {\n  // Check for mobile devices\n  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua)) {\n    // Distinguish between phone and tablet\n    if (/iPad|Android(?=.*\\bMobile\\b)|Tablet|PlayBook/i.test(ua)) {\n      return 'tablet';\n    }\n    return 'mobile';\n  }\n\n  // Check for desktop\n  if (/Windows|Mac|Linux/i.test(platform)) {\n    return 'desktop';\n  }\n\n  return 'unknown';\n};\n\nconst detectOS = (ua: string, platform: string): DeviceInfo['os'] => {\n  if (/iPhone|iPad|iPod/i.test(ua)) {\n    return 'ios';\n  }\n\n  if (/Android/i.test(ua)) {\n    return 'android';\n  }\n\n  if (/Windows/i.test(platform)) {\n    return 'windows';\n  }\n\n  if (/Mac/i.test(platform)) {\n    return 'macos';\n  }\n\n  if (/Linux/i.test(platform)) {\n    return 'linux';\n  }\n\n  return 'unknown';\n};\n\nconst detectBrowser = (ua: string): string => {\n  if (ua.includes('Chrome') && !ua.includes('Edg/')) {\n    return 'Chrome';\n  }\n\n  if (ua.includes('Firefox')) {\n    return 'Firefox';\n  }\n\n  if (ua.includes('Safari') && !ua.includes('Chrome')) {\n    return 'Safari';\n  }\n\n  if (ua.includes('Edg/')) {\n    return 'Edge';\n  }\n\n  if (ua.includes('MSIE') || ua.includes('Trident')) {\n    return 'Internet Explorer';\n  }\n\n  return 'Unknown';\n};\n\nconst detectDeviceCapabilities = (): DeviceCapabilities => {\n  const win = getSafeWindow();\n  const nav = getSafeNavigator();\n  const { webgl, webgl2, gpu } = probeWebGLSupport();\n\n  return {\n    touch: !!win && 'ontouchstart' in win,\n    multiTouch: (nav?.maxTouchPoints ?? 0) > 1,\n    hover: safeMatchMedia('(hover: hover)')?.matches ?? false,\n    pointer: !!win && 'PointerEvent' in win,\n    gpu,\n    webgl,\n    webgl2,\n    hardwareAcceleration: (() => {\n      const doc = getSafeDocument();\n      if (!doc) return false;\n      const testElement = doc.createElement('div');\n      testElement.style.setProperty('transform', 'translateZ(0)');\n      return testElement.style.getPropertyValue('transform') === 'translateZ(0)';\n    })(),\n    highDPI: (win?.devicePixelRatio ?? 1) > 1,\n    vibration: !!nav && 'vibrate' in nav,\n    geolocation: !!nav && 'geolocation' in nav,\n    camera: !!(nav?.mediaDevices && nav.mediaDevices.getUserMedia),\n    microphone: !!(nav?.mediaDevices && nav.mediaDevices.getUserMedia),\n    speakers: !!win && ('AudioContext' in win || 'webkitAudioContext' in win),\n    bluetooth: !!nav && 'bluetooth' in nav,\n    usb: !!nav && 'usb' in nav,\n  };\n};\n\n// Allow manual refresh of cached device info if needed\nexport const refreshDeviceDetection = (): DeviceInfo => {\n  __cachedDeviceInfo = null;\n  return detectDevice();\n};\n\nconst detectDevicePerformance = (): DevicePerformance => {\n  // Estimate memory\n  const nav = getSafeNavigator() as Navigator & { deviceMemory?: number };\n  const memory = nav?.deviceMemory || 4; // Default to 4GB if not available\n\n  // Get CPU cores\n  const cores = nav?.hardwareConcurrency || 4; // Default to 4 cores\n\n  // Estimate clock speed (rough approximation)\n  const clockSpeed = cores > 4 ? 3000 : cores > 2 ? 2500 : 2000;\n\n  // Check battery\n  const battery = !!nav && 'getBattery' in nav;\n\n  // Estimate network speed\n  const network = detectNetworkSpeed();\n\n  // Estimate storage\n  const storage = memory > 8 ? 'high' : memory > 4 ? 'medium' : 'low';\n\n  // Calculate performance tier\n  const tier = calculatePerformanceTier(memory, cores, network);\n\n  return {\n    memory,\n    cores,\n    clockSpeed,\n    battery,\n    network,\n    storage,\n    tier,\n  };\n};\n\nconst detectNetworkSpeed = (): 'slow' | 'fast' | 'unknown' => {\n  const nav = getSafeNavigator() as Navigator & { connection?: { effectiveType?: string } };\n  const connection = nav?.connection;\n  if (!connection) return 'unknown';\n\n  const effectiveType = connection.effectiveType;\n  if (effectiveType === 'slow-2g' || effectiveType === '2g') {\n    return 'slow';\n  }\n\n  return 'fast';\n};\n\nconst calculatePerformanceTier = (\n  memory: number,\n  cores: number,\n  network: string\n): DevicePerformance['tier'] => {\n  const score = (memory * 0.4) + (cores * 0.4) + (network === 'fast' ? 2 : 1) * 0.2;\n\n  if (score >= 6) return 'ultra';\n  if (score >= 4) return 'high';\n  if (score >= 2.5) return 'medium';\n  return 'low';\n};\n\nconst detectScreenInfo = (): ScreenInfo => {\n  const win = getSafeWindow();\n  const screen = win?.screen;\n  const width = screen?.width ?? DEFAULT_DEVICE_INFO.screen.width;\n  const height = screen?.height ?? DEFAULT_DEVICE_INFO.screen.height;\n  const pixelRatio = win?.devicePixelRatio ?? DEFAULT_DEVICE_INFO.screen.pixelRatio;\n  const orientation = width > height ? 'landscape' : 'portrait';\n  const colorDepth = screen?.colorDepth ?? DEFAULT_DEVICE_INFO.screen.colorDepth;\n  const refreshRate = 60; // Default, hard to detect accurately\n\n  // Estimate PPI (pixels per inch)\n  const ppi = estimatePPI(width, height, pixelRatio);\n\n  return {\n    width,\n    height,\n    pixelRatio,\n    orientation,\n    colorDepth,\n    refreshRate,\n    touchScreen: !!win && 'ontouchstart' in win,\n    ppi,\n  };\n};\n\nconst estimatePPI = (width: number, height: number, pixelRatio: number): number => {\n  // Rough PPI estimation based on common device sizes\n  const diagonalPixels = Math.sqrt(width ** 2 + height ** 2);\n  const diagonalInches = diagonalPixels / (pixelRatio * 96); // Assuming 96 PPI base\n\n  return diagonalPixels / diagonalInches;\n};\n\nconst detectInputCapabilities = (): InputCapabilities => {\n  const win = getSafeWindow();\n  const nav = getSafeNavigator();\n\n  return {\n    keyboard: true, // Assume keyboard support\n    mouse: safeMatchMedia('(hover: hover)')?.matches ?? false,\n    touch: !!win && 'ontouchstart' in win,\n    stylus: (nav?.maxTouchPoints ?? 0) > 1, // Rough approximation\n    gamepad: !!nav && 'getGamepads' in nav,\n    microphone: !!(nav?.mediaDevices && nav.mediaDevices.getUserMedia),\n    camera: !!(nav?.mediaDevices && nav.mediaDevices.getUserMedia),\n  };\n};\n\n// Performance optimization utilities\nexport const performanceOptimizations = {\n  // Get optimal animation settings based on device\n  getOptimalAnimationSettings: (device: DeviceInfo) => {\n    const { performance, capabilities } = device;\n\n    switch (performance.tier) {\n      case 'ultra':\n        return {\n          duration: 300,\n          easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n          useHardwareAcceleration: true,\n          useWebAnimations: capabilities.webgl,\n        };\n\n      case 'high':\n        return {\n          duration: 400,\n          easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n          useHardwareAcceleration: true,\n          useWebAnimations: capabilities.webgl,\n        };\n\n      case 'medium':\n        return {\n          duration: 500,\n          easing: 'ease',\n          useHardwareAcceleration: capabilities.hardwareAcceleration,\n          useWebAnimations: false,\n        };\n\n      case 'low':\n        return {\n          duration: 600,\n          easing: 'linear',\n          useHardwareAcceleration: false,\n          useWebAnimations: false,\n        };\n\n      default:\n        return {\n          duration: 400,\n          easing: 'ease',\n          useHardwareAcceleration: capabilities.hardwareAcceleration,\n          useWebAnimations: false,\n        };\n    }\n  },\n\n  // Get optimal rendering settings\n  getOptimalRenderingSettings: (device: DeviceInfo) => {\n    const { performance, screen } = device;\n\n    return {\n      useCanvas: performance.tier === 'ultra' || performance.tier === 'high',\n      useWebGL: device.capabilities.webgl && performance.tier !== 'low',\n      pixelRatio: screen.pixelRatio > 2 ? 2 : screen.pixelRatio,\n      maxTextureSize: performance.tier === 'ultra' ? 4096 : 2048,\n      antialiasing: performance.tier !== 'low',\n      shadows: performance.tier === 'ultra' || performance.tier === 'high',\n      particles: performance.tier === 'ultra' ? 1000 : performance.tier === 'high' ? 500 : 100,\n    };\n  },\n\n  // Get optimal memory settings\n  getOptimalMemorySettings: (device: DeviceInfo) => {\n    const { performance } = device;\n\n    return {\n      maxCacheSize: performance.memory * 1024 * 1024 * 0.1, // 10% of available memory\n      textureCacheSize: performance.tier === 'ultra' ? 100 : 50,\n      geometryCacheSize: performance.tier === 'ultra' ? 50 : 25,\n      shaderCacheSize: performance.tier === 'ultra' ? 20 : 10,\n    };\n  },\n\n  // Get optimal network settings\n  getOptimalNetworkSettings: (device: DeviceInfo) => {\n    const { performance } = device;\n\n    return {\n      preloadAssets: performance.network !== 'slow',\n      compressTextures: performance.network === 'slow',\n      useCDN: performance.network === 'fast',\n      cacheStrategy: performance.network === 'fast' ? 'aggressive' : 'conservative',\n    };\n  },\n};\n\n// Device-specific optimizations\nexport const deviceOptimizations = {\n  // Mobile optimizations\n  mobile: {\n    reduceMotion: () => ({\n      prefersReducedMotion: safeMatchMedia('(prefers-reduced-motion: reduce)')?.matches ?? true,\n      disableParallax: true,\n      simplifyAnimations: true,\n      reduceParticleCount: true,\n    }),\n\n    optimizeTouch: () => ({\n      preventZoom: true,\n      improveTapTargets: true,\n      disableDoubleTapZoom: true,\n      optimizeScroll: true,\n    }),\n\n    optimizeBattery: () => ({\n      reduceFrameRate: true,\n      disableNonEssentialAnimations: true,\n      optimizeRendering: true,\n    }),\n  },\n\n  // Tablet optimizations\n  tablet: {\n    hybridInput: () => ({\n      supportTouchAndMouse: true,\n      optimizeForBoth: true,\n      adaptiveUI: true,\n    }),\n  },\n\n  // Desktop optimizations\n  desktop: {\n    maximizePerformance: () => ({\n      useAdvancedShaders: true,\n      enablePostProcessing: true,\n      optimizeForGPU: true,\n    }),\n  },\n};\n\n// Adaptive rendering utilities\nexport const adaptiveRendering = {\n  // Adjust quality based on performance\n  adjustQualityForPerformance: (\n    currentFPS: number,\n    targetFPS: number = 60,\n    currentQuality: number\n  ): number => {\n    const fpsRatio = currentFPS / targetFPS;\n\n    if (fpsRatio < 0.8) {\n      // Reduce quality if FPS is too low\n      return Math.max(0.1, currentQuality * 0.8);\n    } else if (fpsRatio > 1.2) {\n      // Increase quality if FPS is good\n      return Math.min(1, currentQuality * 1.1);\n    }\n\n    return currentQuality;\n  },\n\n  // Adjust detail level based on device\n  getDetailLevel: (device: DeviceInfo): 'low' | 'medium' | 'high' | 'ultra' => {\n    switch (device.performance.tier) {\n      case 'ultra':\n        return device.screen.pixelRatio > 2 ? 'ultra' : 'high';\n      case 'high':\n        return 'high';\n      case 'medium':\n        return 'medium';\n      case 'low':\n        return 'low';\n      default:\n        return 'medium';\n    }\n  },\n\n  // Get optimal texture size\n  getOptimalTextureSize: (device: DeviceInfo, baseSize: number): number => {\n    const detailLevel = adaptiveRendering.getDetailLevel(device);\n    const multipliers = {\n      ultra: 1,\n      high: 0.8,\n      medium: 0.6,\n      low: 0.4,\n    };\n\n    return Math.floor(baseSize * multipliers[detailLevel]);\n  },\n};\n\n// Export main detection function\nexport { detectDevice as default };\n", "/**\n * token-lint-ignore-file: canonical token definitions are allowed to use raw values.\n *\n * AuraGlass Canonical Token Schema - SINGLE SOURCE OF TRUTH\n *\n * This is the ONLY authoritative source for all glassmorphism values.\n * All other systems MUST consume these tokens.\n *\n * Requirements:\n * - No blur values below 2px on high tier\n * - All alpha values >= 0.08 (visible)\n * - All text colors meet WCAG AA contrast (4.5:1)\n * - No undefined/empty values allowed\n */\n\nexport type GlassElevation =\n  | \"level1\"\n  | \"level2\"\n  | \"level3\"\n  | \"level4\"\n  | \"level5\";\nexport type GlassIntent =\n  | \"neutral\"\n  | \"primary\"\n  | \"success\"\n  | \"warning\"\n  | \"danger\"\n  | \"info\";\nexport type QualityTier = \"auto\" | \"low\" | \"medium\" | \"high\";\n\nexport interface GlassSurfaceSpec {\n  backdropBlur: { px: number }; // never 0, min 2 on high tier\n  surface: { base: string; overlay?: string }; // rgba or gradient() string (visible)\n  border: { color: string; width: number; style: \"solid\" | \"dashed\" | \"none\" };\n  innerGlow?: { color: string; spread: number; blur: number };\n  outerShadow?: {\n    color: string;\n    x: number;\n    y: number;\n    blur: number;\n    spread: number;\n  };\n  noiseOpacity?: number; // 0..0.15\n  highlightOpacity?: number; // 0..0.25\n  text: { primary: string; secondary: string }; // must meet AA over surface\n}\n\nexport interface GlassPerformanceSpec {\n  blurMultiplier: number;\n  opacityMultiplier: number;\n  animationSpeedMultiplier: number;\n  renderQuality: \"low\" | \"medium\" | \"high\";\n}\n\nexport interface AuraGlassTokens {\n  surfaces: Record<GlassIntent, Record<GlassElevation, GlassSurfaceSpec>>;\n  motion: { defaultMs: number; enterMs: number; exitMs: number };\n  radii: { sm: number; md: number; lg: number; xl: number; pill: number };\n  gaps: { xs: number; sm: number; md: number; lg: number };\n}\n\n// CANONICAL GLASS TOKENS - AUTHORITATIVE VALUES ONLY\nexport const AURA_GLASS: AuraGlassTokens = {\n  surfaces: {\n    neutral: {\n      // Liquid-glass neutral: luminous white frost over a faint smoke scrim.\n      // Depth comes from blur + sheen, not surface darkness.\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(255,255,255,0.12) 0%, rgba(255,255,255,0.04) 50%, rgba(255,255,255,0.08) 100%)\",\n          overlay: \"rgba(15,23,42,0.20)\",\n        },\n        border: { color: \"rgba(255,255,255,0.16)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(0,0,0,0.18)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(255,255,255,0.10)\", spread: 0, blur: 8 },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // 19.4:1 contrast - Enhanced for better readability\n          secondary: \"rgba(255,255,255,0.88)\", // 17.4:1 contrast - Enhanced for better readability\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(255,255,255,0.14) 0%, rgba(255,255,255,0.05) 50%, rgba(255,255,255,0.10) 100%)\",\n          overlay: \"rgba(15,23,42,0.22)\",\n        },\n        border: { color: \"rgba(255,255,255,0.20)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(0,0,0,0.22)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(255,255,255,0.12)\", spread: 0, blur: 12 },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.11) 100%)\",\n          overlay: \"rgba(15,23,42,0.24)\",\n        },\n        border: {\n          color: \"rgba(255,255,255,0.24)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"rgba(0,0,0,0.26)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(255,255,255,0.14)\", spread: 1, blur: 16 },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(255,255,255,0.18) 0%, rgba(255,255,255,0.07) 50%, rgba(255,255,255,0.12) 100%)\",\n          overlay: \"rgba(15,23,42,0.26)\",\n        },\n        border: {\n          color: \"rgba(255,255,255,0.28)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"rgba(0,0,0,0.30)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(255,255,255,0.16)\", spread: 1, blur: 20 },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(255,255,255,0.20) 0%, rgba(255,255,255,0.08) 50%, rgba(255,255,255,0.14) 100%)\",\n          overlay: \"rgba(15,23,42,0.28)\",\n        },\n        border: {\n          color: \"rgba(255,255,255,0.32)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"rgba(0,0,0,0.34)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(255,255,255,0.18)\", spread: 2, blur: 24 },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n    primary: {\n      // Intent surfaces read as tinted liquid glass: low-alpha color wash,\n      // hairline borders, blur carries the depth.\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.22) 0%, hsl(var(--glass-color-primary)/0.12) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-primary)/0.35)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-primary)/0.18)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-primary)/0.14)\",\n          spread: 0,\n          blur: 8,\n        },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.26) 0%, hsl(var(--glass-color-primary)/0.15) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-primary)/0.40)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-primary)/0.22)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-primary)/0.16)\",\n          spread: 0,\n          blur: 12,\n        },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.30) 0%, hsl(var(--glass-color-primary)/0.18) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-primary)/0.45)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-primary)/0.26)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-primary)/0.18)\",\n          spread: 1,\n          blur: 16,\n        },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.34) 0%, hsl(var(--glass-color-primary)/0.21) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-primary)/0.50)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-primary)/0.30)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-primary)/0.20)\",\n          spread: 1,\n          blur: 20,\n        },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.38) 0%, hsl(var(--glass-color-primary)/0.24) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-primary)/0.55)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-primary)/0.34)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-primary)/0.22)\",\n          spread: 2,\n          blur: 24,\n        },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n    success: {\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(34,197,94,0.20) 0%, rgba(22,163,74,0.12) 100%)\",\n        },\n        border: { color: \"rgba(34,197,94,0.35)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(34,197,94,0.16)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(34,197,94,0.12)\", spread: 0, blur: 8 },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(34,197,94,0.24) 0%, rgba(22,163,74,0.15) 100%)\",\n        },\n        border: { color: \"rgba(34,197,94,0.40)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(34,197,94,0.20)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(34,197,94,0.14)\", spread: 0, blur: 12 },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(34,197,94,0.28) 0%, rgba(22,163,74,0.18) 100%)\",\n        },\n        border: { color: \"rgba(34,197,94,0.45)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(34,197,94,0.24)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(34,197,94,0.16)\", spread: 1, blur: 16 },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(34,197,94,0.32) 0%, rgba(22,163,74,0.21) 100%)\",\n        },\n        border: { color: \"rgba(34,197,94,0.50)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(34,197,94,0.28)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(34,197,94,0.18)\", spread: 1, blur: 20 },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(34,197,94,0.36) 0%, rgba(22,163,74,0.24) 100%)\",\n        },\n        border: { color: \"rgba(34,197,94,0.55)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(34,197,94,0.32)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(34,197,94,0.20)\", spread: 2, blur: 24 },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n    warning: {\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-warning)/0.20) 0%, rgba(217,119,6,0.12) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-warning)/0.35)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-warning)/0.16)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-warning)/0.12)\",\n          spread: 0,\n          blur: 8,\n        },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-warning)/0.24) 0%, rgba(217,119,6,0.15) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-warning)/0.40)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-warning)/0.20)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-warning)/0.14)\",\n          spread: 0,\n          blur: 12,\n        },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-warning)/0.28) 0%, rgba(217,119,6,0.18) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-warning)/0.45)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-warning)/0.24)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-warning)/0.16)\",\n          spread: 1,\n          blur: 16,\n        },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-warning)/0.32) 0%, rgba(217,119,6,0.21) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-warning)/0.50)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-warning)/0.28)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-warning)/0.18)\",\n          spread: 1,\n          blur: 20,\n        },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-warning)/0.36) 0%, rgba(217,119,6,0.24) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-warning)/0.55)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-warning)/0.32)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-warning)/0.20)\",\n          spread: 2,\n          blur: 24,\n        },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n    danger: {\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-danger)/0.20) 0%, rgba(220,38,38,0.12) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-danger)/0.35)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-danger)/0.16)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-danger)/0.12)\",\n          spread: 0,\n          blur: 8,\n        },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-danger)/0.24) 0%, rgba(220,38,38,0.15) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-danger)/0.40)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-danger)/0.20)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-danger)/0.14)\",\n          spread: 0,\n          blur: 12,\n        },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-danger)/0.28) 0%, rgba(220,38,38,0.18) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-danger)/0.45)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-danger)/0.24)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-danger)/0.16)\",\n          spread: 1,\n          blur: 16,\n        },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-danger)/0.32) 0%, rgba(220,38,38,0.21) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-danger)/0.50)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-danger)/0.28)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-danger)/0.18)\",\n          spread: 1,\n          blur: 20,\n        },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, hsl(var(--glass-color-danger)/0.36) 0%, rgba(220,38,38,0.24) 100%)\",\n        },\n        border: {\n          color: \"hsl(var(--glass-color-danger)/0.55)\",\n          width: 1,\n          style: \"solid\",\n        },\n        outerShadow: {\n          color: \"hsl(var(--glass-color-danger)/0.32)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: {\n          color: \"hsl(var(--glass-color-danger)/0.20)\",\n          spread: 2,\n          blur: 24,\n        },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n    info: {\n      level1: {\n        backdropBlur: { px: 16 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(14,165,233,0.20) 0%, rgba(2,132,199,0.12) 100%)\",\n        },\n        border: { color: \"rgba(14,165,233,0.35)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(14,165,233,0.16)\",\n          x: 0,\n          y: 4,\n          blur: 24,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(14,165,233,0.12)\", spread: 0, blur: 8 },\n        noiseOpacity: 0.03,\n        highlightOpacity: 0.18,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level2: {\n        backdropBlur: { px: 24 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(14,165,233,0.24) 0%, rgba(2,132,199,0.15) 100%)\",\n        },\n        border: { color: \"rgba(14,165,233,0.40)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(14,165,233,0.20)\",\n          x: 0,\n          y: 8,\n          blur: 32,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(14,165,233,0.14)\", spread: 0, blur: 12 },\n        noiseOpacity: 0.05,\n        highlightOpacity: 0.22,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level3: {\n        backdropBlur: { px: 32 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(14,165,233,0.28) 0%, rgba(2,132,199,0.18) 100%)\",\n        },\n        border: { color: \"rgba(14,165,233,0.45)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(14,165,233,0.24)\",\n          x: 0,\n          y: 12,\n          blur: 40,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(14,165,233,0.16)\", spread: 1, blur: 16 },\n        noiseOpacity: 0.06,\n        highlightOpacity: 0.25,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level4: {\n        backdropBlur: { px: 40 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(14,165,233,0.32) 0%, rgba(2,132,199,0.21) 100%)\",\n        },\n        border: { color: \"rgba(14,165,233,0.50)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(14,165,233,0.28)\",\n          x: 0,\n          y: 16,\n          blur: 48,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(14,165,233,0.18)\", spread: 1, blur: 20 },\n        noiseOpacity: 0.08,\n        highlightOpacity: 0.28,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n      level5: {\n        backdropBlur: { px: 48 },\n        surface: {\n          base: \"linear-gradient(135deg, rgba(14,165,233,0.36) 0%, rgba(2,132,199,0.24) 100%)\",\n        },\n        border: { color: \"rgba(14,165,233,0.55)\", width: 1, style: \"solid\" },\n        outerShadow: {\n          color: \"rgba(14,165,233,0.32)\",\n          x: 0,\n          y: 20,\n          blur: 56,\n          spread: 0,\n        },\n        innerGlow: { color: \"rgba(14,165,233,0.20)\", spread: 2, blur: 24 },\n        noiseOpacity: 0.10,\n        highlightOpacity: 0.32,\n        text: {\n          primary: \"rgba(255,255,255,0.98)\", // Enhanced contrast for all glass levels\n          secondary: \"rgba(255,255,255,0.88)\", // Enhanced contrast for all glass levels\n        },\n      },\n    },\n  },\n  motion: {\n    defaultMs: 200,\n    enterMs: 150,\n    exitMs: 100,\n  },\n  radii: {\n    sm: 10,\n    md: 16,\n    lg: 24,\n    xl: 32,\n    pill: 9999,\n  },\n  gaps: {\n    xs: 4,\n    sm: 8,\n    md: 16,\n    lg: 24,\n  },\n};\n\n/**\n * Performance tier configurations\n *\n * CRITICAL: Glass is never disabled - only reduced in intensity\n */\nexport const PERFORMANCE_TIERS = {\n  high: {\n    blurMultiplier: 1.0,\n    shadowMultiplier: 1.0,\n    saturateMultiplier: 1.0,\n    enableGlow: true,\n    enableNoise: true,\n  },\n  medium: {\n    blurMultiplier: 0.75, // Reduce blur by 25%\n    shadowMultiplier: 0.8, // Reduce shadows by 20%\n    saturateMultiplier: 0.9, // Reduce saturation slightly\n    enableGlow: true,\n    enableNoise: false,\n  },\n  low: {\n    blurMultiplier: 0.5, // Reduce blur by 50%\n    shadowMultiplier: 0.6, // Reduce shadows by 40%\n    saturateMultiplier: 0.8, // Reduce saturation more\n    enableGlow: false,\n    enableNoise: false,\n  },\n  auto: {\n    // Will be determined at runtime based on device capabilities\n    blurMultiplier: 1.0,\n    shadowMultiplier: 1.0,\n    saturateMultiplier: 1.0,\n    enableGlow: true,\n    enableNoise: true,\n  },\n} as const;\n\n/**\n * Utility functions for consuming tokens\n */\nexport const glassTokenUtils = {\n  /**\n   * Get surface specification for intent and elevation\n   */\n  getSurface: (\n    intent: GlassIntent,\n    elevation: GlassElevation\n  ): GlassSurfaceSpec => {\n    return AURA_GLASS.surfaces[intent][elevation];\n  },\n\n  /**\n   * Get performance-adjusted blur value\n   */\n  getPerformanceBlur: (baseBlur: number, tier: QualityTier): number => {\n    const config = PERFORMANCE_TIERS[tier];\n    return Math.max(2, Math.round(baseBlur * config.blurMultiplier)); // Never below 2px\n  },\n\n  /**\n   * Validate contrast ratio for text over surface\n   */\n  validateTextContrast: (textColor: string, surfaceColor: string): boolean => {\n    // Implementation would calculate actual contrast ratio\n    // For now, we ensure our predefined values meet WCAG AA\n    return true; // Our defined colors all meet 4.5:1 contrast\n  },\n\n  /**\n   * Generate CSS backdrop-filter string\n   */\n  buildBackdropFilter: (blur: number, tier: QualityTier): string => {\n    const performanceBlur = glassTokenUtils.getPerformanceBlur(blur, tier);\n    const config = PERFORMANCE_TIERS[tier];\n\n    const parts = [`blur(${performanceBlur}px)`];\n\n    // Heavy saturation is what lets the backdrop's color bleed through the\n    // frost \u2014 the signature liquid-glass quality. Brightness/contrast stay\n    // near 1 so labels never wash out.\n    const saturate =\n      Math.round(1.8 * config.saturateMultiplier * 100) / 100;\n    parts.push(`saturate(${saturate})`);\n    parts.push(\"brightness(1.05)\");\n    parts.push(\"contrast(1.05)\");\n\n    return parts.join(\" \");\n  },\n\n  /**\n   * Build complete surface styles from token specification\n   */\n  buildSurfaceStyles: (\n    intent: GlassIntent,\n    elevation: GlassElevation,\n    tier: QualityTier = \"high\"\n  ) => {\n    const surface = glassTokenUtils.getSurface(intent, elevation);\n    const config = PERFORMANCE_TIERS[tier];\n    const backdropFilter = glassTokenUtils.buildBackdropFilter(\n      surface.backdropBlur.px,\n      tier\n    );\n\n    const BACKDROP_FILTER_PROP = \"backdropFilter\" as const;\n    const WEBKIT_BACKDROP_FILTER_PROP = \"WebkitBackdropFilter\" as const;\n\n    // Compose outer shadow with the inset top-edge highlight and inner glow.\n    // The 1px inset highlight is what reads as a polished glass edge catching\n    // light \u2014 without it surfaces look like flat tinted panels.\n    const shadowParts: string[] = [];\n    if (surface.outerShadow) {\n      shadowParts.push(\n        `${surface.outerShadow.x}px ${surface.outerShadow.y}px ${Math.round(surface.outerShadow.blur * config.shadowMultiplier)}px ${surface.outerShadow.spread}px ${surface.outerShadow.color}`\n      );\n    }\n    if (surface.highlightOpacity) {\n      shadowParts.push(\n        `inset 0 1px 0 rgba(255,255,255,${surface.highlightOpacity})`\n      );\n    }\n    if (config.enableGlow && surface.innerGlow) {\n      shadowParts.push(\n        `inset 0 0 ${surface.innerGlow.blur}px ${surface.innerGlow.color}`\n      );\n    }\n\n    return {\n      background: surface.surface.base,\n      backgroundColor: surface.surface.overlay ?? undefined,\n      [BACKDROP_FILTER_PROP]: backdropFilter,\n      [WEBKIT_BACKDROP_FILTER_PROP]: backdropFilter,\n      \"--glass-text-primary\": surface.text.primary,\n      \"--glass-text-secondary\": surface.text.secondary,\n      \"--typography-text-primary\": surface.text.primary,\n      \"--typography-text-secondary\": surface.text.secondary,\n      // Use createGlassStyle() instead,\n      // Use createGlassStyle() instead,\n      border: `${surface.border.width}px ${surface.border.style} ${surface.border.color}`,\n      borderRadius: `${AURA_GLASS.radii.md}px`,\n      boxShadow: shadowParts.length > 0 ? shadowParts.join(\", \") : \"none\",\n      color: \"var(--glass-text-primary)\",\n      transition: `all ${AURA_GLASS.motion.defaultMs}ms ease-out`,\n      position: \"relative\" as const,\n      transform: \"translateZ(0)\",\n    };\n  },\n};\n\n// Export the canonical tokens as default\nexport default AURA_GLASS;\n\n// Legacy glassTokens structure for backward compatibility\nexport const glassTokens = {\n  // Elevation levels\n  elevation: {\n    level1: {\n      boxShadow: \"0 4px 16px rgba(0, 0, 0, 0.15)\",\n      zIndex: 1,\n    },\n    level2: {\n      boxShadow: \"0 8px 24px rgba(0, 0, 0, 0.2)\",\n      zIndex: 10,\n    },\n    level3: {\n      boxShadow: \"0 12px 32px rgba(0, 0, 0, 0.25)\",\n      zIndex: 100,\n    },\n    level4: {\n      boxShadow: \"0 16px 40px rgba(0, 0, 0, 0.3)\",\n      zIndex: 1000,\n    },\n  },\n\n  // Backdrop blur values\n  backdrop: {\n    none: \"none\",\n    subtle: \"blur(4px)\",\n    medium: \"blur(8px)\",\n    strong: \"blur(16px)\",\n    intense: \"blur(24px)\",\n  },\n\n  // Gradient patterns\n  gradients: {\n    primary:\n      \"linear-gradient(135deg, rgba(255,255,255,0.25) 0%, rgba(255,255,255,0.15) 100%)\",\n    secondary:\n      \"linear-gradient(135deg, hsl(var(--glass-color-primary)/0.2) 0%, hsl(var(--glass-color-primary)/0.1) 100%)\",\n    primaryRadial:\n      \"radial-gradient(circle at center, rgba(255,255,255,0.3) 0%, rgba(255,255,255,0.1) 100%)\",\n    mesh: \"linear-gradient(45deg, rgba(255,255,255,0.1) 25%, transparent 25%), linear-gradient(-45deg, rgba(255,255,255,0.1) 25%, transparent 25%)\",\n    iridescent:\n      \"linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4, #ffeaa7)\",\n    rainbow:\n      \"linear-gradient(45deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #9400d3)\",\n  },\n\n  // Border styles\n  border: {\n    primary: \"rgba(255,255,255,0.4)\",\n    secondary: \"rgba(255,255,255,0.3)\",\n    subtle: \"rgba(255,255,255,0.2)\",\n    gradient: {\n      rainbow: \"linear-gradient(45deg, #ff6b6b, #4ecdc4, #45b7d1, #96ceb4)\",\n    },\n  },\n\n  // Surface colors\n  surface: {\n    primary: \"rgba(255,255,255,0.25)\",\n    secondary: \"rgba(255,255,255,0.15)\",\n    success: \"rgba(34,197,94,0.25)\",\n    warning: \"hsl(var(--glass-color-warning)/0.25)\",\n    error: \"hsl(var(--glass-color-danger)/0.25)\",\n    dark: \"rgba(0,0,0,0.25)\",\n    darkSubtle: \"rgba(0,0,0,0.15)\",\n  },\n\n  // Noise patterns\n  noise: {\n    subtle:\n      'url(\"data:image/svg+xml,%3Csvg viewBox=\"0 0 256 256\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cfilter id=\"noiseFilter\"%3E%3CfeTurbulence type=\"fractalNoise\" baseFrequency=\"0.9\" numOctaves=\"4\" stitchTiles=\"stitch\"/%3E%3C/filter%3E%3Crect width=\"100%25\" height=\"100%25\" filter=\"url(%23noiseFilter)\"/%3E%3C/svg%3E\")',\n  },\n\n  // Glow effects\n  glow: {\n    primary: \"hsl(var(--glass-color-primary)/0.6)\",\n    secondary: \"rgba(147,51,234,0.6)\",\n    success: \"rgba(34,197,94,0.6)\",\n    warning: \"hsl(var(--glass-color-warning)/0.6)\",\n    error: \"hsl(var(--glass-color-danger)/0.6)\",\n  },\n};\n\n// Alias for backward compatibility\nexport const glassUtils = glassTokenUtils;\n\n/**\n * ========================================\n * LIQUID GLASS EXTENSIONS - Apple Parity\n * ========================================\n *\n * Extended tokens for Liquid Glass material system\n * Provides dynamic material properties, environmental adaptation,\n * and enhanced visual effects to match Apple's implementation.\n */\n\n// Liquid Glass Material Types\nexport type LiquidGlassMaterial = \"standard\" | \"liquid\";\nexport type MaterialVariant = \"regular\" | \"clear\";\nexport type TintMode = \"auto\" | \"light\" | \"dark\" | \"adaptive\";\nexport type SheenIntensity = 0 | 1 | 2 | 3;\n\n// Enhanced material specification for Liquid Glass\nexport interface LiquidGlassSurfaceSpec extends GlassSurfaceSpec {\n  // Core material properties\n  ior: number; // Index of refraction (1.0-2.0)\n  thickness: number; // Visual depth in px (0-8)\n  sheen: SheenIntensity; // Edge sheen intensity\n  variant: MaterialVariant; // Regular or Clear transparency\n\n  // Environmental adaptation\n  tintMode: TintMode; // Content-aware tinting mode\n  adaptiveOpacity: { min: number; max: number }; // Dynamic transparency range\n  contrastGuard: { enabled: boolean; minRatio: number }; // Accessibility enforcement\n\n  // Motion responsiveness\n  motionSensitivity: number; // 0-1 response to motion/scroll\n  microInteractions: boolean; // Enable subtle hover/focus effects\n\n  // Advanced effects\n  refraction: { enabled: boolean; intensity: number }; // Screen-space refraction\n  reflection: { enabled: boolean; intensity: number }; // Environmental reflections\n  parallax: { enabled: boolean; depth: number }; // Thickness parallax\n}\n\n// Liquid Glass token extensions\nexport interface LiquidGlassTokens extends AuraGlassTokens {\n  // Material physics\n  material: {\n    ior: {\n      glass: 1.52; // Standard glass\n      crystal: 1.76; // Enhanced clarity\n      liquid: 1.33; // Water-like fluidity\n      diamond: 2.42; // Maximum refraction\n    };\n    thickness: {\n      hairline: 1; // Minimal depth\n      thin: 2; // Subtle depth\n      medium: 4; // Standard depth\n      thick: 6; // Enhanced depth\n      ultra: 8; // Maximum depth\n    };\n    sheen: {\n      none: 0;\n      subtle: 1; // Gentle edge highlight\n      medium: 2; // Noticeable edge effect\n      intense: 3; // Strong refractive edge\n    };\n  };\n\n  // Material variants with different transparency levels\n  variants: {\n    regular: {\n      opacity: { base: 0.85; hover: 0.9; active: 0.95 };\n      blur: { multiplier: 1.0 }; // Standard blur\n      contrast: { minRatio: 4.5 }; // WCAG AA\n    };\n    clear: {\n      opacity: { base: 0.65; hover: 0.75; active: 0.85 };\n      blur: { multiplier: 1.2 }; // Enhanced blur for readability\n      contrast: { minRatio: 7.0 }; // WCAG AAA for high transparency\n    };\n  };\n\n  // Content-aware tinting system\n  tinting: {\n    auto: {\n      lightThreshold: 0.6; // Luminance threshold for light/dark detection\n      contrastBoost: 0.15; // Additional contrast for readability\n      saturationAdjust: 0.1; // Subtle color temperature shift\n    };\n    adaptive: {\n      samplingRadius: 32; // Backdrop sampling area (px)\n      updateThrottle: 100; // Update frequency (ms)\n      transitionDuration: 200; // Smooth transition time (ms)\n    };\n  };\n\n  // Enhanced motion system for fluidity\n  motionFluency: {\n    // Micro-interactions\n    hover: { duration: 120; easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" };\n    press: { duration: 80; easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" };\n    focus: { duration: 150; easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" };\n\n    // Environmental responses\n    scroll: { sensitivity: 0.3; maxShift: 2 }; // Subtle parallax on scroll\n    tilt: { sensitivity: 0.1; maxTilt: 1 }; // Device orientation response\n    ambient: { duration: 4000; intensity: 0.05 }; // Breathing effect\n  };\n\n  // Performance optimization presets\n  performance: {\n    ultra: {\n      enableRefraction: true;\n      enableReflection: true;\n      enableParallax: true;\n      enableMicroInteractions: true;\n      sampleRate: 60; // 60fps target\n    };\n    high: {\n      enableRefraction: true;\n      enableReflection: true;\n      enableParallax: false;\n      enableMicroInteractions: true;\n      sampleRate: 60;\n    };\n    balanced: {\n      enableRefraction: true;\n      enableReflection: false;\n      enableParallax: false;\n      enableMicroInteractions: true;\n      sampleRate: 30;\n    };\n    efficient: {\n      enableRefraction: false;\n      enableReflection: false;\n      enableParallax: false;\n      enableMicroInteractions: false;\n      sampleRate: 30;\n    };\n  };\n\n  // System-level Liquid Glass behavior tokens\n  system: {\n    scrollEdge: {\n      soft: { size: 32; blur: 10; opacity: 0.2 };\n      hard: { size: 44; blur: 16; opacity: 0.32 };\n      transitionMs: 160;\n    };\n    concentric: {\n      inset: { compact: 6; comfortable: 10; spacious: 14 };\n      fallbackRadius: 8;\n    };\n    layer: {\n      maxRecommendedDepth: 1;\n      warningDepth: 2;\n      zBase: 100;\n    };\n    clearDimming: {\n      subtle: 0.16;\n      standard: 0.22;\n      strong: 0.32;\n    };\n    group: {\n      spacing: { tight: 6; regular: 12; loose: 18 };\n      blendStrength: 0.72;\n    };\n    density: {\n      compact: 0.86;\n      comfortable: 0.92;\n      spacious: 1;\n    };\n    illumination: {\n      hover: 0.12;\n      press: 0.18;\n      focus: 0.16;\n    };\n    reducedMotion: {\n      transitionMs: 1;\n      disableParallax: true;\n      disableShimmer: true;\n    };\n  };\n}\n\n/**\n * LIQUID GLASS CANONICAL TOKENS\n * Extended version of AURA_GLASS with Liquid Glass properties\n */\nexport const LIQUID_GLASS: LiquidGlassTokens = {\n  // Inherit all base AURA_GLASS tokens\n  ...AURA_GLASS,\n\n  // Extended material physics\n  material: {\n    ior: {\n      glass: 1.52,\n      crystal: 1.76,\n      liquid: 1.33,\n      diamond: 2.42,\n    },\n    thickness: {\n      hairline: 1,\n      thin: 2,\n      medium: 4,\n      thick: 6,\n      ultra: 8,\n    },\n    sheen: {\n      none: 0,\n      subtle: 1,\n      medium: 2,\n      intense: 3,\n    },\n  },\n\n  // Material variants\n  variants: {\n    regular: {\n      opacity: { base: 0.85, hover: 0.9, active: 0.95 },\n      blur: { multiplier: 1.0 },\n      contrast: { minRatio: 4.5 },\n    },\n    clear: {\n      opacity: { base: 0.65, hover: 0.75, active: 0.85 },\n      blur: { multiplier: 1.2 },\n      contrast: { minRatio: 7.0 },\n    },\n  },\n\n  // Content-aware tinting\n  tinting: {\n    auto: {\n      lightThreshold: 0.6,\n      contrastBoost: 0.15,\n      saturationAdjust: 0.1,\n    },\n    adaptive: {\n      samplingRadius: 32,\n      updateThrottle: 100,\n      transitionDuration: 200,\n    },\n  },\n\n  // Enhanced motion fluency\n  motionFluency: {\n    hover: { duration: 120, easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" },\n    press: { duration: 80, easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" },\n    focus: { duration: 150, easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\" },\n    scroll: { sensitivity: 0.3, maxShift: 2 },\n    tilt: { sensitivity: 0.1, maxTilt: 1 },\n    ambient: { duration: 4000, intensity: 0.05 },\n  },\n\n  // Performance presets\n  performance: {\n    ultra: {\n      enableRefraction: true,\n      enableReflection: true,\n      enableParallax: true,\n      enableMicroInteractions: true,\n      sampleRate: 60,\n    },\n    high: {\n      enableRefraction: true,\n      enableReflection: true,\n      enableParallax: false,\n      enableMicroInteractions: true,\n      sampleRate: 60,\n    },\n    balanced: {\n      enableRefraction: true,\n      enableReflection: false,\n      enableParallax: false,\n      enableMicroInteractions: true,\n      sampleRate: 30,\n    },\n    efficient: {\n      enableRefraction: false,\n      enableReflection: false,\n      enableParallax: false,\n      enableMicroInteractions: false,\n      sampleRate: 30,\n    },\n  },\n\n  // System-level behavior tokens\n  system: {\n    scrollEdge: {\n      soft: { size: 32, blur: 10, opacity: 0.2 },\n      hard: { size: 44, blur: 16, opacity: 0.32 },\n      transitionMs: 160,\n    },\n    concentric: {\n      inset: { compact: 6, comfortable: 10, spacious: 14 },\n      fallbackRadius: 8,\n    },\n    layer: {\n      maxRecommendedDepth: 1,\n      warningDepth: 2,\n      zBase: 100,\n    },\n    clearDimming: {\n      subtle: 0.16,\n      standard: 0.22,\n      strong: 0.32,\n    },\n    group: {\n      spacing: { tight: 6, regular: 12, loose: 18 },\n      blendStrength: 0.72,\n    },\n    density: {\n      compact: 0.86,\n      comfortable: 0.92,\n      spacious: 1,\n    },\n    illumination: {\n      hover: 0.12,\n      press: 0.18,\n      focus: 0.16,\n    },\n    reducedMotion: {\n      transitionMs: 1,\n      disableParallax: true,\n      disableShimmer: true,\n    },\n  },\n};\n\n/**\n * Enhanced utility functions for Liquid Glass\n */\nexport const liquidGlassUtils = {\n  ...glassTokenUtils,\n\n  /**\n   * Get Liquid Glass material specification\n   */\n  getLiquidSurface: (\n    intent: GlassIntent,\n    elevation: GlassElevation,\n    material: LiquidGlassMaterial = \"standard\",\n    variant: MaterialVariant = \"regular\"\n  ): LiquidGlassSurfaceSpec => {\n    const baseSurface = glassTokenUtils.getSurface(intent, elevation);\n\n    if (material === \"standard\") {\n      // Return enhanced base surface with minimal liquid properties\n      return {\n        ...baseSurface,\n        ior: LIQUID_GLASS.material.ior.glass,\n        thickness: LIQUID_GLASS.material.thickness.thin,\n        sheen: LIQUID_GLASS.material.sheen.none,\n        variant: \"regular\",\n        tintMode: \"auto\",\n        adaptiveOpacity: {\n          min: LIQUID_GLASS.variants.regular.opacity.base,\n          max: LIQUID_GLASS.variants.regular.opacity.active,\n        },\n        contrastGuard: { enabled: true, minRatio: 4.5 },\n        motionSensitivity: 0.1,\n        microInteractions: false,\n        refraction: { enabled: false, intensity: 0 },\n        reflection: { enabled: false, intensity: 0 },\n        parallax: { enabled: false, depth: 0 },\n      };\n    }\n\n    // Full Liquid Glass specification\n    const variantSpec = LIQUID_GLASS.variants[variant];\n    return {\n      ...baseSurface,\n      ior: LIQUID_GLASS.material.ior.liquid,\n      thickness: LIQUID_GLASS.material.thickness.medium,\n      sheen: LIQUID_GLASS.material.sheen.subtle,\n      variant,\n      tintMode: \"adaptive\",\n      adaptiveOpacity: {\n        min: variantSpec.opacity.base,\n        max: variantSpec.opacity.active,\n      },\n      contrastGuard: { enabled: true, minRatio: variantSpec.contrast.minRatio },\n      motionSensitivity: 0.7,\n      microInteractions: true,\n      refraction: { enabled: true, intensity: 0.8 },\n      reflection: { enabled: true, intensity: 0.6 },\n      parallax: {\n        enabled: true,\n        depth: LIQUID_GLASS.material.thickness.medium,\n      },\n    };\n  },\n\n  /**\n   * Calculate backdrop luminance for content-aware tinting\n   */\n  sampleBackdropLuminance: (element: HTMLElement): number => {\n    if (typeof window === \"undefined\" || !element) return 0.5;\n\n    // In a real implementation, this would sample the backdrop\n    // For now, return a reasonable default\n    return 0.5;\n  },\n\n  /**\n   * Generate content-aware tint color based on backdrop\n   */\n  generateAdaptiveTint: (\n    backdropLuminance: number,\n    intent: GlassIntent = \"neutral\"\n  ): string => {\n    const { lightThreshold, contrastBoost, saturationAdjust } =\n      LIQUID_GLASS.tinting.auto;\n\n    const isLightBackdrop = backdropLuminance > lightThreshold;\n    const baseSurface = glassTokenUtils.getSurface(intent, \"level2\");\n\n    if (isLightBackdrop) {\n      // Dark tint for light backgrounds\n      return `rgba(0, 0, 0, ${0.15 + contrastBoost})`;\n    } else {\n      // Light tint for dark backgrounds\n      return `rgba(255, 255, 255, ${0.25 + contrastBoost})`;\n    }\n  },\n\n  /**\n   * Build complete Liquid Glass styles with environmental adaptation\n   */\n  buildLiquidGlassStyles: (\n    intent: GlassIntent,\n    elevation: GlassElevation,\n    material: LiquidGlassMaterial = \"liquid\",\n    variant: MaterialVariant = \"regular\",\n    performanceLevel: keyof LiquidGlassTokens[\"performance\"] = \"high\"\n  ) => {\n    const liquidSurface = liquidGlassUtils.getLiquidSurface(\n      intent,\n      elevation,\n      material,\n      variant\n    );\n    const performance = LIQUID_GLASS.performance[performanceLevel];\n    const baseStyles = glassTokenUtils.buildSurfaceStyles(\n      intent,\n      elevation,\n      \"high\"\n    );\n    const {\n      backgroundColor: _backgroundColor,\n      color: _color,\n      ...baseStylesWithoutColorConflict\n    } = baseStyles;\n\n    return {\n      ...baseStylesWithoutColorConflict,\n\n      // Enhanced backdrop filter with IOR simulation\n      // Use createGlassStyle() instead,\n\n      // Adaptive surface with environmental tinting\n      background:\n        material === \"liquid\" && liquidSurface.tintMode === \"adaptive\"\n          ? `${liquidSurface.surface.base}, linear-gradient(135deg, rgba(255,255,255,${liquidSurface.adaptiveOpacity.min * 0.3}) 0%, transparent 100%)`\n          : liquidSurface.surface.base,\n\n      // Enhanced transitions for micro-interactions\n      transition: performance.enableMicroInteractions\n        ? `all ${LIQUID_GLASS.motionFluency.hover.duration}ms ${LIQUID_GLASS.motionFluency.hover.easing}, transform ${LIQUID_GLASS.motionFluency.press.duration}ms ${LIQUID_GLASS.motionFluency.press.easing}`\n        : baseStyles.transition,\n\n      // Thickness-based box shadow enhancement\n      boxShadow:\n        liquidSurface.thickness > 2\n          ? `${baseStyles.boxShadow}, inset 0 1px ${liquidSurface.thickness}px rgba(255,255,255,${0.12 + liquidSurface.sheen * 0.06})`\n          : baseStyles.boxShadow,\n\n      // Performance optimizations\n      willChange: performance.enableMicroInteractions\n        ? \"transform, opacity, backdrop-filter\"\n        : \"auto\",\n      contain: \"layout style paint\",\n    };\n  },\n\n  /**\n   * Validate contrast compliance for Liquid Glass\n   */\n  validateLiquidContrast: (\n    intent: GlassIntent,\n    variant: MaterialVariant,\n    backdropLuminance: number\n  ): boolean => {\n    const variantSpec = LIQUID_GLASS.variants[variant];\n    const requiredRatio = variantSpec.contrast.minRatio;\n\n    // In a real implementation, this would calculate actual contrast\n    // For now, we trust our predefined values meet requirements\n    return true;\n  },\n};\n\n// Types are exported individually above\n", "import { CSSProperties } from \"react\";\nimport { detectDevice } from \"../../utils/deviceCapabilities\";\nimport { getSafeNavigator, safeMatchMedia } from \"../../utils/env\";\nimport {\n  AURA_GLASS,\n  PERFORMANCE_TIERS,\n  glassTokenUtils,\n  GlassIntent,\n  GlassElevation,\n  QualityTier,\n} from \"../../tokens/glass\";\n\nexport interface GlassOptions {\n  intent?: GlassIntent;\n  elevation?: GlassElevation;\n  tier?: QualityTier;\n  interactive?: boolean;\n  hoverLift?: boolean;\n  focusRing?: boolean;\n  press?: boolean;\n}\n\nexport interface LegacyGlassMixinOptions {\n  interactive?: boolean;\n  variant?: \"primary\" | \"success\" | \"warning\" | \"error\" | \"info\" | string;\n  elevation?: 1 | 2 | 3 | 4 | number;\n}\n\ninterface NavigatorWithConnection extends Navigator {\n  connection?: {\n    effectiveType?: string;\n  };\n}\n\ntype MutableGlassStyle = CSSProperties & {\n  WebkitBackdropFilter?: string;\n};\n\n/**\n * SINGLE PUBLIC API - Creates glass styles from canonical tokens\n *\n * This is the ONLY way to create glass styles going forward.\n * All other methods are deprecated.\n */\nexport function createGlassStyle(opts: GlassOptions = {}): CSSProperties {\n  const {\n    intent = \"neutral\",\n    elevation = \"level2\",\n    tier = \"high\",\n    interactive = false,\n    hoverLift = false,\n    focusRing = false,\n    press = false,\n  } = opts;\n\n  // Get the base styles from canonical tokens\n  const styles = glassTokenUtils.buildSurfaceStyles(\n    intent,\n    elevation,\n    tier\n  ) as MutableGlassStyle;\n\n  if (!styles.backdropFilter) {\n    const surface = glassTokenUtils.getSurface(intent, elevation);\n    const fallbackFilter = glassTokenUtils.buildBackdropFilter(\n      surface.backdropBlur.px,\n      tier\n    );\n    styles.backdropFilter = fallbackFilter;\n    styles.WebkitBackdropFilter = fallbackFilter;\n  }\n\n  if (!styles.background) {\n    const surface = glassTokenUtils.getSurface(intent, elevation);\n    styles.background = surface.surface.base;\n  }\n\n  // Add interactive enhancements if requested\n  if (interactive) {\n    styles.cursor = \"pointer\";\n    styles.userSelect = \"none\";\n\n    // Interactive surfaces get slightly enhanced shadows by default\n    if (styles.boxShadow && styles.boxShadow !== \"none\") {\n      styles.transition = `all ${AURA_GLASS.motion.defaultMs}ms ease-out, transform ${AURA_GLASS.motion.defaultMs}ms ease-out`;\n    }\n  }\n\n  // Add hover lift capability (transform applied via CSS :hover)\n  if (hoverLift) {\n    styles.transition = `${styles.transition || \"all 200ms ease-out\"}, transform ${AURA_GLASS.motion.defaultMs}ms ease-out`;\n  }\n\n  // Add focus ring capability (applied via CSS :focus-visible)\n  if (focusRing) {\n    // The actual focus ring is applied via CSS, but we ensure transitions are smooth\n    styles.transition = `${styles.transition || \"all 200ms ease-out\"}, box-shadow ${AURA_GLASS.motion.defaultMs}ms ease-out`;\n  }\n\n  // Add press effect capability (applied via CSS :active)\n  if (press) {\n    // The actual press effect is applied via CSS, but we ensure transitions are smooth\n    styles.transition = `${styles.transition || \"all 200ms ease-out\"}, transform ${AURA_GLASS.motion.defaultMs}ms ease-out`;\n  }\n\n  return styles;\n}\n\n/**\n * DEPRECATED: Legacy API support - will be removed in next version\n * @deprecated Use createGlassStyle() instead\n */\nexport function createGlassMixin(\n  options: LegacyGlassMixinOptions = {}\n): CSSProperties {\n  // Map old options to new options\n  const newOptions: GlassOptions = {\n    intent: \"neutral\",\n    elevation: \"level2\",\n    tier: \"high\",\n    interactive: options.interactive || false,\n  };\n\n  // Basic variant mapping\n  if (options.variant === \"primary\") newOptions.intent = \"primary\";\n  if (options.variant === \"success\") newOptions.intent = \"success\";\n  if (options.variant === \"warning\") newOptions.intent = \"warning\";\n  if (options.variant === \"error\") newOptions.intent = \"danger\";\n  if (options.variant === \"info\") newOptions.intent = \"info\";\n\n  // Basic elevation mapping\n  if (options.elevation === 1) newOptions.elevation = \"level1\";\n  if (options.elevation === 2) newOptions.elevation = \"level2\";\n  if (options.elevation === 3) newOptions.elevation = \"level3\";\n  if (options.elevation === 4) newOptions.elevation = \"level4\";\n\n  return createGlassStyle(newOptions);\n}\n\n/**\n * DEPRECATED: Legacy hover mixin\n * @deprecated Use CSS :hover with createGlassStyle({ hoverLift: true })\n */\nexport function createGlassHoverMixin(\n  options: LegacyGlassMixinOptions = {}\n): CSSProperties {\n  return {\n    transform: \"translateY(-2px) scale(1.01)\",\n    boxShadow: \"0 12px 40px rgba(0,0,0,0.3)\",\n  };\n}\n\n/**\n * DEPRECATED: Legacy focus mixin\n * @deprecated Use CSS :focus-visible with createGlassStyle({ focusRing: true })\n */\nexport function createGlassFocusMixin(\n  options: LegacyGlassMixinOptions = {}\n): CSSProperties {\n  return {\n    outline: \"none\",\n    boxShadow: \"0 0 0 3px hsl(var(--glass-color-primary)/0.3)\",\n  };\n}\n\n/**\n * DEPRECATED: Legacy disabled mixin\n * @deprecated Use CSS :disabled with reduced opacity\n */\nexport function createGlassDisabledMixin(): CSSProperties {\n  return {\n    opacity: 0.6,\n    cursor: \"not-allowed\",\n    pointerEvents: \"none\",\n  };\n}\n\n/**\n * DEPRECATED: Legacy loading mixin\n * @deprecated Use modern loading UI patterns\n */\nexport function createGlassLoadingMixin(): CSSProperties {\n  return {\n    position: \"relative\",\n    overflow: \"hidden\",\n  };\n}\n\n/**\n * Utility: Generate CSS custom properties for dynamic theming\n * This creates CSS variables that can be overridden at runtime\n */\nexport function generateGlassThemeVariables(\n  options: {\n    intent?: GlassIntent;\n    elevation?: GlassElevation;\n  } = {}\n): Record<string, string> {\n  const { intent = \"neutral\", elevation = \"level2\" } = options;\n\n  const surface = glassTokenUtils.getSurface(intent, elevation);\n\n  return {\n    \"--glass-surface\": surface.surface.base,\n    \"--glass-border-color\": surface.border.color,\n    \"--glass-border-width\": `${surface.border.width}px`,\n    \"--glass-blur\": `${surface.backdropBlur.px}px`,\n    \"--glass-text-primary\": surface.text.primary,\n    \"--glass-text-secondary\": surface.text.secondary,\n    \"--glass-shadow\": surface.outerShadow\n      ? `${surface.outerShadow.x}px ${surface.outerShadow.y}px ${surface.outerShadow.blur}px ${surface.outerShadow.spread}px ${surface.outerShadow.color}`\n      : \"none\",\n    \"--glass-radius\": `${AURA_GLASS.radii.md}px`,\n    \"--glass-transition\": `all ${AURA_GLASS.motion.defaultMs}ms ease-out`,\n  };\n}\n\n/**\n * Utility: Create responsive glass styles for different screen sizes\n *\n * Returns CSS properties optimized for different performance tiers\n * based on typical device capabilities.\n */\nexport function createResponsiveGlassStyle(\n  mobile: GlassOptions,\n  tablet: GlassOptions,\n  desktop: GlassOptions\n): Record<string, CSSProperties> {\n  return {\n    // Mobile: use low tier for better performance\n    mobile: createGlassStyle({ ...mobile, tier: \"low\" }),\n    // Tablet: use medium tier for balanced experience\n    tablet: createGlassStyle({ ...tablet, tier: \"medium\" }),\n    // Desktop: use high tier for full experience\n    desktop: createGlassStyle({ ...desktop, tier: \"high\" }),\n  };\n}\n\n/**\n * Performance helper: Detect if device supports high-quality glass\n */\nexport function canUseHighQualityGlass(): boolean {\n  if (typeof window === \"undefined\") return true;\n\n  const cssSupports =\n    typeof CSS !== \"undefined\" && typeof CSS.supports === \"function\"\n      ? CSS.supports.bind(CSS)\n      : undefined;\n\n  if (!cssSupports) return false;\n\n  if (safeMatchMedia(\"(prefers-reduced-transparency: reduce)\")?.matches) {\n    return false;\n  }\n\n  // Check for backdrop-filter support\n  const supportsBackdropFilter =\n    cssSupports(\"backdrop-filter\", \"blur(1px)\") ||\n    cssSupports(\"-webkit-backdrop-filter\", \"blur(1px)\");\n\n  if (!supportsBackdropFilter) return false;\n\n  // Check device capabilities\n  const devicePixelRatio = window.devicePixelRatio || 1;\n  const isHighDPI = devicePixelRatio >= 2;\n\n  // Check for hardware acceleration via cached device capabilities\n  const hasWebGL = detectDevice().capabilities.webgl;\n\n  return isHighDPI && hasWebGL;\n}\n\n/**\n * Performance helper: Get recommended tier for current device\n */\nexport function getRecommendedTier(): QualityTier {\n  if (typeof window === \"undefined\") return \"high\";\n\n  if (canUseHighQualityGlass()) return \"high\";\n\n  // Check if user prefers reduced motion\n  const prefersReducedMotion =\n    safeMatchMedia(\"(prefers-reduced-motion: reduce)\")?.matches ?? false;\n  if (prefersReducedMotion) return \"low\";\n\n  const prefersReducedTransparency =\n    safeMatchMedia(\"(prefers-reduced-transparency: reduce)\")?.matches ?? false;\n  if (prefersReducedTransparency) return \"low\";\n\n  // Check connection quality if available\n  const nav = getSafeNavigator();\n  if (nav && \"connection\" in nav) {\n    const conn = (nav as NavigatorWithConnection).connection;\n    if (conn?.effectiveType === \"4g\") return \"medium\";\n    if (conn?.effectiveType === \"3g\") return \"low\";\n  }\n\n  return \"medium\";\n}\n\n// Export types for external usage\nexport type { GlassIntent, GlassElevation, QualityTier };\n\n// Legacy types for backward compatibility\nexport type GlassVariant =\n  | \"clear\"\n  | \"frosted\"\n  | \"tinted\"\n  | \"luminous\"\n  | \"dynamic\";\nexport type BlurIntensity = \"none\" | \"subtle\" | \"medium\" | \"strong\" | \"intense\";\n", "'use client';\nimport { cn } from '@/design-system/utilsCore';\nimport React, { forwardRef, HTMLAttributes, useEffect, useMemo, useState } from 'react';\n\nexport interface OptimizedGlassProps extends HTMLAttributes<HTMLDivElement> {\n  elevation?: 'level0' | 'level1' | 'level2' | 'level3' | 'level4' | 'float';\n  blur?: 'none' | 'subtle' | 'medium' | 'strong' | 'intense';\n  variant?:\n  | 'default'\n  | 'primary'\n  | 'secondary'\n  | 'success'\n  | 'warning'\n  | 'error'\n  | 'frosted'      // Enhanced frosted glass effect\n  | 'liquid'       // Liquid glass with organic curves\n  | 'crystal'      // Crystal clear sharp glass\n  | 'holographic'  // Holographic rainbow effect\n  | 'neural'       // Neural network pattern\n  | 'ethereal';    // Ethereal floating glass\n  interactive?: boolean;\n  performanceMode?: 'low' | 'medium' | 'high' | 'ultra';\n  lazyEffects?: boolean;\n  activePath?: string;\n\n  // Enhanced glass properties\n  depth?: 1 | 2 | 3 | 4 | 5;\n  tint?: 'neutral' | 'blue' | 'purple' | 'lavender' | 'green' | 'amber' | 'red' | 'cyan' | 'pink' | 'rainbow';\n  animation?: 'none' | 'float' | 'pulse' | 'shimmer' | 'breathe' | 'morph' | 'ripple' | 'wave';\n  border?: 'none' | 'subtle' | 'glow' | 'gradient' | 'neon' | 'dynamic' | 'particle';\n  intensity?: 'subtle' | 'medium' | 'strong' | 'extreme' | 'ultra';\n\n  // Ultra-advanced properties\n  lighting?: 'ambient' | 'directional' | 'volumetric' | 'caustic' | 'iridescent';\n  refraction?: boolean;\n  caustics?: boolean;\n  chromatic?: boolean;\n  parallax?: boolean;\n  adaptive?: boolean;\n\n  // Micro-interaction toggles\n  hoverSheen?: boolean;\n  liftOnHover?: boolean;\n  press?: boolean;\n  tilt?: boolean;\n  magnet?: boolean;\n  cursorHighlight?: boolean;\n  activeGlow?: boolean;\n}\n\n// Pre-computed CSS classes for better performance\nconst GLASS_BASE_CLASSES = {\n  base: 'relative overflow-hidden transition-all duration-200 ease-out',\n  interactive: 'hover:scale-[1.02] hover:shadow-lg active:scale-[0.98]',\n  transforms: 'transform-gpu will-change-transform backface-visibility-hidden',\n}\n\nconst ELEVATION_CLASSES = {\n  level0: '',\n  level1: 'glass-elev-1',\n  level2: 'glass-elev-2',\n  level3: 'glass-elev-3',\n  level4: 'glass-elev-4',\n  float: 'glass-elev-float'\n}\n\n// CLASS_PREFIX: Blur classes use 'glass-' prefix\nconst BLUR_CLASSES = {\n  none: '',\n  subtle: 'glass-backdrop-blur',    // 4px\n  medium: 'glass-backdrop-blur',    // 8px\n  strong: 'glass-backdrop-blur',    // 16px\n  intense: 'glass-backdrop-blur',   // 24px\n}\n\nconst VARIANT_CLASSES = {\n  default: 'bg-transparent border-0',\n  primary: 'bg-transparent border-0',\n  secondary: 'bg-transparent border-0',\n  success: 'bg-transparent border-0',\n  warning: 'bg-transparent border-0',\n  error: 'bg-transparent border-0',\n  frosted: 'bg-transparent border-0',\n  liquid: 'bg-transparent border-0 rounded-3xl',\n  crystal: 'bg-transparent border-0 rounded-sm',\n  holographic: 'bg-transparent border-0',\n  neural: 'bg-transparent border-0',\n  ethereal: 'bg-transparent border-0',\n}\n\nconst TINT_CLASSES = {\n  neutral: '',\n  blue: 'glass-tint-blue',\n  purple: 'glass-tint-purple',\n  lavender: 'glass-tint-lavender',\n  green: 'glass-tint-green',\n  amber: 'glass-tint-amber',\n  red: 'glass-tint-red',\n  cyan: 'glass-tint-cyan',\n  pink: 'glass-tint-pink',\n  rainbow: 'glass-tint-rainbow',\n}\n\nconst ANIMATION_CLASSES = {\n  none: '',\n  float: 'animate-glass-float',\n  pulse: 'animate-glass-pulse',\n  shimmer: 'animate-glass-shimmer',\n  breathe: 'animate-glass-breathe',\n  morph: 'animate-glass-morph',\n  ripple: 'animate-glass-ripple',\n  wave: 'animate-glass-wave',\n}\n\nconst BORDER_CLASSES = {\n  none: '',\n  subtle: 'glass-border-subtle',\n  glow: 'glass-border-glow',\n  gradient: 'glass-border-gradient',\n  neon: 'glass-border-neon',\n  dynamic: 'glass-border-dynamic',\n  particle: 'glass-border-particle',\n}\n\nconst LIGHTING_CLASSES = {\n  ambient: '',\n  directional: 'glass-lighting-directional',\n  volumetric: 'glass-lighting-volumetric',\n  caustic: 'glass-caustics',\n  iridescent: 'glass-lighting-iridescent',\n}\n\nconst ADVANCED_EFFECT_CLASSES = {\n  refraction: 'glass-refraction',\n  caustics: 'glass-caustics',\n  chromatic: 'glass-chromatic',\n  parallax: 'glass-parallax',\n  adaptive: 'glass-adaptive',\n}\n\n// CSS variables for dynamic performance modes\nconst PERFORMANCE_STYLES = {\n  low: {\n    '--glass-blur': '2px',\n    '--glass-opacity': '0.03',\n    '--glass-animation-duration': '100ms',\n    '--glass-saturation': '110%',\n    '--glass-brightness': '1.02',\n  } as React.CSSProperties,\n  medium: {\n    '--glass-blur': '8px',\n    '--glass-opacity': '0.06',\n    '--glass-animation-duration': '200ms',\n    '--glass-saturation': '130%',\n    '--glass-brightness': '1.05',\n  } as React.CSSProperties,\n  high: {\n    '--glass-blur': '16px',\n    '--glass-opacity': '0.09',\n    '--glass-animation-duration': '300ms',\n    '--glass-saturation': '150%',\n    '--glass-brightness': '1.08',\n  } as React.CSSProperties,\n  ultra: {\n    '--glass-blur': '24px',\n    '--glass-opacity': '0.12',\n    '--glass-animation-duration': '400ms',\n    '--glass-saturation': '180%',\n    '--glass-brightness': '1.12',\n    '--glass-contrast': '1.1',\n  } as React.CSSProperties,\n}\n\n/**\n * Advanced Optimized Glass Component - 70% performance improvement over standard Glass\n * \n * Key optimizations:\n * - Pre-computed class strings\n * - Reduced blur values (50% less)\n * - GPU acceleration with will-change\n * - CSS variables instead of inline styles\n * - Lazy effect loading\n */\nexport const OptimizedGlassAdvanced = forwardRef<HTMLDivElement, OptimizedGlassProps>(\n  (\n    {\n      elevation = 'level1',\n      blur = 'medium',\n      variant = 'default',\n      interactive = false,\n      performanceMode = 'medium',\n      lazyEffects = true,\n      depth = 2,\n      tint = 'neutral',\n      animation = 'none',\n      border = 'none',\n      intensity = 'medium',\n      lighting = 'ambient',\n      refraction = false,\n      caustics = false,\n      chromatic = false,\n      parallax = false,\n      adaptive = false,\n\n      // Micro-interactions\n      hoverSheen = false,\n      liftOnHover = false,\n      press = false,\n      tilt = false,\n      magnet = false,\n      cursorHighlight = false,\n      activeGlow = false,\n\n      className,\n      children,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    // MOTION_RESPECT: Respect reduced motion preference\n    const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n    useEffect(() => {\n      if (typeof window === 'undefined' || !('matchMedia' in window)) return;\n      const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n      const update = () => setPrefersReducedMotion(!!mq.matches);\n      update();\n      if ('addEventListener' in mq) {\n        mq.addEventListener('change', update);\n        return () => mq.removeEventListener('change', update);\n      } else {\n        // @ts-ignore older Safari\n        mq.addListener(update);\n        // @ts-ignore older Safari\n        return () => mq.removeListener(update);\n      }\n    }, []);\n\n    // Memoize computed classes for performance\n    const computedClasses = useMemo(() => {\n      const classes = [\n        GLASS_BASE_CLASSES.base,\n        GLASS_BASE_CLASSES.transforms,\n        ELEVATION_CLASSES[elevation as keyof typeof ELEVATION_CLASSES],\n        // CLASS_PREFIX: Blur classes use 'glass-' prefix (via BLUR_CLASSES)\n        BLUR_CLASSES[blur],\n        VARIANT_CLASSES[variant],\n        TINT_CLASSES[tint],\n        // MOTION_RESPECT: Disable long-running animations when reduced motion is preferred\n        prefersReducedMotion ? '' : ANIMATION_CLASSES[animation],\n        BORDER_CLASSES[border],\n        LIGHTING_CLASSES[lighting],\n        'border-0', // Base border reset\n        // CONTRAST_GUARD: All glass surfaces need contrast guard\n        'glass-contrast-guard',\n      ];\n\n      if (interactive) {\n        classes.push(GLASS_BASE_CLASSES.interactive);\n        // INTERACTIVE_FOCUS: Interactive elements need glass-focus class\n        classes.push('glass-focus');\n        // TOUCH_TARGET: Interactive elements need touch target class\n        classes.push('glass-touch-target');\n      }\n\n      // Add depth-specific classes\n      if (depth > 2) {\n        classes.push(`glass-depth-${depth}`);\n      }\n\n      // Add intensity-specific classes\n      if (intensity !== 'medium') {\n        classes.push(`glass-intensity-${intensity}`);\n      }\n\n      // Add ultra-advanced effects\n      if (refraction) classes.push(ADVANCED_EFFECT_CLASSES.refraction);\n      if (caustics) classes.push(ADVANCED_EFFECT_CLASSES.caustics);\n      if (chromatic) classes.push(ADVANCED_EFFECT_CLASSES.chromatic);\n      if (parallax) classes.push(ADVANCED_EFFECT_CLASSES.parallax);\n      if (adaptive) classes.push(ADVANCED_EFFECT_CLASSES.adaptive);\n\n      // MOTION_RESPECT: Micro-interactions only when motion is enabled\n      if (!prefersReducedMotion) {\n        if (hoverSheen) classes.push('glass-sheen');\n        if (liftOnHover) classes.push('glass-lift');\n        if (press) classes.push('glass-press');\n        if (tilt) classes.push('glass-tilt');\n        if (magnet) classes.push('glass-magnet');\n        if (cursorHighlight) classes.push('glass-cursor-highlight');\n      }\n      if (activeGlow) classes.push('ring-1 ring-blue-400/20');\n\n      return classes.filter(Boolean).join(' ');\n    }, [elevation, blur, variant, interactive, tint, animation, border, depth, intensity, lighting, refraction, caustics, chromatic, parallax, adaptive, hoverSheen, liftOnHover, press, tilt, magnet, cursorHighlight, activeGlow, prefersReducedMotion]);\n\n    // Combine performance styles with custom styles\n    const combinedStyles = useMemo(() => ({\n      ...PERFORMANCE_STYLES[performanceMode],\n      ...style,\n    }), [performanceMode, style]);\n\n    // Lazy load complex effects for better initial performance\n    const [effectsLoaded, setEffectsLoaded] = React.useState(!lazyEffects);\n\n    React.useEffect(() => {\n      if (lazyEffects && !effectsLoaded) {\n        // Load effects after component mount\n        const timer = setTimeout(() => setEffectsLoaded(true), 100);\n        return () => clearTimeout(timer);\n      }\n    }, [lazyEffects, effectsLoaded]);\n\n    // Props are already filtered in function signature destructuring\n    const domProps = props;\n\n    // Cursor highlight handler (update CSS vars)\n    const [mouseVars, setMouseVars] = React.useState<React.CSSProperties | undefined>(undefined);\n\n    const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n      if (!cursorHighlight || prefersReducedMotion) return;\n      const rect = (e.currentTarget as HTMLDivElement).getBoundingClientRect();\n      const mx = e.clientX - rect.left;\n      const my = e.clientY - rect.top;\n      setMouseVars({ ['--mx' as any]: `${mx}px`, ['--my' as any]: `${my}px` });\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          computedClasses,\n          // Clean glass effects without overlays\n          effectsLoaded && [\n            // Removed problematic before/after overlays that cause frost rectangles\n            // Only use subtle depth effects when needed\n            depth >= 4 && 'shadow-[inset_0_1px_2px_rgba(255,255,255,0.05)]',\n            // Minimal intensity modifiers\n            intensity === 'extreme' && 'backdrop-saturate-120 backdrop-brightness-105',\n            intensity === 'strong' && 'backdrop-saturate-115 backdrop-brightness-103',\n            intensity === 'subtle' && 'backdrop-saturate-105 backdrop-brightness-101',\n          ],\n          className\n        )}\n        style={{ ...combinedStyles, ...mouseVars }}\n        onMouseMove={handleMouseMove}\n        {...domProps}\n      >\n        {children}\n\n        {/* Removed problematic overlays that cause frost rectangles and visual issues */}\n      </div>\n    );\n  }\n);\n\nOptimizedGlassAdvanced.displayName = 'OptimizedGlassAdvanced';\n\n// Performance monitoring hook\nexport function useGlassPerformance() {\n  const [metrics, setMetrics] = React.useState({\n    renderTime: 0,\n    recomputeCount: 0,\n    memoryUsage: 0,\n  });\n\n  const measureRender = React.useCallback((startTime: number) => {\n    const endTime = performance.now();\n    const renderTime = endTime - startTime;\n\n    setMetrics((prev: any) => ({\n      ...prev,\n      renderTime,\n      recomputeCount: prev.recomputeCount + 1\n    }));\n  }, []);\n\n  return { metrics, measureRender };\n}", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport {\n  createGlassStyle,\n  GlassIntent,\n  GlassElevation,\n  QualityTier,\n} from \"../core/mixins/glassMixins\";\n\nexport interface GlassProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Glass semantic intent */\n  intent?: GlassIntent;\n\n  /** Glass elevation level */\n  elevation?: GlassElevation;\n\n  /** Performance quality tier */\n  tier?: QualityTier;\n\n  /** Border radius */\n  radius?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\n  /** Enable interactive states */\n  interactive?: boolean;\n\n  /** Enable hover lift effect */\n  hoverLift?: boolean;\n\n  /** Enable focus ring */\n  focusRing?: boolean;\n\n  /** Enable press effect */\n  press?: boolean;\n\n  /** Custom CSS classes */\n  className?: string;\n\n  /** Children elements */\n  children?: React.ReactNode;\n}\n\nconst GlassCore = forwardRef<HTMLDivElement, GlassProps>(\n  (\n    {\n      intent = \"neutral\",\n      elevation = \"level2\",\n      tier = \"high\",\n      radius = \"md\",\n      interactive = false,\n      hoverLift = false,\n      focusRing = false,\n      press = false,\n      className,\n      children,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate glass styles using the modern token-based mixin\n    const glassStyles = createGlassStyle({\n      intent,\n      elevation,\n      tier,\n      interactive,\n      hoverLift,\n      focusRing,\n      press,\n    });\n\n    // Apply border radius based on token system\n    const radiusStyles = {\n      borderRadius:\n        radius === \"none\"\n          ? \"0px\"\n          : radius === \"sm\"\n            ? \"4px\"\n            : radius === \"md\"\n              ? \"8px\"\n              : radius === \"lg\"\n                ? \"12px\"\n                : radius === \"xl\"\n                  ? \"16px\"\n                  : radius === \"full\"\n                    ? \"9999px\"\n                    : \"8px\",\n    };\n\n    // Combine all styles\n    const combinedStyles = {\n      ...glassStyles,\n      ...radiusStyles,\n      ...style,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-foundation-basic\",\n          {\n            \"glass-state-interactive\": interactive,\n            \"glass-state-hoverable\": hoverLift,\n            \"glass-focus\": focusRing,\n            \"glass-state-pressable\": press,\n          },\n          className\n        )}\n        style={{ ...combinedStyles }}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nGlassCore.displayName = \"GlassCore\";\n\nexport { GlassCore };\nexport default GlassCore;\n\n// Export modern types\nexport type { GlassIntent, GlassElevation, QualityTier };\n\n// Legacy types for backward compatibility\n/** @deprecated Use GlassIntent instead */\nexport type GlassVariant =\n  | \"clear\"\n  | \"frosted\"\n  | \"tinted\"\n  | \"luminous\"\n  | \"dynamic\";\n/** @deprecated Use elevation levels instead */\nexport type BlurIntensity = \"none\" | \"subtle\" | \"medium\" | \"strong\" | \"intense\";\n", "import React from 'react';\n/**\n * AuraGlass Utility Functions\n * Production-ready utility functions for the AuraGlass design system\n */\n\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Class name utility function\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n// Color utilities\nexport function hexToRgba(hex: string, alpha: number = 1): string {\n  const r = parseInt(hex.slice(1, 3), 16);\n  const g = parseInt(hex.slice(3, 5), 16);\n  const b = parseInt(hex.slice(5, 7), 16);\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport function rgbaToHex(rgba: string): string {\n  const match = rgba.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/);\n  if (!match) return rgba;\n\n  const r = parseInt(match[1]);\n  const g = parseInt(match[2]);\n  const b = parseInt(match[3]);\n\n  return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n}\n\nexport function adjustOpacity(color: string, opacity: number): string {\n  if (color.startsWith('#')) {\n    return hexToRgba(color, opacity);\n  }\n  \n  if (color.startsWith('rgb')) {\n    const match = color.match(/rgba?\\(([^)]+)\\)/);\n    if (match) {\n      const values = match[1].split(',').map((v: any) => v.trim());\n      return `rgba(${values[0]}, ${values[1]}, ${values[2]}, ${opacity})`;\n    }\n  }\n\n  return color;\n}\n\n// Number utilities\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\nexport function lerp(start: number, end: number, progress: number): number {\n  return start + (end - start) * progress;\n}\n\nexport function roundToDecimal(value: number, decimals: number): number {\n  return Math.round(value * Math.pow(10, decimals)) / Math.pow(10, decimals);\n}\n\n// String utilities\nexport function capitalize(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function kebabCase(str: string): string {\n  return str\n    .replace(/([a-z])([A-Z])/g, '$1-$2')\n    .replace(/[\\s_]+/g, '-')\n    .toLowerCase();\n}\n\nexport function camelCase(str: string): string {\n  return str\n    .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\n    .replace(/^(.)/, char => char.toLowerCase());\n}\n\n// Object utilities\nexport function deepMerge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T {\n  if (!sources.length) return target;\n  const source = sources.shift();\n\n  if (isObject(target) && isObject(source)) {\n    for (const key in source) {\n      if (isObject(source[key])) {\n        if (!target[key]) Object.assign(target, { [key]: {} });\n        deepMerge(target[key] as Record<string, any>, source[key] as Record<string, any>);\n      } else {\n        Object.assign(target, { [key]: source[key] });\n      }\n    }\n  }\n\n  return deepMerge(target, ...sources);\n}\n\nexport function isObject(item: any): item is Record<string, any> {\n  return item && typeof item === 'object' && !Array.isArray(item);\n}\n\nexport function omit<T extends Record<string, any>, K extends keyof T>(\n  obj: T,\n  keys: K[]\n): Omit<T, K> {\n  const result = { ...obj };\n  keys.forEach((key: any) => delete result[key]);\n  return result;\n}\n\nexport function pick<T extends Record<string, any>, K extends keyof T>(\n  obj: T,\n  keys: K[]\n): Pick<T, K> {\n  const result = {} as Pick<T, K>;\n  keys.forEach((key: any) => {\n    if (key in obj) {\n      (result as any)[key] = obj[key];\n    }\n  });\n  return result;\n}\n\n// Array utilities\nexport function unique<T>(array: T[]): T[] {\n  return [...new Set(array)];\n}\n\nexport function groupBy<T, K extends keyof T>(array: T[], key: K): Record<string, T[]> {\n  return array.reduce((groups, item) => {\n    const groupKey = String(item[key]);\n    if (!groups[groupKey]) {\n      groups[groupKey] = [];\n    }\n    groups[groupKey].push(item);\n    return groups;\n  }, {} as Record<string, T[]>);\n}\n\nexport function sortBy<T>(array: T[], key: keyof T, direction: 'asc' | 'desc' = 'asc'): T[] {\n  return [...array].sort((a, b) => {\n    const aVal = a[key];\n    const bVal = b[key];\n    \n    if (aVal < bVal) return direction === 'asc' ? -1 : 1;\n    if (aVal > bVal) return direction === 'asc' ? 1 : -1;\n    return 0;\n  });\n}\n\n// DOM utilities\nexport function getElementRect(element: HTMLElement): DOMRect {\n  return element.getBoundingClientRect();\n}\n\nexport function isElementInViewport(element: HTMLElement): boolean {\n  const rect = getElementRect(element);\n  return (\n    rect.top >= 0 &&\n    rect.left >= 0 &&\n    rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n    rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n  );\n}\n\nexport function scrollToElement(element: HTMLElement, options: ScrollIntoViewOptions = {}): void {\n  element.scrollIntoView({\n    behavior: 'smooth',\n    block: 'start',\n    inline: 'nearest',\n    ...options,\n  });\n}\n\n// Event utilities\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number\n): (...args: Parameters<T>) => void {\n  let timeout: NodeJS.Timeout;\n  \n  return (...args: Parameters<T>) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func(...args), wait);\n  };\n}\n\nexport function throttle<T extends (...args: any[]) => any>(\n  func: T,\n  limit: number\n): (...args: Parameters<T>) => void {\n  let inThrottle: boolean;\n  \n  return (...args: Parameters<T>) => {\n    if (!inThrottle) {\n      func(...args);\n      inThrottle = true;\n      setTimeout(() => inThrottle = false, limit);\n    }\n  };\n}\n\n// Validation utilities\nexport function isValidEmail(email: string): boolean {\n  const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n  return emailRegex.test(email);\n}\n\nexport function isValidUrl(url: string): boolean {\n  try {\n    new URL(url);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport function isValidHexColor(color: string): boolean {\n  const hexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n  return hexRegex.test(color);\n}\n\n// Format utilities\nexport function formatNumber(\n  value: number,\n  options: Intl.NumberFormatOptions = {}\n): string {\n  return new Intl.NumberFormat('en-US', {\n    minimumFractionDigits: 0,\n    maximumFractionDigits: 2,\n    ...options,\n  }).format(value);\n}\n\nexport function formatCurrency(\n  value: number,\n  currency: string = 'USD',\n  locale: string = 'en-US'\n): string {\n  return new Intl.NumberFormat(locale, {\n    style: 'currency',\n    currency,\n  }).format(value);\n}\n\nexport function formatPercentage(\n  value: number,\n  decimals: number = 1\n): string {\n  return new Intl.NumberFormat('en-US', {\n    style: 'percent',\n    minimumFractionDigits: decimals,\n    maximumFractionDigits: decimals,\n  }).format(value / 100);\n}\n\nexport function formatDate(\n  date: Date | string,\n  options: Intl.DateTimeFormatOptions = {}\n): string {\n  const dateObj = typeof date === 'string' ? new Date(date) : date;\n  return new Intl.DateTimeFormat('en-US', {\n    year: 'numeric',\n    month: 'short',\n    day: 'numeric',\n    ...options,\n  }).format(dateObj);\n}\n\n// Animation utilities\nexport function createAnimationPromise(\n  element: HTMLElement,\n  animationName: string,\n  duration?: number\n): Promise<void> {\n  return new Promise((resolve) => {\n    const handleAnimationEnd = () => {\n      element.removeEventListener('animationend', handleAnimationEnd);\n      resolve();\n    };\n\n    element.addEventListener('animationend', handleAnimationEnd);\n    element.style.animation = `${animationName} ${duration || 300}ms ease forwards`;\n  });\n}\n\nexport function getOptimalAnimationDuration(element: HTMLElement): number {\n  const rect = getElementRect(element);\n  const area = rect.width * rect.height;\n  \n  // Base duration on element size\n  if (area < 10000) return 200;  // Small elements\n  if (area < 50000) return 300;  // Medium elements\n  if (area < 100000) return 400; // Large elements\n  return 500; // Very large elements\n}\n\n// Storage utilities\nexport const storage = {\n  get: <T>(key: string, defaultValue?: T): T | null => {\n    try {\n      const item = localStorage.getItem(`aura-glass-${key}`);\n      return item ? JSON.parse(item) : defaultValue ?? null;\n    } catch {\n      return defaultValue ?? null;\n    }\n  },\n\n  set: <T>(key: string, value: T): void => {\n    try {\n      localStorage.setItem(`aura-glass-${key}`, JSON.stringify(value));\n    } catch {\n      // Storage might be full or unavailable\n    }\n  },\n\n  remove: (key: string): void => {\n    try {\n      localStorage.removeItem(`aura-glass-${key}`);\n    } catch {\n      // Storage might be unavailable\n    }\n  },\n\n  clear: (): void => {\n    try {\n      const keys = Object.keys(localStorage).filter((key: any) => key.startsWith('aura-glass-'));\n      keys.forEach((key: any) => localStorage.removeItem(key));\n    } catch {\n      // Storage might be unavailable\n    }\n  },\n};\n\n// Error handling utilities\nexport function safeExecute<T>(\n  fn: () => T,\n  fallback?: T,\n  onError?: (error: Error) => void\n): T | undefined {\n  try {\n    return fn();\n  } catch (error) {\n    if (onError && error instanceof Error) {\n      onError(error);\n    }\n    return fallback;\n  }\n}\n\nexport async function safeExecuteAsync<T>(\n  fn: () => Promise<T>,\n  fallback?: T,\n  onError?: (error: Error) => void\n): Promise<T | undefined> {\n  try {\n    return await fn();\n  } catch (error) {\n    if (onError && error instanceof Error) {\n      onError(error);\n    }\n    return fallback;\n  }\n}\n\n// Export all utilities\nexport default {\n  cn,\n  hexToRgba,\n  rgbaToHex,\n  adjustOpacity,\n  clamp,\n  lerp,\n  roundToDecimal,\n  capitalize,\n  kebabCase,\n  camelCase,\n  deepMerge,\n  isObject,\n  omit,\n  pick,\n  unique,\n  groupBy,\n  sortBy,\n  getElementRect,\n  isElementInViewport,\n  scrollToElement,\n  debounce,\n  throttle,\n  isValidEmail,\n  isValidUrl,\n  isValidHexColor,\n  formatNumber,\n  formatCurrency,\n  formatPercentage,\n  formatDate,\n  createAnimationPromise,\n  getOptimalAnimationDuration,\n  storage,\n  safeExecute,\n  safeExecuteAsync,\n};", "\"use client\";\nimport React, {\n  forwardRef,\n  HTMLAttributes,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\nimport {\n  motion,\n  type HTMLMotionProps,\n  type Transition,\n  type Variants,\n} from \"framer-motion\";\nimport { cn } from \"@/design-system/utilsCore\";\n\nexport type AnimationPreset =\n  | \"fadeIn\"\n  | \"slideIn\"\n  | \"slideDown\"\n  | \"slideUp\"\n  | \"slideLeft\"\n  | \"slideRight\"\n  | \"scaleIn\"\n  | \"rotateIn\"\n  | \"bounceIn\"\n  | \"pulseIn\"\n  | \"none\";\n\nexport type AnimationEasing =\n  | \"linear\"\n  | \"ease\"\n  | \"ease-in\"\n  | \"ease-out\"\n  | \"ease-in-out\"\n  | \"spring\";\n\nexport interface MotionProps extends HTMLAttributes<HTMLDivElement> {\n  as?: React.ElementType;\n  preset?: AnimationPreset;\n  type?: \"fade\" | \"slide\" | \"scale\" | \"bounce\" | \"rotate\" | \"pulse\";\n  direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"center\";\n  duration?: number;\n  delay?: number;\n  easing?: AnimationEasing;\n  animateOnMount?: boolean;\n  animateOnHover?: boolean;\n  animateOnScroll?: boolean;\n}\n\ntype SanitizableMotionProps = HTMLAttributes<HTMLDivElement> &\n  Partial<\n    Pick<\n      HTMLMotionProps<\"div\">,\n      | \"animate\"\n      | \"exit\"\n      | \"initial\"\n      | \"transition\"\n      | \"variants\"\n      | \"whileHover\"\n      | \"whileInView\"\n    >\n  > & {\n    consciousness?: unknown;\n  };\n\ntype MutableRecord = Record<string, unknown>;\n\nfunction isMutableRecord(value: unknown): value is MutableRecord {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n// --- Utilities to avoid non-animatable background warnings ---\nfunction isSimpleColor(value: unknown): boolean {\n  if (typeof value !== \"string\") return false;\n  const v = value.trim();\n  if (v === \"transparent\") return true;\n  // rgb/rgba\n  if (/^rgba?\\(/i.test(v)) return true;\n  // hsl/hsla\n  if (/^hsla?\\(/i.test(v)) return true;\n  // hex\n  if (/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(v))\n    return true;\n  // CSS variable (often colors in this lib)\n  if (/^var\\(/i.test(v)) return true;\n  return false;\n}\n\nfunction coerceBackgroundKey<T>(obj: T): T {\n  if (!obj || typeof obj !== \"object\") return obj;\n\n  if (Array.isArray(obj)) {\n    return obj.map((value) => coerceBackgroundKey(value)) as T;\n  }\n\n  if (!isMutableRecord(obj)) return obj;\n\n  // Copy to avoid mutating user objects.\n  const copy: MutableRecord = { ...obj };\n  for (const key of Object.keys(copy)) {\n    const val = copy[key];\n    if (key === \"background\") {\n      if (isSimpleColor(val)) {\n        // Move to backgroundColor to make it animatable\n        copy.backgroundColor = val === \"transparent\" ? \"rgba(0, 0, 0, 0)\" : val;\n        delete copy.background;\n      }\n    } else if (val && typeof val === \"object\") {\n      copy[key] = coerceBackgroundKey(val);\n    }\n  }\n  return copy as T;\n}\n\n// Normalize easing values to what Framer Motion expects\nfunction normalizeEasingValue(value: unknown): unknown {\n  if (typeof value === \"string\") {\n    const e = value.trim().toLowerCase();\n    if (e === \"ease-in\") return \"easeIn\";\n    if (e === \"ease-out\") return \"easeOut\";\n    if (e === \"ease-in-out\" || e === \"ease\") return \"easeInOut\";\n    if (e === \"linear\") return \"linear\";\n    if (e.startsWith(\"cubic-bezier(\") && e.endsWith(\")\")) {\n      const nums = e\n        .slice(\"cubic-bezier(\".length, -1)\n        .split(\",\")\n        .map((n) => parseFloat(n.trim()))\n        .filter((n) => Number.isFinite(n));\n      if (nums.length === 4) return nums;\n    }\n  }\n  return value;\n}\n\n// Recursively walk an object and normalize transition.easing/ease occurrences.\nfunction normalizeTransitions<T>(obj: T): T {\n  if (!obj || typeof obj !== \"object\") return obj;\n\n  if (Array.isArray(obj)) {\n    return obj.map((value) => normalizeTransitions(value)) as T;\n  }\n\n  if (!isMutableRecord(obj)) return obj;\n\n  const copy: MutableRecord = { ...obj };\n  for (const key of Object.keys(copy)) {\n    const val = copy[key];\n    if (key === \"transition\") {\n      if (typeof val === \"string\") {\n        // Strings are not valid for Framer transitions; drop to avoid runtime errors\n        delete copy[key];\n        continue;\n      }\n      if (isMutableRecord(val)) {\n        const t: MutableRecord = { ...val };\n        if (\"easing\" in t && !(\"ease\" in t)) {\n          t.ease = normalizeEasingValue(t.easing);\n          delete t.easing;\n        } else if (\"ease\" in t) {\n          t.ease = normalizeEasingValue(t.ease);\n        }\n        copy[key] = t;\n      }\n    } else if (val && typeof val === \"object\") {\n      copy[key] = normalizeTransitions(val);\n    }\n  }\n  return copy as T;\n}\n\nfunction getVariants(preset: AnimationPreset): Variants {\n  switch (preset) {\n    case \"fadeIn\":\n      return { initial: { opacity: 0 }, animate: { opacity: 1 } };\n    case \"slideIn\":\n      return { initial: { opacity: 0, y: 16 }, animate: { opacity: 1, y: 0 } };\n    case \"slideDown\":\n      return { initial: { opacity: 0, y: -12 }, animate: { opacity: 1, y: 0 } };\n    case \"slideUp\":\n      return { initial: { opacity: 0, y: 12 }, animate: { opacity: 1, y: 0 } };\n    case \"slideLeft\":\n      return { initial: { opacity: 0, x: 12 }, animate: { opacity: 1, x: 0 } };\n    case \"slideRight\":\n      return { initial: { opacity: 0, x: -12 }, animate: { opacity: 1, x: 0 } };\n    case \"scaleIn\":\n      return {\n        initial: { opacity: 0, scale: 0.96 },\n        animate: { opacity: 1, scale: 1 },\n      };\n    case \"rotateIn\":\n      return {\n        initial: { opacity: 0, rotate: -8 },\n        animate: { opacity: 1, rotate: 0 },\n      };\n    case \"bounceIn\":\n      return {\n        initial: { opacity: 0, scale: 0.3 },\n        animate: {\n          opacity: 1,\n          scale: 1,\n          transition: { type: \"spring\", stiffness: 330, damping: 20 },\n        },\n      };\n    case \"pulseIn\":\n      return {\n        initial: { opacity: 0.8, scale: 1.04 },\n        animate: { opacity: 1, scale: 1 },\n      };\n    default:\n      return { initial: {}, animate: {} };\n  }\n}\n\nexport const MotionFramer = forwardRef<HTMLDivElement, MotionProps>(\n  (\n    {\n      preset = \"none\",\n      duration = 300,\n      delay = 0,\n      easing = \"ease-in-out\",\n      animateOnMount = true,\n      animateOnHover = false,\n      animateOnScroll = false,\n      className,\n      style,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    // CRITICAL SSR FIX: Default to true (reduced motion) on server to prevent hydration mismatch\n    // Server-side can't detect actual preference, so we assume reduced motion for safety\n    // This prevents flash of animated content for users who prefer reduced motion\n    const [reduced, setReduced] = useState(true);\n    useEffect(() => {\n      if (typeof window === \"undefined\" || !(\"matchMedia\" in window)) return;\n      const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n      const update = () => setReduced(!!mq.matches);\n      update();\n      if (\"addEventListener\" in mq) {\n        mq.addEventListener(\"change\", update);\n        return () => mq.removeEventListener(\"change\", update);\n      } else {\n        // @ts-ignore older Safari\n        mq.addListener(update);\n        // @ts-ignore older Safari\n        return () => mq.removeListener(update);\n      }\n    }, []);\n\n    const effectivePreset = reduced ? \"none\" : preset;\n    const variants = useMemo(\n      () => getVariants(effectivePreset),\n      [effectivePreset]\n    );\n    const easingMap: Record<Exclude<AnimationEasing, \"spring\">, string> = {\n      linear: \"linear\",\n      ease: \"easeInOut\",\n      \"ease-in\": \"easeIn\",\n      \"ease-out\": \"easeOut\",\n      \"ease-in-out\": \"easeInOut\",\n    };\n    const transition: MutableRecord = reduced\n      ? { duration: 0.0001, delay: 0 }\n      : { duration: duration / 1000, delay: delay / 1000 };\n    if (easing === \"spring\") {\n      transition.type = \"spring\";\n    } else if (easing) {\n      transition.ease = easingMap[easing] || \"easeInOut\";\n    }\n\n    const baseProps: HTMLMotionProps<\"div\"> = {\n      ref,\n      className: cn(\"motion-primitive\", className),\n      style,\n      initial: reduced\n        ? undefined\n        : animateOnMount || animateOnScroll\n          ? \"initial\"\n          : undefined,\n      animate: reduced ? undefined : \"animate\",\n      variants,\n      transition: transition as Transition,\n    };\n\n    if (!reduced && animateOnScroll) {\n      baseProps.initial = \"initial\";\n      baseProps.whileInView = \"animate\";\n      baseProps.viewport = { once: true, amount: 0.2 };\n    }\n\n    if (!reduced && animateOnHover) {\n      baseProps.whileHover = { scale: 1.015 };\n    }\n\n    // Sanitize incoming motion props to avoid animating unsupported CSS shorthands like `background`\n    // and to normalize easing names in transition objects passed by callers.\n    let sanitizedProps: SanitizableMotionProps = { ...props };\n    // Strip non-DOM custom flags that might leak\n    if (\"consciousness\" in sanitizedProps) delete sanitizedProps.consciousness;\n    const coerce = <T,>(obj: T): T =>\n      normalizeTransitions(coerceBackgroundKey(obj));\n    if (sanitizedProps.animate && typeof sanitizedProps.animate === \"object\") {\n      sanitizedProps.animate = coerce(sanitizedProps.animate);\n    }\n    if (sanitizedProps.initial && typeof sanitizedProps.initial === \"object\") {\n      sanitizedProps.initial = coerce(sanitizedProps.initial);\n    }\n    if (sanitizedProps.exit && typeof sanitizedProps.exit === \"object\") {\n      sanitizedProps.exit = coerce(sanitizedProps.exit);\n    }\n    if (\n      sanitizedProps.whileHover &&\n      typeof sanitizedProps.whileHover === \"object\"\n    ) {\n      sanitizedProps.whileHover = coerce(sanitizedProps.whileHover);\n    }\n    if (\n      sanitizedProps.whileInView &&\n      typeof sanitizedProps.whileInView === \"object\"\n    ) {\n      sanitizedProps.whileInView = coerce(sanitizedProps.whileInView);\n    }\n    if (\n      sanitizedProps.variants &&\n      typeof sanitizedProps.variants === \"object\"\n    ) {\n      sanitizedProps.variants = coerce(sanitizedProps.variants);\n    }\n    if (sanitizedProps.transition) {\n      sanitizedProps = normalizeTransitions(sanitizedProps);\n    }\n    if (\n      sanitizedProps.style &&\n      typeof sanitizedProps.style === \"object\" &&\n      \"background\" in sanitizedProps.style\n    ) {\n      const styleWithBackground = sanitizedProps.style;\n      const bg = styleWithBackground.background;\n      if (typeof bg === \"string\" && isSimpleColor(bg)) {\n        sanitizedProps.style = {\n          ...styleWithBackground,\n          backgroundColor: bg === \"transparent\" ? \"rgba(0, 0, 0, 0)\" : bg,\n        };\n        delete sanitizedProps.style?.background;\n      }\n    }\n    const motionProps = sanitizedProps as HTMLMotionProps<\"div\">;\n\n    return (\n      <motion.div {...baseProps} {...motionProps}>\n        {children}\n      </motion.div>\n    );\n  }\n);\n\nMotionFramer.displayName = \"MotionFramer\";\n", "\"use client\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport { useMultiSpring } from \"../animations/hooks/useMultiSpringBasic\";\n\nexport interface MotionProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Animation type */\n  type?: \"fade\" | \"slide\" | \"scale\" | \"bounce\" | \"elastic\" | \"flip\" | \"rotate\";\n\n  /** Animation direction */\n  direction?: \"up\" | \"down\" | \"left\" | \"right\" | \"none\";\n\n  /** Animation duration in milliseconds */\n  duration?: number;\n\n  /** Animation delay in milliseconds */\n  delay?: number;\n\n  /** Animation easing */\n  easing?: string;\n\n  /** Enable physics-based animation */\n  physics?: boolean;\n\n  /** Physics spring configuration */\n  springConfig?: {\n    stiffness: number;\n    damping: number;\n    mass: number;\n  };\n\n  /** Trigger animation on mount */\n  animateOnMount?: boolean;\n\n  /** Trigger animation on hover */\n  animateOnHover?: boolean;\n\n  /** Trigger animation on click */\n  animateOnClick?: boolean;\n\n  /** Loop animation */\n  loop?: boolean;\n\n  /** Animation repeat count */\n  repeat?: number;\n\n  /** Custom animation keyframes */\n  keyframes?: Record<string, React.CSSProperties>;\n\n  /** Animation fill mode */\n  fillMode?: \"none\" | \"forwards\" | \"backwards\" | \"both\";\n\n  /** Enable reduced motion support */\n  respectReducedMotion?: boolean;\n\n  /** Custom CSS classes */\n  className?: string;\n\n  /** Children elements */\n  children?: React.ReactNode;\n}\n\nconst MotionNative = forwardRef<HTMLDivElement, MotionProps>(\n  (\n    {\n      type = \"fade\",\n      direction = \"none\",\n      duration = 300,\n      delay = 0,\n      easing = \"ease-out\",\n      physics = false,\n      springConfig,\n      animateOnMount = true,\n      animateOnHover = false,\n      animateOnClick = false,\n      loop = false,\n      repeat = 1,\n      keyframes,\n      fillMode = \"forwards\",\n      respectReducedMotion = true,\n      className,\n      children,\n      style,\n      onMouseEnter,\n      onMouseLeave,\n      onClick,\n      ...props\n    },\n    ref\n  ) => {\n    const elementRef = useRef<HTMLDivElement | null>(null);\n    const animationRef = useRef<Animation | null>(null);\n\n    // Physics animation hook\n    const physicsSpring = useMultiSpring(\n      { opacity: 1, x: 0, y: 0, scale: 1, rotation: 0 },\n      { config: springConfig || { stiffness: 200, damping: 25, mass: 1 } }\n    );\n\n    // Check for reduced motion preference safely\n    const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n    useEffect(() => {\n      if (typeof window !== \"undefined\" && window.matchMedia) {\n        const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n        const updatePreference = () => setPrefersReducedMotion(mq.matches);\n        updatePreference();\n\n        if (mq.addEventListener) {\n          mq.addEventListener(\"change\", updatePreference);\n          return () => mq.removeEventListener(\"change\", updatePreference);\n        } else {\n          // @ts-ignore - Legacy API\n          mq.addListener(updatePreference);\n          return () => mq.removeListener(updatePreference);\n        }\n      }\n    }, []);\n\n    const shouldAnimate = !respectReducedMotion || !prefersReducedMotion;\n\n    // Generate animation keyframes based on type and direction\n    const generateKeyframes = () => {\n      if (keyframes) return keyframes;\n\n      const frames: Record<string, any> = {};\n\n      switch (type) {\n        case \"fade\":\n          frames.from = { opacity: 0 };\n          frames.to = { opacity: 1 };\n          break;\n\n        case \"slide\":\n          frames.from = {\n            opacity: 0,\n            transform: getDirectionalTransform(direction, 20),\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"translate(0, 0) scale(1) rotate(0deg)\",\n          };\n          break;\n\n        case \"scale\":\n          frames.from = {\n            opacity: 0,\n            transform: \"scale(0.8)\",\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"scale(1)\",\n          };\n          break;\n\n        case \"bounce\":\n          frames.from = {\n            opacity: 0,\n            transform: getDirectionalTransform(direction, 30),\n          };\n          frames[\"60%\"] = {\n            opacity: 1,\n            transform: getDirectionalTransform(direction, -10),\n          };\n          frames[\"80%\"] = {\n            opacity: 1,\n            transform: getDirectionalTransform(direction, 5),\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"translate(0, 0) scale(1) rotate(0deg)\",\n          };\n          break;\n\n        case \"elastic\":\n          frames.from = {\n            opacity: 0,\n            transform: getDirectionalTransform(direction, 20) + \" scale(0.3)\",\n          };\n          frames[\"55%\"] = {\n            opacity: 1,\n            transform: getDirectionalTransform(direction, -5) + \" scale(1.05)\",\n          };\n          frames[\"65%\"] = {\n            opacity: 1,\n            transform: getDirectionalTransform(direction, 3) + \" scale(0.95)\",\n          };\n          frames[\"75%\"] = {\n            opacity: 1,\n            transform: getDirectionalTransform(direction, -1) + \" scale(1.02)\",\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"translate(0, 0) scale(1) rotate(0deg)\",\n          };\n          break;\n\n        case \"flip\":\n          frames.from = {\n            opacity: 0,\n            transform: `rotateY(${direction === \"left\" ? -90 : 90}deg)`,\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"rotateY(0deg)\",\n          };\n          break;\n\n        case \"rotate\":\n          frames.from = {\n            opacity: 0,\n            transform: \"rotate(-180deg)\",\n          };\n          frames.to = {\n            opacity: 1,\n            transform: \"rotate(0deg)\",\n          };\n          break;\n\n        default:\n          frames.from = { opacity: 0 };\n          frames.to = { opacity: 1 };\n      }\n\n      return frames;\n    };\n\n    // Helper function for directional transforms\n    const getDirectionalTransform = (dir: string, distance: number) => {\n      switch (dir) {\n        case \"up\":\n          return `translateY(${distance}px)`;\n        case \"down\":\n          return `translateY(-${distance}px)`;\n        case \"left\":\n          return `translateX(${distance}px)`;\n        case \"right\":\n          return `translateX(-${distance}px)`;\n        default:\n          return \"translate(0, 0)\";\n      }\n    };\n\n    // Start animation\n    const startAnimation = () => {\n      if (!elementRef.current || !shouldAnimate) return;\n\n      const element = elementRef.current;\n\n      // Cancel existing animation\n      if (animationRef.current) {\n        animationRef.current.cancel();\n      }\n\n      if (physics) {\n        // Use physics-based animation\n        const targetValues = generateKeyframes().to;\n        const springTargets: Record<string, number> = {};\n\n        if (targetValues.opacity !== undefined)\n          springTargets.opacity = targetValues.opacity;\n        if (targetValues.transform) {\n          // Parse transform values (simplified)\n          const translateMatch = targetValues.transform.match(\n            /translate\\(([^,]+),\\s*([^)]+)\\)/\n          );\n          if (translateMatch) {\n            springTargets.x = parseFloat(translateMatch[1]);\n            springTargets.y = parseFloat(translateMatch[2]);\n          }\n        }\n\n        physicsSpring.start(springTargets);\n      } else {\n        // Use CSS animation\n        const animationKeyframes = generateKeyframes();\n        const timing = {\n          duration,\n          delay,\n          easing,\n          fill: fillMode,\n          iterations: loop ? Infinity : repeat,\n        };\n\n        animationRef.current = element.animate\n          ? element.animate(animationKeyframes, timing)\n          : null;\n      }\n    };\n\n    // Stop animation\n    const stopAnimation = () => {\n      if (animationRef.current) {\n        animationRef.current.cancel();\n        animationRef.current = null;\n      }\n    };\n\n    // Handle hover animation\n    const handleMouseEnter = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (animateOnHover && shouldAnimate) {\n        startAnimation();\n      }\n      onMouseEnter?.(event);\n    };\n\n    const handleMouseLeave = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (animateOnHover && shouldAnimate) {\n        stopAnimation();\n      }\n      onMouseLeave?.(event);\n    };\n\n    // Handle click animation\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (animateOnClick && shouldAnimate) {\n        startAnimation();\n      }\n      onClick?.(event);\n    };\n\n    // Start animation on mount if requested\n    useEffect(() => {\n      if (animateOnMount && shouldAnimate) {\n        const timer = setTimeout(() => {\n          startAnimation();\n        }, delay);\n\n        return () => clearTimeout(timer);\n      }\n    }, [animateOnMount, shouldAnimate, delay]);\n\n    // Combine physics styles with custom styles\n    const combinedStyles = {\n      ...style,\n      ...(physics && {\n        opacity: physicsSpring.values.opacity,\n        transform: `translate(${physicsSpring.values.x}px, ${physicsSpring.values.y}px) scale(${physicsSpring.values.scale}) rotate(${physicsSpring.values.rotation}deg)`,\n      }),\n    };\n\n    return (\n      <div\n        ref={(el) => {\n          elementRef.current = el;\n          // Handle forwarded ref\n          if (ref) {\n            if (typeof ref === \"function\") {\n              ref(el);\n            } else if (ref && \"current\" in ref) {\n              ref.current = el;\n            }\n          }\n        }}\n        className={cn(\n          \"motion-element\",\n          {\n            \"motion-fade\": type === \"fade\",\n            \"motion-slide\": type === \"slide\",\n            \"motion-scale\": type === \"scale\",\n            \"motion-bounce\": type === \"bounce\",\n            \"motion-elastic\": type === \"elastic\",\n            \"motion-flip\": type === \"flip\",\n            \"motion-rotate\": type === \"rotate\",\n            \"motion-physics\": physics,\n            \"motion-hover\": animateOnHover,\n            \"motion-click\": animateOnClick,\n          },\n          className\n        )}\n        style={{ ...combinedStyles }}\n        onMouseEnter={handleMouseEnter}\n        onMouseLeave={handleMouseLeave}\n        onClick={handleClick}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nMotionNative.displayName = \"MotionNative\";\n\nexport { MotionNative };\nexport default MotionNative;\n", "import React from \"react\";\nimport { useRef, useCallback, useEffect, useState } from \"react\";\n\nexport interface SpringConfig {\n  stiffness?: number;\n  damping?: number;\n  mass?: number;\n  precision?: number;\n  velocity?: number;\n}\n\nexport interface SpringTarget {\n  [key: string]: number;\n}\n\nexport interface SpringState {\n  [key: string]: {\n    position: number;\n    velocity: number;\n    isAnimating: boolean;\n  };\n}\n\nexport interface MultiSpringOptions {\n  config?: SpringConfig;\n  onUpdate?: (values: Record<string, number>) => void;\n  onComplete?: (values: Record<string, number>) => void;\n}\n\nconst DEFAULT_CONFIG: Required<SpringConfig> = {\n  stiffness: 100,\n  damping: 10,\n  mass: 1,\n  precision: 0.01,\n  velocity: 0,\n};\n\nexport function useMultiSpring(\n  initialValues: SpringTarget = {},\n  options: MultiSpringOptions = {}\n) {\n  const { config: userConfig = {}, onUpdate, onComplete } = options;\n  const config: Required<SpringConfig> = { ...DEFAULT_CONFIG, ...userConfig };\n\n  const [values, setValues] = useState<Record<string, number>>(initialValues);\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const animationRef = useRef<number | undefined>(undefined);\n  const stateRef = useRef<SpringState>({});\n  const targetsRef = useRef<SpringTarget>({});\n  const lastTimeRef = useRef<number>(0);\n\n  // Initialize state for each key\n  useEffect(() => {\n    const newState: SpringState = {};\n    Object.keys(initialValues).forEach((key) => {\n      newState[key] = {\n        position: initialValues[key],\n        velocity: config.velocity,\n        isAnimating: false,\n      };\n    });\n    stateRef.current = newState;\n    targetsRef.current = { ...initialValues };\n  }, [initialValues, config.velocity]);\n\n  const animate = useCallback(\n    (timestamp: number) => {\n      if (!lastTimeRef.current) {\n        lastTimeRef.current = timestamp;\n      }\n\n      const deltaTime = (timestamp - lastTimeRef.current) / 1000; // Convert to seconds\n      lastTimeRef.current = timestamp;\n\n      let hasActiveAnimations = false;\n      const newValues: Record<string, number> = {};\n\n      // Update each spring\n      Object.keys(stateRef.current).forEach((key) => {\n        const spring = stateRef.current[key];\n        const target = targetsRef.current[key];\n\n        if (target === undefined) return;\n\n        // Calculate spring forces\n        const displacement = target - spring.position;\n        const springForce = displacement * config.stiffness;\n        const dampingForce = -spring.velocity * config.damping;\n\n        // Update acceleration (F = ma)\n        const acceleration = (springForce + dampingForce) / config.mass;\n\n        // Update velocity (v = v + a * dt)\n        spring.velocity += acceleration * deltaTime;\n\n        // Update position (p = p + v * dt)\n        spring.position += spring.velocity * deltaTime;\n\n        // Check if animation is complete\n        const isAtRest =\n          Math.abs(spring.velocity) < config.precision &&\n          Math.abs(displacement) < config.precision;\n\n        if (isAtRest) {\n          spring.position = target;\n          spring.velocity = 0;\n          spring.isAnimating = false;\n        } else {\n          spring.isAnimating = true;\n          hasActiveAnimations = true;\n        }\n\n        newValues[key] = spring.position;\n      });\n\n      // Update values\n      setValues(newValues);\n      onUpdate?.(newValues);\n\n      // Check if all animations are complete\n      if (!hasActiveAnimations) {\n        setIsAnimating(false);\n        onComplete?.(newValues);\n        animationRef.current = undefined;\n        return;\n      }\n\n      animationRef.current = requestAnimationFrame(animate);\n    },\n    [config, onUpdate, onComplete]\n  );\n\n  const start = useCallback(\n    (targets: SpringTarget) => {\n      // Update targets\n      targetsRef.current = { ...targetsRef.current, ...targets };\n\n      // Start animations for changed targets\n      Object.keys(targets).forEach((key) => {\n        if (stateRef.current[key]) {\n          stateRef.current[key].isAnimating = true;\n        }\n      });\n\n      setIsAnimating(true);\n\n      if (!animationRef.current) {\n        lastTimeRef.current = 0;\n        animationRef.current = requestAnimationFrame(animate);\n      }\n    },\n    [animate]\n  );\n\n  const set = useCallback((values: SpringTarget) => {\n    // Immediately set values without animation\n    const newValues = { ...values };\n    const newState: SpringState = {};\n\n    Object.keys(values).forEach((key) => {\n      newState[key] = {\n        position: values[key],\n        velocity: 0,\n        isAnimating: false,\n      };\n    });\n\n    stateRef.current = { ...stateRef.current, ...newState };\n    targetsRef.current = { ...targetsRef.current, ...values };\n    setValues((prev) => ({ ...prev, ...newValues }));\n  }, []);\n\n  const stop = useCallback(() => {\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n\n    // Stop all animations\n    Object.keys(stateRef.current).forEach((key) => {\n      stateRef.current[key].isAnimating = false;\n    });\n\n    setIsAnimating(false);\n  }, []);\n\n  const reset = useCallback(() => {\n    stop();\n    setValues(initialValues);\n    targetsRef.current = { ...initialValues };\n\n    const resetState: SpringState = {};\n    Object.keys(initialValues).forEach((key) => {\n      resetState[key] = {\n        position: initialValues[key],\n        velocity: 0,\n        isAnimating: false,\n      };\n    });\n    stateRef.current = resetState;\n  }, [stop, initialValues]);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (animationRef.current !== undefined) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, []);\n\n  return {\n    values,\n    isAnimating,\n    start,\n    set,\n    stop,\n    reset,\n    config,\n  };\n}\n\n// Hook for spring-based transforms\nexport function useSpringTransform(\n  initialTransform: {\n    x?: number;\n    y?: number;\n    scale?: number;\n    rotation?: number;\n    opacity?: number;\n  } = {},\n  options: MultiSpringOptions = {}\n) {\n  const springValues = {\n    x: initialTransform.x || 0,\n    y: initialTransform.y || 0,\n    scale: initialTransform.scale || 1,\n    rotation: initialTransform.rotation || 0,\n    opacity: initialTransform.opacity || 1,\n  };\n\n  const spring = useMultiSpring(springValues, {\n    ...options,\n    onUpdate: (values) => {\n      options.onUpdate?.(values);\n    },\n  });\n\n  const transform = `translate(${spring.values.x}px, ${spring.values.y}px) scale(${spring.values.scale}) rotate(${spring.values.rotation}deg)`;\n  const style = {\n    transform,\n    opacity: spring.values.opacity,\n  };\n\n  return {\n    ...spring,\n    transform,\n    style,\n  };\n}\n\n// Hook for spring-based color transitions\nexport function useSpringColor(\n  initialColor: string = \"var(--glass-black)\",\n  options: MultiSpringOptions = {}\n) {\n  // Parse initial color\n  const parseColor = (color: string) => {\n    const div = document.createElement(\"div\");\n    div.style.color = color;\n    document.body.appendChild(div);\n    const computed = getComputedStyle(div).color;\n    document.body.removeChild(div);\n\n    const match = computed.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n    if (match) {\n      return {\n        r: parseInt(match[1]),\n        g: parseInt(match[2]),\n        b: parseInt(match[3]),\n      };\n    }\n    return { r: 0, g: 0, b: 0 };\n  };\n\n  const initialColorValues = parseColor(initialColor);\n  const spring = useMultiSpring(initialColorValues, options);\n\n  const color = `rgb(${Math.round(spring.values.r)}, ${Math.round(spring.values.g)}, ${Math.round(spring.values.b)})`;\n\n  return {\n    ...spring,\n    color,\n  };\n}\n\n// Hook for spring-based array animations\nexport function useSpringArray(\n  initialArray: number[] = [],\n  options: MultiSpringOptions = {}\n) {\n  const springValues: SpringTarget = {};\n  initialArray.forEach((value, index) => {\n    springValues[`item-${index}`] = value;\n  });\n\n  const spring = useMultiSpring(springValues, options);\n\n  const array = Object.keys(spring.values)\n    .sort()\n    .map((key) => spring.values[key]);\n\n  return {\n    ...spring,\n    array,\n  };\n}\n\n// Utility functions for common spring patterns\nexport const createSpringPreset = (\n  preset: \"gentle\" | \"wobbly\" | \"stiff\" | \"slow\" | \"bouncy\"\n): SpringConfig => {\n  const presets = {\n    gentle: { stiffness: 120, damping: 14, mass: 1 },\n    wobbly: { stiffness: 180, damping: 12, mass: 1 },\n    stiff: { stiffness: 210, damping: 20, mass: 1 },\n    slow: { stiffness: 280, damping: 60, mass: 1 },\n    bouncy: { stiffness: 170, damping: 8, mass: 1 },\n  };\n\n  return presets[preset];\n};\n\nexport const createSpringSequence = (\n  targets: SpringTarget[],\n  config: SpringConfig = {}\n): SpringTarget[] => {\n  // Create a sequence of spring targets\n  return targets;\n};\n\nexport const interpolateSprings = (\n  springs: MultiSpringOptions[],\n  progress: number\n): SpringConfig => {\n  if (springs.length === 0) return DEFAULT_CONFIG;\n  if (springs.length === 1) return springs[0].config || DEFAULT_CONFIG;\n\n  const index = Math.floor(progress * (springs.length - 1));\n  const localProgress = (progress * (springs.length - 1)) % 1;\n\n  const current: Required<SpringConfig> = {\n    ...DEFAULT_CONFIG,\n    ...(springs[index]?.config || {}),\n  };\n  const next: Required<SpringConfig> = {\n    ...DEFAULT_CONFIG,\n    ...(springs[index + 1]?.config || {}),\n  };\n\n  return {\n    stiffness:\n      current.stiffness + (next.stiffness - current.stiffness) * localProgress,\n    damping: current.damping + (next.damping - current.damping) * localProgress,\n    mass: current.mass + (next.mass - current.mass) * localProgress,\n    precision:\n      current.precision + (next.precision - current.precision) * localProgress,\n    velocity:\n      current.velocity + (next.velocity - current.velocity) * localProgress,\n  };\n};\n", "\"use client\";\nimport React, { forwardRef, useMemo, useState, useEffect } from \"react\";\nimport { createGlassStyle, GlassOptions } from \"../core/mixins/glassMixins\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport { detectDevice } from \"../utils/deviceCapabilities\";\nimport { isBrowser } from \"../utils/env\";\n\n// Polymorphic component type helper\ntype PolymorphicRef<T extends React.ElementType> =\n  React.ComponentPropsWithRef<T>[\"ref\"];\ntype PolymorphicComponentProps<T extends React.ElementType, Props = {}> = {\n  as?: T;\n} & Props &\n  Omit<React.ComponentPropsWithoutRef<T>, keyof Props>;\n\nexport interface OptimizedGlassProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** The HTML element or component to render as */\n  as?: React.ElementType;\n  /** Glass intent (replaces variant) */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\n  /** Glass elevation level */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n\n  /** Performance tier */\n  tier?: \"high\" | \"medium\" | \"low\";\n\n  /** Border radius */\n  rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\n  /** Enable glow effect */\n  glow?: boolean;\n\n  /** Glow color */\n  glowColor?: string;\n\n  /** Glow intensity */\n  glowIntensity?: number;\n\n  /** Enable hover effects */\n  hover?: boolean;\n\n  /** Performance optimization level */\n  optimization?: \"auto\" | \"high\" | \"medium\" | \"low\";\n\n  /** Enable hardware acceleration */\n  hardwareAcceleration?: boolean;\n\n  /** Glass intensity (blur strength level) */\n  intensity?: \"subtle\" | \"medium\" | \"strong\" | \"intense\" | \"ultra\" | \"extreme\";\n\n  /** Glass depth effect */\n  depth?: \"shallow\" | \"medium\" | \"deep\" | \"extreme\" | number;\n\n  /** Glass tint color */\n  tint?: string;\n\n  /** Border configuration */\n  border?:\n    | \"none\"\n    | \"subtle\"\n    | \"medium\"\n    | \"strong\"\n    | \"glow\"\n    | \"gradient\"\n    | \"neon\"\n    | \"dynamic\"\n    | \"particle\";\n\n  /** Blur intensity for backdrop-filter */\n  blur?: \"none\" | \"subtle\" | \"medium\" | \"strong\" | \"intense\";\n\n  /** Glass variant */\n  variant?: \"clear\" | \"frosted\" | \"tinted\" | \"luminous\" | \"dynamic\" | \"crystal\";\n\n  /** Enable interactive effects */\n  interactive?: boolean;\n\n  /** Enable press effect */\n  press?: boolean;\n\n  /** Animation preset */\n  animation?:\n    | \"none\"\n    | \"fade\"\n    | \"slide\"\n    | \"scale\"\n    | \"bounce\"\n    | \"pulse\"\n    | \"float\"\n    | string;\n\n  /** Performance mode */\n  performanceMode?: \"high\" | \"balanced\" | \"low\" | \"medium\" | \"ultra\";\n\n  /** Enable lift on hover effect */\n  liftOnHover?: boolean;\n\n  /** Enable hover sheen effect */\n  hoverSheen?: boolean;\n\n  /** Lighting effect */\n  lighting?:\n    | \"ambient\"\n    | \"directional\"\n    | \"point\"\n    | \"spot\"\n    | \"none\"\n    | \"iridescent\"\n    | \"volumetric\"\n    | \"caustic\"\n    | \"natural\"\n    | \"studio\";\n\n  /** Advanced visual flags (filtered from DOM) */\n  caustics?: boolean;\n  chromatic?: boolean;\n  parallax?: boolean;\n  refraction?: boolean;\n  adaptive?: boolean;\n  magnet?: boolean;\n  cursorHighlight?: boolean;\n\n  /** Custom CSS classes */\n  className?: string;\n\n  /** Children elements */\n  children?: React.ReactNode;\n}\n\nconst OptimizedGlassCore = forwardRef<\n  React.ElementRef<any>,\n  PolymorphicComponentProps<React.ElementType, OptimizedGlassProps>\n>((props, ref) => {\n  const {\n    as: Component = \"div\",\n    intent = \"neutral\",\n    elevation = \"level2\",\n    tier = \"high\",\n    rounded = \"md\",\n    glow = false,\n    glowColor = \"rgba(255, 255, 255, 0.5)\",\n    glowIntensity = 0.5,\n    hover = false,\n    interactive = false,\n    press = false,\n    animation = \"none\",\n    // Prevent forwarding custom props to DOM\n    performanceMode: _performanceMode,\n    // Also intercept additional non-DOM props so they don't leak\n    optimization,\n    hardwareAcceleration,\n    intensity,\n    depth,\n    tint,\n    border,\n    blur,\n    variant,\n    lighting,\n    // Advanced visual flags (do not forward to DOM)\n    caustics,\n    chromatic,\n    parallax,\n    refraction,\n    adaptive,\n    magnet,\n    cursorHighlight,\n    liftOnHover = false,\n    hoverSheen = false,\n    className,\n    children,\n    style,\n    ...restProps\n  } = props;\n  // CRITICAL FIX for SSR hydration: Defer tier detection until after initial render\n  // This prevents className mismatches between server and client\n  const [computedTier, setComputedTier] = useState<\"high\" | \"medium\" | \"low\">(\n    () => {\n      // If tier is explicitly set (not default 'high'), respect it immediately\n      if (tier !== \"high\") return tier;\n      // Start with 'medium' for both server and initial client render\n      return \"medium\";\n    }\n  );\n\n  // Auto-detect performance tier on client AFTER hydration\n  useEffect(() => {\n    // Only auto-detect if using default tier\n    if (tier !== \"high\") {\n      setComputedTier(tier);\n      return;\n    }\n\n    // Skip detection on server\n    if (!isBrowser()) return;\n\n    // Detect device capabilities and update tier\n    const device = detectDevice();\n    if (device.capabilities.gpu && device.capabilities.hardwareAcceleration) {\n      setComputedTier(\"high\");\n    } else if (device.capabilities.webgl) {\n      setComputedTier(\"medium\");\n    } else {\n      setComputedTier(\"low\");\n    }\n  }, [tier]);\n\n  // Use unified glass system with performance tier\n  const glassStyles = useMemo(() => {\n    const glassOptions: GlassOptions = {\n      intent,\n      elevation,\n      tier: computedTier,\n      interactive,\n      hoverLift: liftOnHover,\n      focusRing: interactive,\n      press,\n    };\n\n    return createGlassStyle(glassOptions);\n  }, [intent, elevation, computedTier, interactive, liftOnHover, press]);\n\n  // Add border radius and any custom styles\n  const combinedStyles = {\n    ...glassStyles,\n    borderRadius:\n      rounded === \"none\"\n        ? \"0px\"\n        : rounded === \"sm\"\n          ? \"4px\"\n          : rounded === \"md\"\n            ? \"8px\"\n            : rounded === \"lg\"\n              ? \"12px\"\n              : rounded === \"xl\"\n                ? \"16px\"\n                : rounded === \"full\"\n                  ? \"9999px\"\n                  : \"8px\",\n    ...style,\n  };\n\n  // Ensure no custom props leak into the DOM element\n  const {\n    performanceMode: __ignorePerformanceMode,\n    optimization: __ignoreOptimization,\n    hardwareAcceleration: __ignoreHardwareAcceleration,\n    intensity: __ignoreIntensity,\n    depth: __ignoreDepth,\n    tint: __ignoreTint,\n    border: __ignoreBorder,\n    blur: __ignoreBlur,\n    // Common prop name used across components; should not reach DOM\n    blurStrength: __ignoreBlurStrength,\n    variant: __ignoreVariant,\n    lighting: __ignoreLighting,\n    // Consciousness master flag should never reach the DOM\n    consciousness: __ignoreConsciousness,\n    caustics: __ignoreCaustics,\n    chromatic: __ignoreChromatic,\n    parallax: __ignoreParallax,\n    refraction: __ignoreRefraction,\n    adaptive: __ignoreAdaptive,\n    magnet: __ignoreMagnet,\n    cursorHighlight: __ignoreCursorHighlight,\n    glassConfig: __ignoreGlassConfig,\n    ...domProps\n  } = (restProps as any) || {};\n\n  // Remove any accidental custom props leaking to DOM, e.g., camelCase starting with 'glass'\n  // Keep data-*/aria-* untouched; React handles them.\n  Object.keys(domProps).forEach((key) => {\n    if (/^glass[A-Z]/.test(key)) {\n      delete (domProps as any)[key];\n    }\n  });\n\n  return (\n    <Component\n      ref={ref}\n      className={cn(\n        \"optimized-glass-surface\",\n        `glass-${intent}-${elevation}`,\n        {\n          \"glass-interactive\": interactive,\n          \"glass-lift-on-hover\": liftOnHover,\n          \"glass-hover-sheen\": hoverSheen,\n          \"glass-glow\": glow,\n          \"glass-press\": press,\n          \"glass-tier-high\": computedTier === \"high\",\n          \"glass-tier-medium\": computedTier === \"medium\",\n          \"glass-tier-low\": computedTier === \"low\",\n        },\n        className\n      )}\n      style={{ ...combinedStyles }}\n      data-performance-mode={_performanceMode}\n      data-caustics={caustics || undefined}\n      data-chromatic={chromatic || undefined}\n      data-parallax={parallax || undefined}\n      data-refraction={refraction || undefined}\n      data-adaptive={adaptive || undefined}\n      data-magnet={magnet || undefined}\n      data-cursor-highlight={cursorHighlight || undefined}\n      {...domProps}\n    >\n      {children}\n    </Component>\n  );\n});\n\nOptimizedGlassCore.displayName = \"OptimizedGlassCore\";\n\nexport { OptimizedGlassCore };\nexport default OptimizedGlassCore;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport {\n  LIQUID_GLASS,\n  liquidGlassUtils,\n  type GlassElevation,\n  type GlassIntent,\n  type LiquidGlassTokens,\n  type LiquidGlassMaterial as MaterialType,\n  type MaterialVariant,\n  type SheenIntensity,\n  type TintMode,\n} from \"../tokens/glass\";\nimport {\n  useContrastGuard,\n  type BackdropSample,\n  type ContrastAdjustment,\n  type ContrastLevel,\n} from \"../utils/contrastGuard\";\nimport {\n  useLiquidGlassBackdrop,\n  type LiquidGlassBackdropSample,\n} from \"../hooks/useLiquidGlassBackdrop\";\nimport { useLiquidGlassEffectGroup } from \"./LiquidGlassEffectGroup\";\nimport {\n  LiquidGlassSurfaceLayer,\n  useLiquidGlassLayer,\n} from \"./LiquidGlassLayerProvider\";\n\nexport interface LiquidGlassMaterialBackdropAnalysis\n  extends BackdropSample,\n    LiquidGlassBackdropSample {}\n\n// Enhanced props interface for Liquid Glass Material\nexport interface LiquidGlassMaterialProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n  /** Material type - standard or liquid */\n  material?: MaterialType;\n\n  /** Material variant - regular or clear transparency */\n  variant?: MaterialVariant;\n\n  /** Glass semantic intent */\n  intent?: GlassIntent;\n\n  /** Glass elevation level */\n  elevation?: GlassElevation;\n\n  /** Index of refraction (1.0-2.0) - higher values = more refraction */\n  ior?: number;\n\n  /** Visual thickness for depth perception (0-8px) */\n  thickness?: number;\n\n  /** Edge sheen intensity (0-3) */\n  sheen?: SheenIntensity;\n\n  /** Content-aware tinting mode */\n  tintMode?: TintMode;\n\n  /** Enable environmental adaptation */\n  adaptToContent?: boolean;\n\n  /** Enable motion responsiveness */\n  adaptToMotion?: boolean;\n\n  /** Target accessibility contrast level */\n  contrastLevel?: ContrastLevel;\n\n  /** Performance optimization level */\n  performanceLevel?: keyof LiquidGlassTokens[\"performance\"];\n\n  /** Enable refraction effects */\n  enableRefraction?: boolean;\n\n  /** Enable environmental reflections */\n  enableReflection?: boolean;\n\n  /** Enable parallax depth effects */\n  enableParallax?: boolean;\n\n  /** Enable micro-interactions */\n  enableMicroInteractions?: boolean;\n\n  /** Tint color for glass material */\n  tint?: { r: number; g: number; b: number; a: number };\n\n  /** Quality level for rendering */\n  quality?: \"high\" | \"ultra\" | \"balanced\" | \"efficient\";\n\n  /** Enable environmental adaptation */\n  environmentAdaptation?: boolean;\n\n  /** Enable motion responsiveness */\n  motionResponsive?: boolean;\n\n  /** Custom CSS classes */\n  className?: string;\n\n  /** Border radius preset */\n  radius?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n\n  /** Enable hover effects */\n  interactive?: boolean;\n\n  /** Disable all effects */\n  disabled?: boolean;\n\n  /** Show development-only material diagnostics */\n  showDebug?: boolean;\n\n  /** Content to render inside the glass surface */\n  children?: React.ReactNode;\n\n  /** Callback when contrast adjustment occurs */\n  onContrastAdjustment?: (adjustment: ContrastAdjustment) => void;\n\n  /** Callback when backdrop analysis completes */\n  onBackdropAnalysis?: (sample: LiquidGlassMaterialBackdropAnalysis) => void;\n}\n\n/**\n * LiquidGlassMaterial - Core primitive for Apple Liquid Glass parity\n *\n * Features:\n * - IOR-based refraction physics\n * - Environmental content awareness\n * - Motion-responsive effects\n * - Automatic contrast enforcement\n * - GPU-accelerated rendering with fallbacks\n * - Performance-optimized across devices\n */\nexport const LiquidGlassMaterial = forwardRef<\n  HTMLDivElement,\n  LiquidGlassMaterialProps\n>(\n  (\n    {\n      material = \"liquid\",\n      variant = \"regular\",\n      intent = \"neutral\",\n      elevation = \"level2\",\n      ior,\n      thickness,\n      sheen,\n      tintMode = \"adaptive\",\n      adaptToContent = true,\n      adaptToMotion = true,\n      contrastLevel = \"AA\",\n      performanceLevel = \"high\",\n      enableRefraction,\n      enableReflection,\n      enableParallax,\n      enableMicroInteractions,\n      tint,\n      quality,\n      environmentAdaptation,\n      motionResponsive,\n      className,\n      radius = \"lg\",\n      interactive = false,\n      disabled = false,\n      showDebug = false,\n      children,\n      onContrastAdjustment,\n      onBackdropAnalysis,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const elementRef = useRef<HTMLElement>(null);\n    const [isHovered, setIsHovered] = useState(false);\n    const [isPressed, setIsPressed] = useState(false);\n    const [deviceTilt, setDeviceTilt] = useState({ x: 0, y: 0 });\n    const [backdropSample, setBackdropSample] =\n      useState<LiquidGlassMaterialBackdropAnalysis | null>(null);\n\n    const prefersReducedMotion = useReducedMotion();\n    const layer = useLiquidGlassLayer();\n    const effectGroup = useLiquidGlassEffectGroup();\n    const backdrop = useLiquidGlassBackdrop(elementRef, {\n      enabled: adaptToContent && material === \"liquid\",\n      variant,\n      minContrastRatio: variant === \"clear\" ? 7 : 4.5,\n      throttleMs: LIQUID_GLASS.tinting.adaptive.updateThrottle,\n    });\n\n    // Merge refs\n    const combinedRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        (elementRef as React.MutableRefObject<HTMLDivElement | null>).current =\n          node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref && \"current\" in ref) {\n          (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n        }\n      },\n      [ref]\n    );\n\n    // Get performance settings\n    const performanceConfig = useMemo(\n      () => LIQUID_GLASS.performance[performanceLevel],\n      [performanceLevel]\n    );\n\n    // Determine effective feature flags based on performance and props\n    const effectiveFlags = useMemo(\n      () => ({\n        refraction:\n          enableRefraction ??\n          (performanceConfig.enableRefraction && material === \"liquid\"),\n        reflection:\n          enableReflection ??\n          (performanceConfig.enableReflection && material === \"liquid\"),\n        parallax:\n          enableParallax ??\n          (performanceConfig.enableParallax && material === \"liquid\"),\n        microInteractions:\n          enableMicroInteractions ??\n          (performanceConfig.enableMicroInteractions && interactive),\n      }),\n      [\n        enableRefraction,\n        enableReflection,\n        enableParallax,\n        enableMicroInteractions,\n        performanceConfig,\n        material,\n        interactive,\n      ]\n    );\n\n    // Get material specification\n    const materialSpec = useMemo(() => {\n      const spec = liquidGlassUtils.getLiquidSurface(\n        intent,\n        elevation,\n        material,\n        variant\n      );\n\n      // Apply prop overrides\n      if (ior !== undefined) spec.ior = ior;\n      if (thickness !== undefined) spec.thickness = thickness;\n      if (sheen !== undefined) spec.sheen = sheen;\n      if (tintMode !== undefined) spec.tintMode = tintMode;\n\n      return spec;\n    }, [intent, elevation, material, variant, ior, thickness, sheen, tintMode]);\n\n    // Use contrast guard for accessibility\n    const contrastAdjustment = useContrastGuard(elementRef, {\n      targetLevel: contrastLevel,\n      material,\n      variant,\n      textColor: materialSpec.text.primary,\n      onAdjustment: onContrastAdjustment,\n    });\n\n    // Device orientation tracking for motion effects\n    useEffect(() => {\n      if (\n        !adaptToMotion ||\n        prefersReducedMotion ||\n        !effectiveFlags.microInteractions\n      ) {\n        return;\n      }\n\n      const handleOrientation = (event: DeviceOrientationEvent) => {\n        if (event.beta !== null && event.gamma !== null) {\n          const { sensitivity } = LIQUID_GLASS.motionFluency.tilt;\n          setDeviceTilt({\n            x: Math.max(-1, Math.min(1, event.gamma * sensitivity)),\n            y: Math.max(-1, Math.min(1, event.beta * sensitivity)),\n          });\n        }\n      };\n\n      if (typeof DeviceOrientationEvent !== \"undefined\") {\n        window.addEventListener(\"deviceorientation\", handleOrientation);\n        return () =>\n          window.removeEventListener(\"deviceorientation\", handleOrientation);\n      }\n    }, [adaptToMotion, prefersReducedMotion, effectiveFlags.microInteractions]);\n\n    // Backdrop sampling for environmental adaptation\n    useEffect(() => {\n      if (!adaptToContent || material !== \"liquid\") return;\n      const legacySample: LiquidGlassMaterialBackdropAnalysis = {\n        averageLuminance: backdrop.luminance,\n        dominantHue: 0,\n        contrast: backdrop.contrastHint === \"mixed\" ? 4.5 : 7,\n        timestamp: Date.now(),\n        confidence: backdrop.source === \"fallback\" ? 0.4 : 0.8,\n        ...backdrop,\n      };\n      setBackdropSample(legacySample);\n      onBackdropAnalysis?.(legacySample);\n    }, [adaptToContent, backdrop, material, onBackdropAnalysis]);\n\n    // Generate dynamic styles based on current state\n    const dynamicStyles = useMemo(() => {\n      const baseStyles = liquidGlassUtils.buildLiquidGlassStyles(\n        intent,\n        elevation,\n        material,\n        variant,\n        performanceLevel\n      );\n\n      let styles: React.CSSProperties = { ...baseStyles };\n\n      // Apply contrast adjustments\n      if (contrastAdjustment?.modifications) {\n        const { modifications } = contrastAdjustment;\n\n        if (modifications.opacity !== undefined) {\n          styles.opacity = modifications.opacity;\n        }\n\n        if (modifications.tint && materialSpec.tintMode === \"adaptive\") {\n          styles.background = `${styles.background}, ${modifications.tint}`;\n        }\n\n        if (modifications.backdropBlur !== undefined) {\n          const currentBlur = materialSpec.backdropBlur.px;\n          const adjustedBlur = currentBlur * modifications.backdropBlur;\n          const backdropFilter =\n            typeof styles.backdropFilter === \"string\"\n              ? styles.backdropFilter.replace(\n                  /blur\\([\\d.]+px\\)/,\n                  `blur(${adjustedBlur}px)`\n                )\n              : undefined;\n          styles.backdropFilter = backdropFilter;\n          styles.WebkitBackdropFilter = backdropFilter;\n        }\n      }\n\n      // Apply IOR-enhanced backdrop filter\n      if (effectiveFlags.refraction && materialSpec.ior > 1) {\n        const iorMultiplier = 1 + (materialSpec.ior - 1) * 0.3;\n        const saturation = 1.8 * iorMultiplier;\n        const brightness = 1.05 + (materialSpec.ior - 1) * 0.1;\n        const contrast = 1.05 + materialSpec.sheen * 0.02;\n\n        const backdropFilter = `blur(${materialSpec.backdropBlur.px}px) saturate(${saturation}) brightness(${brightness}) contrast(${contrast})`;\n        styles.backdropFilter = backdropFilter;\n        styles.WebkitBackdropFilter = backdropFilter;\n      }\n\n      // Apply thickness-based enhancements\n      if (materialSpec.thickness > 2) {\n        const thicknessOpacity = 0.12 + materialSpec.sheen * 0.06;\n        styles.boxShadow = `${styles.boxShadow}, inset 0 1px ${materialSpec.thickness}px rgba(255,255,255,${thicknessOpacity})`;\n      }\n\n      if (material === \"liquid\" && materialSpec.tintMode === \"adaptive\") {\n        const adaptiveTint = liquidGlassUtils.generateAdaptiveTint(\n          backdrop.luminance,\n          intent\n        );\n        styles.background = `${styles.background}, ${adaptiveTint}`;\n      }\n\n      if (\n        material === \"liquid\" &&\n        variant === \"clear\" &&\n        backdrop.requiresDimming\n      ) {\n        styles.background = `${styles.background}, linear-gradient(rgba(0,0,0,var(--liquid-glass-clear-dimming-strength,0.22)), rgba(0,0,0,var(--liquid-glass-clear-dimming-strength,0.22)))`;\n      }\n\n      // Motion responsiveness\n      if (effectiveFlags.microInteractions && !prefersReducedMotion) {\n        const { hover, press } = LIQUID_GLASS.motionFluency;\n\n        if (isHovered) {\n          styles.transform =\n            `${styles.transform || \"\"} translateY(-1px) scale(1.005)`.trim();\n          styles.transition = `all ${hover.duration}ms ${hover.easing}`;\n        }\n\n        if (isPressed) {\n          styles.transform =\n            `${styles.transform || \"\"} translateY(1px) scale(0.998)`.trim();\n          styles.transition = `all ${press.duration}ms ${press.easing}`;\n        }\n\n        // Device tilt responsiveness\n        if (Math.abs(deviceTilt.x) > 0.1 || Math.abs(deviceTilt.y) > 0.1) {\n          const tiltX = deviceTilt.x * LIQUID_GLASS.motionFluency.tilt.maxTilt;\n          const tiltY = deviceTilt.y * LIQUID_GLASS.motionFluency.tilt.maxTilt;\n          styles.transform =\n            `${styles.transform || \"\"} rotateX(${tiltY}deg) rotateY(${tiltX}deg)`.trim();\n        }\n      }\n\n      // Parallax depth effects\n      if (effectiveFlags.parallax && materialSpec.thickness > 3) {\n        styles.transformStyle = \"preserve-3d\";\n        styles.transform =\n          `${styles.transform || \"\"} translateZ(${materialSpec.thickness * 2}px)`.trim();\n      }\n\n      // Border radius \u2014 generous rounding is part of the liquid glass look\n      const radiusMap = {\n        none: \"0px\",\n        sm: \"8px\",\n        md: \"12px\",\n        lg: \"16px\",\n        xl: \"24px\",\n        \"2xl\": \"32px\",\n        full: \"9999px\",\n      };\n      styles.borderRadius = radiusMap[radius];\n\n      // Performance optimizations\n      if (effectiveFlags.microInteractions || effectiveFlags.parallax) {\n        styles.willChange = \"transform, opacity, backdrop-filter\";\n        styles.contain = \"layout style paint\";\n      }\n\n      return styles;\n    }, [\n      intent,\n      elevation,\n      material,\n      variant,\n      performanceLevel,\n      materialSpec,\n      contrastAdjustment,\n      effectiveFlags,\n      isHovered,\n      isPressed,\n      deviceTilt,\n      prefersReducedMotion,\n      radius,\n      backdrop,\n    ]);\n\n    // Event handlers for micro-interactions\n    const handleMouseEnter = useCallback(() => {\n      if (effectiveFlags.microInteractions && !disabled) {\n        setIsHovered(true);\n      }\n    }, [effectiveFlags.microInteractions, disabled]);\n\n    const handleMouseLeave = useCallback(() => {\n      if (effectiveFlags.microInteractions) {\n        setIsHovered(false);\n      }\n    }, [effectiveFlags.microInteractions]);\n\n    const handleMouseDown = useCallback(() => {\n      if (effectiveFlags.microInteractions && !disabled) {\n        setIsPressed(true);\n      }\n    }, [effectiveFlags.microInteractions, disabled]);\n\n    const handleMouseUp = useCallback(() => {\n      if (effectiveFlags.microInteractions) {\n        setIsPressed(false);\n      }\n    }, [effectiveFlags.microInteractions]);\n\n    // Build CSS classes\n    const classes = cn(\n      // Base glass foundation\n      \"liquid-glass-material\",\n      \"relative\",\n      \"overflow-hidden\",\n\n      // Material type\n      material === \"liquid\" && \"liquid-glass-advanced\",\n\n      // Variant\n      `liquid-glass-variant-${variant}`,\n\n      // Intent\n      intent !== \"neutral\" && `liquid-glass-${intent}`,\n\n      // Interactive states\n      interactive && \"cursor-pointer\",\n      disabled && \"pointer-events-none opacity-60\",\n\n      // Accessibility\n      contrastAdjustment?.modifications.fallbackMode &&\n        \"liquid-glass-contrast-fallback\",\n\n      // Feature flags\n      effectiveFlags.refraction && \"liquid-glass-refraction\",\n      effectiveFlags.reflection && \"liquid-glass-reflection\",\n      effectiveFlags.parallax && \"liquid-glass-parallax\",\n      effectiveFlags.microInteractions && \"liquid-glass-interactive\",\n\n      // Reduced motion\n      prefersReducedMotion && \"liquid-glass-reduced-motion\",\n      effectGroup && \"liquid-glass-grouped-surface\",\n      layer.insideGlass && \"liquid-glass-layered-surface\",\n\n      // Custom classes\n      className\n    );\n\n    // Combine custom styles\n    const combinedStyles = {\n      ...dynamicStyles,\n      ...style,\n    };\n\n    return (\n      <LiquidGlassSurfaceLayer\n        variant={variant}\n        performanceLevel={performanceLevel}\n      >\n        <div\n          ref={combinedRef}\n          className={classes}\n          style={{ ...combinedStyles }}\n          onMouseEnter={interactive ? handleMouseEnter : undefined}\n          onMouseLeave={interactive ? handleMouseLeave : undefined}\n          onMouseDown={interactive ? handleMouseDown : undefined}\n          onMouseUp={interactive ? handleMouseUp : undefined}\n          aria-disabled={disabled || undefined}\n          data-liquid-glass-material=\"true\"\n          data-liquid-glass-variant={variant}\n          data-liquid-glass-group-id={effectGroup?.groupId}\n          data-liquid-glass-sampling={\n            effectGroup?.samplingStrategy ?? \"isolated\"\n          }\n          data-liquid-glass-requires-dimming={\n            backdrop.requiresDimming ? \"true\" : \"false\"\n          }\n          data-liquid-glass-backdrop-source={backdrop.source}\n          {...props}\n        >\n          {/* Edge sheen layer */}\n          {materialSpec.sheen > 0 && (\n            <div\n              className=\"liquid-glass-sheen glass-absolute glass-inset-0 glass-pointer-events-none\"\n              style={{\n                background: `radial-gradient(80% 70% at 50% -15%, rgba(255,255,255,${0.14 + materialSpec.sheen * 0.06}) 0%, transparent 65%)`,\n                opacity: isHovered ? 1.2 : 1,\n                transition: LIQUID_GLASS.motionFluency.hover.easing,\n              }}\n            />\n          )}\n\n          {/* Content layer with proper z-index */}\n          <div className=\"liquid-glass-content glass-relative glass-z-10\">\n            {children}\n          </div>\n\n          {/* Opt-in diagnostics for primitive development. */}\n          {showDebug && process.env.NODE_ENV === \"development\" && (\n            <div className=\"liquid-glass-debug glass-absolute glass-top-0 glass-right-0 glass-text-xs glass-opacity-50 glass-pointer-events-none glass-surface-dark glass-text-primary glass-p-1 glass-radius\">\n              <div>Material: {material}</div>\n              <div>Variant: {variant}</div>\n              <div>IOR: {materialSpec.ior.toFixed(2)}</div>\n              <div>Thickness: {materialSpec.thickness}px</div>\n              <div>Sheen: {materialSpec.sheen}</div>\n              {contrastAdjustment && (\n                <div>\n                  Contrast: {contrastAdjustment.adjustedContrast.toFixed(1)}:1\n                </div>\n              )}\n            </div>\n          )}\n        </div>\n      </LiquidGlassSurfaceLayer>\n    );\n  }\n);\n\nLiquidGlassMaterial.displayName = \"LiquidGlassMaterial\";\n\n/**\n * Higher-order component for adding Liquid Glass material to existing components\n */\nexport function withLiquidGlass<P extends object>(\n  Component: React.ComponentType<P>,\n  defaultProps?: Partial<LiquidGlassMaterialProps>\n) {\n  const WrappedComponent = forwardRef<\n    HTMLDivElement,\n    P & LiquidGlassMaterialProps\n  >((props, ref) => {\n    const { children, ...materialProps } = props;\n\n    return (\n      <LiquidGlassMaterial ref={ref} {...defaultProps} {...materialProps}>\n        <Component {...(props as P)}>{children}</Component>\n      </LiquidGlassMaterial>\n    );\n  });\n\n  WrappedComponent.displayName = `withLiquidGlass(${Component.displayName || Component.name})`;\n  return WrappedComponent;\n}\n\n/**\n * Utility hook for managing Liquid Glass state in custom components\n */\nexport function useLiquidGlassState(\n  material: MaterialType = \"liquid\",\n  options: {\n    adaptToContent?: boolean;\n    adaptToMotion?: boolean;\n    performanceLevel?: keyof LiquidGlassTokens[\"performance\"];\n  } = {}\n) {\n  const {\n    adaptToContent = true,\n    adaptToMotion = true,\n    performanceLevel = \"high\",\n  } = options;\n  const [backdropSample, setBackdropSample] =\n    useState<LiquidGlassBackdropSample | null>(null);\n  const [deviceTilt, setDeviceTilt] = useState({ x: 0, y: 0 });\n  const [isInteracting, setIsInteracting] = useState(false);\n\n  const prefersReducedMotion = useReducedMotion();\n  const performanceConfig = LIQUID_GLASS.performance[performanceLevel];\n\n  return {\n    backdropSample,\n    deviceTilt,\n    isInteracting,\n    performanceConfig,\n    prefersReducedMotion,\n    setBackdropSample,\n    setDeviceTilt,\n    setIsInteracting,\n  };\n}\n\n// Export types for external use\nexport type { MaterialType, MaterialVariant, SheenIntensity, TintMode };\n", "/**\n * Liquid Glass Contrast Guard System\n *\n * Ensures WCAG compliance for all glass surfaces with dynamic tinting.\n * Automatically adjusts opacity, tint, and backdrop-filter to maintain\n * readable text contrast ratios even with environmental changes.\n *\n * Features:\n * - Real-time backdrop luminance sampling\n * - Automatic contrast ratio enforcement (AA/AAA)\n * - Content-aware tint adjustment\n * - Performance optimized with throttling\n * - Fallback modes for edge cases\n */\n\nimport React from \"react\";\nimport {\n  LIQUID_GLASS,\n  type LiquidGlassMaterial,\n  type MaterialVariant,\n  type GlassIntent,\n} from \"../tokens/glass\";\nimport { sampleLiquidGlassBackdrop } from \"../hooks/useLiquidGlassBackdrop\";\n\n// WCAG contrast level requirements\nexport type ContrastLevel = \"A\" | \"AA\" | \"AAA\";\nexport const CONTRAST_RATIOS: Record<ContrastLevel, number> = {\n  A: 3.0, // Minimum for large text\n  AA: 4.5, // Standard requirement\n  AAA: 7.0, // Enhanced requirement\n};\n\n// Color representation for calculations\nexport interface RGBColor {\n  r: number; // 0-255\n  g: number; // 0-255\n  b: number; // 0-255\n  a?: number; // 0-1\n}\n\nexport interface HSLColor {\n  h: number; // 0-360\n  s: number; // 0-100\n  l: number; // 0-100\n  a?: number; // 0-1\n}\n\n// Backdrop sampling result\nexport interface BackdropSample {\n  averageLuminance: number; // 0-1\n  dominantHue: number; // 0-360\n  contrast: number; // Measured contrast with current text\n  timestamp: number; // When sampled\n  confidence: number; // 0-1 quality of sample\n}\n\n// Contrast adjustment result\nexport interface ContrastAdjustment {\n  originalContrast: number;\n  adjustedContrast: number;\n  modifications: {\n    opacity?: number;\n    tint?: string;\n    backdropBlur?: number;\n    fallbackMode?: boolean;\n  };\n  meetsRequirement: boolean;\n  level: ContrastLevel;\n}\n\n/**\n * Core Contrast Guard System\n */\nexport class ContrastGuard {\n  private cache: Map<string, BackdropSample> = new Map();\n  private observers: Map<HTMLElement, ResizeObserver | MutationObserver> =\n    new Map();\n  private throttleTimers: Map<HTMLElement, number> = new Map();\n\n  private readonly CACHE_TTL = 500; // 500ms cache lifetime\n  private readonly THROTTLE_DELAY = 100; // 100ms update throttle\n  private readonly SAMPLING_SIZE = 32; // 32x32 pixel sampling area\n\n  /**\n   * Sample backdrop luminance behind a glass element\n   */\n  async sampleBackdrop(element: HTMLElement): Promise<BackdropSample> {\n    const cacheKey = this.getCacheKey(element);\n    const cached = this.cache.get(cacheKey);\n\n    // Return cached result if valid\n    if (cached && Date.now() - cached.timestamp < this.CACHE_TTL) {\n      return cached;\n    }\n\n    const sample = await this.performBackdropSample(element);\n    this.cache.set(cacheKey, sample);\n\n    // Clean old cache entries\n    this.cleanCache();\n\n    return sample;\n  }\n\n  /**\n   * Calculate contrast ratio between foreground and background colors\n   */\n  calculateContrastRatio(foreground: string, background: string): number {\n    const fgLuminance = this.getRelativeLuminance(foreground);\n    const bgLuminance = this.getRelativeLuminance(background);\n\n    const lighter = Math.max(fgLuminance, bgLuminance);\n    const darker = Math.min(fgLuminance, bgLuminance);\n\n    return (lighter + 0.05) / (darker + 0.05);\n  }\n\n  /**\n   * Adjust glass surface properties to meet contrast requirements\n   */\n  enforceContrast(\n    element: HTMLElement,\n    textColor: string,\n    targetLevel: ContrastLevel = \"AA\",\n    material: LiquidGlassMaterial = \"liquid\",\n    variant: MaterialVariant = \"regular\"\n  ): Promise<ContrastAdjustment> {\n    return new Promise(async (resolve) => {\n      try {\n        const backdrop = await this.sampleBackdrop(element);\n        const currentContrast = this.calculateContrastRatio(\n          textColor,\n          this.luminanceToColor(backdrop.averageLuminance)\n        );\n        const requiredRatio = CONTRAST_RATIOS[targetLevel];\n\n        if (currentContrast >= requiredRatio) {\n          // Already meets requirements\n          resolve({\n            originalContrast: currentContrast,\n            adjustedContrast: currentContrast,\n            modifications: {},\n            meetsRequirement: true,\n            level: targetLevel,\n          });\n          return;\n        }\n\n        // Calculate required adjustments\n        const adjustment = this.calculateAdjustments(\n          backdrop,\n          textColor,\n          requiredRatio,\n          material,\n          variant\n        );\n\n        resolve(adjustment);\n      } catch {\n        resolve(this.getFallbackAdjustment(targetLevel));\n      }\n    });\n  }\n\n  /**\n   * Start monitoring an element for backdrop changes\n   */\n  startMonitoring(\n    element: HTMLElement,\n    callback: (adjustment: ContrastAdjustment) => void,\n    options: {\n      targetLevel?: ContrastLevel;\n      material?: LiquidGlassMaterial;\n      variant?: MaterialVariant;\n      textColor?: string;\n    } = {}\n  ): void {\n    const {\n      targetLevel = \"AA\",\n      material = \"liquid\",\n      variant = \"regular\",\n      textColor = \"var(--glass-text-primary)\",\n    } = options;\n\n    // Throttled update function\n    const updateContrast = () => {\n      const existingTimer = this.throttleTimers.get(element);\n      if (existingTimer) {\n        clearTimeout(existingTimer);\n      }\n\n      const timer = window.setTimeout(async () => {\n        const adjustment = await this.enforceContrast(\n          element,\n          textColor,\n          targetLevel,\n          material,\n          variant\n        );\n        callback(adjustment);\n        this.throttleTimers.delete(element);\n      }, this.THROTTLE_DELAY);\n\n      this.throttleTimers.set(element, timer);\n    };\n\n    // Monitor size changes\n    const resizeObserver = new ResizeObserver(updateContrast);\n    resizeObserver.observe(element);\n    this.observers.set(element, resizeObserver);\n\n    // Monitor DOM changes in backdrop area\n    const parentElement = element.parentElement || document.body;\n    const mutationObserver = new MutationObserver((mutations) => {\n      const hasRelevantChanges = mutations.some(\n        (mutation) =>\n          mutation.type === \"childList\" ||\n          (mutation.type === \"attributes\" &&\n            [\"style\", \"class\", \"background\", \"color\"].includes(\n              mutation.attributeName || \"\"\n            ))\n      );\n\n      if (hasRelevantChanges) {\n        updateContrast();\n      }\n    });\n\n    mutationObserver.observe(parentElement, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: [\"style\", \"class\", \"background\", \"color\"],\n    });\n\n    // Perform initial check\n    updateContrast();\n  }\n\n  /**\n   * Stop monitoring an element\n   */\n  stopMonitoring(element: HTMLElement): void {\n    const observer = this.observers.get(element);\n    if (observer) {\n      observer.disconnect();\n      this.observers.delete(element);\n    }\n\n    const timer = this.throttleTimers.get(element);\n    if (timer) {\n      clearTimeout(timer);\n      this.throttleTimers.delete(element);\n    }\n\n    // Clean cache entries for this element\n    const cacheKey = this.getCacheKey(element);\n    this.cache.delete(cacheKey);\n  }\n\n  /**\n   * Generate adaptive tint based on backdrop analysis\n   */\n  generateAdaptiveTint(\n    backdrop: BackdropSample,\n    intent: GlassIntent = \"neutral\"\n  ): string {\n    const { averageLuminance, dominantHue } = backdrop;\n    const { lightThreshold, contrastBoost, saturationAdjust } =\n      LIQUID_GLASS.tinting.auto;\n\n    const isLightBackdrop = averageLuminance > lightThreshold;\n    const baseOpacity = isLightBackdrop ? 0.15 : 0.25;\n    const adjustedOpacity = baseOpacity + contrastBoost;\n\n    // Apply subtle color temperature shift based on dominant hue\n    const hueShift = Math.sin((dominantHue * Math.PI) / 180) * saturationAdjust;\n\n    if (isLightBackdrop) {\n      // Dark tint for light backgrounds with subtle color temperature\n      const r = Math.max(0, Math.min(255, Math.round(0 + hueShift * 255)));\n      const g = Math.max(0, Math.min(255, Math.round(0 + hueShift * 128)));\n      const b = Math.max(0, Math.min(255, Math.round(0 + hueShift * 64)));\n      return `rgba(${r}, ${g}, ${b}, ${adjustedOpacity})`;\n    } else {\n      // Light tint for dark backgrounds with subtle warmth\n      const r = Math.max(0, Math.min(255, Math.round(255 - hueShift * 64)));\n      const g = Math.max(0, Math.min(255, Math.round(255 - hueShift * 32)));\n      const b = Math.max(0, Math.min(255, Math.round(255 - hueShift * 128)));\n      return `rgba(${r}, ${g}, ${b}, ${adjustedOpacity})`;\n    }\n  }\n\n  // Private helper methods\n\n  private async performBackdropSample(\n    element: HTMLElement\n  ): Promise<BackdropSample> {\n    const liquidSample = sampleLiquidGlassBackdrop(element);\n    if (liquidSample.source !== \"fallback\") {\n      return {\n        averageLuminance: liquidSample.luminance,\n        dominantHue: 0,\n        contrast: liquidSample.contrastHint === \"mixed\" ? 4.5 : 7,\n        timestamp: Date.now(),\n        confidence: liquidSample.source === \"computed-style\" ? 0.8 : 0.5,\n      };\n    }\n    try {\n      const rect = element.getBoundingClientRect();\n      const canvas = document.createElement(\"canvas\");\n      const ctx = canvas.getContext(\"2d\");\n\n      if (!ctx) {\n        throw new Error(\"Canvas context not available\");\n      }\n\n      // Set up sampling area\n      canvas.width = this.SAMPLING_SIZE;\n      canvas.height = this.SAMPLING_SIZE;\n\n      // Get backdrop content (simplified - in real implementation would use more sophisticated sampling)\n      const backdrop = await this.captureBackdrop(element, rect);\n\n      if (backdrop) {\n        ctx.drawImage(backdrop, 0, 0, this.SAMPLING_SIZE, this.SAMPLING_SIZE);\n        const imageData = ctx.getImageData(\n          0,\n          0,\n          this.SAMPLING_SIZE,\n          this.SAMPLING_SIZE\n        );\n        return this.analyzeImageData(imageData);\n      }\n\n      // Fallback: estimate from computed styles\n      return this.estimateBackdropFromStyles(element);\n    } catch {\n      return this.getDefaultBackdropSample();\n    }\n  }\n\n  private async captureBackdrop(\n    element: HTMLElement,\n    rect: DOMRect\n  ): Promise<HTMLCanvasElement | null> {\n    // In a real implementation, this would capture the backdrop using various techniques:\n    // - html2canvas for DOM elements behind the glass\n    // - canvas.drawImage for images\n    // - getComputedStyle analysis for solid backgrounds\n    // For now, return null to trigger fallback\n    return null;\n  }\n\n  private analyzeImageData(imageData: ImageData): BackdropSample {\n    const pixels = imageData.data;\n    let totalLuminance = 0;\n    let hueSum = 0;\n    let hueCount = 0;\n\n    for (let i = 0; i < pixels.length; i += 4) {\n      const r = pixels[i];\n      const g = pixels[i + 1];\n      const b = pixels[i + 2];\n      const a = pixels[i + 3] / 255;\n\n      // Calculate relative luminance\n      const luminance = this.getRelativeLuminanceFromRGB(r, g, b) * a;\n      totalLuminance += luminance;\n\n      // Calculate hue for dominant color detection\n      const hsl = this.rgbToHsl(r, g, b);\n      if (hsl.s > 0.1) {\n        // Only count saturated colors\n        hueSum += hsl.h;\n        hueCount++;\n      }\n    }\n\n    const pixelCount = pixels.length / 4;\n    const averageLuminance = totalLuminance / pixelCount;\n    const dominantHue = hueCount > 0 ? hueSum / hueCount : 0;\n\n    return {\n      averageLuminance,\n      dominantHue,\n      contrast: 4.5, // Will be calculated properly in real implementation\n      timestamp: Date.now(),\n      confidence: 0.8,\n    };\n  }\n\n  private estimateBackdropFromStyles(element: HTMLElement): BackdropSample {\n    const stack: HTMLElement[] = [];\n    let current: HTMLElement | null = element;\n\n    while (current) {\n      stack.unshift(current);\n      current = current.parentElement;\n    }\n\n    let composed: RGBColor = { r: 0, g: 0, b: 0, a: 1 };\n    let confidence = 0.3;\n\n    for (const item of stack) {\n      const computedStyle = window.getComputedStyle(item);\n      const color =\n        this.parseColorOrNull(computedStyle.backgroundColor) ||\n        this.extractFirstBackgroundColor(computedStyle.backgroundImage);\n\n      if (color && (color.a ?? 1) > 0) {\n        composed = this.compositeColor(color, composed);\n        confidence = 0.65;\n      }\n    }\n\n    const luminance = this.getRelativeLuminanceFromRGB(\n      composed.r,\n      composed.g,\n      composed.b\n    );\n\n    return {\n      averageLuminance: luminance,\n      dominantHue: 0,\n      contrast: 4.5,\n      timestamp: Date.now(),\n      confidence,\n    };\n  }\n\n  private calculateAdjustments(\n    backdrop: BackdropSample,\n    textColor: string,\n    requiredRatio: number,\n    material: LiquidGlassMaterial,\n    variant: MaterialVariant\n  ): ContrastAdjustment {\n    const variantSpec = LIQUID_GLASS.variants[variant];\n    let adjustedOpacity: number = variantSpec.opacity.base;\n    let adjustedTint = this.generateAdaptiveTint(backdrop);\n    let adjustedBlur = 1.0;\n    let fallbackMode = false;\n\n    // Try opacity adjustment first\n    for (\n      let opacity = variantSpec.opacity.base;\n      opacity <= 0.95;\n      opacity += 0.05\n    ) {\n      const testContrast = this.calculateContrastWithOpacity(\n        textColor,\n        backdrop,\n        opacity\n      );\n      if (testContrast >= requiredRatio) {\n        adjustedOpacity = opacity;\n        break;\n      }\n    }\n\n    // If opacity adjustment isn't enough, try blur increase\n    let finalContrast = this.calculateContrastWithOpacity(\n      textColor,\n      backdrop,\n      adjustedOpacity\n    );\n    if (finalContrast < requiredRatio) {\n      adjustedBlur = variantSpec.blur.multiplier * 1.3; // Increase blur by 30%\n      finalContrast = Math.min(requiredRatio + 0.5, finalContrast * 1.2); // Estimate improvement\n    }\n\n    // Last resort: fallback mode with high contrast\n    if (finalContrast < requiredRatio) {\n      fallbackMode = true;\n      adjustedOpacity = 0.9 as number;\n      adjustedTint =\n        backdrop.averageLuminance > 0.5\n          ? \"rgba(0,0,0,0.3)\"\n          : \"rgba(255,255,255,0.4)\";\n      finalContrast = requiredRatio + 0.5; // Assume fallback meets requirement\n    }\n\n    return {\n      originalContrast: backdrop.contrast,\n      adjustedContrast: finalContrast,\n      modifications: {\n        opacity: adjustedOpacity,\n        tint: adjustedTint,\n        backdropBlur: adjustedBlur,\n        fallbackMode,\n      },\n      meetsRequirement: finalContrast >= requiredRatio,\n      level: this.getContrastLevel(finalContrast),\n    };\n  }\n\n  private calculateContrastWithOpacity(\n    textColor: string,\n    backdrop: BackdropSample,\n    opacity: number\n  ): number {\n    // Simplified contrast calculation with opacity\n    const baseContrast = this.calculateContrastRatio(\n      textColor,\n      this.luminanceToColor(backdrop.averageLuminance)\n    );\n    // Higher opacity generally improves contrast by reducing backdrop influence\n    const opacityBoost = (opacity - 0.5) * 2; // 0-1 boost factor\n    return baseContrast * (1 + opacityBoost * 0.3);\n  }\n\n  private getRelativeLuminance(color: string): number {\n    const rgb = this.parseColor(color);\n    return this.getRelativeLuminanceFromRGB(rgb.r, rgb.g, rgb.b);\n  }\n\n  private getRelativeLuminanceFromRGB(r: number, g: number, b: number): number {\n    // Convert to 0-1 range and apply gamma correction\n    const [rs, gs, bs] = [r, g, b].map((c: any) => {\n      c = c / 255;\n      return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n    });\n\n    // Apply ITU-R BT.709 coefficients\n    return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n  }\n\n  private parseColor(color: string): RGBColor {\n    // Simple color parsing (would be more robust in real implementation)\n    if (color.startsWith(\"rgb\")) {\n      const match = color.match(\n        /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/\n      );\n      if (match) {\n        return {\n          r: parseInt(match[1]),\n          g: parseInt(match[2]),\n          b: parseInt(match[3]),\n          a: match[4] ? parseFloat(match[4]) : 1,\n        };\n      }\n    }\n\n    // Default to white for unknown colors\n    return { r: 255, g: 255, b: 255, a: 1 };\n  }\n\n  private parseColorOrNull(color: string): RGBColor | null {\n    if (!color || color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\") {\n      return null;\n    }\n\n    if (color.startsWith(\"rgb\")) {\n      const match = color.match(\n        /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/\n      );\n      if (match) {\n        return {\n          r: parseInt(match[1]),\n          g: parseInt(match[2]),\n          b: parseInt(match[3]),\n          a: match[4] ? parseFloat(match[4]) : 1,\n        };\n      }\n    }\n\n    return null;\n  }\n\n  private extractFirstBackgroundColor(\n    backgroundImage: string\n  ): RGBColor | null {\n    const match = backgroundImage.match(/rgba?\\([^)]+\\)/);\n    return match ? this.parseColorOrNull(match[0]) : null;\n  }\n\n  private compositeColor(foreground: RGBColor, background: RGBColor): RGBColor {\n    const fgAlpha = foreground.a ?? 1;\n    const bgAlpha = background.a ?? 1;\n    const alpha = fgAlpha + bgAlpha * (1 - fgAlpha);\n\n    if (alpha <= 0) {\n      return { r: 0, g: 0, b: 0, a: 0 };\n    }\n\n    return {\n      r: Math.round(\n        (foreground.r * fgAlpha + background.r * bgAlpha * (1 - fgAlpha)) /\n          alpha\n      ),\n      g: Math.round(\n        (foreground.g * fgAlpha + background.g * bgAlpha * (1 - fgAlpha)) /\n          alpha\n      ),\n      b: Math.round(\n        (foreground.b * fgAlpha + background.b * bgAlpha * (1 - fgAlpha)) /\n          alpha\n      ),\n      a: alpha,\n    };\n  }\n\n  private rgbToHsl(r: number, g: number, b: number): HSLColor {\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const diff = max - min;\n    const sum = max + min;\n    const l = sum / 2;\n\n    let h = 0;\n    let s = 0;\n\n    if (diff !== 0) {\n      s = l < 0.5 ? diff / sum : diff / (2 - sum);\n\n      switch (max) {\n        case r:\n          h = (g - b) / diff + (g < b ? 6 : 0);\n          break;\n        case g:\n          h = (b - r) / diff + 2;\n          break;\n        case b:\n          h = (r - g) / diff + 4;\n          break;\n      }\n      h /= 6;\n    }\n\n    return { h: h * 360, s: s * 100, l: l * 100 };\n  }\n\n  private luminanceToColor(luminance: number): string {\n    const value = Math.round(luminance * 255);\n    return `rgb(${value}, ${value}, ${value})`;\n  }\n\n  private getContrastLevel(ratio: number): ContrastLevel {\n    if (ratio >= CONTRAST_RATIOS.AAA) return \"AAA\";\n    if (ratio >= CONTRAST_RATIOS.AA) return \"AA\";\n    return \"A\";\n  }\n\n  private getCacheKey(element: HTMLElement): string {\n    const rect = element.getBoundingClientRect();\n    return `${rect.x}-${rect.y}-${rect.width}-${rect.height}`;\n  }\n\n  private cleanCache(): void {\n    const now = Date.now();\n    for (const [key, sample] of this.cache.entries()) {\n      if (now - sample.timestamp > this.CACHE_TTL) {\n        this.cache.delete(key);\n      }\n    }\n  }\n\n  private getDefaultBackdropSample(): BackdropSample {\n    return {\n      averageLuminance: 0.5,\n      dominantHue: 0,\n      contrast: 4.5,\n      timestamp: Date.now(),\n      confidence: 0.3,\n    };\n  }\n\n  private getFallbackAdjustment(\n    targetLevel: ContrastLevel\n  ): ContrastAdjustment {\n    return {\n      originalContrast: 3.0,\n      adjustedContrast: CONTRAST_RATIOS[targetLevel] + 0.5,\n      modifications: {\n        opacity: 0.9,\n        tint: \"rgba(0,0,0,0.2)\",\n        backdropBlur: 1.2,\n        fallbackMode: true,\n      },\n      meetsRequirement: true,\n      level: targetLevel,\n    };\n  }\n}\n\n/**\n * Singleton instance for global use\n */\nexport const contrastGuard = new ContrastGuard();\n\n/**\n * Hook for React components to use contrast guard\n */\nexport function useContrastGuard(\n  elementRef: React.RefObject<HTMLElement | null>,\n  options: {\n    targetLevel?: ContrastLevel;\n    material?: LiquidGlassMaterial;\n    variant?: MaterialVariant;\n    textColor?: string;\n    onAdjustment?: (adjustment: ContrastAdjustment) => void;\n  } = {}\n): ContrastAdjustment | null {\n  const [adjustment, setAdjustment] = React.useState<ContrastAdjustment | null>(\n    null\n  );\n\n  React.useEffect(() => {\n    const element = elementRef.current;\n    if (!element) return;\n\n    const handleAdjustment = (adj: ContrastAdjustment) => {\n      setAdjustment(adj);\n      options.onAdjustment?.(adj);\n    };\n\n    contrastGuard.startMonitoring(element, handleAdjustment, options);\n\n    return () => {\n      contrastGuard.stopMonitoring(element);\n    };\n  }, [elementRef.current, JSON.stringify(options)]);\n\n  return adjustment;\n}\n\n/**\n * Utility function to apply contrast adjustments to an element\n */\nexport function applyContrastAdjustment(\n  element: HTMLElement,\n  adjustment: ContrastAdjustment\n): void {\n  const { modifications } = adjustment;\n\n  if (modifications.opacity !== undefined) {\n    element.style.setProperty(\n      \"--glass-surface-opacity\",\n      String(modifications.opacity)\n    );\n  }\n\n  if (modifications.tint) {\n    element.style.setProperty(\"--glass-adaptive-tint\", modifications.tint);\n  }\n\n  if (modifications.backdropBlur !== undefined) {\n    element.style.setProperty(\n      \"--glass-adaptive-blur-multiplier\",\n      String(modifications.backdropBlur)\n    );\n  }\n\n  if (modifications.fallbackMode) {\n    element.classList.add(\"glass-contrast-fallback\");\n  } else {\n    element.classList.remove(\"glass-contrast-fallback\");\n  }\n}\n", "\"use client\";\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nexport type LiquidGlassContrastHint = \"light\" | \"dark\" | \"mixed\";\n\nexport interface LiquidGlassBackdropSample {\n  luminance: number;\n  dominantColor: { r: number; g: number; b: number; a: number };\n  contrastHint: LiquidGlassContrastHint;\n  mediaRichness: number;\n  requiresDimming: boolean;\n  source: \"dom-grid\" | \"computed-style\" | \"theme\" | \"fallback\";\n}\n\nexport interface LiquidGlassBackdropOptions {\n  enabled?: boolean;\n  variant?: \"regular\" | \"clear\";\n  throttleMs?: number;\n  minContrastRatio?: number;\n  observeMutations?: boolean;\n  observeResize?: boolean;\n}\n\nconst FALLBACK_SAMPLE: LiquidGlassBackdropSample = {\n  luminance: 0.5,\n  dominantColor: { r: 128, g: 128, b: 128, a: 1 },\n  contrastHint: \"mixed\",\n  mediaRichness: 0,\n  requiresDimming: false,\n  source: \"fallback\",\n};\n\nfunction parseRgb(value: string | null | undefined) {\n  if (!value || value === \"transparent\") return null;\n  const match = value.match(/rgba?\\(([^)]+)\\)/i);\n  if (!match) return null;\n  const [r, g, b, a = \"1\"] = match[1].split(\",\").map((part) => part.trim());\n  const color = {\n    r: Number.parseFloat(r),\n    g: Number.parseFloat(g),\n    b: Number.parseFloat(b),\n    a: Number.parseFloat(a),\n  };\n  if ([color.r, color.g, color.b, color.a].some((channel) => Number.isNaN(channel))) {\n    return null;\n  }\n  return color;\n}\n\nfunction luminanceFor(color: { r: number; g: number; b: number }) {\n  const toLinear = (channel: number) => {\n    const normalized = channel / 255;\n    return normalized <= 0.03928\n      ? normalized / 12.92\n      : Math.pow((normalized + 0.055) / 1.055, 2.4);\n  };\n  return 0.2126 * toLinear(color.r) + 0.7152 * toLinear(color.g) + 0.0722 * toLinear(color.b);\n}\n\nfunction backdropElementAt(element: HTMLElement, x: number, y: number) {\n\n  if (\n    typeof document === \"undefined\" ||\n    typeof document.elementsFromPoint !== \"function\" ||\n    typeof document.elementFromPoint !== \"function\"\n  ) {\n    return element.parentElement;\n  }\n\n  try {\n    const stack = document.elementsFromPoint(x, y);\n    return stack.find((candidate) => candidate !== element && !element.contains(candidate)) as HTMLElement | undefined;\n  } catch {\n    return element.parentElement;\n  }\n}\n\nfunction getComputedBackdropColor(element: HTMLElement) {\n  const computed = window.getComputedStyle(element);\n  const color = parseRgb(computed.backgroundColor);\n  const image = computed.backgroundImage || \"\";\n  if (!color) return null;\n  return { color, image };\n}\n\nfunction sampleBackdropGrid(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const points = [\n    [0.5, 0.5],\n    [0.2, 0.2],\n    [0.8, 0.2],\n    [0.2, 0.8],\n    [0.8, 0.8],\n    [0.5, 0.2],\n    [0.5, 0.8],\n    [0.2, 0.5],\n    [0.8, 0.5],\n  ];\n  const samples: Array<{ color: { r: number; g: number; b: number; a: number }; image: string }> = [];\n\n  for (const [xRatio, yRatio] of points) {\n    const target = backdropElementAt(\n      element,\n      rect.left + rect.width * xRatio,\n      rect.top + rect.height * yRatio\n    );\n    if (!target) continue;\n    const sample = getComputedBackdropColor(target);\n    if (sample) samples.push(sample);\n  }\n\n  return samples;\n}\n\nexport function sampleLiquidGlassBackdrop(\n  element: HTMLElement | null,\n  options: LiquidGlassBackdropOptions = {}\n): LiquidGlassBackdropSample {\n  if (typeof window === \"undefined\" || !element) {\n    return FALLBACK_SAMPLE;\n  }\n\n  const gridSamples = sampleBackdropGrid(element);\n  const target = backdropElementAt(\n    element,\n    element.getBoundingClientRect().left + element.offsetWidth / 2,\n    element.getBoundingClientRect().top + element.offsetHeight / 2\n  ) || element.parentElement || document.body;\n  const fallbackColor =\n    parseRgb(window.getComputedStyle(document.body).backgroundColor) ||\n    FALLBACK_SAMPLE.dominantColor;\n  const color =\n    gridSamples.length > 0\n      ? gridSamples.reduce(\n          (acc, sample) => ({\n            r: acc.r + sample.color.r / gridSamples.length,\n            g: acc.g + sample.color.g / gridSamples.length,\n            b: acc.b + sample.color.b / gridSamples.length,\n            a: acc.a + sample.color.a / gridSamples.length,\n          }),\n          { r: 0, g: 0, b: 0, a: 0 }\n        )\n      : getComputedBackdropColor(target)?.color || fallbackColor;\n\n  const imageCount = gridSamples.filter((sample) => sample.image && sample.image !== \"none\").length;\n  const mediaRichness =\n    gridSamples.length > 0\n      ? Math.min(1, imageCount / gridSamples.length + (gridSamples.length > 1 ? 0.1 : 0))\n      : getComputedBackdropColor(target)?.image && getComputedBackdropColor(target)?.image !== \"none\"\n        ? 0.85\n        : 0.15;\n  const luminance = luminanceFor(color);\n  const contrastHint: LiquidGlassContrastHint =\n    luminance > 0.68 ? \"light\" : luminance < 0.32 ? \"dark\" : \"mixed\";\n  const variant = options.variant ?? \"regular\";\n  const minContrastRatio = options.minContrastRatio ?? (variant === \"clear\" ? 7 : 4.5);\n  const requiresDimming =\n    variant === \"clear\" && (mediaRichness > 0.5 || contrastHint === \"mixed\" || minContrastRatio >= 7);\n\n  return {\n    luminance,\n    dominantColor: color,\n    contrastHint,\n    mediaRichness,\n    requiresDimming,\n    source: gridSamples.length > 1 ? \"dom-grid\" : \"computed-style\",\n  };\n}\n\nexport function useLiquidGlassBackdrop<T extends HTMLElement>(\n  ref: RefObject<T>,\n  options: LiquidGlassBackdropOptions = {}\n) {\n  const {\n    enabled = true,\n    throttleMs = 100,\n    observeMutations = true,\n    observeResize = true,\n  } = options;\n  const optionsRef = useRef(options);\n  const [sample, setSample] = useState<LiquidGlassBackdropSample>(FALLBACK_SAMPLE);\n\n  optionsRef.current = options;\n\n  const update = useMemo(() => {\n    let frame = 0;\n    let last = 0;\n    return () => {\n      if (!enabled || typeof window === \"undefined\") return;\n      const now = window.performance?.now?.() ?? Date.now();\n      if (now - last < throttleMs) return;\n      last = now;\n      if (frame) window.cancelAnimationFrame(frame);\n      frame = window.requestAnimationFrame(() => {\n        setSample(sampleLiquidGlassBackdrop(ref.current, optionsRef.current));\n      });\n    };\n  }, [enabled, ref, throttleMs]);\n\n  useEffect(() => {\n    if (!enabled || typeof window === \"undefined\") return;\n\n    update();\n    const target = ref.current;\n    const scrollTarget = target?.closest(\"[data-liquid-glass-scroll-target]\") || window;\n\n    window.addEventListener(\"resize\", update, { passive: true });\n    scrollTarget.addEventListener(\"scroll\", update as EventListener, { passive: true });\n\n    let resizeObserver: ResizeObserver | undefined;\n    if (observeResize && typeof ResizeObserver !== \"undefined\" && target) {\n      resizeObserver = new ResizeObserver(update);\n      resizeObserver.observe(target);\n    }\n\n    let mutationObserver: MutationObserver | undefined;\n    if (observeMutations && typeof MutationObserver !== \"undefined\" && target?.parentElement) {\n      mutationObserver = new MutationObserver(update);\n      mutationObserver.observe(target.parentElement, {\n        attributes: true,\n        childList: true,\n        subtree: true,\n        attributeFilter: [\"class\", \"style\", \"data-theme\"],\n      });\n    }\n\n    return () => {\n      window.removeEventListener(\"resize\", update);\n      scrollTarget.removeEventListener(\"scroll\", update as EventListener);\n      resizeObserver?.disconnect();\n      mutationObserver?.disconnect();\n    };\n  }, [enabled, observeMutations, observeResize, ref, update]);\n\n  return sample;\n}\n\nexport { FALLBACK_SAMPLE as LIQUID_GLASS_FALLBACK_BACKDROP_SAMPLE };\n", "\"use client\";\n\nimport React, { createContext, forwardRef, useContext, useMemo } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\nimport {\n  LiquidGlassLayerProvider,\n  type LiquidGlassPerformanceLevel,\n} from \"./LiquidGlassLayerProvider\";\n\nexport type LiquidGlassSamplingStrategy = \"shared\" | \"isolated\" | \"auto\";\n\nexport interface LiquidGlassEffectGroupContextValue {\n  groupId: string;\n  spacing: number | string;\n  morph: boolean;\n  samplingStrategy: LiquidGlassSamplingStrategy;\n  performanceLevel: LiquidGlassPerformanceLevel;\n}\n\nconst LiquidGlassEffectGroupContext = createContext<LiquidGlassEffectGroupContextValue | null>(null);\n\nexport interface LiquidGlassEffectGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  spacing?: number | string;\n  morph?: boolean;\n  samplingStrategy?: LiquidGlassSamplingStrategy;\n  performanceLevel?: LiquidGlassPerformanceLevel;\n  disabled?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const LiquidGlassEffectGroup = forwardRef<HTMLDivElement, LiquidGlassEffectGroupProps>(\n  (\n    {\n      spacing = 12,\n      morph = true,\n      samplingStrategy = \"shared\",\n      performanceLevel = \"high\",\n      disabled = false,\n      className,\n      style,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const autoId = React.useId();\n    const prefersReducedMotion = useReducedMotion();\n    const effectiveMorph = morph && !prefersReducedMotion && !disabled;\n    const spacingValue = typeof spacing === \"number\" ? `${spacing}px` : spacing;\n    const value = useMemo<LiquidGlassEffectGroupContextValue>(\n      () => ({\n        groupId: props.id ?? autoId,\n        spacing,\n        morph: effectiveMorph,\n        samplingStrategy: disabled ? \"isolated\" : samplingStrategy,\n        performanceLevel,\n      }),\n      [autoId, disabled, effectiveMorph, performanceLevel, props.id, samplingStrategy, spacing]\n    );\n\n    const cssVars = {\n      \"--liquid-glass-group-spacing\": spacingValue,\n      \"--liquid-glass-group-morph\": effectiveMorph ? 1 : 0,\n    } as React.CSSProperties;\n\n    return (\n      <LiquidGlassEffectGroupContext.Provider value={value}>\n        <LiquidGlassLayerProvider\n          insideEffectGroup={!disabled}\n          performanceLevel={performanceLevel}\n        >\n          <div\n            ref={ref}\n            className={cn(\n              \"liquid-glass-effect-group glass-relative\",\n              effectiveMorph && \"liquid-glass-effect-group-morph\",\n              className\n            )}\n            style={{ ...cssVars, ...style }}\n            data-liquid-glass-effect-group={!disabled ? \"true\" : \"false\"}\n            data-sampling-strategy={value.samplingStrategy}\n            data-liquid-glass-group-id={value.groupId}\n            {...props}\n          >\n            {children}\n          </div>\n        </LiquidGlassLayerProvider>\n      </LiquidGlassEffectGroupContext.Provider>\n    );\n  }\n);\n\nLiquidGlassEffectGroup.displayName = \"LiquidGlassEffectGroup\";\n\nexport function useLiquidGlassEffectGroup() {\n  return useContext(LiquidGlassEffectGroupContext);\n}\n", "\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\n\nexport type LiquidGlassPerformanceLevel = \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\nexport type LiquidGlassVariant = \"regular\" | \"clear\";\n\nexport interface LiquidGlassLayerContextValue {\n  depth: number;\n  insideGlass: boolean;\n  insideEffectGroup: boolean;\n  variant: LiquidGlassVariant;\n  performanceLevel: LiquidGlassPerformanceLevel;\n  prefersReducedMotion: boolean;\n  allowNestedGlass: boolean;\n  contrastPolicy: \"AA\" | \"AAA\" | \"auto\";\n}\n\nconst LiquidGlassLayerContext = createContext<LiquidGlassLayerContextValue>({\n  depth: 0,\n  insideGlass: false,\n  insideEffectGroup: false,\n  variant: \"regular\",\n  performanceLevel: \"high\",\n  prefersReducedMotion: false,\n  allowNestedGlass: false,\n  contrastPolicy: \"auto\",\n});\n\nexport interface LiquidGlassLayerProviderProps {\n  children: React.ReactNode;\n  variant?: LiquidGlassVariant;\n  performanceLevel?: LiquidGlassPerformanceLevel;\n  allowNestedGlass?: boolean;\n  contrastPolicy?: \"AA\" | \"AAA\" | \"auto\";\n  insideEffectGroup?: boolean;\n}\n\nexport function LiquidGlassLayerProvider({\n  children,\n  variant,\n  performanceLevel,\n  allowNestedGlass,\n  contrastPolicy,\n  insideEffectGroup,\n}: LiquidGlassLayerProviderProps) {\n  const parent = useContext(LiquidGlassLayerContext);\n  const prefersReducedMotion = useReducedMotion();\n\n  const value = useMemo<LiquidGlassLayerContextValue>(\n    () => ({\n      depth: parent.depth,\n      insideGlass: parent.insideGlass,\n      insideEffectGroup: insideEffectGroup ?? parent.insideEffectGroup,\n      variant: variant ?? parent.variant,\n      performanceLevel: performanceLevel ?? parent.performanceLevel,\n      prefersReducedMotion,\n      allowNestedGlass: allowNestedGlass ?? parent.allowNestedGlass,\n      contrastPolicy: contrastPolicy ?? parent.contrastPolicy,\n    }),\n    [\n      allowNestedGlass,\n      contrastPolicy,\n      insideEffectGroup,\n      parent,\n      performanceLevel,\n      prefersReducedMotion,\n      variant,\n    ]\n  );\n\n  return (\n    <LiquidGlassLayerContext.Provider value={value}>\n      {children}\n    </LiquidGlassLayerContext.Provider>\n  );\n}\n\nexport function LiquidGlassSurfaceLayer({\n  children,\n  variant,\n  performanceLevel,\n  allowNestedGlass,\n}: {\n  children: React.ReactNode;\n  variant?: LiquidGlassVariant;\n  performanceLevel?: LiquidGlassPerformanceLevel;\n  allowNestedGlass?: boolean;\n}) {\n  const parent = useContext(LiquidGlassLayerContext);\n  const prefersReducedMotion = useReducedMotion();\n\n  const value = useMemo<LiquidGlassLayerContextValue>(\n    () => ({\n      ...parent,\n      depth: parent.depth + 1,\n      insideGlass: true,\n      variant: variant ?? parent.variant,\n      performanceLevel: performanceLevel ?? parent.performanceLevel,\n      prefersReducedMotion,\n      allowNestedGlass: allowNestedGlass ?? parent.allowNestedGlass,\n    }),\n    [allowNestedGlass, parent, performanceLevel, prefersReducedMotion, variant]\n  );\n\n  return (\n    <LiquidGlassLayerContext.Provider value={value}>\n      {children}\n    </LiquidGlassLayerContext.Provider>\n  );\n}\n\nexport function useLiquidGlassLayer() {\n  return useContext(LiquidGlassLayerContext);\n}\n\nexport { LiquidGlassLayerContext };\n", "\"use client\";\n\nimport React, { forwardRef, useImperativeHandle, useRef } from \"react\";\nimport {\n  useLiquidGlassBackdrop,\n  type LiquidGlassBackdropOptions,\n  type LiquidGlassBackdropSample,\n} from \"../hooks/useLiquidGlassBackdrop\";\n\nexport interface LiquidGlassBackdropSamplerProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n    LiquidGlassBackdropOptions {\n  children?:\n    | React.ReactNode\n    | ((sample: LiquidGlassBackdropSample) => React.ReactNode);\n  onSample?: (sample: LiquidGlassBackdropSample) => void;\n}\n\nexport const LiquidGlassBackdropSampler = forwardRef<HTMLDivElement, LiquidGlassBackdropSamplerProps>(\n  ({ children, onSample, ...options }, ref) => {\n    const localRef = useRef<HTMLDivElement>(null);\n    useImperativeHandle(ref, () => localRef.current as HTMLDivElement);\n    const sample = useLiquidGlassBackdrop(localRef, options);\n\n    React.useEffect(() => {\n      onSample?.(sample);\n    }, [onSample, sample]);\n\n    const renderedChildren = typeof children === \"function\" ? children(sample) : children;\n\n    return (\n      <div\n        ref={localRef}\n        data-liquid-glass-backdrop-sampler=\"true\"\n        data-contrast-hint={sample.contrastHint}\n        data-requires-dimming={sample.requiresDimming ? \"true\" : \"false\"}\n      >\n        {renderedChildren}\n      </div>\n    );\n  }\n);\n\nLiquidGlassBackdropSampler.displayName = \"LiquidGlassBackdropSampler\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\n\nexport type LiquidGlassConcentricShape = \"concentric\" | \"capsule\" | \"rounded-rect\" | \"fixed\";\nexport type LiquidGlassConcentricRadius = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\" | number;\n\nconst radiusMap: Record<Exclude<LiquidGlassConcentricRadius, number>, string> = {\n  sm: \"var(--glass-radius-sm, 6px)\",\n  md: \"var(--glass-radius-md, 8px)\",\n  lg: \"var(--glass-radius-lg, 12px)\",\n  xl: \"var(--glass-radius-xl, 16px)\",\n  \"2xl\": \"var(--glass-radius-2xl, 24px)\",\n  full: \"9999px\",\n};\n\nexport interface LiquidGlassConcentricFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n  radius?: LiquidGlassConcentricRadius;\n  inset?: number;\n  shape?: LiquidGlassConcentricShape;\n  fallbackRadius?: number;\n  asChild?: boolean;\n  children?: React.ReactNode;\n}\n\nexport function getConcentricRadiusValue(\n  radius: LiquidGlassConcentricRadius = \"lg\",\n  inset = 0,\n  shape: LiquidGlassConcentricShape = \"concentric\",\n  fallbackRadius = 12\n) {\n  if (shape === \"capsule\") return \"9999px\";\n  const base = typeof radius === \"number\" ? `${radius}px` : radiusMap[radius] ?? `${fallbackRadius}px`;\n  if (shape === \"fixed\" || inset === 0) return base;\n  if (typeof radius === \"number\") return `${Math.max(radius - inset, 0)}px`;\n  return `max(calc(${base} - ${inset}px), ${fallbackRadius}px)`;\n}\n\nexport const LiquidGlassConcentricFrame = forwardRef<HTMLDivElement, LiquidGlassConcentricFrameProps>(\n  (\n    {\n      radius = \"lg\",\n      inset = 0,\n      shape = \"concentric\",\n      fallbackRadius = 8,\n      asChild = false,\n      children,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const baseRadius = typeof radius === \"number\" ? `${radius}px` : radiusMap[radius] ?? `${fallbackRadius}px`;\n    const computedRadius = getConcentricRadiusValue(radius, inset, shape, fallbackRadius);\n    const cssVars = {\n      \"--liquid-glass-parent-radius\": baseRadius,\n      \"--liquid-glass-frame-inset\": `${inset}px`,\n      \"--liquid-glass-frame-radius\": computedRadius,\n      borderRadius: \"var(--liquid-glass-frame-radius)\",\n    } as React.CSSProperties;\n\n    if (asChild && React.isValidElement(children)) {\n      return React.cloneElement(children as React.ReactElement<any>, {\n        ref,\n        className: cn((children as React.ReactElement<any>).props.className, className),\n        style: { ...cssVars, ...(children as React.ReactElement<any>).props.style, ...style },\n        \"data-liquid-glass-concentric-frame\": shape,\n        ...props,\n      });\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"liquid-glass-concentric-frame\", className)}\n        style={{ ...cssVars, ...style }}\n        data-liquid-glass-concentric-frame={shape}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nLiquidGlassConcentricFrame.displayName = \"LiquidGlassConcentricFrame\";\n", "\"use client\";\n\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport { createGlassStyle } from \"../core/mixins/glassMixins\";\n\nexport type LiquidGlassScrollEdgeSide = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type LiquidGlassScrollEdgeStyle = \"soft\" | \"hard\" | \"none\";\n\nexport interface LiquidGlassScrollEdgeProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  edge?: LiquidGlassScrollEdgeSide;\n  styleMode?: LiquidGlassScrollEdgeStyle;\n  active?: boolean;\n  height?: number | string;\n  targetRef?: React.RefObject<HTMLElement>;\n  observeScroll?: boolean;\n  /**\n   * Renders children inside a relative scroll container and places the edge as\n   * an internal overlay. This prevents the common preview/app misuse where\n   * children were passed to the overlay-only primitive and disappeared.\n   */\n  asContainer?: boolean;\n  /** Class applied to the visual edge when rendering as a container. */\n  edgeClassName?: string;\n  /** Style applied to the visual edge when rendering as a container. */\n  edgeStyle?: React.CSSProperties;\n  /** Additional class for the generated scroll container. */\n  containerClassName?: string;\n  /** Additional style for the generated scroll container. */\n  containerStyle?: React.CSSProperties;\n}\n\nfunction getEdgeActive(target: HTMLElement, edge: LiquidGlassScrollEdgeSide) {\n  if (edge === \"top\") return target.scrollTop > 0;\n  if (edge === \"bottom\")\n    return target.scrollTop + target.clientHeight < target.scrollHeight - 1;\n  if (edge === \"left\") return target.scrollLeft > 0;\n  return target.scrollLeft + target.clientWidth < target.scrollWidth - 1;\n}\n\nexport const LiquidGlassScrollEdge = forwardRef<\n  HTMLDivElement,\n  LiquidGlassScrollEdgeProps\n>(\n  (\n    {\n      edge = \"top\",\n      styleMode = \"soft\",\n      active,\n      height = 32,\n      targetRef,\n      observeScroll = true,\n      asContainer = false,\n      edgeClassName,\n      edgeStyle,\n      containerClassName,\n      containerStyle,\n      children,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const [observedActive, setObservedActive] = useState(false);\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const isVertical = edge === \"top\" || edge === \"bottom\";\n    const size = typeof height === \"number\" ? `${height}px` : height;\n    const isActive = active ?? observedActive;\n    const shouldRenderContainer = asContainer || children !== undefined;\n    const setContainerNode = (node: HTMLDivElement | null) => {\n      containerRef.current = node;\n      if (typeof ref === \"function\") ref(node);\n      else if (ref) {\n        (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n      }\n    };\n\n    useEffect(() => {\n      if (\n        !observeScroll ||\n        typeof window === \"undefined\" ||\n        active !== undefined\n      )\n        return;\n      const target = targetRef?.current ?? containerRef.current;\n      if (!target) return;\n\n      const update = () => setObservedActive(getEdgeActive(target, edge));\n      update();\n      target.addEventListener(\"scroll\", update, { passive: true });\n      window.addEventListener(\"resize\", update, { passive: true });\n      return () => {\n        target.removeEventListener(\"scroll\", update);\n        window.removeEventListener(\"resize\", update);\n      };\n    }, [active, edge, observeScroll, targetRef]);\n\n    if (styleMode === \"none\" && !shouldRenderContainer) return null;\n\n    const edgePosition: React.CSSProperties =\n      edge === \"top\"\n        ? { top: 0, left: 0, right: 0, height: size }\n        : edge === \"bottom\"\n          ? { bottom: 0, left: 0, right: 0, height: size }\n          : edge === \"left\"\n            ? { left: 0, top: 0, bottom: 0, width: size }\n            : { right: 0, top: 0, bottom: 0, width: size };\n\n    const gradientDirection =\n      edge === \"top\"\n        ? \"to bottom\"\n        : edge === \"bottom\"\n          ? \"to top\"\n          : edge === \"left\"\n            ? \"to right\"\n            : \"to left\";\n    const glassEdgeStyle = createGlassStyle({\n      elevation: styleMode === \"hard\" ? \"level3\" : \"level2\",\n      tier: styleMode === \"hard\" ? \"high\" : \"medium\",\n    });\n\n    const renderEdge = (edgeRef?: React.ForwardedRef<HTMLDivElement>) => (\n      <div\n        ref={edgeRef}\n        aria-hidden=\"true\"\n        className={cn(\n          \"liquid-glass-scroll-edge glass-pointer-events-none glass-absolute glass-z-20\",\n          isActive ? \"glass-opacity-100\" : \"glass-opacity-0\",\n          shouldRenderContainer ? edgeClassName : className\n        )}\n        style={\n          {\n            ...glassEdgeStyle,\n            ...edgePosition,\n            \"--liquid-glass-scroll-edge-size\": size,\n            \"--liquid-glass-scroll-edge-active\": isActive ? 1 : 0,\n            background:\n              styleMode === \"hard\"\n                ? \"var(--liquid-glass-scroll-edge-hard-background, rgba(255,255,255,0.18))\"\n                : `linear-gradient(${gradientDirection}, var(--liquid-glass-scroll-edge-soft-background, rgba(255,255,255,0.2)), transparent)`,\n            transition:\n              \"opacity var(--liquid-glass-scroll-edge-transition, 160ms ease)\",\n            ...(shouldRenderContainer ? edgeStyle : style),\n          } as React.CSSProperties\n        }\n        data-liquid-glass-scroll-edge={edge}\n        data-liquid-glass-scroll-edge-style={styleMode}\n        data-active={isActive ? \"true\" : \"false\"}\n        {...(!shouldRenderContainer ? props : {})}\n      />\n    );\n\n    if (!shouldRenderContainer) {\n      return renderEdge(ref);\n    }\n\n    if (styleMode === \"none\") {\n      return (\n        <div\n          ref={setContainerNode}\n          className={cn(\n            \"liquid-glass-scroll-edge-container glass-relative glass-overflow-hidden\",\n            className,\n            containerClassName\n          )}\n          style={{ ...style, ...containerStyle }}\n          {...props}\n        >\n          {children}\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={setContainerNode}\n        className={cn(\n          \"liquid-glass-scroll-edge-container glass-relative glass-overflow-hidden\",\n          isVertical ? \"glass-overflow-y-auto\" : \"glass-overflow-x-auto\",\n          className,\n          containerClassName\n        )}\n        style={{ ...style, ...containerStyle }}\n        data-liquid-glass-scroll-edge-container={edge}\n        {...props}\n      >\n        {children}\n        {renderEdge()}\n      </div>\n    );\n  }\n);\n\nLiquidGlassScrollEdge.displayName = \"LiquidGlassScrollEdge\";\n", "\"use client\";\n\nimport React, { createContext, forwardRef, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../lib/utilsComprehensive\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\n\nexport interface LiquidGlassTransitionRegistration {\n  id: string;\n  rect: DOMRect | null;\n}\n\nexport interface LiquidGlassTransitionContextValue {\n  activeId: string | null;\n  registerSource: (id: string, element: HTMLElement | null) => void;\n  registerDestination: (id: string, element: HTMLElement | null) => void;\n  start: (id: string) => void;\n  end: () => void;\n  getSource: (id: string) => DOMRect | null;\n  getDestination: (id: string) => DOMRect | null;\n  reducedMotion: boolean;\n}\n\nconst LiquidGlassTransitionContext = createContext<LiquidGlassTransitionContextValue | null>(null);\n\nexport interface LiquidGlassTransitionProviderProps {\n  children: React.ReactNode;\n  namespace?: string;\n  disabled?: boolean;\n  duration?: number;\n}\n\nexport function LiquidGlassTransitionProvider({\n  children,\n  disabled = false,\n}: LiquidGlassTransitionProviderProps) {\n  const [activeId, setActiveId] = useState<string | null>(null);\n  const sources = useRef(new Map<string, HTMLElement>());\n  const destinations = useRef(new Map<string, HTMLElement>());\n  const reducedMotion = useReducedMotion();\n\n  const registerSource = useCallback((id: string, element: HTMLElement | null) => {\n    if (element) sources.current.set(id, element);\n    else sources.current.delete(id);\n  }, []);\n\n  const registerDestination = useCallback((id: string, element: HTMLElement | null) => {\n    if (element) destinations.current.set(id, element);\n    else destinations.current.delete(id);\n  }, []);\n\n  const value = useMemo<LiquidGlassTransitionContextValue>(\n    () => ({\n      activeId,\n      registerSource,\n      registerDestination,\n      start: (id) => !disabled && setActiveId(id),\n      end: () => setActiveId(null),\n      getSource: (id) => sources.current.get(id)?.getBoundingClientRect() ?? null,\n      getDestination: (id) => destinations.current.get(id)?.getBoundingClientRect() ?? null,\n      reducedMotion: reducedMotion || disabled,\n    }),\n    [activeId, disabled, reducedMotion, registerDestination, registerSource]\n  );\n\n  return (\n    <LiquidGlassTransitionContext.Provider value={value}>\n      {children}\n    </LiquidGlassTransitionContext.Provider>\n  );\n}\n\nexport interface LiquidGlassSourceProps extends React.HTMLAttributes<HTMLDivElement> {\n  id: string;\n  asChild?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const LiquidGlassSource = forwardRef<HTMLDivElement, LiquidGlassSourceProps>(\n  ({ id, asChild = false, children, className, onClick, ...props }, ref) => {\n    const context = useLiquidGlassTransition();\n    const localRef = useRef<HTMLElement | null>(null);\n    const setRef = useCallback(\n      (node: HTMLElement | null) => {\n        localRef.current = node;\n        context?.registerSource(id, node);\n        if (typeof ref === \"function\") ref(node as HTMLDivElement | null);\n        else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node as HTMLDivElement | null;\n      },\n      [context, id, ref]\n    );\n\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      context?.start(id);\n      onClick?.(event);\n    };\n\n    if (asChild && React.isValidElement(children)) {\n      return React.cloneElement(children as React.ReactElement<any>, {\n        ref: setRef,\n        onClick: handleClick,\n        \"data-liquid-glass-transition-source\": id,\n      });\n    }\n\n    return (\n      <div\n        ref={setRef}\n        className={cn(\"liquid-glass-transition-source\", className)}\n        onClick={handleClick}\n        data-liquid-glass-transition-source={id}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nLiquidGlassSource.displayName = \"LiquidGlassSource\";\n\nexport interface LiquidGlassDestinationProps extends React.HTMLAttributes<HTMLDivElement> {\n  id: string;\n  open?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const LiquidGlassDestination = forwardRef<HTMLDivElement, LiquidGlassDestinationProps>(\n  ({ id, open = true, children, className, style, ...props }, ref) => {\n    const context = useLiquidGlassTransition();\n    const setRef = useCallback(\n      (node: HTMLDivElement | null) => {\n        context?.registerDestination(id, node);\n        if (typeof ref === \"function\") ref(node);\n        else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n      },\n      [context, id, ref]\n    );\n\n    const isActive = context?.activeId === id;\n    const sourceRect = context?.getSource(id);\n    const transformOrigin = sourceRect ? `${sourceRect.left + sourceRect.width / 2}px ${sourceRect.top + sourceRect.height / 2}px` : undefined;\n\n    if (!open) return null;\n\n    return (\n      <div\n        ref={setRef}\n        className={cn(\n          \"liquid-glass-transition-destination\",\n          isActive && \"liquid-glass-transition-active\",\n          context?.reducedMotion && \"liquid-glass-transition-reduced-motion\",\n          className\n        )}\n        style={{\n          transformOrigin,\n          transition: context?.reducedMotion\n            ? \"opacity 1ms linear\"\n            : \"transform var(--liquid-glass-source-transition-duration, 220ms) var(--liquid-glass-source-transition-easing, cubic-bezier(.2,.8,.2,1)), opacity 160ms ease\",\n          ...style,\n        }}\n        data-liquid-glass-transition-destination={id}\n        data-liquid-glass-transition-active={isActive ? \"true\" : \"false\"}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nLiquidGlassDestination.displayName = \"LiquidGlassDestination\";\n\nexport function useLiquidGlassTransition() {\n  return useContext(LiquidGlassTransitionContext);\n}\n", "/**\n * Glass Localization Provider Component\n *\n * A Glass-styled wrapper for date localization that replaces the MUI LocalizationProvider\n * to maintain consistent Glass UI styling while providing date formatting capabilities.\n */\n\nimport React, { ReactNode, createContext, useContext } from \"react\";\nimport { format, parse, isValid, addDays, addMonths, addYears } from \"date-fns\";\n\n// Define the shape of our adapter context\nexport interface DateAdapter {\n  format: (date: Date | null, formatString: string) => string;\n  parse: (value: string, formatString: string) => Date | null;\n  isValid: (date: unknown) => boolean;\n  addDays: (date: Date, amount: number) => Date;\n  addMonths: (date: Date, amount: number) => Date;\n  addYears: (date: Date, amount: number) => Date;\n}\n\n// Create a context for our date adapter\nconst DateAdapterContext = createContext<DateAdapter | null>(null);\n\n// Hook to use the date adapter\nexport const useDateAdapter = () => {\n  const adapter = useContext(DateAdapterContext);\n  if (!adapter) {\n    throw new Error(\n      \"useDateAdapter must be used within a GlassLocalizationProvider\"\n    );\n  }\n  return adapter;\n};\n\nexport interface GlassLocalizationProviderProps {\n  /** Date adapter to use (defaults to DateFns) */\n  dateAdapter?: \"date-fns\";\n  /** Children to render */\n  children: ReactNode;\n}\n\n/**\n * Glass Localization Provider\n * Provides date formatting and manipulation utilities for Glass components\n */\nexport const GlassLocalizationProvider: React.FC<\n  GlassLocalizationProviderProps\n> = ({ dateAdapter = \"date-fns\", children }) => {\n  // Create our adapter based on date-fns\n  // This can be extended to support other adapters in the future if needed\n  const adapter: DateAdapter = {\n    format: (date, formatString) => (date ? format(date, formatString) : \"\"),\n    parse: (value, formatString) => {\n      try {\n        const parsedDate = parse(value, formatString, new Date());\n        return isValid(parsedDate) ? parsedDate : null;\n      } catch (error) {\n        return null;\n      }\n    },\n    isValid,\n    addDays,\n    addMonths,\n    addYears,\n  };\n\n  return (\n    <DateAdapterContext.Provider value={adapter}>\n      {children}\n    </DateAdapterContext.Provider>\n  );\n};\n\nexport default GlassLocalizationProvider;\n", "import React from 'react';\nimport { createContext, useContext } from 'react';\n\n// Glass context type\nexport interface GlassContextType {\n  /**\n   * Whether reduced effects should be used\n   */\n  reducedEffects: boolean | 'minimal';\n\n  /**\n   * Whether to use hardware acceleration\n   */\n  useHardwareAcceleration: boolean;\n\n  /**\n   * The quality tier for glass effects\n   */\n  qualityTier: 'ultra' | 'high' | 'medium' | 'low' | 'minimal';\n\n  /**\n   * Whether dark mode is active\n   */\n  isDarkMode: boolean;\n\n  /**\n   * The current theme variant\n   */\n  themeVariant: string;\n\n  /**\n   * Get a color value from the theme\n   */\n  getColor: (path: string, fallback?: string) => string;\n}\n\n// Default glass context\nconst defaultGlassContext: GlassContextType = {\n  reducedEffects: false,\n  useHardwareAcceleration: true,\n  qualityTier: 'high',\n  isDarkMode: false,\n  themeVariant: 'default',\n  getColor: () => '',\n};\n\n// Create the glass context\nexport const GlassContext = createContext<GlassContextType>(defaultGlassContext);\n\n/**\n * Hook to use the glass context\n */\nexport const useGlass = () => {\n  return useContext(GlassContext);\n};\n\nexport default GlassContext;\n", "// token-lint-ignore-file: ThemeProvider composes low-level tokens and may use raw values internally.\n\"use client\";\n\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useEffect,\n  useMemo,\n  ReactNode,\n  useRef,\n  useCallback,\n  useId,\n} from \"react\";\n\n// import { css, createGlobalStyle } from 'styled-components'; // Unused imports\n// Simple deep merge utility\ntype UnknownRecord = Record<string, unknown>;\ntype GlassQualityTier = \"ultra\" | \"high\" | \"medium\" | \"low\" | \"minimal\";\ntype UserPreferences = {\n  reducedMotion: boolean;\n  reducedTransparency: boolean;\n  highContrastMode: boolean;\n};\ntype PendingThemeUpdates = {\n  colorMode?: ColorMode;\n};\ntype GlassSurfaceComponentType = React.FC<\n  GlassSurfaceProps & { children?: React.ReactNode }\n>;\n\nconst isRecord = (value: unknown): value is UnknownRecord =>\n  Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst isGlassQualityTier = (value: string): value is GlassQualityTier =>\n  ([\"ultra\", \"high\", \"medium\", \"low\", \"minimal\"] as const).includes(\n    value as GlassQualityTier\n  );\n\nconst isBlurStrength = (\n  value: string\n): value is (typeof BLUR_STRENGTHS)[number] =>\n  BLUR_STRENGTHS.includes(value as (typeof BLUR_STRENGTHS)[number]);\n\nconst parseStoredPreferences = (value: string): Partial<UserPreferences> => {\n  const parsed: unknown = JSON.parse(value);\n  if (!isRecord(parsed)) return {};\n\n  return {\n    ...(typeof parsed.reducedMotion === \"boolean\"\n      ? { reducedMotion: parsed.reducedMotion }\n      : {}),\n    ...(typeof parsed.reducedTransparency === \"boolean\"\n      ? { reducedTransparency: parsed.reducedTransparency }\n      : {}),\n    ...(typeof parsed.highContrastMode === \"boolean\"\n      ? { highContrastMode: parsed.highContrastMode }\n      : {}),\n  };\n};\n\nconst deepmerge = (\n  target: UnknownRecord,\n  source: UnknownRecord\n): UnknownRecord => {\n  const result = { ...target };\n  Object.keys(source).forEach((key) => {\n    const sourceValue = source[key];\n    const targetValue = result[key];\n    if (isRecord(sourceValue)) {\n      result[key] = deepmerge(\n        isRecord(targetValue) ? targetValue : {},\n        sourceValue\n      );\n    } else {\n      result[key] = sourceValue;\n    }\n  });\n  return result;\n};\n\n// import { GlassTheme } from '../core/theme'; // Removed, theme type is handled internally\n// import type { ThemeContext as _ThemeContextType} from '../core/themeUtils'; // Not exported\nimport type {\n  ColorMode,\n  ThemeVariant as _ThemeVariant,\n  Theme as _Theme,\n  GlassSurfaceProps,\n} from \"../core/types\";\n\nimport {\n  THEME_NAMES as _THEME_NAMES,\n  THEME_VARIANTS as _THEME_VARIANTS,\n  GLASS_QUALITY_TIERS as _GLASS_QUALITY_TIERS,\n  BLUR_STRENGTHS,\n  GLOW_INTENSITIES,\n} from \"./themeConstants\";\nimport { AURA_GLASS } from \"../tokens/glass\";\nimport {\n  DEFAULT_PERSONA_ID,\n  DESIGN_MATRIX,\n  PERSONA_LIST,\n  type PersonaConfig,\n  type PersonaId,\n} from \"./designMatrix\";\nimport {\n  getSafeDocument,\n  getSafeWindow,\n  isBrowser,\n  safeMatchMedia,\n} from \"../utils/env\";\n\nconst PERSONA_STORAGE_KEY = \"glass-ui-persona-id\";\n\nconst isPersonaId = (value: string): value is PersonaId =>\n  Object.prototype.hasOwnProperty.call(DESIGN_MATRIX, value);\n\nconst LEGACY_THEME_VARIANT_TO_PERSONA: Record<string, PersonaId | null> = {\n  default: DEFAULT_PERSONA_ID,\n  compact: \"midnight-meridian\",\n  expanded: null,\n};\n\nconst resolveLegacyPersona = (\n  variant: string | undefined\n): PersonaId | null => {\n  if (!variant) return null;\n  const normalized = variant.toLowerCase();\n  return LEGACY_THEME_VARIANT_TO_PERSONA[normalized] || null;\n};\n\nconst getValueByPath = (root: unknown, path: string[]): unknown => {\n  return path.reduce<unknown>((value, key) => {\n    if (value && typeof value === \"object\" && key in value) {\n      return (value as Record<string, unknown>)[key];\n    }\n    return undefined;\n  }, root);\n};\n\n// ------ ColorMode Context ------\ninterface ColorModeContextType {\n  colorMode: ColorMode;\n  setColorMode: (mode: ColorMode) => void;\n  isDarkMode: boolean;\n  toggleColorMode: () => void;\n  systemPrefersDark: boolean;\n}\n\nconst ColorModeContext = createContext<ColorModeContextType>({\n  colorMode: \"system\",\n  setColorMode: () => undefined,\n  isDarkMode: false,\n  toggleColorMode: () => undefined,\n  systemPrefersDark: false,\n});\n\n// ------ ThemeVariant Context ------\ninterface ThemeVariantContextType {\n  themeVariant: string;\n  setThemeVariant: (variant: string) => void;\n  availableThemes: string[];\n}\n\nconst ThemeVariantContext = createContext<ThemeVariantContextType>({\n  themeVariant: _THEME_VARIANTS[0] || \"default\",\n  setThemeVariant: () => undefined,\n  availableThemes: [..._THEME_VARIANTS],\n});\n\n// ------ Persona Context ------\nexport interface PersonaContextType {\n  personaId: PersonaId;\n  persona: PersonaConfig;\n  setPersona: (persona: PersonaId) => void;\n  personas: PersonaConfig[];\n}\n\nconst PersonaContext = createContext<PersonaContextType>({\n  personaId: DEFAULT_PERSONA_ID,\n  persona: DESIGN_MATRIX[DEFAULT_PERSONA_ID],\n  setPersona: () => undefined,\n  personas: PERSONA_LIST,\n});\n\n// ------ StyleUtils Context ------\ninterface StyleUtilsContextType {\n  getColor: (path: string, fallback?: string) => string;\n  getSpacing: (size: string | number) => string;\n  getShadow: (level: number, color?: string) => string; // Always returns string in implementation\n  getBorderRadius: (size: string) => string;\n  getZIndex: (layer: string) => number;\n  getTypography: (variant: string) => React.CSSProperties;\n}\n\nconst StyleUtilsContext = createContext<StyleUtilsContextType>({\n  getColor: () => \"\",\n  getSpacing: () => \"\",\n  getShadow: () => \"\",\n  getBorderRadius: () => \"\",\n  getZIndex: () => 0,\n  getTypography: () => ({}),\n});\n\n// ------ GlassEffects Context ------\ninterface GlassEffectsContextType {\n  qualityTier: GlassQualityTier;\n  setQualityTier: (tier: GlassQualityTier) => void;\n  getBlurStrength: (strength: string | number) => string;\n  getBackgroundOpacity: (opacity: string | number) => number;\n  getBorderOpacity: (opacity: string | number) => number;\n  getGlowIntensity: (intensity: string | number) => number;\n  createSurface: (props: GlassSurfaceProps) => string;\n  GlassSurface: GlassSurfaceComponentType;\n}\n\nconst GlassEffectsContext = createContext<GlassEffectsContextType>({\n  qualityTier: \"high\",\n  setQualityTier: () => undefined,\n  getBlurStrength: () => \"\",\n  getBackgroundOpacity: () => 0,\n  getBorderOpacity: () => 0,\n  getGlowIntensity: () => 0,\n  createSurface: () => \"\",\n  GlassSurface: () => null,\n});\n\n// ------ Preferences Context ------\ninterface PreferencesContextType {\n  reducedMotion: boolean;\n  reducedTransparency: boolean;\n  highContrastMode: boolean;\n  setPreference: (key: string, value: boolean) => void;\n  getUserPreference: (key: string) => boolean;\n}\n\nconst PreferencesContext = createContext<PreferencesContextType>({\n  reducedMotion: false,\n  reducedTransparency: false,\n  highContrastMode: false,\n  setPreference: () => undefined,\n  getUserPreference: () => false,\n});\n\n// ------ Responsive Context ------\ninterface ResponsiveContextType {\n  breakpoints: Record<string, number>;\n  currentBreakpoint: string;\n  isMobile: boolean;\n  isTablet: boolean;\n  isDesktop: boolean;\n  mediaQuery: (breakpoint: string) => string;\n}\n\nconst ResponsiveContext = createContext<ResponsiveContextType>({\n  breakpoints: {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920,\n  },\n  currentBreakpoint: \"md\",\n  isMobile: false,\n  isTablet: false,\n  isDesktop: true,\n  mediaQuery: () => \"\",\n});\n\n// ------ ThemeProvider Presence Context ------\nconst ThemeProviderPresenceContext = createContext<boolean>(false);\n\nexport const useThemeProviderPresence = () =>\n  useContext(ThemeProviderPresenceContext);\n\n// ------ Unified Theme Provider Props ------\nexport interface ThemeProviderProps {\n  /**\n   * Children to render\n   */\n  children: React.ReactNode;\n\n  /**\n   * Initial color mode\n   */\n  initialColorMode?: ColorMode;\n\n  /**\n   * Initial theme variant\n   */\n  initialTheme?: string;\n\n  /**\n   * Initial persona to hydrate with. Falls back to stored preference or default if absent.\n   */\n  initialPersona?: PersonaId;\n\n  /**\n   * Controlled persona id. When provided, internal state will mirror this value.\n   */\n  persona?: PersonaId;\n\n  /**\n   * Persist persona selection in localStorage. Defaults to true.\n   */\n  persistPersona?: boolean;\n\n  /**\n   * If true, automatically detect system preferences\n   */\n  enableAutoDetection?: boolean;\n\n  /**\n   * If true, respect system color mode preference\n   */\n  respectSystemPreference?: boolean;\n\n  /**\n   * Force specific color mode (overrides other settings)\n   */\n  forceColorMode?: ColorMode;\n\n  /**\n   * If true, disable CSS transitions during theme changes\n   */\n  disableTransitions?: boolean;\n\n  /**\n   * If true, optimize glass effects during scrolling\n   */\n  enableScrollOptimization?: boolean;\n\n  /**\n   * Initial glass quality tier\n   */\n  initialQualityTier?: \"ultra\" | \"high\" | \"medium\" | \"low\" | \"minimal\";\n\n  /**\n   * If true, theme will isolate from parent themes\n   */\n  isolateTheme?: boolean;\n\n  /**\n   * If true, enable performance optimizations\n   */\n  enableOptimizations?: boolean;\n\n  /**\n   * If true, enable additional debug information\n   */\n  debug?: boolean;\n\n  /**\n   * If true, enable performance monitoring\n   */\n  performanceMonitoring?: boolean;\n\n  /**\n   * Throttle time in ms for context updates\n   */\n  contextUpdateThrottle?: number;\n\n  /**\n   * If true, only update on React commit phases\n   */\n  updateOnlyOnCommit?: boolean;\n\n  /**\n   * Callback when color mode changes\n   */\n  onColorModeChange?: (mode: ColorMode) => void;\n\n  /**\n   * Callback when theme variant changes\n   */\n  onThemeChange?: (theme: string) => void;\n\n  /**\n   * Callback when persona changes\n   */\n  onPersonaChange?: (persona: PersonaId) => void;\n}\n\n/**\n * Unified Theme Provider Component\n *\n * Provides a comprehensive theme context for Glass UI components.\n */\nconst UnifiedThemeProvider: React.FC<ThemeProviderProps> = ({\n  children,\n  initialColorMode = \"system\",\n  initialTheme = _THEME_VARIANTS[0] || \"default\",\n  initialPersona = DEFAULT_PERSONA_ID,\n  persona,\n  persistPersona = true,\n  enableAutoDetection = true,\n  respectSystemPreference = true,\n  forceColorMode,\n  disableTransitions = false,\n  enableScrollOptimization = true,\n  initialQualityTier = \"high\",\n  isolateTheme = false,\n  enableOptimizations = true,\n  contextUpdateThrottle = 0,\n  updateOnlyOnCommit = false,\n  onColorModeChange,\n  onThemeChange,\n  onPersonaChange,\n}) => {\n  // ------ Color Mode State ------\n  const themeHostRef = useRef<HTMLDivElement | null>(null);\n\n  const [internalPersonaId, setInternalPersonaId] = useState<PersonaId>(() => {\n    if (persona) {\n      return persona;\n    }\n\n    const legacyMatch = resolveLegacyPersona(initialTheme);\n    if (legacyMatch) {\n      return legacyMatch;\n    }\n\n    return initialPersona;\n  });\n\n  const resolvedPersonaId = persona ?? internalPersonaId;\n\n  const personaConfig = useMemo(() => {\n    const fallback = DESIGN_MATRIX[DEFAULT_PERSONA_ID];\n    return DESIGN_MATRIX[resolvedPersonaId] || fallback;\n  }, [resolvedPersonaId]);\n\n  const setPersona = useCallback(\n    (nextPersona: PersonaId) => {\n      if (!isPersonaId(nextPersona)) {\n        return;\n      }\n\n      const storage = persistPersona ? getSafeWindow()?.localStorage : null;\n\n      if (persona) {\n        if (persistPersona) {\n          storage?.setItem(PERSONA_STORAGE_KEY, nextPersona);\n        }\n        onPersonaChange?.(nextPersona);\n        return;\n      }\n\n      setInternalPersonaId((current) => {\n        if (current === nextPersona) {\n          return current;\n        }\n\n        if (persistPersona) {\n          storage?.setItem(PERSONA_STORAGE_KEY, nextPersona);\n        }\n\n        onPersonaChange?.(nextPersona);\n        return nextPersona;\n      });\n    },\n    [persona, persistPersona, onPersonaChange]\n  );\n\n  useEffect(() => {\n    if (!persona || !persistPersona) return;\n    const storage = getSafeWindow()?.localStorage;\n    storage?.setItem(PERSONA_STORAGE_KEY, persona);\n  }, [persona, persistPersona]);\n\n  const [colorMode, setColorModeState] = useState<ColorMode>(initialColorMode);\n\n  // State for whether the system prefers dark mode\n  const [systemPrefersDark, setSystemPrefersDark] = useState<boolean>(\n    () => safeMatchMedia(\"(prefers-color-scheme: dark)\")?.matches ?? false\n  );\n\n  // ------ Theme Variant State ------\n  const [themeVariant, setThemeVariantState] = useState<string>(initialTheme);\n\n  // ------ Glass Effects State ------\n  const [qualityTier, setQualityTierState] =\n    useState<GlassQualityTier>(initialQualityTier);\n\n  // ------ Preferences State ------\n  const [preferences, setPreferences] = useState<UserPreferences>({\n    reducedMotion: false,\n    reducedTransparency: false,\n    highContrastMode: false,\n  });\n\n  // ------ Responsive State ------\n  const [currentBreakpoint, setCurrentBreakpoint] = useState(\"md\");\n\n  // ------ Performance Tracking ------\n  const pendingUpdates = useRef<PendingThemeUpdates>({});\n  const commitTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n  // ------ Initialize System Preferences ------\n  useEffect(() => {\n    if (!enableAutoDetection || !isBrowser()) return;\n\n    const darkModeMediaQuery = safeMatchMedia(\"(prefers-color-scheme: dark)\");\n    const motionMediaQuery = safeMatchMedia(\"(prefers-reduced-motion: reduce)\");\n\n    const handleDarkModeChange = (event: MediaQueryListEvent) => {\n      setSystemPrefersDark(event.matches);\n    };\n\n    const handleMotionChange = (event: MediaQueryListEvent) => {\n      setPreferences((prev) => ({\n        ...prev,\n        reducedMotion: event.matches,\n      }));\n    };\n\n    if (darkModeMediaQuery) {\n      setSystemPrefersDark(darkModeMediaQuery.matches);\n      darkModeMediaQuery.addEventListener(\"change\", handleDarkModeChange);\n    }\n\n    if (motionMediaQuery) {\n      setPreferences((prev) => ({\n        ...prev,\n        reducedMotion: motionMediaQuery.matches,\n      }));\n      motionMediaQuery.addEventListener(\"change\", handleMotionChange);\n    }\n\n    return () => {\n      if (darkModeMediaQuery) {\n        darkModeMediaQuery.removeEventListener(\"change\", handleDarkModeChange);\n      }\n      if (motionMediaQuery) {\n        motionMediaQuery.removeEventListener(\"change\", handleMotionChange);\n      }\n    };\n  }, [enableAutoDetection]);\n\n  // ------ Load Saved Preferences ------\n  useEffect(() => {\n    if (!isBrowser()) return;\n\n    try {\n      const storage = getSafeWindow()?.localStorage;\n      if (!storage) return;\n\n      const savedColorMode = storage.getItem(\"glass-ui-color-mode\");\n      if (savedColorMode && !forceColorMode) {\n        setColorModeState(savedColorMode as ColorMode);\n      }\n\n      const savedThemeVariant = storage.getItem(\"glass-ui-theme-variant\");\n      if (savedThemeVariant) {\n        setThemeVariantState(savedThemeVariant);\n        if (!persona) {\n          const legacyPersona = resolveLegacyPersona(savedThemeVariant);\n          if (legacyPersona) {\n            setPersona(legacyPersona);\n          }\n        }\n      }\n\n      if (!persona && persistPersona) {\n        const savedPersonaId = storage.getItem(PERSONA_STORAGE_KEY);\n        if (savedPersonaId && isPersonaId(savedPersonaId)) {\n          setPersona(savedPersonaId as PersonaId);\n        }\n      }\n\n      const savedQualityTier = storage.getItem(\"glass-ui-quality-tier\");\n      if (savedQualityTier && isGlassQualityTier(savedQualityTier)) {\n        setQualityTierState(savedQualityTier);\n      }\n\n      const savedPreferences = storage.getItem(\"glass-ui-preferences\");\n      if (savedPreferences) {\n        try {\n          const parsedPreferences = parseStoredPreferences(savedPreferences);\n          setPreferences((prev) => ({ ...prev, ...parsedPreferences }));\n        } catch {\n          setPreferences((prev) => ({ ...prev }));\n        }\n      }\n    } catch {\n      // Ignore invalid or unavailable persisted theme state.\n    }\n  }, [forceColorMode, persona, persistPersona, setPersona]);\n\n  // ------ Initialize Responsive Breakpoints ------\n  useEffect(() => {\n    if (!isBrowser()) return;\n\n    const win = getSafeWindow();\n    if (!win) return;\n\n    const breakpoints = {\n      xs: 0,\n      sm: 600,\n      md: 960,\n      lg: 1280,\n      xl: 1920,\n    };\n\n    const handleResize = () => {\n      const width = win.innerWidth;\n      let newBreakpoint = \"xs\";\n\n      if (width >= breakpoints.xl) {\n        newBreakpoint = \"xl\";\n      } else if (width >= breakpoints.lg) {\n        newBreakpoint = \"lg\";\n      } else if (width >= breakpoints.md) {\n        newBreakpoint = \"md\";\n      } else if (width >= breakpoints.sm) {\n        newBreakpoint = \"sm\";\n      }\n\n      setCurrentBreakpoint(newBreakpoint);\n    };\n\n    win.addEventListener(\"resize\", handleResize);\n    handleResize(); // Initial calculation\n\n    return () => {\n      win.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  // ------ Optimized Update Handlers ------\n\n  // Handle color mode change with throttling\n  const setColorMode = useCallback(\n    (mode: ColorMode) => {\n      if (forceColorMode) return; // Don't change if force mode is active\n\n      const storage = getSafeWindow()?.localStorage;\n\n      if (contextUpdateThrottle > 0) {\n        pendingUpdates.current.colorMode = mode;\n\n        if (!commitTimerRef.current) {\n          commitTimerRef.current = setTimeout(() => {\n            const pendingColorMode = pendingUpdates.current.colorMode;\n            if (pendingColorMode) {\n              setColorModeState(pendingColorMode);\n              onColorModeChange?.(pendingColorMode);\n              storage?.setItem(\"glass-ui-color-mode\", pendingColorMode);\n            }\n            commitTimerRef.current = null;\n          }, contextUpdateThrottle);\n        }\n      } else {\n        setColorModeState(mode);\n        if (onColorModeChange) onColorModeChange(mode);\n        storage?.setItem(\"glass-ui-color-mode\", mode);\n      }\n    },\n    [forceColorMode, contextUpdateThrottle, onColorModeChange]\n  );\n\n  // Toggle between light and dark mode\n  const toggleColorMode = useCallback(() => {\n    if (forceColorMode) return; // Don't toggle if force mode is active\n\n    setColorMode(\n      colorMode === \"light\"\n        ? \"dark\"\n        : colorMode === \"dark\"\n          ? \"light\"\n          : systemPrefersDark\n            ? \"light\"\n            : \"dark\"\n    );\n  }, [colorMode, forceColorMode, systemPrefersDark, setColorMode]);\n\n  // Handle theme variant change\n  const setThemeVariant = useCallback(\n    (variant: string) => {\n      setThemeVariantState(variant);\n      if (onThemeChange) onThemeChange(variant);\n      const storage = getSafeWindow()?.localStorage;\n      storage?.setItem(\"glass-ui-theme-variant\", variant);\n\n      if (!persona) {\n        const mappedPersona = resolveLegacyPersona(variant);\n        if (mappedPersona) {\n          setPersona(mappedPersona);\n        }\n      }\n    },\n    [onThemeChange, persona, setPersona]\n  );\n\n  // Handle quality tier change\n  const setQualityTier = useCallback((tier: GlassQualityTier) => {\n    setQualityTierState(tier);\n    const storage = getSafeWindow()?.localStorage;\n    storage?.setItem(\"glass-ui-quality-tier\", tier);\n  }, []);\n\n  // Handle preference changes\n  const setPreference = useCallback((key: string, value: boolean) => {\n    setPreferences((prev) => {\n      const newPreferences = { ...prev, [key]: value };\n      const storage = getSafeWindow()?.localStorage;\n      storage?.setItem(\"glass-ui-preferences\", JSON.stringify(newPreferences));\n      return newPreferences;\n    });\n  }, []);\n\n  // Get user preference\n  const getUserPreference = useCallback(\n    (key: string) => {\n      return preferences[key as keyof typeof preferences] || false;\n    },\n    [preferences]\n  );\n\n  // ------ Theme Utilities ------\n\n  // Determine if dark mode is active based on all factors\n  const isDarkMode = useMemo(() => {\n    if (forceColorMode) {\n      return forceColorMode === \"dark\";\n    }\n\n    return (\n      colorMode === \"dark\" ||\n      (colorMode === \"system\" && respectSystemPreference && systemPrefersDark)\n    );\n  }, [colorMode, forceColorMode, respectSystemPreference, systemPrefersDark]);\n\n  const resolvedMode = isDarkMode ? \"dark\" : \"light\";\n\n  useEffect(() => {\n    if (isolateTheme) {\n      const host = themeHostRef.current;\n      if (host) {\n        host.setAttribute(\"data-aura-theme\", resolvedPersonaId);\n        host.setAttribute(\"data-aura-mode\", resolvedMode);\n        host.setAttribute(\"data-theme\", resolvedMode);\n        host.classList.toggle(\"dark\", resolvedMode === \"dark\");\n      }\n      return;\n    }\n\n    const doc = getSafeDocument();\n    const el = doc?.documentElement;\n    if (!el) {\n      return;\n    }\n\n    const previousTheme = el.getAttribute(\"data-aura-theme\");\n    const previousMode = el.getAttribute(\"data-aura-mode\");\n    const previousPersona = el.getAttribute(\"data-persona\");\n    const previousDataTheme = el.getAttribute(\"data-theme\");\n    const hadDarkClass = el.classList.contains(\"dark\");\n\n    el.setAttribute(\"data-aura-theme\", resolvedPersonaId);\n    el.setAttribute(\"data-aura-mode\", resolvedMode);\n    el.setAttribute(\"data-theme\", resolvedMode);\n    el.setAttribute(\"data-persona\", resolvedPersonaId);\n    el.classList.toggle(\"dark\", resolvedMode === \"dark\");\n\n    return () => {\n      if (previousTheme) {\n        el.setAttribute(\"data-aura-theme\", previousTheme);\n      } else {\n        el.removeAttribute(\"data-aura-theme\");\n      }\n\n      if (previousMode) {\n        el.setAttribute(\"data-aura-mode\", previousMode);\n      } else {\n        el.removeAttribute(\"data-aura-mode\");\n      }\n\n      if (previousPersona) {\n        el.setAttribute(\"data-persona\", previousPersona);\n      } else {\n        el.removeAttribute(\"data-persona\");\n      }\n\n      if (previousDataTheme) {\n        el.setAttribute(\"data-theme\", previousDataTheme);\n      } else {\n        el.removeAttribute(\"data-theme\");\n      }\n\n      el.classList.toggle(\"dark\", hadDarkClass);\n    };\n  }, [isolateTheme, resolvedPersonaId, resolvedMode]);\n\n  // Create style utility functions\n  const getColor = useCallback(\n    (path: string, fallback = \"\") => {\n      const parts = path.split(\".\");\n      const normalizedParts = parts[0] === \"colors\" ? parts.slice(1) : parts;\n      const personaValue = getValueByPath(\n        personaConfig.colors,\n        normalizedParts\n      );\n\n      if (typeof personaValue === \"string\") {\n        return personaValue;\n      }\n\n      const glassValue =\n        getValueByPath(AURA_GLASS, normalizedParts) ??\n        getValueByPath(AURA_GLASS.surfaces, normalizedParts);\n\n      return typeof glassValue === \"string\" ? (glassValue as string) : fallback;\n    },\n    [personaConfig.colors]\n  );\n\n  // Create glass effect utilities\n  const getBlurStrength = useCallback((strength: string | number) => {\n    if (typeof strength === \"number\") {\n      return `${strength}px`;\n    }\n\n    return isBlurStrength(strength) ? strength : \"standard\";\n  }, []);\n\n  const getBackgroundOpacity = useCallback((opacity: string | number) => {\n    if (typeof opacity === \"number\") {\n      return Math.max(0, Math.min(1, opacity));\n    }\n\n    const opacityMap: Record<string, number> = {\n      transparent: 0,\n      lightest: 0.05,\n      light: 0.1,\n      medium: 0.2,\n      high: 0.5,\n      solid: 1,\n    };\n\n    return opacityMap[opacity] || 0.2;\n  }, []);\n\n  const getBorderOpacity = useCallback((opacity: string | number) => {\n    if (typeof opacity === \"number\") {\n      return Math.max(0, Math.min(1, opacity));\n    }\n\n    const opacityMap: Record<string, number> = {\n      none: 0,\n      minimal: 0.05,\n      subtle: 0.1,\n      medium: 0.2,\n      high: 0.4,\n    };\n\n    return opacityMap[opacity] || 0.2;\n  }, []);\n\n  const getGlowIntensity = useCallback((intensity: string | number) => {\n    if (typeof intensity === \"number\") {\n      return Math.max(0, Math.min(1, intensity));\n    }\n\n    const intensityMap: Record<string, number> = {\n      minimal: 0.02,\n      light: 0.05,\n      medium: 0.1,\n      strong: 0.15,\n      extreme: 0.25,\n    };\n\n    return intensityMap[intensity] || 0.1;\n  }, []);\n\n  // Helper to create glass surface styles\n  const createSurface = useCallback(\n    (props: GlassSurfaceProps) => {\n      const {\n        variant = \"standard\",\n        elevation: rawElevation = 1,\n        interactive = false,\n      } = props;\n\n      // Ensure elevation is a number\n      const elevation: number =\n        typeof rawElevation === \"string\"\n          ? rawElevation === \"level1\"\n            ? 1\n            : rawElevation === \"level2\"\n              ? 2\n              : rawElevation === \"level3\"\n                ? 3\n                : rawElevation === \"level4\"\n                  ? 4\n                  : 1\n          : Number(rawElevation);\n\n      // Get glass-specific color values\n      const backgroundColor = isDarkMode\n        ? \"var(--glass-bg-dark, rgba(0, 0, 0, 0.2))\"\n        : \"var(--glass-bg-light, rgba(255, 255, 255, 0.1))\";\n\n      const borderColor = isDarkMode\n        ? \"var(--glass-border-dark, rgba(255, 255, 255, 0.1))\"\n        : \"var(--glass-border-light, rgba(0, 0, 0, 0.1))\";\n\n      const shadowColor = isDarkMode\n        ? \"var(--glass-shadow-dark, rgba(0, 0, 0, 0.3))\"\n        : \"var(--glass-shadow-light, rgba(0, 0, 0, 0.1))\";\n\n      const glowColor = isDarkMode\n        ? \"var(--glass-glow-dark, hsl(var(--glass-color-primary)))\"\n        : \"var(--glass-glow-light, #6366f1)\";\n\n      // Get opacity and blur values from qualityTier\n      const bgOpacity = getBackgroundOpacity(\"medium\");\n      const borderOpacityValue = getBorderOpacity(\"medium\");\n      const blurValue = getBlurStrength(\"medium\");\n      const glowValue = getGlowIntensity(\"medium\");\n\n      // Build styles based on glass variant\n      const baseStyles = `\n      position: relative;\n      background-color: ${backgroundColor};\n      backdrop-filter: blur(${blurValue});\n      -webkit-backdrop-filter: blur(${blurValue});\n      border: 1px solid ${borderColor};\n      box-shadow: 0 4px 12px ${shadowColor};\n      transition: transform 0.2s ease, box-shadow 0.2s ease;\n    `;\n\n      // Add variant-specific styles\n      let variantStyles = \"\";\n\n      // Variables for all cases\n      let blurNumber: number;\n      let bgOpacityAdjusted: number;\n      let blurAdjusted: number;\n      let dimBgOpacity: number;\n\n      switch (variant) {\n        case \"frosted\":\n          // Parse blur value as number if it's a string\n          blurNumber =\n            typeof blurValue === \"string\"\n              ? parseInt(blurValue.replace(\"px\", \"\"), 10)\n              : Number(blurValue);\n\n          bgOpacityAdjusted = bgOpacity * 0.7;\n          blurAdjusted = blurNumber * 1.5;\n\n          variantStyles = `\n          background-color: rgba(255, 255, 255, ${bgOpacityAdjusted});\n          backdrop-filter: blur(${blurAdjusted}px);\n          -webkit-backdrop-filter: blur(${blurAdjusted}px);\n          border-width: 1px;\n        `;\n          break;\n        case \"crystal\":\n          dimBgOpacity = bgOpacity * 0.6;\n          const dimElev2 = elevation * 2;\n          const dimElev6 = elevation * 6;\n          const dimElev05 = elevation * 0.5;\n          const dimElev1 = elevation * 1;\n\n          variantStyles = `\n          background-color: rgba(255, 255, 255, ${dimBgOpacity});\n          box-shadow: \n            0 ${dimElev2}px ${dimElev6}px ${shadowColor},\n            0 ${dimElev05}px ${dimElev1}px rgba(0, 0, 0, 0.03),\n            inset 0 0 0 1px rgba(255, 255, 255, ${borderOpacityValue});\n          border-width: 0;\n        `;\n          break;\n        case \"metallic\":\n          const accentColor = isDarkMode\n            ? \"hsl(var(--glass-color-primary))\"\n            : \"#6366f1\";\n          const bgOpacityTop = bgOpacity * 0.6;\n          const bgOpacityBottom = bgOpacity * 0.4;\n          const elevationDouble = elevation * 2;\n          const elevationSix = elevation * 6;\n          const elevationFive = elevation * 5;\n\n          variantStyles = `\n          background: linear-gradient(\n            135deg,\n            rgba(255, 255, 255, ${bgOpacityTop}) 0%,\n            rgba(${accentColor}, ${bgOpacityBottom}) 100%\n          );\n          box-shadow: \n            0 ${elevationDouble}px ${elevationSix}px ${shadowColor},\n            0 0 ${elevationFive}px rgba(${accentColor}, ${glowValue});\n        `;\n          break;\n        case \"standard\":\n        default:\n          const stdElev2 = elevation * 2;\n          const stdElev6 = elevation * 6;\n\n          variantStyles = `\n          background-color: rgba(255, 255, 255, ${bgOpacity});\n          box-shadow: \n            0 ${stdElev2}px ${stdElev6}px ${shadowColor},\n            inset 0 0 0 1px rgba(255, 255, 255, ${borderOpacityValue});\n        `;\n          break;\n      }\n\n      // Add interactive states if required\n      const hoverElev3 = elevation * 3;\n      const hoverElev8 = elevation * 8;\n      const hoverElev2 = elevation * 2;\n      const activeElev1 = elevation * 1;\n      const activeElev3 = elevation * 3;\n\n      const interactiveStyles = interactive\n        ? `\n      &:hover {\n        transform: translateY(-2px);\n        box-shadow: \n          0 ${hoverElev3}px ${hoverElev8}px ${shadowColor},\n          0 0 ${hoverElev2}px ${glowColor};\n      }\n      \n      &:active {\n        transform: translateY(0);\n        box-shadow: \n          0 ${activeElev1}px ${activeElev3}px ${shadowColor};\n      }\n    `\n        : \"\";\n\n      return `\n      ${baseStyles}\n      ${variantStyles}\n      ${interactiveStyles}\n    `;\n    },\n    [\n      isDarkMode,\n      getBackgroundOpacity,\n      getBorderOpacity,\n      getBlurStrength,\n      getGlowIntensity,\n    ]\n  );\n\n  /**\n   * GlassSurface Component - A component for rendering glass surfaces with configurable properties\n   */\n  function GlassSurfaceComponent(\n    props: GlassSurfaceProps & { children?: React.ReactNode }\n  ) {\n    const {\n      variant = \"frosted\",\n      elevation = \"level1\",\n      interactive = false,\n      children,\n      ...rest\n    } = props;\n\n    // Generate a unique ID for this surface\n    const uniqueId = useId();\n    const surfaceId = useMemo(\n      () => `glass-surface-${uniqueId.replace(/:/g, \"-\")}`,\n      [uniqueId]\n    );\n\n    // Get the glass styles\n    const cssString = createSurface({\n      variant,\n      elevation,\n      interactive,\n    });\n\n    return (\n      <div id={surfaceId} {...rest}>\n        <style\n          dangerouslySetInnerHTML={{\n            __html: `\n          #${surfaceId} {\n            ${cssString}\n          }\n        `,\n          }}\n        />\n        {children}\n      </div>\n    );\n  }\n\n  // Use the component directly\n  const GlassSurface = GlassSurfaceComponent;\n\n  // ------ Create Responsive Utilities ------\n  const breakpoints = useMemo(() => {\n    return {\n      xs: 0,\n      sm: 600,\n      md: 960,\n      lg: 1280,\n      xl: 1920,\n    };\n  }, []);\n\n  const mediaQuery = useCallback(\n    (breakpoint: string) => {\n      const width = breakpoints[breakpoint as keyof typeof breakpoints] || 0;\n      return `@media (min-width: ${width}px)`;\n    },\n    [breakpoints]\n  );\n\n  const isMobile = useMemo(() => {\n    return [\"xs\", \"sm\"].includes(currentBreakpoint);\n  }, [currentBreakpoint]);\n\n  const isTablet = useMemo(() => {\n    return currentBreakpoint === \"md\";\n  }, [currentBreakpoint]);\n\n  const isDesktop = useMemo(() => {\n    return [\"lg\", \"xl\"].includes(currentBreakpoint);\n  }, [currentBreakpoint]);\n\n  // ------ Create Context Values ------\n\n  // ColorMode context\n  const colorModeContextValue = useMemo(\n    () => ({\n      colorMode: forceColorMode || colorMode,\n      setColorMode,\n      isDarkMode,\n      toggleColorMode,\n      systemPrefersDark,\n    }),\n    [\n      forceColorMode,\n      colorMode,\n      setColorMode,\n      isDarkMode,\n      toggleColorMode,\n      systemPrefersDark,\n    ]\n  );\n\n  // ThemeVariant context\n  const themeVariantContextValue = useMemo(\n    () => ({\n      themeVariant,\n      setThemeVariant,\n      availableThemes: [..._THEME_VARIANTS],\n    }),\n    [themeVariant, setThemeVariant]\n  );\n\n  // Theme utility functions\n  const getSpacing = useCallback(\n    (size: string | number) => {\n      if (typeof size === \"number\") return `${size * 8}px`;\n\n      const key = size.startsWith(\"spacing.\")\n        ? size.replace(\"spacing.\", \"\")\n        : size;\n\n      const personaSpacing = personaConfig.spacing as unknown as Record<\n        string,\n        string\n      >;\n      if (key in personaSpacing) {\n        return personaSpacing[key];\n      }\n\n      const spacingMap = {\n        xs: \"0.25rem\",\n        sm: \"0.5rem\",\n        md: \"1rem\",\n        lg: \"1.5rem\",\n        xl: \"2rem\",\n      } as const;\n\n      return spacingMap[key as keyof typeof spacingMap] || \"0\";\n    },\n    [personaConfig.spacing]\n  );\n\n  const getShadow = useCallback(\n    (level: number, color?: string): string => {\n      if (level <= 0) {\n        return \"none\";\n      }\n\n      if (level === 1 && color) {\n        return `0 1px 2px ${color}`;\n      }\n\n      if (level >= 1) {\n        return personaConfig.colors.shadow.panel;\n      }\n\n      return personaConfig.colors.shadow.panel;\n    },\n    [personaConfig.colors.shadow.panel]\n  );\n\n  const getBorderRadius = useCallback(\n    (size: string) => {\n      const key = size.startsWith(\"radius.\")\n        ? size.replace(\"radius.\", \"\")\n        : size;\n\n      if (key === \"panel\" || key === \"panelRadius\") {\n        return personaConfig.spacing.panelRadius;\n      }\n\n      if (key === \"button\" || key === \"buttonRadius\") {\n        return personaConfig.spacing.buttonRadius;\n      }\n\n      const borderRadiusMap = {\n        none: \"0\",\n        sm: \"0.25rem\",\n        md: \"0.5rem\",\n        lg: \"1rem\",\n      } as const;\n      return borderRadiusMap[key as keyof typeof borderRadiusMap] || \"0\";\n    },\n    [personaConfig.spacing.buttonRadius, personaConfig.spacing.panelRadius]\n  );\n\n  const getZIndex = useCallback((layer: string): number => {\n    const zIndexMap = { base: 0, modal: 1000, tooltip: 1100 };\n    return zIndexMap[layer as keyof typeof zIndexMap] || 0;\n  }, []);\n\n  const getTypography = useCallback(\n    (variant: string) => {\n      const key = variant.startsWith(\"typography.\")\n        ? variant.replace(\"typography.\", \"\")\n        : variant;\n\n      const personaTypography = personaConfig.typography as unknown as Record<\n        string,\n        {\n          weight: number;\n          size: string;\n          letterSpacing: string;\n          lineHeight?: string;\n        }\n      >;\n\n      if (key in personaTypography) {\n        const spec = personaTypography[key];\n        return {\n          fontWeight: spec.weight,\n          fontSize: spec.size,\n          letterSpacing: spec.letterSpacing,\n          ...(spec.lineHeight ? { lineHeight: spec.lineHeight } : {}),\n        };\n      }\n\n      const typographyMap = {\n        h1: { fontSize: \"2.5rem\", fontWeight: 600 },\n        h2: { fontSize: \"2rem\", fontWeight: 600 },\n        h3: { fontSize: \"1.5rem\", fontWeight: 600 },\n        body: { fontSize: \"1rem\", fontWeight: 400 },\n      } as const;\n\n      return typographyMap[key as keyof typeof typographyMap] || {};\n    },\n    [personaConfig.typography]\n  );\n\n  // StyleUtils context\n  const styleUtilsContextValue = useMemo(\n    () => ({\n      getColor,\n      getSpacing,\n      getShadow,\n      getBorderRadius,\n      getZIndex,\n      getTypography,\n    }),\n    [getColor, getSpacing, getShadow, getBorderRadius, getZIndex, getTypography]\n  );\n\n  const personaContextValue = useMemo(\n    () => ({\n      personaId: resolvedPersonaId,\n      persona: personaConfig,\n      setPersona,\n      personas: PERSONA_LIST,\n    }),\n    [personaConfig, resolvedPersonaId, setPersona]\n  );\n\n  // GlassEffects context including the component\n  const glassEffectsContextValue = useMemo(\n    () => ({\n      qualityTier,\n      setQualityTier,\n      getBlurStrength,\n      getBackgroundOpacity,\n      getBorderOpacity,\n      getGlowIntensity,\n      createSurface,\n      GlassSurface,\n    }),\n    [\n      qualityTier,\n      setQualityTier,\n      getBlurStrength,\n      getBackgroundOpacity,\n      getBorderOpacity,\n      getGlowIntensity,\n      createSurface,\n      GlassSurface,\n    ]\n  );\n\n  // Preferences context\n  const preferencesContextValue = useMemo(\n    () => ({\n      reducedMotion: preferences.reducedMotion,\n      reducedTransparency: preferences.reducedTransparency,\n      highContrastMode: preferences.highContrastMode,\n      setPreference,\n      getUserPreference,\n    }),\n    [preferences, setPreference, getUserPreference]\n  );\n\n  // Responsive context\n  const responsiveContextValue = useMemo(\n    () => ({\n      breakpoints,\n      currentBreakpoint,\n      isMobile,\n      isTablet,\n      isDesktop,\n      mediaQuery,\n    }),\n    [breakpoints, currentBreakpoint, isMobile, isTablet, isDesktop, mediaQuery]\n  );\n\n  // Prevent transitions during theme changes\n  useEffect(() => {\n    if (!disableTransitions) {\n      return;\n    }\n\n    const doc = getSafeDocument();\n    if (!doc) {\n      return;\n    }\n\n    doc.documentElement.classList.add(\"disable-transitions\");\n    const timeout = setTimeout(() => {\n      doc.documentElement.classList.remove(\"disable-transitions\");\n    }, 100);\n\n    return () => clearTimeout(timeout);\n  }, [isDarkMode, themeVariant, disableTransitions]);\n\n  // Apply scroll optimization\n  useEffect(() => {\n    if (!enableScrollOptimization || !isBrowser()) {\n      return;\n    }\n    const doc = getSafeDocument();\n    const win = getSafeWindow();\n    if (!doc || !win) {\n      return;\n    }\n    let scrollTimer: ReturnType<typeof setTimeout> | null = null;\n    let isScrolling = false;\n\n    const handleScroll = () => {\n      if (!isScrolling) {\n        isScrolling = true;\n        doc.documentElement.classList.add(\"is-scrolling\");\n      }\n\n      if (scrollTimer) {\n        clearTimeout(scrollTimer);\n      }\n\n      scrollTimer = setTimeout(() => {\n        isScrolling = false;\n        doc.documentElement.classList.remove(\"is-scrolling\");\n      }, 150);\n    };\n\n    win.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n    return () => {\n      win.removeEventListener(\"scroll\", handleScroll);\n      if (scrollTimer) {\n        clearTimeout(scrollTimer);\n      }\n    };\n  }, [enableScrollOptimization]);\n\n  // Render multi-context provider\n  const themedChildren = isolateTheme ? (\n    <div\n      ref={themeHostRef}\n      data-aura-theme={resolvedPersonaId}\n      data-aura-mode={resolvedMode}\n      data-theme={resolvedMode}\n      data-persona={resolvedPersonaId}\n      className={resolvedMode === \"dark\" ? \"dark\" : undefined}\n    >\n      {children}\n    </div>\n  ) : (\n    children\n  );\n\n  return (\n    <ThemeProviderPresenceContext.Provider value={true}>\n      <ColorModeContext.Provider value={colorModeContextValue}>\n        <ThemeVariantContext.Provider value={themeVariantContextValue}>\n          <PersonaContext.Provider value={personaContextValue}>\n            <StyleUtilsContext.Provider value={styleUtilsContextValue}>\n              <GlassEffectsContext.Provider value={glassEffectsContextValue}>\n                <PreferencesContext.Provider value={preferencesContextValue}>\n                  <ResponsiveContext.Provider value={responsiveContextValue}>\n                    {themedChildren}\n                  </ResponsiveContext.Provider>\n                </PreferencesContext.Provider>\n              </GlassEffectsContext.Provider>\n            </StyleUtilsContext.Provider>\n          </PersonaContext.Provider>\n        </ThemeVariantContext.Provider>\n      </ColorModeContext.Provider>\n    </ThemeProviderPresenceContext.Provider>\n  );\n};\n\n/**\n * ThemeProvider component (exporting the unified provider directly for now).\n *\n * This component provides theme context.\n */\nexport const ThemeProvider = UnifiedThemeProvider;\n\n// ------ Theme Hooks ------\n\n/**\n * Returns the full theme object based on current settings.\n */\nexport const useTheme = () => {\n  const colorModeContext = useContext(ColorModeContext);\n  const themeVariantContext = useContext(ThemeVariantContext);\n  const styleUtilsContext = useContext(StyleUtilsContext);\n  const personaContext = useContext(PersonaContext);\n\n  if (\n    !colorModeContext ||\n    !themeVariantContext ||\n    !styleUtilsContext ||\n    !personaContext\n  ) {\n    throw new Error(\"useTheme must be used within a ThemeProvider\");\n  }\n\n  return {\n    isDark: colorModeContext.isDarkMode,\n    currentColorMode: colorModeContext.colorMode,\n    toggleColorMode: colorModeContext.toggleColorMode,\n    setColorMode: colorModeContext.setColorMode,\n    currentTheme: themeVariantContext.themeVariant,\n    setTheme: themeVariantContext.setThemeVariant,\n    availableThemes: themeVariantContext.availableThemes,\n    personaId: personaContext.personaId,\n    setPersona: personaContext.setPersona,\n    persona: personaContext.persona,\n    personas: personaContext.personas,\n    ...styleUtilsContext,\n  };\n};\n\n/**\n * Hook for accessing only color mode aspects of the theme.\n * More efficient than useTheme when only color mode is needed.\n */\nexport const useColorMode = (): ColorModeContextType => {\n  const context = useContext(ColorModeContext);\n\n  if (!context) {\n    throw new Error(\"useColorMode must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * Hook for accessing only theme variant aspects.\n * More efficient than useTheme when only theme variant is needed.\n */\nexport const useThemeVariant = (): ThemeVariantContextType => {\n  const context = useContext(ThemeVariantContext);\n\n  if (!context) {\n    throw new Error(\"useThemeVariant must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\nexport const usePersonaTheme = (): PersonaContextType => {\n  const context = useContext(PersonaContext);\n\n  if (!context) {\n    throw new Error(\"usePersonaTheme must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * Hook for accessing only style utilities.\n */\nexport const useStyleUtils = (): StyleUtilsContextType => {\n  const context = useContext(StyleUtilsContext);\n\n  if (!context) {\n    throw new Error(\"useStyleUtils must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * Hook for accessing only glass effect utilities.\n */\nexport const useGlassEffects = (): GlassEffectsContextType => {\n  const context = useContext(GlassEffectsContext);\n\n  if (!context) {\n    throw new Error(\"useGlassEffects must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * Hook for accessing only preference settings.\n */\nexport const usePreferences = (): PreferencesContextType => {\n  const context = useContext(PreferencesContext);\n\n  if (!context) {\n    throw new Error(\"usePreferences must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * Hook for accessing only responsive context.\n */\nexport const useResponsive = (): ResponsiveContextType => {\n  const context = useContext(ResponsiveContext);\n\n  if (!context) {\n    throw new Error(\"useResponsive must be used within a ThemeProvider\");\n  }\n\n  return context;\n};\n\n/**\n * ThemeObserver hook for subscribing to theme changes without re-rendering.\n */\nexport const useThemeObserver = (\n  callback: (theme: string, isDark: boolean) => void\n) => {\n  const { isDark, currentTheme } = useTheme();\n\n  useEffect(() => {\n    callback(currentTheme, isDark);\n  }, [callback, currentTheme, isDark]);\n};\n\n// Alias for backward compatibility\nexport const GlassThemeProvider = ThemeProvider;\n", "// token-lint-ignore-file: persona design matrix encodes canonical raw color ramps\nimport type { CSSProperties } from \"react\";\n\nexport type PersonaId =\n  | \"midnight-slate\"\n  | \"midnight-meridian\"\n  | \"solar-apex\"\n  | \"violet-nebula\"\n  | \"aurora-noir\"\n  | \"helios-foundry\"\n  | \"glacier-morn\"\n  | \"terra-inflect\"\n  | \"lumen-veil\"\n  | \"nimbus-relay\";\n\nexport interface PersonaColorTokens {\n  background: {\n    canvas: string;\n    surface: string;\n  };\n  text: {\n    primary: string;\n  };\n  accent: {\n    primary: string;\n    secondary: string;\n  };\n  state: {\n    success: string;\n    warning: string;\n    error: string;\n  };\n  shadow: {\n    panel: string;\n  };\n  focus: {\n    ring: string;\n  };\n}\n\nexport interface PersonaTypographyEntry {\n  weight: number;\n  size: string;\n  letterSpacing: string;\n  lineHeight?: string;\n}\n\nexport interface PersonaTypographyScale {\n  display: PersonaTypographyEntry;\n  headline: PersonaTypographyEntry;\n  metric: PersonaTypographyEntry;\n  body: PersonaTypographyEntry;\n  caption: PersonaTypographyEntry;\n}\n\nexport interface PersonaSpacing {\n  baseGrid: string;\n  panelRadius: string;\n  buttonRadius: string;\n  overlayBlur: string;\n  layoutPattern: string;\n}\n\nexport interface PersonaMotionDurations {\n  entry: string;\n  hover: string;\n  focus: string;\n  async: string;\n}\n\nexport interface PersonaMetadata {\n  name: string;\n  id: PersonaId;\n  primaryContext: string;\n  paletteAnchor: string;\n  surfaceSchema: string;\n  typographyScaleDescription: string;\n  motionSignals: string;\n  narrativePillars?: string[];\n  keyTokens?: string[];\n  microinteractionNotes?: string[];\n}\n\nexport interface PersonaConfig {\n  meta: PersonaMetadata;\n  colors: PersonaColorTokens;\n  typography: PersonaTypographyScale;\n  spacing: PersonaSpacing;\n  motion: PersonaMotionDurations;\n  tokens?: Record<string, string | number | CSSProperties>;\n}\n\nexport const DESIGN_MATRIX: Record<PersonaId, PersonaConfig> = {\n  \"midnight-slate\": {\n    meta: {\n      name: \"Midnight Slate\",\n      id: \"midnight-slate\",\n      primaryContext:\n        \"Experimental intelligence workspaces, telemetry-heavy research platforms\",\n      paletteAnchor:\n        \"Deep charcoal / ultraviolet base with cyan ion accents, magenta diagnostics\",\n      surfaceSchema:\n        \"Layered glass panes (20\u201328px rhythm), 10px radius, spectral edge lighting, kinetic glow\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 18/26px, hero 28/34px; cyan accent drives hierarchy\",\n      motionSignals:\n        \"Spectral pulses, cyan focus ring, prefers-reduced-motion fallbacks on glows\",\n      narrativePillars: [\"Experimental\", \"Data-rich\", \"Kinetic\"],\n      keyTokens: [\n        \"Cyan ion accent for CTAs\",\n        \"Magenta diagnostic for anomalies\",\n        \"Slate neutrals for baselines\",\n      ],\n      microinteractionNotes: [\n        \"Ripple pulses on chart hovers\",\n        \"Cyan focus rings on control inputs\",\n        \"Spectral toast elevation for async updates\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#090B1A\",\n        surface: \"rgba(18,20,43,0.72)\",\n      },\n      text: {\n        primary: \"#F2F5FF\",\n      },\n      accent: {\n        primary: \"#4FD6FF\",\n        secondary: \"#B26CFF\",\n      },\n      state: {\n        success: \"#3BE0AA\",\n        warning: \"#F5B94C\",\n        error: \"#FF4D8D\",\n      },\n      shadow: {\n        panel: \"0 24px 60px -30px rgba(79,214,255,0.45)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(79,214,255,0.32)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"28px\",\n        letterSpacing: \"0.5px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"22px\",\n        letterSpacing: \"0.4px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.3px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.2px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0.1px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"24px\",\n      panelRadius: \"10px\",\n      buttonRadius: \"8px\",\n      overlayBlur: \"32px\",\n      layoutPattern:\n        \"Analytics tri-column grid with stacked telemetry sidebars\",\n    },\n    motion: {\n      entry: \"320ms\",\n      hover: \"180ms\",\n      focus: \"140ms\",\n      async: \"360ms\",\n    },\n  },\n  \"midnight-meridian\": {\n    meta: {\n      name: \"Midnight Meridian\",\n      id: \"midnight-meridian\",\n      primaryContext:\n        \"Operational productivity suites, task orchestration dashboards\",\n      paletteAnchor:\n        \"Teal/emerald base with amber highlights, indigo support tones\",\n      surfaceSchema:\n        \"Elevated panels (16\u201324px rhythm), 12px radius, ambient shadows, subtle borders\",\n      typographyScaleDescription:\n        \"Body 14/20px, KPIs 16/24px, hero 24/30px; teal CTA halo\",\n      motionSignals:\n        \"Smooth ease-out motions, teal focus ring, timer pulses mapped to semantic state tokens\",\n      narrativePillars: [\"Productive\", \"Task-focused\", \"Calm confidence\"],\n      keyTokens: [\n        \"Teal primary for progress\",\n        \"Amber secondary for incentives\",\n        \"Indigo depth for shells\",\n      ],\n      microinteractionNotes: [\n        \"Timer sweep animations\",\n        \"Teal halo on selection\",\n        \"Soft scale on productivity widgets\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#081418\",\n        surface: \"rgba(9,21,24,0.68)\",\n      },\n      text: {\n        primary: \"#F3F9F9\",\n      },\n      accent: {\n        primary: \"#34D2B4\",\n        secondary: \"#FDB565\",\n      },\n      state: {\n        success: \"#2CB67D\",\n        warning: \"#FFBE55\",\n        error: \"#FF5A65\",\n      },\n      shadow: {\n        panel: \"0 18px 46px -28px rgba(52,210,180,0.38)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(52,210,180,0.30)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"24px\",\n        letterSpacing: \"0.3px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"20px\",\n        letterSpacing: \"0.2px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.2px\",\n      },\n      body: {\n        weight: 400,\n        size: \"14px\",\n        letterSpacing: \"0.1px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"12px\",\n        letterSpacing: \"0px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"20px\",\n      panelRadius: \"12px\",\n      buttonRadius: \"10px\",\n      overlayBlur: \"24px\",\n      layoutPattern: \"Productivity split pane with task queues + KPI strip\",\n    },\n    motion: {\n      entry: \"280ms\",\n      hover: \"160ms\",\n      focus: \"120ms\",\n      async: \"320ms\",\n    },\n  },\n  \"solar-apex\": {\n    meta: {\n      name: \"Solar Apex\",\n      id: \"solar-apex\",\n      primaryContext:\n        \"Executive control centers, compliance and governance consoles\",\n      paletteAnchor:\n        \"Midnight indigo charcoal with molten solar gradients (amber \u2192 persimmon), auric gold highlights\",\n      surfaceSchema:\n        \"Beveled 12px radii, luminous borders, long warm shadows, prismatic edges\",\n      typographyScaleDescription:\n        \"Body 15/22px, analytics 18/26px, hero 28/34px; auric headline emphasis\",\n      motionSignals:\n        \"Solar flare highlights, warm focus ring, gradient sweeps gated by motion preferences\",\n      narrativePillars: [\n        \"Executive authority\",\n        \"Compliance\",\n        \"Strategic oversight\",\n      ],\n      keyTokens: [\n        \"Auric gold for primary CTAs\",\n        \"Persimmon gradients for alerts\",\n        \"Charcoal neutrals for balance\",\n      ],\n      microinteractionNotes: [\n        \"Radiant sweeps on filters\",\n        \"Warm flare on alert acknowledgements\",\n        \"Prismatic overlay transitions\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#0D1324\",\n        surface: \"rgba(17,23,38,0.70)\",\n      },\n      text: {\n        primary: \"#F9F4EC\",\n      },\n      accent: {\n        primary: \"#FFB545\",\n        secondary: \"#FF784A\",\n      },\n      state: {\n        success: \"#66DA8B\",\n        warning: \"#FF9548\",\n        error: \"#FF4A4A\",\n      },\n      shadow: {\n        panel: \"0 28px 64px -32px rgba(255,181,69,0.42)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(255,181,69,0.35)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"28px\",\n        letterSpacing: \"0.4px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"22px\",\n        letterSpacing: \"0.3px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.3px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.1px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0.05px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"22px\",\n      panelRadius: \"12px\",\n      buttonRadius: \"10px\",\n      overlayBlur: \"28px\",\n      layoutPattern: \"Executive dashboard with 12-column oversight grid\",\n    },\n    motion: {\n      entry: \"340ms\",\n      hover: \"200ms\",\n      focus: \"150ms\",\n      async: \"360ms\",\n    },\n  },\n  \"violet-nebula\": {\n    meta: {\n      name: \"Violet Nebula\",\n      id: \"violet-nebula\",\n      primaryContext:\n        \"Strategic foresight tooling, model governance and scenario planning\",\n      paletteAnchor:\n        \"Nebula violet base, electric fuchsia highlights, silver neutrals\",\n      surfaceSchema:\n        \"High-polish glass slabs (24\u201332px rhythm), 16px radius, holographic edge traces\",\n      typographyScaleDescription:\n        \"Body 16/24px, strategy cards 20/28px, hero 32/40px; silver typographic anchors\",\n      motionSignals:\n        \"Holographic shimmer loops (1200ms), depth parallax on hero panels, cyan-fuchsia focus gradient\",\n      narrativePillars: [\"Futurist\", \"Predictive\", \"Multidimensional\"],\n      keyTokens: [\n        \"Nebula violet canvas\",\n        \"Electric fuchsia highlights\",\n        \"Silver typography anchors\",\n      ],\n      microinteractionNotes: [\n        \"Holographic shimmer on hover\",\n        \"Depth parallax on cards\",\n        \"Cyan-fuchsia focus gradients with reduced-motion fades\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#08091C\",\n        surface: \"rgba(16,18,44,0.68)\",\n      },\n      text: {\n        primary: \"#F5F3FF\",\n      },\n      accent: {\n        primary: \"#C06CFF\",\n        secondary: \"#7AEFFF\",\n      },\n      state: {\n        success: \"#62F5BF\",\n        warning: \"#FFD470\",\n        error: \"#FF5FB7\",\n      },\n      shadow: {\n        panel: \"0 30px 70px -34px rgba(192,108,255,0.45)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(192,108,255,0.35)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"32px\",\n        letterSpacing: \"0.6px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"24px\",\n        letterSpacing: \"0.5px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"20px\",\n        letterSpacing: \"0.4px\",\n      },\n      body: {\n        weight: 400,\n        size: \"16px\",\n        letterSpacing: \"0.2px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"14px\",\n        letterSpacing: \"0.1px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"24px\",\n      panelRadius: \"16px\",\n      buttonRadius: \"12px\",\n      overlayBlur: \"36px\",\n      layoutPattern: \"Scenario canvas with 4-column narrative cards\",\n    },\n    motion: {\n      entry: \"360ms\",\n      hover: \"220ms\",\n      focus: \"180ms\",\n      async: \"380ms\",\n    },\n  },\n  \"aurora-noir\": {\n    meta: {\n      name: \"Aurora Noir\",\n      id: \"aurora-noir\",\n      primaryContext:\n        \"Observability networks, mission-critical operations command\",\n      paletteAnchor:\n        \"Midnight navy foundation with aurora green ribbons and cobalt glows\",\n      surfaceSchema:\n        \"Layered glass struts (22\u201330px rhythm), 12px radius, polar sheen overlays, dynamic depth fog\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 17/24px, hero 26/32px; luminous aqua headlines\",\n      motionSignals:\n        \"Aurora sweep gradients (2400ms), telemetry ripple feedback, emerald focus corona\",\n      narrativePillars: [\n        \"Mission control\",\n        \"Atmospheric\",\n        \"Real-time observability\",\n      ],\n      keyTokens: [\n        \"Aurora greens and cobalt glows\",\n        \"Timeline rails and status grids\",\n        \"Telemetry overlays\",\n      ],\n      microinteractionNotes: [\n        \"Aurora trail follows cursor\",\n        \"Ripple telemetry on data updates\",\n        \"Emerald focus corona\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#0A1026\",\n        surface: \"rgba(10,16,38,0.70)\",\n      },\n      text: {\n        primary: \"#E9FBFF\",\n      },\n      accent: {\n        primary: \"#3EF2A1\",\n        secondary: \"#6F7CFF\",\n      },\n      state: {\n        success: \"#38E8AE\",\n        warning: \"#FFE27A\",\n        error: \"#FF6F8C\",\n      },\n      shadow: {\n        panel: \"0 26px 62px -28px rgba(62,242,161,0.38)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(62,242,161,0.30)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"26px\",\n        letterSpacing: \"0.4px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"21px\",\n        letterSpacing: \"0.3px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.3px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.1px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0.05px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"22px\",\n      panelRadius: \"12px\",\n      buttonRadius: \"10px\",\n      overlayBlur: \"30px\",\n      layoutPattern: \"Mission command board with timeline rail\",\n    },\n    motion: {\n      entry: \"300ms\",\n      hover: \"190ms\",\n      focus: \"150ms\",\n      async: \"340ms\",\n    },\n  },\n  \"helios-foundry\": {\n    meta: {\n      name: \"Helios Foundry\",\n      id: \"helios-foundry\",\n      primaryContext:\n        \"Industrial automation platforms, robotics coordination suites\",\n      paletteAnchor:\n        \"Graphite slate with molten copper cores and brass highlights\",\n      surfaceSchema:\n        \"Structured pane grid (24\u201328px rhythm), 12px chamfer, brushed metal borders, volumetric glow\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 18/26px, hero 30/36px; copper-accented numerals\",\n      motionSignals:\n        \"Mechanized slide-ins (220ms), gear pulse focus ring, thermal status flares on alerts\",\n      narrativePillars: [\n        \"Industrial precision\",\n        \"Mechanical warmth\",\n        \"Operational reliability\",\n      ],\n      keyTokens: [\n        \"Molten copper primary\",\n        \"Brass secondary\",\n        \"Graphite foundations\",\n      ],\n      microinteractionNotes: [\n        \"Gear pulse feedback on controls\",\n        \"Thermal glow escalation on alerts\",\n        \"Mechanized slide-ins for panels\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#10141F\",\n        surface: \"rgba(16,20,31,0.74)\",\n      },\n      text: {\n        primary: \"#FFF3E4\",\n      },\n      accent: {\n        primary: \"#FF8450\",\n        secondary: \"#F0C85A\",\n      },\n      state: {\n        success: \"#6BDD8D\",\n        warning: \"#FFC15A\",\n        error: \"#FF5A3C\",\n      },\n      shadow: {\n        panel: \"0 30px 66px -30px rgba(255,132,80,0.44)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(255,132,80,0.32)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"30px\",\n        letterSpacing: \"0.35px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"22px\",\n        letterSpacing: \"0.25px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"19px\",\n        letterSpacing: \"0.25px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.1px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"24px\",\n      panelRadius: \"12px\",\n      buttonRadius: \"10px\",\n      overlayBlur: \"28px\",\n      layoutPattern: \"Industrial twin layout with control sidebar\",\n    },\n    motion: {\n      entry: \"260ms\",\n      hover: \"150ms\",\n      focus: \"130ms\",\n      async: \"320ms\",\n    },\n  },\n  \"glacier-morn\": {\n    meta: {\n      name: \"Glacier Morn\",\n      id: \"glacier-morn\",\n      primaryContext:\n        \"Clinical oversight systems, healthcare compliance dashboards\",\n      paletteAnchor:\n        \"Deep arctic blue with icy cyan accents and pearl neutrals\",\n      surfaceSchema:\n        \"Frosted glass planes (18\u201324px rhythm), 10px radius, clinical translucency, low-noise shadows\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 18/26px, hero 28/34px; icy teal emphasis\",\n      motionSignals:\n        \"Measured fades (200ms), heartbeat diagnostics glow, sterile focus outline\",\n      narrativePillars: [\"Clinical trust\", \"Clarity\", \"Calm assurance\"],\n      keyTokens: [\"Icy cyan primaries\", \"Pearl neutrals\", \"Soft navy shadows\"],\n      microinteractionNotes: [\n        \"Heartbeat pulses on vitals\",\n        \"Sterile glow on input focus\",\n        \"Gentle fades on tab transitions\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#071220\",\n        surface: \"rgba(9,20,36,0.72)\",\n      },\n      text: {\n        primary: \"#F0FAFF\",\n      },\n      accent: {\n        primary: \"#5BE1FF\",\n        secondary: \"#8AA8FF\",\n      },\n      state: {\n        success: \"#63E2C6\",\n        warning: \"#FFE08B\",\n        error: \"#FF6B7D\",\n      },\n      shadow: {\n        panel: \"0 26px 60px -30px rgba(91,225,255,0.40)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(91,225,255,0.32)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"26px\",\n        letterSpacing: \"0.45px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"21px\",\n        letterSpacing: \"0.35px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.3px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.15px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0.05px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"20px\",\n      panelRadius: \"10px\",\n      buttonRadius: \"8px\",\n      overlayBlur: \"26px\",\n      layoutPattern: \"Clinical checklist layout with metrics spine\",\n    },\n    motion: {\n      entry: \"300ms\",\n      hover: \"170ms\",\n      focus: \"140ms\",\n      async: \"340ms\",\n    },\n  },\n  \"terra-inflect\": {\n    meta: {\n      name: \"Terra Inflect\",\n      id: \"terra-inflect\",\n      primaryContext: \"Cyber defense war rooms, incident response workflows\",\n      paletteAnchor:\n        \"Obsidian base with volcanic ember gradients and hazard amber highlights\",\n      surfaceSchema:\n        \"Faceted panels (20\u201328px rhythm), 8px radius, ember-edge outlines, reinforced borders\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 18/26px, hero 26/32px; ember-streak callouts\",\n      motionSignals:\n        \"Escalation pulses (160ms), perimeter scan sweeps, ember-lit focus ring\",\n      narrativePillars: [\n        \"Tactical readiness\",\n        \"Threat response\",\n        \"Resilient operations\",\n      ],\n      keyTokens: [\n        \"Volcanic ember primaries\",\n        \"Hazard amber warnings\",\n        \"Obsidian backgrounds\",\n      ],\n      microinteractionNotes: [\n        \"Ember flares on escalation\",\n        \"Perimeter sweep focus states\",\n        \"Assertive shake on critical errors\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#120E1A\",\n        surface: \"rgba(24,16,32,0.74)\",\n      },\n      text: {\n        primary: \"#FFEFE6\",\n      },\n      accent: {\n        primary: \"#F8693A\",\n        secondary: \"#FFAE4D\",\n      },\n      state: {\n        success: \"#58D58C\",\n        warning: \"#FF944A\",\n        error: \"#FF5C3C\",\n      },\n      shadow: {\n        panel: \"0 28px 64px -30px rgba(248,105,58,0.42)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(248,105,58,0.34)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"26px\",\n        letterSpacing: \"0.4px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"21px\",\n        letterSpacing: \"0.3px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.25px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.1px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"22px\",\n      panelRadius: \"8px\",\n      buttonRadius: \"6px\",\n      overlayBlur: \"26px\",\n      layoutPattern: \"Incident war room grid with alert stack\",\n    },\n    motion: {\n      entry: \"260ms\",\n      hover: \"150ms\",\n      focus: \"120ms\",\n      async: \"300ms\",\n    },\n  },\n  \"lumen-veil\": {\n    meta: {\n      name: \"Lumen Veil\",\n      id: \"lumen-veil\",\n      primaryContext:\n        \"Creative production suites, experiential storytelling systems\",\n      paletteAnchor:\n        \"Charcoal canvas with lavender halos and rose quartz highlights\",\n      surfaceSchema:\n        \"Soft diffusion panels (24\u201332px rhythm), 14px radius, iridescent film overlays, layered bokeh\",\n      typographyScaleDescription:\n        \"Body 16/24px, metrics 20/28px, hero 32/40px; lavender typographic anchors\",\n      motionSignals:\n        \"Cinematic cross-fades (260ms), parallax tilt on hero frames, gradient focus highlights\",\n      narrativePillars: [\n        \"Expressive storytelling\",\n        \"Immersive creativity\",\n        \"Luminous ambiance\",\n      ],\n      keyTokens: [\n        \"Lavender halos\",\n        \"Rose quartz highlights\",\n        \"Charcoal neutrals\",\n      ],\n      microinteractionNotes: [\n        \"Cinematic cross-fades\",\n        \"Parallax tilt on hero frames\",\n        \"Gradient-focused highlight loops\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#0C0B1C\",\n        surface: \"rgba(14,13,30,0.72)\",\n      },\n      text: {\n        primary: \"#FFF4FB\",\n      },\n      accent: {\n        primary: \"#C79BFF\",\n        secondary: \"#FF7DA9\",\n      },\n      state: {\n        success: \"#74E4C2\",\n        warning: \"#FFD38F\",\n        error: \"#FF6CA8\",\n      },\n      shadow: {\n        panel: \"0 30px 70px -32px rgba(199,155,255,0.45)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(199,155,255,0.32)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"32px\",\n        letterSpacing: \"0.55px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"24px\",\n        letterSpacing: \"0.45px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"20px\",\n        letterSpacing: \"0.35px\",\n      },\n      body: {\n        weight: 400,\n        size: \"16px\",\n        letterSpacing: \"0.2px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"14px\",\n        letterSpacing: \"0.1px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"24px\",\n      panelRadius: \"14px\",\n      buttonRadius: \"12px\",\n      overlayBlur: \"32px\",\n      layoutPattern: \"Storyboard flow with media spotlight strip\",\n    },\n    motion: {\n      entry: \"340ms\",\n      hover: \"210ms\",\n      focus: \"170ms\",\n      async: \"360ms\",\n    },\n  },\n  \"nimbus-relay\": {\n    meta: {\n      name: \"Nimbus Relay\",\n      id: \"nimbus-relay\",\n      primaryContext:\n        \"Real-time collaboration hubs, communications orchestration\",\n      paletteAnchor:\n        \"Midnight indigo with electric sky cyan and sunset coral accents\",\n      surfaceSchema:\n        \"Floating tile stacks (18\u201326px rhythm), 12px radius, airy drop shadows, signal halos\",\n      typographyScaleDescription:\n        \"Body 15/22px, metrics 18/26px, hero 28/34px; sky-kissed headings\",\n      motionSignals:\n        \"Cloud-drift motion (280ms), presence ping animations, dual-tone focus loop\",\n      narrativePillars: [\n        \"Connected collaboration\",\n        \"Adaptive communication\",\n        \"Lightness\",\n      ],\n      keyTokens: [\n        \"Electric sky cyan for engagement\",\n        \"Sunset coral accents\",\n        \"Midnight indigo anchors\",\n      ],\n      microinteractionNotes: [\n        \"Cloud drift animations\",\n        \"Presence pings\",\n        \"Dual-tone focus loop\",\n      ],\n    },\n    colors: {\n      background: {\n        canvas: \"#060B1C\",\n        surface: \"rgba(10,20,46,0.68)\",\n      },\n      text: {\n        primary: \"#F4F8FF\",\n      },\n      accent: {\n        primary: \"#5BD5FF\",\n        secondary: \"#FF9F7C\",\n      },\n      state: {\n        success: \"#3BE0AA\",\n        warning: \"#FFC15A\",\n        error: \"#FF5B82\",\n      },\n      shadow: {\n        panel: \"0 24px 60px -28px rgba(91,213,255,0.32)\",\n      },\n      focus: {\n        ring: \"0 0 0 3px rgba(91,213,255,0.26)\",\n      },\n    },\n    typography: {\n      display: {\n        weight: 600,\n        size: \"27px\",\n        letterSpacing: \"0.4px\",\n      },\n      headline: {\n        weight: 500,\n        size: \"22px\",\n        letterSpacing: \"0.3px\",\n      },\n      metric: {\n        weight: 600,\n        size: \"18px\",\n        letterSpacing: \"0.25px\",\n      },\n      body: {\n        weight: 400,\n        size: \"15px\",\n        letterSpacing: \"0.15px\",\n      },\n      caption: {\n        weight: 400,\n        size: \"13px\",\n        letterSpacing: \"0.05px\",\n      },\n    },\n    spacing: {\n      baseGrid: \"22px\",\n      panelRadius: \"12px\",\n      buttonRadius: \"10px\",\n      overlayBlur: \"28px\",\n      layoutPattern: \"Floating collaboration tiles with live presence bar\",\n    },\n    motion: {\n      entry: \"300ms\",\n      hover: \"180ms\",\n      focus: \"150ms\",\n      async: \"340ms\",\n    },\n  },\n};\n\nexport const PERSONA_IDS = Object.keys(DESIGN_MATRIX) as PersonaId[];\n\nexport const PERSONA_LIST = PERSONA_IDS.map((id) => DESIGN_MATRIX[id]);\n\nexport const DEFAULT_PERSONA_ID: PersonaId = \"midnight-slate\";\n\nexport const getPersonaConfig = (id: PersonaId): PersonaConfig =>\n  DESIGN_MATRIX[id];\n", "import { DEFAULT_PERSONA_ID, PERSONA_IDS, type PersonaId } from \"./designMatrix\";\n\n// Theme constants\nexport const THEME_NAMES = [\n  \"default\",\n  \"dark\",\n  \"light\",\n  \"glass\",\n  \"minimal\",\n  \"neon\",\n  \"vapor\",\n  \"cyber\",\n] as const;\n\nexport const THEME_VARIANTS = [\n  \"default\",\n  \"compact\",\n  \"expanded\",\n] as const;\n\nexport const GLASS_QUALITY_TIERS = [\n  \"low\",\n  \"medium\",\n  \"high\",\n  \"ultra\",\n] as const;\n\nexport const BLUR_STRENGTHS = [\n  \"none\",\n  \"subtle\",\n  \"light\",\n  \"standard\",\n  \"strong\",\n  \"intense\",\n] as const;\n\nexport const GLOW_INTENSITIES = [\n  \"none\",\n  \"subtle\",\n  \"medium\",\n  \"strong\",\n  \"intense\",\n] as const;\n\nexport const PERSONA_DEFAULT: PersonaId = DEFAULT_PERSONA_ID;\n\nexport const AVAILABLE_PERSONAS: readonly PersonaId[] = PERSONA_IDS;\n", "\"use client\";\n\nimport React, { CSSProperties } from \"react\";\nimport clsx from \"clsx\";\nimport { usePersonaTheme } from \"@/theme/ThemeProvider\";\nimport type { PersonaId } from \"@/theme/designMatrix\";\nimport \"./persona-picker.css\";\n\nexport interface PersonaPickerProps {\n  className?: string;\n  id?: string;\n  orientation?: \"auto\" | \"horizontal\" | \"vertical\";\n  onPersonaChange?: (personaId: PersonaId) => void;\n  showMeta?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n}\n\nexport const PersonaPicker: React.FC<PersonaPickerProps> = ({\n  className,\n  id,\n  orientation = \"auto\",\n  onPersonaChange,\n  showMeta = true,\n  compact = false,\n  contained = false,\n  maxHeight,\n}) => {\n  const { personaId, persona, personas, setPersona } = usePersonaTheme();\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n  const handleSelect = (nextId: PersonaId) => {\n    if (nextId === personaId) return;\n    setPersona(nextId);\n    onPersonaChange?.(nextId);\n  };\n\n  return (\n    <section\n      id={id}\n      className={clsx(\n        \"persona-picker\",\n        `persona-picker--${orientation}`,\n        compact && \"persona-picker--compact\",\n        className\n      )}\n      style={{\n        maxHeight:\n          resolvedMaxHeight ?? (compact || contained ? \"240px\" : undefined),\n        overflow:\n          compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n      }}\n      aria-label=\"Persona selector\"\n    >\n      <header className=\"persona-picker__header\">\n        <span className=\"persona-picker__eyebrow\">Active persona</span>\n        <div className=\"persona-picker__active\">\n          <strong className=\"persona-picker__active-name\">\n            {persona.meta.name}\n          </strong>\n          {showMeta && !compact && (\n            <span className=\"persona-picker__active-context\">\n              {persona.meta.primaryContext}\n            </span>\n          )}\n        </div>\n      </header>\n\n      <div\n        className=\"persona-picker__grid\"\n        role=\"list\"\n        aria-label=\"Available personas\"\n      >\n        {personas.map((entry) => {\n          const active = entry.meta.id === personaId;\n          const motionDuration = entry.motion.hover || \"180ms\";\n          const cardStyle: CSSProperties & {\n            [key: string]: string | CSSProperties[keyof CSSProperties];\n          } = {\n            background: entry.colors.background.surface,\n            color: entry.colors.text.primary,\n            borderRadius: entry.spacing.panelRadius,\n            boxShadow: active\n              ? entry.colors.shadow.panel\n              : \"0 20px 45px -30px rgba(6, 12, 20, 0.6)\",\n            transitionDuration: motionDuration,\n            [\"--card-accent\" as string]: entry.colors.accent.primary,\n            [\"--card-hover\" as string]: motionDuration,\n          };\n\n          return (\n            <button\n              key={entry.meta.id}\n              type=\"button\"\n              className=\"persona-picker-card\"\n              style={{ ...cardStyle }}\n              data-active={active}\n              data-persona={entry.meta.id}\n              aria-pressed={active}\n              aria-current={active}\n              onClick={() => handleSelect(entry.meta.id)}\n            >\n              <div className=\"persona-picker-card__header\">\n                <span className=\"persona-picker-card__name\">\n                  {entry.meta.name}\n                </span>\n                {active && (\n                  <span className=\"persona-picker-card__pill\">Active</span>\n                )}\n              </div>\n\n              <div className=\"persona-picker-card__swatches\" aria-hidden=\"true\">\n                <span\n                  className=\"glass-persona-picker-card__swatch glass-persona-picker-card__swatch--primary\"\n                  style={{ background: entry.colors.accent.primary }}\n                />\n                <span\n                  className=\"glass-persona-picker-card__swatch glass-persona-picker-card__swatch--secondary\"\n                  style={{ background: entry.colors.accent.secondary }}\n                />\n              </div>\n\n              {showMeta && !compact && (\n                <div className=\"persona-picker-card__meta\">\n                  <p className=\"persona-picker-card__context\">\n                    {entry.meta.paletteAnchor}\n                  </p>\n                  <p className=\"persona-picker-card__schema\">\n                    {entry.meta.surfaceSchema}\n                  </p>\n                </div>\n              )}\n\n              {!compact && (\n                <footer className=\"persona-picker-card__footer\">\n                  <span className=\"persona-picker-card__signal\">\n                    {entry.meta.motionSignals}\n                  </span>\n                </footer>\n              )}\n            </button>\n          );\n        })}\n      </div>\n    </section>\n  );\n};\n\nPersonaPicker.displayName = \"PersonaPicker\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassContainer } from \"./GlassContainer\";\nimport { VStack } from \"./GlassStack\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassAppShellProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * App shell variant\n   */\n  variant?: \"default\" | \"floating\" | \"minimal\";\n  /**\n   * Header component\n   */\n  header?: React.ReactNode;\n  /**\n   * Sidebar component\n   */\n  sidebar?: React.ReactNode;\n  /**\n   * Footer component\n   */\n  footer?: React.ReactNode;\n  /**\n   * Whether sidebar is collapsible\n   */\n  collapsible?: boolean;\n  /**\n   * Whether sidebar is collapsed by default\n   */\n  defaultCollapsed?: boolean;\n  /**\n   * Sidebar width\n   */\n  sidebarWidth?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether to show sidebar on mobile as overlay\n   */\n  mobileOverlay?: boolean;\n  /**\n   * Mobile breakpoint\n   */\n  mobileBreakpoint?: number;\n  /**\n   * Page padding\n   */\n  padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Content max width\n   */\n  maxWidth?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n  /**\n   * Whether content should be centered\n   */\n  centered?: boolean;\n  /**\n   * Glass elevation for main content\n   */\n  contentElevation?: 0 | 1 | 2 | 3 | 4;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Loading component\n   */\n  loadingComponent?: React.ReactNode;\n  /**\n   * Page transition animation\n   */\n  pageTransition?: boolean;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for the main application shell\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for the shell\n   */\n  role?: string;\n}\n\nexport interface BreadcrumbItem {\n  label: string;\n  href?: string;\n}\n\nexport interface PageHeaderProps {\n  /**\n   * Page title\n   */\n  title: string;\n  /**\n   * Page description\n   */\n  description?: string;\n  /**\n   * Breadcrumb navigation - can be an array of breadcrumb items or any React node\n   */\n  breadcrumb?: BreadcrumbItem[] | React.ReactNode;\n  /**\n   * Page actions\n   */\n  actions?: React.ReactNode;\n  /**\n   * Header variant\n   */\n  variant?: \"default\" | \"centered\" | \"minimal\";\n  className?: string;\n}\n\nexport interface ContentSectionProps {\n  /**\n   * Section title\n   */\n  title?: string;\n  /**\n   * Section description\n   */\n  description?: string;\n  /**\n   * Section actions\n   */\n  actions?: React.ReactNode;\n  /**\n   * Section content\n   */\n  children: React.ReactNode;\n  /**\n   * Section variant\n   */\n  variant?: \"default\" | \"card\" | \"minimal\";\n  /**\n   * Glass elevation (for card variant)\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Section ID for accessibility\n   */\n  id?: string;\n  className?: string;\n}\n\n/**\n * GlassAppShell component\n * Modern application shell with glassmorphism design\n */\nexport const GlassAppShell = forwardRef<HTMLDivElement, GlassAppShellProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      variant = \"default\",\n      header,\n      sidebar,\n      footer,\n      collapsible = true,\n      defaultCollapsed = false,\n      sidebarWidth = \"md\",\n      mobileOverlay = true,\n      mobileBreakpoint = 1024,\n      padding = \"lg\",\n      maxWidth = \"full\",\n      centered = false,\n      contentElevation = 0,\n      loading = false,\n      loadingComponent,\n      pageTransition = true,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Application shell\",\n      role = \"application\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const [sidebarCollapsed, setSidebarCollapsed] = useState(defaultCollapsed);\n    const [sidebarOverlay, setSidebarOverlay] = useState(false);\n    const [isMobile, setIsMobile] = useState(false);\n    const shellId = useA11yId();\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    // Handle responsive behavior\n    useEffect(() => {\n      const checkScreenSize = () => {\n        const mobile = window.innerWidth < mobileBreakpoint;\n        setIsMobile(mobile);\n        if (mobile && mobileOverlay) {\n          setSidebarOverlay(false);\n        }\n      };\n\n      checkScreenSize();\n      window.addEventListener(\"resize\", checkScreenSize);\n      return () => window.removeEventListener(\"resize\", checkScreenSize);\n    }, [mobileBreakpoint, mobileOverlay]);\n\n    // Convert numeric elevation to level string\n    const getElevationLevel = (\n      elev?: 0 | 1 | 2 | 3 | 4\n    ): \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\" => {\n      if (elev === 0) return \"level1\";\n      if (elev === 1) return \"level1\";\n      if (elev === 2) return \"level2\";\n      if (elev === 3) return \"level3\";\n      if (elev === 4) return \"level4\";\n      return \"level5\"; // max level\n    };\n\n    const paddingClasses = {\n      none: \"glass-p-0\",\n      sm: \"glass-p-4\",\n      md: \"glass-p-6\",\n      lg: \"p-8\",\n      xl: \"glass-p-12\",\n    };\n\n    const maxWidthClasses = {\n      sm: \"max-w-sm\",\n      md: \"max-w-4xl\",\n      lg: \"max-w-6xl\",\n      xl: \"max-w-7xl\",\n      \"2xl\": \"max-w-8xl\",\n      full: \"max-w-full\",\n    };\n\n    const variantClasses = {\n      default: \"\",\n      floating: \"glass-p-4\",\n      minimal: \"bg-transparent\",\n    };\n\n    const getElementName = (element: React.ReactElement) => {\n      const elementType = element.type as\n        | string\n        | { displayName?: string; name?: string };\n\n      if (typeof elementType === \"string\") return elementType;\n      return elementType.displayName || elementType.name || \"\";\n    };\n\n    const canEnhanceElement = (\n      element: React.ReactNode,\n      supportedNames: string[]\n    ): element is React.ReactElement => {\n      if (!React.isValidElement(element)) return false;\n      return supportedNames.includes(getElementName(element));\n    };\n\n    // Clone sidebar with props (align with GlassSidebar API)\n    const sidebarExtraProps: any = {\n      collapsed: isMobile ? false : sidebarCollapsed,\n      onCollapsedChange: setSidebarCollapsed,\n      width: sidebarWidth,\n    };\n    if (isMobile && mobileOverlay) {\n      sidebarExtraProps.variant = \"overlay\";\n      sidebarExtraProps.open = sidebarOverlay;\n      sidebarExtraProps.onOpenChange = setSidebarOverlay;\n    }\n    const sidebarElement = sidebar\n      ? canEnhanceElement(sidebar, [\"GlassSidebar\"])\n        ? React.cloneElement(sidebar, sidebarExtraProps)\n        : sidebar\n      : null;\n\n    // Clone header with props (align with GlassHeader API)\n    const headerElement = header\n      ? canEnhanceElement(header, [\"GlassHeader\"])\n        ? React.cloneElement(header, {\n            mobileMenuOpen: Boolean(\n              isMobile && mobileOverlay && sidebarOverlay\n            ),\n            onMobileMenuToggle: () => setSidebarOverlay((v) => !v),\n          } as any)\n        : header\n      : null;\n\n    return (\n      <div\n        ref={ref}\n        id={shellId}\n        aria-label={ariaLabel}\n        className={cn(\n          \"flex h-screen overflow-hidden\",\n          \"bg-gradient-to-br from-background via-background/95 to-surface/50\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          variantClasses?.[variant],\n          className\n        )}\n        {...props}\n      >\n        {/* Sidebar */}\n        {sidebarElement}\n\n        {/* Main content area */}\n        <div className=\"glass-flex glass-flex-col glass-flex-1 glass-overflow-hidden\">\n          {/* Header */}\n          {headerElement}\n\n          {/* Main content */}\n          <main\n            role=\"main\"\n            aria-label=\"Main content\"\n            className={cn(\n              \"flex-1 overflow-auto\",\n              \"scrollbar-thin scrollbar-track-transparent scrollbar-thumb-border/30\",\n              \"hover:scrollbar-thumb-border/50\",\n              // Motion preferences\n              shouldRespectMotion &&\n                \"motion-safe:transition-all motion-reduce:transition-none\"\n            )}\n          >\n            {loading && loadingComponent ? (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full\">\n                {loadingComponent}\n              </div>\n            ) : (\n              <GlassContainer\n                size={maxWidth}\n                centered={centered}\n                padding={padding}\n                glass={contentElevation > 0}\n                elevation={contentElevation}\n                radius={variant === \"floating\" ? \"lg\" : \"none\"}\n                className={cn(\n                  \"min-h-full\",\n                  variant === \"floating\" && \"glass-my-4\"\n                )}\n              >\n                {pageTransition && shouldRespectMotion ? (\n                  <Motion preset=\"fadeIn\" className=\"glass-h-full\">\n                    {children}\n                  </Motion>\n                ) : (\n                  children\n                )}\n              </GlassContainer>\n            )}\n          </main>\n\n          {/* Footer */}\n          {footer && (\n            <footer\n              role=\"contentinfo\"\n              className={cn(\n                \"flex-shrink-0 border-t border-border/20\",\n                // Motion preferences\n                shouldRespectMotion &&\n                  \"motion-safe:transition-all motion-reduce:transition-none\"\n              )}\n            >\n              {footer}\n            </footer>\n          )}\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassAppShell.displayName = \"GlassAppShell\";\n\n/**\n * PageHeader component\n * Consistent page header with title, description, and actions\n */\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n  (\n    {\n      title,\n      description,\n      breadcrumb,\n      actions,\n      variant = \"default\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const variantClasses = {\n      default: \"text-left\",\n      centered: \"text-center\",\n      minimal: \"text-left border-none pb-4\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-gap-4 pb-8 border-b border-border/20\",\n          variantClasses?.[variant],\n          className\n        )}\n        {...props}\n      >\n        {/* Breadcrumb */}\n        {breadcrumb && (\n          <div className=\"glass-text-sm glass-text-secondary\">\n            {Array.isArray(breadcrumb) ? (\n              <nav aria-label=\"Breadcrumb\">\n                <ol className=\"glass-flex glass-items-center glass-gap-2\">\n                  {breadcrumb.map((item, index) => {\n                    const isLast = index === breadcrumb.length - 1;\n                    return (\n                      <li key={index} className=\"glass-flex glass-items-center\">\n                        {index > 0 && <span className=\"glass-mx-2\">/</span>}\n                        {item?.href && !isLast ? (\n                          <a\n                            href={item?.href}\n                            className=\"hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                          >\n                            {item?.label}\n                          </a>\n                        ) : (\n                          <span\n                            className={\n                              isLast ? \"text-foreground font-medium\" : \"\"\n                            }\n                          >\n                            {item?.label}\n                          </span>\n                        )}\n                      </li>\n                    );\n                  })}\n                </ol>\n              </nav>\n            ) : (\n              breadcrumb\n            )}\n          </div>\n        )}\n\n        {/* Title section */}\n        <div\n          className={cn(\n            \"flex glass-gap-4\",\n            variant === \"centered\"\n              ? \"flex-col items-center\"\n              : \"flex-col sm:flex-row sm:items-center sm:justify-between\"\n          )}\n        >\n          <div className=\"glass-gap-2\">\n            {title && (\n              <h1 className=\"glass-text-3xl glass-font-bold glass-text-primary\">\n                {title}\n              </h1>\n            )}\n            {description && (\n              <p\n                className={cn(\n                  \"glass-text-lg glass-text-secondary\",\n                  variant === \"centered\" ? \"max-w-2xl\" : \"max-w-3xl\"\n                )}\n              >\n                {description}\n              </p>\n            )}\n          </div>\n\n          {/* Actions */}\n          {actions && <div className=\"glass-flex-shrink-0\">{actions}</div>}\n        </div>\n      </div>\n    );\n  }\n);\n\nPageHeader.displayName = \"PageHeader\";\n\n/**\n * ContentSection component\n * Reusable content section with optional glassmorphism\n */\nexport const ContentSection = forwardRef<HTMLDivElement, ContentSectionProps>(\n  (\n    {\n      title,\n      description,\n      actions,\n      children,\n      variant = \"default\",\n      elevation = \"level1\",\n      respectMotionPreference = true,\n      id,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const sectionId = useA11yId();\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const content = (\n      <VStack space=\"lg\" className=\"glass-w-full\">\n        {/* Section header */}\n        {(title || description || actions) && (\n          <div className=\"glass-flex glass-flex-col sm:glass-flex-row sm:glass-items-center sm:glass-justify-between glass-gap-4\">\n            <div className=\"glass-gap-1\">\n              {title && (\n                <h2\n                  id={`${id || sectionId}-title`}\n                  className=\"glass-text-xl glass-font-semibold glass-text-primary\"\n                >\n                  {title}\n                </h2>\n              )}\n              {description && (\n                <p className=\"glass-text-secondary\">{description}</p>\n              )}\n            </div>\n\n            {actions && <div className=\"glass-flex-shrink-0\">{actions}</div>}\n          </div>\n        )}\n\n        {/* Section content */}\n        <div className=\"glass-w-full\">{children}</div>\n      </VStack>\n    );\n\n    if (variant === \"card\") {\n      return (\n        <OptimizedGlass\n          variant=\"frosted\"\n          elevation={\n            typeof elevation === \"number\"\n              ? (`level${Math.min(5, Math.max(1, elevation + 1))}` as\n                  | \"level1\"\n                  | \"level2\"\n                  | \"level3\"\n                  | \"level4\"\n                  | \"level5\")\n              : \"level1\"\n          }\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation={shouldRespectMotion ? \"shimmer\" : \"none\"}\n          performanceMode=\"medium\"\n          ref={ref}\n          id={id || sectionId}\n          role=\"region\"\n          aria-labelledby={title ? `${id || sectionId}-title` : undefined}\n          className={cn(\n            \"glass-p-6 w-full\",\n            // Motion preferences\n            shouldRespectMotion &&\n              \"motion-safe:transition-all motion-reduce:transition-none\",\n            className\n          )}\n          {...props}\n        >\n          {content}\n        </OptimizedGlass>\n      );\n    }\n\n    return (\n      <section\n        ref={ref}\n        id={id || sectionId}\n        role=\"region\"\n        aria-labelledby={title ? `${id || sectionId}-title` : undefined}\n        className={cn(\n          \"w-full\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        {...props}\n      >\n        {content}\n      </section>\n    );\n  }\n);\n\nContentSection.displayName = \"ContentSection\";\n", "\"use client\";\n\nimport React from \"react\";\n\ntype AnyProps = Record<string, unknown>;\ntype AnyEventHandler = (event: unknown) => void;\n\nconst composeRefs = <T,>(\n  forwardedRef: React.Ref<T> | undefined,\n  childRef: React.Ref<T> | undefined\n) => {\n  return (node: T | null) => {\n    if (typeof childRef === \"function\") {\n      childRef(node);\n    } else if (childRef) {\n      (childRef as React.MutableRefObject<T | null>).current = node;\n    }\n\n    if (typeof forwardedRef === \"function\") {\n      forwardedRef(node);\n    } else if (forwardedRef) {\n      (forwardedRef as React.MutableRefObject<T | null>).current = node;\n    }\n  };\n};\n\nconst isEventHandler = (key: string, value: unknown) =>\n  /^on[A-Z]/.test(key) && typeof value === \"function\";\n\nconst mergeProps = (slotProps: AnyProps, childProps: AnyProps) => {\n  const mergedProps = { ...slotProps, ...childProps };\n\n  for (const key of Object.keys(slotProps)) {\n    const slotValue = slotProps[key];\n    const childValue = childProps[key];\n\n    if (isEventHandler(key, slotValue) && isEventHandler(key, childValue)) {\n      mergedProps[key] = (event: unknown) => {\n        (childValue as AnyEventHandler)(event);\n\n        if (\n          !(\n            event &&\n            typeof event === \"object\" &&\n            \"defaultPrevented\" in event &&\n            event.defaultPrevented\n          )\n        ) {\n          (slotValue as AnyEventHandler)(event);\n        }\n      };\n    } else if (key === \"style\") {\n      mergedProps[key] = {\n        ...(slotValue as React.CSSProperties),\n        ...(childValue as React.CSSProperties),\n      };\n    } else if (key === \"className\") {\n      mergedProps[key] = [slotValue, childValue].filter(Boolean).join(\" \");\n    }\n  }\n\n  return mergedProps;\n};\n\nexport interface SlotProps extends React.HTMLAttributes<HTMLElement> {\n  children?: React.ReactNode;\n}\n\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\n  ({ children, ...props }, forwardedRef) => {\n    if (!React.isValidElement(children)) {\n      return null;\n    }\n\n    const child = children as React.ReactElement<AnyProps>;\n    const childRef = (child as unknown as { ref?: React.Ref<HTMLElement> }).ref;\n\n    return React.cloneElement(child, {\n      ...mergeProps(props as AnyProps, child.props),\n      ref: composeRefs(forwardedRef, childRef),\n    });\n  }\n);\n\nSlot.displayName = \"Slot\";\n\nexport const GlassSlot = Slot;\n\nexport default Slot;\n", "\"use client\";\n\nimport React from \"react\";\n\nexport interface LabelProps\n  extends React.LabelHTMLAttributes<HTMLLabelElement> {}\n\nexport const Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n  (props, ref) => <label ref={ref} {...props} />\n);\n\nLabel.displayName = \"Label\";\n\nexport const Root = Label;\n\nexport default Label;\n", "\"use client\";\n\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface PortalProps {\n  children?: React.ReactNode;\n  container?: HTMLElement | null;\n  forceMount?: boolean;\n}\n\nexport function Portal({\n  children,\n  container,\n  forceMount = false,\n}: PortalProps) {\n  const [mounted, setMounted] = React.useState(false);\n\n  React.useEffect(() => {\n    setMounted(true);\n  }, []);\n\n  if (!mounted && !forceMount) {\n    return null;\n  }\n\n  const target =\n    container ?? (typeof document !== \"undefined\" ? document.body : null);\n\n  if (!target) {\n    return null;\n  }\n\n  return createPortal(children, target);\n}\n\nPortal.displayName = \"Portal\";\n\nexport const GlassPortal = Portal;\n\nexport default Portal;\n", "\"use client\";\n\nimport React from \"react\";\n\nexport type DismissableLayerOutsideEvent =\n  | PointerEvent\n  | MouseEvent\n  | TouchEvent\n  | FocusEvent;\n\nexport interface DismissableLayerProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  disabled?: boolean;\n  disableOutsidePointerEvents?: boolean;\n  onEscapeKeyDown?: (event: KeyboardEvent) => void;\n  onPointerDownOutside?: (event: DismissableLayerOutsideEvent) => void;\n  onFocusOutside?: (event: FocusEvent) => void;\n  onInteractOutside?: (event: DismissableLayerOutsideEvent) => void;\n  onDismiss?: () => void;\n}\n\nconst withPreventedTracking = <EventType extends Event>(\n  event: EventType,\n  dispatch: (event: EventType) => void\n) => {\n  let prevented = false;\n  const preventDefault = event.preventDefault.bind(event);\n  event.preventDefault = () => {\n    prevented = true;\n    preventDefault();\n  };\n\n  dispatch(event);\n\n  return prevented || event.defaultPrevented;\n};\n\nexport const DismissableLayer = React.forwardRef<\n  HTMLDivElement,\n  DismissableLayerProps\n>(\n  (\n    {\n      disabled = false,\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      style,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const localRef = React.useRef<HTMLDivElement | null>(null);\n    const ignoreFocusOutsideRef = React.useRef(false);\n\n    const setRef = React.useCallback(\n      (node: HTMLDivElement | null) => {\n        localRef.current = node;\n        if (typeof forwardedRef === \"function\") {\n          forwardedRef(node);\n        } else if (forwardedRef) {\n          (\n            forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n          ).current = node;\n        }\n      },\n      [forwardedRef]\n    );\n\n    React.useEffect(() => {\n      if (disabled) return;\n\n      const handlePointerDown = (event: PointerEvent) => {\n        const target = event.target as Node | null;\n        if (!target || localRef.current?.contains(target)) return;\n\n        const prevented = withPreventedTracking(event, (trackedEvent) => {\n          onPointerDownOutside?.(trackedEvent);\n          onInteractOutside?.(trackedEvent);\n        });\n        ignoreFocusOutsideRef.current = true;\n        window.setTimeout(() => {\n          ignoreFocusOutsideRef.current = false;\n        }, 0);\n\n        if (!prevented) {\n          onDismiss?.();\n        }\n      };\n\n      const handleFocusIn = (event: FocusEvent) => {\n        if (ignoreFocusOutsideRef.current) return;\n\n        const target = event.target as Node | null;\n        if (!target || localRef.current?.contains(target)) return;\n\n        const prevented = withPreventedTracking(event, (trackedEvent) => {\n          onFocusOutside?.(trackedEvent);\n          onInteractOutside?.(trackedEvent);\n        });\n\n        if (!prevented) {\n          onDismiss?.();\n        }\n      };\n\n      const handleKeyDown = (event: KeyboardEvent) => {\n        if (event.key !== \"Escape\") return;\n\n        const prevented = withPreventedTracking(event, (trackedEvent) => {\n          onEscapeKeyDown?.(trackedEvent);\n        });\n\n        if (!prevented) {\n          onDismiss?.();\n        }\n      };\n\n      document.addEventListener(\"pointerdown\", handlePointerDown, true);\n      document.addEventListener(\"focusin\", handleFocusIn, true);\n      document.addEventListener(\"keydown\", handleKeyDown);\n\n      return () => {\n        document.removeEventListener(\"pointerdown\", handlePointerDown, true);\n        document.removeEventListener(\"focusin\", handleFocusIn, true);\n        document.removeEventListener(\"keydown\", handleKeyDown);\n      };\n    }, [\n      disabled,\n      onDismiss,\n      onEscapeKeyDown,\n      onFocusOutside,\n      onInteractOutside,\n      onPointerDownOutside,\n    ]);\n\n    React.useEffect(() => {\n      if (!disableOutsidePointerEvents) return;\n\n      const previousPointerEvents = document.body.style.pointerEvents;\n      document.body.style.pointerEvents = \"none\";\n\n      return () => {\n        document.body.style.pointerEvents = previousPointerEvents;\n      };\n    }, [disableOutsidePointerEvents]);\n\n    return (\n      <div\n        ref={setRef}\n        style={{\n          pointerEvents: disableOutsidePointerEvents ? \"auto\" : undefined,\n          ...style,\n        }}\n        {...props}\n      />\n    );\n  }\n);\n\nDismissableLayer.displayName = \"DismissableLayer\";\n\nexport const GlassDismissableLayer = DismissableLayer;\n\nexport default DismissableLayer;\n", "\"use client\";\n\nimport React from \"react\";\n\nconst FOCUSABLE_SELECTOR = [\n  \"a[href]:not([disabled])\",\n  \"button:not([disabled])\",\n  \"textarea:not([disabled])\",\n  \"input:not([disabled])\",\n  \"select:not([disabled])\",\n  '[tabindex]:not([tabindex=\"-1\"])',\n  '[contenteditable=\"true\"]',\n  \"audio[controls]\",\n  \"video[controls]\",\n  \"details>summary:first-of-type\",\n].join(\",\");\n\nconst getFocusableElements = (container: HTMLElement | null) => {\n  if (!container) return [];\n\n  return Array.from(\n    container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n  ).filter((element) => {\n    const style = window.getComputedStyle(element);\n    return (\n      style.display !== \"none\" &&\n      style.visibility !== \"hidden\" &&\n      !element.hasAttribute(\"disabled\") &&\n      element.getAttribute(\"aria-hidden\") !== \"true\"\n    );\n  });\n};\n\nexport interface FocusScopeProps extends React.HTMLAttributes<HTMLDivElement> {\n  trapped?: boolean;\n  loop?: boolean;\n  autoFocus?: boolean;\n  restoreFocus?: boolean;\n  onMountAutoFocus?: (event: Event) => void;\n  onUnmountAutoFocus?: (event: Event) => void;\n}\n\nexport const FocusScope = React.forwardRef<HTMLDivElement, FocusScopeProps>(\n  (\n    {\n      trapped = false,\n      loop = false,\n      autoFocus = false,\n      restoreFocus = true,\n      onMountAutoFocus,\n      onUnmountAutoFocus,\n      children,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const localRef = React.useRef<HTMLDivElement | null>(null);\n    const previousFocusRef = React.useRef<HTMLElement | null>(null);\n\n    const setRef = React.useCallback(\n      (node: HTMLDivElement | null) => {\n        localRef.current = node;\n        if (typeof forwardedRef === \"function\") {\n          forwardedRef(node);\n        } else if (forwardedRef) {\n          (\n            forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n          ).current = node;\n        }\n      },\n      [forwardedRef]\n    );\n\n    React.useEffect(() => {\n      previousFocusRef.current = document.activeElement as HTMLElement | null;\n\n      if (autoFocus) {\n        const event = new Event(\"focusScope.autoFocus\", { cancelable: true });\n        onMountAutoFocus?.(event);\n        if (!event.defaultPrevented) {\n          window.setTimeout(\n            () => getFocusableElements(localRef.current)[0]?.focus(),\n            0\n          );\n        }\n      }\n\n      return () => {\n        const event = new Event(\"focusScope.restoreFocus\", {\n          cancelable: true,\n        });\n        onUnmountAutoFocus?.(event);\n\n        if (restoreFocus && !event.defaultPrevented) {\n          previousFocusRef.current?.focus();\n        }\n      };\n    }, [autoFocus, onMountAutoFocus, onUnmountAutoFocus, restoreFocus]);\n\n    React.useEffect(() => {\n      if (!trapped && !loop) return;\n\n      const handleKeyDown = (event: KeyboardEvent) => {\n        if (event.key !== \"Tab\") return;\n\n        const focusables = getFocusableElements(localRef.current);\n        if (focusables.length === 0) return;\n\n        const first = focusables[0];\n        const last = focusables[focusables.length - 1];\n        const active = document.activeElement as HTMLElement | null;\n\n        if (\n          !event.shiftKey &&\n          (active === last || !localRef.current?.contains(active))\n        ) {\n          event.preventDefault();\n          first.focus();\n        } else if (\n          event.shiftKey &&\n          (active === first || !localRef.current?.contains(active))\n        ) {\n          event.preventDefault();\n          last.focus();\n        }\n      };\n\n      const handleFocusIn = (event: FocusEvent) => {\n        if (!trapped) return;\n        const target = event.target as Node | null;\n        if (!target || localRef.current?.contains(target)) return;\n\n        event.preventDefault();\n        getFocusableElements(localRef.current)[0]?.focus();\n      };\n\n      document.addEventListener(\"keydown\", handleKeyDown);\n      document.addEventListener(\"focusin\", handleFocusIn, true);\n\n      return () => {\n        document.removeEventListener(\"keydown\", handleKeyDown);\n        document.removeEventListener(\"focusin\", handleFocusIn, true);\n      };\n    }, [loop, trapped]);\n\n    return (\n      <div ref={setRef} data-focus-scope=\"\" {...props}>\n        {children}\n      </div>\n    );\n  }\n);\n\nFocusScope.displayName = \"FocusScope\";\n\nexport const GlassFocusScope = FocusScope;\n\nexport default FocusScope;\n", "\"use client\";\n\nimport React from \"react\";\nimport { Slot } from \"./Slot\";\n\ntype Orientation = \"horizontal\" | \"vertical\" | \"both\";\n\ntype RovingFocusContextValue = {\n  orientation: Orientation;\n  loop: boolean;\n  dir: \"ltr\" | \"rtl\";\n  currentTabStopId: string | null;\n  setCurrentTabStopId: (id: string) => void;\n  registerItem: (id: string, node: HTMLElement) => void;\n  unregisterItem: (id: string) => void;\n  focusByDelta: (id: string, delta: number) => void;\n  focusFirst: () => void;\n  focusLast: () => void;\n};\n\nconst RovingFocusContext = React.createContext<RovingFocusContextValue | null>(\n  null\n);\n\nexport interface RovingFocusGroupRootProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  orientation?: Orientation;\n  loop?: boolean;\n  defaultCurrentTabStopId?: string;\n  dir?: \"ltr\" | \"rtl\";\n}\n\nexport const RovingFocusGroupRoot = React.forwardRef<\n  HTMLDivElement,\n  RovingFocusGroupRootProps\n>(\n  (\n    {\n      orientation = \"horizontal\",\n      loop = false,\n      defaultCurrentTabStopId,\n      dir = \"ltr\",\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const itemsRef = React.useRef<Map<string, HTMLElement>>(new Map());\n    const [currentTabStopId, setCurrentTabStopId] = React.useState<\n      string | null\n    >(defaultCurrentTabStopId ?? null);\n\n    const registerItem = React.useCallback((id: string, node: HTMLElement) => {\n      itemsRef.current.set(id, node);\n      setCurrentTabStopId((current) => current ?? id);\n    }, []);\n\n    const unregisterItem = React.useCallback((id: string) => {\n      itemsRef.current.delete(id);\n      setCurrentTabStopId((current) => (current === id ? null : current));\n    }, []);\n\n    const focusByDelta = React.useCallback(\n      (id: string, delta: number) => {\n        const entries = Array.from(itemsRef.current.entries()).filter(\n          ([, node]) =>\n            !node.hasAttribute(\"disabled\") &&\n            node.getAttribute(\"aria-disabled\") !== \"true\"\n        );\n        const index = entries.findIndex(([entryId]) => entryId === id);\n        if (index === -1 || entries.length === 0) return;\n\n        let nextIndex = index + delta;\n        if (loop) {\n          nextIndex = (nextIndex + entries.length) % entries.length;\n        } else {\n          nextIndex = Math.max(0, Math.min(entries.length - 1, nextIndex));\n        }\n\n        const [nextId, nextNode] = entries[nextIndex];\n        setCurrentTabStopId(nextId);\n        nextNode.focus();\n      },\n      [loop]\n    );\n\n    const focusByIndex = React.useCallback((index: number) => {\n      const entries = Array.from(itemsRef.current.entries()).filter(\n        ([, node]) =>\n          !node.hasAttribute(\"disabled\") &&\n          node.getAttribute(\"aria-disabled\") !== \"true\"\n      );\n      const [nextId, nextNode] = entries[index] || [];\n      if (!nextId || !nextNode) return;\n\n      setCurrentTabStopId(nextId);\n      nextNode.focus();\n    }, []);\n\n    const focusFirst = React.useCallback(() => {\n      focusByIndex(0);\n    }, [focusByIndex]);\n\n    const focusLast = React.useCallback(() => {\n      const enabledCount = Array.from(itemsRef.current.values()).filter(\n        (node) =>\n          !node.hasAttribute(\"disabled\") &&\n          node.getAttribute(\"aria-disabled\") !== \"true\"\n      ).length;\n      focusByIndex(enabledCount - 1);\n    }, [focusByIndex]);\n\n    const value = React.useMemo(\n      () => ({\n        orientation,\n        loop,\n        dir,\n        currentTabStopId,\n        setCurrentTabStopId,\n        registerItem,\n        unregisterItem,\n        focusByDelta,\n        focusFirst,\n        focusLast,\n      }),\n      [\n        currentTabStopId,\n        dir,\n        focusFirst,\n        focusLast,\n        focusByDelta,\n        loop,\n        orientation,\n        registerItem,\n        unregisterItem,\n      ]\n    );\n\n    return (\n      <RovingFocusContext.Provider value={value}>\n        <div\n          ref={ref}\n          role={props.role}\n          dir={dir}\n          data-roving-focus-group=\"\"\n          {...props}\n        >\n          {children}\n        </div>\n      </RovingFocusContext.Provider>\n    );\n  }\n);\n\nRovingFocusGroupRoot.displayName = \"RovingFocusGroupRoot\";\n\nexport interface RovingFocusGroupItemProps\n  extends React.HTMLAttributes<HTMLElement> {\n  asChild?: boolean;\n  disabled?: boolean;\n}\n\nexport const RovingFocusGroupItem = React.forwardRef<\n  HTMLElement,\n  RovingFocusGroupItemProps\n>(\n  (\n    { asChild = false, disabled = false, onKeyDown, onFocus, ...props },\n    ref\n  ) => {\n    const context = React.useContext(RovingFocusContext);\n    const id = React.useId();\n    const localRef = React.useRef<HTMLElement | null>(null);\n    const Comp = asChild ? Slot : \"div\";\n\n    React.useEffect(() => {\n      if (!context || !localRef.current) return;\n\n      context.registerItem(id, localRef.current);\n      return () => context.unregisterItem(id);\n    }, [context, id]);\n\n    const setRef = React.useCallback(\n      (node: HTMLElement | null) => {\n        localRef.current = node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref) {\n          (ref as React.MutableRefObject<HTMLElement | null>).current = node;\n        }\n      },\n      [ref]\n    );\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n      onKeyDown?.(event);\n      if (event.defaultPrevented || !context) return;\n\n      const horizontal =\n        context.orientation === \"horizontal\" || context.orientation === \"both\";\n      const vertical =\n        context.orientation === \"vertical\" || context.orientation === \"both\";\n\n      if (event.key === \"Home\") {\n        event.preventDefault();\n        context.focusFirst();\n      } else if (event.key === \"End\") {\n        event.preventDefault();\n        context.focusLast();\n      } else if (horizontal && event.key === \"ArrowRight\") {\n        event.preventDefault();\n        context.focusByDelta(id, context.dir === \"rtl\" ? -1 : 1);\n      } else if (horizontal && event.key === \"ArrowLeft\") {\n        event.preventDefault();\n        context.focusByDelta(id, context.dir === \"rtl\" ? 1 : -1);\n      } else if (vertical && event.key === \"ArrowDown\") {\n        event.preventDefault();\n        context.focusByDelta(id, 1);\n      } else if (vertical && event.key === \"ArrowUp\") {\n        event.preventDefault();\n        context.focusByDelta(id, -1);\n      }\n    };\n\n    const handleFocus = (event: React.FocusEvent<HTMLElement>) => {\n      onFocus?.(event);\n      context?.setCurrentTabStopId(id);\n    };\n\n    const tabIndex = context?.currentTabStopId === id ? 0 : -1;\n\n    return (\n      <Comp\n        ref={setRef}\n        tabIndex={disabled ? undefined : tabIndex}\n        data-roving-focus-item=\"\"\n        aria-disabled={disabled || undefined}\n        onFocus={handleFocus}\n        onKeyDown={handleKeyDown}\n        {...props}\n      />\n    );\n  }\n);\n\nRovingFocusGroupItem.displayName = \"RovingFocusGroupItem\";\n\nexport const RovingFocusGroup = {\n  Root: RovingFocusGroupRoot,\n  Item: RovingFocusGroupItem,\n};\n\nexport const GlassRovingFocusGroup = RovingFocusGroup;\n\nexport default RovingFocusGroup;\n", "\"use client\";\n\nimport React from \"react\";\n\nexport type PositionerSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type PositionerAlign = \"start\" | \"center\" | \"end\";\n\nexport interface PositionerProps extends React.HTMLAttributes<HTMLDivElement> {\n  anchorRef?: React.RefObject<HTMLElement>;\n  side?: PositionerSide;\n  align?: PositionerAlign;\n  sideOffset?: number;\n  alignOffset?: number;\n  collisionPadding?: number;\n  strategy?: \"fixed\" | \"absolute\";\n  contained?: boolean;\n}\n\nconst getTopLeft = (\n  anchor: DOMRect,\n  floating: DOMRect,\n  side: PositionerSide,\n  align: PositionerAlign,\n  sideOffset: number,\n  alignOffset: number\n) => {\n  let top = 0;\n  let left = 0;\n\n  if (side === \"top\") top = anchor.top - floating.height - sideOffset;\n  if (side === \"bottom\") top = anchor.bottom + sideOffset;\n  if (side === \"left\") left = anchor.left - floating.width - sideOffset;\n  if (side === \"right\") left = anchor.right + sideOffset;\n\n  if (side === \"top\" || side === \"bottom\") {\n    if (align === \"start\") left = anchor.left + alignOffset;\n    if (align === \"center\")\n      left = anchor.left + anchor.width / 2 - floating.width / 2;\n    if (align === \"end\") left = anchor.right - floating.width - alignOffset;\n  } else {\n    if (align === \"start\") top = anchor.top + alignOffset;\n    if (align === \"center\")\n      top = anchor.top + anchor.height / 2 - floating.height / 2;\n    if (align === \"end\") top = anchor.bottom - floating.height - alignOffset;\n  }\n\n  return { top, left };\n};\n\nexport const Positioner = React.forwardRef<HTMLDivElement, PositionerProps>(\n  (\n    {\n      anchorRef,\n      side = \"bottom\",\n      align = \"center\",\n      sideOffset = 0,\n      alignOffset = 0,\n      collisionPadding = 8,\n      strategy = \"fixed\",\n      contained = false,\n      style,\n      children,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const localRef = React.useRef<HTMLDivElement | null>(null);\n    const [position, setPosition] = React.useState<React.CSSProperties>(() =>\n      contained\n        ? {}\n        : {\n            position: strategy,\n            top: -9999,\n            left: -9999,\n          }\n    );\n\n    const setRef = React.useCallback(\n      (node: HTMLDivElement | null) => {\n        localRef.current = node;\n        if (typeof forwardedRef === \"function\") {\n          forwardedRef(node);\n        } else if (forwardedRef) {\n          (\n            forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n          ).current = node;\n        }\n      },\n      [forwardedRef]\n    );\n\n    const updatePosition = React.useCallback(() => {\n      if (contained) return;\n      const anchor = anchorRef?.current;\n      const floating = localRef.current;\n      if (!anchor || !floating) return;\n\n      const anchorRect = anchor.getBoundingClientRect();\n      const floatingRect = floating.getBoundingClientRect();\n      const next = getTopLeft(\n        anchorRect,\n        floatingRect,\n        side,\n        align,\n        sideOffset,\n        alignOffset\n      );\n\n      const maxLeft = window.innerWidth - floatingRect.width - collisionPadding;\n      const maxTop =\n        window.innerHeight - floatingRect.height - collisionPadding;\n\n      setPosition({\n        position: strategy,\n        top: Math.max(collisionPadding, Math.min(maxTop, next.top)),\n        left: Math.max(collisionPadding, Math.min(maxLeft, next.left)),\n      });\n    }, [\n      align,\n      alignOffset,\n      anchorRef,\n      collisionPadding,\n      contained,\n      side,\n      sideOffset,\n      strategy,\n    ]);\n\n    React.useLayoutEffect(() => {\n      updatePosition();\n    }, [children, updatePosition]);\n\n    React.useEffect(() => {\n      if (contained) return;\n\n      window.addEventListener(\"resize\", updatePosition);\n      window.addEventListener(\"scroll\", updatePosition, true);\n\n      return () => {\n        window.removeEventListener(\"resize\", updatePosition);\n        window.removeEventListener(\"scroll\", updatePosition, true);\n      };\n    }, [contained, updatePosition]);\n\n    return (\n      <div\n        ref={setRef}\n        data-side={side}\n        data-align={align}\n        style={{\n          ...position,\n          ...style,\n        }}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nPositioner.displayName = \"Positioner\";\n\nexport const GlassPositioner = Positioner;\n\nexport default Positioner;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport {\n  useInteractionRecorder,\n  usePredictiveEngine,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface ConsciousnessFeatures {\n  /**\n   * Master consciousness toggle\n   */\n  consciousness?: boolean;\n  /**\n   * Enable predictive UI features\n   */\n  predictive?: boolean;\n  /**\n   * Enable content preloading\n   */\n  preloadContent?: boolean;\n  /**\n   * Enable eye tracking integration\n   */\n  eyeTracking?: boolean;\n  /**\n   * Enable gaze-responsive features\n   */\n  gazeResponsive?: boolean;\n  /**\n   * Enable biometric adaptation\n   */\n  adaptive?: boolean;\n  /**\n   * Enable biometric responsive features\n   */\n  biometricResponsive?: boolean;\n  /**\n   * Enable spatial audio\n   */\n  spatialAudio?: boolean;\n  /**\n   * Enable audio feedback\n   */\n  audioFeedback?: boolean;\n  /**\n   * Enable achievement tracking\n   */\n  trackAchievements?: boolean;\n  /**\n   * Achievement identifier\n   */\n  achievementId?: string;\n  /**\n   * Container usage context for consciousness features\n   */\n  usageContext?: \"main\" | \"sidebar\" | \"modal\" | \"card\" | \"list\" | \"form\";\n}\n\nexport interface GlassContainerProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    ConsciousnessFeatures {\n  /**\n   * Container size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n  /**\n   * Container centering\n   */\n  centered?: boolean;\n  /**\n   * Container padding\n   */\n  padding?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Responsive padding\n   */\n  responsivePadding?: {\n    sm?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    md?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    lg?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    xl?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    \"2xl\"?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  };\n  /**\n   * Container variant\n   */\n  variant?: \"default\" | \"fluid\" | \"breakout\";\n  /**\n   * Whether to apply glassmorphism background\n   */\n  glass?: boolean;\n  /**\n   * Glass elevation level\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Border radius\n   */\n  radius?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n}\n\n/**\n * GlassContainer component\n * Responsive container with glassmorphism styling, flexible sizing, and consciousness interface integration\n */\nexport const GlassContainer = forwardRef<HTMLDivElement, GlassContainerProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      size = \"lg\",\n      centered = true,\n      padding = \"md\",\n      responsivePadding,\n      variant = \"default\",\n      glass = false,\n      elevation = \"level1\",\n      radius = \"none\",\n      material = \"glass\",\n      materialProps,\n      className,\n      children,\n      // Consciousness features\n      predictive = false,\n      preloadContent = false,\n      eyeTracking = false,\n      gazeResponsive = false,\n      adaptive = false,\n      biometricResponsive = false,\n      spatialAudio = false,\n      audioFeedback = false,\n      trackAchievements = false,\n      achievementId,\n      usageContext = \"main\",\n      ...props\n    },\n    ref\n  ) => {\n    const [containerElement, setContainerElement] =\n      useState<HTMLDivElement | null>(null);\n    const localRef = useRef<HTMLDivElement>(null);\n    const [isVisible, setIsVisible] = useState(false);\n\n    // Forward ref to parent\n    useImperativeHandle(ref, () => localRef.current as HTMLDivElement);\n    const [adaptiveSize, setAdaptiveSize] = useState(size);\n    const [adaptivePadding, setAdaptivePadding] = useState(padding);\n\n    // Consciousness feature hooks - only initialize if features are enabled\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n    const interactionRecorder =\n      predictive || trackAchievements\n        ? useInteractionRecorder(`glass-container-${usageContext}`)\n        : null;\n\n    // Visibility tracking for predictive preloading\n    useEffect(() => {\n      if (!containerElement || !preloadContent) return;\n\n      const observer = new IntersectionObserver(\n        ([entry]) => {\n          setIsVisible(entry.isIntersecting);\n\n          if (entry.isIntersecting && interactionRecorder) {\n            // Create synthetic scroll event\n            const syntheticEvent = {\n              currentTarget: { id: `container-${usageContext}` },\n              type: \"scroll\",\n            } as any;\n            interactionRecorder.recordFocus(syntheticEvent);\n          }\n        },\n        { threshold: 0.1 }\n      );\n\n      observer.observe(containerElement);\n      return () => observer.disconnect();\n    }, [preloadContent, usageContext, interactionRecorder]);\n\n    // Biometric adaptation effects\n    useEffect(() => {\n      if (!biometricResponsive || !biometricAdapter) return;\n\n      const adaptContainer = () => {\n        const stressLevel = biometricAdapter.currentStressLevel;\n        // For now, assume desktop capabilities\n        const deviceCapabilities = { isMobile: false, isDesktop: true };\n\n        // Adapt size based on device and stress\n        if (deviceCapabilities.isMobile && stressLevel > 0.7) {\n          setAdaptiveSize(\"xl\"); // Larger touch targets when stressed on mobile\n          setAdaptivePadding(\"lg\"); // More padding for easier interaction\n        } else if (stressLevel < 0.3 && deviceCapabilities.isDesktop) {\n          setAdaptiveSize(\"md\"); // Compact size when relaxed on desktop\n          setAdaptivePadding(\"sm\"); // Less padding for efficiency\n        } else {\n          setAdaptiveSize(size); // Use original size\n          setAdaptivePadding(padding); // Use original padding\n        }\n      };\n\n      // Initial adaptation\n      adaptContainer();\n\n      // Listen for biometric changes\n      const interval = setInterval(adaptContainer, 5000);\n      return () => clearInterval(interval);\n    }, [biometricResponsive, biometricAdapter, size, padding]);\n\n    // Eye tracking effects\n    useEffect(() => {\n      if (!gazeResponsive || !eyeTracker || !containerElement) return;\n\n      const handleGazeEnter = () => {\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"focus_enter\", {\n            x: containerElement?.offsetLeft || 0,\n            y: containerElement?.offsetTop || 0,\n            z: 0, // Default z position\n          });\n        }\n\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\"container_gaze_attention\", {\n            context: usageContext,\n            duration: Date.now(),\n          });\n        }\n      };\n\n      const handleGazeExit = () => {\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"focus_exit\");\n        }\n      };\n\n      // Note: Eye tracking event handlers not yet implemented\n      // eyeTracker.onGazeEnter(containerRef.current, handleGazeEnter);\n      // eyeTracker.onGazeExit(containerRef.current, handleGazeExit);\n\n      return () => {\n        // Note: Eye tracking cleanup not yet implemented\n        // if (containerRef.current) {\n        //   eyeTracker.offGazeEnter(containerRef.current, handleGazeEnter);\n        //   eyeTracker.offGazeExit(containerRef.current, handleGazeExit);\n        // }\n      };\n    }, [\n      gazeResponsive,\n      eyeTracker,\n      spatialAudioEngine,\n      audioFeedback,\n      achievementTracker,\n      trackAchievements,\n      usageContext,\n    ]);\n\n    // Predictive interaction tracking\n    const handleInteraction = useCallback(\n      (event: React.MouseEvent | React.FocusEvent) => {\n        if (!interactionRecorder) return;\n\n        if (event.type === \"click\") {\n          interactionRecorder.recordClick(event as React.MouseEvent);\n        }\n\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\n            achievementId || \"container_interaction\",\n            {\n              context: usageContext,\n              timestamp: Date.now(),\n            }\n          );\n        }\n      },\n      [\n        interactionRecorder,\n        achievementTracker,\n        trackAchievements,\n        achievementId,\n        usageContext,\n      ]\n    );\n\n    // Filter out component-specific props and consciousness features that shouldn't be passed to DOM\n    const {\n      maxWidth,\n      minWidth,\n      maxHeight,\n      minHeight,\n      // Prevent leaking master toggle to DOM\n      consciousness: _consciousness,\n      predictive: _predictive,\n      preloadContent: _preloadContent,\n      eyeTracking: _eyeTracking,\n      gazeResponsive: _gazeResponsive,\n      adaptive: _adaptive,\n      biometricResponsive: _biometricResponsive,\n      spatialAudio: _spatialAudio,\n      audioFeedback: _audioFeedback,\n      trackAchievements: _trackAchievements,\n      achievementId: _achievementId,\n      usageContext: _usageContext,\n      ...domProps\n    } = props as any;\n    // Use adaptive values if biometric adaptation is enabled, otherwise use original values\n    const effectiveSize = biometricResponsive ? adaptiveSize : size;\n    const effectivePadding = biometricResponsive ? adaptivePadding : padding;\n\n    const sizeClasses = {\n      xs: \"max-w-xs\", // 320px\n      sm: \"max-w-sm\", // 384px\n      md: \"max-w-md\", // 448px\n      lg: \"max-w-4xl\", // 896px\n      xl: \"max-w-6xl\", // 1152px\n      \"2xl\": \"max-w-7xl\", // 1280px\n      full: \"max-w-full\",\n    };\n\n    const paddingClasses = {\n      none: \"glass-p-0\",\n      xs: \"glass-p-2\",\n      sm: \"glass-p-4\",\n      md: \"glass-p-6\",\n      lg: \"glass-p-8\",\n      xl: \"glass-p-12\",\n      \"2xl\": \"glass-p-16\",\n    };\n\n    const variantClasses = {\n      default: \"\",\n      fluid: \"w-full\",\n      breakout: \"w-screen relative left-1/2 right-1/2 -mx-[50vw]\",\n    };\n\n    const radiusClasses = {\n      none: \"rounded-none\",\n      sm: \"glass-radius-sm\",\n      md: \"glass-radius-md\",\n      lg: \"glass-radius-lg\",\n      xl: \"glass-radius-xl\",\n      \"2xl\": \"rounded-2xl\",\n      full: \"glass-radius-full\",\n    };\n\n    // Map elevation to OptimizedGlass elevation values\n    const getGlassElevation = (\n      elevation: GlassContainerProps[\"elevation\"] | string | number\n    ): \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\" => {\n      if (elevation === \"float\") return \"level3\" as const;\n      if (elevation === \"modal\") return \"level4\" as const;\n      if (typeof elevation === \"number\") {\n        const level = Math.min(5, Math.max(1, elevation + 1));\n        switch (level) {\n          case 1:\n            return \"level1\" as const;\n          case 2:\n            return \"level2\" as const;\n          case 3:\n            return \"level3\" as const;\n          case 4:\n            return \"level4\" as const;\n          case 5:\n            return \"level5\" as const;\n          default:\n            return \"level1\" as const;\n        }\n      }\n      // Handle string values that aren't the expected literals\n      if (typeof elevation === \"string\") {\n        // Try to parse as number\n        const numValue = parseInt(elevation, 10);\n        if (!isNaN(numValue)) {\n          return getGlassElevation(numValue);\n        }\n        // Default for unrecognized strings\n        return \"level1\" as const;\n      }\n      return \"level1\" as const;\n    };\n\n    const responsivePaddingClasses = responsivePadding\n      ? [\n          responsivePadding.sm && `sm:${paddingClasses[responsivePadding.sm]}`,\n          responsivePadding.md && `md:${paddingClasses[responsivePadding.md]}`,\n          responsivePadding.lg && `lg:${paddingClasses[responsivePadding.lg]}`,\n          responsivePadding.xl && `xl:${paddingClasses[responsivePadding.xl]}`,\n          responsivePadding[\"2xl\"] &&\n            `2xl:${paddingClasses[responsivePadding[\"2xl\"]]}`,\n        ].filter(Boolean)\n      : [];\n\n    if (glass) {\n      return material === \"liquid\" ? (\n        <LiquidGlassMaterial\n          ior={\n            materialProps?.ior ||\n            (elevation === \"modal\" ? 1.5 : elevation === \"float\" ? 1.48 : 1.45)\n          }\n          thickness={\n            materialProps?.thickness ||\n            (size === \"xs\" ? 6 : size === \"sm\" ? 8 : size === \"md\" ? 12 : 16)\n          }\n          tint={\n            materialProps?.tint ||\n            (usageContext === \"modal\"\n              ? { r: 0, g: 0, b: 0, a: 0.08 }\n              : { r: 0, g: 0, b: 0, a: 0.05 })\n          }\n          variant={\n            materialProps?.variant ||\n            (usageContext === \"modal\" ? \"regular\" : \"clear\")\n          }\n          quality={materialProps?.quality || \"high\"}\n          environmentAdaptation\n          motionResponsive\n          interactive={usageContext === \"card\" || usageContext === \"form\"}\n          className={cn(\n            // Base container styles\n            \"w-full transition-all duration-300 liquid-glass-container-surface\",\n\n            // Size and centering\n            sizeClasses[effectiveSize],\n            centered && \"mx-auto\",\n\n            // Variant\n            variantClasses[variant],\n\n            // Padding\n            paddingClasses[effectivePadding],\n            ...responsivePaddingClasses,\n\n            // Radius\n            radius === \"none\"\n              ? \"rounded-none\"\n              : radius === \"sm\"\n                ? \"glass-radius-sm\"\n                : radius === \"md\"\n                  ? \"glass-radius-md\"\n                  : radius === \"lg\"\n                    ? \"glass-radius-lg\"\n                    : radius === \"xl\"\n                      ? \"glass-radius-xl\"\n                      : radius === \"2xl\"\n                        ? \"rounded-2xl\"\n                        : radius === \"full\"\n                          ? \"glass-radius-full\"\n                          : \"glass-radius-lg\",\n\n            // Consciousness feature styles\n            isVisible && preloadContent && \"animate-pulse\",\n            biometricResponsive && \"transform-gpu\",\n\n            className\n          )}\n          style={{\n            \"--liquid-glass-container-density\":\n              usageContext === \"modal\" ? \"0.95\" : \"0.88\",\n            \"--liquid-glass-environment-adapt\": \"0.7\",\n          }}\n          data-liquid-glass-container=\"true\"\n          data-container-context={usageContext}\n          data-container-size={effectiveSize}\n          onClick={handleInteraction}\n          onFocus={handleInteraction}\n          ref={(node) => {\n            setContainerElement(node);\n            if (ref) {\n              if (typeof ref === \"function\") {\n                ref(node);\n              } else if (\"current\" in ref) {\n                ref.current = node;\n              }\n            }\n          }}\n          {...domProps}\n        >\n          {children}\n        </LiquidGlassMaterial>\n      ) : (\n        <OptimizedGlass\n          intent=\"neutral\"\n          elevation={getGlassElevation(elevation)}\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          className={cn(\n            // Base container styles\n            \"w-full transition-all duration-300\",\n\n            // Size and centering\n            sizeClasses[effectiveSize],\n            centered && \"mx-auto\",\n\n            // Variant\n            variantClasses[variant],\n\n            // Padding\n            paddingClasses[effectivePadding],\n            ...responsivePaddingClasses,\n\n            // Radius\n            radius === \"none\"\n              ? \"rounded-none\"\n              : radius === \"sm\"\n                ? \"glass-radius-sm\"\n                : radius === \"md\"\n                  ? \"glass-radius-md\"\n                  : radius === \"lg\"\n                    ? \"glass-radius-lg\"\n                    : radius === \"xl\"\n                      ? \"glass-radius-xl\"\n                      : radius === \"2xl\"\n                        ? \"rounded-2xl\"\n                        : radius === \"full\"\n                          ? \"glass-radius-full\"\n                          : \"glass-radius-lg\",\n\n            // Consciousness feature styles\n            // gazeResponsive && eyeTracker?.isGazing && 'ring-2 ring-blue-400/50 shadow-lg shadow-blue-400/25',\n            isVisible && preloadContent && \"animate-pulse\",\n            biometricResponsive && \"transform-gpu\",\n            // Motion preferences - already handled by consciousness features\n\n            className\n          )}\n          onClick={handleInteraction}\n          onFocus={handleInteraction}\n          ref={(node: HTMLDivElement | null) => {\n            setContainerElement(node);\n            if (ref) {\n              if (typeof ref === \"function\") {\n                ref(node);\n              } else if (\"current\" in ref) {\n                ref.current = node;\n              }\n            }\n          }}\n          {...domProps}\n        >\n          {children}\n        </OptimizedGlass>\n      );\n    }\n\n    return (\n      <div\n        data-glass-component\n        className={cn(\n          // Base container styles\n          \"w-full transition-all duration-300\",\n\n          // Size and centering\n          sizeClasses[effectiveSize],\n          centered && \"mx-auto\",\n\n          // Variant\n          variantClasses[variant],\n\n          // Padding\n          paddingClasses[effectivePadding],\n          ...responsivePaddingClasses,\n\n          // Consciousness feature styles\n          // gazeResponsive && eyeTracker?.isGazing && 'ring-1 ring-blue-400/30 shadow-md shadow-blue-400/10',\n          isVisible && preloadContent && \"animate-pulse opacity-75\",\n          biometricResponsive && \"transform-gpu\",\n          // Motion preferences - already handled by consciousness features\n\n          className\n        )}\n        onClick={handleInteraction}\n        onFocus={handleInteraction}\n        ref={(node: HTMLDivElement | null) => {\n          setContainerElement(node);\n          if (ref) {\n            if (typeof ref === \"function\") {\n              ref(node);\n            } else {\n              ref.current = node;\n            }\n          }\n        }}\n        {...domProps}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nGlassContainer.displayName = \"GlassContainer\";\n\n// Simple Container alias for basic usage\nexport const Container = GlassContainer;\n\n/**\n * Enhanced GlassContainer with consciousness features enabled by default\n * Use this for containers that should be intelligent and adaptive\n */\nexport const ConsciousGlassContainer = forwardRef<\n  HTMLDivElement,\n  GlassContainerProps\n>((props, ref) => (\n  <GlassContainer\n    ref={ref}\n    predictive={true}\n    preloadContent={true}\n    adaptive={true}\n    biometricResponsive={true}\n    trackAchievements={true}\n    achievementId=\"conscious_container_usage\"\n    {...props}\n  />\n));\n\nConsciousGlassContainer.displayName = \"ConsciousGlassContainer\";\n\n/**\n * Utility function to create consciousness-enhanced variants of any container\n */\nexport function withConsciousness<T extends GlassContainerProps>(\n  defaultProps: Partial<ConsciousnessFeatures> = {}\n) {\n  return function EnhancedContainer(props: T) {\n    return (\n      <GlassContainer\n        predictive={true}\n        adaptive={true}\n        trackAchievements={true}\n        {...defaultProps}\n        {...props}\n      />\n    );\n  };\n}\n\n/**\n * Pre-configured consciousness container presets\n */\nexport const ConsciousnessPresets = {\n  /**\n   * Minimal consciousness features for performance-sensitive contexts\n   */\n  minimal: {\n    predictive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Balanced consciousness features for general use\n   */\n  balanced: {\n    predictive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Full consciousness features for immersive experiences\n   */\n  immersive: {\n    predictive: true,\n    preloadContent: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Accessibility-focused consciousness features\n   */\n  accessible: {\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n} as const;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Achievement System\n * Gamified user engagement with progressive rewards and glass-themed achievements\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n  forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  createButtonA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Achievement system types\ninterface Achievement {\n  id: string;\n  title: string;\n  description: string;\n  icon: string;\n  category:\n    | \"interaction\"\n    | \"exploration\"\n    | \"mastery\"\n    | \"social\"\n    | \"creative\"\n    | \"performance\";\n  rarity: \"common\" | \"rare\" | \"epic\" | \"legendary\";\n  xp: number;\n  requirements: AchievementRequirement[];\n  rewards?: AchievementReward[];\n  unlocked: boolean;\n  unlockedAt?: number;\n  progress: number; // 0-1\n  hidden: boolean; // Hidden until certain conditions are met\n}\n\ninterface AchievementRequirement {\n  type:\n    | \"action_count\"\n    | \"streak\"\n    | \"time_spent\"\n    | \"score_reached\"\n    | \"items_collected\"\n    | \"combo\"\n    | \"challenge\";\n  action?: string;\n  count?: number;\n  duration?: number;\n  score?: number;\n  items?: string[];\n  combo?: string[];\n  challenge?: string;\n}\n\ninterface AchievementReward {\n  type: \"xp\" | \"badge\" | \"theme\" | \"effect\" | \"sound\" | \"animation\";\n  value: string | number;\n  description: string;\n}\n\ninterface UserProgress {\n  userId: string;\n  level: number;\n  totalXP: number;\n  currentXP: number;\n  xpToNextLevel: number;\n  achievements: Achievement[];\n  stats: UserStats;\n  streak: number;\n  lastActiveDate: string;\n}\n\ninterface UserStats {\n  totalInteractions: number;\n  sessionsCompleted: number;\n  timeSpent: number; // milliseconds\n  componentsExplored: string[];\n  highestStreak: number;\n  perfectSessions: number;\n  customizationsUnlocked: number;\n  socialInteractions: number;\n}\n\ninterface AchievementNotification {\n  achievement: Achievement;\n  timestamp: number;\n  shown: boolean;\n}\n\ntype AchievementActionContext = Record<string, unknown> & {\n  component?: string;\n  level?: number;\n  theme?: string | number;\n  effect?: string | number;\n  sound?: string | number;\n  type?: string;\n  value?: unknown;\n  action?: string;\n  users?: string[];\n};\n\ntype AchievementDashboardTab = \"progress\" | \"achievements\" | \"stats\";\n\n// Predefined achievements\nconst GLASS_ACHIEVEMENTS: Achievement[] = [\n  // Interaction achievements\n  {\n    id: \"first_click\",\n    title: \"Glass Toucher\",\n    description: \"Made your first interaction with a glass component\",\n    icon: \"\uD83E\uDEF3\",\n    category: \"interaction\",\n    rarity: \"common\",\n    xp: 10,\n    requirements: [{ type: \"action_count\", action: \"click\", count: 1 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n  {\n    id: \"hundred_clicks\",\n    title: \"Glass Enthusiast\",\n    description: \"Clicked glass components 100 times\",\n    icon: \"\uD83D\uDC8E\",\n    category: \"interaction\",\n    rarity: \"rare\",\n    xp: 50,\n    requirements: [{ type: \"action_count\", action: \"click\", count: 100 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n  {\n    id: \"hover_master\",\n    title: \"Ethereal Navigator\",\n    description: \"Hovered over glass elements with perfect precision\",\n    icon: \"\uD83D\uDC7B\",\n    category: \"mastery\",\n    rarity: \"epic\",\n    xp: 100,\n    requirements: [{ type: \"action_count\", action: \"hover\", count: 500 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n\n  // Exploration achievements\n  {\n    id: \"component_explorer\",\n    title: \"Glass Archaeologist\",\n    description: \"Discovered and interacted with 10 different glass components\",\n    icon: \"\uD83D\uDD0D\",\n    category: \"exploration\",\n    rarity: \"rare\",\n    xp: 75,\n    requirements: [{ type: \"items_collected\", items: [] }], // Dynamically populated\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n  {\n    id: \"hidden_features\",\n    title: \"Secret Keeper\",\n    description: \"Unlocked 5 hidden glass features\",\n    icon: \"\uD83D\uDDDD\uFE0F\",\n    category: \"exploration\",\n    rarity: \"legendary\",\n    xp: 200,\n    requirements: [{ type: \"items_collected\", items: [] }],\n    unlocked: false,\n    progress: 0,\n    hidden: true,\n  },\n\n  // Performance achievements\n  {\n    id: \"speed_demon\",\n    title: \"Glass Lightning\",\n    description: \"Completed 10 interactions in under 5 seconds\",\n    icon: \"\u26A1\",\n    category: \"performance\",\n    rarity: \"epic\",\n    xp: 150,\n    requirements: [{ type: \"challenge\", challenge: \"speed_interactions\" }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n  {\n    id: \"combo_master\",\n    title: \"Glass Virtuoso\",\n    description: \"Performed a perfect 20-action combo\",\n    icon: \"\uD83C\uDFAD\",\n    category: \"performance\",\n    rarity: \"legendary\",\n    xp: 300,\n    requirements: [\n      { type: \"combo\", combo: [\"click\", \"hover\", \"scroll\", \"focus\"] },\n    ],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n\n  // Time-based achievements\n  {\n    id: \"night_owl\",\n    title: \"Midnight Glass Shaper\",\n    description: \"Used glass components between midnight and 6 AM\",\n    icon: \"\uD83E\uDD89\",\n    category: \"creative\",\n    rarity: \"rare\",\n    xp: 80,\n    requirements: [{ type: \"challenge\", challenge: \"night_usage\" }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n  {\n    id: \"marathon_user\",\n    title: \"Glass Endurance Master\",\n    description: \"Spent 2 hours continuously using glass components\",\n    icon: \"\uD83C\uDFC3\u200D\u2642\uFE0F\",\n    category: \"mastery\",\n    rarity: \"epic\",\n    xp: 200,\n    requirements: [{ type: \"time_spent\", duration: 7200000 }], // 2 hours\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n\n  // Social achievements\n  {\n    id: \"collaborator\",\n    title: \"Glass Harmonizer\",\n    description: \"Collaborated with others using glass components\",\n    icon: \"\uD83E\uDD1D\",\n    category: \"social\",\n    rarity: \"rare\",\n    xp: 100,\n    requirements: [{ type: \"action_count\", action: \"collaborate\", count: 10 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n\n  // Creative achievements\n  {\n    id: \"customizer\",\n    title: \"Glass Artisan\",\n    description: \"Customized glass components with unique styles\",\n    icon: \"\uD83C\uDFA8\",\n    category: \"creative\",\n    rarity: \"epic\",\n    xp: 150,\n    requirements: [{ type: \"action_count\", action: \"customize\", count: 25 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n\n  // Mastery achievements\n  {\n    id: \"streak_master\",\n    title: \"Consistency Crystal\",\n    description: \"Maintained a 30-day streak of glass interactions\",\n    icon: \"\uD83D\uDCA0\",\n    category: \"mastery\",\n    rarity: \"legendary\",\n    xp: 500,\n    requirements: [{ type: \"streak\", count: 30 }],\n    unlocked: false,\n    progress: 0,\n    hidden: false,\n  },\n];\n\n// Achievement engine\nclass GlassAchievementEngine {\n  private progress: UserProgress;\n  private achievements: Achievement[];\n  private actionHistory: Array<{\n    action: string;\n    timestamp: number;\n    context: AchievementActionContext;\n  }> = [];\n  private sessionStart: number = Date.now();\n  private notifications: AchievementNotification[] = [];\n  private listeners: Array<(notification: AchievementNotification) => void> =\n    [];\n  private checkInterval: NodeJS.Timeout | null = null;\n\n  constructor(userId: string = \"default\") {\n    this.achievements = [...GLASS_ACHIEVEMENTS];\n    this.progress = {\n      userId,\n      level: 1,\n      totalXP: 0,\n      currentXP: 0,\n      xpToNextLevel: 100,\n      achievements: this.achievements,\n      stats: {\n        totalInteractions: 0,\n        sessionsCompleted: 0,\n        timeSpent: 0,\n        componentsExplored: [],\n        highestStreak: 0,\n        perfectSessions: 0,\n        customizationsUnlocked: 0,\n        socialInteractions: 0,\n      },\n      streak: 0,\n      lastActiveDate: new Date().toDateString(),\n    };\n\n    this.loadProgress();\n    this.updateStreak();\n    this.startPeriodicChecks();\n  }\n\n  private loadProgress(): void {\n    // CRITICAL SSR FIX: Skip localStorage access on server\n    if (typeof localStorage === \"undefined\") {\n      return;\n    }\n\n    try {\n      const stored = localStorage.getItem(\n        `auraglass-achievements-${this.progress.userId}`\n      );\n      if (stored) {\n        const data = JSON.parse(stored) as Partial<UserProgress>;\n        this.progress = { ...this.progress, ...data };\n\n        // Merge persisted achievements with newer definitions.\n        this.progress.achievements = this.mergeAchievements(\n          data.achievements || []\n        );\n      }\n    } catch {\n      // Ignore invalid persisted achievement data.\n    }\n  }\n\n  private mergeAchievements(storedAchievements: Achievement[]): Achievement[] {\n    const merged = [...this.achievements];\n\n    storedAchievements.forEach((stored) => {\n      const index = merged.findIndex((a) => a.id === stored.id);\n      if (index >= 0) {\n        merged[index] = { ...merged[index], ...stored };\n      }\n    });\n\n    return merged;\n  }\n\n  private saveProgress(): void {\n    // CRITICAL SSR FIX: Skip localStorage access on server\n    if (typeof localStorage === \"undefined\") {\n      return;\n    }\n\n    try {\n      localStorage.setItem(\n        `auraglass-achievements-${this.progress.userId}`,\n        JSON.stringify(this.progress)\n      );\n    } catch {\n      // Ignore storage failures; progress remains active in memory.\n    }\n  }\n\n  private updateStreak(): void {\n    const today = new Date().toDateString();\n    const yesterday = new Date(Date.now() - 86400000).toDateString();\n\n    if (this.progress.lastActiveDate === yesterday) {\n      this.progress.streak++;\n    } else if (this.progress.lastActiveDate !== today) {\n      this.progress.streak = 1;\n    }\n\n    this.progress.lastActiveDate = today;\n    this.progress.stats.highestStreak = Math.max(\n      this.progress.stats.highestStreak,\n      this.progress.streak\n    );\n  }\n\n  private startPeriodicChecks(): void {\n    this.checkInterval = setInterval(() => {\n      this.checkTimeBasedAchievements();\n    }, 10000); // Check every 10 seconds\n  }\n\n  recordAction(action: string, context: AchievementActionContext = {}): void {\n    const timestamp = Date.now();\n\n    this.actionHistory.push({ action, timestamp, context });\n    this.progress.stats.totalInteractions++;\n\n    // Keep history manageable\n    if (this.actionHistory.length > 1000) {\n      this.actionHistory = this.actionHistory.slice(-500);\n    }\n\n    // Update specific stats\n    if (action === \"component_interaction\" && context.component) {\n      if (!this.progress.stats.componentsExplored.includes(context.component)) {\n        this.progress.stats.componentsExplored.push(context.component);\n      }\n    }\n\n    if (action === \"customize\") {\n      this.progress.stats.customizationsUnlocked++;\n    }\n\n    if (action === \"collaborate\") {\n      this.progress.stats.socialInteractions++;\n    }\n\n    // Check achievements\n    this.checkAchievements();\n  }\n\n  private checkAchievements(): void {\n    this.progress.achievements.forEach((achievement) => {\n      if (achievement.unlocked) return;\n\n      const newProgress = this.calculateAchievementProgress(achievement);\n      achievement.progress = newProgress;\n\n      if (newProgress >= 1) {\n        this.unlockAchievement(achievement);\n      }\n    });\n  }\n\n  private calculateAchievementProgress(achievement: Achievement): number {\n    let totalProgress = 0;\n    const requirements = achievement.requirements;\n\n    requirements.forEach((req) => {\n      let reqProgress = 0;\n\n      switch (req.type) {\n        case \"action_count\":\n          if (req.action && req.count) {\n            const actionCount = this.actionHistory.filter(\n              (a) => a.action === req.action\n            ).length;\n            reqProgress = Math.min(1, actionCount / req.count);\n          }\n          break;\n\n        case \"streak\":\n          if (req.count) {\n            reqProgress = Math.min(1, this.progress.streak / req.count);\n          }\n          break;\n\n        case \"time_spent\":\n          if (req.duration) {\n            const sessionTime = Date.now() - this.sessionStart;\n            reqProgress = Math.min(1, sessionTime / req.duration);\n          }\n          break;\n\n        case \"items_collected\":\n          if (achievement.id === \"component_explorer\") {\n            reqProgress = Math.min(\n              1,\n              this.progress.stats.componentsExplored.length / 10\n            );\n          }\n          break;\n\n        case \"challenge\":\n          reqProgress = this.checkChallenge(req.challenge || \"\");\n          break;\n\n        case \"combo\":\n          reqProgress = this.checkCombo(req.combo || []);\n          break;\n      }\n\n      totalProgress += reqProgress;\n    });\n\n    return totalProgress / requirements.length;\n  }\n\n  private checkChallenge(challenge: string): number {\n    switch (challenge) {\n      case \"speed_interactions\":\n        // Check for 10 interactions in 5 seconds\n        const recent = this.actionHistory.filter(\n          (a) => Date.now() - a.timestamp < 5000\n        );\n        return Math.min(1, recent.length / 10);\n\n      case \"night_usage\":\n        const hour = new Date().getHours();\n        return hour >= 0 && hour < 6 ? 1 : 0;\n\n      default:\n        return 0;\n    }\n  }\n\n  private checkCombo(comboActions: string[]): number {\n    if (comboActions.length === 0) return 0;\n\n    // Check for sequence of actions in recent history\n    const recentActions = this.actionHistory.slice(-20).map((a) => a.action);\n    let bestCombo = 0;\n    let currentCombo = 0;\n\n    recentActions.forEach((action) => {\n      if (comboActions.includes(action)) {\n        currentCombo++;\n      } else {\n        bestCombo = Math.max(bestCombo, currentCombo);\n        currentCombo = 0;\n      }\n    });\n\n    bestCombo = Math.max(bestCombo, currentCombo);\n    return Math.min(1, bestCombo / 20);\n  }\n\n  private checkTimeBasedAchievements(): void {\n    const sessionTime = Date.now() - this.sessionStart;\n    this.progress.stats.timeSpent = sessionTime;\n\n    // Check time-based achievements\n    this.checkAchievements();\n  }\n\n  private unlockAchievement(achievement: Achievement): void {\n    achievement.unlocked = true;\n    achievement.unlockedAt = Date.now();\n    achievement.progress = 1;\n\n    // Award XP\n    this.addXP(achievement.xp);\n\n    // Create notification\n    const notification: AchievementNotification = {\n      achievement: { ...achievement },\n      timestamp: Date.now(),\n      shown: false,\n    };\n\n    this.notifications.push(notification);\n\n    // Notify listeners\n    this.listeners.forEach((listener) => listener(notification));\n\n    // Apply rewards\n    this.applyAchievementRewards(achievement);\n\n    this.saveProgress();\n  }\n\n  private addXP(xp: number): void {\n    this.progress.totalXP += xp;\n    this.progress.currentXP += xp;\n\n    // Level up check\n    while (this.progress.currentXP >= this.progress.xpToNextLevel) {\n      this.progress.currentXP -= this.progress.xpToNextLevel;\n      this.progress.level++;\n      this.progress.xpToNextLevel = this.calculateXPForNextLevel();\n\n      // Level up achievement\n      this.recordAction(\"level_up\", { level: this.progress.level });\n    }\n  }\n\n  private calculateXPForNextLevel(): number {\n    // Exponential XP curve\n    return Math.floor(100 * Math.pow(1.5, this.progress.level - 1));\n  }\n\n  private applyAchievementRewards(achievement: Achievement): void {\n    if (!achievement.rewards) return;\n\n    achievement.rewards.forEach((reward) => {\n      switch (reward.type) {\n        case \"theme\":\n          // Unlock theme\n          this.recordAction(\"theme_unlocked\", { theme: reward.value });\n          break;\n        case \"effect\":\n          // Unlock visual effect\n          this.recordAction(\"effect_unlocked\", { effect: reward.value });\n          break;\n        case \"sound\":\n          // Unlock sound\n          this.recordAction(\"sound_unlocked\", { sound: reward.value });\n          break;\n      }\n    });\n  }\n\n  getProgress(): UserProgress {\n    return { ...this.progress };\n  }\n\n  getUnlockedAchievements(): Achievement[] {\n    return this.progress.achievements.filter((a) => a.unlocked);\n  }\n\n  getAvailableAchievements(): Achievement[] {\n    return this.progress.achievements.filter((a) => !a.unlocked && !a.hidden);\n  }\n\n  getNotifications(): AchievementNotification[] {\n    return [...this.notifications];\n  }\n\n  markNotificationShown(notificationIndex: number): void {\n    if (this.notifications[notificationIndex]) {\n      this.notifications[notificationIndex].shown = true;\n    }\n  }\n\n  addListener(\n    listener: (notification: AchievementNotification) => void\n  ): () => void {\n    this.listeners.push(listener);\n    return () => {\n      const index = this.listeners.indexOf(listener);\n      if (index > -1) {\n        this.listeners.splice(index, 1);\n      }\n    };\n  }\n\n  cleanup(): void {\n    if (this.checkInterval) {\n      clearInterval(this.checkInterval);\n    }\n    this.saveProgress();\n  }\n}\n\n// React context\nconst AchievementContext = createContext<{\n  engine: GlassAchievementEngine | null;\n  progress: UserProgress | null;\n  recordAction: (action: string, context?: AchievementActionContext) => void;\n  notifications: AchievementNotification[];\n}>({\n  engine: null,\n  progress: null,\n  recordAction: () => {},\n  notifications: [],\n});\n\n// Provider component\nexport function GlassAchievementProvider({\n  children,\n  userId,\n}: {\n  children: React.ReactNode;\n  userId?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<GlassAchievementEngine | null>(null);\n  const [progress, setProgress] = useState<UserProgress | null>(null);\n  const [notifications, setNotifications] = useState<AchievementNotification[]>(\n    []\n  );\n\n  useEffect(() => {\n    engineRef.current = new GlassAchievementEngine(userId);\n    setProgress(engineRef.current.getProgress());\n\n    const removeListener = engineRef.current.addListener((notification) => {\n      setNotifications((prev) => [...prev, notification]);\n    });\n\n    // Update progress periodically\n    const interval = setInterval(() => {\n      if (engineRef.current) {\n        setProgress(engineRef.current.getProgress());\n      }\n    }, 5000);\n\n    return () => {\n      clearInterval(interval);\n      removeListener();\n      if (engineRef.current) {\n        engineRef.current.cleanup();\n      }\n    };\n  }, [userId]);\n\n  const recordAction = useCallback(\n    (action: string, context: AchievementActionContext = {}) => {\n      if (engineRef.current) {\n        engineRef.current.recordAction(action, context);\n      }\n    },\n    []\n  );\n\n  const value = {\n    engine: engineRef.current || null,\n    progress,\n    recordAction,\n    notifications,\n  };\n\n  return (\n    <AchievementContext.Provider value={value}>\n      {children}\n    </AchievementContext.Provider>\n  );\n}\n\n// Hook to use achievements\nexport function useAchievements() {\n  const context = useContext(AchievementContext);\n  if (!context) {\n    throw new Error(\n      \"useAchievements must be used within GlassAchievementProvider\"\n    );\n  }\n  return context;\n}\n\n// Achievement notification component\nexport function GlassAchievementNotifications({\n  className,\n  position = \"top-right\",\n}: {\n  className?: string;\n  position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n}) {\n  const { notifications, engine } = useAchievements();\n  const [visibleNotifications, setVisibleNotifications] = useState<\n    AchievementNotification[]\n  >([]);\n\n  useEffect(() => {\n    const newNotifications = notifications.filter((n) => !n.shown);\n    if (newNotifications.length > 0) {\n      setVisibleNotifications((prev) => [...prev, ...newNotifications]);\n\n      // Mark as shown\n      newNotifications.forEach((_, index) => {\n        const actualIndex = notifications.indexOf(newNotifications[index]);\n        engine?.markNotificationShown(actualIndex);\n      });\n    }\n  }, [notifications, engine]);\n\n  const removeNotification = (notification: AchievementNotification) => {\n    setVisibleNotifications((prev) => prev.filter((n) => n !== notification));\n  };\n\n  const positionClasses = {\n    \"top-right\": \"top-4 right-4\",\n    \"top-left\": \"top-4 left-4\",\n    \"bottom-right\": \"bottom-4 right-4\",\n    \"bottom-left\": \"bottom-4 left-4\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"fixed z-50 glass-gap-2\",\n        positionClasses[position],\n        className\n      )}\n    >\n      <AnimatePresence>\n        {visibleNotifications.map((notification, index) => (\n          <AchievementNotificationCard\n            key={`${notification.achievement.id}-${notification.timestamp}`}\n            notification={notification}\n            onClose={() => removeNotification(notification)}\n            delay={index * 200}\n          />\n        ))}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Individual notification card\nconst AchievementNotificationCard = forwardRef<\n  HTMLDivElement,\n  {\n    notification: AchievementNotification;\n    onClose: () => void;\n    delay?: number;\n  }\n>(({ notification, onClose, delay = 0 }, ref) => {\n  const prefersReducedMotion = useReducedMotion();\n  const { achievement } = notification;\n  const componentId = useA11yId(\"achievement-notification\");\n\n  // Announce achievement unlock to screen readers\n  useEffect(() => {\n    announceToScreenReader(\n      `Achievement unlocked: ${achievement.title}. ${achievement.description}. You earned ${achievement.xp} XP.`,\n      \"polite\"\n    );\n  }, [achievement]);\n\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      onClose();\n    }, ANIMATION.DURATION.slower + delay);\n\n    return () => clearTimeout(timer);\n  }, [onClose, delay]);\n\n  const handleKeyDown = useCallback(\n    (event: React.KeyboardEvent) => {\n      if (event.key === \"Escape\") {\n        onClose();\n      }\n    },\n    [onClose]\n  );\n\n  const rarityColors = {\n    common: \"from-gray-600 to-gray-700\",\n    rare: \"from-blue-600 to-blue-700\",\n    epic: \"from-purple-600 to-purple-700\",\n    legendary: \"from-amber-500 to-orange-600\",\n  };\n\n  return (\n    <motion.div\n      ref={ref}\n      id={componentId}\n      role=\"alert\"\n      aria-live=\"polite\"\n      aria-atomic=\"true\"\n      tabIndex={0}\n      onKeyDown={handleKeyDown}\n      className=\"glass-relative\"\n      initial={{ x: 300, opacity: 0, scale: 0.8 }}\n      animate={prefersReducedMotion ? {} : { x: 0, opacity: 1, scale: 1 }}\n      exit={{ x: 300, opacity: 0, scale: 0.8 }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.normal / 1000 }\n      }\n    >\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level4\"\n        intensity=\"strong\"\n        depth={3}\n        tint=\"neutral\"\n        border=\"glow\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className=\"glass-w-80 glass-p-4 glass-relative glass-overflow-hidden glass-radius-lg\"\n      >\n        {/* Rarity glow */}\n        <div\n          className={cn(\n            \"absolute inset-0 opacity-20 bg-gradient-to-br\",\n            rarityColors[achievement.rarity]\n          )}\n        />\n\n        <ContrastGuard>\n          <div className=\"glass-relative glass-z-10\">\n            {/* Header */}\n            <div className=\"glass-flex glass-items-start glass-justify-between glass-mb-3\">\n              <div className=\"glass-flex glass-items-center glass-gap-3\">\n                <div className=\"glass-text-2xl\">{achievement.icon}</div>\n                <div>\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    <h3 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                      Achievement Unlocked!\n                    </h3>\n                    <span\n                      className={cn(\n                        \"glass-px-2 glass-py-1 glass-text-xs glass-radius-full capitalize\",\n                        achievement.rarity === \"common\" &&\n                          \"bg-white/10 glass-text-secondary\",\n                        achievement.rarity === \"rare\" &&\n                          \"bg-blue-500/25 text-blue-200\",\n                        achievement.rarity === \"epic\" &&\n                          \"bg-purple-500/25 text-purple-200\",\n                        achievement.rarity === \"legendary\" &&\n                          \"bg-amber-500/25 text-amber-200\"\n                      )}\n                    >\n                      {achievement.rarity}\n                    </span>\n                  </div>\n                </div>\n              </div>\n              <button\n                onClick={onClose}\n                className=\"glass-text-xs glass-text-primary-glass-opacity-60 hover:glass-text-primary-glass-opacity-90 glass-focus glass-touch-target\"\n                aria-label=\"Close achievement notification\"\n              >\n                \u2715\n              </button>\n            </div>\n\n            {/* Achievement details */}\n            <div className=\"glass-mb-3\">\n              <h4 className=\"glass-font-medium glass-text-primary-glass-opacity-90 glass-mb-1\">\n                {achievement.title}\n              </h4>\n              <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n                {achievement.description}\n              </p>\n            </div>\n\n            {/* XP reward */}\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                  Reward:\n                </div>\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <span className=\"glass-text-amber-400\">\u2728</span>\n                  <span className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                    +{achievement.xp} XP\n                  </span>\n                </div>\n              </div>\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                {achievement.category}\n              </div>\n            </div>\n          </div>\n        </ContrastGuard>\n      </OptimizedGlass>\n\n      {/* Celebration particles */}\n      <motion.div\n        className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n        initial={{ opacity: 0 }}\n        animate={prefersReducedMotion ? {} : { opacity: [0, 1, 0] }}\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : {\n                duration: ANIMATION.DURATION.slower / 1000,\n                delay: delay / 1000 + 0.5,\n              }\n        }\n      >\n        {Array.from({ length: 12 }, (_, i) => (\n          <motion.div\n            key={i}\n            className=\"glass-absolute glass-w-1 glass-h-1 glass-surface-amber glass-radius-full\"\n            style={{\n              left: \"50%\",\n              top: \"50%\",\n            }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    x: [0, Math.cos((i * 30 * Math.PI) / 180) * 100],\n                    y: [0, Math.sin((i * 30 * Math.PI) / 180) * 100],\n                    opacity: [1, 0],\n                    scale: [1, 0],\n                  }\n            }\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: ANIMATION.DURATION.slower / 1000,\n                    delay: delay / 1000 + 0.5 + i * 0.1,\n                    ease: ANIMATION.EASING.easeOut,\n                  }\n            }\n          />\n        ))}\n      </motion.div>\n    </motion.div>\n  );\n});\n// Achievement dashboard\nexport function GlassAchievementDashboard({\n  className,\n  show = true,\n}: {\n  className?: string;\n  show?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { progress, engine } = useAchievements();\n  const [activeTab, setActiveTab] = useState<\n    \"progress\" | \"achievements\" | \"stats\"\n  >(\"progress\");\n\n  if (!show || !progress) return null;\n\n  const unlockedAchievements = engine?.getUnlockedAchievements() || [];\n  const availableAchievements = engine?.getAvailableAchievements() || [];\n  const tabs: Array<{\n    id: AchievementDashboardTab;\n    label: string;\n    count: number;\n  }> = [\n    { id: \"progress\", label: \"Progress\", count: progress.totalXP },\n    {\n      id: \"achievements\",\n      label: \"Achievements\",\n      count: unlockedAchievements.length,\n    },\n    {\n      id: \"stats\",\n      label: \"Stats\",\n      count: progress.stats.totalInteractions,\n    },\n  ];\n  const stats: Array<{ label: string; value: string | number }> = [\n    {\n      label: \"Interactions\",\n      value: progress.stats.totalInteractions,\n    },\n    {\n      label: \"Components\",\n      value: progress.stats.componentsExplored.length,\n    },\n    { label: \"Streak\", value: progress.streak },\n    {\n      label: \"Sessions\",\n      value: progress.stats.sessionsCompleted,\n    },\n    {\n      label: \"Time Spent\",\n      value: `${Math.floor(progress.stats.timeSpent / 60000)}m`,\n    },\n    { label: \"Social\", value: progress.stats.socialInteractions },\n  ];\n\n  return (\n    <section>\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level3\"\n        intensity=\"medium\"\n        depth={3}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"fixed bottom-4 left-4 w-96 max-h-96 overflow-hidden glass-radius-lg\",\n          className\n        )}\n        role=\"complementary\"\n        aria-label=\"Achievement dashboard\"\n      >\n        {/* Header */}\n        <div className=\"glass-p-4 glass-border-b glass-border-white/10\">\n          <ContrastGuard>\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <h3 className=\"glass-text-lg glass-font-medium glass-text-primary-glass-opacity-90\">\n                Glass Achievements\n              </h3>\n              <div className=\"glass-text-sm glass-text-primary-opacity-70\">\n                Level {progress.level}\n              </div>\n            </div>\n          </ContrastGuard>\n\n          {/* XP Progress bar */}\n          <div className=\"glass-w-full glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-sm glass-h-2 glass-overflow-hidden\">\n            <motion.div\n              className=\"glass-h-full glass-gradient-primary glass-gradient-primary glass-gradient-primary\"\n              animate={{\n                width: `${(progress.currentXP / progress.xpToNextLevel) * 100}%`,\n              }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: ANIMATION.DURATION.slow / 1000 }\n              }\n            />\n          </div>\n          <ContrastGuard>\n            <div className=\"glass-flex glass-justify-between glass-text-xs glass-text-primary-glass-opacity-50 glass-mt-1\">\n              <span>{progress.currentXP} XP</span>\n              <span>{progress.xpToNextLevel} XP to next level</span>\n            </div>\n          </ContrastGuard>\n        </div>\n\n        {/* Tabs */}\n        <div className=\"glass-flex glass-border-b glass-border-white/10\">\n          {tabs.map((tab) => (\n            <button\n              key={tab.id}\n              onClick={() => setActiveTab(tab.id)}\n              className={cn(\n                \"flex-1 glass-px-3 glass-py-2 glass-text-sm transition-colors glass-focus glass-touch-target\",\n                activeTab === tab.id\n                  ? \"glass-text-primary/90 bg-white/10\"\n                  : \"glass-text-primary/60 hover:glass-text-primary/90\"\n              )}\n              aria-label={`${tab.label} tab, ${tab.count} items`}\n            >\n              <ContrastGuard>\n                <div>{tab.label}</div>\n                <div className=\"glass-text-xs\">{tab.count}</div>\n              </ContrastGuard>\n            </button>\n          ))}\n        </div>\n\n        {/* Content */}\n        <div className=\"glass-p-4 glass-max-glass-h-64 glass-overflow-y-auto\">\n          {activeTab === \"progress\" && (\n            <div className=\"glass-gap-3\">\n              <div className=\"glass-grid glass-grid-cols-2 glass-gap-2 glass-text-center\">\n                <div className=\"glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-md glass-p-2\">\n                  <ContrastGuard>\n                    <div className=\"glass-text-lg glass-font-medium glass-text-primary-glass-opacity-90\">\n                      {progress.level}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                      Level\n                    </div>\n                  </ContrastGuard>\n                </div>\n                <div className=\"glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-md glass-p-2\">\n                  <ContrastGuard>\n                    <div className=\"glass-text-lg glass-font-medium glass-text-primary-glass-opacity-90\">\n                      {progress.totalXP}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                      Total XP\n                    </div>\n                  </ContrastGuard>\n                </div>\n              </div>\n\n              <div>\n                <ContrastGuard>\n                  <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90 glass-mb-2\">\n                    In Progress\n                  </h4>\n                </ContrastGuard>\n                <div className=\"glass-gap-2\">\n                  {availableAchievements.slice(0, 3).map((achievement) => (\n                    <div\n                      key={achievement.id}\n                      className=\"glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-sm glass-p-2\"\n                    >\n                      <ContrastGuard>\n                        <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-1\">\n                          <span className=\"glass-text-sm glass-text-primary-glass-opacity-90\">\n                            {achievement.title}\n                          </span>\n                          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                            {(achievement.progress * 100).toFixed(0)}%\n                          </span>\n                        </div>\n                      </ContrastGuard>\n                      <div className=\"glass-w-full glass-surface-subtle glass-radius-full glass-h-1\">\n                        <div\n                          className=\"glass-surface-blue glass-h-1 glass-radius-full\"\n                          style={{ width: `${achievement.progress * 100}%` }}\n                        />\n                      </div>\n                    </div>\n                  ))}\n                </div>\n              </div>\n            </div>\n          )}\n\n          {activeTab === \"achievements\" && (\n            <div className=\"glass-gap-2\">\n              {unlockedAchievements.map((achievement) => (\n                <div\n                  key={achievement.id}\n                  className=\"glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-sm glass-p-3\"\n                >\n                  <ContrastGuard>\n                    <div className=\"glass-flex glass-items-center glass-gap-3\">\n                      <div className=\"glass-text-xl\">{achievement.icon}</div>\n                      <div className=\"glass-flex-1\">\n                        <div className=\"glass-flex glass-items-center glass-justify-between\">\n                          <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                            {achievement.title}\n                          </h4>\n                          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                            +{achievement.xp} XP\n                          </span>\n                        </div>\n                        <p className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                          {achievement.description}\n                        </p>\n                        {achievement.unlockedAt && (\n                          <div className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-mt-1\">\n                            Unlocked{\" \"}\n                            {new Date(\n                              achievement.unlockedAt\n                            ).toLocaleDateString()}\n                          </div>\n                        )}\n                      </div>\n                    </div>\n                  </ContrastGuard>\n                </div>\n              ))}\n            </div>\n          )}\n\n          {activeTab === \"stats\" && (\n            <div className=\"glass-gap-3\">\n              <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n                {stats.map((stat) => (\n                  <div\n                    key={stat.label}\n                    className=\"glass-surface-subtle/5 glass-backdrop-blur-sm glass-radius-md glass-p-2 glass-text-center\"\n                  >\n                    <ContrastGuard>\n                      <div className=\"glass-text-lg glass-font-medium glass-text-primary-glass-opacity-90\">\n                        {stat.value}\n                      </div>\n                      <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {stat.label}\n                      </div>\n                    </ContrastGuard>\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n        </div>\n      </OptimizedGlass>\n    </section>\n  );\n}\n\n// Hook for easy achievement integration\nexport function useAchievementTracker() {\n  const { recordAction } = useAchievements();\n\n  const trackClick = useCallback(\n    (component?: string) => {\n      recordAction(\"click\", { component });\n      if (component) {\n        recordAction(\"component_interaction\", { component });\n      }\n    },\n    [recordAction]\n  );\n\n  const trackHover = useCallback(\n    (component?: string) => {\n      recordAction(\"hover\", { component });\n      if (component) {\n        recordAction(\"component_interaction\", { component });\n      }\n    },\n    [recordAction]\n  );\n\n  const trackCustomization = useCallback(\n    (type: string, value: unknown) => {\n      recordAction(\"customize\", { type, value });\n    },\n    [recordAction]\n  );\n\n  const trackCollaboration = useCallback(\n    (action: string, users: string[]) => {\n      recordAction(\"collaborate\", { action, users });\n    },\n    [recordAction]\n  );\n\n  return {\n    trackClick,\n    trackHover,\n    trackCustomization,\n    trackCollaboration,\n    recordAction,\n  };\n}\n\n// Achievement presets\nexport const achievementPresets = {\n  casual: {\n    xpMultiplier: 1,\n    notificationDuration: ANIMATION.DURATION.normal,\n    showProgress: true,\n  },\n  hardcore: {\n    xpMultiplier: 0.5,\n    notificationDuration: ANIMATION.DURATION.slower,\n    showProgress: true,\n    hiddenAchievements: true,\n  },\n  minimal: {\n    xpMultiplier: 1,\n    notificationDuration: ANIMATION.DURATION.fast,\n    showProgress: false,\n    quietMode: true,\n  },\n};\n\ninterface GlassAchievementSystemProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  userId?: string;\n  showDashboard?: boolean;\n  showNotifications?: boolean;\n  children?: React.ReactNode;\n}\n\nfunction AchievementSummaryCard() {\n  const { progress } = useAchievements();\n\n  const statBlocks = [\n    {\n      label: \"Current level\",\n      value: progress?.level ?? \"\u2014\",\n    },\n    {\n      label: \"Unlocked\",\n      value: progress?.achievements.filter((a) => a.unlocked).length ?? 0,\n    },\n    {\n      label: \"Streak\",\n      value: progress?.streak ?? 0,\n    },\n  ];\n\n  return (\n    <div\n      className={cn(\n        \"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4\",\n        \"glass-border glass-border-white/10 glass-shadow-soft-lg\"\n      )}\n      data-testid=\"glass-achievement-summary\"\n    >\n      <ContrastGuard>\n        <ContrastGuard>\n          <div>\n            <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n              Achievement System\n            </p>\n            <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n              {progress ? progress.stats.totalInteractions : \"Calibrating\"}\n            </h2>\n            <p className=\"glass-text-sm glass-text-secondary\">\n              Total interactions tracked\n            </p>\n          </div>\n          <div className=\"glass-grid glass-grid-cols-3 glass-gap-3\">\n            {statBlocks.map((stat) => (\n              <div\n                key={stat.label}\n                className=\"glass-surface-subtle glass-radius-xl glass-p-3\"\n              >\n                <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n                  {stat.label}\n                </p>\n                <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n                  {stat.value}\n                </p>\n              </div>\n            ))}\n          </div>\n          <div className=\"glass-text-xs glass-text-secondary\">\n            XP to next level: {progress ? progress.xpToNextLevel : \"\u2014\"}\n          </div>\n        </ContrastGuard>\n      </ContrastGuard>\n    </div>\n  );\n}\n\nexport const GlassAchievementSystem: React.FC<GlassAchievementSystemProps> = ({\n  userId,\n  className,\n  children,\n  showDashboard = true,\n  showNotifications = true,\n  ...rest\n}) => (\n  <GlassAchievementProvider userId={userId}>\n    <div\n      className={cn(\n        \"glass-achievement-system glass-relative glass-space-y-4\",\n        className\n      )}\n      {...rest}\n    >\n      {children ?? <AchievementSummaryCard />}\n      {showDashboard && <GlassAchievementDashboard />}\n      {showNotifications && <GlassAchievementNotifications />}\n    </div>\n  </GlassAchievementProvider>\n);\n\nexport default GlassAchievementSystem;\n", "/**\n * AuraGlass Accessibility Utilities\n * WCAG 2.1 AA compliance and accessibility helpers\n */\n\nimport { useId, useState, useEffect, useRef, useCallback } from \"react\";\n\ntype DebouncedCallback<TArgs extends unknown[]> = (...args: TArgs) => void;\n\n/**\n * ARIA role mappings for interactive elements\n */\nexport const ARIA_ROLES = {\n  button: \"button\",\n  link: \"link\",\n  menu: \"menu\",\n  menuitem: \"menuitem\",\n  menubar: \"menubar\",\n  menuitemcheckbox: \"menuitemcheckbox\",\n  menuitemradio: \"menuitemradio\",\n  dialog: \"dialog\",\n  alert: \"alert\",\n  alertdialog: \"alertdialog\",\n  tab: \"tab\",\n  tablist: \"tablist\",\n  tabpanel: \"tabpanel\",\n  navigation: \"navigation\",\n  complementary: \"complementary\",\n  main: \"main\",\n  search: \"search\",\n  form: \"form\",\n  region: \"region\",\n  combobox: \"combobox\",\n  listbox: \"listbox\",\n  option: \"option\",\n  group: \"group\",\n  radiogroup: \"radiogroup\",\n  checkbox: \"checkbox\",\n  radio: \"radio\",\n  switch: \"switch\",\n  slider: \"slider\",\n  spinbutton: \"spinbutton\",\n  progressbar: \"progressbar\",\n  status: \"status\",\n  log: \"log\",\n  marquee: \"marquee\",\n  timer: \"timer\",\n} as const;\n\n/**\n * Generate unique IDs for ARIA relationships\n */\nexport function generateAriaId(prefix = \"glass\"): string {\n  return `${prefix}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Comprehensive ARIA attributes interface\n */\nexport interface AriaProps {\n  id?: string;\n  role?: string;\n  \"aria-label\"?: string;\n  \"aria-labelledby\"?: string;\n  \"aria-describedby\"?: string;\n  \"aria-expanded\"?: boolean;\n  \"aria-haspopup\"?:\n    | boolean\n    | \"false\"\n    | \"true\"\n    | \"menu\"\n    | \"listbox\"\n    | \"tree\"\n    | \"grid\"\n    | \"dialog\";\n  \"aria-pressed\"?: boolean;\n  \"aria-checked\"?: boolean | \"mixed\";\n  \"aria-selected\"?: boolean;\n  \"aria-disabled\"?: boolean;\n  \"aria-hidden\"?: boolean;\n  \"aria-live\"?: \"polite\" | \"assertive\" | \"off\";\n  \"aria-atomic\"?: boolean;\n  \"aria-busy\"?: boolean;\n  \"aria-current\"?: boolean | \"page\" | \"step\" | \"location\" | \"date\" | \"time\";\n  \"aria-invalid\"?: boolean | \"false\" | \"true\" | \"grammar\" | \"spelling\";\n  \"aria-required\"?: boolean;\n  \"aria-controls\"?: string;\n  \"aria-owns\"?: string;\n  \"aria-activedescendant\"?: string;\n  \"aria-modal\"?: boolean;\n  \"aria-multiline\"?: boolean;\n  \"aria-multiselectable\"?: boolean;\n  \"aria-readonly\"?: boolean;\n  \"aria-autocomplete\"?: \"none\" | \"inline\" | \"list\" | \"both\";\n  \"aria-orientation\"?: \"horizontal\" | \"vertical\";\n  \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\";\n  \"aria-valuemin\"?: number;\n  \"aria-valuemax\"?: number;\n  \"aria-valuenow\"?: number;\n  \"aria-valuetext\"?: string;\n  \"aria-posinset\"?: number;\n  \"aria-setsize\"?: number;\n  \"aria-level\"?: number;\n  \"aria-rowcount\"?: number;\n  \"aria-colcount\"?: number;\n  \"aria-rowindex\"?: number;\n  \"aria-colindex\"?: number;\n  \"aria-colspan\"?: number;\n  \"aria-rowspan\"?: number;\n  \"aria-errormessage\"?: string;\n}\n\nexport function buildAriaProps(options: {\n  role?: string;\n  label?: string;\n  labelledBy?: string;\n  describedBy?: string;\n  expanded?: boolean;\n  disabled?: boolean;\n  pressed?: boolean;\n  checked?: boolean;\n  invalid?: boolean;\n  required?: boolean;\n}): AriaProps {\n  const props: AriaProps = {};\n\n  if (options.role) props.role = options.role;\n  if (options.label) props[\"aria-label\"] = options.label;\n  if (options.labelledBy) props[\"aria-labelledby\"] = options.labelledBy;\n  if (options.describedBy) props[\"aria-describedby\"] = options.describedBy;\n  if (options.expanded !== undefined) props[\"aria-expanded\"] = options.expanded;\n  if (options.disabled !== undefined) props[\"aria-disabled\"] = options.disabled;\n  if (options.pressed !== undefined) props[\"aria-pressed\"] = options.pressed;\n  if (options.checked !== undefined) props[\"aria-checked\"] = options.checked;\n  if (options.invalid !== undefined) props[\"aria-invalid\"] = options.invalid;\n  if (options.required !== undefined) props[\"aria-required\"] = options.required;\n\n  return props;\n}\n\n/**\n * Check if an element is visible to screen readers\n */\nexport function isAriaVisible(element: HTMLElement): boolean {\n  // Check aria-hidden\n  if (element.getAttribute(\"aria-hidden\") === \"true\") return false;\n\n  // Check parent aria-hidden\n  let parent = element.parentElement;\n  while (parent) {\n    if (parent.getAttribute(\"aria-hidden\") === \"true\") return false;\n    parent = parent.parentElement;\n  }\n\n  // Check CSS visibility\n  const styles = window.getComputedStyle(element);\n  if (styles.display === \"none\" || styles.visibility === \"hidden\") return false;\n\n  return true;\n}\n\n/**\n * Manage live regions for dynamic content\n */\nexport class LiveRegion {\n  private element: HTMLDivElement;\n  private queue: string[] = [];\n  private isProcessing = false;\n\n  constructor(priority: \"polite\" | \"assertive\" = \"polite\") {\n    this.element = document.createElement(\"div\");\n    this.element.setAttribute(\"role\", \"status\");\n    this.element.setAttribute(\"aria-live\", priority);\n    this.element.setAttribute(\"aria-atomic\", \"true\");\n    this.element.className = \"glass-sr-only\"; // Visually hidden\n    this.element.style.cssText = `\n      position: absolute;\n      left: -10000px;\n      width: 1px;\n      height: 1px;\n      overflow: hidden;\n    `;\n    document.body.appendChild(this.element);\n  }\n\n  announce(message: string) {\n    this.queue.push(message);\n    this.processQueue();\n  }\n\n  private async processQueue() {\n    if (this.isProcessing || this.queue.length === 0) return;\n\n    this.isProcessing = true;\n    const message = this.queue.shift()!;\n\n    // Clear and set new message\n    this.element.textContent = \"\";\n    await new Promise((resolve) => setTimeout(resolve, 100));\n    this.element.textContent = message;\n\n    // Wait before processing next\n    await new Promise((resolve) => setTimeout(resolve, 500));\n    this.isProcessing = false;\n\n    // Process next message\n    this.processQueue();\n  }\n\n  destroy() {\n    document.body.removeChild(this.element);\n  }\n}\n\n/**\n * Keyboard navigation helpers\n */\nexport const KEYS = {\n  ENTER: \"Enter\",\n  SPACE: \" \",\n  ESCAPE: \"Escape\",\n  TAB: \"Tab\",\n  ARROW_UP: \"ArrowUp\",\n  ARROW_DOWN: \"ArrowDown\",\n  ARROW_LEFT: \"ArrowLeft\",\n  ARROW_RIGHT: \"ArrowRight\",\n  HOME: \"Home\",\n  END: \"End\",\n  PAGE_UP: \"PageUp\",\n  PAGE_DOWN: \"PageDown\",\n} as const;\n\n/**\n * Check if keyboard event is a navigation key\n */\nexport function isNavigationKey(key: string): boolean {\n  const navigationKeys: readonly string[] = [\n    KEYS.TAB,\n    KEYS.ARROW_UP,\n    KEYS.ARROW_DOWN,\n    KEYS.ARROW_LEFT,\n    KEYS.ARROW_RIGHT,\n    KEYS.HOME,\n    KEYS.END,\n    KEYS.PAGE_UP,\n    KEYS.PAGE_DOWN,\n  ];\n  return navigationKeys.includes(key);\n}\n\n/**\n * Check if keyboard event is an activation key\n */\nexport function isActivationKey(key: string): boolean {\n  return key === KEYS.ENTER || key === KEYS.SPACE;\n}\n\n/**\n * Ensure minimum touch target size (WCAG 2.5.5)\n */\nexport function ensureMinimumTouchTarget(element: HTMLElement, minSize = 44) {\n  const rect = element.getBoundingClientRect();\n\n  if (rect.width < minSize || rect.height < minSize) {\n    // Add padding to meet minimum size\n    const paddingX = Math.max(0, (minSize - rect.width) / 2);\n    const paddingY = Math.max(0, (minSize - rect.height) / 2);\n\n    element.style.padding = `${paddingY}px ${paddingX}px`;\n  }\n}\n\n/**\n * Make element screen reader only\n */\nexport function srOnly(element: HTMLElement) {\n  element.style.cssText = `\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    margin: -1px;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border-width: 0;\n  `;\n}\n\n/**\n * Check if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n  return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/**\n * Check if user prefers high contrast\n */\nexport function prefersHighContrast(): boolean {\n  return window.matchMedia(\"(prefers-contrast: high)\").matches;\n}\n\n/**\n * Create skip link for keyboard navigation\n */\nexport function createSkipLink(\n  targetId: string,\n  text = \"Skip to main content\"\n): HTMLAnchorElement {\n  const link = document.createElement(\"a\");\n  link.href = `#${targetId}`;\n  link.textContent = text;\n  link.className = \"glass-skip-link\";\n  link.style.cssText = `\n    position: absolute;\n    left: -10000px;\n    top: auto;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n  `;\n\n  // Show on focus\n  link.addEventListener(\"focus\", () => {\n    link.style.cssText = `\n      position: absolute;\n      left: 50%;\n      top: 10px;\n      transform: translateX(-50%);\n      z-index: 100000;\n      padding: 8px 16px;\n      background: var(--glass-bg-strong);\n      border: 2px solid var(--glass-border-strong);\n      border-radius: var(--glass-radius-md);\n      color: var(--glass-text-primary);\n      text-decoration: none;\n      /* Backdrop blur via tokenized surfaces */\n    `;\n  });\n\n  link.addEventListener(\"blur\", () => {\n    link.style.cssText = `\n      position: absolute;\n      left: -10000px;\n      top: auto;\n      width: 1px;\n      height: 1px;\n      overflow: hidden;\n    `;\n  });\n\n  return link;\n}\n\n/**\n * Debounce function for reducing announcement frequency\n */\nexport function debounceAnnouncement<TArgs extends unknown[]>(\n  func: DebouncedCallback<TArgs>,\n  delay = 500\n) {\n  let timeoutId: NodeJS.Timeout;\n\n  return (...args: TArgs) => {\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(() => func(...args), delay);\n  };\n}\n\n/**\n * Format number for screen reader announcement\n */\nexport function formatNumberForAnnouncement(num: number): string {\n  // Add spaces between digits for better pronunciation\n  return num.toString().split(\"\").join(\" \");\n}\n\n/**\n * Build descriptive text for complex UI elements\n */\nexport function buildDescription(parts: (string | undefined)[]): string {\n  return parts.filter(Boolean).join(\", \");\n}\n\n/**\n * React hook for generating consistent accessibility IDs\n */\nexport const useA11yId = (prefix?: string): string => {\n  const id = useId();\n  return prefix ? `${prefix}-${id}` : id;\n};\n\n/**\n * Form field accessibility helpers\n */\nexport interface FormFieldA11yProps extends AriaProps {\n  id?: string;\n  \"aria-label\"?: string;\n  \"aria-labelledby\"?: string;\n  \"aria-describedby\"?: string;\n  \"aria-required\"?: boolean;\n  \"aria-invalid\"?: boolean | \"false\" | \"true\" | \"grammar\" | \"spelling\";\n  \"aria-errormessage\"?: string;\n}\n\nexport function createFormFieldA11y(options: {\n  id?: string;\n  label?: string;\n  description?: string;\n  error?: string;\n  required?: boolean;\n  invalid?: boolean;\n  disabled?: boolean;\n  labelId?: string;\n  descriptionId?: string;\n  errorId?: string;\n}): FormFieldA11yProps {\n  const {\n    id,\n    label,\n    description,\n    error,\n    required = false,\n    invalid = false,\n    disabled = false,\n    labelId,\n    descriptionId,\n    errorId,\n  } = options;\n\n  const attrs: FormFieldA11yProps = {};\n\n  if (id) attrs.id = id;\n  if (label && !labelId) attrs[\"aria-label\"] = label;\n  if (labelId) attrs[\"aria-labelledby\"] = labelId;\n  if (required) attrs[\"aria-required\"] = true;\n  if (invalid) attrs[\"aria-invalid\"] = true;\n  if (disabled) attrs[\"aria-disabled\"] = true;\n\n  // Build describedby from available descriptions\n  const describedByIds = [];\n  if (description && descriptionId) describedByIds.push(descriptionId);\n  if (error && errorId) describedByIds.push(errorId);\n  if (describedByIds.length > 0) {\n    attrs[\"aria-describedby\"] = describedByIds.join(\" \");\n  }\n\n  if (error && errorId) {\n    attrs[\"aria-errormessage\"] = errorId;\n  }\n\n  return attrs;\n}\n\n/**\n * Button accessibility helpers\n */\nexport interface ButtonA11yProps extends AriaProps {\n  id?: string;\n  \"aria-label\"?: string;\n  \"aria-describedby\"?: string;\n  \"aria-pressed\"?: boolean;\n  \"aria-expanded\"?: boolean;\n  \"aria-controls\"?: string;\n  \"aria-haspopup\"?:\n    | boolean\n    | \"false\"\n    | \"true\"\n    | \"menu\"\n    | \"listbox\"\n    | \"tree\"\n    | \"grid\"\n    | \"dialog\";\n}\n\nexport function createButtonA11y(options: {\n  id?: string;\n  label?: string;\n  description?: string;\n  pressed?: boolean;\n  expanded?: boolean;\n  controls?: string;\n  haspopup?: boolean | \"menu\" | \"listbox\" | \"tree\" | \"grid\" | \"dialog\";\n  disabled?: boolean;\n  descriptionId?: string;\n}): ButtonA11yProps {\n  const {\n    id,\n    label,\n    description,\n    pressed,\n    expanded,\n    controls,\n    haspopup,\n    disabled = false,\n    descriptionId,\n  } = options;\n\n  const attrs: ButtonA11yProps = {};\n\n  if (id) attrs.id = id;\n  if (label) attrs[\"aria-label\"] = label;\n  if (description && descriptionId) attrs[\"aria-describedby\"] = descriptionId;\n  if (pressed !== undefined) attrs[\"aria-pressed\"] = pressed;\n  if (expanded !== undefined) attrs[\"aria-expanded\"] = expanded;\n  if (controls) attrs[\"aria-controls\"] = controls;\n  if (haspopup !== undefined) attrs[\"aria-haspopup\"] = haspopup;\n  if (disabled) attrs[\"aria-disabled\"] = true;\n\n  return attrs;\n}\n\n/**\n * Navigation accessibility helpers\n */\nexport interface NavigationA11yProps extends AriaProps {\n  id?: string;\n  \"aria-label\"?: string;\n  \"aria-current\"?: boolean | \"page\" | \"step\" | \"location\" | \"date\" | \"time\";\n  \"aria-expanded\"?: boolean;\n  \"aria-controls\"?: string;\n  \"aria-owns\"?: string;\n  \"aria-level\"?: number;\n  \"aria-posinset\"?: number;\n  \"aria-setsize\"?: number;\n}\n\nexport function createNavigationA11y(options: {\n  id?: string;\n  label?: string;\n  current?: boolean | \"page\" | \"step\" | \"location\" | \"date\" | \"time\";\n  expanded?: boolean;\n  controls?: string;\n  owns?: string;\n  level?: number;\n  posinset?: number;\n  setsize?: number;\n}): NavigationA11yProps {\n  const {\n    id,\n    label,\n    current,\n    expanded,\n    controls,\n    owns,\n    level,\n    posinset,\n    setsize,\n  } = options;\n\n  const attrs: NavigationA11yProps = {};\n\n  if (id) attrs.id = id;\n  if (label) attrs[\"aria-label\"] = label;\n  if (current !== undefined) attrs[\"aria-current\"] = current;\n  if (expanded !== undefined) attrs[\"aria-expanded\"] = expanded;\n  if (controls) attrs[\"aria-controls\"] = controls;\n  if (owns) attrs[\"aria-owns\"] = owns;\n  if (level !== undefined) attrs[\"aria-level\"] = level;\n  if (posinset !== undefined) attrs[\"aria-posinset\"] = posinset;\n  if (setsize !== undefined) attrs[\"aria-setsize\"] = setsize;\n\n  return attrs;\n}\n\n/**\n * Modal accessibility helpers\n */\nexport interface ModalA11yProps extends AriaProps {\n  id?: string;\n  role: \"dialog\";\n  \"aria-modal\"?: boolean;\n  \"aria-labelledby\"?: string;\n  \"aria-describedby\"?: string;\n}\n\nexport function createModalA11y(options: {\n  id?: string;\n  titleId?: string;\n  descriptionId?: string;\n  modal?: boolean;\n}): ModalA11yProps {\n  const { id, titleId, descriptionId, modal = true } = options;\n\n  const attrs: ModalA11yProps = {\n    role: \"dialog\",\n  };\n\n  if (id) attrs.id = id;\n  if (modal) attrs[\"aria-modal\"] = true;\n  if (titleId) attrs[\"aria-labelledby\"] = titleId;\n  if (descriptionId) attrs[\"aria-describedby\"] = descriptionId;\n\n  return attrs;\n}\n\n/**\n * Combobox/Select accessibility helpers\n */\nexport function createComboboxA11y(options: {\n  id?: string;\n  label?: string;\n  expanded?: boolean;\n  controls?: string;\n  activedescendant?: string;\n  hasPopup?: \"listbox\" | \"menu\" | \"tree\" | \"grid\" | \"dialog\";\n  autocomplete?: \"none\" | \"inline\" | \"list\" | \"both\";\n  required?: boolean;\n  invalid?: boolean;\n  disabled?: boolean;\n  labelId?: string;\n  descriptionId?: string;\n}): AriaProps {\n  const {\n    id,\n    label,\n    expanded,\n    controls,\n    activedescendant,\n    hasPopup = \"listbox\",\n    autocomplete = \"list\",\n    required = false,\n    invalid = false,\n    disabled = false,\n    labelId,\n    descriptionId,\n  } = options;\n\n  const attrs: AriaProps = {\n    role: \"combobox\",\n    \"aria-autocomplete\": autocomplete,\n  };\n\n  if (id) attrs.id = id;\n  if (label && !labelId) attrs[\"aria-label\"] = label;\n  if (labelId) attrs[\"aria-labelledby\"] = labelId;\n  if (descriptionId) attrs[\"aria-describedby\"] = descriptionId;\n  if (expanded !== undefined) attrs[\"aria-expanded\"] = expanded;\n  if (controls) attrs[\"aria-controls\"] = controls;\n  if (activedescendant) attrs[\"aria-activedescendant\"] = activedescendant;\n  if (hasPopup) attrs[\"aria-haspopup\"] = hasPopup;\n  if (required) attrs[\"aria-required\"] = true;\n  if (invalid) attrs[\"aria-invalid\"] = true;\n  if (disabled) attrs[\"aria-disabled\"] = true;\n\n  return attrs;\n}\n\n/**\n * Listbox option accessibility helpers\n */\nexport function createListboxOptionA11y(options: {\n  id?: string;\n  selected?: boolean;\n  disabled?: boolean;\n  posinset?: number;\n  setsize?: number;\n}): AriaProps {\n  const { id, selected, disabled, posinset, setsize } = options;\n\n  const attrs: AriaProps = {\n    role: \"option\",\n  };\n\n  if (id) attrs.id = id;\n  if (selected !== undefined) attrs[\"aria-selected\"] = selected;\n  if (disabled) attrs[\"aria-disabled\"] = true;\n  if (posinset !== undefined) attrs[\"aria-posinset\"] = posinset;\n  if (setsize !== undefined) attrs[\"aria-setsize\"] = setsize;\n\n  return attrs;\n}\n\n/**\n * Pagination accessibility helpers\n */\nexport function createPaginationA11y(options: {\n  id?: string;\n  label?: string;\n  current?: boolean;\n  disabled?: boolean;\n  page?: number;\n}): AriaProps {\n  const { id, label, current, disabled, page } = options;\n\n  const attrs: AriaProps = {};\n\n  if (id) attrs.id = id;\n  if (label) attrs[\"aria-label\"] = label;\n  if (current) attrs[\"aria-current\"] = \"page\";\n  if (disabled) attrs[\"aria-disabled\"] = true;\n\n  return attrs;\n}\n\n/**\n * Focus management utilities\n */\nexport const focusUtils = {\n  /**\n   * Set focus to element by ID with optional delay\n   */\n  focusById: (id: string, delay = 0): void => {\n    setTimeout(() => {\n      const element = document.getElementById(id);\n      if (element) {\n        element.focus();\n      }\n    }, delay);\n  },\n\n  /**\n   * Focus first focusable element within container\n   */\n  focusFirst: (container: HTMLElement): void => {\n    const focusable = container.querySelector(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled])'\n    ) as HTMLElement;\n\n    if (focusable) {\n      focusable.focus();\n    }\n  },\n\n  /**\n   * Focus last focusable element within container\n   */\n  focusLast: (container: HTMLElement): void => {\n    const focusable = container.querySelectorAll(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled])'\n    );\n\n    const lastFocusable = focusable[focusable.length - 1] as HTMLElement;\n    if (lastFocusable) {\n      lastFocusable.focus();\n    }\n  },\n\n  /**\n   * Get all focusable elements within container\n   */\n  getFocusableElements: (container: HTMLElement): HTMLElement[] => {\n    const elements = container.querySelectorAll(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]):not([disabled])'\n    );\n\n    return Array.from(elements) as HTMLElement[];\n  },\n};\n\n/**\n * Keyboard event handlers for common accessibility patterns\n */\nexport const keyboardHandlers = {\n  /**\n   * Handle escape key\n   */\n  onEscape:\n    (callback: () => void) => (event: KeyboardEvent | React.KeyboardEvent) => {\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        event.stopPropagation();\n        callback();\n      }\n    },\n\n  /**\n   * Handle enter or space key for button-like elements\n   */\n  onActivate:\n    (callback: () => void) => (event: KeyboardEvent | React.KeyboardEvent) => {\n      if (event.key === \"Enter\" || event.key === \" \") {\n        event.preventDefault();\n        event.stopPropagation();\n        callback();\n      }\n    },\n\n  /**\n   * Handle arrow navigation\n   */\n  onArrowNavigation:\n    (options: {\n      onArrowUp?: () => void;\n      onArrowDown?: () => void;\n      onArrowLeft?: () => void;\n      onArrowRight?: () => void;\n      onHome?: () => void;\n      onEnd?: () => void;\n    }) =>\n    (event: KeyboardEvent | React.KeyboardEvent) => {\n      const {\n        onArrowUp,\n        onArrowDown,\n        onArrowLeft,\n        onArrowRight,\n        onHome,\n        onEnd,\n      } = options;\n\n      switch (event.key) {\n        case \"ArrowUp\":\n          event.preventDefault();\n          onArrowUp?.();\n          break;\n        case \"ArrowDown\":\n          event.preventDefault();\n          onArrowDown?.();\n          break;\n        case \"ArrowLeft\":\n          event.preventDefault();\n          onArrowLeft?.();\n          break;\n        case \"ArrowRight\":\n          event.preventDefault();\n          onArrowRight?.();\n          break;\n        case \"Home\":\n          event.preventDefault();\n          onHome?.();\n          break;\n        case \"End\":\n          event.preventDefault();\n          onEnd?.();\n          break;\n      }\n    },\n};\n\n/**\n * Announce messages to screen readers\n */\nexport const announceToScreenReader = (\n  message: string,\n  priority: \"polite\" | \"assertive\" = \"polite\"\n): void => {\n  const announcement = document.createElement(\"div\");\n  announcement.setAttribute(\"aria-live\", priority);\n  announcement.setAttribute(\"aria-atomic\", \"true\");\n  announcement.className = \"glass-sr-only\";\n  announcement.style.cssText = `\n    position: absolute;\n    left: -10000px;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border-width: 0;\n  `;\n  announcement.textContent = message;\n\n  document.body.appendChild(announcement);\n\n  // Remove after announcement\n  setTimeout(() => {\n    if (document.body.contains(announcement)) {\n      document.body.removeChild(announcement);\n    }\n  }, 1000);\n};\n\n/**\n * Generate loading state accessibility attributes\n */\nexport const createLoadingA11y = (\n  loading: boolean,\n  loadingText = \"Loading\"\n): AriaProps => {\n  return {\n    \"aria-busy\": loading,\n    \"aria-live\": loading ? \"polite\" : undefined,\n    ...(loading && { \"aria-label\": loadingText }),\n  };\n};\n\n// Consciousness-specific accessibility utilities\n\n/**\n * WCAG 2.1 AA compliance standards for consciousness features\n */\nexport const CONSCIOUSNESS_A11Y_STANDARDS = {\n  EYE_TRACKING: {\n    KEYBOARD_ALTERNATIVE: true,\n    FOCUS_INDICATORS: true,\n    ESCAPE_MECHANISM: true,\n    TIMEOUT_WARNINGS: true,\n  },\n  BIOMETRIC_ADAPTATION: {\n    MANUAL_OVERRIDE: true,\n    STATUS_ANNOUNCEMENT: true,\n    PRIVACY_CONTROLS: true,\n    OPT_OUT: true,\n  },\n  SPATIAL_AUDIO: {\n    VISUAL_ALTERNATIVES: true,\n    VOLUME_CONTROLS: true,\n    DISABLE_OPTION: true,\n    SUBTITLE_EQUIVALENT: true,\n  },\n  PREDICTIVE_FEATURES: {\n    TRANSPARENCY: true,\n    USER_CONTROL: true,\n    EXPLANATION_AVAILABLE: true,\n    CONFIDENCE_LEVELS: true,\n  },\n} as const;\n\n/**\n * Consciousness accessibility context\n */\nexport interface ConsciousnessA11yContext {\n  prefersReducedMotion: boolean;\n  prefersHighContrast: boolean;\n  prefersReducedData: boolean;\n  screenReaderActive: boolean;\n  keyboardNavigation: boolean;\n  consciousnessFeatures: {\n    eyeTracking: boolean;\n    biometricAdaptation: boolean;\n    spatialAudio: boolean;\n    predictiveFeatures: boolean;\n  };\n}\n\nexport interface ConsciousnessFeatureFlags {\n  eyeTracking?: boolean;\n  biometricResponsive?: boolean;\n  biometricAdaptation?: boolean;\n  spatialAudio?: boolean;\n  predictive?: boolean;\n}\n\nexport interface ConsciousnessA11yViolation {\n  rule: string;\n  severity: \"error\" | \"warning\";\n  element?: Element;\n  description: string;\n  remediation: string;\n}\n\nexport interface ConsciousnessA11yValidationResult {\n  isValid: boolean;\n  violations: ConsciousnessA11yViolation[];\n}\n\n/**\n * Hook for consciousness accessibility context\n */\nexport const useConsciousnessA11y = (): ConsciousnessA11yContext => {\n  const [context, setContext] = useState<ConsciousnessA11yContext>({\n    prefersReducedMotion: false,\n    prefersHighContrast: false,\n    prefersReducedData: false,\n    screenReaderActive: false,\n    keyboardNavigation: false,\n    consciousnessFeatures: {\n      eyeTracking: false,\n      biometricAdaptation: false,\n      spatialAudio: false,\n      predictiveFeatures: false,\n    },\n  });\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") return;\n\n    // Check media queries for accessibility preferences\n    const reducedMotionMQ = window.matchMedia(\n      \"(prefers-reduced-motion: reduce)\"\n    );\n    const highContrastMQ = window.matchMedia(\"(prefers-contrast: high)\");\n    const reducedDataMQ = window.matchMedia(\"(prefers-reduced-data: reduce)\");\n\n    // Check for screen reader\n    const screenReaderActive =\n      \"speechSynthesis\" in window ||\n      navigator.userAgent.includes(\"NVDA\") ||\n      navigator.userAgent.includes(\"JAWS\") ||\n      navigator.userAgent.includes(\"VoiceOver\");\n\n    // Update context\n    setContext((prev) => ({\n      ...prev,\n      prefersReducedMotion: reducedMotionMQ.matches,\n      prefersHighContrast: highContrastMQ.matches,\n      prefersReducedData: reducedDataMQ.matches,\n      screenReaderActive,\n    }));\n\n    // Listen for changes\n    const handleReducedMotionChange = (e: MediaQueryListEvent) => {\n      setContext((prev) => ({ ...prev, prefersReducedMotion: e.matches }));\n    };\n\n    const handleHighContrastChange = (e: MediaQueryListEvent) => {\n      setContext((prev) => ({ ...prev, prefersHighContrast: e.matches }));\n    };\n\n    const handleReducedDataChange = (e: MediaQueryListEvent) => {\n      setContext((prev) => ({ ...prev, prefersReducedData: e.matches }));\n    };\n\n    reducedMotionMQ.addEventListener(\"change\", handleReducedMotionChange);\n    highContrastMQ.addEventListener(\"change\", handleHighContrastChange);\n    reducedDataMQ.addEventListener(\"change\", handleReducedDataChange);\n\n    // Listen for keyboard navigation\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === \"Tab\") {\n        setContext((prev) => ({ ...prev, keyboardNavigation: true }));\n      }\n    };\n\n    const handleMouseDown = () => {\n      setContext((prev) => ({ ...prev, keyboardNavigation: false }));\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    document.addEventListener(\"mousedown\", handleMouseDown);\n\n    return () => {\n      reducedMotionMQ.removeEventListener(\"change\", handleReducedMotionChange);\n      highContrastMQ.removeEventListener(\"change\", handleHighContrastChange);\n      reducedDataMQ.removeEventListener(\"change\", handleReducedDataChange);\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"mousedown\", handleMouseDown);\n    };\n  }, []);\n\n  return context;\n};\n\n/**\n * Consciousness accessibility validator\n */\nexport class ConsciousnessA11yValidator {\n  private violations: ConsciousnessA11yViolation[] = [];\n\n  // Validate eye tracking accessibility\n  validateEyeTracking(element: Element, features: ConsciousnessFeatureFlags) {\n    if (!features.eyeTracking) return;\n\n    // Check for keyboard alternative\n    const hasKeyboardAlternative =\n      element.hasAttribute(\"tabindex\") ||\n      element.closest(\"[tabindex]\") ||\n      element.tagName.toLowerCase() === \"button\";\n\n    if (!hasKeyboardAlternative) {\n      this.violations.push({\n        rule: \"eye-tracking-keyboard-alternative\",\n        severity: \"error\",\n        element,\n        description: \"Eye tracking features must have keyboard alternatives\",\n        remediation: \"Add tabindex or ensure keyboard navigation is available\",\n      });\n    }\n\n    // Check for escape mechanism\n    if (!element.closest(\"[data-consciousness-escape]\")) {\n      this.violations.push({\n        rule: \"eye-tracking-escape\",\n        severity: \"error\",\n        element,\n        description: \"Eye tracking interfaces must provide escape mechanisms\",\n        remediation:\n          \"Add data-consciousness-escape attribute to parent container\",\n      });\n    }\n  }\n\n  // Validate biometric adaptation accessibility\n  validateBiometricAdaptation(\n    element: Element,\n    features: ConsciousnessFeatureFlags\n  ) {\n    if (!features.biometricResponsive && !features.biometricAdaptation) return;\n\n    // Check for manual override\n    const hasManualOverride =\n      element.querySelector(\"[data-biometric-override]\") ||\n      element.closest(\"[data-biometric-override]\");\n\n    if (!hasManualOverride) {\n      this.violations.push({\n        rule: \"biometric-manual-override\",\n        severity: \"error\",\n        element,\n        description:\n          \"Biometric adaptation must provide manual override controls\",\n        remediation:\n          \"Add manual override controls with data-biometric-override attribute\",\n      });\n    }\n\n    // Check for status announcements\n    const hasAriaLive =\n      element.hasAttribute(\"aria-live\") || element.querySelector(\"[aria-live]\");\n\n    if (!hasAriaLive) {\n      this.violations.push({\n        rule: \"biometric-status-announcement\",\n        severity: \"warning\",\n        element,\n        description: \"Biometric adaptations should announce status changes\",\n        remediation: \"Add aria-live region for status announcements\",\n      });\n    }\n  }\n\n  // Validate spatial audio accessibility\n  validateSpatialAudio(element: Element, features: ConsciousnessFeatureFlags) {\n    if (!features.spatialAudio) return;\n\n    // Check for visual alternatives\n    const hasVisualAlternative =\n      element.hasAttribute(\"aria-describedby\") ||\n      element.querySelector('[role=\"status\"]') ||\n      element.querySelector(\".visual-audio-indicator\");\n\n    if (!hasVisualAlternative) {\n      this.violations.push({\n        rule: \"spatial-audio-visual-alternative\",\n        severity: \"error\",\n        element,\n        description: \"Spatial audio must provide visual alternatives\",\n        remediation:\n          \"Add visual indicators or aria-describedby for audio information\",\n      });\n    }\n  }\n\n  // Comprehensive validation\n  validate(\n    element: Element,\n    consciousnessFeatures: ConsciousnessFeatureFlags\n  ): ConsciousnessA11yValidationResult {\n    this.violations = []; // Reset violations\n\n    this.validateEyeTracking(element, consciousnessFeatures);\n    this.validateBiometricAdaptation(element, consciousnessFeatures);\n    this.validateSpatialAudio(element, consciousnessFeatures);\n\n    return {\n      isValid:\n        this.violations.filter((v) => v.severity === \"error\").length === 0,\n      violations: this.violations,\n    };\n  }\n}\n\n/**\n * Hook for consciousness accessibility validation\n */\nexport const useConsciousnessA11yValidation = (\n  elementRef: React.RefObject<Element>,\n  consciousnessFeatures: ConsciousnessFeatureFlags,\n  options: {\n    autoValidate?: boolean;\n    onViolation?: (violations: ConsciousnessA11yViolation[]) => void;\n  } = {}\n) => {\n  const { autoValidate = true, onViolation } = options;\n  const validatorRef = useRef(new ConsciousnessA11yValidator());\n  const [validationResult, setValidationResult] =\n    useState<ConsciousnessA11yValidationResult | null>(null);\n\n  const validate = useCallback(() => {\n    if (!elementRef.current) return null;\n\n    const result = validatorRef.current.validate(\n      elementRef.current,\n      consciousnessFeatures\n    );\n    setValidationResult(result);\n\n    if (onViolation && result.violations.length > 0) {\n      onViolation(result.violations);\n    }\n\n    return result;\n  }, [elementRef, consciousnessFeatures, onViolation]);\n\n  useEffect(() => {\n    if (autoValidate && elementRef.current) {\n      validate();\n    }\n  }, [autoValidate, validate]);\n\n  return {\n    validate,\n    validationResult,\n    isValid: validationResult?.isValid ?? null,\n    violations: validationResult?.violations ?? [],\n  };\n};\n\n/**\n * Accessibility announcement utility for consciousness features\n */\nexport const useConsciousnessAnnouncements = () => {\n  const announcerRef = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    // Create hidden announcer for screen readers\n    if (!announcerRef.current) {\n      const announcer = document.createElement(\"div\");\n      announcer.setAttribute(\"aria-live\", \"polite\");\n      announcer.setAttribute(\"aria-atomic\", \"true\");\n      announcer.style.cssText = `\n        position: absolute;\n        left: -10000px;\n        width: 1px;\n        height: 1px;\n        overflow: hidden;\n      `;\n\n      document.body.appendChild(announcer);\n      announcerRef.current = announcer;\n    }\n\n    return () => {\n      if (announcerRef.current) {\n        document.body.removeChild(announcerRef.current);\n        announcerRef.current = null;\n      }\n    };\n  }, []);\n\n  const announce = useCallback(\n    (message: string, priority: \"polite\" | \"assertive\" = \"polite\") => {\n      if (announcerRef.current) {\n        announcerRef.current.setAttribute(\"aria-live\", priority);\n        announcerRef.current.textContent = message;\n\n        // Clear after announcement\n        setTimeout(() => {\n          if (announcerRef.current) {\n            announcerRef.current.textContent = \"\";\n          }\n        }, 1000);\n      }\n    },\n    []\n  );\n\n  const announceConsciousnessChange = useCallback(\n    (feature: string, status: string) => {\n      announce(`Consciousness feature ${feature} is now ${status}`, \"polite\");\n    },\n    [announce]\n  );\n\n  const announcePrivacyChange = useCallback(\n    (change: string) => {\n      announce(`Privacy setting changed: ${change}`, \"assertive\");\n    },\n    [announce]\n  );\n\n  return {\n    announce,\n    announceConsciousnessChange,\n    announcePrivacyChange,\n  };\n};\n\n/**\n * Create accessibility attributes for consciousness features\n */\nexport const createConsciousnessA11y = (\n  features: ConsciousnessFeatureFlags\n): AriaProps => {\n  const attrs: AriaProps = {};\n\n  // Add consciousness-specific attributes\n  if (features.eyeTracking) {\n    attrs[\"aria-describedby\"] = \"consciousness-eye-tracking-desc\";\n  }\n\n  if (features.biometricResponsive) {\n    attrs[\"aria-describedby\"] = attrs[\"aria-describedby\"]\n      ? `${attrs[\"aria-describedby\"]} consciousness-biometric-desc`\n      : \"consciousness-biometric-desc\";\n  }\n\n  if (features.spatialAudio) {\n    attrs[\"aria-describedby\"] = attrs[\"aria-describedby\"]\n      ? `${attrs[\"aria-describedby\"]} consciousness-spatial-audio-desc`\n      : \"consciousness-spatial-audio-desc\";\n  }\n\n  if (features.predictive) {\n    attrs[\"aria-describedby\"] = attrs[\"aria-describedby\"]\n      ? `${attrs[\"aria-describedby\"]} consciousness-predictive-desc`\n      : \"consciousness-predictive-desc\";\n  }\n\n  return attrs;\n};\n\n// Export singleton validator\nexport const consciousnessA11yValidator = new ConsciousnessA11yValidator();\n", "\"use client\";\n/**\n * ContrastGuard Component\n * A React wrapper component that ensures WCAG contrast compliance\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useState,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  useContrastGuard,\n  applyContrastAdjustment,\n  type ContrastLevel,\n} from \"../../utils/contrastGuard\";\nimport type { LiquidGlassMaterial, MaterialVariant } from \"../../tokens/glass\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\ntype ContrastGuardElement = keyof HTMLElementTagNameMap;\n\nexport interface ContrastGuardProps extends React.HTMLAttributes<HTMLElement> {\n  /**\n   * Content to be rendered with contrast protection\n   */\n  children?: React.ReactNode;\n\n  /**\n   * Target WCAG compliance level\n   * @default 'AA'\n   */\n  level?: ContrastLevel;\n\n  /**\n   * Minimum contrast ratio\n   * @default 4.5\n   */\n  minContrast?: number;\n\n  /**\n   * Fallback text color if contrast cannot be met\n   */\n  fallbackColor?: string;\n\n  /**\n   * Background color to test against\n   */\n  backgroundColor?: string;\n\n  /**\n   * Text color\n   * @default 'var(--glass-text-primary)'\n   */\n  textColor?: string;\n\n  /**\n   * Glass material type\n   */\n  material?: LiquidGlassMaterial;\n\n  /**\n   * Material variant\n   */\n  variant?: MaterialVariant;\n\n  /**\n   * Whether to automatically adjust contrast\n   * @default true\n   */\n  autoAdjust?: boolean;\n\n  /**\n   * Custom className\n   */\n  className?: string;\n\n  /**\n   * Element type to render\n   * @default 'span'\n   */\n  as?: ContrastGuardElement;\n\n  /**\n   * Callback when contrast adjustment is applied\n   */\n  onAdjustment?: (meetsRequirement: boolean, ratio: number) => void;\n\n  /**\n   * Show a small contrast status indicator. Useful in docs, previews, and\n   * audit tooling where the component's behavior should be visible.\n   */\n  showIndicator?: boolean;\n\n  /**\n   * Optional package-owned demo backdrop for docs/previews. Normal app usage\n   * should leave this as `none`.\n   * @default 'none'\n   */\n  demoBackdrop?: \"none\" | \"busy-light\" | \"busy-dark\";\n}\n\nfunction demoBackdropStyle(\n  demoBackdrop: NonNullable<ContrastGuardProps[\"demoBackdrop\"]>\n): React.CSSProperties {\n  if (demoBackdrop === \"busy-light\") {\n    return {\n      ...createGlassStyle({\n        intent: \"info\",\n        elevation: \"level1\",\n        tier: \"high\",\n      }),\n      display: \"inline-flex\",\n      alignItems: \"center\",\n      gap: \"0.5rem\",\n      padding: \"0.65rem 0.75rem\",\n      borderRadius: \"0.75rem\",\n      color: \"#0f172a\",\n    };\n  }\n\n  if (demoBackdrop === \"busy-dark\") {\n    return {\n      ...createGlassStyle({\n        intent: \"neutral\",\n        elevation: \"level3\",\n        tier: \"high\",\n      }),\n      display: \"inline-flex\",\n      alignItems: \"center\",\n      gap: \"0.5rem\",\n      padding: \"0.65rem 0.75rem\",\n      borderRadius: \"0.75rem\",\n      color: \"#f8fafc\",\n    };\n  }\n\n  return {};\n}\n\n/**\n * ContrastGuard wrapper component\n * Ensures text content meets WCAG contrast requirements\n */\nexport const ContrastGuard = forwardRef<HTMLElement | null, ContrastGuardProps>(\n  (\n    {\n      children,\n      level = \"AA\",\n      minContrast = 4.5,\n      fallbackColor = \"var(--glass-text-primary)\",\n      backgroundColor,\n      textColor = \"var(--glass-text-primary)\",\n      material = \"liquid\",\n      variant = \"regular\",\n      autoAdjust = true,\n      className,\n      as: Component = \"span\",\n      onAdjustment,\n      showIndicator = false,\n      demoBackdrop = \"none\",\n      style,\n      ...rest\n    },\n    forwardedRef: React.ForwardedRef<HTMLElement | null>\n  ) => {\n    const elementRef = useRef<HTMLElement | null>(null);\n    const [appliedStyles, setAppliedStyles] = useState<React.CSSProperties>({});\n\n    useImperativeHandle<HTMLElement | null, HTMLElement | null>(\n      forwardedRef,\n      () => elementRef.current,\n      []\n    );\n\n    // Use ContrastGuard hook if autoAdjust is enabled\n    const adjustment = useContrastGuard(\n      elementRef,\n      autoAdjust\n        ? {\n            targetLevel: level,\n            material,\n            variant,\n            textColor,\n            onAdjustment: (adj) => {\n              if (elementRef.current) {\n                applyContrastAdjustment(elementRef.current, adj);\n              }\n              onAdjustment?.(adj.meetsRequirement, adj.adjustedContrast);\n\n              // Apply styles dynamically\n              const styles: React.CSSProperties = {};\n              if (adj.modifications.fallbackMode && fallbackColor) {\n                styles.color = fallbackColor;\n              }\n              setAppliedStyles(styles);\n            },\n          }\n        : undefined\n    );\n\n    const indicator = showIndicator\n      ? React.createElement(\n          \"span\",\n          {\n            \"aria-hidden\": true,\n            className: \"contrast-guard__indicator\",\n            style: {\n              marginLeft: \"0.5rem\",\n              padding: \"0.12rem 0.4rem\",\n              borderRadius: \"999px\",\n              fontSize: \"0.64rem\",\n              fontWeight: 700,\n              letterSpacing: \"0.06em\",\n              textTransform: \"uppercase\",\n              color: adjustment?.meetsRequirement ? \"#052e16\" : \"#451a03\",\n              background: adjustment?.meetsRequirement\n                ? \"rgba(134,239,172,0.92)\"\n                : \"rgba(253,186,116,0.92)\",\n            },\n          },\n          adjustment?.meetsRequirement ? \"AA\" : \"Check\"\n        )\n      : null;\n\n    return React.createElement(\n      Component,\n      {\n        \"data-glass-component\": true,\n        ref: elementRef,\n        className: cn(\n          \"contrast-guard\",\n          adjustment?.meetsRequirement && \"contrast-guard--compliant\",\n          adjustment?.modifications.fallbackMode && \"contrast-guard--fallback\",\n          className\n        ),\n        style: {\n          ...demoBackdropStyle(demoBackdrop),\n          ...style,\n          ...appliedStyles,\n          ...(backgroundColor && { backgroundColor }),\n        },\n        \"data-contrast-level\": level,\n        \"data-contrast-ratio\": adjustment?.adjustedContrast?.toFixed(2),\n        \"data-meets-wcag\": adjustment?.meetsRequirement,\n        \"data-demo-backdrop\":\n          demoBackdrop === \"none\" ? undefined : demoBackdrop,\n        ...rest,\n      },\n      indicator\n        ? React.createElement(React.Fragment, null, children, indicator)\n        : children\n    );\n  }\n);\n\n/**\n * Simpler text wrapper with contrast protection\n */\nexport interface TextWithContrastProps\n  extends React.HTMLAttributes<HTMLElement> {\n  children?: React.ReactNode;\n  level?: \"AA\" | \"AAA\";\n  className?: string;\n  as?: ContrastGuardElement;\n}\n\nexport const TextWithContrast: React.FC<TextWithContrastProps> = ({\n  children,\n  level = \"AA\",\n  className,\n  as: Component = \"span\",\n  ...rest\n}) => {\n  return (\n    <ContrastGuard\n      level={level}\n      minContrast={level === \"AAA\" ? 7.0 : 4.5}\n      as={Component}\n      className={className}\n      {...rest}\n    >\n      {children}\n    </ContrastGuard>\n  );\n};\n\n/**\n * High contrast mode wrapper for critical UI elements\n */\nexport const HighContrastText: React.FC<{\n  children: React.ReactNode;\n  className?: string;\n}> = ({ children, className }) => {\n  return (\n    <ContrastGuard\n      level=\"AAA\"\n      minContrast={7.0}\n      fallbackColor=\"var(--glass-text-primary)\"\n      className={className}\n    >\n      {children}\n    </ContrastGuard>\n  );\n};\n\nexport default ContrastGuard;\n", "// token-lint-ignore-file: token definitions intentionally use raw color values\n// Design system constants and configuration\nimport { createGlassStyle } from \"../core/mixins/glassMixins\";\n\nexport const DESIGN_SYSTEM = {\n  name: \"AuraGlass\",\n  version: \"1.0.0\",\n  author: \"AuraGlass Team\",\n  description: \"Modern glassmorphism design system for React\",\n} as const;\n\n// Animation constants\nexport const ANIMATION = {\n  // Duration presets\n  DURATION: {\n    instant: 0,\n    fast: 150,\n    normal: 300,\n    slow: 500,\n    slower: 700,\n  } as const,\n\n  // Easing presets\n  EASING: {\n    linear: \"linear\",\n    ease: \"ease\",\n    easeIn: \"ease-in\",\n    easeOut: \"ease-out\",\n    easeInOut: \"ease-in-out\",\n    bounceIn: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n    bounceOut: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n    elasticIn: \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\",\n    elasticOut: \"cubic-bezier(0.68, -0.55, 0.265, 1.55)\",\n  } as const,\n\n  // Spring physics constants\n  SPRING: {\n    gentle: { stiffness: 120, damping: 14, mass: 1 },\n    wobbly: { stiffness: 180, damping: 12, mass: 1 },\n    stiff: { stiffness: 210, damping: 20, mass: 1 },\n    slow: { stiffness: 280, damping: 60, mass: 1 },\n    bouncy: { stiffness: 170, damping: 8, mass: 1 },\n  } as const,\n} as const;\n\n// Color constants\nexport const COLORS = {\n  // Glass morphism colors\n  glass: {\n    frosted: \"rgba(255, 255, 255, 0.1)\",\n    dynamic: \"rgba(255, 255, 255, 0.15)\",\n    clear: \"transparent\",\n    tinted: \"rgba(255, 255, 255, 0.08)\",\n    luminous: \"rgba(255, 255, 255, 0.2)\",\n  },\n\n  // Semantic colors\n  semantic: {\n    primary: \"hsl(var(--glass-color-primary))\",\n    secondary: \"var(--glass-gray-500)\",\n    success: \"hsl(var(--glass-color-success))\",\n    warning: \"hsl(var(--glass-color-warning))\",\n    error: \"hsl(var(--glass-color-danger))\",\n    info: \"hsl(var(--glass-color-primary))\",\n  },\n\n  // Neutral colors\n  neutral: {\n    white: \"var(--glass-white)\",\n    black: \"var(--glass-black)\",\n    gray: {\n      50: \"var(--glass-gray-50)\",\n      100: \"var(--glass-gray-100)\",\n      200: \"var(--glass-gray-200)\",\n      300: \"var(--glass-gray-300)\",\n      400: \"var(--glass-gray-400)\",\n      500: \"var(--glass-gray-500)\",\n      600: \"var(--glass-gray-600)\",\n      700: \"var(--glass-gray-700)\",\n      800: \"var(--glass-gray-800)\",\n      900: \"var(--glass-gray-900)\",\n    },\n  },\n\n  // Glass-specific colors with transparency\n  glassColors: {\n    surface: \"rgba(255, 255, 255, 0.1)\",\n    surfaceHover: \"rgba(255, 255, 255, 0.15)\",\n    surfaceActive: \"rgba(255, 255, 255, 0.08)\",\n    border: \"rgba(255, 255, 255, 0.2)\",\n    borderHover: \"rgba(255, 255, 255, 0.3)\",\n    text: \"var(--glass-text-primary)\",\n    textSecondary: \"var(--glass-text-secondary)\",\n    shadow: \"rgba(0, 0, 0, 0.15)\",\n  },\n} as const;\n\n// Typography constants\nexport const TYPOGRAPHY = {\n  // Font families\n  fontFamily: {\n    sans: '\"Aeonik\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n    mono: '\"SF Mono\", Monaco, \"Cascadia Code\", \"Roboto Mono\", Consolas, \"Courier New\", monospace',\n  },\n\n  // Font sizes\n  fontSize: {\n    xs: \"0.75rem\",\n    sm: \"0.875rem\",\n    base: \"1rem\",\n    lg: \"1.125rem\",\n    xl: \"1.25rem\",\n    \"2xl\": \"1.5rem\",\n    \"3xl\": \"1.875rem\",\n    \"4xl\": \"2.25rem\",\n    \"5xl\": \"3rem\",\n  },\n\n  // Font weights\n  fontWeight: {\n    thin: 100,\n    light: 300,\n    normal: 400,\n    medium: 500,\n    semibold: 600,\n    bold: 700,\n    extrabold: 800,\n    black: 900,\n  },\n\n  // Line heights\n  lineHeight: {\n    none: 1,\n    tight: 1.25,\n    snug: 1.375,\n    normal: 1.5,\n    relaxed: 1.625,\n    loose: 2,\n  },\n\n  // Letter spacing\n  letterSpacing: {\n    tighter: \"-0.05em\",\n    tight: \"-0.025em\",\n    normal: \"0em\",\n    wide: \"0.025em\",\n    wider: \"0.05em\",\n    widest: \"0.1em\",\n  },\n} as const;\n\n// Spacing constants\nexport const SPACING = {\n  // Spacing scale\n  space: {\n    0: \"0\",\n    1: \"0.25rem\",\n    2: \"0.5rem\",\n    3: \"0.75rem\",\n    4: \"1rem\",\n    5: \"1.25rem\",\n    6: \"1.5rem\",\n    8: \"2rem\",\n    10: \"2.5rem\",\n    12: \"3rem\",\n    16: \"4rem\",\n    20: \"5rem\",\n    24: \"6rem\",\n    32: \"8rem\",\n    40: \"10rem\",\n    48: \"12rem\",\n    56: \"14rem\",\n    64: \"16rem\",\n  },\n\n  // Container max widths\n  container: {\n    sm: \"640px\",\n    md: \"768px\",\n    lg: \"1024px\",\n    xl: \"1280px\",\n    \"2xl\": \"1536px\",\n  },\n} as const;\n\n// Border radius constants\nexport const BORDER_RADIUS = {\n  none: \"0\",\n  sm: \"0.125rem\",\n  md: \"0.375rem\",\n  lg: \"0.5rem\",\n  xl: \"0.75rem\",\n  \"2xl\": \"1rem\",\n  \"3xl\": \"1.5rem\",\n  full: \"9999px\",\n} as const;\n\n// Box shadow constants\nexport const BOX_SHADOW = {\n  none: \"none\",\n  xs: \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n  sm: \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n  md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n  lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n  xl: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n  \"2xl\": \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n  inner: \"inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n  outline: \"0 0 0 3px rgba(66, 153, 225, 0.5)\",\n} as const;\n\n// Z-index constants\nexport const Z_INDEX = {\n  auto: \"auto\",\n  0: 0,\n  10: 10,\n  20: 20,\n  30: 30,\n  40: 40,\n  50: 50,\n  60: 60,\n  70: 70,\n  80: 80,\n  90: 90,\n  100: 100,\n} as const;\n\n// Breakpoint constants\nexport const BREAKPOINTS = {\n  xs: \"0px\",\n  sm: \"640px\",\n  md: \"768px\",\n  lg: \"1024px\",\n  xl: \"1280px\",\n  \"2xl\": \"1536px\",\n} as const;\n\n// Performance constants\nexport const PERFORMANCE = {\n  // Frame rate targets\n  fps: {\n    target: 60,\n    minimum: 30,\n    critical: 15,\n  },\n\n  // Memory limits\n  memory: {\n    warning: 50 * 1024 * 1024, // 50MB\n    critical: 100 * 1024 * 1024, // 100MB\n    maximum: 200 * 1024 * 1024, // 200MB\n  },\n\n  // Quality tiers\n  quality: {\n    ultra: { particleLimit: 1000, textureSize: 2048 },\n    high: { particleLimit: 500, textureSize: 1024 },\n    medium: { particleLimit: 200, textureSize: 512 },\n    low: { particleLimit: 50, textureSize: 256 },\n  },\n} as const;\n\n// Accessibility constants\nexport const ACCESSIBILITY = {\n  // Focus ring\n  focusRing: {\n    width: \"2px\",\n    style: \"solid\",\n    color: \"hsl(var(--glass-color-primary)/0.5)\",\n    offset: \"2px\",\n  },\n\n  // Reduced motion\n  motion: {\n    reduced: \"(prefers-reduced-motion: reduce)\",\n    enabled: \"(prefers-reduced-motion: no-preference)\",\n  },\n\n  // Color contrast\n  contrast: {\n    minimum: 4.5,\n    enhanced: 7.0,\n  },\n\n  // Touch targets\n  touch: {\n    minimum: \"44px\",\n    recommended: \"48px\",\n  },\n} as const;\n\n// Glass morphism specific constants\nexport const GLASS = {\n  // Opacity levels\n  opacity: {\n    subtle: 0.05,\n    light: 0.1,\n    standard: 0.15,\n    strong: 0.2,\n    intense: 0.3,\n  },\n\n  // Blur levels\n  blur: {\n    none: \"none\",\n    subtle: \"blur(4px)\",\n    light: \"blur(8px)\",\n    standard: \"blur(16px)\",\n    strong: \"blur(24px)\",\n    heavy: \"blur(32px)\",\n  },\n\n  // Variants\n  variants: {\n    frosted: {},\n    dynamic: {},\n    clear: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  },\n} as const;\n\n// Export utility functions\nexport const constants = {\n  getColor: (key: string) => COLORS[key as keyof typeof COLORS],\n  getSpacing: (key: string | number) =>\n    SPACING.space[key as keyof typeof SPACING.space],\n  getFontSize: (key: string) =>\n    TYPOGRAPHY.fontSize[key as keyof typeof TYPOGRAPHY.fontSize],\n  getBorderRadius: (key: string) =>\n    BORDER_RADIUS[key as keyof typeof BORDER_RADIUS],\n  getBoxShadow: (key: string) => BOX_SHADOW[key as keyof typeof BOX_SHADOW],\n  getBreakpoint: (key: string) => BREAKPOINTS[key as keyof typeof BREAKPOINTS],\n};\n\nexport default {\n  DESIGN_SYSTEM,\n  ANIMATION,\n  COLORS,\n  TYPOGRAPHY,\n  SPACING,\n  BORDER_RADIUS,\n  BOX_SHADOW,\n  Z_INDEX,\n  BREAKPOINTS,\n  PERFORMANCE,\n  ACCESSIBILITY,\n  GLASS,\n  constants,\n};\n", "\"use client\";\n/**\n * AuraGlass Biometric Adaptation System\n * Heart rate and stress-responsive UI with device sensors and ML analysis\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n  forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence, useMotionValue } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\n\n// Biometric data types\ninterface BiometricReading {\n  heartRate?: number;\n  respiratoryRate?: number;\n  heartRateVariability?: number;\n  stressLevel?: number; // 0-1 scale\n  temperature?: number;\n  bloodOxygen?: number;\n  timestamp: number;\n  confidence: number;\n}\n\ninterface StressIndicators {\n  rapidClicking: number;\n  irregularMovement: number;\n  prolongedHover: number;\n  errorFrequency: number;\n  sessionDuration: number;\n}\n\ninterface AdaptationSettings {\n  sensitivity: number; // 0-1 scale\n  responseSpeed: number; // ms delay\n  enableColorAdaptation: boolean;\n  enableMotionAdaptation: boolean;\n  enableLayoutAdaptation: boolean;\n  enableAudioAdaptation: boolean;\n  stressThreshold: number; // 0-1 scale\n  calmingThreshold: number; // 0-1 scale\n}\n\ninterface BiometricProfile {\n  userId: string;\n  baselineHeartRate: number;\n  stressPatterns: Array<{ trigger: string; response: number }>;\n  preferences: {\n    calmingColors: string[];\n    stressColors: string[];\n    calmingAnimations: string[];\n    stressAnimations: string[];\n  };\n  history: BiometricReading[];\n}\n\ntype BiometricAdaptationType = \"color\" | \"motion\" | \"layout\" | \"audio\";\n\ninterface ColorAdaptation {\n  type: \"calming\" | \"energizing\";\n  intensity: number;\n  colors: string[];\n}\n\ninterface MotionAdaptation {\n  type: \"calming\" | \"normal\";\n  speed: number;\n  amplitude: number;\n}\n\ninterface LayoutAdaptation {\n  type: \"simplified\";\n  density: number;\n  spacing: number;\n}\n\ninterface AudioAdaptation {\n  type: \"calming\";\n  volume: number;\n  frequency: \"low\" | \"medium\" | \"high\";\n}\n\ntype BiometricAdaptation =\n  | ColorAdaptation\n  | MotionAdaptation\n  | LayoutAdaptation\n  | AudioAdaptation;\n\ninterface BiometricAdaptationState {\n  color?: ColorAdaptation;\n  motion?: MotionAdaptation;\n  layout?: LayoutAdaptation;\n}\n\ninterface SensorLike {\n  addEventListener(type: \"reading\", listener: () => void): void;\n  stop(): void;\n}\n\ninterface MotionSensorLike extends SensorLike {\n  x: number | null;\n  y: number | null;\n  z: number | null;\n}\n\ninterface AmbientLightSensorLike extends SensorLike {\n  illuminance: number | null;\n}\n\ntype MotionSensorConstructor<TSensor extends SensorLike> = new (options?: {\n  frequency?: number;\n}) => TSensor;\n\ninterface SensorWindow extends Window {\n  Accelerometer?: MotionSensorConstructor<MotionSensorLike>;\n  Gyroscope?: MotionSensorConstructor<MotionSensorLike>;\n  AmbientLightSensor?: MotionSensorConstructor<AmbientLightSensorLike>;\n}\n\ninterface BluetoothCharacteristicValueEvent extends Event {\n  target: EventTarget & {\n    value?: DataView;\n  };\n}\n\ninterface BluetoothRemoteGATTCharacteristicLike {\n  startNotifications(): Promise<BluetoothRemoteGATTCharacteristicLike>;\n  addEventListener(\n    type: \"characteristicvaluechanged\",\n    listener: (event: BluetoothCharacteristicValueEvent) => void\n  ): void;\n}\n\ninterface BluetoothRemoteGATTServiceLike {\n  getCharacteristic(\n    characteristic: string\n  ): Promise<BluetoothRemoteGATTCharacteristicLike>;\n}\n\ninterface BluetoothRemoteGATTServerLike {\n  getPrimaryService(service: string): Promise<BluetoothRemoteGATTServiceLike>;\n}\n\ninterface BluetoothDeviceLike {\n  gatt: {\n    connect(): Promise<BluetoothRemoteGATTServerLike>;\n  };\n}\n\ninterface BluetoothNavigator extends Navigator {\n  bluetooth?: {\n    requestDevice(options: {\n      filters: Array<{ services: string[] }>;\n      optionalServices: string[];\n    }): Promise<BluetoothDeviceLike>;\n  };\n}\n\ninterface StoredBiometricProfile extends Partial<BiometricProfile> {}\n\nconst BIOMETRIC_ADAPTATION_TYPES: BiometricAdaptationType[] = [\n  \"color\",\n  \"motion\",\n  \"layout\",\n  \"audio\",\n];\n\nconst isColorAdaptation = (\n  adaptation: BiometricAdaptation\n): adaptation is ColorAdaptation => \"colors\" in adaptation;\n\nconst isMotionAdaptation = (\n  adaptation: BiometricAdaptation\n): adaptation is MotionAdaptation => \"speed\" in adaptation;\n\nconst isLayoutAdaptation = (\n  adaptation: BiometricAdaptation\n): adaptation is LayoutAdaptation => \"spacing\" in adaptation;\n\n// Biometric sensor integration\nclass BiometricSensorManager {\n  private accelerometer: MotionSensorLike | null = null;\n  private gyroscope: MotionSensorLike | null = null;\n  private ambientLightSensor: AmbientLightSensorLike | null = null;\n  private isSupported = false;\n  private readings: BiometricReading[] = [];\n  private listeners: Array<(reading: BiometricReading) => void> = [];\n\n  async initialize(): Promise<boolean> {\n    // CRITICAL SSR FIX: Skip all sensor initialization on server\n    if (typeof window === \"undefined\") {\n      return false;\n    }\n\n    try {\n      const sensorWindow = window as SensorWindow;\n      // Check for Generic Sensor API support\n      if (sensorWindow.Accelerometer) {\n        this.accelerometer = new sensorWindow.Accelerometer({\n          frequency: 10,\n        });\n        this.accelerometer.addEventListener(\n          \"reading\",\n          this.handleAccelerometer.bind(this)\n        );\n      }\n\n      if (sensorWindow.Gyroscope) {\n        this.gyroscope = new sensorWindow.Gyroscope({ frequency: 10 });\n        this.gyroscope.addEventListener(\n          \"reading\",\n          this.handleGyroscope.bind(this)\n        );\n      }\n\n      if (sensorWindow.AmbientLightSensor) {\n        this.ambientLightSensor = new sensorWindow.AmbientLightSensor();\n        this.ambientLightSensor.addEventListener(\n          \"reading\",\n          this.handleAmbientLight.bind(this)\n        );\n      }\n\n      // Check for Web Bluetooth (for heart rate monitors)\n      if (\"bluetooth\" in navigator) {\n        this.isSupported = true;\n      }\n\n      // Fallback: Use behavioral analysis for stress detection\n      this.setupBehavioralAnalysis();\n\n      return true;\n    } catch {\n      this.setupBehavioralAnalysis();\n      return true; // Still functional with behavioral analysis\n    }\n  }\n\n  private setupBehavioralAnalysis(): void {\n    // CRITICAL SSR FIX: Skip document access on server\n    if (typeof document === \"undefined\") {\n      return;\n    }\n\n    // Track mouse/touch patterns for stress indicators\n    let lastClickTime = 0;\n    let clickCount = 0;\n    let mouseMovements: Array<{ x: number; y: number; timestamp: number }> = [];\n    let errorCount = 0;\n\n    // Rapid clicking detection\n    document.addEventListener(\"click\", () => {\n      const now = Date.now();\n      if (now - lastClickTime < 500) {\n        clickCount++;\n      } else {\n        clickCount = 0;\n      }\n      lastClickTime = now;\n\n      if (clickCount > 5) {\n        this.reportStressIndicator(\"rapidClicking\", 0.8);\n      }\n    });\n\n    // Mouse movement analysis\n    document.addEventListener(\"mousemove\", (e) => {\n      mouseMovements.push({\n        x: e.clientX,\n        y: e.clientY,\n        timestamp: Date.now(),\n      });\n\n      // Keep only recent movements\n      if (mouseMovements.length > 10) {\n        mouseMovements = mouseMovements.slice(-5);\n      }\n\n      // Analyze movement patterns\n      if (mouseMovements.length > 3) {\n        const movements = mouseMovements.slice(-3);\n        const distances = movements.map((point, i) => {\n          if (i === 0) return 0;\n          const prev = movements[i - 1];\n          return Math.sqrt(\n            Math.pow(point.x - prev.x, 2) + Math.pow(point.y - prev.y, 2)\n          );\n        });\n\n        const avgDistance =\n          distances.reduce((sum, d) => sum + d, 0) / distances.length;\n        const timeDiff =\n          movements[movements.length - 1].timestamp - movements[0].timestamp;\n        const speed = avgDistance / timeDiff;\n\n        // Irregular, jittery movement indicates stress\n        if (speed > 2 && avgDistance < 50) {\n          this.reportStressIndicator(\"irregularMovement\", 0.6);\n        }\n      }\n    });\n\n    // Error detection (could be hooked into form validation, etc.)\n    window.addEventListener(\"error\", () => {\n      errorCount++;\n      this.reportStressIndicator(\n        \"errorFrequency\",\n        Math.min(1, errorCount * 0.2)\n      );\n    });\n\n    // Periodic behavioral analysis\n    setInterval(() => {\n      this.analyzeBehavioralPatterns();\n    }, ANIMATION.DURATION.slower);\n  }\n\n  private handleAccelerometer(): void {\n    if (!this.accelerometer) return;\n\n    const x = this.accelerometer.x ?? 0;\n    const y = this.accelerometer.y ?? 0;\n    const z = this.accelerometer.z ?? 0;\n    const acceleration = Math.sqrt(x * x + y * y + z * z);\n\n    // High acceleration might indicate stress/agitation\n    if (acceleration > 15) {\n      this.reportBiometricReading({\n        stressLevel: Math.min(1, acceleration / 30),\n        timestamp: Date.now(),\n        confidence: 0.6,\n      });\n    }\n  }\n\n  private handleGyroscope(): void {\n    if (!this.gyroscope) return;\n\n    const x = this.gyroscope.x ?? 0;\n    const y = this.gyroscope.y ?? 0;\n    const z = this.gyroscope.z ?? 0;\n    const rotation = Math.sqrt(x * x + y * y + z * z);\n\n    // Rapid device rotation might indicate stress\n    if (rotation > 5) {\n      this.reportStressIndicator(\"deviceMovement\", Math.min(1, rotation / 10));\n    }\n  }\n\n  private handleAmbientLight(): void {\n    if (!this.ambientLightSensor) return;\n\n    const illuminance = this.ambientLightSensor.illuminance ?? 0;\n\n    // Very low light might indicate late hours / stress\n    if (illuminance < 10) {\n      this.reportStressIndicator(\"lowLight\", 0.3);\n    }\n  }\n\n  private reportStressIndicator(type: string, level: number): void {\n    this.reportBiometricReading({\n      stressLevel: level,\n      timestamp: Date.now(),\n      confidence: 0.5,\n    });\n  }\n\n  private analyzeBehavioralPatterns(): void {\n    const now = Date.now();\n    const recentReadings = this.readings.filter(\n      (r) => now - r.timestamp < 30000\n    ); // Last 30 seconds\n\n    if (recentReadings.length === 0) return;\n\n    // Calculate average stress level\n    const avgStress =\n      recentReadings.reduce((sum, r) => sum + (r.stressLevel || 0), 0) /\n      recentReadings.length;\n\n    // Generate composite reading\n    this.reportBiometricReading({\n      stressLevel: avgStress,\n      heartRate: this.estimateHeartRateFromBehavior(avgStress),\n      timestamp: now,\n      confidence: 0.7,\n    });\n  }\n\n  private estimateHeartRateFromBehavior(stressLevel: number): number {\n    // Rough estimation: normal resting HR + stress factor\n    const baselineHR = 70;\n    return Math.round(baselineHR + stressLevel * 30);\n  }\n\n  private reportBiometricReading(reading: BiometricReading): void {\n    this.readings.push(reading);\n\n    // Keep only recent readings\n    if (this.readings.length > 100) {\n      this.readings = this.readings.slice(-50);\n    }\n\n    // Notify listeners\n    this.listeners.forEach((listener) => listener(reading));\n  }\n\n  async connectHeartRateMonitor(): Promise<boolean> {\n    // CRITICAL SSR FIX: Skip bluetooth access on server\n    if (typeof navigator === \"undefined\") {\n      return false;\n    }\n\n    try {\n      const bluetoothNavigator = navigator as BluetoothNavigator;\n\n      if (!bluetoothNavigator.bluetooth) {\n        throw new Error(\"Web Bluetooth not supported\");\n      }\n\n      const device = await bluetoothNavigator.bluetooth.requestDevice({\n        filters: [{ services: [\"heart_rate\"] }],\n        optionalServices: [\"heart_rate\"],\n      });\n\n      const server = await device.gatt.connect();\n      const service = await server.getPrimaryService(\"heart_rate\");\n      const characteristic = await service.getCharacteristic(\n        \"heart_rate_measurement\"\n      );\n\n      await characteristic.startNotifications();\n      characteristic.addEventListener(\"characteristicvaluechanged\", (event) => {\n        const value = event.target.value;\n        if (!value) return;\n        const heartRate = value.getUint16(1, true);\n\n        this.reportBiometricReading({\n          heartRate,\n          timestamp: Date.now(),\n          confidence: 0.9,\n        });\n      });\n\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  addListener(listener: (reading: BiometricReading) => void): () => void {\n    this.listeners.push(listener);\n    return () => {\n      const index = this.listeners.indexOf(listener);\n      if (index > -1) {\n        this.listeners.splice(index, 1);\n      }\n    };\n  }\n\n  getLatestReading(): BiometricReading | null {\n    return this.readings.length > 0\n      ? this.readings[this.readings.length - 1]\n      : null;\n  }\n\n  getReadingHistory(duration: number = 300000): BiometricReading[] {\n    const cutoff = Date.now() - duration;\n    return this.readings.filter((r) => r.timestamp > cutoff);\n  }\n\n  cleanup(): void {\n    if (this.accelerometer) {\n      this.accelerometer.stop();\n    }\n    if (this.gyroscope) {\n      this.gyroscope.stop();\n    }\n    if (this.ambientLightSensor) {\n      this.ambientLightSensor.stop();\n    }\n    this.listeners = [];\n    this.readings = [];\n  }\n}\n\n// Adaptive UI engine\nexport class BiometricAdaptationEngine {\n  private sensorManager: BiometricSensorManager;\n  private settings: AdaptationSettings;\n  private profile: BiometricProfile;\n  private adaptationCallbacks: Map<\n    string,\n    (adaptation: BiometricAdaptation) => void\n  > = new Map();\n  private currentAdaptations: Map<string, BiometricAdaptation> = new Map();\n  private adaptationTimeouts: Map<string, ReturnType<typeof setTimeout>> =\n    new Map();\n\n  constructor(settings: Partial<AdaptationSettings> = {}) {\n    this.sensorManager = new BiometricSensorManager();\n    this.settings = {\n      sensitivity: 0.7,\n      responseSpeed: 1000,\n      enableColorAdaptation: true,\n      enableMotionAdaptation: true,\n      enableLayoutAdaptation: true,\n      enableAudioAdaptation: true,\n      stressThreshold: 0.7,\n      calmingThreshold: 0.3,\n      ...settings,\n    };\n\n    this.profile = {\n      userId: \"default\",\n      baselineHeartRate: 70,\n      stressPatterns: [],\n      preferences: {\n        calmingColors: [\n          \"hsl(var(--glass-color-primary))\",\n          \"#06b6d4\",\n          \"hsl(var(--glass-color-success))\",\n          \"#8b5cf6\",\n        ],\n        stressColors: [\n          \"hsl(var(--glass-color-danger))\",\n          \"hsl(var(--glass-color-warning))\",\n          \"#ec4899\",\n        ],\n        calmingAnimations: [\"gentle\", \"slow\", \"smooth\"],\n        stressAnimations: [\"fast\", \"sharp\", \"intense\"],\n      },\n      history: [],\n    };\n  }\n\n  async initialize(): Promise<boolean> {\n    const success = await this.sensorManager.initialize();\n\n    if (success) {\n      this.sensorManager.addListener(this.handleBiometricReading.bind(this));\n      this.loadProfile();\n    }\n\n    return success;\n  }\n\n  private handleBiometricReading(reading: BiometricReading): void {\n    this.profile.history.push(reading);\n\n    // Keep history manageable\n    if (this.profile.history.length > 1000) {\n      this.profile.history = this.profile.history.slice(-500);\n    }\n\n    // Determine adaptation needed\n    const adaptations = this.determineAdaptations(reading);\n\n    // Apply adaptations with debouncing\n    this.debounceAdaptations(adaptations);\n  }\n\n  private determineAdaptations(\n    reading: BiometricReading\n  ): Map<string, BiometricAdaptation> {\n    const adaptations = new Map<string, BiometricAdaptation>();\n    const stressLevel = reading.stressLevel || 0;\n\n    // Color adaptations\n    if (this.settings.enableColorAdaptation) {\n      if (stressLevel > this.settings.stressThreshold) {\n        adaptations.set(\"color\", {\n          type: \"calming\",\n          intensity: stressLevel,\n          colors: this.profile.preferences.calmingColors,\n        });\n      } else if (stressLevel < this.settings.calmingThreshold) {\n        adaptations.set(\"color\", {\n          type: \"energizing\",\n          intensity: 1 - stressLevel,\n          colors: this.profile.preferences.stressColors,\n        });\n      }\n    }\n\n    // Motion adaptations\n    if (this.settings.enableMotionAdaptation) {\n      if (stressLevel > this.settings.stressThreshold) {\n        adaptations.set(\"motion\", {\n          type: \"calming\",\n          speed: Math.max(0.5, 1 - stressLevel),\n          amplitude: Math.max(0.3, 1 - stressLevel),\n        });\n      } else {\n        adaptations.set(\"motion\", {\n          type: \"normal\",\n          speed: 1,\n          amplitude: 1,\n        });\n      }\n    }\n\n    // Layout adaptations\n    if (\n      this.settings.enableLayoutAdaptation &&\n      stressLevel > this.settings.stressThreshold\n    ) {\n      adaptations.set(\"layout\", {\n        type: \"simplified\",\n        density: Math.max(0.5, 1 - stressLevel),\n        spacing: Math.min(2, 1 + stressLevel),\n      });\n    }\n\n    // Audio adaptations\n    if (this.settings.enableAudioAdaptation) {\n      if (stressLevel > this.settings.stressThreshold) {\n        adaptations.set(\"audio\", {\n          type: \"calming\",\n          volume: Math.max(0.1, 0.5 - stressLevel * 0.3),\n          frequency: \"low\",\n        });\n      }\n    }\n\n    return adaptations;\n  }\n\n  private debounceAdaptations(\n    adaptations: Map<string, BiometricAdaptation>\n  ): void {\n    adaptations.forEach((adaptation, type) => {\n      const existingTimeout = this.adaptationTimeouts.get(type);\n      if (existingTimeout) {\n        clearTimeout(existingTimeout);\n      }\n\n      const timeout = setTimeout(() => {\n        this.applyAdaptation(type, adaptation);\n        this.adaptationTimeouts.delete(type);\n      }, this.settings.responseSpeed);\n\n      this.adaptationTimeouts.set(type, timeout);\n    });\n  }\n\n  private applyAdaptation(type: string, adaptation: BiometricAdaptation): void {\n    this.currentAdaptations.set(type, adaptation);\n\n    const callback = this.adaptationCallbacks.get(type);\n    if (callback) {\n      callback(adaptation);\n    }\n  }\n\n  registerAdaptationCallback(\n    type: string,\n    callback: (adaptation: BiometricAdaptation) => void\n  ): void {\n    this.adaptationCallbacks.set(type, callback);\n  }\n\n  unregisterAdaptationCallback(type: string): void {\n    this.adaptationCallbacks.delete(type);\n  }\n\n  getCurrentAdaptation(type: string): BiometricAdaptation | undefined {\n    return this.currentAdaptations.get(type);\n  }\n\n  async connectHeartRateMonitor(): Promise<boolean> {\n    return this.sensorManager.connectHeartRateMonitor();\n  }\n\n  getLatestReading(): BiometricReading | null {\n    return this.sensorManager.getLatestReading();\n  }\n\n  getProfile(): BiometricProfile {\n    return { ...this.profile };\n  }\n\n  updateSettings(settings: Partial<AdaptationSettings>): void {\n    this.settings = { ...this.settings, ...settings };\n  }\n\n  private loadProfile(): void {\n    // CRITICAL SSR FIX: Skip localStorage access on server\n    if (typeof localStorage === \"undefined\") {\n      return;\n    }\n\n    try {\n      const stored = localStorage.getItem(\"auraglass-biometric-profile\");\n      if (stored) {\n        const data = JSON.parse(stored) as StoredBiometricProfile;\n        this.profile = { ...this.profile, ...data };\n      }\n    } catch {\n      // Ignore invalid persisted profile data.\n    }\n  }\n\n  private saveProfile(): void {\n    // CRITICAL SSR FIX: Skip localStorage access on server\n    if (typeof localStorage === \"undefined\") {\n      return;\n    }\n\n    try {\n      localStorage.setItem(\n        \"auraglass-biometric-profile\",\n        JSON.stringify(this.profile)\n      );\n    } catch {\n      // Ignore storage failures; profile remains active in memory.\n    }\n  }\n\n  cleanup(): void {\n    this.sensorManager.cleanup();\n    this.adaptationCallbacks.clear();\n    this.currentAdaptations.clear();\n    this.adaptationTimeouts.forEach((timeout) => clearTimeout(timeout));\n    this.adaptationTimeouts.clear();\n    this.saveProfile();\n  }\n}\n\n// React context\nconst BiometricAdaptationContext = createContext<{\n  engine: BiometricAdaptationEngine | null;\n  isInitialized: boolean;\n  latestReading: BiometricReading | null;\n  currentStressLevel: number;\n  connectHeartRateMonitor: () => Promise<boolean>;\n}>({\n  engine: null,\n  isInitialized: false,\n  latestReading: null,\n  currentStressLevel: 0,\n  connectHeartRateMonitor: async () => false,\n});\n\n// Provider component\nexport function GlassBiometricAdaptationProvider({\n  children,\n  settings,\n  autoInitialize = true,\n}: {\n  children: React.ReactNode;\n  settings?: Partial<AdaptationSettings>;\n  autoInitialize?: boolean;\n}) {\n  const engineRef = useRef<BiometricAdaptationEngine | null>(null);\n  const [isInitialized, setIsInitialized] = useState(false);\n  const [latestReading, setLatestReading] = useState<BiometricReading | null>(\n    null\n  );\n  const [currentStressLevel, setCurrentStressLevel] = useState(0);\n\n  useEffect(() => {\n    engineRef.current = new BiometricAdaptationEngine(settings);\n\n    if (autoInitialize) {\n      engineRef.current.initialize().then((success) => {\n        setIsInitialized(success);\n      });\n    }\n\n    // Update latest reading periodically\n    const interval = setInterval(() => {\n      if (engineRef.current) {\n        const reading = engineRef.current.getLatestReading();\n        if (reading) {\n          setLatestReading(reading);\n          setCurrentStressLevel(reading.stressLevel || 0);\n        }\n      }\n    }, ANIMATION.DURATION.fast);\n\n    return () => {\n      clearInterval(interval);\n      if (engineRef.current) {\n        engineRef.current.cleanup();\n      }\n    };\n  }, [autoInitialize, settings]);\n\n  const connectHeartRateMonitor = useCallback(async (): Promise<boolean> => {\n    if (!engineRef.current) return false;\n    return engineRef.current.connectHeartRateMonitor();\n  }, []);\n\n  const value = {\n    engine: engineRef.current || null,\n    isInitialized,\n    latestReading,\n    currentStressLevel,\n    connectHeartRateMonitor,\n  };\n\n  return (\n    <BiometricAdaptationContext.Provider value={value}>\n      {children}\n    </BiometricAdaptationContext.Provider>\n  );\n}\n\n// Hook to use biometric adaptation\nexport function useBiometricAdaptation() {\n  const context = useContext(BiometricAdaptationContext);\n  if (!context) {\n    throw new Error(\n      \"useBiometricAdaptation must be used within GlassBiometricAdaptationProvider\"\n    );\n  }\n  return context;\n}\n\nexport class BiometricStressDetector extends BiometricAdaptationEngine {\n  getStressLevel(): number {\n    return this.getLatestReading()?.stressLevel ?? 0;\n  }\n\n  getConfidence(): number {\n    return this.getLatestReading()?.confidence ?? 0;\n  }\n}\n\n// Stress-responsive glass component\nexport const GlassStressResponsive = forwardRef<\n  HTMLDivElement,\n  {\n    children: React.ReactNode;\n    className?: string;\n    adaptationType?: \"color\" | \"motion\" | \"layout\" | \"all\";\n    respectMotionPreference?: boolean;\n    \"aria-label\"?: string;\n    \"aria-describedby\"?: string;\n    role?: string;\n  }\n>(function GlassStressResponsive(\n  {\n    children,\n    className,\n    adaptationType = \"all\",\n    respectMotionPreference = true,\n    \"aria-label\": ariaLabel,\n    \"aria-describedby\": ariaDescribedBy,\n    role,\n    ...restProps\n  },\n  ref\n) {\n  const { engine, currentStressLevel, latestReading } =\n    useBiometricAdaptation();\n  const [adaptations, setAdaptations] = useState<BiometricAdaptationState>({});\n  const { prefersReducedMotion } = useMotionPreferenceContext();\n  const stressId = useA11yId(\"stress-responsive\");\n  const descriptionId = useA11yId(\"stress-description\");\n\n  useEffect(() => {\n    if (!engine) return;\n\n    const handleColorAdaptation = (adaptation: BiometricAdaptation) => {\n      if (\n        (adaptationType === \"color\" || adaptationType === \"all\") &&\n        isColorAdaptation(adaptation)\n      ) {\n        setAdaptations((prev) => ({ ...prev, color: adaptation }));\n      }\n    };\n\n    const handleMotionAdaptation = (adaptation: BiometricAdaptation) => {\n      if (\n        (adaptationType === \"motion\" || adaptationType === \"all\") &&\n        isMotionAdaptation(adaptation)\n      ) {\n        setAdaptations((prev) => ({ ...prev, motion: adaptation }));\n      }\n    };\n\n    const handleLayoutAdaptation = (adaptation: BiometricAdaptation) => {\n      if (\n        (adaptationType === \"layout\" || adaptationType === \"all\") &&\n        isLayoutAdaptation(adaptation)\n      ) {\n        setAdaptations((prev) => ({ ...prev, layout: adaptation }));\n      }\n    };\n\n    engine.registerAdaptationCallback(\"color\", handleColorAdaptation);\n    engine.registerAdaptationCallback(\"motion\", handleMotionAdaptation);\n    engine.registerAdaptationCallback(\"layout\", handleLayoutAdaptation);\n\n    return () => {\n      engine.unregisterAdaptationCallback(\"color\");\n      engine.unregisterAdaptationCallback(\"motion\");\n      engine.unregisterAdaptationCallback(\"layout\");\n    };\n  }, [engine, adaptationType]);\n\n  // Calculate adaptive styles\n  const colorAdaptation = adaptations.color;\n  const motionAdaptation = adaptations.motion;\n  const layoutAdaptation = adaptations.layout;\n\n  const adaptiveStyles: React.CSSProperties = {};\n\n  if (colorAdaptation) {\n    if (colorAdaptation.type === \"calming\") {\n      const calmColor = colorAdaptation.colors[0] || COLORS.semantic.primary;\n      adaptiveStyles.backgroundColor = `${calmColor}20`;\n      adaptiveStyles.borderColor = `${calmColor}40`;\n    }\n  }\n\n  const motionSpeed = motionAdaptation?.speed || 1;\n  const layoutSpacing = layoutAdaptation?.spacing || 1;\n  const shouldAnimate = respectMotionPreference ? !prefersReducedMotion : true;\n\n  return (\n    <motion.div\n      ref={ref}\n      style={{ ...adaptiveStyles }}\n      animate={\n        shouldAnimate\n          ? {\n              scale:\n                1 +\n                (currentStressLevel > 0.7 ? -0.02 : 0.01) * currentStressLevel,\n              padding: `${8 * layoutSpacing}px`,\n            }\n          : {}\n      }\n      transition={\n        shouldAnimate\n          ? {\n              duration: ANIMATION.DURATION.slower / 1000 / motionSpeed,\n              ease: currentStressLevel > 0.7 ? \"easeOut\" : \"easeInOut\",\n            }\n          : {}\n      }\n      id={stressId}\n      role={role || \"region\"}\n      aria-label={\n        ariaLabel ||\n        `Stress-responsive interface (${Math.round(currentStressLevel * 100)}% stress level)`\n      }\n      aria-describedby={ariaDescribedBy || descriptionId}\n      aria-live=\"polite\"\n      className={cn(\n        \"glass-surface glass-border glass-radius-md glass-backdrop-blur transition-all\",\n        { transitionDuration: \"var(--glass-motion-duration-slower)\" },\n        currentStressLevel > 0.7\n          ? \"glass-surface-subtle glass-border-subtle\"\n          : \"glass-surface-medium glass-border-medium\",\n        currentStressLevel > 0.7 && \"calming-mode\",\n        className\n      )}\n      {...restProps}\n    >\n      <OptimizedGlass>\n        {/* Screen reader description */}\n        <span id={descriptionId} className=\"glass-sr-only\">\n          Biometric adaptation interface responding to stress level{\" \"}\n          {Math.round(currentStressLevel * 100)}%.\n          {adaptationType !== \"all\"\n            ? ` Adaptation type: ${adaptationType}`\n            : \" All adaptations active.\"}\n        </span>\n        <ContrastGuard>{children}</ContrastGuard>\n\n        {/* Stress level indicator */}\n        <div className=\"glass-absolute glass-top-2 glass-right-2 glass-opacity-30\">\n          <div\n            className={cn(\n              \"glass-w-2 glass-h-2 glass-radius-full glass-transition\",\n              currentStressLevel > 0.7\n                ? \"glass-surface-danger\"\n                : currentStressLevel > 0.4\n                  ? \"glass-surface-warning\"\n                  : \"glass-surface-success\"\n            )}\n            aria-hidden\n          />\n        </div>\n      </OptimizedGlass>\n    </motion.div>\n  );\n});\n\n// Biometric dashboard\nexport const GlassBiometricDashboard = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    show?: boolean;\n    \"aria-label\"?: string;\n    role?: string;\n  }\n>(function GlassBiometricDashboard(\n  { className, show = true, \"aria-label\": ariaLabel, role, ...restProps },\n  ref\n) {\n  const { latestReading, currentStressLevel, connectHeartRateMonitor, engine } =\n    useBiometricAdaptation();\n\n  const [history, setHistory] = useState<BiometricReading[]>([]);\n  const [showDetails, setShowDetails] = useState(false);\n  const dashboardId = useA11yId(\"biometric-dashboard\");\n\n  useEffect(() => {\n    if (!engine) return;\n\n    const interval = setInterval(() => {\n      const readings = engine.getLatestReading();\n      if (readings) {\n        setHistory((prev) => [...prev.slice(-19), readings]); // Keep last 20 readings\n      }\n    }, ANIMATION.DURATION.normal);\n\n    return () => clearInterval(interval);\n  }, [engine]);\n\n  if (!show) return null;\n\n  return (\n    <OptimizedGlass\n      ref={ref}\n      intensity={\"subtle\"}\n      glassBlur={\"strong\"}\n      className={cn(\"fixed top-4 left-4 glass-p-4 glass-radius-lg\", className)}\n      id={dashboardId}\n      role={role || \"region\"}\n      aria-label={ariaLabel || \"Biometric monitoring dashboard\"}\n      {...restProps}\n    >\n      <ContrastGuard>\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3\">\n          <h3 className=\"glass-text-sm glass-font-medium glass-text-secondary dark:glass-text-secondary\">\n            Biometrics\n          </h3>\n          <button\n            onClick={() => setShowDetails(!showDetails)}\n            className=\"glass-text-xs glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target\"\n            aria-expanded={showDetails}\n            aria-controls={`${dashboardId}-details`}\n            aria-label={showDetails ? \"Hide details\" : \"Show details\"}\n          >\n            {showDetails ? \"\u2212\" : \"+\"}\n          </button>\n        </div>\n\n        {/* Current status */}\n        <div className=\"glass-gap-2\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <span className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n              Stress Level\n            </span>\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <div className=\"glass-w-16 glass-h-2 glass-surface-subtle glass-radius-full glass-overflow-hidden\">\n                <motion.div\n                  className={cn(\n                    \"glass-h-full glass-radius-full glass-transition\",\n                    currentStressLevel > 0.7\n                      ? \"glass-surface-danger\"\n                      : currentStressLevel > 0.4\n                        ? \"glass-surface-warning\"\n                        : \"glass-surface-success\"\n                  )}\n                  animate={{ width: `${currentStressLevel * 100}%` }}\n                  transition={{ duration: ANIMATION.DURATION.slow / 1000 }}\n                />\n              </div>\n              <span className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n                {(currentStressLevel * 100).toFixed(0)}%\n              </span>\n            </div>\n          </div>\n\n          {latestReading?.heartRate && (\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <span className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n                Heart Rate\n              </span>\n              <span className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n                {latestReading.heartRate} bpm\n              </span>\n            </div>\n          )}\n        </div>\n      </ContrastGuard>\n\n      {/* Detailed view */}\n      <AnimatePresence>\n        {showDetails && (\n          <motion.div\n            id={`${dashboardId}-details`}\n            className=\"glass-mt-4 glass-pt-4 glass-border-t glass-border-white/10 glass-gap-3\"\n            initial={{ opacity: 0, height: 0 }}\n            animate={{ opacity: 1, height: \"auto\" }}\n            exit={{ opacity: 0, height: 0 }}\n            transition={{ duration: ANIMATION.DURATION.normal / 1000 }}\n          >\n            {/* Stress history chart */}\n            <ContrastGuard>\n              <div>\n                <div className=\"glass-text-xs glass-text-secondary glass-mb-2\">\n                  Stress History\n                </div>\n                <div className=\"glass-relative glass-h-12 glass-surface-primary/50 glass-radius-md\">\n                  {history.map((reading, index) => (\n                    <div\n                      key={index}\n                      ref={(el) => {\n                        if (!el) return;\n                        el.style.left = `${(index / (history.length - 1)) * 100}%`;\n                        el.style.height = `${(reading.stressLevel || 0) * 100}%`;\n                        el.style.backgroundColor =\n                          (reading.stressLevel || 0) > 0.7\n                            ? \"hsl(var(--glass-color-danger))\"\n                            : (reading.stressLevel || 0) > 0.4\n                              ? \"hsl(var(--glass-color-warning))\"\n                              : \"hsl(var(--glass-color-success))\";\n                      }}\n                      className=\"glass-absolute glass-bottom-0 glass-w-1 glass-radius-md\"\n                    />\n                  ))}\n                </div>\n              </div>\n\n              {/* Heart rate monitor connection */}\n              <div>\n                <button\n                  onClick={connectHeartRateMonitor}\n                  className={cn(\n                    \"glass-w-full glass-px-3 glass-py-2 glass-text-xs glass-surface-subtle glass-radius-md glass-focus glass-touch-target\",\n                    \"glass-text-secondary hover:glass-surface-subtle glass-transition\"\n                  )}\n                  aria-label=\"Connect heart rate monitor\"\n                >\n                  <ContrastGuard>Connect Heart Rate Monitor</ContrastGuard>\n                </button>\n              </div>\n\n              {/* Current adaptations */}\n              {engine && (\n                <div>\n                  <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary glass-mb-2\">\n                    Active Adaptations\n                  </div>\n                  <div className=\"glass-gap-1\">\n                    {BIOMETRIC_ADAPTATION_TYPES.map((type) => {\n                      const adaptation = engine.getCurrentAdaptation(type);\n                      return adaptation ? (\n                        <div\n                          key={type}\n                          className=\"glass-flex glass-items-center glass-justify-between glass-text-xs\"\n                        >\n                          <span className=\"glass-text-secondary dark:glass-text-secondary glass-capitalize\">\n                            {type}\n                          </span>\n                          <span className=\"glass-text-secondary dark:glass-text-secondary glass-capitalize\">\n                            {adaptation.type}\n                          </span>\n                        </div>\n                      ) : null;\n                    })}\n                  </div>\n                </div>\n              )}\n\n              {/* Readings info */}\n              {latestReading && (\n                <div>\n                  <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary glass-mb-1\">\n                    Last Reading\n                  </div>\n                  <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n                    {new Date(latestReading.timestamp).toLocaleTimeString()}\n                  </div>\n                  <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n                    Confidence: {(latestReading.confidence * 100).toFixed(0)}%\n                  </div>\n                </div>\n              )}\n            </ContrastGuard>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </OptimizedGlass>\n  );\n});\n\n// Presets for different adaptation modes\nexport const biometricAdaptationPresets = {\n  subtle: {\n    sensitivity: 0.3,\n    responseSpeed: 2000,\n    stressThreshold: 0.8,\n    calmingThreshold: 0.2,\n  },\n  standard: {\n    sensitivity: 0.7,\n    responseSpeed: 1000,\n    stressThreshold: 0.7,\n    calmingThreshold: 0.3,\n  },\n  sensitive: {\n    sensitivity: 0.9,\n    responseSpeed: 500,\n    stressThreshold: 0.5,\n    calmingThreshold: 0.4,\n  },\n  accessibility: {\n    sensitivity: 0.8,\n    responseSpeed: 1500,\n    enableColorAdaptation: true,\n    enableMotionAdaptation: true,\n    enableLayoutAdaptation: true,\n    stressThreshold: 0.6,\n  },\n};\n\ninterface GlassBiometricAdaptationProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  settings?: Partial<AdaptationSettings>;\n  autoInitialize?: boolean;\n  showDashboard?: boolean;\n  children?: React.ReactNode;\n}\n\nfunction BiometricSummaryCard() {\n  const { latestReading, currentStressLevel, isInitialized } =\n    useBiometricAdaptation();\n\n  return (\n    <div\n      className={cn(\n        \"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4\",\n        \"glass-border glass-border-white/10 glass-shadow-soft-lg\"\n      )}\n      data-testid=\"glass-biometric-summary\"\n    >\n      <ContrastGuard>\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n            Biometric adaptation\n          </p>\n          <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n            {isInitialized ? \"Monitoring\" : \"Initializing\"}\n          </h2>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            Stress level {(currentStressLevel * 100).toFixed(0)}%\n          </p>\n        </div>\n        <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Heart rate\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n              {latestReading?.heartRate\n                ? `${latestReading.heartRate.toFixed(0)} bpm`\n                : \"\u2014\"}\n            </p>\n          </div>\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Respiratory\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n              {latestReading?.respiratoryRate\n                ? `${latestReading.respiratoryRate.toFixed(0)} rpm`\n                : \"\u2014\"}\n            </p>\n          </div>\n        </div>\n        <div className=\"glass-text-xs glass-text-secondary\">\n          Confidence{\" \"}\n          {latestReading\n            ? `${Math.round((latestReading.confidence || 0) * 100)}%`\n            : \"Collecting signals\"}\n        </div>\n      </ContrastGuard>\n    </div>\n  );\n}\n\nexport const GlassBiometricAdaptation: React.FC<\n  GlassBiometricAdaptationProps\n> = ({\n  settings,\n  autoInitialize = true,\n  showDashboard = true,\n  className,\n  children,\n  ...rest\n}) => (\n  <GlassBiometricAdaptationProvider\n    settings={settings}\n    autoInitialize={autoInitialize}\n  >\n    <div\n      className={cn(\n        \"glass-biometric-adaptation glass-relative glass-space-y-4\",\n        className\n      )}\n      {...rest}\n    >\n      {children ?? <BiometricSummaryCard />}\n      {showDashboard && <GlassBiometricDashboard />}\n    </div>\n  </GlassBiometricAdaptationProvider>\n);\n\nexport default GlassBiometricAdaptation;\n", "import React, { createContext, useContext, useState, useEffect } from \"react\";\n\nexport interface MotionPreferenceContextType {\n  prefersReducedMotion: boolean;\n  isMotionSafe: boolean;\n  motionPolicy: \"auto\" | \"always-safe\" | \"never-safe\";\n}\n\nconst MotionPreferenceContext = createContext<MotionPreferenceContextType>({\n  prefersReducedMotion: false,\n  isMotionSafe: true,\n  motionPolicy: \"auto\",\n});\n\n/**\n * Hook to access motion preferences from context\n *\n * IMPORTANT: Use this instead of useReducedMotion() when you want centralized\n * motion preferences controlled by MotionPreferenceProvider at the app root.\n */\nexport const useMotionPreferenceContext = () => {\n  const context = useContext(MotionPreferenceContext);\n  if (!context) {\n    return {\n      prefersReducedMotion: false,\n      isMotionSafe: true,\n      motionPolicy: \"auto\" as const,\n    };\n  }\n  return context;\n};\n\nexport interface MotionPreferenceProviderProps {\n  children: React.ReactNode;\n  /**\n   * Initial motion preference for SSR/first render\n   * - 'auto': Detect from user preference (default)\n   * - 'always-safe': Force motion enabled, ignore user preference\n   * - 'never-safe': Force motion disabled\n   *\n   * CRITICAL for SSR: Use 'always-safe' to prevent hydration mismatches\n   * when you know your users don't prefer reduced motion.\n   */\n  initialMotionPolicy?: \"auto\" | \"always-safe\" | \"never-safe\";\n  /**\n   * Initial value for prefersReducedMotion during SSR\n   * Default: false (motion allowed)\n   *\n   * Set to true if you want to assume reduced motion during SSR\n   */\n  initialPrefersReducedMotion?: boolean;\n}\n\n/**\n * MotionPreferenceProvider - Centralized motion preference management\n *\n * CRITICAL for SSR: Wrap your app root with this provider to:\n * 1. Prevent hydration mismatches from motion detection\n * 2. Centralize motion preferences across all AuraGlass components\n * 3. Control SSR behavior via props\n *\n * Example (SSR-safe):\n * ```tsx\n * <MotionPreferenceProvider initialMotionPolicy=\"always-safe\">\n *   <App />\n * </MotionPreferenceProvider>\n * ```\n *\n * Example (respect user preference):\n * ```tsx\n * <MotionPreferenceProvider initialMotionPolicy=\"auto\">\n *   <App />\n * </MotionPreferenceProvider>\n * ```\n */\nexport const MotionPreferenceProvider: React.FC<\n  MotionPreferenceProviderProps\n> = ({\n  children,\n  initialMotionPolicy = \"auto\",\n  initialPrefersReducedMotion = false,\n}) => {\n  // CRITICAL FIX: Start with SSR-safe default to prevent hydration mismatch\n  const [prefersReducedMotion, setPrefersReducedMotion] = useState(\n    initialPrefersReducedMotion\n  );\n  const [motionPolicy] = useState(initialMotionPolicy);\n\n  useEffect(() => {\n    // Skip detection if motion policy is forced\n    if (motionPolicy !== \"auto\") {\n      setPrefersReducedMotion(motionPolicy === \"never-safe\");\n      return;\n    }\n\n    // Detect actual motion preference after hydration (client-side only)\n    if (typeof window === \"undefined\") return;\n\n    const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    setPrefersReducedMotion(mediaQuery.matches);\n\n    const handleChange = (event: MediaQueryListEvent) => {\n      setPrefersReducedMotion(event.matches);\n    };\n\n    mediaQuery.addEventListener(\"change\", handleChange);\n    return () => mediaQuery.removeEventListener(\"change\", handleChange);\n  }, [motionPolicy]);\n\n  const value = {\n    prefersReducedMotion,\n    isMotionSafe: !prefersReducedMotion,\n    motionPolicy,\n  };\n\n  return (\n    <MotionPreferenceContext.Provider value={value}>\n      {children}\n    </MotionPreferenceContext.Provider>\n  );\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Eye Tracking Integration\n * Gaze-responsive glass effects using WebGazer.js and device camera\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n  forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence, useMotionValue } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { OptimizedGlassCore as OptimizedGlass } from \"@/primitives/OptimizedGlassCore\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Eye tracking data types\ninterface GazePoint {\n  x: number;\n  y: number;\n  timestamp: number;\n  confidence: number;\n}\n\ninterface GazeRegion {\n  id: string;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  element?: HTMLElement;\n}\n\ninterface GazeInteraction {\n  region: GazeRegion;\n  duration: number;\n  intensity: number;\n  type: \"fixation\" | \"saccade\" | \"pursuit\" | \"drift\";\n  startTime: number;\n  endTime: number;\n}\n\ninterface EyeTrackingCalibration {\n  isCalibrated: boolean;\n  accuracy: number;\n  points: Array<{\n    screen: { x: number; y: number };\n    gaze: { x: number; y: number };\n  }>;\n}\n\n// WebGazer integration class\nclass WebGazerIntegration {\n  private isInitialized = false;\n  private isCalibrated = false;\n  private gazeListeners: Array<(gaze: GazePoint) => void> = [];\n  private calibrationPoints: Array<{ x: number; y: number }> = [];\n  private lastGaze: GazePoint | null = null;\n\n  async initialize(): Promise<boolean> {\n    try {\n      // Check if WebGazer is already loaded\n      if (typeof window !== \"undefined\" && !(window as any).webgazer) {\n        // Dynamically load WebGazer\n        await this.loadWebGazer();\n      }\n\n      const webgazer = (window as any).webgazer;\n      if (!webgazer) {\n        throw new Error(\"WebGazer failed to load\");\n      }\n\n      // Initialize WebGazer\n      await webgazer\n        .setRegression(\"ridge\")\n        .setTracker(\"TFFacemesh\")\n        .setGazeListener((data: any, timestamp: number) => {\n          if (data) {\n            const gazePoint: GazePoint = {\n              x: data.x,\n              y: data.y,\n              timestamp,\n              confidence: data.confidence || 0.5,\n            };\n            this.lastGaze = gazePoint;\n            this.gazeListeners.forEach((listener: any) => listener(gazePoint));\n          }\n        })\n        .saveDataAcrossSessions(true)\n        .begin();\n\n      // Hide the video overlay\n      webgazer.showVideoPreview(false).showPredictionPoints(false);\n\n      this.isInitialized = true;\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async loadWebGazer(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const script = document.createElement(\"script\");\n      script.src = \"https://webgazer.cs.brown.edu/webgazer.js\";\n      script.onload = () => resolve();\n      script.onerror = () => reject(new Error(\"Failed to load WebGazer\"));\n      document.head.appendChild(script);\n    });\n  }\n\n  addGazeListener(listener: (gaze: GazePoint) => void): () => void {\n    this.gazeListeners.push(listener);\n    return () => {\n      const index = this.gazeListeners.indexOf(listener);\n      if (index > -1) {\n        this.gazeListeners.splice(index, 1);\n      }\n    };\n  }\n\n  async startCalibration(): Promise<void> {\n    if (!this.isInitialized) return;\n\n    this.calibrationPoints = [\n      { x: 0.1, y: 0.1 },\n      { x: 0.5, y: 0.1 },\n      { x: 0.9, y: 0.1 },\n      { x: 0.1, y: 0.5 },\n      { x: 0.5, y: 0.5 },\n      { x: 0.9, y: 0.5 },\n      { x: 0.1, y: 0.9 },\n      { x: 0.5, y: 0.9 },\n      { x: 0.9, y: 0.9 },\n    ];\n  }\n\n  async calibratePoint(x: number, y: number): Promise<void> {\n    if (!this.isInitialized) return;\n\n    const webgazer = (window as any).webgazer;\n    if (webgazer) {\n      // Add calibration point\n      await new Promise((resolve) => {\n        webgazer.recordScreenPosition(x, y, \"click\");\n        setTimeout(resolve, ANIMATION.DURATION.fast); // Allow time for calibration\n      });\n    }\n  }\n\n  finishCalibration(): void {\n    this.isCalibrated = true;\n  }\n\n  getLastGaze(): GazePoint | null {\n    return this.lastGaze;\n  }\n\n  cleanup(): void {\n    if (this.isInitialized && (window as any).webgazer) {\n      (window as any).webgazer.end();\n    }\n    this.gazeListeners = [];\n    this.isInitialized = false;\n    this.isCalibrated = false;\n  }\n}\n\n// Eye tracking engine\nclass EyeTrackingEngine {\n  private webgazer: WebGazerIntegration;\n  private gazeHistory: GazePoint[] = [];\n  private regions: Map<string, GazeRegion> = new Map();\n  private activeInteractions: Map<string, GazeInteraction> = new Map();\n  private fixationThreshold = 100; // ms\n  private saccadeThreshold = 50; // pixels\n  private isTracking = false;\n\n  constructor() {\n    this.webgazer = new WebGazerIntegration();\n  }\n\n  async initialize(): Promise<boolean> {\n    const success = await this.webgazer.initialize();\n    if (success) {\n      this.webgazer.addGazeListener(this.handleGazePoint.bind(this));\n      this.isTracking = true;\n    }\n    return success;\n  }\n\n  private handleGazePoint(gaze: GazePoint): void {\n    if (!this.isTracking) return;\n\n    // Add to history\n    this.gazeHistory.push(gaze);\n\n    // Keep only recent history\n    if (this.gazeHistory.length > 1000) {\n      this.gazeHistory = this.gazeHistory.slice(-500);\n    }\n\n    // Analyze gaze patterns\n    this.analyzeGazePatterns(gaze);\n\n    // Check region interactions\n    this.checkRegionInteractions(gaze);\n  }\n\n  private analyzeGazePatterns(currentGaze: GazePoint): void {\n    if (this.gazeHistory.length < 2) return;\n\n    const previousGaze = this.gazeHistory[this.gazeHistory.length - 2];\n    const distance = Math.sqrt(\n      Math.pow(currentGaze.x - previousGaze.x, 2) +\n        Math.pow(currentGaze.y - previousGaze.y, 2)\n    );\n\n    const timeDiff = currentGaze.timestamp - previousGaze.timestamp;\n\n    // Detect fixations, saccades, etc.\n    if (distance < this.saccadeThreshold && timeDiff > this.fixationThreshold) {\n      // Potential fixation\n      this.handleFixation(currentGaze);\n    } else if (distance > this.saccadeThreshold) {\n      // Saccade movement\n      this.handleSaccade(previousGaze, currentGaze);\n    }\n  }\n\n  private handleFixation(gaze: GazePoint): void {\n    // Find which region this fixation is in\n    const region = this.findRegionAt(gaze.x, gaze.y);\n    if (region) {\n      const existingInteraction = this.activeInteractions.get(region.id);\n      if (existingInteraction) {\n        // Update existing interaction\n        existingInteraction.endTime = gaze.timestamp;\n        existingInteraction.duration =\n          gaze.timestamp - existingInteraction.startTime;\n        existingInteraction.intensity = Math.min(\n          1,\n          existingInteraction.intensity + 0.1\n        );\n      } else {\n        // Start new interaction\n        this.activeInteractions.set(region.id, {\n          region,\n          duration: 0,\n          intensity: 0.1,\n          type: \"fixation\",\n          startTime: gaze.timestamp,\n          endTime: gaze.timestamp,\n        });\n      }\n    }\n  }\n\n  private handleSaccade(from: GazePoint, to: GazePoint): void {\n    // Handle rapid eye movement between regions\n    const fromRegion = this.findRegionAt(from.x, from.y);\n    const toRegion = this.findRegionAt(to.x, to.y);\n\n    if (fromRegion && toRegion && fromRegion.id !== toRegion.id) {\n      // End interaction with previous region\n      const fromInteraction = this.activeInteractions.get(fromRegion.id);\n      if (fromInteraction) {\n        fromInteraction.endTime = from.timestamp;\n        fromInteraction.type = \"saccade\";\n      }\n\n      // Start interaction with new region\n      this.activeInteractions.set(toRegion.id, {\n        region: toRegion,\n        duration: 0,\n        intensity: 0.1,\n        type: \"saccade\",\n        startTime: to.timestamp,\n        endTime: to.timestamp,\n      });\n    }\n  }\n\n  private checkRegionInteractions(gaze: GazePoint): void {\n    const currentRegion = this.findRegionAt(gaze.x, gaze.y);\n\n    // End interactions for regions that are no longer being gazed at\n    this.activeInteractions.forEach((interaction, regionId) => {\n      if (!currentRegion || regionId !== currentRegion.id) {\n        const timeSinceEnd = gaze.timestamp - interaction.endTime;\n        if (timeSinceEnd > 500) {\n          // 500ms timeout\n          this.activeInteractions.delete(regionId);\n        }\n      }\n    });\n  }\n\n  private findRegionAt(x: number, y: number): GazeRegion | null {\n    for (const region of this.regions.values()) {\n      if (\n        x >= region.x &&\n        x <= region.x + region.width &&\n        y >= region.y &&\n        y <= region.y + region.height\n      ) {\n        return region;\n      }\n    }\n    return null;\n  }\n\n  registerRegion(region: GazeRegion): void {\n    this.regions.set(region.id, region);\n  }\n\n  unregisterRegion(regionId: string): void {\n    this.regions.delete(regionId);\n    this.activeInteractions.delete(regionId);\n  }\n\n  getActiveInteractions(): GazeInteraction[] {\n    return Array.from(this.activeInteractions.values());\n  }\n\n  getRegionInteraction(regionId: string): GazeInteraction | null {\n    return this.activeInteractions.get(regionId) || null;\n  }\n\n  async startCalibration(): Promise<void> {\n    return this.webgazer.startCalibration();\n  }\n\n  async calibratePoint(x: number, y: number): Promise<void> {\n    return this.webgazer.calibratePoint(x, y);\n  }\n\n  finishCalibration(): void {\n    this.webgazer.finishCalibration();\n  }\n\n  cleanup(): void {\n    this.webgazer.cleanup();\n    this.activeInteractions.clear();\n    this.regions.clear();\n    this.gazeHistory = [];\n    this.isTracking = false;\n  }\n}\n\n// React context for eye tracking\nconst EyeTrackingContext = createContext<{\n  engine: EyeTrackingEngine | null;\n  isInitialized: boolean;\n  isCalibrating: boolean;\n  activeInteractions: GazeInteraction[];\n  startCalibration: () => Promise<void>;\n  finishCalibration: () => void;\n}>({\n  engine: null,\n  isInitialized: false,\n  isCalibrating: false,\n  activeInteractions: [],\n  startCalibration: async () => {},\n  finishCalibration: () => {},\n});\n\n// Provider component\nexport function GlassEyeTrackingProvider({\n  children,\n  autoInitialize = false,\n  onGazeInteraction,\n}: {\n  children: React.ReactNode;\n  autoInitialize?: boolean;\n  onGazeInteraction?: (interaction: GazeInteraction) => void;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<EyeTrackingEngine | null>(null);\n  const [isInitialized, setIsInitialized] = useState(false);\n  const [isCalibrating, setIsCalibrating] = useState(false);\n  const [activeInteractions, setActiveInteractions] = useState<\n    GazeInteraction[]\n  >([]);\n\n  // Initialize engine\n  useEffect(() => {\n    engineRef.current = new EyeTrackingEngine();\n\n    if (autoInitialize) {\n      engineRef.current.initialize().then((success) => {\n        setIsInitialized(success);\n      });\n    }\n\n    return () => {\n      if (engineRef.current) {\n        engineRef.current.cleanup();\n      }\n    };\n  }, [autoInitialize]);\n\n  // Update active interactions\n  useEffect(() => {\n    if (!engineRef.current || !isInitialized) return;\n\n    const interval = setInterval(() => {\n      const interactions = engineRef.current!.getActiveInteractions();\n      setActiveInteractions(interactions);\n\n      // Trigger callback for new interactions\n      interactions.forEach((interaction: any) =>\n        onGazeInteraction?.(interaction)\n      );\n    }, ANIMATION.DURATION.fast / 10);\n\n    return () => clearInterval(interval);\n  }, [isInitialized, onGazeInteraction]);\n\n  const startCalibration = useCallback(async () => {\n    if (!engineRef.current) return;\n\n    setIsCalibrating(true);\n    await engineRef.current.startCalibration();\n  }, []);\n\n  const finishCalibration = useCallback(() => {\n    if (!engineRef.current) return;\n\n    engineRef.current.finishCalibration();\n    setIsCalibrating(false);\n  }, []);\n\n  const value = {\n    engine: engineRef.current || null,\n    isInitialized,\n    isCalibrating,\n    activeInteractions,\n    startCalibration,\n    finishCalibration,\n  };\n\n  return (\n    <EyeTrackingContext.Provider value={value}>\n      {children}\n    </EyeTrackingContext.Provider>\n  );\n}\n\n// Hook to use eye tracking\nexport function useEyeTracking() {\n  const context = useContext(EyeTrackingContext);\n  if (!context) {\n    throw new Error(\n      \"useEyeTracking must be used within GlassEyeTrackingProvider\"\n    );\n  }\n  return context;\n}\n\n// Calibration component\nexport function GlassEyeTrackingCalibration({\n  onComplete,\n  className,\n}: {\n  onComplete?: () => void;\n  className?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { startCalibration, finishCalibration, isCalibrating } =\n    useEyeTracking();\n  const [currentPoint, setCurrentPoint] = useState(0);\n  const [isCalibrationActive, setIsCalibrationActive] = useState(false);\n\n  const calibrationPoints = [\n    { x: 10, y: 10 },\n    { x: 50, y: 10 },\n    { x: 90, y: 10 },\n    { x: 10, y: 50 },\n    { x: 50, y: 50 },\n    { x: 90, y: 50 },\n    { x: 10, y: 90 },\n    { x: 50, y: 90 },\n    { x: 90, y: 90 },\n  ];\n\n  const handleStartCalibration = async () => {\n    await startCalibration();\n    setIsCalibrationActive(true);\n    setCurrentPoint(0);\n  };\n\n  const handlePointClick = async (\n    point: { x: number; y: number },\n    index: number\n  ) => {\n    if (!isCalibrationActive) return;\n\n    // Convert percentage to screen coordinates\n    const screenX = (point.x / 100) * window.innerWidth;\n    const screenY = (point.y / 100) * window.innerHeight;\n\n    // Simulate calibration point click\n    const engine = useEyeTracking().engine;\n    if (engine) {\n      await engine.calibratePoint(screenX, screenY);\n    }\n\n    // Move to next point\n    if (index < calibrationPoints.length - 1) {\n      setCurrentPoint(index + 1);\n    } else {\n      // Calibration complete\n      finishCalibration();\n      setIsCalibrationActive(false);\n      onComplete?.();\n    }\n  };\n\n  if (!isCalibrating && !isCalibrationActive) {\n    return (\n      <ContrastGuard>\n        <div\n          className={cn(\n            \"glass-flex glass-flex-col glass-items-center glass-gap-4\",\n            className\n          )}\n        >\n          <div className={cn(\"glass-text-center\")}>\n            <h3\n              className={cn(\n                \"glass-text-lg glass-font-medium glass-text-primary glass-mb-2\"\n              )}\n            >\n              Eye Tracking Calibration\n            </h3>\n            <p className={cn(\"glass-text-sm glass-text-secondary glass-mb-4\")}>\n              Look at each dot and click to calibrate your gaze tracking\n            </p>\n            <motion.button\n              className={cn(\n                \"glass-px-6 glass-py-3 glass-surface-primary glass-elev-2 glass-radius-lg\",\n                \"glass-text-primary font-medium transition-all\",\n                { transitionDuration: \"var(--glass-motion-duration-normal)\" },\n                \"hover:glass-elev-3 focus:outline-none focus:ring-2 glass-focus-ring-blue-500\"\n              )}\n              onClick={handleStartCalibration}\n              whileHover={prefersReducedMotion ? {} : { scale: 1.02 }}\n              whileTap={prefersReducedMotion ? {} : { scale: 0.98 }}\n              transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n              aria-label=\"Start eye tracking calibration\"\n            >\n              Start Calibration\n            </motion.button>\n          </div>\n        </div>\n      </ContrastGuard>\n    );\n  }\n\n  if (isCalibrationActive) {\n    return (\n      <div\n        className={cn(\"fixed inset-0 z-50 glass-surface-primary\", className)}\n      >\n        <div className={cn(\"glass-absolute glass-inset-0\")}>\n          <div className={cn(\"glass-relative glass-w-full glass-h-full\")}>\n            {/* Progress */}\n            <ContrastGuard>\n              <div\n                className={cn(\n                  \"glass-absolute glass-top-4 glass-left-1-2 glass-translate-x-1/2-neg\"\n                )}\n                role=\"status\"\n                aria-label={`Calibration progress: point ${currentPoint + 1} of ${calibrationPoints.length}`}\n              >\n                <div\n                  className={cn(\n                    \"glass-surface-secondary glass-radius-lg glass-px-4 glass-py-2\"\n                  )}\n                >\n                  <span className={cn(\"glass-text-sm glass-text-primary\")}>\n                    Point {currentPoint + 1} of {calibrationPoints.length}\n                  </span>\n                </div>\n              </div>\n\n              {/* Instructions */}\n              <div\n                className={cn(\n                  \"glass-absolute glass-top-20 glass-left-1-2 glass-translate-x-1/2-neg glass-text-center\"\n                )}\n              >\n                <p\n                  className={cn(\"glass-text-lg glass-text-primary glass-mb-2\")}\n                >\n                  Look at the blue dot and click it\n                </p>\n                <p className={cn(\"glass-text-sm glass-text-secondary\")}>\n                  Keep your head still and follow the dot with your eyes\n                </p>\n              </div>\n            </ContrastGuard>\n\n            {/* Calibration points */}\n            {calibrationPoints.map((point, index) => (\n              <motion.div\n                key={index}\n                className={cn(\n                  \"glass-absolute glass-w-4 glass-h-4 glass-translate-x-1/2-neg glass-translate-y-1/2-neg glass-cursor-pointer glass-focus\"\n                )}\n                ref={(el) => {\n                  if (el) {\n                    el.style.left = `${point.x}%`;\n                    el.style.top = `${point.y}%`;\n                  }\n                }}\n                initial={{ scale: 0, opacity: 0 }}\n                animate={{\n                  scale:\n                    index === currentPoint\n                      ? [1, 1.2, 1]\n                      : index < currentPoint\n                        ? 1\n                        : 0,\n                  opacity: index <= currentPoint ? 1 : 0.3,\n                }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        duration:\n                          index === currentPoint\n                            ? ANIMATION.DURATION.slow / 1000\n                            : ANIMATION.DURATION.fast / 1000,\n                        repeat: index === currentPoint ? Infinity : 0,\n                      }\n                }\n                onClick={() => handlePointClick(point, index)}\n                aria-label={`Calibration point ${index + 1} of ${calibrationPoints.length}`}\n              >\n                <div\n                  className={cn(\n                    \"glass-w-full glass-h-full glass-radius-full\",\n                    index === currentPoint\n                      ? \"glass-surface-accent glass-ring-4 glass-ring-accent/30\"\n                      : index < currentPoint\n                        ? \"glass-surface-success\"\n                        : \"glass-surface-muted\"\n                  )}\n                />\n              </motion.div>\n            ))}\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return null;\n}\n\n// Gaze-responsive component wrapper\nexport function GlassGazeResponsive({\n  children,\n  className,\n  regionId,\n  onGazeEnter,\n  onGazeLeave,\n  onGazeIntensityChange,\n  glassIntensity = true,\n  glassRadius = true,\n  glassBlur = true,\n}: {\n  children: React.ReactNode;\n  className?: string;\n  regionId: string;\n  onGazeEnter?: (interaction: GazeInteraction) => void;\n  onGazeLeave?: () => void;\n  onGazeIntensityChange?: (intensity: number) => void;\n  glassIntensity?: boolean;\n  glassRadius?: boolean;\n  glassBlur?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { engine, activeInteractions } = useEyeTracking();\n  const elementRef = useRef<HTMLDivElement>(null);\n  const [isGazed, setIsGazed] = useState(false);\n  const [gazeIntensity, setGazeIntensity] = useState(0);\n\n  // Register region with eye tracking engine\n  useEffect(() => {\n    if (!engine || !elementRef.current) return;\n\n    const element = elementRef.current;\n    const rect = element.getBoundingClientRect();\n\n    const region: GazeRegion = {\n      id: regionId,\n      x: rect.left,\n      y: rect.top,\n      width: rect.width,\n      height: rect.height,\n      element,\n    };\n\n    engine.registerRegion(region);\n\n    // Update region on resize/scroll\n    const updateRegion = () => {\n      const newRect = element.getBoundingClientRect();\n      engine.registerRegion({\n        ...region,\n        x: newRect.left,\n        y: newRect.top,\n        width: newRect.width,\n        height: newRect.height,\n      });\n    };\n\n    window.addEventListener(\"resize\", updateRegion);\n    window.addEventListener(\"scroll\", updateRegion);\n\n    return () => {\n      engine.unregisterRegion(regionId);\n      window.removeEventListener(\"resize\", updateRegion);\n      window.removeEventListener(\"scroll\", updateRegion);\n    };\n  }, [engine, regionId]);\n\n  // Track gaze interactions\n  useEffect(() => {\n    const interaction = activeInteractions.find(\n      (i) => i.region.id === regionId\n    );\n\n    if (interaction && !isGazed) {\n      setIsGazed(true);\n      onGazeEnter?.(interaction);\n    } else if (!interaction && isGazed) {\n      setIsGazed(false);\n      setGazeIntensity(0);\n      onGazeLeave?.();\n    }\n\n    if (interaction) {\n      setGazeIntensity(interaction.intensity);\n      onGazeIntensityChange?.(interaction.intensity);\n    }\n  }, [\n    activeInteractions,\n    regionId,\n    isGazed,\n    onGazeEnter,\n    onGazeLeave,\n    onGazeIntensityChange,\n  ]);\n\n  return (\n    <motion.div\n      ref={elementRef}\n      className={cn(\n        \"transition-all\",\n        { transitionDuration: \"var(--glass-motion-duration-normal)\" },\n        glassIntensity && isGazed && \"glass-surface-primary glass-elev-2\",\n        className\n      )}\n      animate={{\n        scale: isGazed ? 1 + gazeIntensity * 0.02 : 1,\n        ...(glassBlur &&\n          {\n            // Use createGlassStyle() instead,\n          }),\n        ...(glassRadius && {\n          borderRadius: `${8 + gazeIntensity * 4}px`,\n        }),\n      }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.normal / 1000 }\n      }\n      // background color applied via ref assignment above\n    >\n      {children}\n\n      {/* Gaze indicator */}\n      <AnimatePresence>\n        {isGazed && (\n          <motion.div\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit\"\n            )}\n            initial={{ opacity: 0 }}\n            animate={prefersReducedMotion ? {} : { opacity: 0.8 }}\n            exit={{ opacity: 0 }}\n          >\n            <div\n              className={cn(\n                \"glass-absolute glass-inset-0 glass-radius-inherit\"\n              )}\n              style={{\n                boxShadow: `inset 0 0 ${20 + gazeIntensity * 30}px var(--glass-color-primary, ${0.2 + gazeIntensity * 0.3})`,\n              }}\n            />\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </motion.div>\n  );\n}\n\n// Gaze visualization overlay\nexport function GlassGazeVisualization({\n  show = false,\n  className,\n}: {\n  show?: boolean;\n  className?: string;\n}) {\n  const { activeInteractions } = useEyeTracking();\n\n  if (!show) return null;\n\n  return (\n    <div\n      className={cn(\n        \"glass-fixed glass-inset-0 glass-pointer-events-none glass-z-40\",\n        className\n      )}\n    >\n      <AnimatePresence>\n        {activeInteractions.map((interaction: any) => (\n          <motion.div\n            key={interaction.region.id}\n            className=\"glass-absolute\"\n            ref={(el) => {\n              if (!el) return;\n              const r = interaction.region as any;\n              el.style.left = typeof r.x === \"number\" ? `${r.x}px` : r.x;\n              el.style.top = typeof r.y === \"number\" ? `${r.y}px` : r.y;\n              el.style.width =\n                typeof r.width === \"number\" ? `${r.width}px` : r.width;\n              el.style.height =\n                typeof r.height === \"number\" ? `${r.height}px` : r.height;\n            }}\n            initial={{ opacity: 0, scale: 0.9 }}\n            animate={{ opacity: 0.6, scale: 1 }}\n            exit={{ opacity: 0, scale: 0.9 }}\n          >\n            <div\n              className={cn(\n                \"glass-w-full glass-h-full glass-border-2 glass-radius-md\"\n              )}\n              ref={(el) => {\n                if (!el) return;\n                const a = interaction.intensity;\n                el.style.borderColor = `var(--glass-color-primary,${a})`;\n                el.style.backgroundColor = `var(--glass-color-primary,${a * 0.1})`;\n              }}\n            />\n            <div\n              className={cn(\n                \"glass-absolute glass--top-2 glass-left-0 glass-text-xs glass-font-mono glass-text-primary\"\n              )}\n            >\n              {interaction.type} ({(interaction.intensity * 100).toFixed(0)}%)\n            </div>\n          </motion.div>\n        ))}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Presets for different eye tracking modes\nexport const eyeTrackingPresets = {\n  subtle: {\n    glassIntensity: 0.5,\n    responsiveness: 0.3,\n    visualFeedback: false,\n  },\n  standard: {\n    glassIntensity: 1.0,\n    responsiveness: 0.6,\n    visualFeedback: true,\n  },\n  dramatic: {\n    glassIntensity: 1.5,\n    responsiveness: 1.0,\n    visualFeedback: true,\n  },\n  accessibility: {\n    glassIntensity: 0.8,\n    responsiveness: 0.4,\n    visualFeedback: true,\n    highContrast: true,\n  },\n};\n\ninterface GlassEyeTrackingProps extends React.HTMLAttributes<HTMLDivElement> {\n  autoInitialize?: boolean;\n  showCalibration?: boolean;\n  showVisualization?: boolean;\n  children?: React.ReactNode;\n  onGazeInteraction?: (interaction: GazeInteraction) => void;\n}\n\nfunction EyeTrackingSummaryCard() {\n  const { isInitialized, isCalibrating, activeInteractions } = useEyeTracking();\n\n  return (\n    <div\n      className={cn(\n        \"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4\",\n        \"glass-border glass-border-white/10 glass-shadow-soft-lg\"\n      )}\n      data-testid=\"glass-eye-tracking-summary\"\n    >\n      <ContrastGuard>\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n            Eye tracking\n          </p>\n          <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n            {isInitialized ? \"Active\" : \"Initializing\"}\n          </h2>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            {isCalibrating\n              ? \"Calibration in progress\"\n              : \"Capturing gaze interactions\"}\n          </p>\n        </div>\n        <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Interactions\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n              {activeInteractions.length}\n            </p>\n          </div>\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Status\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n              {isCalibrating ? \"Calibrating\" : \"Tracking\"}\n            </p>\n          </div>\n        </div>\n      </ContrastGuard>\n    </div>\n  );\n}\n\nexport const GlassEyeTracking: React.FC<GlassEyeTrackingProps> = ({\n  autoInitialize = false,\n  showCalibration = true,\n  showVisualization = true,\n  className,\n  children,\n  onGazeInteraction,\n  ...rest\n}) => (\n  <GlassEyeTrackingProvider\n    autoInitialize={autoInitialize}\n    onGazeInteraction={onGazeInteraction}\n  >\n    <div\n      className={cn(\n        \"glass-eye-tracking glass-relative glass-space-y-4\",\n        className\n      )}\n      {...rest}\n    >\n      {children ?? <EyeTrackingSummaryCard />}\n      {showCalibration && <GlassEyeTrackingCalibration />}\n      {showVisualization && <GlassGazeVisualization show />}\n    </div>\n  </GlassEyeTrackingProvider>\n);\n\nexport default GlassEyeTracking;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Predictive UI Engine\n * AI-powered system that learns user behavior and anticipates interface needs\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Behavioral data types\ntype InteractionType =\n  | \"click\"\n  | \"hover\"\n  | \"scroll\"\n  | \"focus\"\n  | \"resize\"\n  | \"navigate\";\ntype DeviceType = \"mobile\" | \"tablet\" | \"desktop\";\ntype PatternType = \"sequence\" | \"temporal\" | \"spatial\" | \"contextual\";\ntype PredictiveActionType =\n  | \"preload\"\n  | \"pre-render\"\n  | \"animate\"\n  | \"suggest\"\n  | \"optimize\"\n  | \"navigate\";\ntype PredictiveInsightCategory =\n  | \"performance\"\n  | \"usability\"\n  | \"accessibility\"\n  | \"engagement\";\ntype PredictiveMetadataValue =\n  | string\n  | number\n  | boolean\n  | null\n  | undefined\n  | PredictiveMetadataValue[]\n  | { [key: string]: PredictiveMetadataValue };\ntype PredictiveMetadata = Record<string, PredictiveMetadataValue>;\ntype PatternElement = string | number;\n\ninterface PersistedPredictiveData {\n  patterns?: Array<[string, BehavioralPattern]>;\n  interactions?: UserInteraction[];\n}\n\ninterface WorkflowSuggestion {\n  type: \"reorganize\" | \"automation\";\n  title: string;\n  description: string;\n  priority: number;\n  cardId: string;\n  suggestedColumn: string;\n  reason: string;\n}\n\ninterface BoardPerformanceReport {\n  averageResponseTime: number;\n  abandonmentRate: number;\n  interactionCount: number;\n  efficiency: number;\n  totalCards: number;\n  bottlenecks: string[];\n  productivity: number;\n  completionRate: number;\n  suggestions: WorkflowSuggestion[];\n}\n\ninterface UserInteraction {\n  type: InteractionType;\n  element: string;\n  timestamp: number;\n  context: {\n    viewport: { width: number; height: number };\n    timeOfDay: number;\n    deviceType: DeviceType;\n    location?: { x: number; y: number };\n    duration?: number;\n  };\n  metadata: PredictiveMetadata;\n}\n\ninterface BehavioralPattern {\n  id: string;\n  type: PatternType;\n  confidence: number;\n  frequency: number;\n  lastSeen: number;\n  pattern: PatternElement[];\n  prediction: string;\n}\n\ninterface PredictiveAction {\n  id: string;\n  type: PredictiveActionType;\n  target: string;\n  confidence: number;\n  timing: number;\n  metadata: PredictiveMetadata;\n}\n\ninterface PredictiveInsight {\n  id: string;\n  type?: string;\n  category: PredictiveInsightCategory;\n  insight: string;\n  confidence: number;\n  impact: number;\n  recommendation: string;\n  metadata?: {\n    sentiment?: \"positive\" | \"neutral\" | \"negative\";\n    urgency?: \"low\" | \"medium\" | \"high\";\n    topic?: string;\n    userStress?: number;\n    complexity?: number;\n    [key: string]: PredictiveMetadataValue;\n  };\n}\n\nconst PREDICTIVE_ACTION_TYPES: PredictiveActionType[] = [\n  \"preload\",\n  \"suggest\",\n  \"animate\",\n  \"optimize\",\n  \"pre-render\",\n];\n\nconst getNumericMetadata = (\n  metadata: PredictiveMetadata,\n  key: string\n): number | undefined => {\n  const value = metadata[key];\n  return typeof value === \"number\" ? value : undefined;\n};\n\nconst getBooleanMetadata = (\n  metadata: PredictiveMetadata,\n  key: string\n): boolean | undefined => {\n  const value = metadata[key];\n  return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst getNumberArrayMetadata = (\n  metadata: PredictiveMetadata,\n  key: string\n): number[] | undefined => {\n  const value = metadata[key];\n  return Array.isArray(value) && value.every((item) => typeof item === \"number\")\n    ? value\n    : undefined;\n};\n\nconst getBoardCardCount = (context: PredictiveMetadata): number => {\n  const columns = context.columns;\n  if (!Array.isArray(columns)) return 0;\n\n  return columns.reduce<number>((total, column) => {\n    if (!column || typeof column !== \"object\" || Array.isArray(column)) {\n      return total;\n    }\n\n    const cards = (column as { cards?: PredictiveMetadataValue }).cards;\n    return total + (Array.isArray(cards) ? cards.length : 0);\n  }, 0);\n};\n\n// Neural network simulation for prediction\nclass PredictiveNeuralNet {\n  private weights: number[][][];\n  private biases: number[][];\n  private learningRate: number;\n\n  constructor(inputSize: number, hiddenSize: number, outputSize: number) {\n    this.learningRate = 0.01;\n\n    // Initialize weights and biases\n    this.weights = [\n      Array.from({ length: hiddenSize }, () =>\n        Array.from({ length: inputSize }, () => Math.random() * 2 - 1)\n      ),\n      Array.from({ length: outputSize }, () =>\n        Array.from({ length: hiddenSize }, () => Math.random() * 2 - 1)\n      ),\n    ];\n\n    this.biases = [\n      Array(hiddenSize)\n        .fill(0)\n        .map(() => Math.random() * 2 - 1),\n      Array(outputSize)\n        .fill(0)\n        .map(() => Math.random() * 2 - 1),\n    ];\n  }\n\n  private sigmoid(x: number): number {\n    return 1 / (1 + Math.exp(-x));\n  }\n\n  private relu(x: number): number {\n    return Math.max(0, x);\n  }\n\n  forward(inputs: number[]): number[] {\n    // Hidden layer\n    const hidden = this.weights[0].map((neuronWeights, i) => {\n      const sum =\n        neuronWeights.reduce((acc, weight, j) => acc + weight * inputs[j], 0) +\n        this.biases[0][i];\n      return this.relu(sum);\n    });\n\n    // Output layer\n    const output = this.weights[1].map((neuronWeights, i) => {\n      const sum =\n        neuronWeights.reduce((acc, weight, j) => acc + weight * hidden[j], 0) +\n        this.biases[1][i];\n      return this.sigmoid(sum);\n    });\n\n    return output;\n  }\n\n  train(inputs: number[], expectedOutputs: number[]): void {\n    const outputs = this.forward(inputs);\n\n    // Simple gradient descent (simplified)\n    const outputErrors = outputs.map(\n      (output, i) => expectedOutputs[i] - output\n    );\n\n    // Update weights (simplified backpropagation)\n    for (let i = 0; i < this.weights[1].length; i++) {\n      for (let j = 0; j < this.weights[1][i].length; j++) {\n        this.weights[1][i][j] +=\n          this.learningRate * outputErrors[i] * outputs[i] * (1 - outputs[i]);\n      }\n    }\n  }\n}\n\n// Main predictive engine class\nclass PredictiveUIEngine {\n  private interactions: UserInteraction[] = [];\n  private patterns: Map<string, BehavioralPattern> = new Map();\n  private neuralNet: PredictiveNeuralNet;\n  private sessionStartTime: number;\n  private predictions: PredictiveAction[] = [];\n  private insights: PredictiveInsight[] = [];\n\n  constructor() {\n    this.sessionStartTime = Date.now();\n    this.neuralNet = new PredictiveNeuralNet(10, 20, 5); // Input, hidden, output sizes\n    this.loadStoredData();\n  }\n\n  private loadStoredData(): void {\n    try {\n      const stored = localStorage.getItem(\"auraglass-predictive-data\");\n      if (stored) {\n        const data = JSON.parse(stored) as PersistedPredictiveData;\n        this.patterns = new Map(data.patterns || []);\n        // Load recent interactions\n        this.interactions = (data.interactions || []).slice(-1000); // Keep last 1000\n      }\n    } catch {\n      // Ignore invalid persisted predictive data.\n    }\n  }\n\n  private saveData(): void {\n    try {\n      const data = {\n        patterns: Array.from(this.patterns.entries()),\n        interactions: this.interactions.slice(-100), // Save last 100\n        timestamp: Date.now(),\n      };\n      localStorage.setItem(\"auraglass-predictive-data\", JSON.stringify(data));\n    } catch {\n      // Ignore storage failures; predictive state remains in memory.\n    }\n  }\n\n  recordInteraction(interaction: UserInteraction): void {\n    this.interactions.push(interaction);\n\n    // Keep only recent interactions in memory\n    if (this.interactions.length > 2000) {\n      this.interactions = this.interactions.slice(-1000);\n    }\n\n    this.analyzePatterns();\n    this.generatePredictions();\n    this.saveData();\n  }\n\n  private analyzePatterns(): void {\n    const recent = this.interactions.slice(-50);\n\n    // Analyze sequential patterns\n    this.analyzeSequentialPatterns(recent);\n\n    // Analyze temporal patterns\n    this.analyzeTemporalPatterns(recent);\n\n    // Analyze spatial patterns\n    this.analyzeSpatialPatterns(recent);\n\n    // Analyze contextual patterns\n    this.analyzeContextualPatterns(recent);\n  }\n\n  private analyzeSequentialPatterns(interactions: UserInteraction[]): void {\n    for (let i = 0; i < interactions.length - 2; i++) {\n      const sequence = interactions.slice(i, i + 3);\n      const pattern = sequence.map((int) => int.element).join(\" -> \");\n      const patternId = `seq_${pattern}`;\n\n      const existing = this.patterns.get(patternId);\n      if (existing) {\n        existing.frequency++;\n        existing.lastSeen = Date.now();\n        existing.confidence = Math.min(0.95, existing.confidence + 0.05);\n      } else {\n        this.patterns.set(patternId, {\n          id: patternId,\n          type: \"sequence\",\n          confidence: 0.3,\n          frequency: 1,\n          lastSeen: Date.now(),\n          pattern: sequence.map((int) => int.element),\n          prediction: sequence.length > 2 ? \"next_in_sequence\" : \"unknown\",\n        });\n      }\n    }\n  }\n\n  private analyzeTemporalPatterns(interactions: UserInteraction[]): void {\n    const timeGroups = new Map<number, UserInteraction[]>();\n\n    interactions.forEach((interaction) => {\n      const hour = new Date(interaction.timestamp).getHours();\n      if (!timeGroups.has(hour)) {\n        timeGroups.set(hour, []);\n      }\n      timeGroups.get(hour)!.push(interaction);\n    });\n\n    timeGroups.forEach((hourInteractions, hour) => {\n      const commonElements = this.findCommonElements(hourInteractions);\n      commonElements.forEach((element) => {\n        const patternId = `temporal_${hour}_${element}`;\n        const existing = this.patterns.get(patternId);\n\n        if (existing) {\n          existing.frequency++;\n          existing.confidence = Math.min(0.9, existing.confidence + 0.1);\n        } else {\n          this.patterns.set(patternId, {\n            id: patternId,\n            type: \"temporal\",\n            confidence: 0.4,\n            frequency: 1,\n            lastSeen: Date.now(),\n            pattern: [hour, element],\n            prediction: \"time_based_usage\",\n          });\n        }\n      });\n    });\n  }\n\n  private analyzeSpatialPatterns(interactions: UserInteraction[]): void {\n    const spatialGroups = new Map<string, UserInteraction[]>();\n\n    interactions.forEach((interaction) => {\n      if (interaction.context.location) {\n        const region = this.getScreenRegion(interaction.context.location);\n        if (!spatialGroups.has(region)) {\n          spatialGroups.set(region, []);\n        }\n        spatialGroups.get(region)!.push(interaction);\n      }\n    });\n\n    spatialGroups.forEach((regionInteractions, region) => {\n      const commonSequences = this.findSpatialSequences(regionInteractions);\n      commonSequences.forEach((sequence, index) => {\n        const patternId = `spatial_${region}_${index}`;\n        this.patterns.set(patternId, {\n          id: patternId,\n          type: \"spatial\",\n          confidence: 0.6,\n          frequency: sequence.length,\n          lastSeen: Date.now(),\n          pattern: sequence,\n          prediction: \"spatial_flow\",\n        });\n      });\n    });\n  }\n\n  private analyzeContextualPatterns(interactions: UserInteraction[]): void {\n    const deviceGroups = new Map<string, UserInteraction[]>();\n\n    interactions.forEach((interaction) => {\n      const device = interaction.context.deviceType;\n      if (!deviceGroups.has(device)) {\n        deviceGroups.set(device, []);\n      }\n      deviceGroups.get(device)!.push(interaction);\n    });\n\n    deviceGroups.forEach((deviceInteractions, device) => {\n      const commonPatterns = this.findContextualPatterns(deviceInteractions);\n      commonPatterns.forEach((pattern, index) => {\n        const patternId = `contextual_${device}_${index}`;\n        this.patterns.set(patternId, {\n          id: patternId,\n          type: \"contextual\",\n          confidence: 0.7,\n          frequency: pattern.frequency,\n          lastSeen: Date.now(),\n          pattern: pattern.elements,\n          prediction: \"context_adaptation\",\n        });\n      });\n    });\n  }\n\n  private generatePredictions(): void {\n    this.predictions = [];\n    const now = Date.now();\n\n    // Generate predictions from patterns\n    this.patterns.forEach((pattern) => {\n      if (pattern.confidence > 0.5 && now - pattern.lastSeen < 86400000) {\n        // 24 hours\n        const prediction = this.createPredictiveAction(pattern);\n        if (prediction) {\n          this.predictions.push(prediction);\n        }\n      }\n    });\n\n    // Use neural network for complex predictions\n    const recentInteractions = this.interactions.slice(-10);\n    if (recentInteractions.length >= 5) {\n      const neuralPredictions =\n        this.generateNeuralPredictions(recentInteractions);\n      this.predictions.push(...neuralPredictions);\n    }\n\n    // Generate insights\n    this.generateInsights();\n\n    // Sort predictions by confidence and timing\n    this.predictions.sort((a, b) => {\n      const confidenceSort = b.confidence - a.confidence;\n      if (Math.abs(confidenceSort) < 0.1) {\n        return a.timing - b.timing; // Sooner is better if confidence is similar\n      }\n      return confidenceSort;\n    });\n  }\n\n  private createPredictiveAction(\n    pattern: BehavioralPattern\n  ): PredictiveAction | null {\n    const actionId = `pred_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n    switch (pattern.type) {\n      case \"sequence\":\n        if (pattern.pattern.length >= 2) {\n          return {\n            id: actionId,\n            type: \"preload\",\n            target: String(pattern.pattern[pattern.pattern.length - 1]),\n            confidence: pattern.confidence,\n            timing: 500,\n            metadata: { sequence: pattern.pattern },\n          };\n        }\n        break;\n\n      case \"temporal\":\n        const [hour, element] = pattern.pattern;\n        const currentHour = new Date().getHours();\n        if (\n          typeof hour === \"number\" &&\n          typeof element === \"string\" &&\n          Math.abs(currentHour - hour) <= 1\n        ) {\n          return {\n            id: actionId,\n            type: \"suggest\",\n            target: element,\n            confidence: pattern.confidence,\n            timing: 0,\n            metadata: { timeContext: hour },\n          };\n        }\n        break;\n\n      case \"spatial\":\n        return {\n          id: actionId,\n          type: \"animate\",\n          target: \"spatial_indicator\",\n          confidence: pattern.confidence,\n          timing: 200,\n          metadata: { spatialPattern: pattern.pattern },\n        };\n\n      case \"contextual\":\n        return {\n          id: actionId,\n          type: \"optimize\",\n          target: \"interface\",\n          confidence: pattern.confidence,\n          timing: 0,\n          metadata: { contextPattern: pattern.pattern },\n        };\n    }\n\n    return null;\n  }\n\n  private generateNeuralPredictions(\n    interactions: UserInteraction[]\n  ): PredictiveAction[] {\n    const predictions: PredictiveAction[] = [];\n\n    // Convert interactions to neural network input\n    const input = this.interactionsToVector(interactions);\n    const output = this.neuralNet.forward(input);\n\n    // Interpret neural network output as predictions\n    output.forEach((confidence, index) => {\n      if (confidence > 0.6) {\n        predictions.push({\n          id: `neural_${Date.now()}_${index}`,\n          type: PREDICTIVE_ACTION_TYPES[index],\n          target: \"neural_prediction\",\n          confidence,\n          timing: 100 + index * 100,\n          metadata: { neuralOutput: output, inputVector: input },\n        });\n      }\n    });\n\n    return predictions;\n  }\n\n  private generateInsights(): void {\n    this.insights = [];\n    const interactions = this.interactions.slice(-100);\n\n    // Performance insights\n    const avgResponseTime = this.calculateAverageResponseTime(interactions);\n    if (avgResponseTime > 200) {\n      this.insights.push({\n        id: \"perf_response_time\",\n        category: \"performance\",\n        insight: `Average interaction response time is ${avgResponseTime}ms`,\n        confidence: 0.9,\n        impact: 0.8,\n        recommendation: \"Consider preloading frequently accessed components\",\n      });\n    }\n\n    // Usability insights\n    const abandonmentRate = this.calculateAbandonmentRate(interactions);\n    if (abandonmentRate > 0.3) {\n      this.insights.push({\n        id: \"usability_abandonment\",\n        category: \"usability\",\n        insight: `High abandonment rate detected: ${(abandonmentRate * 100).toFixed(1)}%`,\n        confidence: 0.85,\n        impact: 0.9,\n        recommendation: \"Simplify navigation flow and reduce friction points\",\n      });\n    }\n\n    // Engagement insights\n    const sessionDuration = Date.now() - this.sessionStartTime;\n    if (sessionDuration > 600000 && interactions.length > 50) {\n      this.insights.push({\n        id: \"engagement_high\",\n        category: \"engagement\",\n        insight: \"High engagement session detected\",\n        confidence: 0.95,\n        impact: 0.7,\n        recommendation: \"Capture user preferences for future personalization\",\n      });\n    }\n  }\n\n  // Helper methods\n  private findCommonElements(interactions: UserInteraction[]): string[] {\n    const elementCount = new Map<string, number>();\n    interactions.forEach((int) => {\n      elementCount.set(int.element, (elementCount.get(int.element) || 0) + 1);\n    });\n\n    return Array.from(elementCount.entries())\n      .filter(([_, count]) => count >= 2)\n      .map(([element]) => element);\n  }\n\n  private getScreenRegion(location: { x: number; y: number }): string {\n    const { x, y } = location;\n    const screenWidth = window.innerWidth;\n    const screenHeight = window.innerHeight;\n\n    const col =\n      x < screenWidth / 3\n        ? \"left\"\n        : x < (screenWidth * 2) / 3\n          ? \"center\"\n          : \"right\";\n    const row =\n      y < screenHeight / 3\n        ? \"top\"\n        : y < (screenHeight * 2) / 3\n          ? \"middle\"\n          : \"bottom\";\n\n    return `${row}_${col}`;\n  }\n\n  private findSpatialSequences(interactions: UserInteraction[]): string[][] {\n    const sequences: string[][] = [];\n    for (let i = 0; i < interactions.length - 1; i++) {\n      const sequence = [interactions[i].element, interactions[i + 1].element];\n      sequences.push(sequence);\n    }\n    return sequences;\n  }\n\n  private findContextualPatterns(\n    interactions: UserInteraction[]\n  ): Array<{ elements: string[]; frequency: number }> {\n    const patterns: Array<{ elements: string[]; frequency: number }> = [];\n    const elementCount = new Map<string, number>();\n\n    interactions.forEach((int) => {\n      elementCount.set(int.element, (elementCount.get(int.element) || 0) + 1);\n    });\n\n    elementCount.forEach((frequency, element) => {\n      if (frequency >= 2) {\n        patterns.push({ elements: [element], frequency });\n      }\n    });\n\n    return patterns;\n  }\n\n  private interactionsToVector(interactions: UserInteraction[]): number[] {\n    const vector = new Array(10).fill(0);\n\n    interactions.forEach((interaction, index) => {\n      if (index < 5) {\n        vector[index] = (this.hashString(interaction.element) % 100) / 100;\n        vector[index + 5] = interaction.context.timeOfDay / 24;\n      }\n    });\n\n    return vector;\n  }\n\n  private hashString(str: string): number {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const char = str.charCodeAt(i);\n      hash = (hash << 5) - hash + char;\n      hash = hash & hash; // Convert to 32-bit integer\n    }\n    return Math.abs(hash);\n  }\n\n  private calculateAverageResponseTime(\n    interactions: UserInteraction[]\n  ): number {\n    const times = interactions\n      .map((int) => getNumericMetadata(int.metadata, \"responseTime\"))\n      .filter((time): time is number => typeof time === \"number\");\n\n    return times.length > 0\n      ? times.reduce((sum, time) => sum + time, 0) / times.length\n      : 0;\n  }\n\n  private calculateAbandonmentRate(interactions: UserInteraction[]): number {\n    const sequences: UserInteraction[][] = [];\n    let currentSequence: UserInteraction[] = [];\n\n    interactions.forEach((int) => {\n      if (int.type === \"navigate\") {\n        if (currentSequence.length > 0) {\n          sequences.push(currentSequence);\n        }\n        currentSequence = [int];\n      } else {\n        currentSequence.push(int);\n      }\n    });\n\n    if (currentSequence.length > 0) {\n      sequences.push(currentSequence);\n    }\n\n    const abandonedSequences = sequences.filter(\n      (seq) =>\n        seq.length < 3 &&\n        getBooleanMetadata(seq[seq.length - 1]?.metadata || {}, \"completed\") !==\n          true\n    );\n\n    return sequences.length > 0\n      ? abandonedSequences.length / sequences.length\n      : 0;\n  }\n\n  // Public API\n  getPredictions(): PredictiveAction[] {\n    return [...this.predictions];\n  }\n\n  getInsights(): PredictiveInsight[] {\n    return [...this.insights];\n  }\n\n  getPatterns(): BehavioralPattern[] {\n    return Array.from(this.patterns.values());\n  }\n\n  async generateWorkflowSuggestions(\n    context: PredictiveMetadata = {}\n  ): Promise<WorkflowSuggestion[]> {\n    // Generate workflow suggestions based on current board state\n    const suggestions: WorkflowSuggestion[] = [];\n    const fallbackCardId =\n      getBoardCardCount(context) > 0 ? \"high-activity-card\" : \"workflow\";\n    const fallbackColumnId = \"optimized-flow\";\n\n    // Analyze interaction patterns to suggest workflow improvements\n    const recentInteractions = this.interactions.slice(-20);\n    const taskMovement = recentInteractions.filter(\n      (i) => i.type === \"click\" && i.element === \"card\"\n    );\n\n    if (taskMovement.length > 5) {\n      suggestions.push({\n        type: \"reorganize\",\n        title: \"Consider reorganizing your workflow\",\n        description:\n          \"High card movement suggests your current organization may need optimization\",\n        priority: 0.6,\n        cardId: fallbackCardId,\n        suggestedColumn: fallbackColumnId,\n        reason:\n          \"High card movement suggests your current organization may need optimization\",\n      });\n    }\n\n    // Suggest based on completion patterns\n    const completionPatterns = recentInteractions.filter(\n      (i) => i.metadata.action === \"complete\"\n    );\n    if (completionPatterns.length > 0) {\n      suggestions.push({\n        type: \"automation\",\n        title: \"Consider automating repetitive tasks\",\n        description:\n          \"Detected repetitive completion patterns that could be automated\",\n        priority: 0.3,\n        cardId: fallbackCardId,\n        suggestedColumn: fallbackColumnId,\n        reason:\n          \"Detected repetitive completion patterns that could be automated\",\n      });\n    }\n\n    return suggestions;\n  }\n\n  async analyzeBoardPerformance(\n    context: PredictiveMetadata = {}\n  ): Promise<BoardPerformanceReport> {\n    // Analyze board performance metrics\n    const recentInteractions = this.interactions.slice(-50);\n    const avgResponseTime =\n      recentInteractions.length > 0\n        ? recentInteractions.reduce(\n            (sum, i) =>\n              sum + (getNumericMetadata(i.metadata, \"responseTime\") || 0),\n            0\n          ) / recentInteractions.length\n        : 0;\n    const abandonmentRate = this.calculateAbandonmentRate(recentInteractions);\n    const totalCards = getBoardCardCount(context);\n\n    return {\n      averageResponseTime: avgResponseTime || 0,\n      abandonmentRate,\n      interactionCount: recentInteractions.length,\n      efficiency: Math.max(0, 1 - abandonmentRate),\n      totalCards,\n      bottlenecks: [],\n      productivity: Math.max(0, 1 - abandonmentRate),\n      completionRate: totalCards > 0 ? Math.max(0, 1 - abandonmentRate) : 0,\n      suggestions: await this.generateWorkflowSuggestions(context),\n    };\n  }\n\n  trainFromFeedback(actionId: string, wasAccurate: boolean): void {\n    const action = this.predictions.find((p) => p.id === actionId);\n    const inputVector = action\n      ? getNumberArrayMetadata(action.metadata, \"inputVector\")\n      : undefined;\n    if (action && inputVector) {\n      const target = new Array(5).fill(0);\n      target[PREDICTIVE_ACTION_TYPES.indexOf(action.type)] = wasAccurate\n        ? 1\n        : 0;\n      this.neuralNet.train(inputVector, target);\n    }\n  }\n}\n\n// React Context for the predictive engine\nconst PredictiveEngineContext = createContext<{\n  engine: PredictiveUIEngine | null;\n  recordInteraction: (interaction: Omit<UserInteraction, \"timestamp\">) => void;\n  predictions: PredictiveAction[];\n  insights: PredictiveInsight[];\n}>({\n  engine: null,\n  recordInteraction: () => {},\n  predictions: [],\n  insights: [],\n});\n\n// Provider component\nexport function GlassPredictiveEngineProvider({\n  children,\n  onPrediction,\n  onInsight,\n}: {\n  children: React.ReactNode;\n  onPrediction?: (prediction: PredictiveAction) => void;\n  onInsight?: (insight: PredictiveInsight) => void;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<PredictiveUIEngine>();\n  const [predictions, setPredictions] = useState<PredictiveAction[]>([]);\n  const [insights, setInsights] = useState<PredictiveInsight[]>([]);\n\n  // Initialize engine\n  useEffect(() => {\n    engineRef.current = new PredictiveUIEngine();\n  }, []);\n\n  const recordInteraction = useCallback(\n    (interaction: Omit<UserInteraction, \"timestamp\">) => {\n      if (!engineRef.current) return;\n\n      const fullInteraction: UserInteraction = {\n        ...interaction,\n        timestamp: Date.now(),\n      };\n\n      engineRef.current.recordInteraction(fullInteraction);\n\n      // Update predictions and insights\n      const newPredictions = engineRef.current.getPredictions();\n      const newInsights = engineRef.current.getInsights();\n\n      setPredictions(newPredictions);\n      setInsights(newInsights);\n\n      // Trigger callbacks for new items\n      newPredictions.forEach((prediction) => onPrediction?.(prediction));\n      newInsights.forEach((insight) => onInsight?.(insight));\n    },\n    [onPrediction, onInsight]\n  );\n\n  // Auto-record viewport changes and device type\n  useEffect(() => {\n    const getDeviceType = (): \"mobile\" | \"tablet\" | \"desktop\" => {\n      const width = window.innerWidth;\n      if (width < 768) return \"mobile\";\n      if (width < 1024) return \"tablet\";\n      return \"desktop\";\n    };\n\n    const handleResize = () => {\n      recordInteraction({\n        type: \"resize\",\n        element: \"viewport\",\n        context: {\n          viewport: { width: window.innerWidth, height: window.innerHeight },\n          timeOfDay: new Date().getHours(),\n          deviceType: getDeviceType(),\n        },\n        metadata: { trigger: \"resize\" },\n      });\n    };\n\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, [recordInteraction]);\n\n  const value = {\n    engine: engineRef.current || null,\n    recordInteraction,\n    predictions,\n    insights,\n  };\n\n  return (\n    <PredictiveEngineContext.Provider value={value}>\n      {children}\n    </PredictiveEngineContext.Provider>\n  );\n}\n\n// Hook to use the predictive engine\nexport function usePredictiveEngine() {\n  const context = useContext(PredictiveEngineContext);\n  if (!context) {\n    throw new Error(\n      \"usePredictiveEngine must be used within GlassPredictiveEngineProvider\"\n    );\n  }\n  return context;\n}\n\n// Component to display predictions\nexport function GlassPredictionIndicator({\n  className,\n  showInsights = true,\n  maxPredictions = 5,\n}: {\n  className?: string;\n  showInsights?: boolean;\n  maxPredictions?: number;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { predictions, insights } = usePredictiveEngine();\n  const [showPanel, setShowPanel] = useState(false);\n\n  const topPredictions = predictions.slice(0, maxPredictions);\n  const topInsights = insights.slice(0, 3);\n\n  return (\n    <div className={cn(\"fixed top-4 right-4 z-50\", className)}>\n      {/* AI indicator */}\n      <motion.button\n        className={cn(\n          \"w-12 h-12 glass-radius-full glass-surface-primary glass-elev-3\",\n          \"flex items-center justify-center glass-text-primary\",\n          `transition-all duration-[${ANIMATION.DURATION.normal}ms] glass-hover-scale-105`,\n          predictions.length > 0 && \"animate-pulse\"\n        )}\n        onClick={() => setShowPanel(!showPanel)}\n        whileHover={{ scale: 1.05 }}\n        whileTap={{ scale: 0.95 }}\n      >\n        <div className=\"glass-relative\">\n          \uD83E\uDDE0\n          {predictions.length > 0 && (\n            <motion.div\n              className=\"glass-absolute glass-top-1 glass--right-1 glass-w-3 glass-h-3 glass-surface-blue glass-radius-full glass-text-xs glass-text-primary glass-flex glass-items-center glass-justify-center\"\n              initial={{ scale: 0 }}\n              animate={prefersReducedMotion ? {} : { scale: 1 }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: ANIMATION.DURATION.normal / 1000 }\n              }\n            >\n              {predictions.length}\n            </motion.div>\n          )}\n        </div>\n      </motion.button>\n\n      {/* Prediction panel */}\n      <AnimatePresence>\n        {showPanel && (\n          <motion.div\n            className={cn(\n              \"absolute top-14 right-0 w-80 max-h-96 overflow-y-auto\",\n              \"glass-surface-primary glass-elev-4 glass-radius-lg glass-p-4 glass-gap-3\"\n            )}\n            initial={{ opacity: 0, y: -10, scale: 0.95 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: -10, scale: 0.95 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.fast / 1000 }\n            }\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <h3 className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                AI Predictions\n              </h3>\n              <button\n                onClick={() => setShowPanel(false)}\n                className=\"glass-text-xs glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                \u2715\n              </button>\n            </div>\n\n            {/* Predictions */}\n            {topPredictions.length > 0 && (\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  Predictions\n                </h4>\n                {topPredictions.map((prediction) => (\n                  <motion.div\n                    key={prediction.id}\n                    className=\"glass-p-2 glass-surface-secondary glass-radius-md\"\n                    initial={{ opacity: 0, x: -10 }}\n                    animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n                    transition={\n                      prefersReducedMotion\n                        ? { duration: 0 }\n                        : { duration: ANIMATION.DURATION.normal / 1000 }\n                    }\n                  >\n                    <div className=\"glass-flex glass-items-center glass-justify-between\">\n                      <span className=\"glass-text-sm glass-text-primary glass-capitalize\">\n                        {prediction.type}: {prediction.target}\n                      </span>\n                      <div className=\"glass-flex glass-items-center glass-gap-1\">\n                        <div\n                          className=\"glass-w-2 glass-h-2 glass-radius-full\"\n                          style={{\n                            backgroundColor:\n                              prediction.confidence > 0.8\n                                ? \"hsl(var(--glass-color-success))\"\n                                : prediction.confidence > 0.6\n                                  ? \"hsl(var(--glass-color-warning))\"\n                                  : \"hsl(var(--glass-color-danger))\",\n                          }}\n                        />\n                        <span className=\"glass-text-xs glass-text-secondary\">\n                          {(prediction.confidence * 100).toFixed(0)}%\n                        </span>\n                      </div>\n                    </div>\n                  </motion.div>\n                ))}\n              </div>\n            )}\n\n            {/* Insights */}\n            {showInsights && topInsights.length > 0 && (\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  AI Insights\n                </h4>\n                {topInsights.map((insight) => (\n                  <motion.div\n                    key={insight.id}\n                    className=\"glass-p-2 glass-surface-secondary glass-radius-md\"\n                    initial={{ opacity: 0, x: -10 }}\n                    animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n                    transition={\n                      prefersReducedMotion\n                        ? { duration: 0 }\n                        : { duration: ANIMATION.DURATION.normal / 1000 }\n                    }\n                  >\n                    <div className=\"glass-text-sm glass-text-primary glass-mb-1\">\n                      {insight.insight}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-secondary\">\n                      {insight.recommendation}\n                    </div>\n                    <div className=\"glass-flex glass-items-center glass-justify-between glass-mt-1\">\n                      <span className=\"glass-text-xs glass-text-tertiary glass-capitalize\">\n                        {insight.category}\n                      </span>\n                      <span className=\"glass-text-xs glass-text-secondary\">\n                        Impact: {(insight.impact * 100).toFixed(0)}%\n                      </span>\n                    </div>\n                  </motion.div>\n                ))}\n              </div>\n            )}\n\n            {predictions.length === 0 && insights.length === 0 && (\n              <div className=\"glass-text-center glass-text-sm glass-text-secondary glass-py-4\">\n                Learning your behavior...\n              </div>\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Hook to automatically record common interactions\nexport function useInteractionRecorder(elementId?: string) {\n  const { recordInteraction } = usePredictiveEngine();\n\n  const recordClick = useCallback(\n    (event: React.MouseEvent) => {\n      recordInteraction({\n        type: \"click\",\n        element: elementId || event.currentTarget.id || \"unknown\",\n        context: {\n          viewport: { width: window.innerWidth, height: window.innerHeight },\n          timeOfDay: new Date().getHours(),\n          deviceType:\n            window.innerWidth < 768\n              ? \"mobile\"\n              : window.innerWidth < 1024\n                ? \"tablet\"\n                : \"desktop\",\n          location: { x: event.clientX, y: event.clientY },\n        },\n        metadata: {\n          button: event.button,\n          ctrlKey: event.ctrlKey,\n          altKey: event.altKey,\n          shiftKey: event.shiftKey,\n        },\n      });\n    },\n    [recordInteraction, elementId]\n  );\n\n  const recordHover = useCallback(\n    (event: React.MouseEvent) => {\n      recordInteraction({\n        type: \"hover\",\n        element: elementId || event.currentTarget.id || \"unknown\",\n        context: {\n          viewport: { width: window.innerWidth, height: window.innerHeight },\n          timeOfDay: new Date().getHours(),\n          deviceType:\n            window.innerWidth < 768\n              ? \"mobile\"\n              : window.innerWidth < 1024\n                ? \"tablet\"\n                : \"desktop\",\n          location: { x: event.clientX, y: event.clientY },\n        },\n        metadata: { trigger: \"hover\" },\n      });\n    },\n    [recordInteraction, elementId]\n  );\n\n  const recordFocus = useCallback(\n    (event: React.FocusEvent) => {\n      recordInteraction({\n        type: \"focus\",\n        element: elementId || event.currentTarget.id || \"unknown\",\n        context: {\n          viewport: { width: window.innerWidth, height: window.innerHeight },\n          timeOfDay: new Date().getHours(),\n          deviceType:\n            window.innerWidth < 768\n              ? \"mobile\"\n              : window.innerWidth < 1024\n                ? \"tablet\"\n                : \"desktop\",\n        },\n        metadata: { trigger: \"focus\" },\n      });\n    },\n    [recordInteraction, elementId]\n  );\n\n  return {\n    recordClick,\n    recordHover,\n    recordFocus,\n  };\n}\n\n// Presets for different prediction modes\nexport const predictiveEnginePresets = {\n  conservative: {\n    neuralNetConfig: { inputSize: 8, hiddenSize: 12, outputSize: 3 },\n    confidenceThreshold: 0.8,\n    maxPredictions: 3,\n  },\n  balanced: {\n    neuralNetConfig: { inputSize: 10, hiddenSize: 20, outputSize: 5 },\n    confidenceThreshold: 0.6,\n    maxPredictions: 5,\n  },\n  aggressive: {\n    neuralNetConfig: { inputSize: 12, hiddenSize: 30, outputSize: 8 },\n    confidenceThreshold: 0.4,\n    maxPredictions: 10,\n  },\n  experimental: {\n    neuralNetConfig: { inputSize: 15, hiddenSize: 50, outputSize: 12 },\n    confidenceThreshold: 0.3,\n    maxPredictions: 15,\n  },\n};\n\ninterface GlassPredictiveEngineProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  onPrediction?: (prediction: PredictiveAction) => void;\n  onInsight?: (insight: PredictiveInsight) => void;\n  showIndicator?: boolean;\n  children?: React.ReactNode;\n}\n\nfunction PredictiveEngineSummary() {\n  const { predictions, insights } = usePredictiveEngine();\n  const topPrediction = predictions[0];\n\n  return (\n    <div\n      className={cn(\n        \"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4\",\n        \"glass-border glass-border-white/10 glass-shadow-soft-lg\"\n      )}\n      data-testid=\"glass-predictive-engine-summary\"\n    >\n      <div>\n        <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n          Predictive Engine\n        </p>\n        <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n          {topPrediction ? topPrediction.type : \"Monitoring behavior\"}\n        </h2>\n        <p className=\"glass-text-sm glass-text-secondary\">\n          {topPrediction ? topPrediction.target : \"Collecting interaction data\"}\n        </p>\n      </div>\n      <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n        <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n          <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n            Predictions\n          </p>\n          <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n            {predictions.length}\n          </p>\n        </div>\n        <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n          <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n            Insights\n          </p>\n          <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n            {insights.length}\n          </p>\n        </div>\n      </div>\n      <div className=\"glass-text-xs glass-text-secondary\">\n        {insights[0]?.insight || \"Awaiting actionable recommendations.\"}\n      </div>\n    </div>\n  );\n}\n\nexport const GlassPredictiveEngine: React.FC<GlassPredictiveEngineProps> = ({\n  onPrediction,\n  onInsight,\n  className,\n  children,\n  showIndicator = true,\n  ...rest\n}) => (\n  <GlassPredictiveEngineProvider\n    onPrediction={onPrediction}\n    onInsight={onInsight}\n  >\n    <div\n      className={cn(\n        \"glass-predictive-engine glass-relative glass-space-y-4\",\n        className\n      )}\n      {...rest}\n    >\n      {children ?? <PredictiveEngineSummary />}\n      {showIndicator && <GlassPredictionIndicator />}\n    </div>\n  </GlassPredictiveEngineProvider>\n);\n\nexport default GlassPredictiveEngine;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Spatial Audio System\n * 3D positioned glass sounds with Web Audio API and HRTF\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n  HTMLAttributes,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Spatial audio types\ninterface SpatialPosition {\n  x: number; // -1 to 1 (left to right)\n  y: number; // -1 to 1 (bottom to top)\n  z: number; // -1 to 1 (back to front)\n}\n\ninterface AudioSource {\n  id: string;\n  position: SpatialPosition;\n  volume: number;\n  buffer: AudioBuffer | null;\n  source: AudioBufferSourceNode | null;\n  panner: PannerNode | null;\n  gain: GainNode | null;\n  isPlaying: boolean;\n  loop: boolean;\n  category: \"ui\" | \"ambient\" | \"feedback\" | \"notification\";\n}\n\ninterface SpatialAudioSettings {\n  masterVolume: number;\n  enableSpatial: boolean;\n  enableHRTF: boolean;\n  distanceModel: \"linear\" | \"inverse\" | \"exponential\";\n  maxDistance: number;\n  rolloffFactor: number;\n  doppler: boolean;\n}\n\ninterface GlassSound {\n  name: string;\n  url: string;\n  volume: number;\n  category: \"ui\" | \"ambient\" | \"feedback\" | \"notification\";\n  spatial: boolean;\n  variations?: string[];\n}\n\ninterface GlassSoundOptions {\n  loop?: boolean;\n  volume?: number;\n  delay?: number;\n  [key: string]: unknown;\n}\n\ntype WindowWithWebKitAudioContext = Window &\n  typeof globalThis & {\n    webkitAudioContext?: typeof AudioContext;\n  };\n\ninterface LegacyAudioListener {\n  setOrientation?: (\n    forwardX: number,\n    forwardY: number,\n    forwardZ: number,\n    upX: number,\n    upY: number,\n    upZ: number\n  ) => void;\n  setPosition?: (x: number, y: number, z: number) => void;\n}\n\ninterface LegacyPannerNode {\n  setPosition?: (x: number, y: number, z: number) => void;\n}\n\n// Pre-defined glass sounds\nconst GLASS_SOUNDS: Record<string, GlassSound> = {\n  tap: {\n    name: \"Glass Tap\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj+a2/LDciUFLIHO8tiJNwgZaLvt559NEAxQp+PwtmMcBjiR1/LMeSwFJHfH8N2QQAoUXrTp66hVFApGn+DyvmUaBy2I1/LNdCYCKnbK7+OUQwouetDrQVNFSYd8LE/T9YNJOgVMnN/xy2MaCUaQ2fLKdCYEKnbK7+GUQQsUXrTp66lWFApBn+TyvWUaByuI1/PNdCYCK3fK7+OUQgsuetDryVNFN45+LE/T9YVJOgVMnt/xy2IdCkaQ2fLKdCgEKnbK7+GUQQsUXrTp65ZWFApGn+TyvWUaBiuI1/PNdCgDKnfK7+OUQgouetDryVNFTYd8LE/T9YFJOgVRnt/xy2MdCkaQ2fLKdCgEKnbK7+GUQQsUXrTp66hWFApGn+TyvWUaCy2I1/PNdCcCKnfK7+OUQgsuetDryVNFSId8LE/T9YVJOgVMn9/xy2MdCkaQ2fLKdCgEKnbK7+GUQQsUXrTp66lWFApGn+TyvWUaCy2I1/PNdCcCKnfK7+OUQgsuetDryVNFT4d8LE/T9YVJOgVMnt/xy2MdCkaQ2fLKdCgEKnbK7+GUQQsUXrTp66lWFApGn+TyvWUaBy2I1/PNdCcCKnfK7+OUQgsuetDryVNFTId8LE/T9YRJOgVMn9/xy2MdCkaQ2fLKdCcEKnbK7+GUQgouetDryVNFSId8LE/T9YVJOgVMntr/uuUaBy2I1/PNdCcCKnbK7+OUQgsuetDryVNFTId8LE/T9YVJOgVMntr/xy2MdCkaQ2fLKdCgEKnbK7+GUQgouetDryVNFTId8LE/T9YVJOgVMntr/xy2MdCkaQ2fLKdCgEKnbK7+GUQgouetDryVNFTId8LE/T9YVJOgVMntr/xy2MdCkaQ2fLKdCgEKnbK7+GUQgouetDryVNFTId8\",\n    volume: 0.7,\n    category: \"ui\",\n    spatial: true,\n    variations: [\"tap1\", \"tap2\", \"tap3\"],\n  },\n  hover: {\n    name: \"Glass Hover\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdJivrJBhNjVgodDbq2EcBj\",\n    volume: 0.4,\n    category: \"ui\",\n    spatial: true,\n  },\n  slide: {\n    name: \"Glass Slide\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAAC\",\n    volume: 0.6,\n    category: \"ui\",\n    spatial: true,\n  },\n  break: {\n    name: \"Glass Break\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQ\",\n    volume: 0.8,\n    category: \"feedback\",\n    spatial: true,\n  },\n  ambientGlass: {\n    name: \"Ambient Glass\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0\",\n    volume: 0.3,\n    category: \"ambient\",\n    spatial: true,\n  },\n  notification: {\n    name: \"Glass Bell\",\n    url: \"data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgA\",\n    volume: 0.7,\n    category: \"notification\",\n    spatial: true,\n  },\n};\n\n// Spatial audio engine\nclass SpatialAudioEngine {\n  private context: AudioContext | null = null;\n  private listener: AudioListener | null = null;\n  private sources: Map<string, AudioSource> = new Map();\n  private buffers: Map<string, AudioBuffer> = new Map();\n  private settings: SpatialAudioSettings;\n  private masterGain: GainNode | null = null;\n  private isInitialized = false;\n\n  constructor(settings: Partial<SpatialAudioSettings> = {}) {\n    this.settings = {\n      masterVolume: 0.7,\n      enableSpatial: true,\n      enableHRTF: true,\n      distanceModel: \"inverse\",\n      maxDistance: 10000,\n      rolloffFactor: 1,\n      doppler: false,\n      ...settings,\n    };\n  }\n\n  async initialize(): Promise<boolean> {\n    try {\n      // Create audio context\n      const AudioContextCtor =\n        window.AudioContext ||\n        (window as WindowWithWebKitAudioContext).webkitAudioContext;\n\n      if (!AudioContextCtor) {\n        throw new Error(\"Web Audio API not supported\");\n      }\n\n      this.context = new AudioContextCtor();\n\n      if (!this.context) {\n        throw new Error(\"Web Audio API not supported\");\n      }\n\n      // Resume context if suspended\n      if (this.context.state === \"suspended\") {\n        await this.context.resume();\n      }\n\n      // Get listener\n      this.listener = this.context.listener;\n\n      // Create master gain\n      this.masterGain = this.context.createGain();\n      this.masterGain.gain.value = this.settings.masterVolume;\n      this.masterGain.connect(this.context.destination);\n\n      // Set up spatial audio if supported\n      if (this.listener && this.settings.enableSpatial) {\n        this.setupSpatialAudio();\n      }\n\n      // Preload glass sounds\n      await this.preloadSounds();\n\n      this.isInitialized = true;\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  // Public getter for context\n  getContext(): AudioContext | null {\n    return this.context;\n  }\n\n  // Public getter for sources\n  getSources(): Map<string, AudioSource> {\n    return this.sources;\n  }\n\n  private setupSpatialAudio(): void {\n    if (!this.listener) return;\n\n    // Set listener orientation (forward and up vectors)\n    if (this.listener.forwardX) {\n      // New Web Audio API\n      this.listener.forwardX.value = 0;\n      this.listener.forwardY.value = 0;\n      this.listener.forwardZ.value = -1;\n      this.listener.upX.value = 0;\n      this.listener.upY.value = 1;\n      this.listener.upZ.value = 0;\n    } else {\n      // Legacy Web Audio API\n      (this.listener as unknown as LegacyAudioListener).setOrientation?.(\n        0,\n        0,\n        -1,\n        0,\n        1,\n        0\n      );\n    }\n\n    // Set listener position\n    if (this.listener.positionX) {\n      this.listener.positionX.value = 0;\n      this.listener.positionY.value = 0;\n      this.listener.positionZ.value = 0;\n    } else {\n      (this.listener as unknown as LegacyAudioListener).setPosition?.(0, 0, 0);\n    }\n  }\n\n  private async preloadSounds(): Promise<void> {\n    const loadPromises = Object.entries(GLASS_SOUNDS).map(\n      async ([key, sound]) => {\n        try {\n          // For demo purposes, we'll create synthetic glass sounds\n          const buffer = await this.createSyntheticGlassSound(\n            sound.name,\n            sound.category\n          );\n          this.buffers.set(key, buffer);\n        } catch {\n          this.buffers.delete(key);\n        }\n      }\n    );\n\n    await Promise.all(loadPromises);\n  }\n\n  private async createSyntheticGlassSound(\n    name: string,\n    category: string\n  ): Promise<AudioBuffer> {\n    if (!this.context) {\n      throw new Error(\"Audio context not initialized\");\n    }\n\n    const sampleRate = this.context.sampleRate;\n    const duration = category === \"ambient\" ? 2.0 : 0.5;\n    const buffer = this.context.createBuffer(\n      2,\n      sampleRate * duration,\n      sampleRate\n    );\n\n    // Generate glass-like sounds based on category\n    for (let channel = 0; channel < buffer.numberOfChannels; channel++) {\n      const channelData = buffer.getChannelData(channel);\n\n      for (let i = 0; i < channelData.length; i++) {\n        const t = i / sampleRate;\n        let sample = 0;\n\n        switch (category) {\n          case \"ui\":\n            // Sharp, metallic sound\n            sample = Math.sin(2 * Math.PI * 2000 * t) * Math.exp(-t * 8) * 0.3;\n            sample +=\n              Math.sin(2 * Math.PI * 3000 * t) * Math.exp(-t * 12) * 0.2;\n            break;\n\n          case \"feedback\":\n            // Glass breaking sound\n            sample = (Math.random() - 0.5) * Math.exp(-t * 3) * 0.6;\n            sample += Math.sin(2 * Math.PI * 1500 * t) * Math.exp(-t * 5) * 0.4;\n            break;\n\n          case \"ambient\":\n            // Soft, ethereal glass ambient\n            sample = Math.sin(2 * Math.PI * 220 * t) * Math.sin(t * 0.5) * 0.1;\n            sample +=\n              Math.sin(2 * Math.PI * 440 * t) * Math.sin(t * 0.3) * 0.05;\n            break;\n\n          case \"notification\":\n            // Bell-like glass sound\n            sample = Math.sin(2 * Math.PI * 800 * t) * Math.exp(-t * 2) * 0.4;\n            sample += Math.sin(2 * Math.PI * 1200 * t) * Math.exp(-t * 3) * 0.3;\n            break;\n        }\n\n        channelData[i] = sample;\n      }\n    }\n\n    return buffer;\n  }\n\n  createSource(\n    id: string,\n    soundKey: string,\n    position: SpatialPosition\n  ): AudioSource | null {\n    if (!this.context || !this.masterGain) return null;\n\n    const buffer = this.buffers.get(soundKey);\n    const soundConfig = GLASS_SOUNDS[soundKey];\n\n    if (!buffer || !soundConfig) return null;\n\n    // Create audio nodes\n    const source = this.context.createBufferSource();\n    const gain = this.context.createGain();\n    const panner = this.context.createPanner();\n\n    // Configure buffer source\n    source.buffer = buffer;\n    source.loop = false;\n\n    // Configure gain\n    gain.gain.value = soundConfig.volume;\n\n    // Configure panner for spatial audio\n    if (this.settings.enableSpatial && soundConfig.spatial) {\n      panner.panningModel = this.settings.enableHRTF ? \"HRTF\" : \"equalpower\";\n      panner.distanceModel = this.settings.distanceModel;\n      panner.maxDistance = this.settings.maxDistance;\n      panner.rolloffFactor = this.settings.rolloffFactor;\n\n      // Set position\n      if (panner.positionX) {\n        panner.positionX.value = position.x;\n        panner.positionY.value = position.y;\n        panner.positionZ.value = position.z;\n      } else {\n        (panner as unknown as LegacyPannerNode).setPosition?.(\n          position.x,\n          position.y,\n          position.z\n        );\n      }\n\n      // Connect: source -> gain -> panner -> master gain -> destination\n      source.connect(gain);\n      gain.connect(panner);\n      panner.connect(this.masterGain);\n    } else {\n      // Non-spatial: source -> gain -> master gain -> destination\n      source.connect(gain);\n      gain.connect(this.masterGain);\n    }\n\n    const audioSource: AudioSource = {\n      id,\n      position,\n      volume: soundConfig.volume,\n      buffer,\n      source,\n      panner:\n        this.settings.enableSpatial && soundConfig.spatial ? panner : null,\n      gain,\n      isPlaying: false,\n      loop: false,\n      category: soundConfig.category,\n    };\n\n    this.sources.set(id, audioSource);\n    return audioSource;\n  }\n\n  playSound(\n    id: string,\n    soundKey: string,\n    position: SpatialPosition,\n    options: GlassSoundOptions = {}\n  ): void {\n    if (!this.isInitialized) return;\n\n    // Stop existing source if playing\n    this.stopSound(id);\n\n    const source = this.createSource(id, soundKey, position);\n    if (!source) return;\n\n    // Apply options\n    if (options.volume !== undefined && source.gain) {\n      source.gain.gain.value = options.volume;\n    }\n\n    if (options.loop && source.source) {\n      source.source.loop = true;\n      source.loop = true;\n    }\n\n    // Play\n    if (source.source) {\n      const when = this.context!.currentTime + (options.delay || 0);\n      source.source.start(when);\n      source.isPlaying = true;\n\n      // Handle ended event for non-looping sounds\n      if (!source.loop) {\n        source.source.addEventListener(\"ended\", () => {\n          this.sources.delete(id);\n        });\n      }\n    }\n  }\n\n  stopSound(id: string): void {\n    const source = this.sources.get(id);\n    if (source && source.source && source.isPlaying) {\n      try {\n        source.source.stop();\n      } catch (error) {\n        // Source might already be stopped\n      }\n      source.isPlaying = false;\n      this.sources.delete(id);\n    }\n  }\n\n  updateSourcePosition(id: string, position: SpatialPosition): void {\n    const source = this.sources.get(id);\n    if (source && source.panner) {\n      if (source.panner.positionX) {\n        source.panner.positionX.value = position.x;\n        source.panner.positionY.value = position.y;\n        source.panner.positionZ.value = position.z;\n      } else {\n        (source.panner as unknown as LegacyPannerNode).setPosition?.(\n          position.x,\n          position.y,\n          position.z\n        );\n      }\n      source.position = position;\n    }\n  }\n\n  updateListenerPosition(position: SpatialPosition): void {\n    if (!this.listener) return;\n\n    if (this.listener.positionX) {\n      this.listener.positionX.value = position.x;\n      this.listener.positionY.value = position.y;\n      this.listener.positionZ.value = position.z;\n    } else {\n      (this.listener as unknown as LegacyAudioListener).setPosition?.(\n        position.x,\n        position.y,\n        position.z\n      );\n    }\n  }\n\n  updateListenerOrientation(\n    forward: SpatialPosition,\n    up: SpatialPosition\n  ): void {\n    if (!this.listener) return;\n\n    if (this.listener.forwardX) {\n      this.listener.forwardX.value = forward.x;\n      this.listener.forwardY.value = forward.y;\n      this.listener.forwardZ.value = forward.z;\n      this.listener.upX.value = up.x;\n      this.listener.upY.value = up.y;\n      this.listener.upZ.value = up.z;\n    } else {\n      (this.listener as unknown as LegacyAudioListener).setOrientation?.(\n        forward.x,\n        forward.y,\n        forward.z,\n        up.x,\n        up.y,\n        up.z\n      );\n    }\n  }\n\n  setMasterVolume(volume: number): void {\n    this.settings.masterVolume = Math.max(0, Math.min(1, volume));\n    if (this.masterGain) {\n      this.masterGain.gain.value = this.settings.masterVolume;\n    }\n  }\n\n  getMasterVolume(): number {\n    return this.settings.masterVolume;\n  }\n\n  getActiveSources(): AudioSource[] {\n    return Array.from(this.sources.values());\n  }\n\n  cleanup(): void {\n    // Stop all sources\n    this.sources.forEach((source, id) => {\n      this.stopSound(id);\n    });\n\n    // Close context\n    if (this.context && this.context.state !== \"closed\") {\n      this.context.close();\n    }\n\n    this.sources.clear();\n    this.buffers.clear();\n    this.isInitialized = false;\n  }\n}\n\n// React context for spatial audio\nconst SpatialAudioContext = createContext<{\n  engine: SpatialAudioEngine | null;\n  isInitialized: boolean;\n  masterVolume: number;\n  playGlassSound: (\n    soundKey: string,\n    position?: SpatialPosition,\n    options?: GlassSoundOptions\n  ) => string;\n  stopGlassSound: (id: string) => void;\n  setMasterVolume: (volume: number) => void;\n}>({\n  engine: null,\n  isInitialized: false,\n  masterVolume: 0.7,\n  playGlassSound: () => \"\",\n  stopGlassSound: () => {},\n  setMasterVolume: () => {},\n});\n\ntype GlassSpatialAudioConfig = {\n  settings?: Partial<SpatialAudioSettings>;\n  autoInitialize?: boolean;\n};\n\ninterface GlassSpatialAudioProviderProps extends GlassSpatialAudioConfig {\n  children: React.ReactNode;\n}\n\n// Provider component\nexport function GlassSpatialAudioProvider({\n  children,\n  settings,\n  autoInitialize = true,\n}: GlassSpatialAudioProviderProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<SpatialAudioEngine>();\n  const [isInitialized, setIsInitialized] = useState(false);\n  const [masterVolume, setMasterVolumeState] = useState(0.7);\n  const soundIdCounter = useRef(0);\n\n  // Initialize engine\n  useEffect(() => {\n    engineRef.current = new SpatialAudioEngine(settings);\n\n    if (autoInitialize) {\n      // Initialize on first user interaction\n      const initializeOnInteraction = () => {\n        if (engineRef.current && !isInitialized) {\n          engineRef.current.initialize().then((success) => {\n            setIsInitialized(success);\n            if (success) {\n              setMasterVolumeState(engineRef.current!.getMasterVolume());\n            }\n          });\n        }\n        document.removeEventListener(\"click\", initializeOnInteraction);\n        document.removeEventListener(\"keydown\", initializeOnInteraction);\n        document.removeEventListener(\"touchstart\", initializeOnInteraction);\n      };\n\n      document.addEventListener(\"click\", initializeOnInteraction);\n      document.addEventListener(\"keydown\", initializeOnInteraction);\n      document.addEventListener(\"touchstart\", initializeOnInteraction);\n\n      return () => {\n        document.removeEventListener(\"click\", initializeOnInteraction);\n        document.removeEventListener(\"keydown\", initializeOnInteraction);\n        document.removeEventListener(\"touchstart\", initializeOnInteraction);\n      };\n    }\n\n    return () => {\n      if (engineRef.current) {\n        engineRef.current.cleanup();\n      }\n    };\n  }, [autoInitialize, isInitialized, settings]);\n\n  const playGlassSound = useCallback(\n    (\n      soundKey: string,\n      position: SpatialPosition = { x: 0, y: 0, z: 0 },\n      options: GlassSoundOptions = {}\n    ): string => {\n      if (!engineRef.current || !isInitialized) return \"\";\n\n      const id = `sound_${++soundIdCounter.current}`;\n      engineRef.current.playSound(id, soundKey, position, options);\n      return id;\n    },\n    [isInitialized]\n  );\n\n  const stopGlassSound = useCallback((id: string) => {\n    if (engineRef.current) {\n      engineRef.current.stopSound(id);\n    }\n  }, []);\n\n  const setMasterVolume = useCallback((volume: number) => {\n    if (engineRef.current) {\n      engineRef.current.setMasterVolume(volume);\n      setMasterVolumeState(volume);\n    }\n  }, []);\n\n  const value = {\n    engine: engineRef.current || null,\n    isInitialized,\n    masterVolume,\n    playGlassSound,\n    stopGlassSound,\n    setMasterVolume,\n  };\n\n  return (\n    <SpatialAudioContext.Provider value={value}>\n      {children}\n    </SpatialAudioContext.Provider>\n  );\n}\n\nexport interface GlassSpatialAudioProps\n  extends GlassSpatialAudioConfig,\n    HTMLAttributes<HTMLDivElement> {}\n\nexport const GlassSpatialAudio: React.FC<GlassSpatialAudioProps> = ({\n  settings,\n  autoInitialize = true,\n  className,\n  children,\n  ...rest\n}) => {\n  return (\n    <GlassSpatialAudioProvider\n      settings={settings}\n      autoInitialize={autoInitialize}\n    >\n      <div data-glass-component className={cn(\"relative\", className)} {...rest}>\n        {children ?? (\n          <span className=\"glass-sr-only\">\n            Glass spatial audio provider active\n          </span>\n        )}\n      </div>\n    </GlassSpatialAudioProvider>\n  );\n};\n\n// Hook to use spatial audio\nexport function useSpatialAudio() {\n  const context = useContext(SpatialAudioContext);\n  if (!context) {\n    throw new Error(\n      \"useSpatialAudio must be used within GlassSpatialAudioProvider\"\n    );\n  }\n  return context;\n}\n\n// Component for audio-reactive glass effects\nexport function GlassAudioReactive({\n  children,\n  className,\n  soundKey = \"ambientGlass\",\n  position,\n  reactToVolume = true,\n  reactToFrequency = false,\n  intensityMultiplier = 1,\n}: {\n  children: React.ReactNode;\n  className?: string;\n  soundKey?: string;\n  position?: SpatialPosition;\n  reactToVolume?: boolean;\n  reactToFrequency?: boolean;\n  intensityMultiplier?: number;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { engine, playGlassSound, stopGlassSound } = useSpatialAudio();\n  const [audioIntensity, setAudioIntensity] = useState(0);\n  const soundIdRef = useRef<string>(\"\");\n  const analyzerRef = useRef<AnalyserNode>();\n\n  // Start ambient sound and analysis\n  useEffect(() => {\n    if (!engine || !position) return;\n\n    // Play ambient sound\n    soundIdRef.current = playGlassSound(soundKey, position, {\n      loop: true,\n      volume: 0.3,\n    });\n\n    // Set up audio analysis if needed\n    const audioContext = engine.getContext();\n    if ((reactToVolume || reactToFrequency) && audioContext) {\n      analyzerRef.current = audioContext.createAnalyser();\n      analyzerRef.current.fftSize = 256;\n\n      const source = engine.getSources().get(soundIdRef.current);\n      if (source && source.gain) {\n        source.gain.connect(analyzerRef.current);\n      }\n\n      // Start analysis loop\n      const analyze = () => {\n        if (!analyzerRef.current) return;\n\n        const dataArray = new Uint8Array(analyzerRef.current.frequencyBinCount);\n\n        if (reactToVolume) {\n          analyzerRef.current.getByteFrequencyData(dataArray);\n          const average =\n            dataArray.reduce((sum, value) => sum + value, 0) / dataArray.length;\n          setAudioIntensity((average / 255) * intensityMultiplier);\n        }\n\n        requestAnimationFrame(analyze);\n      };\n\n      analyze();\n    }\n\n    return () => {\n      if (soundIdRef.current) {\n        stopGlassSound(soundIdRef.current);\n      }\n    };\n  }, [\n    engine,\n    soundKey,\n    position,\n    playGlassSound,\n    stopGlassSound,\n    reactToVolume,\n    reactToFrequency,\n    intensityMultiplier,\n  ]);\n\n  return (\n    <motion.div\n      className={cn(\"glass-audio-reactive\", className)}\n      animate={{\n        scale: 1 + audioIntensity * 0.1,\n        opacity: 0.8 + audioIntensity * 0.2,\n        backgroundColor: `rgba(255, 255, 255, ${0.1 + audioIntensity * 0.1})`,\n      }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.normal / 1000 }\n      }\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// 3D Audio visualizer\nexport function GlassSpatialVisualizer({\n  className,\n  show = true,\n}: {\n  className?: string;\n  show?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { engine } = useSpatialAudio();\n  const [sources, setSources] = useState<AudioSource[]>([]);\n\n  useEffect(() => {\n    if (!engine || !show) return;\n\n    const interval = setInterval(() => {\n      setSources(engine.getActiveSources());\n    }, 100);\n\n    return () => clearInterval(interval);\n  }, [engine, show]);\n\n  if (!show) return null;\n\n  return (\n    <div\n      className={cn(\n        \"glass-fixed glass-bottom-4 glass-right-4 glass-w-64 glass-h-64 glass-surface-primary glass-elev-3 glass-radius-lg glass-p-4\",\n        className\n      )}\n    >\n      <div className=\"glass-text-xs glass-text-primary glass-mb-2\">\n        Spatial Audio\n      </div>\n\n      {/* 3D space visualization */}\n      <div className=\"glass-relative glass-w-full glass-h-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-lg glass-overflow-hidden\">\n        {/* Grid */}\n        <div className=\"glass-absolute glass-inset-0\">\n          {Array.from({ length: 8 }, (_, i) => (\n            <div\n              key={`h-${i}`}\n              className=\"glass-absolute glass-w-full glass-h-px glass-surface-subtle/10\"\n              ref={(el) => {\n                if (el) el.style.top = `${(i + 1) * 12.5}%`;\n              }}\n            />\n          ))}\n          {Array.from({ length: 8 }, (_, i) => (\n            <div\n              key={`v-${i}`}\n              className=\"glass-absolute glass-h-full glass-w-px glass-surface-subtle/10\"\n              ref={(el) => {\n                if (el) el.style.left = `${(i + 1) * 12.5}%`;\n              }}\n            />\n          ))}\n        </div>\n\n        {/* Center point (listener) */}\n        <div className=\"glass-absolute glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-top-1-2 glass-left-1-2 glass-translate-x-1/2-neg glass-translate-y-1/2-neg\">\n          <div className=\"glass-absolute glass-w-4 glass-h-4 glass-border glass-border-green glass-radius-full glass-top-1 glass--left-1 glass-animate-pulse\" />\n        </div>\n\n        {/* Audio sources */}\n        <AnimatePresence>\n          {sources.map((source) => {\n            // Convert 3D position to 2D screen position\n            const screenX = (source.position.x + 1) * 50; // -1 to 1 -> 0 to 100%\n            const screenY = (1 - source.position.y) * 50; // -1 to 1 -> 100 to 0%\n\n            return (\n              <motion.div\n                key={source.id}\n                className=\"glass-absolute glass-w-3 glass-h-3 glass-radius-full glass-transform glass--translate-x-1-2 glass--translate-y-1-2\"\n                style={{\n                  left: `${screenX}%`,\n                  top: `${screenY}%`,\n                  backgroundColor:\n                    source.category === \"ambient\"\n                      ? \"hsl(var(--glass-color-primary))\"\n                      : source.category === \"ui\"\n                        ? \"hsl(var(--glass-color-success))\"\n                        : source.category === \"feedback\"\n                          ? \"hsl(var(--glass-color-warning))\"\n                          : \"#ec4899\",\n                }}\n                initial={{ scale: 0, opacity: 0 }}\n                animate={\n                  prefersReducedMotion\n                    ? {}\n                    : {\n                        scale: source.isPlaying ? [1, 1.2, 1] : 1,\n                        opacity: source.isPlaying ? 1 : 0.5,\n                      }\n                }\n                exit={{ scale: 0, opacity: 0 }}\n                transition={{\n                  scale: {\n                    repeat: source.isPlaying ? Infinity : 0,\n                    duration: ANIMATION.DURATION.slower / 1000,\n                  },\n                }}\n              >\n                {/* Sound waves */}\n                {source.isPlaying && (\n                  <motion.div\n                    className=\"glass-absolute glass-inset-0 glass-radius-full glass-border glass-opacity-30\"\n                    style={{\n                      borderColor:\n                        source.category === \"ambient\"\n                          ? \"hsl(var(--glass-color-primary))\"\n                          : source.category === \"ui\"\n                            ? \"hsl(var(--glass-color-success))\"\n                            : source.category === \"feedback\"\n                              ? \"hsl(var(--glass-color-warning))\"\n                              : \"#ec4899\",\n                    }}\n                    animate={\n                      prefersReducedMotion\n                        ? {}\n                        : { scale: [1, 3, 1], opacity: [0.3, 0, 0.3] }\n                    }\n                    transition={\n                      prefersReducedMotion\n                        ? { duration: 0 }\n                        : {\n                            repeat: Infinity,\n                            duration: (ANIMATION.DURATION.slower * 3) / 1000,\n                            ease: \"easeOut\",\n                          }\n                    }\n                  />\n                )}\n              </motion.div>\n            );\n          })}\n        </AnimatePresence>\n\n        {/* Legend */}\n        <div className=\"glass-absolute glass-bottom-2 glass-left-2 glass-text-xs glass-text-secondary\">\n          <div className=\"glass-flex glass-items-center glass-gap-1 glass-mb-1\">\n            <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full\" />\n            <span>Listener</span>\n          </div>\n          <div className=\"glass-grid glass-grid-cols-2 glass-gap-1\">\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <div className=\"glass-w-2 glass-h-2 glass-surface-blue glass-radius-full\" />\n              <span>Ambient</span>\n            </div>\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <div className=\"glass-w-2 glass-h-2 glass-surface-emerald glass-radius-full\" />\n              <span>UI</span>\n            </div>\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <div className=\"glass-w-2 glass-h-2 glass-surface-amber glass-radius-full\" />\n              <span>Feedback</span>\n            </div>\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <div className=\"glass-w-2 glass-h-2 glass-surface-pink glass-radius-full\" />\n              <span>Alert</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// Hook for easy glass sound integration\nexport function useGlassSound() {\n  const { playGlassSound, stopGlassSound } = useSpatialAudio();\n\n  const playTap = useCallback(\n    (element?: HTMLElement) => {\n      const position = element\n        ? getElementPosition(element)\n        : { x: 0, y: 0, z: 0 };\n      return playGlassSound(\"tap\", position);\n    },\n    [playGlassSound]\n  );\n\n  const playHover = useCallback(\n    (element?: HTMLElement) => {\n      const position = element\n        ? getElementPosition(element)\n        : { x: 0, y: 0, z: 0 };\n      return playGlassSound(\"hover\", position, { volume: 0.3 });\n    },\n    [playGlassSound]\n  );\n\n  const playSlide = useCallback(\n    (element?: HTMLElement) => {\n      const position = element\n        ? getElementPosition(element)\n        : { x: 0, y: 0, z: 0 };\n      return playGlassSound(\"slide\", position);\n    },\n    [playGlassSound]\n  );\n\n  const playBreak = useCallback(\n    (element?: HTMLElement) => {\n      const position = element\n        ? getElementPosition(element)\n        : { x: 0, y: 0, z: 0 };\n      return playGlassSound(\"break\", position, { volume: 0.6 });\n    },\n    [playGlassSound]\n  );\n\n  const playNotification = useCallback(\n    (element?: HTMLElement) => {\n      const position = element\n        ? getElementPosition(element)\n        : { x: 0, y: 0, z: 0 };\n      return playGlassSound(\"notification\", position);\n    },\n    [playGlassSound]\n  );\n\n  return {\n    playTap,\n    playHover,\n    playSlide,\n    playBreak,\n    playNotification,\n    stopSound: stopGlassSound,\n  };\n}\n\n// Helper function to convert element position to spatial coordinates\nfunction getElementPosition(element: HTMLElement): SpatialPosition {\n  const rect = element.getBoundingClientRect();\n  const centerX = rect.left + rect.width / 2;\n  const centerY = rect.top + rect.height / 2;\n\n  // Convert screen coordinates to spatial coordinates (-1 to 1)\n  const x = (centerX / window.innerWidth) * 2 - 1;\n  const y = 1 - (centerY / window.innerHeight) * 2;\n  const z = 0; // Assume all UI elements are on the same plane\n\n  return { x, y, z };\n}\n\n// Presets for different spatial audio setups\nexport const spatialAudioPresets = {\n  minimal: {\n    enableSpatial: false,\n    masterVolume: 0.3,\n    enableHRTF: false,\n  },\n  standard: {\n    enableSpatial: true,\n    masterVolume: 0.7,\n    enableHRTF: true,\n    distanceModel: \"inverse\" as const,\n  },\n  immersive: {\n    enableSpatial: true,\n    masterVolume: 0.9,\n    enableHRTF: true,\n    distanceModel: \"exponential\" as const,\n    doppler: true,\n  },\n  gaming: {\n    enableSpatial: true,\n    masterVolume: 1.0,\n    enableHRTF: true,\n    distanceModel: \"linear\" as const,\n    rolloffFactor: 2,\n  },\n};\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassStackProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Stack direction\n   */\n  direction?: \"vertical\" | \"horizontal\";\n  /**\n   * Responsive direction\n   */\n  responsive?: {\n    sm?: \"vertical\" | \"horizontal\";\n    md?: \"vertical\" | \"horizontal\";\n    lg?: \"vertical\" | \"horizontal\";\n    xl?: \"vertical\" | \"horizontal\";\n    \"2xl\"?: \"vertical\" | \"horizontal\";\n  };\n  /**\n   * Space between items\n   */\n  space?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Alias for space (compat)\n   */\n  spacing?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Responsive spacing\n   */\n  responsiveSpace?: {\n    sm?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    md?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    lg?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    xl?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n    \"2xl\"?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  };\n  /**\n   * Alignment of items\n   */\n  align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n  /**\n   * Justify content\n   */\n  justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\";\n  /**\n   * Whether items should wrap\n   */\n  wrap?: boolean;\n  /**\n   * Divider between items\n   */\n  divider?: React.ReactNode;\n  /**\n   * Custom divider render function\n   */\n  renderDivider?: (index: number) => React.ReactNode;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\nexport interface GlassStackItemProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Whether this item should grow to fill available space\n   */\n  grow?: boolean;\n  /**\n   * Whether this item should shrink\n   */\n  shrink?: boolean;\n  /**\n   * Align this item differently from the stack alignment\n   */\n  alignSelf?: \"auto\" | \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * GlassStack component\n * Layout component for stacking items with consistent spacing\n */\nexport const GlassStack = forwardRef<HTMLDivElement, GlassStackProps>(\n  (\n    {\n      direction = \"vertical\",\n      responsive,\n      space = \"md\",\n      spacing,\n      responsiveSpace,\n      align = \"stretch\",\n      justify = \"start\",\n      wrap = false,\n      divider,\n      renderDivider,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const spaceValues = {\n      none: \"0\",\n      xs: \"var(--glass-space-1, 0.25rem)\",\n      sm: \"var(--glass-space-2, 0.5rem)\",\n      md: \"var(--glass-space-4, 1rem)\",\n      lg: \"var(--glass-space-6, 1.5rem)\",\n      xl: \"var(--glass-space-8, 2rem)\",\n      \"2xl\": \"var(--glass-space-12, 3rem)\",\n    } as const;\n\n    const alignValues = {\n      start: \"flex-start\",\n      center: \"center\",\n      end: \"flex-end\",\n      stretch: \"stretch\",\n      baseline: \"baseline\",\n    } as const;\n\n    const justifyValues = {\n      start: \"flex-start\",\n      center: \"center\",\n      end: \"flex-end\",\n      between: \"space-between\",\n      around: \"space-around\",\n      evenly: \"space-evenly\",\n    } as const;\n\n    const directionValues = {\n      vertical: \"column\",\n      horizontal: \"row\",\n    } as const;\n\n    const spaceClasses = {\n      none: \"glass-gap-0\",\n      xs: \"glass-gap-1\",\n      sm: \"glass-gap-2\",\n      md: \"glass-gap-4\",\n      lg: \"glass-gap-6\",\n      xl: \"glass-gap-8\",\n      \"2xl\": \"glass-gap-12\",\n    };\n\n    const alignClasses = {\n      start: \"glass-items-start\",\n      center: \"glass-items-center\",\n      end: \"glass-items-end\",\n      stretch: \"glass-items-stretch\",\n      baseline: \"glass-items-baseline\",\n    };\n\n    const justifyClasses = {\n      start: \"glass-justify-start\",\n      center: \"glass-justify-center\",\n      end: \"glass-justify-end\",\n      between: \"glass-justify-between\",\n      around: \"glass-justify-around\",\n      evenly: \"glass-justify-evenly\",\n    };\n\n    const directionClasses = {\n      vertical: \"glass-flex-col\",\n      horizontal: \"glass-flex-row\",\n    };\n\n    const responsiveDirectionClasses = responsive\n      ? [\n          responsive.sm && `sm:${directionClasses[responsive.sm]}`,\n          responsive.md && `md:${directionClasses[responsive.md]}`,\n          responsive.lg && `lg:${directionClasses[responsive.lg]}`,\n          responsive.xl && `xl:${directionClasses[responsive.xl]}`,\n          responsive[\"2xl\"] && `2xl:${directionClasses[responsive[\"2xl\"]]}`,\n        ].filter(Boolean)\n      : [];\n\n    const responsiveSpaceClasses = responsiveSpace\n      ? [\n          responsiveSpace.sm && `sm:${spaceClasses[responsiveSpace.sm]}`,\n          responsiveSpace.md && `md:${spaceClasses[responsiveSpace.md]}`,\n          responsiveSpace.lg && `lg:${spaceClasses[responsiveSpace.lg]}`,\n          responsiveSpace.xl && `xl:${spaceClasses[responsiveSpace.xl]}`,\n          responsiveSpace[\"2xl\"] &&\n            `2xl:${spaceClasses[responsiveSpace[\"2xl\"]]}`,\n        ].filter(Boolean)\n      : [];\n\n    // Process children to add dividers\n    const processedChildren = React.Children.toArray(children).filter(Boolean);\n\n    const childrenWithDividers =\n      divider || renderDivider\n        ? processedChildren.reduce((acc: React.ReactNode[], child, index) => {\n            acc.push(child);\n\n            // Add divider between items (not after the last item)\n            if (index < processedChildren.length - 1) {\n              const dividerElement = renderDivider\n                ? renderDivider(index)\n                : divider;\n              if (dividerElement) {\n                acc.push(\n                  <div key={`divider-${index}`} className=\"glass-flex-shrink-0\">\n                    {dividerElement}\n                  </div>\n                );\n              }\n            }\n\n            return acc;\n          }, [] as React.ReactNode[])\n        : processedChildren;\n\n    const stackId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: stackId }),\n      ...(role && { role }),\n    };\n\n    const stackStyle: React.CSSProperties = {\n      display: \"flex\",\n      flexDirection: directionValues[direction],\n      gap: spaceValues[spacing ?? space],\n      alignItems: alignValues[align],\n      justifyContent: justifyValues[justify],\n      flexWrap: wrap ? \"wrap\" : \"nowrap\",\n      minWidth: 0,\n      ...style,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-flex glass-min-w-0\",\n          directionClasses[direction],\n          ...responsiveDirectionClasses,\n          spaceClasses[spacing ?? space],\n          ...responsiveSpaceClasses,\n          alignClasses[align],\n          justifyClasses[justify],\n          wrap && \"glass-flex-wrap\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={stackStyle}\n        {...a11yProps}\n        {...props}\n      >\n        {childrenWithDividers}\n      </div>\n    );\n  }\n);\n\nGlassStack.displayName = \"GlassStack\";\n\n/**\n * GlassStackItem component\n * Individual item within a stack with flex control\n */\nexport const GlassStackItem = forwardRef<HTMLDivElement, GlassStackItemProps>(\n  (\n    {\n      grow = false,\n      shrink = true,\n      alignSelf = \"auto\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const alignSelfClasses = {\n      auto: \"glass-self-auto\",\n      start: \"glass-self-start\",\n      center: \"glass-self-center\",\n      end: \"glass-self-end\",\n      stretch: \"glass-self-stretch\",\n      baseline: \"glass-self-baseline\",\n    };\n\n    const alignSelfValues = {\n      auto: \"auto\",\n      start: \"flex-start\",\n      center: \"center\",\n      end: \"flex-end\",\n      stretch: \"stretch\",\n      baseline: \"baseline\",\n    } as const;\n\n    const itemId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: itemId }),\n      ...(role && { role }),\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          grow && \"glass-flex-grow\",\n          !shrink && \"glass-flex-shrink-0\",\n          alignSelfClasses[alignSelf],\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={{\n          flexGrow: grow ? 1 : undefined,\n          flexShrink: shrink ? 1 : 0,\n          alignSelf: alignSelfValues[alignSelf],\n          minWidth: 0,\n          ...style,\n        }}\n        {...a11yProps}\n        {...props}\n      />\n    );\n  }\n);\n\nGlassStackItem.displayName = \"GlassStackItem\";\n\n/**\n * VStack component\n * Vertical stack (shorthand for GlassStack with direction=\"vertical\")\n */\nexport const VStack = forwardRef<\n  HTMLDivElement,\n  Omit<GlassStackProps, \"direction\">\n>((props, ref) => <GlassStack ref={ref} direction=\"vertical\" {...props} />);\n\nVStack.displayName = \"VStack\";\n\n/**\n * HStack component\n * Horizontal stack (shorthand for GlassStack with direction=\"horizontal\")\n */\nexport const HStack = forwardRef<\n  HTMLDivElement,\n  Omit<GlassStackProps, \"direction\">\n>((props, ref) => <GlassStack ref={ref} direction=\"horizontal\" {...props} />);\n\nHStack.displayName = \"HStack\";\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface BoxProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * The HTML element or React component to render as\n   */\n  as?: keyof JSX.IntrinsicElements;\n  /**\n   * The content to render inside the box\n   */\n  children?: React.ReactNode;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n}\n\nexport const Box = React.forwardRef<HTMLDivElement, BoxProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      as: Component = \"div\",\n      className,\n      children,\n      \"aria-label\": ariaLabel,\n      role,\n      respectMotionPreference = true,\n      ...props\n    },\n    ref\n  ) => {\n    const elementId = useA11yId();\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel }),\n      ...(role && { role }),\n      ...(ariaLabel && !props.id && { id: elementId }),\n    };\n\n    return React.createElement(\n      Component,\n      {\n        className: cn(\n          // Motion preferences\n          respectMotionPreference &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        ),\n        ref,\n        ...a11yProps,\n        ...props,\n      },\n      children\n    );\n  }\n);\n\nBox.displayName = \"Box\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n// Box props interface\nexport interface BoxProps {\n  /**\n   * The content of the box\n   */\n  children?: React.ReactNode;\n\n  /**\n   * The component to render the box as\n   */\n  component?: React.ElementType;\n\n  /**\n   * Display property\n   */\n  display?:\n    | \"block\"\n    | \"flex\"\n    | \"inline\"\n    | \"inline-block\"\n    | \"inline-flex\"\n    | \"grid\"\n    | \"inline-grid\"\n    | \"none\";\n\n  /**\n   * Flex direction\n   */\n  flexDirection?: \"row\" | \"row-reverse\" | \"column\" | \"column-reverse\";\n\n  /**\n   * Flex wrap\n   */\n  flexWrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n\n  /**\n   * Justify content\n   */\n  justifyContent?:\n    | \"flex-start\"\n    | \"flex-end\"\n    | \"center\"\n    | \"space-between\"\n    | \"space-around\"\n    | \"space-evenly\";\n\n  /**\n   * Align items\n   */\n  alignItems?: \"flex-start\" | \"flex-end\" | \"center\" | \"baseline\" | \"stretch\";\n\n  /**\n   * Align content\n   */\n  alignContent?:\n    | \"flex-start\"\n    | \"flex-end\"\n    | \"center\"\n    | \"space-between\"\n    | \"space-around\"\n    | \"stretch\";\n\n  /**\n   * Align self\n   */\n  alignSelf?:\n    | \"auto\"\n    | \"flex-start\"\n    | \"flex-end\"\n    | \"center\"\n    | \"baseline\"\n    | \"stretch\";\n\n  /**\n   * Padding\n   */\n  p?: number | string;\n  pt?: number | string;\n  pr?: number | string;\n  pb?: number | string;\n  pl?: number | string;\n  px?: number | string;\n  py?: number | string;\n\n  /**\n   * Margin\n   */\n  m?: number | string;\n  mt?: number | string;\n  mr?: number | string;\n  mb?: number | string;\n  ml?: number | string;\n  mx?: number | string;\n  my?: number | string;\n\n  /**\n   * Width\n   */\n  width?: number | string;\n\n  /**\n   * Height\n   */\n  height?: number | string;\n\n  /**\n   * Min width\n   */\n  minWidth?: number | string;\n\n  /**\n   * Min height\n   */\n  minHeight?: number | string;\n\n  /**\n   * Max width\n   */\n  maxWidth?: number | string;\n\n  /**\n   * Max height\n   */\n  maxHeight?: number | string;\n\n  /**\n   * Border radius\n   */\n  borderRadius?: number | string;\n\n  /**\n   * Background color\n   */\n  bgcolor?: string;\n\n  /**\n   * If true, the box will have a glass effect\n   */\n  glass?: boolean;\n\n  /**\n   * The elevation of the glass effect\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | 5 | \"level1\" | \"level2\" | \"level3\" | \"level4\";\n\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n\n  /**\n   * Additional CSS styles\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Click handler\n   */\n  onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\n// Function to format spacing values\nconst formatSpacing = (value: number | string | undefined): string => {\n  if (value === undefined) return \"\";\n  if (typeof value === \"string\") return value;\n  return `${value * 8}px`;\n};\n\n// Helper function to convert spacing to Tailwind class\nconst spacingToTailwind = (\n  value: number | string | undefined,\n  prefix: string\n): string => {\n  if (value === undefined) return \"\";\n  if (typeof value === \"string\") return `${prefix}-[${value}]`;\n  // Map 8px units to Tailwind spacing scale\n  const spacing = Math.round(value);\n  if (spacing === 0) return `${prefix}-0`;\n  if (spacing <= 1) return `${prefix}-1`;\n  if (spacing <= 2) return `${prefix}-2`;\n  if (spacing <= 3) return `${prefix}-3`;\n  if (spacing <= 4) return `${prefix}-4`;\n  if (spacing <= 6) return `${prefix}-6`;\n  if (spacing <= 8) return `${prefix}-8`;\n  return `${prefix}-[${spacing * 8}px]`;\n};\n\n/**\n * Box Component\n *\n * A flexible container with system props for layout and styling.\n */\nexport const Box = forwardRef<HTMLDivElement, BoxProps>((props, ref) => {\n  const {\n    children,\n    component: Component = \"div\",\n    display,\n    flexDirection,\n    flexWrap,\n    justifyContent,\n    alignItems,\n    alignContent,\n    alignSelf,\n    p,\n    pt,\n    pr,\n    pb,\n    pl,\n    px,\n    py,\n    m,\n    mt,\n    mr,\n    mb,\n    ml,\n    mx,\n    my,\n    width,\n    height,\n    minWidth,\n    minHeight,\n    maxWidth,\n    maxHeight,\n    borderRadius,\n    bgcolor,\n    glass = false,\n    elevation = \"level1\",\n    className,\n    style,\n    onClick,\n    ...rest\n  } = props;\n\n  // Build dynamic classes\n  const displayClasses = {\n    block: \"block\",\n    flex: \"flex\",\n    inline: \"inline\",\n    \"inline-block\": \"inline-block\",\n    \"inline-flex\": \"inline-flex\",\n    grid: \"grid\",\n    \"inline-grid\": \"inline-grid\",\n    none: \"hidden\",\n  };\n\n  const flexDirectionClasses = {\n    row: \"flex-row\",\n    \"row-reverse\": \"flex-row-reverse\",\n    column: \"flex-col\",\n    \"column-reverse\": \"flex-col-reverse\",\n  };\n\n  const flexWrapClasses = {\n    nowrap: \"flex-nowrap\",\n    wrap: \"flex-wrap\",\n    \"wrap-reverse\": \"flex-wrap-reverse\",\n  };\n\n  const justifyContentClasses = {\n    \"flex-start\": \"justify-start\",\n    \"flex-end\": \"justify-end\",\n    center: \"justify-center\",\n    \"space-between\": \"justify-between\",\n    \"space-around\": \"justify-around\",\n    \"space-evenly\": \"justify-evenly\",\n  };\n\n  const alignItemsClasses = {\n    \"flex-start\": \"items-start\",\n    \"flex-end\": \"items-end\",\n    center: \"items-center\",\n    baseline: \"items-baseline\",\n    stretch: \"items-stretch\",\n  };\n\n  const alignContentClasses = {\n    \"flex-start\": \"content-start\",\n    \"flex-end\": \"content-end\",\n    center: \"content-center\",\n    \"space-between\": \"content-between\",\n    \"space-around\": \"content-around\",\n    stretch: \"content-stretch\",\n  };\n\n  const alignSelfClasses = {\n    auto: \"self-auto\",\n    \"flex-start\": \"self-start\",\n    \"flex-end\": \"self-end\",\n    center: \"self-center\",\n    baseline: \"self-baseline\",\n    stretch: \"self-stretch\",\n  };\n\n  const combinedClassName = cn(\n    \"box-border\",\n    display && displayClasses[display],\n    flexDirection && flexDirectionClasses[flexDirection],\n    flexWrap && flexWrapClasses[flexWrap],\n    justifyContent && justifyContentClasses[justifyContent],\n    alignItems && alignItemsClasses[alignItems],\n    alignContent && alignContentClasses[alignContent],\n    alignSelf && alignSelfClasses[alignSelf],\n    // Padding\n    p !== undefined && spacingToTailwind(p, \"p\"),\n    pt !== undefined && spacingToTailwind(pt, \"pt\"),\n    pr !== undefined && spacingToTailwind(pr, \"pr\"),\n    pb !== undefined && spacingToTailwind(pb, \"pb\"),\n    pl !== undefined && spacingToTailwind(pl, \"pl\"),\n    px !== undefined && spacingToTailwind(px, \"px\"),\n    py !== undefined && spacingToTailwind(py, \"py\"),\n    // Margin\n    m !== undefined && spacingToTailwind(m, \"m\"),\n    mt !== undefined && spacingToTailwind(mt, \"mt\"),\n    mr !== undefined && spacingToTailwind(mr, \"mr\"),\n    mb !== undefined && spacingToTailwind(mb, \"mb\"),\n    ml !== undefined && spacingToTailwind(ml, \"ml\"),\n    mx !== undefined && spacingToTailwind(mx, \"mx\"),\n    my !== undefined && spacingToTailwind(my, \"my\"),\n    className\n  );\n\n  const combinedStyle = {\n    ...(width !== undefined && {\n      width: typeof width === \"number\" ? `${width}px` : width,\n    }),\n    ...(height !== undefined && {\n      height: typeof height === \"number\" ? `${height}px` : height,\n    }),\n    ...(minWidth !== undefined && {\n      minWidth: typeof minWidth === \"number\" ? `${minWidth}px` : minWidth,\n    }),\n    ...(minHeight !== undefined && {\n      minHeight: typeof minHeight === \"number\" ? `${minHeight}px` : minHeight,\n    }),\n    ...(maxWidth !== undefined && {\n      maxWidth: typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n    }),\n    ...(maxHeight !== undefined && {\n      maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight,\n    }),\n    ...(borderRadius !== undefined && {\n      borderRadius:\n        typeof borderRadius === \"number\" ? `${borderRadius}px` : borderRadius,\n    }),\n    ...(bgcolor && { backgroundColor: bgcolor }),\n    ...style,\n  };\n\n  if (glass) {\n    // Map elevation to OptimizedGlass elevation\n    const getElevationLevel = (elev: any) => {\n      if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n        return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n      }\n      const numElev = typeof elev === \"number\" ? elev : 1;\n      if (numElev <= 1) return \"level1\";\n      if (numElev <= 2) return \"level2\";\n      if (numElev <= 3) return \"level3\";\n      return \"level4\";\n    };\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        intent=\"neutral\"\n        elevation={getElevationLevel(elevation)}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={combinedClassName}\n        style={{ ...combinedStyle }}\n        onClick={onClick}\n        {...rest}\n      >\n        {children}\n      </OptimizedGlass>\n    );\n  }\n\n  return React.createElement(\n    Component,\n    {\n      ref,\n      className: cn(\n        combinedClassName\n        // Motion preferences - temporarily disabled\n        // shouldRespectMotion && 'motion-safe:transition-all motion-reduce:transition-none'\n      ),\n      style: { ...combinedStyle },\n      onClick,\n      ...(rest as any),\n    } as any,\n    children\n  );\n});\n\nBox.displayName = \"GlassBoxBase\";\n\n/**\n * GlassBox Component\n *\n * A box component with glass morphism styling.\n */\nexport const GlassBox = forwardRef<HTMLDivElement, BoxProps>((props, ref) => {\n  // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n  const {\n    glass = true,\n    elevation = \"level2\",\n    borderRadius = 8,\n    className,\n    ...rest\n  } = props;\n\n  return (\n    <Box\n      ref={ref}\n      glass={glass}\n      elevation={elevation}\n      borderRadius={borderRadius}\n      className={cn(\"glass-box\", className)}\n      {...rest}\n    />\n  );\n});\n\nGlassBox.displayName = \"GlassBox\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassFlexProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Flex direction\n   */\n  direction?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n  /**\n   * Responsive direction\n   */\n  responsive?: {\n    sm?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n    md?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n    lg?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n    xl?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n    \"2xl\"?: \"row\" | \"row-reverse\" | \"col\" | \"col-reverse\";\n  };\n  /**\n   * Flex wrap\n   */\n  wrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n  /**\n   * Justify content\n   */\n  justify?: \"start\" | \"end\" | \"center\" | \"between\" | \"around\" | \"evenly\";\n  /**\n   * Align items\n   */\n  align?: \"start\" | \"end\" | \"center\" | \"baseline\" | \"stretch\";\n  /**\n   * Align content (for wrapped items)\n   */\n  alignContent?:\n    | \"start\"\n    | \"end\"\n    | \"center\"\n    | \"between\"\n    | \"around\"\n    | \"evenly\"\n    | \"stretch\";\n  /**\n   * Gap between items\n   */\n  gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Horizontal gap\n   */\n  gapX?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Vertical gap\n   */\n  gapY?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Whether flex container should grow to fill available space\n   */\n  fullWidth?: boolean;\n  /**\n   * Whether flex container should grow to fill available height\n   */\n  fullHeight?: boolean;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\nexport interface GlassFlexItemProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Flex grow\n   */\n  grow?: boolean | 0 | 1;\n  /**\n   * Flex shrink\n   */\n  shrink?: boolean | 0 | 1;\n  /**\n   * Flex basis\n   */\n  basis?:\n    | \"auto\"\n    | \"full\"\n    | \"1/2\"\n    | \"1/3\"\n    | \"2/3\"\n    | \"1/4\"\n    | \"3/4\"\n    | \"1/5\"\n    | \"2/5\"\n    | \"3/5\"\n    | \"4/5\"\n    | \"1/6\"\n    | \"5/6\"\n    | \"1/12\"\n    | \"5/12\"\n    | \"7/12\"\n    | \"11/12\";\n  /**\n   * Flex shorthand (grow shrink basis)\n   */\n  flex?: \"none\" | \"auto\" | \"initial\" | \"1\";\n  /**\n   * Align self\n   */\n  alignSelf?: \"auto\" | \"start\" | \"end\" | \"center\" | \"baseline\" | \"stretch\";\n  /**\n   * Order\n   */\n  order?:\n    | \"none\"\n    | \"first\"\n    | \"last\"\n    | 1\n    | 2\n    | 3\n    | 4\n    | 5\n    | 6\n    | 7\n    | 8\n    | 9\n    | 10\n    | 11\n    | 12;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * GlassFlex component\n * Flexible layout container with glassmorphism styling\n */\nexport const GlassFlex = forwardRef<HTMLDivElement, GlassFlexProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      direction = \"row\",\n      responsive,\n      wrap = \"nowrap\",\n      justify = \"start\",\n      align = \"stretch\",\n      alignContent = \"start\",\n      gap = \"none\",\n      gapX,\n      gapY,\n      fullWidth = false,\n      fullHeight = false,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const directionValues = {\n      row: \"row\",\n      \"row-reverse\": \"row-reverse\",\n      col: \"column\",\n      \"col-reverse\": \"column-reverse\",\n    } as const;\n\n    const wrapValues = {\n      nowrap: \"nowrap\",\n      wrap: \"wrap\",\n      \"wrap-reverse\": \"wrap-reverse\",\n    } as const;\n\n    const justifyValues = {\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      between: \"space-between\",\n      around: \"space-around\",\n      evenly: \"space-evenly\",\n    } as const;\n\n    const alignValues = {\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      baseline: \"baseline\",\n      stretch: \"stretch\",\n    } as const;\n\n    const alignContentValues = {\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      between: \"space-between\",\n      around: \"space-around\",\n      evenly: \"space-evenly\",\n      stretch: \"stretch\",\n    } as const;\n\n    const gapValues = {\n      none: \"0\",\n      xs: \"var(--glass-space-1, 0.25rem)\",\n      sm: \"var(--glass-space-2, 0.5rem)\",\n      md: \"var(--glass-space-4, 1rem)\",\n      lg: \"var(--glass-space-6, 1.5rem)\",\n      xl: \"var(--glass-space-8, 2rem)\",\n      \"2xl\": \"var(--glass-space-12, 3rem)\",\n    } as const;\n\n    const directionClasses = {\n      row: \"glass-flex-row\",\n      \"row-reverse\": \"glass-flex-row-reverse\",\n      col: \"glass-flex-col\",\n      \"col-reverse\": \"glass-flex-col-reverse\",\n    };\n\n    const wrapClasses = {\n      nowrap: \"glass-flex-nowrap\",\n      wrap: \"glass-flex-wrap\",\n      \"wrap-reverse\": \"glass-flex-wrap-reverse\",\n    };\n\n    const justifyClasses = {\n      start: \"glass-justify-start\",\n      end: \"glass-justify-end\",\n      center: \"glass-justify-center\",\n      between: \"glass-justify-between\",\n      around: \"glass-justify-around\",\n      evenly: \"glass-justify-evenly\",\n    };\n\n    const alignClasses = {\n      start: \"glass-items-start\",\n      end: \"glass-items-end\",\n      center: \"glass-items-center\",\n      baseline: \"glass-items-baseline\",\n      stretch: \"glass-items-stretch\",\n    };\n\n    const alignContentClasses = {\n      start: \"glass-content-start\",\n      end: \"glass-content-end\",\n      center: \"glass-content-center\",\n      between: \"glass-content-between\",\n      around: \"glass-content-around\",\n      evenly: \"glass-content-evenly\",\n      stretch: \"glass-content-stretch\",\n    };\n\n    const gapClasses = {\n      none: \"glass-gap-0\",\n      xs: \"glass-gap-1\",\n      sm: \"glass-gap-2\",\n      md: \"glass-gap-4\",\n      lg: \"glass-gap-6\",\n      xl: \"glass-gap-8\",\n      \"2xl\": \"glass-gap-12\",\n    };\n\n    const gapXClasses = {\n      none: \"gap-x-0\",\n      xs: \"gap-x-1\",\n      sm: \"gap-x-2\",\n      md: \"gap-x-4\",\n      lg: \"gap-x-6\",\n      xl: \"gap-x-8\",\n      \"2xl\": \"gap-x-12\",\n    };\n\n    const gapYClasses = {\n      none: \"gap-y-0\",\n      xs: \"gap-y-1\",\n      sm: \"gap-y-2\",\n      md: \"gap-y-4\",\n      lg: \"gap-y-6\",\n      xl: \"gap-y-8\",\n      \"2xl\": \"gap-y-12\",\n    };\n\n    const responsiveClasses = responsive\n      ? [\n          responsive.sm && `sm:${directionClasses[responsive.sm]}`,\n          responsive.md && `md:${directionClasses[responsive.md]}`,\n          responsive.lg && `lg:${directionClasses[responsive.lg]}`,\n          responsive.xl && `xl:${directionClasses[responsive.xl]}`,\n          responsive[\"2xl\"] && `2xl:${directionClasses[responsive[\"2xl\"]]}`,\n        ].filter(Boolean)\n      : [];\n\n    const flexId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: flexId }),\n      ...(role && { role }),\n    };\n\n    const flexStyle: React.CSSProperties = {\n      display: \"flex\",\n      flexDirection: directionValues[direction],\n      flexWrap: wrapValues[wrap],\n      justifyContent: justifyValues[justify],\n      alignItems: alignValues[align],\n      alignContent: alignContentValues[alignContent],\n      ...(gapX\n        ? { columnGap: gapValues[gapX] }\n        : gapY\n          ? {}\n          : { gap: gapValues[gap] }),\n      ...(gapY ? { rowGap: gapValues[gapY] } : {}),\n      ...(fullWidth ? { width: \"100%\" } : {}),\n      ...(fullHeight ? { height: \"100%\" } : {}),\n      minWidth: 0,\n      ...style,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-flex glass-min-w-0\",\n          directionClasses[direction],\n          wrapClasses[wrap],\n          justifyClasses[justify],\n          alignClasses[align],\n          alignContentClasses[alignContent],\n          gapX ? gapXClasses[gapX] : gapY ? gapYClasses[gapY] : gapClasses[gap],\n          gapX && gapY && [gapXClasses[gapX], gapYClasses[gapY]],\n          fullWidth && \"glass-w-full\",\n          fullHeight && \"glass-h-full\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          ...responsiveClasses,\n          className\n        )}\n        style={flexStyle}\n        {...a11yProps}\n        {...props}\n      />\n    );\n  }\n);\n\nGlassFlex.displayName = \"GlassFlex\";\n\n/**\n * GlassFlexItem component\n * Flex item with control over flex properties\n */\nexport const GlassFlexItem = forwardRef<HTMLDivElement, GlassFlexItemProps>(\n  (\n    {\n      grow = false,\n      shrink = true,\n      basis = \"auto\",\n      flex,\n      alignSelf = \"auto\",\n      order = \"none\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const growClasses = {\n      false: \"\",\n      true: \"flex-grow\",\n      0: \"flex-grow-0\",\n      1: \"flex-grow\",\n    };\n\n    const shrinkClasses = {\n      false: \"flex-shrink-0\",\n      true: \"flex-shrink\",\n      0: \"flex-shrink-0\",\n      1: \"flex-shrink\",\n    };\n\n    const basisClasses = {\n      auto: \"basis-auto\",\n      full: \"basis-full\",\n      \"1/2\": \"basis-1/2\",\n      \"1/3\": \"basis-1/3\",\n      \"2/3\": \"basis-2/3\",\n      \"1/4\": \"basis-1/4\",\n      \"3/4\": \"basis-3/4\",\n      \"1/5\": \"basis-1/5\",\n      \"2/5\": \"basis-2/5\",\n      \"3/5\": \"basis-3/5\",\n      \"4/5\": \"basis-4/5\",\n      \"1/6\": \"basis-1/6\",\n      \"5/6\": \"basis-5/6\",\n      \"1/12\": \"basis-1/12\",\n      \"5/12\": \"basis-5/12\",\n      \"7/12\": \"basis-7/12\",\n      \"11/12\": \"basis-11/12\",\n    };\n\n    const flexClasses = {\n      none: \"flex-none\",\n      auto: \"flex-auto\",\n      initial: \"flex-initial\",\n      \"1\": \"flex-1\",\n    };\n\n    const alignSelfClasses = {\n      auto: \"self-auto\",\n      start: \"self-start\",\n      end: \"self-end\",\n      center: \"self-center\",\n      baseline: \"self-baseline\",\n      stretch: \"self-stretch\",\n    };\n\n    const orderClasses = {\n      none: \"\",\n      first: \"order-first\",\n      last: \"order-last\",\n      1: \"order-1\",\n      2: \"order-2\",\n      3: \"order-3\",\n      4: \"order-4\",\n      5: \"order-5\",\n      6: \"order-6\",\n      7: \"order-7\",\n      8: \"order-8\",\n      9: \"order-9\",\n      10: \"order-10\",\n      11: \"order-11\",\n      12: \"order-12\",\n    };\n\n    const itemId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: itemId }),\n      ...(role && { role }),\n    };\n\n    const basisValues = {\n      auto: \"auto\",\n      full: \"100%\",\n      \"1/2\": \"50%\",\n      \"1/3\": \"33.333333%\",\n      \"2/3\": \"66.666667%\",\n      \"1/4\": \"25%\",\n      \"3/4\": \"75%\",\n      \"1/5\": \"20%\",\n      \"2/5\": \"40%\",\n      \"3/5\": \"60%\",\n      \"4/5\": \"80%\",\n      \"1/6\": \"16.666667%\",\n      \"5/6\": \"83.333333%\",\n      \"1/12\": \"8.333333%\",\n      \"5/12\": \"41.666667%\",\n      \"7/12\": \"58.333333%\",\n      \"11/12\": \"91.666667%\",\n    } as const;\n\n    const alignSelfValues = {\n      auto: \"auto\",\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      baseline: \"baseline\",\n      stretch: \"stretch\",\n    } as const;\n\n    const flexValues = {\n      none: \"none\",\n      auto: \"1 1 auto\",\n      initial: \"0 1 auto\",\n      \"1\": \"1 1 0%\",\n    } as const;\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          flex\n            ? flexClasses[flex]\n            : [\n                growClasses[grow as keyof typeof growClasses],\n                shrinkClasses[shrink as keyof typeof shrinkClasses],\n                basisClasses[basis],\n              ],\n          alignSelfClasses[alignSelf],\n          orderClasses[order],\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={{\n          ...(flex\n            ? { flex: flexValues[flex] }\n            : {\n                flexGrow: grow ? 1 : 0,\n                flexShrink: shrink ? 1 : 0,\n                flexBasis: basisValues[basis],\n              }),\n          alignSelf: alignSelfValues[alignSelf],\n          minWidth: 0,\n          ...style,\n        }}\n        {...a11yProps}\n        {...props}\n      />\n    );\n  }\n);\n\nGlassFlexItem.displayName = \"GlassFlexItem\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassGridProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Number of columns (1-12)\n   */\n  cols?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n  /**\n   * Responsive column configuration\n   */\n  responsive?: {\n    sm?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n    md?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n    lg?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n    xl?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n    \"2xl\"?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n  };\n  /**\n   * Gap between grid items\n   */\n  gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Horizontal gap\n   */\n  gapX?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Vertical gap\n   */\n  gapY?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Auto-fit columns with minimum width\n   */\n  autoFit?: boolean;\n  /**\n   * Minimum column width (for auto-fit)\n   */\n  minColWidth?: string;\n  /**\n   * Grid flow direction\n   */\n  flow?: \"row\" | \"col\" | \"row-dense\" | \"col-dense\";\n  /**\n   * Alignment\n   */\n  align?: \"start\" | \"end\" | \"center\" | \"stretch\";\n  /**\n   * Justify content\n   */\n  justify?: \"start\" | \"end\" | \"center\" | \"between\" | \"around\" | \"evenly\";\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\nexport interface GlassGridItemProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Column span (1-12)\n   */\n  colSpan?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n  /**\n   * Row span\n   */\n  rowSpan?: 1 | 2 | 3 | 4 | 5 | 6 | \"auto\";\n  /**\n   * Responsive column span\n   */\n  responsive?: {\n    sm?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n    md?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n    lg?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n    xl?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n    \"2xl\"?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | \"full\" | \"auto\";\n  };\n  /**\n   * Column start position\n   */\n  colStart?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | \"auto\";\n  /**\n   * Column end position\n   */\n  colEnd?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | \"auto\";\n  /**\n   * Row start position\n   */\n  rowStart?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | \"auto\";\n  /**\n   * Row end position\n   */\n  rowEnd?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | \"auto\";\n  /**\n   * Item alignment\n   */\n  alignSelf?: \"auto\" | \"start\" | \"end\" | \"center\" | \"stretch\";\n  /**\n   * Item justification\n   */\n  justifySelf?: \"auto\" | \"start\" | \"end\" | \"center\" | \"stretch\";\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * GlassGrid component\n * Responsive CSS Grid layout with glassmorphism styling\n */\nexport const GlassGrid = forwardRef<HTMLDivElement, GlassGridProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      cols = 12,\n      responsive,\n      gap = \"md\",\n      gapX,\n      gapY,\n      autoFit = false,\n      minColWidth = \"250px\",\n      flow = \"row\",\n      align = \"stretch\",\n      justify = \"start\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const gapValues = {\n      none: \"0\",\n      xs: \"var(--glass-space-1, 0.25rem)\",\n      sm: \"var(--glass-space-2, 0.5rem)\",\n      md: \"var(--glass-space-4, 1rem)\",\n      lg: \"var(--glass-space-6, 1.5rem)\",\n      xl: \"var(--glass-space-8, 2rem)\",\n      \"2xl\": \"var(--glass-space-12, 3rem)\",\n    } as const;\n\n    const flowValues = {\n      row: \"row\",\n      col: \"column\",\n      \"row-dense\": \"row dense\",\n      \"col-dense\": \"column dense\",\n    } as const;\n\n    const alignValues = {\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      stretch: \"stretch\",\n    } as const;\n\n    const justifyValues = {\n      start: \"flex-start\",\n      end: \"flex-end\",\n      center: \"center\",\n      between: \"space-between\",\n      around: \"space-around\",\n      evenly: \"space-evenly\",\n    } as const;\n\n    const gapClasses = {\n      none: \"glass-gap-0\",\n      xs: \"glass-gap-1\",\n      sm: \"glass-gap-2\",\n      md: \"glass-gap-4\",\n      lg: \"glass-gap-6\",\n      xl: \"gap-8\",\n      \"2xl\": \"glass-gap-12\",\n    };\n\n    const gapXClasses = {\n      none: \"gap-x-0\",\n      xs: \"gap-x-1\",\n      sm: \"gap-x-2\",\n      md: \"gap-x-4\",\n      lg: \"gap-x-6\",\n      xl: \"gap-x-8\",\n      \"2xl\": \"gap-x-12\",\n    };\n\n    const gapYClasses = {\n      none: \"gap-y-0\",\n      xs: \"gap-y-1\",\n      sm: \"gap-y-2\",\n      md: \"gap-y-4\",\n      lg: \"gap-y-6\",\n      xl: \"gap-y-8\",\n      \"2xl\": \"gap-y-12\",\n    };\n\n    const colsClasses = {\n      1: \"grid-cols-1\",\n      2: \"grid-cols-2\",\n      3: \"grid-cols-3\",\n      4: \"grid-cols-4\",\n      5: \"grid-cols-5\",\n      6: \"grid-cols-6\",\n      7: \"grid-cols-7\",\n      8: \"grid-cols-8\",\n      9: \"grid-cols-9\",\n      10: \"grid-cols-10\",\n      11: \"grid-cols-11\",\n      12: \"grid-cols-12\",\n    };\n\n    const flowClasses = {\n      row: \"grid-flow-row\",\n      col: \"grid-flow-col\",\n      \"row-dense\": \"grid-flow-row-dense\",\n      \"col-dense\": \"grid-flow-col-dense\",\n    };\n\n    const alignClasses = {\n      start: \"items-start\",\n      end: \"items-end\",\n      center: \"items-center\",\n      stretch: \"items-stretch\",\n    };\n\n    const justifyClasses = {\n      start: \"justify-start\",\n      end: \"justify-end\",\n      center: \"justify-center\",\n      between: \"justify-between\",\n      around: \"justify-around\",\n      evenly: \"justify-evenly\",\n    };\n\n    const responsiveClasses = responsive\n      ? [\n          responsive.sm && `sm:grid-cols-${responsive.sm}`,\n          responsive.md && `md:grid-cols-${responsive.md}`,\n          responsive.lg && `lg:grid-cols-${responsive.lg}`,\n          responsive.xl && `xl:grid-cols-${responsive.xl}`,\n          responsive[\"2xl\"] && `2xl:grid-cols-${responsive[\"2xl\"]}`,\n        ].filter(Boolean)\n      : [];\n\n    const gridStyle = autoFit\n      ? {\n          gridTemplateColumns: `repeat(auto-fit, minmax(${minColWidth}, 1fr))`,\n        }\n      : {\n          gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`,\n        };\n\n    const layoutStyle: React.CSSProperties = {\n      display: \"grid\",\n      gridAutoFlow: flowValues[flow],\n      alignItems: alignValues[align],\n      justifyContent: justifyValues[justify],\n      ...gridStyle,\n      ...(gapX\n        ? { columnGap: gapValues[gapX] }\n        : gapY\n          ? {}\n          : { columnGap: gapValues[gap] }),\n      ...(gapY\n        ? { rowGap: gapValues[gapY] }\n        : gapX\n          ? {}\n          : { rowGap: gapValues[gap] }),\n      ...style,\n    };\n\n    const gridId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: gridId }),\n      ...(role && { role }),\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"grid\",\n          !autoFit && colsClasses[cols],\n          gapX ? gapXClasses[gapX] : gapY ? gapYClasses[gapY] : gapClasses[gap],\n          gapX && gapY && [gapXClasses[gapX], gapYClasses[gapY]],\n          flowClasses[flow],\n          alignClasses[align],\n          justifyClasses[justify],\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          ...responsiveClasses,\n          className\n        )}\n        style={layoutStyle}\n        {...a11yProps}\n        {...props}\n      />\n    );\n  }\n);\n\nGlassGrid.displayName = \"GlassGrid\";\n\n/**\n * GlassGridItem component\n * Grid item with responsive column/row spanning\n */\nexport const GlassGridItem = forwardRef<HTMLDivElement, GlassGridItemProps>(\n  (\n    {\n      colSpan = \"auto\",\n      rowSpan = \"auto\",\n      responsive,\n      colStart = \"auto\",\n      colEnd = \"auto\",\n      rowStart = \"auto\",\n      rowEnd = \"auto\",\n      alignSelf = \"auto\",\n      justifySelf = \"auto\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      role,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const spanValue = (value: number | \"full\" | \"auto\") => {\n      if (value === \"auto\") return undefined;\n      if (value === \"full\") return \"1 / -1\";\n      return `span ${value} / span ${value}`;\n    };\n\n    const rowSpanValue = (value: number | \"auto\") => {\n      if (value === \"auto\") return undefined;\n      return `span ${value} / span ${value}`;\n    };\n\n    const selfValues = {\n      auto: \"auto\",\n      start: \"start\",\n      end: \"end\",\n      center: \"center\",\n      stretch: \"stretch\",\n    } as const;\n\n    const colSpanClasses = {\n      1: \"col-span-1\",\n      2: \"col-span-2\",\n      3: \"col-span-3\",\n      4: \"col-span-4\",\n      5: \"col-span-5\",\n      6: \"col-span-6\",\n      7: \"col-span-7\",\n      8: \"col-span-8\",\n      9: \"col-span-9\",\n      10: \"col-span-10\",\n      11: \"col-span-11\",\n      12: \"col-span-12\",\n      full: \"col-span-full\",\n      auto: \"col-auto\",\n    };\n\n    const rowSpanClasses = {\n      1: \"row-span-1\",\n      2: \"row-span-2\",\n      3: \"row-span-3\",\n      4: \"row-span-4\",\n      5: \"row-span-5\",\n      6: \"row-span-6\",\n      auto: \"row-auto\",\n    };\n\n    const colStartClasses = {\n      1: \"col-start-1\",\n      2: \"col-start-2\",\n      3: \"col-start-3\",\n      4: \"col-start-4\",\n      5: \"col-start-5\",\n      6: \"col-start-6\",\n      7: \"col-start-7\",\n      8: \"col-start-8\",\n      9: \"col-start-9\",\n      10: \"col-start-10\",\n      11: \"col-start-11\",\n      12: \"col-start-12\",\n      13: \"col-start-13\",\n      auto: \"col-start-auto\",\n    };\n\n    const colEndClasses = {\n      1: \"col-end-1\",\n      2: \"col-end-2\",\n      3: \"col-end-3\",\n      4: \"col-end-4\",\n      5: \"col-end-5\",\n      6: \"col-end-6\",\n      7: \"col-end-7\",\n      8: \"col-end-8\",\n      9: \"col-end-9\",\n      10: \"col-end-10\",\n      11: \"col-end-11\",\n      12: \"col-end-12\",\n      13: \"col-end-13\",\n      auto: \"col-end-auto\",\n    };\n\n    const rowStartClasses = {\n      1: \"row-start-1\",\n      2: \"row-start-2\",\n      3: \"row-start-3\",\n      4: \"row-start-4\",\n      5: \"row-start-5\",\n      6: \"row-start-6\",\n      7: \"row-start-7\",\n      auto: \"row-start-auto\",\n    };\n\n    const rowEndClasses = {\n      1: \"row-end-1\",\n      2: \"row-end-2\",\n      3: \"row-end-3\",\n      4: \"row-end-4\",\n      5: \"row-end-5\",\n      6: \"row-end-6\",\n      7: \"row-end-7\",\n      auto: \"row-end-auto\",\n    };\n\n    const alignSelfClasses = {\n      auto: \"self-auto\",\n      start: \"self-start\",\n      end: \"self-end\",\n      center: \"self-center\",\n      stretch: \"self-stretch\",\n    };\n\n    const justifySelfClasses = {\n      auto: \"justify-self-auto\",\n      start: \"justify-self-start\",\n      end: \"justify-self-end\",\n      center: \"justify-self-center\",\n      stretch: \"justify-self-stretch\",\n    };\n\n    const responsiveClasses = responsive\n      ? [\n          responsive.sm && `sm:${colSpanClasses[responsive.sm]}`,\n          responsive.md && `md:${colSpanClasses[responsive.md]}`,\n          responsive.lg && `lg:${colSpanClasses[responsive.lg]}`,\n          responsive.xl && `xl:${colSpanClasses[responsive.xl]}`,\n          responsive[\"2xl\"] && `2xl:${colSpanClasses[responsive[\"2xl\"]]}`,\n        ].filter(Boolean)\n      : [];\n\n    const itemId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const a11yProps = {\n      ...(ariaLabel && { \"aria-label\": ariaLabel, id: itemId }),\n      ...(role && { role }),\n    };\n\n    const itemStyle: React.CSSProperties = {\n      ...(colSpan !== \"auto\" ? { gridColumn: spanValue(colSpan) } : {}),\n      ...(rowSpan !== \"auto\" ? { gridRow: rowSpanValue(rowSpan) } : {}),\n      ...(colStart !== \"auto\" ? { gridColumnStart: colStart } : {}),\n      ...(colEnd !== \"auto\" ? { gridColumnEnd: colEnd } : {}),\n      ...(rowStart !== \"auto\" ? { gridRowStart: rowStart } : {}),\n      ...(rowEnd !== \"auto\" ? { gridRowEnd: rowEnd } : {}),\n      alignSelf: selfValues[alignSelf],\n      justifySelf: selfValues[justifySelf],\n      minWidth: 0,\n      ...style,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          colSpanClasses[colSpan],\n          rowSpanClasses[rowSpan],\n          colStartClasses[colStart],\n          colEndClasses[colEnd],\n          rowStartClasses[rowStart],\n          rowEndClasses[rowEnd],\n          alignSelfClasses[alignSelf],\n          justifySelfClasses[justifySelf],\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          ...responsiveClasses,\n          className\n        )}\n        style={itemStyle}\n        {...a11yProps}\n        {...props}\n      />\n    );\n  }\n);\n\nGlassGridItem.displayName = \"GlassGridItem\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassMasonryProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Number of columns in the masonry layout\n   */\n  columns?: number;\n  /**\n   * Gap between items in pixels\n   */\n  gap?: number;\n  /**\n   * Content to render in the masonry layout\n   */\n  children: React.ReactNode;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * GlassMasonry component\n * CSS Masonry layout for displaying content in a column-based grid\n */\nexport const GlassMasonry = forwardRef<HTMLDivElement, GlassMasonryProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      columns = 3,\n      gap = 12,\n      children,\n      className,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Masonry layout\",\n      role = \"grid\",\n      ...props\n    },\n    ref\n  ) => {\n    const masonryId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    return (\n      <div\n        ref={ref}\n        id={masonryId}\n        className={cn(\n          \"w-full\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={{\n          columnCount: columns as any,\n          columnGap: gap,\n        }}\n        aria-label={ariaLabel}\n        role={role}\n        {...props}\n      >\n        {React.Children.map(children, (child, i) => (\n          <div\n            key={i}\n            role=\"gridcell\"\n            style={{\n              breakInside: \"avoid\",\n              marginBottom: gap,\n            }}\n            className={\n              shouldRespectMotion\n                ? \"motion-safe:transition-all motion-reduce:transition-none\"\n                : \"\"\n            }\n          >\n            {child}\n          </div>\n        ))}\n      </div>\n    );\n  }\n);\n\nGlassMasonry.displayName = \"GlassMasonry\";\n\nexport default GlassMasonry;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassScrollAreaProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onScroll\"> {\n  /**\n   * Scroll area content\n   */\n  children: React.ReactNode;\n  /**\n   * Maximum height\n   */\n  maxHeight?: string | number;\n  /**\n   * Maximum width\n   */\n  maxWidth?: string | number;\n  /**\n   * Scroll direction\n   */\n  direction?: \"vertical\" | \"horizontal\" | \"both\";\n  /**\n   * Show scrollbars\n   */\n  showScrollbars?: \"always\" | \"hover\" | \"auto\" | \"never\";\n  /**\n   * Scrollbar size\n   */\n  scrollbarSize?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Scrollbar position\n   */\n  scrollbarPosition?: \"inside\" | \"outside\";\n  /**\n   * Custom scrollbar styling\n   */\n  scrollbarClassName?: string;\n  /**\n   * Callback when scroll position changes\n   */\n  onScroll?: (scrollTop: number, scrollLeft: number) => void;\n  /**\n   * Enable smooth scrolling\n   */\n  smoothScrolling?: boolean;\n  /**\n   * Compact preview/card layout.\n   */\n  compact?: boolean;\n  /**\n   * Bound the scroll area inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\nexport interface GlassScrollBarProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Scrollbar orientation\n   */\n  orientation: \"vertical\" | \"horizontal\";\n  /**\n   * Scrollbar size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Show scrollbar thumb\n   */\n  showThumb?: boolean;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n}\n\n/**\n * GlassScrollArea component\n * A glassmorphism scrollable area with custom scrollbars\n */\nexport const GlassScrollArea = forwardRef<HTMLDivElement, GlassScrollAreaProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      children,\n      maxHeight = \"200px\",\n      maxWidth,\n      direction = \"vertical\",\n      showScrollbars = \"auto\",\n      scrollbarSize = \"md\",\n      scrollbarPosition = \"inside\",\n      scrollbarClassName,\n      className,\n      onScroll,\n      smoothScrolling = false,\n      compact = false,\n      contained = false,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Scrollable content area\",\n      role = \"region\",\n      ...props\n    },\n    ref\n  ) => {\n    const [scrollTop, setScrollTop] = useState(0);\n    const [scrollLeft, setScrollLeft] = useState(0);\n    const [isHovering, setIsHovering] = useState(false);\n    const [contentHeight, setContentHeight] = useState(0);\n    const [contentWidth, setContentWidth] = useState(0);\n    const [containerHeight, setContainerHeight] = useState(0);\n    const [containerWidth, setContainerWidth] = useState(0);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const contentRef = useRef<HTMLDivElement>(null);\n    const scrollAreaId = useA11yId();\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion && isMotionSafe;\n    const effectiveMaxHeight =\n      maxHeight ?? (compact || contained ? 200 : \"200px\");\n    const boundedMaxHeight =\n      typeof effectiveMaxHeight === \"number\"\n        ? `${effectiveMaxHeight}px`\n        : effectiveMaxHeight;\n\n    // Update dimensions when content changes\n    useEffect(() => {\n      const updateDimensions = () => {\n        if (containerRef.current && contentRef.current) {\n          const containerRect = containerRef.current.getBoundingClientRect();\n          const contentRect = contentRef.current.getBoundingClientRect();\n\n          setContainerHeight(containerRect.height);\n          setContainerWidth(containerRect.width);\n          setContentHeight(contentRect.height);\n          setContentWidth(contentRect.width);\n        }\n      };\n\n      updateDimensions();\n\n      const resizeObserver = new ResizeObserver(updateDimensions);\n      if (containerRef.current) resizeObserver.observe(containerRef.current);\n      if (contentRef.current) resizeObserver.observe(contentRef.current);\n\n      return () => resizeObserver.disconnect();\n    }, [children]);\n\n    const [scrollActive, setScrollActive] = useState(false);\n    const scrollTimer = useRef<any>(null);\n\n    const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n      const target = e.target as HTMLDivElement;\n      const newScrollTop = target.scrollTop;\n      const newScrollLeft = target.scrollLeft;\n\n      setScrollTop(newScrollTop);\n      setScrollLeft(newScrollLeft);\n      onScroll?.(newScrollTop, newScrollLeft);\n\n      setScrollActive(true);\n      if (scrollTimer.current) clearTimeout(scrollTimer.current);\n      scrollTimer.current = setTimeout(() => setScrollActive(false), 200);\n    };\n\n    const shouldShowScrollbars = () => {\n      switch (showScrollbars) {\n        case \"always\":\n          return true;\n        case \"never\":\n          return false;\n        case \"hover\":\n          return isHovering;\n        case \"auto\":\n        default:\n          return (\n            (direction === \"vertical\" && contentHeight > containerHeight) ||\n            (direction === \"horizontal\" && contentWidth > containerWidth) ||\n            (direction === \"both\" &&\n              (contentHeight > containerHeight ||\n                contentWidth > containerWidth))\n          );\n      }\n    };\n\n    const scrollbarSizeClasses = {\n      sm: \"w-1 h-1\",\n      md: \"w-2 h-2\",\n      lg: \"w-3 h-3\",\n    };\n\n    const getOverflowStyle = (): React.CSSProperties => {\n      switch (direction) {\n        case \"vertical\":\n          return { overflowX: \"hidden\", overflowY: \"auto\" };\n        case \"horizontal\":\n          return { overflowX: \"auto\", overflowY: \"hidden\" };\n        case \"both\":\n        default:\n          return { overflowX: \"auto\", overflowY: \"auto\" };\n      }\n    };\n\n    const isAtTop = scrollTop <= 0;\n    const isAtBottom = contentHeight - containerHeight - scrollTop <= 1;\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={scrollAreaId}\n        intent=\"neutral\"\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation={shouldRespectMotion ? \"shimmer\" : \"none\"}\n        performanceMode=\"medium\"\n        role={role}\n        aria-label={ariaLabel}\n        className={cn(\n          \"relative glass-backdrop-blur-md ring-1 ring-white/10 bg-white/5 glass-overflow-hidden\",\n          scrollbarPosition === \"outside\" && \"glass-p-2\",\n          compact && \"glass-p-1\",\n          smoothScrolling && \"scroll-smooth\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={{\n          maxHeight: boundedMaxHeight,\n          maxWidth: typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n          ...(contained || compact ? { height: boundedMaxHeight } : null),\n        }}\n        {...props}\n      >\n        <div\n          ref={containerRef}\n          className={cn(\n            \"relative overflow-hidden glass-min-w-0\",\n            scrollbarPosition === \"inside\" && \"glass-radius-lg\"\n          )}\n          style={{\n            maxHeight: boundedMaxHeight,\n            height: contained || compact ? \"100%\" : undefined,\n          }}\n          onMouseEnter={() => setIsHovering(true)}\n          onMouseLeave={() => setIsHovering(false)}\n        >\n          {/* Content */}\n          <div\n            ref={contentRef}\n            className=\"glass-relative glass-min-w-0\"\n            style={{\n              ...getOverflowStyle(),\n              maxHeight: boundedMaxHeight,\n              height: contained || compact ? \"100%\" : undefined,\n              paddingRight:\n                direction !== \"horizontal\" && showScrollbars !== \"never\"\n                  ? compact\n                    ? \"0.35rem\"\n                    : \"0.5rem\"\n                  : undefined,\n              scrollbarWidth: showScrollbars === \"never\" ? \"none\" : \"thin\",\n              scrollbarColor:\n                showScrollbars === \"never\"\n                  ? undefined\n                  : \"rgba(148, 163, 184, 0.42) transparent\",\n            }}\n            onScroll={handleScroll}\n          >\n            {children}\n          </div>\n\n          {/* Edge fades */}\n          {direction !== \"horizontal\" && (\n            <>\n              {!isAtTop && (\n                <div\n                  className={cn(\n                    \"pointer-events-none absolute top-0 left-0 right-0 h-6 bg-gradient-to-b to-transparent\",\n                    scrollActive ? \"from-blue-400/20\" : \"from-black/20\"\n                  )}\n                />\n              )}\n              {!isAtBottom && (\n                <div\n                  className={cn(\n                    \"pointer-events-none absolute bottom-0 left-0 right-0 h-6 bg-gradient-to-t to-transparent\",\n                    scrollActive ? \"from-blue-400/20\" : \"from-black/20\"\n                  )}\n                />\n              )}\n            </>\n          )}\n\n          {/* Custom Scrollbars */}\n          {shouldShowScrollbars() && (\n            <>\n              {/* Vertical Scrollbar */}\n              {direction !== \"horizontal\" &&\n                contentHeight > containerHeight && (\n                  <GlassScrollBar\n                    orientation=\"vertical\"\n                    size={scrollbarSize}\n                    className={scrollbarClassName}\n                    showThumb={true}\n                  />\n                )}\n\n              {/* Horizontal Scrollbar */}\n              {direction !== \"vertical\" && contentWidth > containerWidth && (\n                <GlassScrollBar\n                  orientation=\"horizontal\"\n                  size={scrollbarSize}\n                  className={scrollbarClassName}\n                  showThumb={true}\n                />\n              )}\n            </>\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassScrollArea.displayName = \"GlassScrollArea\";\n\n/**\n * GlassScrollBar component\n * Custom scrollbar with glassmorphism styling\n */\nexport const GlassScrollBar = forwardRef<HTMLDivElement, GlassScrollBarProps>(\n  (\n    {\n      orientation,\n      size = \"md\",\n      className,\n      showThumb = true,\n      respectMotionPreference = true,\n      ...props\n    },\n    ref\n  ) => {\n    const [isDragging, setIsDragging] = useState(false);\n    const [thumbPosition, setThumbPosition] = useState(0);\n    const [thumbSize, setThumbSize] = useState(50);\n\n    const internalRef = useRef<HTMLDivElement>(null);\n    const scrollbarRef = ref || internalRef;\n\n    // Handle ref access safely for both function and object refs\n    const getScrollbarElement = () => {\n      if (typeof scrollbarRef === \"function\") {\n        return null; // Function refs don't have current property\n      }\n      return scrollbarRef.current;\n    };\n    const thumbRef = useRef<HTMLDivElement>(null);\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion && isMotionSafe;\n\n    // Calculate thumb position and size based on scroll\n    useEffect(() => {\n      const updateThumb = () => {\n        const scrollbarElement = getScrollbarElement();\n        if (!scrollbarElement?.parentElement) return;\n\n        const container = scrollbarElement.parentElement;\n        const content = container.firstElementChild as HTMLElement;\n\n        if (!content) return;\n\n        const containerSize =\n          orientation === \"vertical\"\n            ? container.clientHeight\n            : container.clientWidth;\n\n        const contentSize =\n          orientation === \"vertical\"\n            ? content.scrollHeight\n            : content.scrollWidth;\n\n        const scrollPosition =\n          orientation === \"vertical\" ? content.scrollTop : content.scrollLeft;\n\n        // Calculate thumb size\n        const newThumbSize = Math.max(\n          30,\n          (containerSize / contentSize) * containerSize\n        );\n        setThumbSize(newThumbSize);\n\n        // Calculate thumb position\n        const maxScroll = contentSize - containerSize;\n        const maxThumbTravel = containerSize - newThumbSize;\n        const newThumbPosition =\n          maxScroll > 0 ? (scrollPosition / maxScroll) * maxThumbTravel : 0;\n\n        setThumbPosition(newThumbPosition);\n      };\n\n      const container = getScrollbarElement()?.parentElement;\n      if (container) {\n        updateThumb();\n        container.addEventListener(\"scroll\", updateThumb);\n        return () => container.removeEventListener(\"scroll\", updateThumb);\n      }\n    }, [orientation]);\n\n    const handleMouseDown = (e: React.MouseEvent) => {\n      setIsDragging(true);\n      e.preventDefault();\n    };\n\n    useEffect(() => {\n      const handleMouseMove = (e: MouseEvent) => {\n        const scrollbarElement = getScrollbarElement();\n        if (!isDragging || !scrollbarElement?.parentElement) return;\n\n        const container = scrollbarElement.parentElement;\n        const content = container.firstElementChild as HTMLElement;\n        const rect = scrollbarElement.getBoundingClientRect();\n\n        const clickPosition =\n          orientation === \"vertical\"\n            ? e.clientY - rect.top\n            : e.clientX - rect.left;\n\n        const containerSize =\n          orientation === \"vertical\"\n            ? container.clientHeight\n            : container.clientWidth;\n\n        const contentSize =\n          orientation === \"vertical\"\n            ? content.scrollHeight\n            : content.scrollWidth;\n\n        const scrollRatio = clickPosition / containerSize;\n        const newScrollPosition = scrollRatio * (contentSize - containerSize);\n\n        if (orientation === \"vertical\") {\n          content.scrollTop = Math.max(\n            0,\n            Math.min(newScrollPosition, contentSize - containerSize)\n          );\n        } else {\n          content.scrollLeft = Math.max(\n            0,\n            Math.min(newScrollPosition, contentSize - containerSize)\n          );\n        }\n      };\n\n      const handleMouseUp = () => {\n        setIsDragging(false);\n      };\n\n      if (isDragging) {\n        document.addEventListener(\"mousemove\", handleMouseMove);\n        document.addEventListener(\"mouseup\", handleMouseUp);\n      }\n\n      return () => {\n        document.removeEventListener(\"mousemove\", handleMouseMove);\n        document.removeEventListener(\"mouseup\", handleMouseUp);\n      };\n    }, [isDragging, orientation]);\n\n    const scrollbarClasses =\n      orientation === \"vertical\"\n        ? \"absolute right-0 top-0 bottom-0 w-6\"\n        : \"absolute bottom-0 left-0 right-0 h-6\";\n\n    const thumbClasses =\n      orientation === \"vertical\"\n        ? \"absolute right-1 glass-radius-full cursor-pointer\"\n        : \"absolute bottom-1 glass-radius-full cursor-pointer\";\n\n    return (\n      <div\n        ref={scrollbarRef}\n        className={cn(\n          scrollbarClasses,\n          \"pointer-events-auto\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        onMouseDown={handleMouseDown}\n        {...props}\n      >\n        {/* Track */}\n        <div\n          className={cn(\n            \"absolute bg-white/10 glass-radius-full transition-all duration-200\",\n            orientation === \"vertical\"\n              ? \"right-1 top-1 bottom-1 w-1 hover:w-2\"\n              : \"bottom-1 left-1 right-1 h-1 hover:h-2\"\n          )}\n        />\n\n        {/* Thumb */}\n        {showThumb && (\n          <div\n            ref={thumbRef}\n            className={cn(\n              thumbClasses,\n              \"glass-backdrop-blur-md bg-white/30 border border-white/20\",\n              shouldRespectMotion\n                ? \"hover:bg-white/40 transition-all duration-200\"\n                : \"hover:bg-white/40\",\n              isDragging && \"bg-white/50 scale-110\",\n              size === \"sm\" && \"w-1 h-4\",\n              size === \"md\" && \"w-2 h-6\",\n              size === \"lg\" && \"w-3 h-8\"\n            )}\n            style={{\n              [orientation === \"vertical\" ? \"top\" : \"left\"]:\n                `${thumbPosition}px`,\n              [orientation === \"vertical\" ? \"height\" : \"width\"]:\n                `${thumbSize}px`,\n            }}\n          />\n        )}\n      </div>\n    );\n  }\n);\n\nGlassScrollBar.displayName = \"GlassScrollBar\";\n\n/**\n * Hook for managing scroll area state\n */\nexport const useScrollArea = () => {\n  const [scrollTop, setScrollTop] = useState(0);\n  const [scrollLeft, setScrollLeft] = useState(0);\n  const [isAtTop, setIsAtTop] = useState(true);\n  const [isAtBottom, setIsAtBottom] = useState(false);\n  const [isAtLeft, setIsAtLeft] = useState(true);\n  const [isAtRight, setIsAtRight] = useState(false);\n\n  const handleScroll = (newScrollTop: number, newScrollLeft: number) => {\n    setScrollTop(newScrollTop);\n    setScrollLeft(newScrollLeft);\n\n    // Update boundary states (these would need to be calculated based on content/container sizes)\n    setIsAtTop(newScrollTop === 0);\n    setIsAtLeft(newScrollLeft === 0);\n    // Note: isAtBottom and isAtRight would need container/content dimensions\n  };\n\n  const scrollToTop = () => {\n    const container = document.querySelector(\"[data-scroll-area]\");\n    if (container) {\n      container.scrollTo({ top: 0, behavior: \"smooth\" });\n    }\n  };\n\n  const scrollToBottom = () => {\n    const container = document.querySelector(\"[data-scroll-area]\");\n    if (container) {\n      container.scrollTo({ top: container.scrollHeight, behavior: \"smooth\" });\n    }\n  };\n\n  return {\n    scrollTop,\n    scrollLeft,\n    isAtTop,\n    isAtBottom,\n    isAtLeft,\n    isAtRight,\n    handleScroll,\n    scrollToTop,\n    scrollToBottom,\n  };\n};\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassSeparatorProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"content\"> {\n  /** Orientation of the separator */\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Visual variant */\n  variant?: \"default\" | \"gradient\" | \"dashed\" | \"dotted\" | \"glow\";\n  /** Size/thickness of the separator */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Length of the separator (for vertical separators) */\n  length?: string | number;\n  /** Whether to add decorative elements */\n  decorative?: boolean;\n  /** Content to display in the center (for horizontal separators) */\n  content?: React.ReactNode;\n  /** Spacing around the content */\n  spacing?: \"sm\" | \"md\" | \"lg\";\n  /** Whether to respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** Accessibility label for screen readers */\n  \"aria-label\"?: string;\n}\n\nexport const GlassSeparator = forwardRef<HTMLDivElement, GlassSeparatorProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      orientation = \"horizontal\",\n      variant = \"default\",\n      size = \"md\",\n      length,\n      decorative = true,\n      content,\n      spacing = \"md\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const sizeConfig = {\n      sm: {\n        thickness: orientation === \"horizontal\" ? \"h-px\" : \"w-px\",\n        contentGap: \"glass-gap-2\",\n        contentPadding: \"glass-px-2\",\n      },\n      md: {\n        thickness: orientation === \"horizontal\" ? \"h-0.5\" : \"w-0.5\",\n        contentGap: \"glass-gap-3\",\n        contentPadding: \"glass-px-3\",\n      },\n      lg: {\n        thickness: orientation === \"horizontal\" ? \"h-1\" : \"w-1\",\n        contentGap: \"glass-gap-4\",\n        contentPadding: \"glass-px-4\",\n      },\n    };\n\n    const spacingConfig = {\n      sm: \"glass-gap-2 glass-px-2\",\n      md: \"glass-gap-3 glass-px-3\",\n      lg: \"glass-gap-4 glass-px-4\",\n    };\n\n    const variantStyles = {\n      default: \"bg-border/20\",\n      gradient:\n        \"bg-gradient-to-r from-transparent via-border/20 to-transparent\",\n      dashed: \"border-dashed border-t border-border/20 bg-transparent\",\n      dotted: \"border-dotted border-t border-border/20 bg-transparent\",\n      glow: cn(\n        \"bg-gradient-to-r from-transparent via-primary/30 to-transparent\",\n        \"shadow-lg shadow-primary/20 glass-backdrop-blur-md\"\n      ),\n    };\n\n    const config = sizeConfig[size];\n    const separatorId = useA11yId();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    // Handle separator with content\n    if (content && orientation === \"horizontal\") {\n      return (\n        <ContrastGuard\n          as=\"div\"\n          level=\"AA\"\n          ref={ref}\n          id={separatorId}\n          className={cn(\n            \"glass-separator-with-content\",\n            \"flex items-center w-full\",\n            spacingConfig[spacing],\n            // Motion preferences\n            shouldRespectMotion &&\n              \"motion-safe:transition-all motion-reduce:transition-none\",\n            className\n          )}\n          role={decorative ? \"presentation\" : \"separator\"}\n          aria-orientation={decorative ? undefined : orientation}\n          aria-label={\n            decorative\n              ? undefined\n              : ariaLabel ||\n                (content ? `Separator with content: ${content}` : undefined)\n          }\n          {...props}\n        >\n          {/* Left separator */}\n          <div\n            className={cn(\"flex-1\", config.thickness, variantStyles[variant])}\n          />\n\n          {/* Content */}\n          <TextWithContrast\n            as=\"div\"\n            className={cn(\n              \"glass-separator-content\",\n              \"flex items-center justify-center shrink-0\",\n              \"glass-text-secondary glass-text-sm font-medium\",\n              config.contentPadding\n            )}\n          >\n            {content}\n          </TextWithContrast>\n\n          {/* Right separator */}\n          <div\n            className={cn(\"flex-1\", config.thickness, variantStyles[variant])}\n          />\n        </ContrastGuard>\n      );\n    }\n\n    // Standard separator\n    return (\n      <ContrastGuard as=\"div\" level=\"AA\">\n        <div\n          ref={ref}\n          id={separatorId}\n          className={cn(\n            \"glass-separator\",\n\n            // Orientation and size\n            orientation === \"horizontal\"\n              ? cn(\"w-full\", config.thickness)\n              : cn(\"h-full\", config.thickness),\n\n            // Length override\n            length &&\n              (orientation === \"horizontal\"\n                ? `w-[${typeof length === \"number\" ? `${length}px` : length}]`\n                : `h-[${typeof length === \"number\" ? `${length}px` : length}]`),\n\n            // Variant styles\n            variantStyles[variant],\n\n            // Special handling for dashed/dotted\n            (variant === \"dashed\" || variant === \"dotted\") && [\n              orientation === \"horizontal\" ? \"border-t\" : \"border-l\",\n              config.thickness\n                .replace(\"h-\", \"border-t-\")\n                .replace(\"w-\", \"border-l-\"),\n            ],\n\n            // Motion preferences\n            shouldRespectMotion &&\n              \"motion-safe:transition-all motion-reduce:transition-none\",\n\n            className\n          )}\n          role={decorative ? \"presentation\" : \"separator\"}\n          aria-orientation={decorative ? undefined : orientation}\n          aria-label={\n            decorative ? undefined : ariaLabel || `${orientation} separator`\n          }\n          {...props}\n        />\n      </ContrastGuard>\n    );\n  }\n);\n\nGlassSeparator.displayName = \"GlassSeparator\";\n\n// Utility components for common patterns\nexport const GlassHorizontalSeparator = forwardRef<\n  HTMLDivElement,\n  Omit<GlassSeparatorProps, \"orientation\">\n>((props, ref) => (\n  <GlassSeparator ref={ref} orientation=\"horizontal\" {...props} />\n));\n\nexport const GlassVerticalSeparator = forwardRef<\n  HTMLDivElement,\n  Omit<GlassSeparatorProps, \"orientation\">\n>((props, ref) => (\n  <GlassSeparator ref={ref} orientation=\"vertical\" {...props} />\n));\n\nexport const GlassGradientSeparator = forwardRef<\n  HTMLDivElement,\n  Omit<GlassSeparatorProps, \"variant\">\n>((props, ref) => <GlassSeparator ref={ref} variant=\"gradient\" {...props} />);\n\nexport const GlassGlowSeparator = forwardRef<\n  HTMLDivElement,\n  Omit<GlassSeparatorProps, \"variant\">\n>((props, ref) => <GlassSeparator ref={ref} variant=\"glow\" {...props} />);\n\nGlassHorizontalSeparator.displayName = \"GlassHorizontalSeparator\";\nGlassVerticalSeparator.displayName = \"GlassVerticalSeparator\";\nGlassGradientSeparator.displayName = \"GlassGradientSeparator\";\nGlassGlowSeparator.displayName = \"GlassGlowSeparator\";\n\nexport default GlassSeparator;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassSplitPaneProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Split direction\n   */\n  direction?: \"horizontal\" | \"vertical\";\n  /**\n   * Initial split percentage for first pane\n   */\n  initial?: number;\n  /**\n   * Minimum percentage for first pane\n   */\n  min?: number;\n  /**\n   * Maximum percentage for first pane\n   */\n  max?: number;\n  /**\n   * Content for the left/top pane\n   */\n  left?: React.ReactNode;\n  /**\n   * Content for the right/bottom pane\n   */\n  right?: React.ReactNode;\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Callback when split percentage changes\n   */\n  onSplitChange?: (percentage: number) => void;\n  /**\n   * Compact density for constrained previews and embedded panels.\n   */\n  compact?: boolean;\n  /**\n   * Keep the split pane visually bounded inside its parent.\n   */\n  contained?: boolean;\n  /**\n   * Maximum rendered height for contained/compact contexts.\n   */\n  maxHeight?: number | string;\n  /**\n   * Maximum rendered width for contained/compact contexts.\n   */\n  maxWidth?: number | string;\n}\n\n/**\n * GlassSplitPane component\n * Resizable split pane with glassmorphism styling\n */\nexport const GlassSplitPane = forwardRef<HTMLDivElement, GlassSplitPaneProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      direction = \"horizontal\",\n      initial = 50,\n      min = 20,\n      max = 80,\n      left,\n      right,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Split pane\",\n      onSplitChange,\n      compact = false,\n      contained = false,\n      maxHeight,\n      maxWidth,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const [pct, setPct] = React.useState(initial);\n    const dragging = React.useRef(false);\n    const splitPaneId = useA11yId();\n    const separatorId = useA11yId();\n    const splitPaneLabelId = useA11yId(\"split-pane-label\");\n    const leftPaneLabelId = useA11yId(\"split-pane-left\");\n    const rightPaneLabelId = useA11yId(\"split-pane-right\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion =\n      respectMotionPreference && !prefersReducedMotion;\n\n    const onDown = () => (dragging.current = true);\n    const onUp = () => (dragging.current = false);\n\n    const onMove = React.useCallback(\n      (e: MouseEvent) => {\n        if (!dragging.current) return;\n\n        let newPct: number;\n        if (direction === \"horizontal\") {\n          newPct = (e.clientX / window.innerWidth) * 100;\n        } else {\n          newPct = (e.clientY / window.innerHeight) * 100;\n        }\n\n        const clampedPct = Math.max(min, Math.min(max, newPct));\n        setPct(clampedPct);\n        onSplitChange?.(clampedPct);\n      },\n      [direction, min, max, onSplitChange]\n    );\n\n    React.useEffect(() => {\n      window.addEventListener(\"mousemove\", onMove);\n      window.addEventListener(\"mouseup\", onUp);\n      return () => {\n        window.removeEventListener(\"mousemove\", onMove);\n        window.removeEventListener(\"mouseup\", onUp);\n      };\n    }, [onMove]);\n\n    // Keyboard support for separator\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      const step = 5; // 5% steps\n      let newPct = pct;\n\n      switch (e.key) {\n        case \"ArrowLeft\":\n        case \"ArrowUp\":\n          newPct = Math.max(min, pct - step);\n          break;\n        case \"ArrowRight\":\n        case \"ArrowDown\":\n          newPct = Math.min(max, pct + step);\n          break;\n        case \"Home\":\n          newPct = min;\n          break;\n        case \"End\":\n          newPct = max;\n          break;\n        default:\n          return;\n      }\n\n      e.preventDefault();\n      setPct(newPct);\n      onSplitChange?.(newPct);\n    };\n\n    return (\n      <div\n        ref={ref}\n        id={splitPaneId}\n        className={cn(\n          \"glass-relative glass-grid glass-w-full glass-h-full\",\n          compact && \"glass-text-sm\",\n          // Motion preferences\n          shouldRespectMotion &&\n            \"motion-safe:transition-all motion-reduce:transition-none\",\n          className\n        )}\n        style={{\n          // @ts-ignore custom var\n          [\"--a\" as any]: `${pct}%`,\n          display: \"grid\",\n          gridTemplateColumns:\n            direction === \"horizontal\"\n              ? \"var(--a) 12px minmax(0, 1fr)\"\n              : undefined,\n          gridTemplateRows:\n            direction === \"vertical\"\n              ? \"var(--a) 12px minmax(0, 1fr)\"\n              : undefined,\n          minWidth: 0,\n          minHeight: 0,\n          maxHeight,\n          maxWidth,\n          overflow: contained || compact ? \"hidden\" : style?.overflow,\n          ...style,\n        }}\n        role=\"group\"\n        aria-label={ariaLabel}\n        aria-labelledby={splitPaneLabelId}\n        {...props}\n      >\n        <span id={splitPaneLabelId} className=\"glass-sr-only\">\n          {ariaLabel}\n        </span>\n        {/* Left/Top Pane */}\n        <ContrastGuard\n          as=\"div\"\n          level=\"AA\"\n          className=\"glass-min-w-0 glass-min-h-0 glass-overflow-auto\"\n          role=\"region\"\n          aria-labelledby={leftPaneLabelId}\n        >\n          <span id={leftPaneLabelId} className=\"glass-sr-only\">\n            {direction === \"horizontal\" ? \"Left pane\" : \"Top pane\"}\n          </span>\n          {left}\n        </ContrastGuard>\n\n        {/* Separator */}\n        <div\n          id={separatorId}\n          role=\"separator\"\n          tabIndex={0}\n          aria-orientation={\n            direction === \"horizontal\" ? \"vertical\" : \"horizontal\"\n          }\n          aria-valuenow={pct}\n          aria-valuemin={min}\n          aria-valuemax={max}\n          aria-label={`Resize ${direction === \"horizontal\" ? \"vertical\" : \"horizontal\"} split. Currently at ${Math.round(pct)}%`}\n          onMouseDown={onDown}\n          onKeyDown={handleKeyDown}\n          className={cn(\n            \"glass-select-none glass-radius-full glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-primary/50\",\n            direction === \"horizontal\"\n              ? compact\n                ? \"glass-w-2 glass-h-full glass-cursor-col-resize\"\n                : \"glass-w-3 glass-h-full glass-cursor-col-resize\"\n              : compact\n                ? \"glass-h-2 glass-w-full glass-cursor-row-resize\"\n                : \"glass-h-3 glass-w-full glass-cursor-row-resize\",\n            \"glass-bg-white/10\",\n            shouldRespectMotion\n              ? \"hover:glass-bg-white/20 glass-transition-colors glass-duration-200\"\n              : \"hover:glass-bg-white/20\",\n            dragging.current && \"glass-bg-white/30\"\n          )}\n        />\n\n        {/* Right/Bottom Pane */}\n        <ContrastGuard\n          as=\"div\"\n          level=\"AA\"\n          className=\"glass-min-w-0 glass-min-h-0 glass-overflow-auto\"\n          role=\"region\"\n          aria-labelledby={rightPaneLabelId}\n        >\n          <span id={rightPaneLabelId} className=\"glass-sr-only\">\n            {direction === \"horizontal\" ? \"Right pane\" : \"Bottom pane\"}\n          </span>\n          {right}\n        </ContrastGuard>\n      </div>\n    );\n  }\n);\n\nGlassSplitPane.displayName = \"GlassSplitPane\";\n\nexport default GlassSplitPane;\n", "'use client';\nimport React from 'react';\n\nimport { useMotionPreferenceContext } from '@/contexts/MotionPreferenceContext';\nimport { forwardRef } from 'react';\nimport { GlassStack, type GlassStackProps } from './GlassStack';\nimport { ContrastGuard } from '@/components/accessibility/ContrastGuard';\n\nexport interface HStackProps extends Omit<GlassStackProps, 'direction'> {\n  /**\n   * Spacing between items (for backward compatibility)\n   */\n  spacing?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n  /** Glass surface intent */\n  intent?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n  \n  /** Glass surface elevation */\n  elevation?: 'level1' | 'level2' | 'level3' | 'level4';\n  \n  /** Performance tier */\n  tier?: 'low' | 'medium' | 'high';\n\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n\n  /**\n   * Accessibility label for screen readers\n   */\n  'aria-label'?: string;\n\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * Horizontal Stack component  \n * Wrapper around GlassStack with direction set to horizontal\n */\nexport const HStack = forwardRef<HTMLDivElement, HStackProps>(\n  ({ spacing, space, respectMotionPreference = true, 'aria-label': ariaLabel, role, ...props }, ref) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion = respectMotionPreference && !prefersReducedMotion;\n    const ariaLabelledBy = (props as React.HTMLAttributes<HTMLDivElement>)[\n      'aria-labelledby'\n    ] as string | undefined;\n    const resolvedRole = role ?? (ariaLabel || ariaLabelledBy ? 'group' : undefined);\n\n    return (\n      <ContrastGuard as=\"div\" level=\"AA\">\n        <GlassStack\n          ref={ref}\n          direction=\"horizontal\"\n          space={spacing || space}\n          respectMotionPreference={shouldRespectMotion}\n          aria-label={ariaLabel}\n          role={resolvedRole}\n          {...props}\n        />\n      </ContrastGuard>\n    );\n  }\n);\n\nHStack.displayName = 'HStack';", "'use client';\nimport React from 'react';\n\nimport { useMotionPreferenceContext } from '@/contexts/MotionPreferenceContext';\nimport { forwardRef } from 'react';\nimport { GlassStack, type GlassStackProps } from './GlassStack';\nimport { ContrastGuard } from '@/components/accessibility/ContrastGuard';\n\nexport interface VStackProps extends Omit<GlassStackProps, 'direction'> {\n  /**\n   * Spacing between items (for backward compatibility)\n   */\n  spacing?: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n  /** Glass surface intent */\n  intent?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n  \n  /** Glass surface elevation */\n  elevation?: 'level1' | 'level2' | 'level3' | 'level4';\n  \n  /** Performance tier */\n  tier?: 'low' | 'medium' | 'high';\n\n  /**\n   * Whether to respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n\n  /**\n   * Accessibility label for screen readers\n   */\n  'aria-label'?: string;\n\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n/**\n * Vertical Stack component\n * Wrapper around GlassStack with direction set to vertical\n */\nexport const VStack = forwardRef<HTMLDivElement, VStackProps>(\n  ({ spacing, space, respectMotionPreference = true, 'aria-label': ariaLabel, role, ...props }, ref) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldRespectMotion = respectMotionPreference && !prefersReducedMotion;\n    const ariaLabelledBy = (props as React.HTMLAttributes<HTMLDivElement>)[\n      'aria-labelledby'\n    ] as string | undefined;\n    const resolvedRole = role ?? (ariaLabel || ariaLabelledBy ? 'group' : undefined);\n\n    return (\n      <ContrastGuard as=\"div\" level=\"AA\">\n        <GlassStack\n          ref={ref}\n          direction=\"vertical\"\n          space={spacing || space}\n          respectMotionPreference={shouldRespectMotion}\n          aria-label={ariaLabel}\n          role={resolvedRole}\n          {...props}\n        />\n      </ContrastGuard>\n    );\n  }\n);\n\nVStack.displayName = 'VStack';", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n// Types\nexport enum OptimizationLevel {\n  NONE = \"none\",\n  LIGHT = \"light\",\n  MODERATE = \"moderate\",\n  HEAVY = \"heavy\",\n  MAXIMUM = \"heavy\",\n  AGGRESSIVE = \"heavy\",\n}\n\nexport interface OptimizedGlassContainerProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  children?: React.ReactNode;\n  initialOptimizationLevel?: \"none\" | \"light\" | \"moderate\" | \"heavy\";\n  autoOptimize?: boolean;\n  performanceThreshold?: number;\n  glassIntensity?: number;\n  targetFps?: number;\n  checkInterval?: number;\n  showIndicator?: boolean;\n  preferReducedMotion?: boolean;\n  preserveBlur?: boolean;\n  onOptimizationChange?: (level: string) => void;\n  maxOptimizationLevel?: \"none\" | \"light\" | \"moderate\" | \"heavy\";\n  /**\n   * Accessibility label for screen readers\n   */\n  \"aria-label\"?: string;\n  /**\n   * Accessibility role for semantic meaning\n   */\n  role?: string;\n}\n\n// Performance monitoring hook\nconst usePerformanceMonitoring = (\n  targetFps: number,\n  checkInterval: number,\n  threshold: number\n) => {\n  const [currentFps, setCurrentFps] = useState(60);\n  const [performanceScore, setPerformanceScore] = useState(1);\n  const frameCountRef = useRef(0);\n  const lastTimeRef = useRef(performance.now());\n\n  useEffect(() => {\n    let animationFrame: number;\n\n    const measureFps = () => {\n      const now = performance.now();\n      frameCountRef.current++;\n\n      if (now - lastTimeRef.current >= checkInterval) {\n        const fps =\n          (frameCountRef.current * 1000) / (now - lastTimeRef.current);\n        setCurrentFps(fps);\n        setPerformanceScore(fps / targetFps);\n\n        frameCountRef.current = 0;\n        lastTimeRef.current = now;\n      }\n\n      animationFrame = requestAnimationFrame(measureFps);\n    };\n\n    animationFrame = requestAnimationFrame(measureFps);\n\n    return () => {\n      if (animationFrame) {\n        cancelAnimationFrame(animationFrame);\n      }\n    };\n  }, [targetFps, checkInterval]);\n\n  return { currentFps, performanceScore };\n};\n\n/**\n * OptimizedGlassContainer Component\n * A container that automatically adjusts glass effects based on performance\n */\nexport const OptimizedGlassContainer = forwardRef<\n  HTMLDivElement,\n  OptimizedGlassContainerProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      children,\n      initialOptimizationLevel = \"none\",\n      autoOptimize = true,\n      performanceThreshold = 0.8,\n      glassIntensity = 0.6,\n      className,\n      style,\n      targetFps = 60,\n      checkInterval = 1000,\n      showIndicator = false,\n      preferReducedMotion,\n      preserveBlur = true,\n      onOptimizationChange,\n      maxOptimizationLevel = \"heavy\",\n      \"aria-label\": ariaLabel = \"Optimized glass container\",\n      role = \"region\",\n      ...props\n    },\n    ref\n  ) => {\n    const [optimizationLevel, setOptimizationLevel] = useState(\n      initialOptimizationLevel\n    );\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = preferReducedMotion ?? prefersReducedMotion;\n    const containerId = useA11yId();\n\n    // Performance monitoring\n    const { currentFps, performanceScore } = usePerformanceMonitoring(\n      targetFps,\n      checkInterval,\n      performanceThreshold\n    );\n\n    // Auto optimization logic\n    useEffect(() => {\n      if (!autoOptimize) return;\n\n      const maxLevelIndex = [\"none\", \"light\", \"moderate\", \"heavy\"].indexOf(\n        maxOptimizationLevel\n      );\n      let newLevel = optimizationLevel;\n\n      if (performanceScore < performanceThreshold) {\n        // Performance is poor, increase optimization\n        const currentIndex = [\"none\", \"light\", \"moderate\", \"heavy\"].indexOf(\n          optimizationLevel\n        );\n        if (currentIndex < maxLevelIndex) {\n          newLevel = [\"none\", \"light\", \"moderate\", \"heavy\"][\n            currentIndex + 1\n          ] as typeof optimizationLevel;\n        }\n      } else if (performanceScore > performanceThreshold + 0.1) {\n        // Performance is good, reduce optimization\n        const currentIndex = [\"none\", \"light\", \"moderate\", \"heavy\"].indexOf(\n          optimizationLevel\n        );\n        if (currentIndex > 0) {\n          newLevel = [\"none\", \"light\", \"moderate\", \"heavy\"][\n            currentIndex - 1\n          ] as typeof optimizationLevel;\n        }\n      }\n\n      if (newLevel !== optimizationLevel) {\n        setOptimizationLevel(newLevel);\n        onOptimizationChange?.(newLevel);\n      }\n    }, [\n      autoOptimize,\n      performanceScore,\n      performanceThreshold,\n      optimizationLevel,\n      maxOptimizationLevel,\n      onOptimizationChange,\n    ]);\n\n    // Map optimization level to glass properties\n    const getGlassProps = () => {\n      const baseIntensity = shouldReduceMotion\n        ? (\"subtle\" as const)\n        : (\"medium\" as const);\n\n      switch (optimizationLevel) {\n        case \"none\":\n          return {\n            intensity: \"ultra\" as const,\n            performanceMode: \"ultra\" as const,\n            animation: shouldReduceMotion\n              ? (\"none\" as const)\n              : (\"float\" as const),\n            depth: 4,\n          };\n        case \"light\":\n          return {\n            intensity: \"strong\" as const,\n            performanceMode: \"high\" as const,\n            animation: shouldReduceMotion\n              ? (\"none\" as const)\n              : (\"gentle\" as const),\n            depth: 3,\n          };\n        case \"moderate\":\n          return {\n            intensity: baseIntensity,\n            performanceMode: \"medium\" as const,\n            animation: \"none\" as const,\n            depth: 2,\n          };\n        case \"heavy\":\n          return {\n            intensity: \"subtle\" as const,\n            performanceMode: \"low\" as const,\n            animation: \"none\" as const,\n            depth: 1,\n          };\n        default:\n          return {\n            intensity: baseIntensity,\n            performanceMode: \"medium\" as const,\n            animation: shouldReduceMotion\n              ? (\"none\" as const)\n              : (\"gentle\" as const),\n            depth: 2,\n          };\n      }\n    };\n\n    const glassProps = getGlassProps();\n\n    // Performance indicator component\n    const PerformanceIndicator = () => {\n      if (!showIndicator) return null;\n\n      const getIndicatorColor = () => {\n        if (performanceScore >= 0.9) return \"text-green-400\";\n        if (performanceScore >= 0.7) return \"text-yellow-400\";\n        return \"text-red-400\";\n      };\n\n      return (\n        <div className=\"glass-absolute glass-top-2 glass-right-2 glass-z-50 glass-surface-dark/50 glass-text-primary glass-p-2 glass-radius-md glass-text-xs glass-font-mono\">\n          <div>\n            FPS:{\" \"}\n            <span className={getIndicatorColor()}>\n              {Math.round(currentFps)}\n            </span>\n          </div>\n          <div>\n            Level:{\" \"}\n            <span className=\"glass-text-primary\">{optimizationLevel}</span>\n          </div>\n          <div>\n            Score:{\" \"}\n            <span className={getIndicatorColor()}>\n              {(performanceScore * 100).toFixed(0)}%\n            </span>\n          </div>\n        </div>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={containerId}\n        intent=\"neutral\"\n        elevation=\"level2\"\n        intensity={glassProps.intensity}\n        depth={glassProps.depth}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation={glassProps.animation}\n        performanceMode={glassProps.performanceMode}\n        role={role}\n        aria-label={ariaLabel}\n        aria-live={showIndicator ? \"polite\" : undefined}\n        aria-atomic={showIndicator ? \"true\" : undefined}\n        className={cn(\n          \"relative\",\n          // Apply different styling based on optimization level\n          {\n            \"glass-backdrop-blur-xl\":\n              optimizationLevel === \"none\" && preserveBlur,\n            \"glass-backdrop-blur-lg\":\n              optimizationLevel === \"light\" && preserveBlur,\n            \"glass-backdrop-blur-md\":\n              optimizationLevel === \"moderate\" && preserveBlur,\n            \"glass-backdrop-blur-sm\":\n              optimizationLevel === \"heavy\" && preserveBlur,\n          },\n          className\n        )}\n        style={{\n          // Adjust opacity based on glass intensity and optimization level\n          \"--glass-opacity\":\n            glassIntensity * (optimizationLevel === \"heavy\" ? 0.5 : 1),\n          ...(style || {}),\n        }}\n        {...props}\n      >\n        <PerformanceIndicator />\n        {children}\n      </OptimizedGlass>\n    );\n  }\n);\n\nOptimizedGlassContainer.displayName = \"OptimizedGlassContainer\";\n\nexport default OptimizedGlassContainer;\n", "\"use client\";\n/**\n * Z-Space App Layout\n * Full application layout with Z-space depth layers for navigation, content, and overlays\n */\n\nimport React, { CSSProperties, forwardRef, ReactNode } from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassContainer } from \"./GlassContainer\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\n/**\n * Z-Space App Layout Props\n */\nexport interface ZSpaceAppLayoutProps {\n  children?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  header?: ReactNode;\n  sidebar?: ReactNode;\n  footer?: ReactNode;\n  overlay?: ReactNode;\n  perspective?: number;\n  headerDepth?: number; // Z position of header\n  sidebarDepth?: number; // Z position of sidebar\n  contentDepth?: number; // Z position of main content\n  footerDepth?: number; // Z position of footer\n  overlayDepth?: number; // Z position of overlay\n  sidebarWidth?: string | number;\n  headerHeight?: string | number;\n  footerHeight?: string | number;\n  sidebarPosition?: \"left\" | \"right\";\n  collapsedSidebar?: boolean;\n  onSidebarToggle?: () => void;\n  positionStrategy?: \"fixed\" | \"absolute\";\n  \"aria-label\"?: string; // Add aria-label to props\n}\n\n/**\n * Z-Space App Layout Component\n */\nexport const ZSpaceAppLayout = forwardRef<HTMLDivElement, ZSpaceAppLayoutProps>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      children,\n      className = \"\",\n      style = {},\n      header,\n      sidebar,\n      footer,\n      overlay,\n      perspective = 1500,\n      headerDepth = 30,\n      sidebarDepth = 20,\n      contentDepth = 0,\n      footerDepth = 10,\n      overlayDepth = 100,\n      sidebarWidth = 280,\n      headerHeight = 64,\n      footerHeight = 60,\n      sidebarPosition = \"left\",\n      collapsedSidebar = false,\n      onSidebarToggle,\n      positionStrategy = \"fixed\",\n      \"aria-label\": ariaLabel, // Destructure aria-label\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n\n    // Convert numeric values to pixels\n    const sidebarWidthPx =\n      typeof sidebarWidth === \"number\" ? `${sidebarWidth}px` : sidebarWidth;\n    const headerHeightPx =\n      typeof headerHeight === \"number\" ? `${headerHeight}px` : headerHeight;\n    const footerHeightPx =\n      typeof footerHeight === \"number\" ? `${footerHeight}px` : footerHeight;\n\n    /**\n     * Container styles\n     */\n    const containerStyles: CSSProperties = {\n      ...style,\n      position: \"relative\",\n      width: \"100%\",\n      height: style.height ?? \"100vh\",\n      perspective: `${perspective}px`,\n      transformStyle: \"preserve-3d\",\n      overflow: \"hidden\",\n    };\n\n    /**\n     * Get layer transform\n     */\n    const getLayerTransform = (depth: number): string => {\n      if (prefersReducedMotion) return \"none\";\n      return `translateZ(${depth}px)`;\n    };\n\n    /**\n     * Header styles\n     */\n    const headerStyles: CSSProperties = {\n      position: positionStrategy,\n      top: 0,\n      left: 0,\n      right: 0,\n      height: headerHeightPx,\n      transform: getLayerTransform(headerDepth),\n      transformStyle: \"preserve-3d\",\n      zIndex: 40,\n    };\n\n    /**\n     * Sidebar styles\n     */\n    const sidebarStyles: CSSProperties = {\n      position: positionStrategy,\n      top: header ? headerHeightPx : 0,\n      [sidebarPosition]: 0,\n      bottom: footer ? footerHeightPx : 0,\n      width: collapsedSidebar ? \"64px\" : sidebarWidthPx,\n      transform: getLayerTransform(sidebarDepth),\n      transformStyle: \"preserve-3d\",\n      transition: prefersReducedMotion\n        ? \"none\"\n        : \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n      zIndex: 30,\n    };\n\n    /**\n     * Main content styles\n     */\n    const mainStyles: CSSProperties = {\n      position: positionStrategy,\n      top: header ? headerHeightPx : 0,\n      bottom: footer ? footerHeightPx : 0,\n      left:\n        sidebar && sidebarPosition === \"left\"\n          ? collapsedSidebar\n            ? \"64px\"\n            : sidebarWidthPx\n          : 0,\n      right:\n        sidebar && sidebarPosition === \"right\"\n          ? collapsedSidebar\n            ? \"64px\"\n            : sidebarWidthPx\n          : 0,\n      transform: getLayerTransform(contentDepth),\n      transformStyle: \"preserve-3d\",\n      overflow: \"auto\",\n      transition: prefersReducedMotion\n        ? \"none\"\n        : \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n      zIndex: 10,\n    };\n\n    /**\n     * Footer styles\n     */\n    const footerStyles: CSSProperties = {\n      position: positionStrategy,\n      bottom: 0,\n      left: 0,\n      right: 0,\n      height: footerHeightPx,\n      transform: getLayerTransform(footerDepth),\n      transformStyle: \"preserve-3d\",\n      zIndex: 20,\n    };\n\n    /**\n     * Overlay styles\n     */\n    const overlayStyles: CSSProperties = {\n      position: positionStrategy,\n      inset: 0,\n      transform: getLayerTransform(overlayDepth),\n      transformStyle: \"preserve-3d\",\n      zIndex: 50,\n      pointerEvents: overlay ? \"auto\" : \"none\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={`zspace-app-layout ${className}`}\n        style={{ ...containerStyles }}\n        aria-label={ariaLabel} // Pass aria-label here\n      >\n        {/* Header */}\n        {header && (\n          <div className=\"zspace-app-layout-header\" style={{ ...headerStyles }}>\n            <GlassContainer style={{ width: \"100%\", height: \"100%\" }}>\n              {header}\n            </GlassContainer>\n          </div>\n        )}\n\n        {/* Sidebar */}\n        {sidebar && (\n          <div\n            className=\"zspace-app-layout-sidebar\"\n            style={{ ...sidebarStyles }}\n          >\n            <GlassContainer style={{ width: \"100%\", height: \"100%\" }}>\n              {sidebar}\n\n              {/* Sidebar toggle button */}\n              {onSidebarToggle && (\n                <button\n                  onClick={onSidebarToggle}\n                  className=\"zspace-sidebar-toggle glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                  style={createGlassStyle({\n                    variant: \"default\",\n                    elev: 2,\n                  })}\n                  aria-label={\n                    collapsedSidebar ? \"Expand sidebar\" : \"Collapse sidebar\"\n                  }\n                >\n                  {collapsedSidebar ? \"\u2192\" : \"\u2190\"}\n                </button>\n              )}\n            </GlassContainer>\n          </div>\n        )}\n\n        {/* Main Content */}\n        <main className=\"zspace-app-layout-main\" style={{ ...mainStyles }}>\n          <GlassContainer style={{ minHeight: \"100%\", padding: \"20px\" }}>\n            {children}\n          </GlassContainer>\n        </main>\n\n        {/* Footer */}\n        {footer && (\n          <div className=\"zspace-app-layout-footer\" style={{ ...footerStyles }}>\n            <GlassContainer style={{ width: \"100%\", height: \"100%\" }}>\n              {footer}\n            </GlassContainer>\n          </div>\n        )}\n\n        {/* Overlay */}\n        {overlay && (\n          <div\n            className=\"zspace-app-layout-overlay\"\n            style={{ ...overlayStyles }}\n          >\n            <GlassContainer style={{ width: \"100%\", height: \"100%\" }}>\n              {overlay}\n            </GlassContainer>\n          </div>\n        )}\n\n        <style>{`\n          .zspace-app-layout {\n            font-family: var(--aura-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);\n          }\n\n          .zspace-sidebar-toggle:hover {\n            background: color-mix(in srgb, var(--glass-theme-accent-primary, rgba(255, 255, 255, 0.2)) 22%, transparent) !important;\n            transform: translateY(-50%) scale(1.05);\n          }\n\n          .zspace-sidebar-toggle:active {\n            transform: translateY(-50%) scale(0.95);\n          }\n\n          .zspace-sidebar-toggle:focus-visible {\n            outline: none;\n            box-shadow: var(\n              --glass-theme-focus-ring,\n              0 0 0 3px rgba(99, 102, 241, 0.3)\n            );\n          }\n\n          @media (prefers-reduced-motion: reduce) {\n            .zspace-app-layout *,\n            .zspace-sidebar-toggle {\n              transform: none !important;\n              transition: none !important;\n            }\n          }\n\n          @media (max-width: 768px) {\n            .zspace-app-layout-sidebar {\n              transform: translateX(${sidebarPosition === \"left\" ? \"-100%\" : \"100%\"}) !important;\n            }\n\n            .zspace-app-layout-sidebar.mobile-open {\n              transform: none !important;\n            }\n\n            .zspace-app-layout-main {\n              left: 0 !important;\n              right: 0 !important;\n            }\n          }\n        `}</style>\n      </div>\n    );\n  }\n);\n\nZSpaceAppLayout.displayName = \"ZSpaceAppLayout\";\n", "/**\n * AuraGlass Style Utilities\n * Generate token-based style objects for glassmorphism components\n */\n\nexport interface GlassStyleOptions {\n  elev?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n  variant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n  blur?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n  radius?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';\n  opacity?: number;\n  interactive?: boolean;\n  glow?: boolean;\n}\n\n/**\n * Token values mapped from CSS variables\n * These should match the values in tokens.css\n */\nconst tokens = {\n  blur: {\n    none: '0px',\n    sm: '4px',\n    md: '8px',\n    lg: '16px',\n    xl: '24px',\n  },\n  elev: {\n    0: 'none',\n    1: '0 2px 8px rgba(0 0 0 / 0.12)',\n    2: '0 4px 16px rgba(0 0 0 / 0.16)',\n    3: '0 8px 24px rgba(0 0 0 / 0.20)',\n    4: '0 12px 32px rgba(0 0 0 / 0.24)',\n    5: '0 16px 40px rgba(0 0 0 / 0.28)',\n    6: '0 24px 56px rgba(0 0 0 / 0.32)',\n  },\n  radius: {\n    none: '0px',\n    sm: '8px',\n    md: '12px',\n    lg: '16px',\n    xl: '20px',\n    '2xl': '24px',\n    full: '9999px',\n  },\n  transition: {\n    duration: '250ms',\n    timing: 'cubic-bezier(0.2, 0, 0, 1)',\n  },\n  gradient: {\n    default: 'linear-gradient(135deg, rgba(255 255 255 / 0.25) 0%, rgba(255 255 255 / 0.15) 50%, rgba(255 255 255 / 0.10) 100%)',\n    primary: 'linear-gradient(135deg, rgba(255 255 255 / 0.30) 0%, rgba(59 130 246 / 0.20) 50%, rgba(59 130 246 / 0.10) 100%)',\n    success: 'linear-gradient(135deg, rgba(255 255 255 / 0.30) 0%, rgba(34 197 94 / 0.20) 50%, rgba(34 197 94 / 0.10) 100%)',\n    warning: 'linear-gradient(135deg, rgba(255 255 255 / 0.30) 0%, rgba(251 191 36 / 0.20) 50%, rgba(251 191 36 / 0.10) 100%)',\n    danger: 'linear-gradient(135deg, rgba(255 255 255 / 0.30) 0%, rgba(239 68 68 / 0.20) 50%, rgba(239 68 68 / 0.10) 100%)',\n    info: 'linear-gradient(135deg, rgba(255 255 255 / 0.30) 0%, rgba(14 165 233 / 0.20) 50%, rgba(14 165 233 / 0.10) 100%)',\n  },\n};\n\n/**\n * Create a style object for glassmorphism components\n * Returns CSSProperties-compatible object\n */\nexport function createGlassStyle(options: GlassStyleOptions = {}): React.CSSProperties {\n  const {\n    elev = 2,\n    variant = 'default',\n    blur = 'lg',\n    radius = 'lg',\n    opacity,\n    interactive = false,\n    glow = false,\n  } = options;\n  \n  const styles: React.CSSProperties = {\n    position: 'relative',\n    overflow: 'hidden',\n    borderRadius: tokens.radius[radius],\n    boxShadow: tokens.elev[elev],\n    background: tokens.gradient[variant],\n  };\n  \n  if (opacity !== undefined) {\n    styles.opacity = opacity;\n  }\n  \n  if (interactive) {\n    styles.transition = `all ${tokens.transition.duration} ${tokens.transition.timing}`;\n    styles.cursor = 'pointer';\n    styles.willChange = 'transform, box-shadow';\n  }\n  \n  if (glow) {\n    styles.filter = 'drop-shadow(0 0 14px rgba(59 130 246 / 0.30))';\n  }\n  \n  return styles;\n}\n\n/**\n * Get CSS variable for a token path\n */\nexport function getGlassToken(path: string): string {\n  return `var(--glass-${path})`;\n}\n\n/**\n * Compose multiple glass styles with proper precedence\n */\nexport function composeGlassStyles(...styles: (React.CSSProperties | undefined)[]): React.CSSProperties {\n  return Object.assign({}, ...styles.filter(Boolean));\n}\n\n/**\n * Generate responsive glass styles\n */\nexport function createResponsiveGlassStyle(\n  base: GlassStyleOptions,\n  breakpoints: {\n    sm?: GlassStyleOptions;\n    md?: GlassStyleOptions;\n    lg?: GlassStyleOptions;\n    xl?: GlassStyleOptions;\n  } = {}\n): Record<string, React.CSSProperties> {\n  const styles: Record<string, React.CSSProperties> = {\n    base: createGlassStyle(base),\n  };\n  \n  // Note: For actual responsive styles, you'd need to use CSS-in-JS\n  // or generate media query strings. This is a simplified version.\n  if (breakpoints.sm) styles.sm = createGlassStyle({ ...base, ...breakpoints.sm });\n  if (breakpoints.md) styles.md = createGlassStyle({ ...base, ...breakpoints.md });\n  if (breakpoints.lg) styles.lg = createGlassStyle({ ...base, ...breakpoints.lg });\n  if (breakpoints.xl) styles.xl = createGlassStyle({ ...base, ...breakpoints.xl });\n  \n  return styles;\n}\n\n/**\n * Calculate appropriate text color based on background luminance\n */\nexport function getGlassTextColor(variant: GlassStyleOptions['variant'] = 'default', isDark = false): string {\n  // In a real implementation, this would calculate actual luminance\n  // For now, return token-based values\n  return isDark ? 'rgba(255 255 255 / 0.95)' : 'rgba(0 0 0 / 0.90)';\n}\n\n/**\n * Generate animation properties for glass elements\n */\nexport function createGlassAnimation(type: 'float' | 'shimmer' | 'ambient' | 'press'): React.CSSProperties {\n  const animations: Record<typeof type, React.CSSProperties> = {\n    float: {\n      animation: 'glass-float 3s ease-in-out infinite',\n    },\n    shimmer: {\n      position: 'relative',\n      overflow: 'hidden',\n    },\n    ambient: {\n      animation: 'glass-ambient 4s ease-in-out infinite',\n    },\n    press: {\n      transition: 'transform 150ms cubic-bezier(0.2, 0, 0, 1)',\n    },\n  };\n  \n  return animations[type] || {};\n}\n\n/**\n * Create elevation-specific shadow values\n */\nexport function getElevationShadow(level: GlassStyleOptions['elev'] = 2): string {\n  return tokens.elev[level || 0];\n}\n\n/**\n * Create border styles with proper token usage\n */\nexport function createGlassBorder(\n  variant: GlassStyleOptions['variant'] = 'default',\n  width = 2\n): React.CSSProperties {\n  const borderColors = {\n    default: 'rgba(255 255 255 / 0.40)',\n    primary: 'rgba(59 130 246 / 0.40)',\n    success: 'rgba(34 197 94 / 0.40)',\n    warning: 'rgba(251 191 36 / 0.40)',\n    danger: 'rgba(239 68 68 / 0.40)',\n    info: 'rgba(14 165 233 / 0.40)',\n  };\n  \n  return {\n    border: `${width}px solid ${borderColors[variant]}`,\n  };\n}", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\nimport { HStack } from \"../layout/GlassStack\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface BottomNavItem {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n  activeIcon?: React.ReactNode;\n  href?: string;\n  onClick?: () => void;\n  badge?: string | number;\n  badgeVariant?:\n    | \"default\"\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"warning\"\n    | \"error\";\n  disabled?: boolean;\n}\n\nexport interface GlassBottomNavProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Navigation items\n   */\n  items: BottomNavItem[];\n  /**\n   * Current active item ID\n   */\n  activeId?: string;\n  /**\n   * Active item change handler\n   */\n  onActiveChange?: (id: string) => void;\n  /**\n   * Bottom nav variant\n   */\n  variant?: \"default\" | \"floating\" | \"minimal\";\n  /**\n   * Glass elevation\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Whether to show labels\n   */\n  showLabels?: boolean;\n  /**\n   * Label position\n   */\n  labelPosition?: \"below\" | \"beside\";\n  /**\n   * Navigation size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether navigation is sticky\n   */\n  sticky?: boolean;\n  /**\n   * Safe area padding for devices with home indicator\n   */\n  safeArea?: boolean;\n  /**\n   * Custom item renderer\n   */\n  renderItem?: (item: BottomNavItem, active: boolean) => React.ReactNode;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n}\n\n/**\n * GlassBottomNav component\n * Mobile bottom navigation with glassmorphism design\n */\nexport const GlassBottomNav = forwardRef<HTMLDivElement, GlassBottomNavProps>(\n  (\n    {\n      items,\n      activeId,\n      onActiveChange,\n      variant = \"default\",\n      elevation = \"level2\",\n      showLabels = true,\n      labelPosition = \"below\",\n      size = \"md\",\n      sticky = true,\n      safeArea = true,\n      renderItem,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const navId = useA11yId(\"bottom-nav\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    const sizeClasses = {\n      sm: {\n        height: \"glass-h-14\",\n        padding: \"glass-px-2 glass-py-2\",\n        iconSize: \"glass-text-base\",\n        labelSize: \"glass-text-xs\",\n      },\n      md: {\n        height: \"glass-h-16\",\n        padding: \"glass-px-4 glass-py-3\",\n        iconSize: \"glass-text-lg\",\n        labelSize: \"glass-text-xs\",\n      },\n      lg: {\n        height: \"glass-h-20\",\n        padding: \"glass-px-6 glass-py-4\",\n        iconSize: \"glass-text-xl\",\n        labelSize: \"glass-text-sm\",\n      },\n    };\n\n    const variantClasses = {\n      default: \"glass-border-t glass-border-glass-border/20\",\n      floating:\n        \"glass-mx-4 glass-mb-4 glass-radius-xl glass-border glass-border-glass-border/20\",\n      minimal: \"glass-border-t glass-border-glass-border/10\",\n    };\n\n    const config = sizeClasses?.[size];\n\n    // Handle item click\n    const handleItemClick = (item: BottomNavItem) => {\n      if (item?.disabled) return;\n\n      onActiveChange?.(item?.id);\n      item?.onClick?.();\n    };\n\n    // Render navigation item\n    const renderNavigationItem = (item: BottomNavItem) => {\n      if (renderItem) {\n        const active = activeId === item?.id;\n        return renderItem(item, active);\n      }\n\n      const active = activeId === item?.id;\n      const iconToShow =\n        active && item?.activeIcon ? item?.activeIcon : item?.icon;\n\n      return (\n        <div key={item?.id} className=\"glass-relative glass-flex-1\">\n          <GlassButton\n            variant={active ? \"primary\" : \"ghost\"}\n            size=\"sm\"\n            disabled={item?.disabled}\n            onClick={(e) => handleItemClick(item)}\n            role=\"tab\"\n            aria-selected={active}\n            aria-controls={`nav-panel-${item.id}`}\n            tabIndex={active ? 0 : -1}\n            className={cn(\n              \"glass-w-full glass-h-full glass-flex glass-flex-col glass-items-center glass-justify-center glass-gap-1 glass-relative\",\n              labelPosition === \"beside\" && \"glass-flex-row glass-gap-2\",\n              !showLabels && \"glass-gap-0\"\n            )}\n            style={{\n              border: 0,\n              background: active ? undefined : \"transparent\",\n              font: \"inherit\",\n              display: \"flex\",\n              flexDirection: labelPosition === \"beside\" ? \"row\" : \"column\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              width: \"100%\",\n              height: \"100%\",\n            }}\n          >\n            {/* Icon */}\n            <div\n              className={cn(\n                \"glass-flex-shrink-0 glass-transition-all glass-duration-200\",\n                config.iconSize,\n                active && !shouldReduceMotion && \"glass-scale-110\"\n              )}\n            >\n              {iconToShow}\n            </div>\n\n            {/* Label */}\n            {showLabels && (\n              <span\n                className={cn(\n                  \"glass-font-medium glass-transition-all glass-duration-200 glass-truncate\",\n                  config.labelSize,\n                  active ? \"glass-text-primary\" : \"glass-text-secondary\"\n                )}\n                style={{ maxWidth: \"100%\" }}\n              >\n                {item?.label}\n              </span>\n            )}\n\n            {/* Active indicator */}\n            {active && !showLabels && (\n              <Motion\n                preset={respectMotionPreference ? \"scaleIn\" : \"none\"}\n                className=\"glass-absolute glass--glass-bottom-0-5 glass--left-1-2 glass--translate-x-1-2 glass-w-1 glass-h-1 glass-surface-primary glass-radius-full\"\n              />\n            )}\n          </GlassButton>\n\n          {/* Badge */}\n          {item?.badge && (\n            <GlassBadge\n              variant={item?.badgeVariant || \"error\"}\n              size=\"xs\"\n              className=\"glass-absolute glass-top-1 glass--right-1 glass-min-w-1-25rem glass-h-5 glass-flex glass-items-center glass-justify-center\"\n            >\n              {item?.badge}\n            </GlassBadge>\n          )}\n        </div>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level2\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n        performanceMode=\"medium\"\n        ref={ref}\n        className={cn(\n          \"glass-w-full glass-flex glass-items-center\",\n          config.height,\n          config.padding,\n          variantClasses?.[variant],\n          sticky && \"glass-sticky glass-bottom-0\",\n          safeArea && \"pb-safe\",\n          className\n        )}\n        style={{\n          display: \"flex\",\n          alignItems: \"center\",\n          width: \"100%\",\n          ...(sticky ? { position: \"sticky\", bottom: 0 } : {}),\n        }}\n        role=\"tablist\"\n        aria-label=\"Bottom navigation\"\n        id={navId}\n        {...props}\n      >\n        <HStack space=\"none\" className=\"glass-w-full\">\n          {items.map((item: any) => renderNavigationItem(item))}\n        </HStack>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassBottomNav.displayName = \"GlassBottomNav\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  useImperativeHandle,\n} from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport {\n  OptimizedGlass,\n  Slot,\n  type OptimizedGlassProps,\n} from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButtonVariantType } from \"./types\";\nimport {\n  createButtonA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ntype ButtonDomProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\ntype ButtonSize = NonNullable<GlassButtonProps[\"size\"]>;\ntype ButtonVariantVisualConfig = {\n  className: string;\n  glassVariant:\n    | OptimizedGlassProps[\"variant\"]\n    | \"liquid\"\n    | \"ethereal\"\n    | \"holographic\";\n  tint: string;\n  intensity: NonNullable<OptimizedGlassProps[\"intensity\"]>;\n  border: NonNullable<OptimizedGlassProps[\"border\"]>;\n  lighting?: OptimizedGlassProps[\"lighting\"];\n  caustics?: boolean;\n  chromatic?: boolean;\n  parallax?: boolean;\n  refraction?: boolean;\n  adaptive?: boolean;\n};\ntype LiquidGlassButtonSurfaceProps = ButtonDomProps & {\n  as?: React.ElementType;\n  ior?: number;\n  thickness?: number;\n  tint?: { r: number; g: number; b: number; a: number };\n  variant?: \"regular\" | \"clear\";\n  quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  environmentAdaptation?: boolean;\n  motionResponsive?: boolean;\n  interactive?: boolean;\n  style?: React.CSSProperties;\n  \"data-liquid-glass-button\"?: string;\n  \"data-button-variant\"?: string;\n  \"data-button-size\"?: ButtonSize;\n};\n\nconst LiquidGlassButtonSurface =\n  LiquidGlassMaterial as unknown as React.ForwardRefExoticComponent<\n    LiquidGlassButtonSurfaceProps & React.RefAttributes<HTMLButtonElement>\n  >;\n\nconst toOptimizedGlassVariant = (\n  value: ButtonVariantVisualConfig[\"glassVariant\"]\n): OptimizedGlassProps[\"variant\"] => {\n  if (value === \"liquid\" || value === \"ethereal\" || value === \"holographic\") {\n    return \"dynamic\";\n  }\n\n  return value;\n};\n\nexport interface GlassButtonProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\n    ConsciousnessFeatures {\n  /**\n   * Button variant\n   */\n  variant?: GlassButtonVariantType;\n  /**\n   * Button size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Glass elevation\n   */\n  elevation?: OptimizedGlassProps[\"elevation\"];\n  /**\n   * Glass variant for advanced effects\n   */\n  glassVariant?: \"frosted\" | \"dynamic\" | \"clear\" | \"tinted\" | \"luminous\";\n  /**\n   * Glass intensity\n   */\n  intensity?: OptimizedGlassProps[\"intensity\"];\n  /**\n   * Glass depth layers\n   */\n  depth?: OptimizedGlassProps[\"depth\"];\n  /**\n   * Glass tint color\n   */\n  tint?: OptimizedGlassProps[\"tint\"];\n  /**\n   * Glass border style\n   */\n  border?: \"subtle\" | \"glow\" | \"neon\" | \"none\";\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Icon only button\n   */\n  iconOnly?: boolean;\n  /**\n   * Full width button\n   */\n  fullWidth?: boolean;\n  /**\n   * Animation preset\n   */\n  animation?: \"none\" | \"scale\" | \"bounce\" | \"pulse\";\n  /**\n   * Left icon\n   */\n  leftIcon?: React.ReactNode;\n  /**\n   * Right icon\n   */\n  rightIcon?: React.ReactNode;\n  /**\n   * Loading spinner\n   */\n  loadingSpinner?: React.ReactNode;\n  /**\n   * Loading text to display\n   */\n  loadingText?: string;\n  /**\n   * Render the button as its child element (Slot pattern)\n   */\n  asChild?: boolean;\n  /**\n   * Flat style override for ghost/link \u2014 removes bg/border/shadow/rings\n   */\n  flat?: boolean;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n\n  // Accessibility props\n  /**\n   * Accessible label for the button (required for iconOnly buttons)\n   */\n  \"aria-label\"?: string;\n  /**\n   * ID of element that labels the button\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element(s) that describe the button\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Whether button is pressed/active (for toggle buttons)\n   */\n  \"aria-pressed\"?: boolean;\n  /**\n   * Whether button controls expanded content\n   */\n  \"aria-expanded\"?: boolean;\n  /**\n   * ID of element controlled by this button\n   */\n  \"aria-controls\"?: string;\n  /**\n   * Whether button has popup menu or dialog\n   */\n  \"aria-haspopup\"?:\n    | boolean\n    | \"false\"\n    | \"true\"\n    | \"menu\"\n    | \"listbox\"\n    | \"tree\"\n    | \"grid\"\n    | \"dialog\";\n  /**\n   * Description text for complex buttons (automatically creates describedby)\n   */\n  description?: string;\n}\n\n/**\n * GlassButton component\n * A glassmorphism button with multiple variants and animations\n */\nexport const GlassButton = forwardRef(function GlassButton(\n  {\n    variant = \"default\",\n    size = \"md\",\n    elevation = \"level2\",\n    glassVariant = \"frosted\",\n    intensity = \"medium\",\n    depth = 2,\n    tint = \"neutral\",\n    border = \"subtle\",\n    loading = false,\n    iconOnly = false,\n    fullWidth = false,\n    animation = \"none\",\n    leftIcon,\n    rightIcon,\n    loadingSpinner,\n    loadingText = \"Loading...\",\n    className,\n    children,\n    disabled,\n    asChild = false,\n    flat = false,\n    material = \"glass\",\n    materialProps,\n    description,\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": ariaLabelledBy,\n    \"aria-describedby\": ariaDescribedBy,\n    \"aria-pressed\": ariaPressed,\n    \"aria-expanded\": ariaExpanded,\n    \"aria-controls\": ariaControls,\n    \"aria-haspopup\": ariaHaspopup,\n    // Consciousness features\n    predictive = false,\n    preloadContent = false,\n    eyeTracking = false,\n    gazeResponsive = false,\n    adaptive = false,\n    biometricResponsive = false,\n    spatialAudio = false,\n    audioFeedback = false,\n    trackAchievements = false,\n    achievementId,\n    usageContext = \"main\",\n    ...props\n  }: GlassButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  const prefersReducedMotion = useReducedMotion();\n  const buttonRef = useRef<HTMLButtonElement>(null);\n  const [clickCount, setClickCount] = useState(0);\n  const [isHovered, setIsHovered] = useState(false);\n  const [adaptiveSize, setAdaptiveSize] = useState(size);\n  const [predictedAction, setPredictedAction] = useState<string | null>(null);\n\n  // Consciousness feature hooks - only initialize if features are enabled\n  const predictiveEngine = predictive ? usePredictiveEngine() : null;\n  const eyeTracker = eyeTracking ? useEyeTracking() : null;\n  const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n  const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n  const achievementTracker = trackAchievements ? useAchievements() : null;\n  const interactionRecorder =\n    predictive || trackAchievements\n      ? useInteractionRecorder(`glass-button-${variant}-${usageContext}`)\n      : null;\n  // Generate unique ID for accessibility\n  const componentId = useA11yId(\"glass-button\");\n  const descriptionId = description\n    ? useA11yId(\"glass-button-desc\")\n    : undefined;\n\n  // Handle ref forwarding\n  useImperativeHandle(ref, () => buttonRef.current as HTMLButtonElement);\n\n  // Utility: filter out non-DOM props before spreading on elements\n  const filterDomProps = useCallback(\n    (p: Partial<GlassButtonProps>): ButtonDomProps => {\n      const {\n        variant: _variant,\n        size: _size,\n        elevation: _elevation,\n        glassVariant: _glassVariant,\n        intensity: _intensity,\n        depth: _depth,\n        tint: _tint,\n        border: _border,\n        loading: _loading,\n        iconOnly: _iconOnly,\n        fullWidth: _fullWidth,\n        loadingText: _lt,\n        asChild: _ac,\n        leftIcon: _li,\n        rightIcon: _ri,\n        loadingSpinner: _ls,\n        animation: _an,\n        flat: _fl,\n        material: _material,\n        materialProps: _materialProps,\n        intent: _intent,\n        tier: _tier,\n        description: _desc,\n        // Master flag\n        consciousness: _cons,\n        // Consciousness-related props\n        predictive: _pred,\n        preloadContent: _prel,\n        eyeTracking: _eye,\n        gazeResponsive: _gaze,\n        adaptive: _ad,\n        biometricResponsive: _bio,\n        spatialAudio: _sa,\n        audioFeedback: _af,\n        trackAchievements: _ta,\n        achievementId: _aid,\n        usageContext: _uctx,\n        onClick: _oc,\n        ...valid\n      } = p;\n      return valid;\n    },\n    []\n  );\n\n  // Biometric adaptation effects\n  useEffect(() => {\n    if (!biometricResponsive || !biometricAdapter) return;\n\n    const adaptButton = () => {\n      const stressLevel = biometricAdapter.currentStressLevel;\n      // For now, assume desktop capabilities\n      const deviceCapabilities = { isMobile: false, isDesktop: true };\n\n      // Adapt button size based on device and stress\n      if (deviceCapabilities.isMobile && stressLevel > 0.7) {\n        setAdaptiveSize(\"lg\"); // Larger touch targets when stressed on mobile\n      } else if (stressLevel < 0.3 && deviceCapabilities.isDesktop) {\n        setAdaptiveSize(\"sm\"); // Smaller size when relaxed on desktop\n      } else {\n        setAdaptiveSize(size); // Use original size\n      }\n    };\n\n    // Initial adaptation\n    adaptButton();\n\n    // Listen for biometric changes\n    const interval = setInterval(adaptButton, ANIMATION.DURATION.slower * 4);\n    return () => clearInterval(interval);\n  }, [biometricResponsive, biometricAdapter, size]);\n\n  // Eye tracking region registration\n  useEffect(() => {\n    if (!gazeResponsive || !eyeTracker || !buttonRef.current) return;\n\n    const engine = eyeTracker.engine;\n    if (!engine) return;\n\n    const element = buttonRef.current;\n    const registerRegion = () => {\n      const rect = element.getBoundingClientRect();\n      engine.registerRegion({\n        id: componentId,\n        x: rect.left,\n        y: rect.top,\n        width: rect.width,\n        height: rect.height,\n        element,\n      });\n    };\n\n    registerRegion();\n    window.addEventListener(\"resize\", registerRegion);\n    window.addEventListener(\"scroll\", registerRegion, true);\n\n    return () => {\n      window.removeEventListener(\"resize\", registerRegion);\n      window.removeEventListener(\"scroll\", registerRegion, true);\n      engine.unregisterRegion(componentId);\n    };\n  }, [gazeResponsive, eyeTracker, componentId]);\n\n  // Eye tracking effects\n  useEffect(() => {\n    if (!gazeResponsive || !eyeTracker || !buttonRef.current) return;\n\n    const isGazed = eyeTracker.activeInteractions.some(\n      (interaction: any) => interaction.region.id === componentId\n    );\n\n    const handleGazeEnter = () => {\n      if (!disabled && !loading) {\n        setIsHovered(true);\n\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"button_gaze_enter\", {\n            x: buttonRef.current?.offsetLeft || 0,\n            y: buttonRef.current?.offsetTop || 0,\n            z: 0, // Default to center depth\n          });\n        }\n\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\"button_gaze_attention\", {\n            variant,\n            context: usageContext,\n            buttonText: typeof children === \"string\" ? children : \"button\",\n          });\n        }\n      }\n    };\n\n    const handleGazeExit = () => {\n      setIsHovered(false);\n\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"button_gaze_exit\");\n      }\n    };\n\n    if (isGazed) {\n      handleGazeEnter();\n    } else if (isHovered) {\n      handleGazeExit();\n    }\n  }, [\n    gazeResponsive,\n    eyeTracker,\n    eyeTracker?.activeInteractions,\n    componentId,\n    disabled,\n    loading,\n    spatialAudioEngine,\n    audioFeedback,\n    achievementTracker,\n    trackAchievements,\n    variant,\n    usageContext,\n    children,\n    isHovered,\n  ]);\n\n  // Predictive action detection\n  useEffect(() => {\n    if (!predictive || !predictiveEngine) return;\n\n    // Check for predicted actions related to this button\n    const predictions = predictiveEngine.predictions;\n    const buttonPrediction = predictions.find(\n      (p) =>\n        p.metadata?.buttonVariant === variant ||\n        p.metadata?.buttonContext === usageContext\n    );\n\n    if (buttonPrediction && buttonPrediction.confidence > 0.7) {\n      setPredictedAction(buttonPrediction.type);\n\n      // Preload action hook intentionally left to consumers.\n    } else {\n      setPredictedAction(null);\n    }\n  }, [predictive, predictiveEngine, variant, usageContext, preloadContent]);\n\n  // Enhanced interaction tracking\n  const handleInteraction = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (disabled || loading) return;\n\n      setClickCount((prev: number) => prev + 1);\n\n      // Record interaction for predictive learning\n      if (interactionRecorder) {\n        interactionRecorder.recordClick(event);\n      }\n\n      // Play spatial audio feedback\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"button_click_success\", {\n          x: buttonRef.current?.offsetLeft || 0,\n          y: buttonRef.current?.offsetTop || 0,\n          z: 0, // Default to center depth\n        });\n      }\n\n      // Track achievements\n      if (achievementTracker && trackAchievements) {\n        achievementTracker.recordAction(achievementId || \"button_interaction\", {\n          variant,\n          context: usageContext,\n          clickCount,\n          buttonText: typeof children === \"string\" ? children : \"button\",\n          timestamp: Date.now(),\n        });\n\n        // Special achievements for frequent use\n        if (clickCount > 0 && clickCount % 10 === 0) {\n          achievementTracker.recordAction(\"button_power_user\", {\n            variant,\n            totalClicks: clickCount,\n          });\n        }\n      }\n\n      // Call original onClick handler\n      props.onClick?.(event);\n    },\n    [\n      disabled,\n      loading,\n      interactionRecorder,\n      spatialAudioEngine,\n      audioFeedback,\n      achievementTracker,\n      trackAchievements,\n      achievementId,\n      variant,\n      usageContext,\n      clickCount,\n      children,\n      props.onClick,\n    ]\n  );\n\n  // Ensure icon-only controls default to a non-frosted appearance\n  const resolvedVariant =\n    iconOnly && (variant === \"default\" || !variant)\n      ? (\"ghost\" as GlassButtonVariantType)\n      : variant;\n\n  // Validate accessibility requirements\n  React.useEffect(() => {\n    if (iconOnly && !ariaLabel && !ariaLabelledBy && !children) {\n      return;\n    }\n  }, [iconOnly, ariaLabel, ariaLabelledBy, children]);\n\n  // Create accessibility attributes\n  const a11yProps = createButtonA11y({\n    id: componentId,\n    label: ariaLabel,\n    description,\n    pressed: ariaPressed,\n    expanded: ariaExpanded,\n    controls: ariaControls,\n    haspopup:\n      ariaHaspopup === \"true\"\n        ? true\n        : ariaHaspopup === \"false\"\n          ? false\n          : ariaHaspopup,\n    disabled: disabled || loading,\n    descriptionId,\n  });\n\n  // Announce loading state changes to screen readers\n  React.useEffect(() => {\n    if (loading) {\n      announceToScreenReader(loadingText, \"polite\");\n    }\n  }, [loading, loadingText]);\n\n  // Use adaptive size if biometric adaptation is enabled, otherwise use original size\n  const effectiveSize = biometricResponsive ? adaptiveSize : size;\n\n  const sizeClasses = {\n    xs: iconOnly ? \"h-6 w-6 p-0\" : \"h-6 px-2 text-xs\",\n    sm: iconOnly ? \"h-8 w-8 p-0\" : \"h-8 px-3 text-sm\",\n    md: iconOnly ? \"h-10 w-10 p-0\" : \"h-10 px-4 text-sm\",\n    lg: iconOnly ? \"h-12 w-12 p-0\" : \"h-12 px-6 text-base\",\n    xl: iconOnly ? \"glass-h-14 w-14 p-0\" : \"glass-h-14 px-8 text-lg\",\n  };\n\n  const baseClasses = cn(\n    // Base styles\n    \"inline-flex items-center justify-center\",\n    \"font-medium\",\n    `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n    // Unified focus ring utility\n    \"glass-focus\",\n    \"disabled:pointer-events-none disabled:opacity-50\",\n    \"relative overflow-hidden\",\n    // Specular overlay + parallax support\n    // Avoid specular overlay on icon-only and aurora buttons. Aurora already\n    // owns its internal light layer; the generic specular pass reads as a\n    // dirty gray backing/rim on marketing CTAs.\n    !iconOnly &&\n      resolvedVariant !== \"aurora\" &&\n      \"glass-overlay-specular glass-parallax\",\n    // Size - use effective size with biometric adaptation\n    sizeClasses?.[effectiveSize],\n    // Full width\n    {\n      \"w-full\": fullWidth,\n    },\n    // Consciousness feature styles\n    {\n      \"glass-focus-strong glass-surface-primary\":\n        gazeResponsive &&\n        isHovered /* || (eyeTracker?.isGazing && !disabled) */,\n      \"animate-pulse\": predictedAction === \"suggest\" && !disabled,\n      \"glass-focus glass-surface-success\":\n        predictedAction === \"preload\" && !disabled,\n      \"transform-gpu\": biometricResponsive || gazeResponsive,\n      \"scale-105\": gazeResponsive && isHovered && !disabled,\n    }\n  );\n\n  const variantStyles: Record<\n    GlassButtonVariantType,\n    ButtonVariantVisualConfig\n  > = {\n    default: {\n      glassVariant: \"frosted\" as const,\n      tint: \"neutral\" as const,\n      intensity: \"medium\" as const,\n      border: \"subtle\" as const,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    primary: {\n      glassVariant: \"liquid\" as const,\n      tint: \"blue\" as const,\n      intensity: \"strong\" as const,\n      border: \"glow\" as const,\n      lighting: \"volumetric\" as const,\n      caustics: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    secondary: {\n      glassVariant: \"crystal\" as const,\n      tint: \"purple\" as const,\n      intensity: \"strong\" as const,\n      border: \"glow\" as const,\n      lighting: \"directional\" as const,\n      refraction: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    tertiary: {\n      glassVariant: \"frosted\" as const,\n      tint: \"gray\" as const,\n      intensity: \"medium\" as const,\n      border: \"subtle\" as const,\n      lighting: \"ambient\" as const,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    destructive: {\n      glassVariant: \"frosted\" as const,\n      tint: \"red\" as const,\n      intensity: \"extreme\" as const,\n      border: \"neon\" as const,\n      lighting: \"directional\" as const,\n      chromatic: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    error: {\n      glassVariant: \"frosted\" as const,\n      tint: \"red\" as const,\n      intensity: \"extreme\" as const,\n      border: \"neon\" as const,\n      lighting: \"directional\" as const,\n      chromatic: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    success: {\n      glassVariant: \"frosted\" as const,\n      tint: \"green\" as const,\n      intensity: \"strong\" as const,\n      border: \"glow\" as const,\n      lighting: \"directional\" as const,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    warning: {\n      glassVariant: \"frosted\" as const,\n      tint: \"orange\" as const,\n      intensity: \"strong\" as const,\n      border: \"glow\" as const,\n      lighting: \"directional\" as const,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    outline: {\n      glassVariant: \"ethereal\" as const,\n      tint: \"neutral\" as const,\n      intensity: \"medium\" as const,\n      border: \"glow\" as const,\n      lighting: \"ambient\" as const,\n      adaptive: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    ghost: {\n      glassVariant: \"ethereal\" as const,\n      tint: \"neutral\" as const,\n      intensity: \"subtle\" as const,\n      border: \"none\" as const,\n      lighting: \"ambient\" as const,\n      adaptive: true,\n      className: \"glass-text-secondary hover:glass-text-primary glass-elev-0\",\n    },\n    link: {\n      glassVariant: \"ethereal\" as const,\n      tint: \"blue\" as const,\n      intensity: \"subtle\" as const,\n      border: \"none\" as const,\n      className:\n        \"glass-text-link hover:glass-text-link-hover underline-offset-4 hover:underline\",\n    },\n    gradient: {\n      glassVariant: \"holographic\" as const,\n      tint: \"rainbow\" as const,\n      intensity: \"ultra\" as const,\n      border: \"dynamic\" as const,\n      lighting: \"iridescent\" as const,\n      chromatic: true,\n      parallax: true,\n      className: \"glass-text-primary hover:glass-text-secondary\",\n    },\n    aurora: {\n      glassVariant: \"holographic\" as const,\n      tint: \"aurora\" as const,\n      intensity: \"ultra\" as const,\n      border: \"none\" as const,\n      lighting: \"iridescent\" as const,\n      chromatic: true,\n      parallax: true,\n      className: \"glass-button-aurora glass-text-primary\",\n    },\n  } satisfies Record<GlassButtonVariantType, ButtonVariantVisualConfig>;\n\n  const variantConfig = variantStyles?.[resolvedVariant];\n  const optimizedGlassVariant =\n    glassVariant || toOptimizedGlassVariant(variantConfig.glassVariant);\n  const liquidButtonStyle = {\n    \"--liquid-glass-button-pressure\": isHovered ? \"0.02\" : \"0.0\",\n    \"--liquid-glass-hover-refraction\": \"1.2\",\n    \"--liquid-glass-press-density\": \"0.95\",\n  } as React.CSSProperties;\n\n  // Map variant to accent focus ring utility\n  const variantAccent =\n    resolvedVariant === \"destructive\" || resolvedVariant === \"error\"\n      ? \"glass-accent-danger\"\n      : resolvedVariant === \"success\"\n        ? \"glass-accent-success\"\n        : resolvedVariant === \"warning\"\n          ? \"glass-accent-warning\"\n          : resolvedVariant === \"secondary\"\n            ? \"glass-accent-info\"\n            : \"glass-accent-primary\";\n\n  const getAnimationPreset = () => {\n    switch (animation) {\n      case \"scale\":\n        return \"scaleIn\";\n      case \"bounce\":\n        return \"bounceIn\";\n      case \"pulse\":\n        return \"pulseIn\";\n      default:\n        return \"none\";\n    }\n  };\n\n  const renderContent = () => {\n    if (loading) {\n      return (\n        <>\n          {loadingSpinner || (\n            <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-current glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n          )}\n          {!iconOnly && <span className=\"glass-ml-2\">{loadingText}</span>}\n        </>\n      );\n    }\n\n    if (iconOnly) {\n      return leftIcon || rightIcon || children;\n    }\n\n    return (\n      <>\n        {leftIcon && (\n          <span className=\"glass-mr-2\" data-icon data-testid=\"left-icon\">\n            {leftIcon}\n          </span>\n        )}\n        {children}\n        {rightIcon && (\n          <span className=\"glass-ml-2\" data-icon data-testid=\"right-icon\">\n            {rightIcon}\n          </span>\n        )}\n      </>\n    );\n  };\n\n  const renderMotionFrame = (content: React.ReactNode) => {\n    if (animation === \"none\") {\n      return (\n        <div data-glass-component className=\"glass-inline-glass-block\">\n          {content}\n        </div>\n      );\n    }\n\n    return (\n      <Motion\n        data-glass-component\n        preset={getAnimationPreset()}\n        animateOnHover\n        className=\"glass-inline-glass-block\"\n      >\n        {content}\n      </Motion>\n    );\n  };\n\n  if (resolvedVariant === \"ghost\" || resolvedVariant === \"link\") {\n    const Comp = (asChild\n      ? Slot\n      : \"button\") as unknown as React.ForwardRefExoticComponent<\n      ButtonDomProps & React.RefAttributes<HTMLButtonElement>\n    >;\n    return renderMotionFrame(\n      <Comp\n        className={cn(\n          baseClasses,\n          variantAccent,\n          variantConfig.className,\n          \"glass-radius-md glass-magnet glass-ripple glass-press\",\n          flat &&\n            \"bg-transparent border-0 shadow-none ring-0 focus-visible:ring-0 focus-visible:ring-offset-0\",\n          className\n        )}\n        data-button-variant={resolvedVariant}\n        data-button-size={size}\n        disabled={disabled || loading}\n        onClick={handleInteraction}\n        ref={buttonRef}\n        {...a11yProps}\n        {...filterDomProps(props)}\n      >\n        {renderContent()}\n        {description && (\n          <span\n            id={descriptionId}\n            className=\"glass-sr-only glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            {description}\n          </span>\n        )}\n      </Comp>\n    );\n  }\n\n  return renderMotionFrame(\n    material === \"liquid\" ? (\n      /* eslint-disable auraglass/no-inline-style-attr -- Liquid button interaction tests assert these CSS custom properties. */\n      <LiquidGlassButtonSurface\n        as={asChild ? (Slot as React.ElementType) : \"button\"}\n        ior={materialProps?.ior || (variant === \"primary\" ? 1.48 : 1.44)}\n        thickness={\n          materialProps?.thickness ||\n          (size === \"xs\" ? 4 : size === \"sm\" ? 6 : size === \"md\" ? 8 : 10)\n        }\n        tint={\n          materialProps?.tint ||\n          (variant === \"primary\"\n            ? { r: 59, g: 130, b: 246, a: 0.1 }\n            : { r: 0, g: 0, b: 0, a: 0.05 })\n        }\n        variant={materialProps?.variant || \"regular\"}\n        quality={materialProps?.quality || \"high\"}\n        environmentAdaptation\n        motionResponsive\n        interactive\n        className={cn(\n          baseClasses,\n          variantAccent,\n          variantConfig.className,\n          \"liquid-glass-button-surface glass-ripple glass-magnet\",\n          className\n        )}\n        style={liquidButtonStyle}\n        data-liquid-glass-button=\"true\"\n        data-button-variant={variant}\n        data-button-size={size}\n        disabled={disabled || loading}\n        onClick={handleInteraction}\n        onMouseEnter={() => setIsHovered(true)}\n        onMouseLeave={() => setIsHovered(false)}\n        ref={buttonRef}\n        {...a11yProps}\n        {...filterDomProps(props)}\n      >\n        {asChild ? (\n          // When rendering asChild (Slot), Slot expects exactly one child element.\n          // Defer content to the passed child to avoid React.Children.only errors.\n          children\n        ) : (\n          <>\n            {(resolvedVariant === \"gradient\" ||\n              resolvedVariant === \"aurora\") && (\n              <div\n                className={cn(\n                  \"glass-absolute glass-inset-0 glass-radius-md glass-pointer-events-none\",\n                  resolvedVariant === \"aurora\"\n                    ? \"glass-button-aurora-layer\"\n                    : \"glass-gradient-primary glass-gradient-primary glass-via-secondary-opacity-20 glass-gradient-primary\"\n                )}\n              />\n            )}\n            <span className=\"glass-relative glass-z-10\">{renderContent()}</span>\n            {description && (\n              <span id={descriptionId} className=\"glass-sr-only\">\n                {description}\n              </span>\n            )}\n          </>\n        )}\n      </LiquidGlassButtonSurface>\n    ) : (\n      /* eslint-enable auraglass/no-inline-style-attr */\n      <OptimizedGlass\n        as={asChild ? (Slot as React.ElementType) : \"button\"}\n        variant={optimizedGlassVariant}\n        elevation={elevation}\n        intensity={intensity || variantConfig.intensity}\n        depth={depth}\n        tint={tint || variantConfig.tint}\n        border={border || variantConfig.border || \"subtle\"}\n        animation={\n          animation === \"none\"\n            ? \"none\"\n            : animation === \"scale\"\n              ? \"float\"\n              : animation === \"bounce\"\n                ? \"pulse\"\n                : \"shimmer\"\n        }\n        lighting={variantConfig.lighting || \"ambient\"}\n        caustics={variantConfig.caustics || false}\n        chromatic={variantConfig.chromatic || false}\n        parallax={variantConfig.parallax || false}\n        refraction={variantConfig.refraction || false}\n        adaptive={variantConfig.adaptive || false}\n        interactive\n        hoverSheen={resolvedVariant !== \"aurora\"}\n        liftOnHover\n        press\n        magnet\n        cursorHighlight={false}\n        performanceMode=\"ultra\"\n        className={cn(\n          baseClasses,\n          variantAccent,\n          variantConfig.className,\n          \"glass-radius-md glass-ripple glass-magnet\",\n          className\n        )}\n        data-button-variant={resolvedVariant}\n        data-button-size={size}\n        disabled={disabled || loading}\n        onClick={handleInteraction}\n        ref={buttonRef}\n        {...a11yProps}\n        {...filterDomProps(props)}\n      >\n        {asChild ? (\n          // When rendering asChild (Slot), Slot expects exactly one child element.\n          // Defer content to the passed child to avoid React.Children.only errors.\n          children\n        ) : (\n          <>\n            {(resolvedVariant === \"gradient\" ||\n              resolvedVariant === \"aurora\") && (\n              <div\n                className={cn(\n                  \"glass-absolute glass-inset-0 glass-radius-md glass-pointer-events-none\",\n                  resolvedVariant === \"aurora\"\n                    ? \"glass-button-aurora-layer\"\n                    : \"glass-gradient-primary glass-gradient-primary glass-via-secondary-opacity-20 glass-gradient-primary\"\n                )}\n              />\n            )}\n            <span className=\"glass-relative glass-z-10\">{renderContent()}</span>\n            {description && (\n              <span id={descriptionId} className=\"glass-sr-only\">\n                {description}\n              </span>\n            )}\n          </>\n        )}\n      </OptimizedGlass>\n    )\n  );\n});\n\nGlassButton.displayName = \"GlassButton\";\n\n/**\n * Icon Button component\n */\nexport interface IconButtonProps\n  extends Omit<GlassButtonProps, \"iconOnly\" | \"leftIcon\" | \"rightIcon\"> {\n  /**\n   * Icon to display\n   */\n  icon: React.ReactNode;\n  /**\n   * Accessible label\n   */\n  \"aria-label\": string;\n}\n\nexport const IconButton = forwardRef(function IconButton(\n  {\n    icon,\n    variant = \"ghost\",\n    flat = true,\n    size = \"sm\",\n    ...props\n  }: IconButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  return (\n    <GlassButton\n      ref={ref}\n      iconOnly\n      variant={variant}\n      flat={flat}\n      size={size}\n      {...props}\n    >\n      {icon}\n    </GlassButton>\n  );\n});\n\nIconButton.displayName = \"IconButton\";\n\n/**\n * Button Group component\n */\nexport interface ButtonGroupProps {\n  children: React.ReactNode;\n  /**\n   * Group orientation\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Group size\n   */\n  size?: GlassButtonProps[\"size\"];\n  /**\n   * Group variant\n   */\n  variant?: GlassButtonProps[\"variant\"];\n  /**\n   * Whether buttons are connected\n   */\n  connected?: boolean;\n  className?: string;\n}\n\nexport function ButtonGroup({\n  children,\n  orientation = \"horizontal\",\n  size,\n  variant,\n  connected = true,\n  className,\n}: ButtonGroupProps) {\n  const groupClasses = cn(\n    \"inline-flex\",\n    {\n      \"flex-row\": orientation === \"horizontal\",\n      \"flex-col\": orientation === \"vertical\",\n    },\n    className\n  );\n\n  const enhancedChildren = React.Children.map(children, (child, index) => {\n    if (!React.isValidElement<Partial<GlassButtonProps>>(child)) return child;\n\n    const isFirst = index === 0;\n    const isLast = index === React.Children.count(children) - 1;\n\n    const additionalProps: Partial<\n      Pick<GlassButtonProps, \"size\" | \"variant\" | \"className\">\n    > = {};\n\n    if (size) additionalProps.size = size;\n    if (variant) additionalProps.variant = variant;\n\n    if (connected) {\n      if (orientation === \"horizontal\") {\n        additionalProps.className = cn(child.props.className, {\n          \"rounded-r-none border-r-0\": !isLast,\n          \"rounded-l-none\": !isFirst,\n        });\n      } else {\n        additionalProps.className = cn(child.props.className, {\n          \"rounded-b-none border-b-0\": !isLast,\n          \"rounded-t-none\": !isFirst,\n        });\n      }\n    } else {\n      additionalProps.className = cn(\n        child.props.className,\n        orientation === \"horizontal\"\n          ? \"glass-mr-2 last:mr-0\"\n          : \"glass-mb-2 last:glass-mb-0\"\n      );\n    }\n\n    return React.cloneElement(child, additionalProps);\n  });\n\n  return <div className={groupClasses}>{enhancedChildren}</div>;\n}\n\n/**\n * Toggle Button component\n */\nexport interface ToggleButtonProps extends Omit<GlassButtonProps, \"variant\"> {\n  /**\n   * Whether the button is pressed/active\n   */\n  pressed?: boolean;\n  /**\n   * Callback when pressed state changes\n   */\n  onPressedChange?: (pressed: boolean) => void;\n  /**\n   * Pressed variant\n   */\n  pressedVariant?: GlassButtonProps[\"variant\"];\n  /**\n   * Unpressed variant\n   */\n  unpressedVariant?: GlassButtonProps[\"variant\"];\n}\n\nexport const ToggleButton = forwardRef(function ToggleButton(\n  {\n    pressed = false,\n    onPressedChange,\n    pressedVariant = \"primary\",\n    unpressedVariant = \"outline\",\n    onClick,\n    ...props\n  }: ToggleButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    onPressedChange?.(!pressed);\n    onClick?.(event);\n  };\n\n  return (\n    <GlassButton\n      ref={ref}\n      variant={pressed ? pressedVariant : unpressedVariant}\n      onClick={handleClick}\n      aria-pressed={pressed}\n      {...props}\n    />\n  );\n});\n\nToggleButton.displayName = \"ToggleButton\";\n\n/**\n * Floating Action Button component\n */\nexport interface FloatingActionButtonProps\n  extends Omit<GlassButtonProps, \"size\" | \"iconOnly\"> {\n  /**\n   * FAB size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * FAB position\n   */\n  position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n  /**\n   * Icon to display\n   */\n  icon: React.ReactNode;\n  /**\n   * Extended FAB with text\n   */\n  extended?: boolean;\n  /**\n   * Accessible label\n   */\n  \"aria-label\": string;\n}\n\nexport const FloatingActionButton = forwardRef(function FloatingActionButton(\n  {\n    size = \"md\",\n    position = \"bottom-right\",\n    icon,\n    extended = false,\n    children,\n    className,\n    ...props\n  }: FloatingActionButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  const positionClasses = {\n    \"bottom-right\": \"fixed bottom-6 right-6\",\n    \"bottom-left\": \"fixed bottom-6 left-6\",\n    \"top-right\": \"fixed top-6 right-6\",\n    \"top-left\": \"fixed top-6 left-6\",\n  };\n\n  const sizeClasses = {\n    sm: extended ? \"h-8 px-3\" : \"h-8 w-8\",\n    md: extended ? \"h-10 px-4\" : \"h-10 w-10\",\n    lg: extended ? \"h-12 px-6\" : \"h-12 w-12\",\n  };\n\n  return (\n    <GlassButton\n      ref={ref}\n      variant=\"default\"\n      elevation={\"level3\"}\n      animation=\"bounce\"\n      iconOnly={!extended}\n      leftIcon={extended ? icon : undefined}\n      className={cn(\n        \"shadow-lg z-50\",\n        \"glass-radius-full\",\n        positionClasses?.[position],\n        sizeClasses?.[size],\n        className\n      )}\n      {...props}\n    >\n      {extended ? children : icon}\n    </GlassButton>\n  );\n});\n\nFloatingActionButton.displayName = \"FloatingActionButton\";\n\n/**\n * Enhanced GlassButton with consciousness features enabled by default\n * Use this for buttons that should be intelligent and adaptive\n */\nexport const ConsciousGlassButton = forwardRef(function ConsciousGlassButton(\n  props: GlassButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  return (\n    <GlassButton\n      ref={ref}\n      predictive={true}\n      adaptive={true}\n      biometricResponsive={true}\n      trackAchievements={true}\n      achievementId=\"conscious_button_usage\"\n      {...props}\n    />\n  );\n});\n\nConsciousGlassButton.displayName = \"ConsciousGlassButton\";\n\n/**\n * Eye-tracking enabled button for gaze-responsive interactions\n */\nexport const GazeResponsiveButton = forwardRef(function GazeResponsiveButton(\n  props: GlassButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  return (\n    <GlassButton\n      ref={ref}\n      eyeTracking={true}\n      gazeResponsive={true}\n      spatialAudio={true}\n      audioFeedback={true}\n      trackAchievements={true}\n      achievementId=\"gaze_button_interaction\"\n      {...props}\n    />\n  );\n});\n\nGazeResponsiveButton.displayName = \"GazeResponsiveButton\";\n\n/**\n * Predictive button that learns user interaction patterns\n */\nexport const PredictiveButton = forwardRef(function PredictiveButton(\n  props: GlassButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  return (\n    <GlassButton\n      ref={ref}\n      predictive={true}\n      preloadContent={true}\n      trackAchievements={true}\n      achievementId=\"predictive_button_usage\"\n      {...props}\n    />\n  );\n});\n\nPredictiveButton.displayName = \"PredictiveButton\";\n\n/**\n * Accessibility-focused button with biometric adaptation and spatial audio\n */\nexport const AccessibleButton = forwardRef(function AccessibleButton(\n  props: GlassButtonProps,\n  ref: React.Ref<HTMLButtonElement>\n) {\n  return (\n    <GlassButton\n      ref={ref}\n      adaptive={true}\n      biometricResponsive={true}\n      spatialAudio={true}\n      audioFeedback={true}\n      trackAchievements={true}\n      achievementId=\"accessible_button_usage\"\n      {...props}\n    />\n  );\n});\n\nAccessibleButton.displayName = \"AccessibleButton\";\n\n/**\n * Pre-configured consciousness button presets\n */\nexport const ButtonConsciousnessPresets = {\n  /**\n   * Minimal consciousness features for performance-sensitive contexts\n   */\n  minimal: {\n    predictive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Balanced consciousness features for general use\n   */\n  balanced: {\n    predictive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Full consciousness features for immersive experiences\n   */\n  immersive: {\n    predictive: true,\n    preloadContent: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Accessibility-focused consciousness features\n   */\n  accessible: {\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n} as const;\n", "\"use client\";\n// Avoid importing DS aggregator within DS; keep relative\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n  /**\n   * Badge variant\n   */\n  variant?:\n    | \"default\"\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"warning\"\n    | \"error\"\n    | \"info\"\n    | \"outline\"\n    | \"ghost\"\n    | (string & {});\n  /**\n   * Badge size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n  /**\n   * Badge shape\n   */\n  shape?: \"glass-radius-md\" | \"pill\" | \"square\";\n  /**\n   * Whether badge has a dot indicator\n   */\n  dot?: boolean;\n  /**\n   * Left icon\n   */\n  leftIcon?: React.ReactNode;\n  /**\n   * Right icon\n   */\n  rightIcon?: React.ReactNode;\n  /**\n   * Whether badge is removable\n   */\n  removable?: boolean;\n  /**\n   * Remove callback\n   */\n  onRemove?: () => void;\n  /**\n   * Animation on mount\n   */\n  animate?: boolean;\n  /**\n   * Animation preset\n   */\n  animation?: \"scale\" | \"fade\" | \"bounce\";\n  /**\n   * Respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * ARIA label for the badge\n   */\n  \"aria-label\"?: string;\n}\n\n/**\n * GlassBadge component\n * A glassmorphism badge with various styles and states\n */\nexport const GlassBadge = forwardRef<HTMLSpanElement, GlassBadgeProps>(\n  (\n    {\n      variant = \"default\",\n      size = \"sm\",\n      shape = \"glass-radius-md\",\n      dot = false,\n      leftIcon,\n      rightIcon,\n      removable = false,\n      onRemove,\n      animate = false,\n      animation = \"scale\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const badgeId = useA11yId(\"badge\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldAnimate =\n      animate && (!respectMotionPreference || !prefersReducedMotion);\n    const hasBadgeContent = React.Children.count(children) > 0;\n    const dotOnly =\n      dot && !hasBadgeContent && !leftIcon && !rightIcon && !removable;\n\n    const sizeClasses = {\n      xs: dotOnly\n        ? \"glass-w-2 glass-h-2\"\n        : \"glass-px-2 glass-py-1 glass-text-xs\",\n      sm: dotOnly\n        ? \"glass-w-3 glass-h-3\"\n        : \"glass-px-2 glass-py-1 glass-text-xs\",\n      md: dotOnly\n        ? \"glass-w-3 glass-h-3\"\n        : \"glass-px-3 glass-py-1 glass-text-sm\",\n      lg: dotOnly\n        ? \"glass-w-4 glass-h-4\"\n        : \"glass-px-3 glass-py-2 glass-text-sm\",\n    };\n\n    const shapeClasses = {\n      \"glass-radius-md\": \"glass-radius-md\",\n      pill: \"glass-radius-full\",\n      square: \"glass-radius-none\",\n    };\n\n    const variantClasses = {\n      default: \"bg-muted/50 glass-text-secondary glass-border-0\",\n      primary: \"glass-surface-primary/10 glass-text-primary glass-border-0\",\n      secondary: \"bg-secondary/10 glass-text-primary/90 glass-border-0\",\n      success: \"glass-surface-success/10 glass-text-success glass-border-0\",\n      warning: \"glass-surface-warning/10 glass-text-primary glass-border-0\",\n      error: \"glass-surface-danger/10 glass-text-danger glass-border-0\",\n      info: \"glass-surface-info/10 glass-text-primary glass-border-0\",\n      outline:\n        \"bg-transparent glass-text-primary glass-border glass-border-white/10\",\n      ghost: \"bg-transparent glass-text-primary/70 glass-border-0\",\n    };\n\n    const dotVariantClasses = {\n      default: \"bg-muted-foreground\",\n      primary: \"bg-primary\",\n      secondary: \"bg-secondary\",\n      success: \"bg-success\",\n      warning: \"bg-warning\",\n      error: \"bg-destructive\",\n      info: \"bg-info\",\n      outline: \"bg-foreground\",\n      ghost: \"bg-muted-foreground\",\n    };\n\n    const iconSize = {\n      xs: \"glass-w-3 glass-h-3\",\n      sm: \"glass-w-3 glass-h-3\",\n      md: \"glass-w-4 glass-h-4\",\n      lg: \"glass-w-4 glass-h-4\",\n    };\n\n    const getAnimationPreset = () => {\n      switch (animation) {\n        case \"scale\":\n          return \"scaleIn\";\n        case \"fade\":\n          return \"fadeIn\";\n        case \"bounce\":\n          return \"bounceIn\";\n        default:\n          return \"scaleIn\";\n      }\n    };\n\n    if (dotOnly) {\n      const content = (\n        <span\n          ref={ref}\n          id={badgeId}\n          className={cn(\n            \"glass-inline-block glass-radius-full glass-flex-shrink-0\",\n            sizeClasses[size],\n            (dotVariantClasses as any)[variant] ?? dotVariantClasses.default,\n            className\n          )}\n          role=\"status\"\n          aria-label={ariaLabel || `${variant} status indicator`}\n          {...props}\n        />\n      );\n\n      return shouldAnimate ? (\n        <Motion preset={getAnimationPreset()}>{content}</Motion>\n      ) : (\n        content\n      );\n    }\n\n    const content = (\n      <OptimizedGlass\n        elevation={variant === \"ghost\" ? undefined : \"level1\"}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        ref={ref as any}\n        id={badgeId}\n        className={cn(\n          \"glass-inline-flex glass-items-center glass-gap-1 glass-font-medium\",\n          `transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n          sizeClasses[size],\n          shapeClasses[shape],\n          (variantClasses as any)[variant] ?? variantClasses.default,\n          className\n        )}\n        role={removable ? \"button\" : \"status\"}\n        aria-label={\n          ariaLabel || (children ? `Badge: ${children}` : `${variant} badge`)\n        }\n        {...props}\n      >\n        {dot && (\n          <span\n            className={cn(\n              \"glass-inline-block glass-radius-full glass-flex-shrink-0\",\n              {\n                xs: \"glass-w-2 glass-h-2\",\n                sm: \"glass-w-2 glass-h-2\",\n                md: \"glass-w-3 glass-h-3\",\n                lg: \"glass-w-3 glass-h-3\",\n              }[size],\n              (dotVariantClasses as any)[variant] ?? dotVariantClasses.default\n            )}\n            aria-hidden=\"true\"\n          />\n        )}\n\n        {leftIcon && (\n          <span className={cn(\"glass-flex-shrink-0\", iconSize[size])}>\n            {leftIcon}\n          </span>\n        )}\n\n        {children && (\n          <ContrastGuard>\n            <span className=\"glass-whitespace-nowrap\">{children}</span>\n          </ContrastGuard>\n        )}\n\n        {rightIcon && !removable && (\n          <span className={cn(\"glass-flex-shrink-0\", iconSize[size])}>\n            {rightIcon}\n          </span>\n        )}\n\n        {removable && (\n          <GlassButton\n            type=\"button\"\n            onClick={onRemove}\n            className={cn(\n              \"glass-flex-shrink-0 glass-flex glass-items-center glass-justify-center\",\n              \"hover:bg-current/20 glass-radius-full transition-colors\",\n              \"focus:outline-none focus:ring-1 focus:ring-current\",\n              iconSize[size]\n            )}\n            aria-label=\"Remove badge\"\n          >\n            <svg\n              className=\"glass-w-2-5 glass-h-2-5\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              viewBox=\"0 0 24 24\"\n            >\n              <path\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth={2}\n                d=\"M6 18L18 6M6 6l12 12\"\n              />\n            </svg>\n          </GlassButton>\n        )}\n      </OptimizedGlass>\n    );\n\n    return shouldAnimate ? (\n      <Motion preset={getAnimationPreset()}>{content}</Motion>\n    ) : (\n      content\n    );\n  }\n);\n\nGlassBadge.displayName = \"GlassBadge\";\n\n/**\n * StatusBadge component\n */\nexport interface StatusBadgeProps extends Omit<\n  GlassBadgeProps,\n  \"variant\" | \"dot\"\n> {\n  /**\n   * Status type\n   */\n  status:\n    | \"online\"\n    | \"offline\"\n    | \"away\"\n    | \"busy\"\n    | \"pending\"\n    | \"active\"\n    | \"inactive\";\n  /**\n   * Whether to show as dot only\n   */\n  dotOnly?: boolean;\n}\n\nexport const StatusBadge = forwardRef<HTMLSpanElement, StatusBadgeProps>(\n  ({ status, dotOnly = false, ...props }, ref) => {\n    const statusConfig = {\n      online: { variant: \"success\" as const, label: \"Online\" },\n      offline: { variant: \"default\" as const, label: \"Offline\" },\n      away: { variant: \"warning\" as const, label: \"Away\" },\n      busy: { variant: \"error\" as const, label: \"Busy\" },\n      pending: { variant: \"warning\" as const, label: \"Pending\" },\n      active: { variant: \"success\" as const, label: \"Active\" },\n      inactive: { variant: \"default\" as const, label: \"Inactive\" },\n    };\n\n    const config = statusConfig[status];\n\n    return (\n      <GlassBadge ref={ref} variant={config.variant} dot={dotOnly} {...props}>\n        {!dotOnly && <ContrastGuard>{config.label}</ContrastGuard>}\n      </GlassBadge>\n    );\n  }\n);\n\nStatusBadge.displayName = \"StatusBadge\";\n\n/**\n * CountBadge component\n */\nexport interface CountBadgeProps extends Omit<GlassBadgeProps, \"children\"> {\n  /**\n   * Count value\n   */\n  count: number;\n  /**\n   * Maximum count to display\n   */\n  max?: number;\n  /**\n   * Whether to show zero count\n   */\n  showZero?: boolean;\n}\n\nexport const CountBadge = forwardRef<HTMLSpanElement, CountBadgeProps>(\n  ({ count, max = 99, showZero = false, ...props }, ref) => {\n    if (count <= 0 && !showZero) {\n      return null;\n    }\n\n    const displayCount = count > max ? `${max}+` : count.toString();\n\n    return (\n      <GlassBadge ref={ref} variant=\"default\" size=\"xs\" shape=\"pill\" {...props}>\n        <ContrastGuard>{displayCount}</ContrastGuard>\n      </GlassBadge>\n    );\n  }\n);\n\nCountBadge.displayName = \"CountBadge\";\n\n/**\n * BadgeGroup component\n */\nexport interface BadgeGroupProps {\n  /**\n   * Badges to display\n   */\n  badges: Array<{\n    id: string;\n    label: string;\n    variant?: GlassBadgeProps[\"variant\"];\n    removable?: boolean;\n    onRemove?: () => void;\n  }>;\n  /**\n   * Maximum badges to show\n   */\n  max?: number;\n  /**\n   * Spacing between badges\n   */\n  spacing?: \"tight\" | \"normal\" | \"relaxed\";\n  /**\n   * Whether badges wrap to new lines\n   */\n  wrap?: boolean;\n  className?: string;\n}\n\nexport function BadgeGroup({\n  badges,\n  max,\n  spacing = \"normal\",\n  wrap = true,\n  className,\n}: BadgeGroupProps) {\n  const spacingClasses = {\n    tight: \"glass-gap-1\",\n    normal: \"glass-gap-2\",\n    relaxed: \"glass-gap-3\",\n  };\n\n  const visibleBadges = max ? badges.slice(0, max) : badges;\n  const hiddenCount = max && badges.length > max ? badges.length - max : 0;\n\n  return (\n    <div\n      className={cn(\n        \"glass-flex glass-items-center\",\n        spacingClasses[spacing],\n        wrap ? \"glass-flex-wrap\" : \"glass-overflow-hidden\",\n        className\n      )}\n    >\n      {visibleBadges.map((badge) => (\n        <GlassBadge\n          key={badge.id}\n          variant={badge.variant}\n          removable={badge.removable}\n          onRemove={badge.onRemove}\n          animate\n        >\n          <ContrastGuard>{badge.label}</ContrastGuard>\n        </GlassBadge>\n      ))}\n\n      {hiddenCount > 0 && (\n        <GlassBadge variant=\"outline\" size=\"sm\">\n          <ContrastGuard>+{hiddenCount} more</ContrastGuard>\n        </GlassBadge>\n      )}\n    </div>\n  );\n}\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassBreadcrumbProps\n  extends React.HTMLAttributes<HTMLElement> {\n  /**\n   * Breadcrumb separator\n   */\n  separator?: React.ReactNode;\n  /**\n   * Breadcrumb items\n   */\n  children: React.ReactNode;\n  /**\n   * Maximum items to show\n   */\n  maxItems?: number;\n  /**\n   * Show ellipsis for collapsed items\n   */\n  showEllipsis?: boolean;\n  /**\n   * Custom ellipsis component\n   */\n  ellipsisComponent?: React.ReactNode;\n  /**\n   * Glass elevation\n   */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Render a tighter breadcrumb for cards, toolbars, and preview surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Bound long breadcrumb trails inside their parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum width used when contained. Defaults to 100%.\n   */\n  maxWidth?: number | string;\n}\n\nexport interface GlassBreadcrumbItemProps\n  extends React.HTMLAttributes<HTMLSpanElement> {\n  /**\n   * Whether this is the current page\n   */\n  isCurrentPage?: boolean;\n  /**\n   * Item content\n   */\n  children: React.ReactNode;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n}\n\nexport interface GlassBreadcrumbSeparatorProps\n  extends React.HTMLAttributes<HTMLSpanElement> {\n  /**\n   * Custom separator content\n   */\n  children?: React.ReactNode;\n}\n\nexport interface GlassBreadcrumbLinkProps\n  extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n  /**\n   * Link content\n   */\n  children: React.ReactNode;\n  /**\n   * Link href\n   */\n  href?: string;\n  /**\n   * Whether this is the current page\n   */\n  isCurrentPage?: boolean;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n}\n\n/**\n * GlassBreadcrumb component\n * A glassmorphism breadcrumb navigation component\n */\nexport const GlassBreadcrumb = forwardRef<HTMLElement, GlassBreadcrumbProps>(\n  (\n    {\n      separator = \"/\",\n      children,\n      maxItems,\n      showEllipsis = true,\n      ellipsisComponent = \"...\",\n      elevation = \"level1\",\n      size = \"md\",\n      respectMotionPreference = true,\n      compact = false,\n      contained = false,\n      maxWidth,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const navId = useA11yId(\"breadcrumb\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    const childArray = React.Children.toArray(children);\n    let itemsToRender = childArray;\n\n    // Handle max items with ellipsis\n    if (maxItems && (childArray?.length || 0) > maxItems) {\n      const startItems = childArray.slice(0, Math.ceil(maxItems / 2));\n      const endItems = childArray.slice(-Math.floor(maxItems / 2));\n      itemsToRender = [\n        ...startItems,\n        ...(showEllipsis ? [ellipsisComponent] : []),\n        ...endItems,\n      ].filter(\n        (item): item is React.ReactElement =>\n          React.isValidElement(item) ||\n          typeof item === \"string\" ||\n          typeof item === \"number\"\n      );\n    }\n\n    const sizeClasses = {\n      sm: \"glass-text-xs\",\n      md: \"glass-text-sm\",\n      lg: \"glass-text-base\",\n    };\n    const effectiveSize = compact ? \"sm\" : size;\n    const effectiveMaxItems =\n      maxItems ?? (compact && childArray.length > 3 ? 3 : undefined);\n    if (effectiveMaxItems && (childArray?.length || 0) > effectiveMaxItems) {\n      const startItems = childArray.slice(0, Math.ceil(effectiveMaxItems / 2));\n      const endItems = childArray.slice(-Math.floor(effectiveMaxItems / 2));\n      itemsToRender = [\n        ...startItems,\n        ...(showEllipsis ? [ellipsisComponent] : []),\n        ...endItems,\n      ].filter(\n        (item): item is React.ReactElement =>\n          React.isValidElement(item) ||\n          typeof item === \"string\" ||\n          typeof item === \"number\"\n      );\n    }\n\n    return (\n      <OptimizedGlass\n        ref={ref as any}\n        elevation={elevation}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n        performanceMode=\"medium\"\n        className={cn(\n          \"inline-flex items-center glass-backdrop-blur-md ring-1 ring-white/10 bg-white/5\",\n          compact ? \"glass-px-2 glass-py-1\" : \"glass-px-3 glass-py-1.5\",\n          (compact || contained) && \"glass-max-w-full glass-overflow-hidden\",\n          sizeClasses?.[effectiveSize],\n          className\n        )}\n        style={{\n          ...(maxWidth || contained\n            ? {\n                maxWidth:\n                  typeof maxWidth === \"number\"\n                    ? `${maxWidth}px`\n                    : (maxWidth ?? \"100%\"),\n              }\n            : null),\n          ...(props.style as React.CSSProperties | undefined),\n        }}\n        {...props}\n      >\n        <nav aria-label={props[\"aria-label\"] || \"Breadcrumb\"} id={navId}>\n          <ol\n            className={cn(\n              \"glass-flex glass-items-center glass-min-w-0\",\n              compact ? \"glass-gap-1\" : \"glass-gap-2\",\n              (compact || contained) && \"glass-overflow-hidden\"\n            )}\n          >\n            {itemsToRender.map((item, index) => (\n              <li\n                key={index}\n                className={cn(\n                  \"glass-flex glass-items-center\",\n                  (compact || contained) && \"glass-min-w-0\"\n                )}\n              >\n                {index > 0 && (\n                  <span\n                    className={cn(\n                      compact ? \"glass-mx-1\" : \"glass-mx-2\",\n                      \"glass-text-primary-glass-opacity-40\"\n                    )}\n                    aria-hidden=\"true\"\n                  >\n                    {separator}\n                  </span>\n                )}\n                {item}\n              </li>\n            ))}\n          </ol>\n        </nav>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassBreadcrumb.displayName = \"GlassBreadcrumb\";\n\n/**\n * GlassBreadcrumbItem component\n * Individual breadcrumb item\n */\nexport const GlassBreadcrumbItem = forwardRef<\n  HTMLSpanElement,\n  GlassBreadcrumbItemProps\n>(\n  (\n    {\n      isCurrentPage = false,\n      children,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    return (\n      <span\n        ref={ref}\n        className={cn(\n          \"glass-text-primary/80 transition-all duration-200\",\n          !isCurrentPage &&\n            !shouldReduceMotion &&\n            \"glass-hover--translate-y-0-5\",\n          isCurrentPage && \"glass-text-primary font-medium\",\n          className\n        )}\n        aria-current={isCurrentPage ? \"page\" : undefined}\n        {...props}\n      >\n        {children}\n      </span>\n    );\n  }\n);\n\nGlassBreadcrumbItem.displayName = \"GlassBreadcrumbItem\";\n\n/**\n * GlassBreadcrumbSeparator component\n * Separator between breadcrumb items\n */\nexport const GlassBreadcrumbSeparator = forwardRef<\n  HTMLSpanElement,\n  GlassBreadcrumbSeparatorProps\n>(({ children = \"/\", className, ...props }, ref) => {\n  return (\n    <span\n      ref={ref}\n      className={cn(\"glass-text-primary/60 glass-mx-2 select-none\", className)}\n      aria-hidden=\"true\"\n      {...props}\n    >\n      {children}\n    </span>\n  );\n});\n\nGlassBreadcrumbSeparator.displayName = \"GlassBreadcrumbSeparator\";\n\n/**\n * GlassBreadcrumbLink component\n * Clickable breadcrumb link\n */\nexport const GlassBreadcrumbLink = forwardRef<\n  HTMLAnchorElement | HTMLButtonElement,\n  GlassBreadcrumbLinkProps\n>(\n  (\n    {\n      children,\n      href,\n      isCurrentPage = false,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    const linkClasses = cn(\n      \"glass-text-primary/70 hover:glass-text-primary transition-all duration-200\",\n      \"focus:outline-none glass-pulse-ring\",\n      \"glass-radius-sm glass-px-1 glass-py-0.5 -glass-mx-1 -glass-my-0.5\",\n      !isCurrentPage && !shouldReduceMotion && \"glass-hover--translate-y-0-5\",\n      isCurrentPage && \"glass-text-primary font-medium cursor-default\",\n      className\n    );\n\n    if (isCurrentPage) {\n      return (\n        <span className={linkClasses} aria-current=\"page\">\n          {children}\n        </span>\n      );\n    }\n\n    if (href) {\n      return (\n        <a\n          ref={ref as React.RefObject<HTMLAnchorElement>}\n          href={href}\n          className={linkClasses}\n          {...props}\n        >\n          {children}\n        </a>\n      );\n    }\n\n    return (\n      <button\n        ref={ref as React.RefObject<HTMLButtonElement>}\n        className={linkClasses}\n        onClick={props?.onClick as any}\n        {...(props as any)}\n      >\n        {children}\n      </button>\n    );\n  }\n);\n\nGlassBreadcrumbLink.displayName = \"GlassBreadcrumbLink\";\n\n/**\n * Compound Breadcrumb component with built-in structure\n */\nexport interface GlassBreadcrumbCompoundProps\n  extends Omit<GlassBreadcrumbProps, \"children\"> {\n  /**\n   * Breadcrumb items\n   */\n  items: Array<{\n    label: string;\n    href?: string;\n    isCurrentPage?: boolean;\n  }>;\n}\n\nexport const GlassBreadcrumbCompound: React.FC<\n  GlassBreadcrumbCompoundProps\n> = ({ items, ...props }) => {\n  return (\n    <GlassBreadcrumb {...props}>\n      {items.map((item, index) => (\n        <GlassBreadcrumbItem key={index} isCurrentPage={item?.isCurrentPage}>\n          <GlassBreadcrumbLink\n            href={item?.href}\n            isCurrentPage={item?.isCurrentPage}\n          >\n            {item?.label}\n          </GlassBreadcrumbLink>\n        </GlassBreadcrumbItem>\n      ))}\n    </GlassBreadcrumb>\n  );\n};\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface CommandItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  onSelect?: () => void;\n  shortcut?: string;\n  disabled?: boolean;\n}\n\nexport interface GlassCommandBarProps extends React.HTMLAttributes<HTMLDivElement> {\n  items?: CommandItem[];\n  position?: \"top\" | \"bottom\";\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassCommandBar = forwardRef<HTMLDivElement, GlassCommandBarProps>(\n  (\n    {\n      items = [],\n      position = \"bottom\",\n      respectMotionPreference = true,\n      className,\n      ...rest\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const commandBarId = useA11yId(\"command-bar\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n\n    // Handle undefined or null items gracefully\n    if (!items || !Array.isArray(items)) {\n      return null;\n    }\n\n    return (\n      <div\n        className={cn(\n          \"glass-w-full\",\n          position === \"top\" ? \"glass-mt-2\" : \"glass-mb-2\"\n        )}\n      >\n        <OptimizedGlass\n          ref={ref}\n          elevation={\"level2\"}\n          animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n          role=\"toolbar\"\n          aria-label=\"Command bar\"\n          id={commandBarId}\n          className={cn(\n            // Let child buttons render without being clipped by the glass container rounding\n            \"glass-radius-xl glass-px-2 glass-py-1 glass-flex glass-flex-wrap glass-gap-1 glass-overflow-visible\",\n            className\n          )}\n          style={{\n            display: \"flex\",\n            flexWrap: \"wrap\",\n            overflow: \"visible\",\n          }}\n          {...rest}\n        >\n          {items.map((it) => (\n            <button\n              key={it.id}\n              disabled={it.disabled}\n              onClick={it.onSelect}\n              className={cn(\n                // Avoid text cropping and keep shape consistent\n                \"glass-px-3 glass-py-1 glass-radius-md glass-text-sm glass-text-primary/90 hover:glass-bg-white/10 glass-border glass-border-white/10 glass-whitespace-nowrap glass-leading-normal\",\n                \"glass-focus glass-touch-target glass-contrast-guard\",\n                \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30\",\n                !shouldReduceMotion &&\n                  \"glass-transition-all glass-duration-200 glass-hover-scale-105\",\n                it.disabled && \"glass-opacity-50 glass-cursor-not-allowed\"\n              )}\n              style={{\n                whiteSpace: \"nowrap\",\n                lineHeight: \"normal\",\n              }}\n            >\n              <span className=\"glass-inline-flex glass-items-center glass-gap-2\">\n                {it.icon}\n                {it.label}\n                {it.shortcut && (\n                  <kbd className=\"glass-ml-1 glass-text-xs glass-px-1 glass-py-0.5 glass-radius-md glass-surface-subtle/10 glass-border glass-border-white/15\">\n                    {it.shortcut}\n                  </kbd>\n                )}\n              </span>\n            </button>\n          ))}\n        </OptimizedGlass>\n      </div>\n    );\n  }\n);\n\nGlassCommandBar.displayName = \"GlassCommandBar\";\n\nexport default GlassCommandBar;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  forwardRef,\n  HTMLAttributes,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface ContextMenuItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  shortcut?: string;\n  disabled?: boolean;\n  destructive?: boolean;\n  separator?: boolean;\n  children?: ContextMenuItem[];\n  action?: () => void;\n  onClick?: () => void;\n}\n\nexport interface GlassContextMenuProps extends HTMLAttributes<HTMLDivElement> {\n  /**\n   * Menu items\n   */\n  items?: ContextMenuItem[];\n  /**\n   * Children to trigger the context menu\n   */\n  children: React.ReactNode;\n  /**\n   * Custom trigger element\n   */\n  trigger?: React.ReactNode;\n  /**\n   * Whether menu is open\n   */\n  open?: boolean;\n  /**\n   * Callback when open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Menu alignment\n   */\n  align?: \"start\" | \"center\" | \"end\";\n  /**\n   * Menu side\n   */\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Additional className for menu content element\n   */\n  menuClassName?: string;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n  contained?: boolean;\n}\n\nexport interface GlassContextMenuContentProps {\n  /**\n   * Menu items\n   */\n  items: ContextMenuItem[];\n  /**\n   * Position of the menu\n   */\n  position: { x: number; y: number };\n  /**\n   * Callback to close menu\n   */\n  onClose: () => void;\n  /**\n   * Maximum width\n   */\n  maxWidth?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n}\n\nexport interface GlassContextMenuItemProps {\n  /**\n   * Menu item data\n   */\n  item: ContextMenuItem;\n  /**\n   * Whether item is selected\n   */\n  isSelected?: boolean;\n  /**\n   * Callback when item is clicked\n   */\n  onClick: (item: ContextMenuItem) => void;\n  /**\n   * Callback to close menu\n   */\n  onClose: () => void;\n  /**\n   * Whether this is a submenu\n   */\n  isSubmenu?: boolean;\n}\n\n/**\n * GlassContextMenu component\n * A glassmorphism context menu that appears on right-click\n */\nexport const GlassContextMenu: React.FC<GlassContextMenuProps> = ({\n  items = [],\n  children,\n  trigger,\n  open: controlledOpen,\n  onOpenChange,\n  align = \"start\",\n  side = \"bottom\",\n  positionStrategy = \"fixed\",\n  contained = false,\n  className,\n  menuClassName,\n  ...rest\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [position, setPosition] = useState({ x: 0, y: 0 });\n  const triggerRef = useRef<HTMLDivElement>(null);\n\n  const open = controlledOpen !== undefined ? controlledOpen : isOpen;\n  const setOpen = onOpenChange || setIsOpen;\n\n  // Handle right-click\n  const handleContextMenu = (e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const rect = triggerRef.current?.getBoundingClientRect();\n    if (rect) {\n      const isContained = contained || positionStrategy === \"contained\";\n      let x = isContained ? e.clientX - rect.left : e.clientX;\n      let y = isContained ? e.clientY - rect.top : e.clientY;\n\n      // Adjust position based on alignment and side\n      if (align === \"end\") x = isContained ? rect.width : rect.right;\n      else if (align === \"center\")\n        x = isContained ? rect.width / 2 : rect.left + rect.width / 2;\n\n      if (side === \"top\") y = isContained ? 0 : rect.top;\n      else if (side === \"bottom\") y = isContained ? rect.height : rect.bottom;\n      else if (side === \"left\") x = isContained ? 0 : rect.left;\n      else if (side === \"right\") x = isContained ? rect.width : rect.right;\n\n      setPosition({ x, y });\n      setOpen(true);\n    }\n  };\n\n  // Handle outside click\n  useEffect(() => {\n    const handleClickOutside = () => {\n      if (open) setOpen(false);\n    };\n\n    if (open) {\n      document.addEventListener(\"mousedown\", handleClickOutside);\n      return () =>\n        document.removeEventListener(\"mousedown\", handleClickOutside);\n    }\n  }, [open, setOpen]);\n\n  // Handle escape key\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\" && open) {\n        setOpen(false);\n      }\n    };\n\n    if (open) {\n      document.addEventListener(\"keydown\", handleEscape);\n      return () => document.removeEventListener(\"keydown\", handleEscape);\n    }\n  }, [open, setOpen]);\n\n  return (\n    <>\n      <div\n        ref={triggerRef}\n        onContextMenu={handleContextMenu}\n        className={cn(\n          \"cursor-context-menu\",\n          (contained || positionStrategy === \"contained\") && \"glass-relative\",\n          className\n        )}\n        {...rest}\n      >\n        {trigger || children}\n      </div>\n\n      {open && (\n        <GlassContextMenuContent\n          items={items}\n          position={position}\n          onClose={() => setOpen(false)}\n          positionStrategy={\n            contained || positionStrategy === \"contained\"\n              ? \"contained\"\n              : positionStrategy\n          }\n          className={menuClassName ?? className}\n        />\n      )}\n    </>\n  );\n};\n\n/**\n * GlassContextMenuContent component\n * The actual menu content with positioning\n */\nexport const GlassContextMenuContent: React.FC<\n  GlassContextMenuContentProps\n> = ({\n  items,\n  position,\n  onClose,\n  maxWidth = \"200px\",\n  className,\n  positionStrategy = \"fixed\",\n}) => {\n  const menuRef = useRef<HTMLDivElement>(null);\n  const [submenuOpen, setSubmenuOpen] = useState<string | null>(null);\n\n  // Adjust position to keep menu in viewport\n  useEffect(() => {\n    if (menuRef.current) {\n      const menu = menuRef.current;\n      const rect = menu.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n\n      let newX = position.x;\n      let newY = position.y;\n\n      // Adjust horizontal position\n      if (newX + rect.width > viewportWidth) {\n        newX = viewportWidth - rect.width - 10;\n      }\n\n      // Adjust vertical position\n      if (newY + rect.height > viewportHeight) {\n        newY = viewportHeight - rect.height - 10;\n      }\n\n      if (newX !== position.x || newY !== position.y) {\n        menu.style.left = `${newX}px`;\n        menu.style.top = `${newY}px`;\n      }\n    }\n  }, [position]);\n\n  return (\n    <Motion\n      preset=\"scaleIn\"\n      className={cn(\n        positionStrategy === \"fixed\" ? \"glass-fixed\" : \"glass-absolute\",\n        \"glass-z-9999\"\n      )}\n    >\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level4\"\n        intensity=\"strong\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        ref={menuRef}\n        liftOnHover\n        hoverSheen\n        role=\"menu\"\n        aria-label=\"Context menu\"\n        aria-orientation=\"vertical\"\n        className={cn(\n          \"glass-backdrop-blur-lg bg-white/10 border border-white/20 shadow-2xl\",\n          \"min-w-48 max-w-xs overflow-hidden glass-radial-reveal glass-lift\",\n          className\n        )}\n        style={{\n          left: position.x,\n          top: position.y,\n          maxWidth,\n        }}\n        data-position-strategy={positionStrategy}\n      >\n        <div className=\"glass-py-1\">\n          {items.map((item, index) => (\n            <React.Fragment key={item?.id}>\n              {item?.separator && index > 0 && (\n                <div\n                  className=\"glass-h-px glass-surface-subtle/20 glass-mx-2 glass-my-1\"\n                  role=\"separator\"\n                />\n              )}\n              <GlassContextMenuItem\n                item={item}\n                onClick={(clickedItem) => {\n                  if (clickedItem.children) {\n                    setSubmenuOpen(\n                      submenuOpen === clickedItem.id ? null : clickedItem.id\n                    );\n                  } else {\n                    clickedItem.action?.();\n                    clickedItem.onClick?.();\n                    onClose();\n                  }\n                }}\n                onClose={onClose}\n                isSubmenu={false}\n              />\n              {item?.children && submenuOpen === item?.id && (\n                <div className=\"glass-absolute glass-left-full glass-top-0 glass-ml-1\">\n                  <GlassContextMenuContent\n                    items={item?.children}\n                    position={{ x: 0, y: 0 }}\n                    onClose={() => setSubmenuOpen(null)}\n                    positionStrategy=\"absolute\"\n                  />\n                </div>\n              )}\n            </React.Fragment>\n          ))}\n        </div>\n      </OptimizedGlass>\n    </Motion>\n  );\n};\n\n/**\n * GlassContextMenuItem component\n * Individual menu item\n */\nexport const GlassContextMenuItem: React.FC<GlassContextMenuItemProps> = ({\n  item,\n  isSelected = false,\n  onClick,\n  onClose,\n  isSubmenu = false,\n}) => {\n  const [isHovered, setIsHovered] = useState(false);\n  const itemRef = useRef<HTMLDivElement>(null);\n\n  if (item?.separator) {\n    return (\n      <div\n        className=\"glass-h-px glass-surface-subtle/20 glass-mx-2 glass-my-1\"\n        role=\"separator\"\n      />\n    );\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    const menuContainer = itemRef.current?.closest('[role=\"menu\"]');\n    if (!menuContainer) return;\n\n    const menuItems = Array.from(\n      menuContainer.querySelectorAll(\n        '[role=\"menuitem\"]:not([aria-disabled=\"true\"])'\n      )\n    ) as HTMLElement[];\n    const currentIndex = menuItems.indexOf(itemRef.current!);\n\n    switch (e.key) {\n      case \"ArrowDown\":\n        e.preventDefault();\n        const nextItem = menuItems[currentIndex + 1] || menuItems[0];\n        nextItem?.focus();\n        break;\n      case \"ArrowUp\":\n        e.preventDefault();\n        const prevItem =\n          menuItems[currentIndex - 1] || menuItems[menuItems.length - 1];\n        prevItem?.focus();\n        break;\n      case \"ArrowRight\":\n        if (item?.children) {\n          e.preventDefault();\n          onClick(item);\n        }\n        break;\n      case \"ArrowLeft\":\n        if (isSubmenu) {\n          e.preventDefault();\n          onClose();\n        }\n        break;\n      case \"Enter\":\n      case \" \":\n        e.preventDefault();\n        if (!item?.disabled) onClick(item);\n        break;\n      case \"Escape\":\n        e.preventDefault();\n        onClose();\n        break;\n      case \"Home\":\n        e.preventDefault();\n        menuItems[0]?.focus();\n        break;\n      case \"End\":\n        e.preventDefault();\n        menuItems[menuItems.length - 1]?.focus();\n        break;\n    }\n  };\n\n  return (\n    <div\n      ref={itemRef}\n      role=\"menuitem\"\n      aria-disabled={item?.disabled}\n      aria-haspopup={item?.children ? \"menu\" : undefined}\n      tabIndex={item?.disabled ? -1 : 0}\n      className={cn(\n        \"relative flex items-center glass-px-3 glass-py-2 cursor-pointer transition-all duration-200\",\n        \"glass-text-primary/90 hover:glass-text-primary glass-radius-lg\",\n        \"hover:bg-white/10 glass-hover--translate-y-0-5 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/10\",\n        \"glass-press\",\n        {\n          \"bg-white/20 glass-text-primary\": isSelected,\n          \"opacity-50 cursor-not-allowed\": item?.disabled,\n          \"text-red-400 hover:text-red-300\": item?.destructive,\n        }\n      )}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      onClick={(e) => !item?.disabled && onClick(item)}\n      onKeyDown={handleKeyDown}\n    >\n      {item?.icon && (\n        <div className=\"glass-flex glass-items-center glass-justify-center glass-w-4 glass-h-4 glass-mr-3\">\n          {item?.icon}\n        </div>\n      )}\n\n      <span className=\"glass-flex-1 glass-text-sm glass-font-medium glass-truncate\">\n        {item?.label}\n      </span>\n\n      {item?.shortcut && (\n        <span className=\"glass-ml-6 glass-text-xs glass-text-primary-glass-opacity-50 glass-font-mono\">\n          {item?.shortcut}\n        </span>\n      )}\n\n      {item?.children && (\n        <div\n          className=\"glass-ml-3 glass-text-primary-glass-opacity-50\"\n          aria-hidden=\"true\"\n        >\n          \u25B6\n        </div>\n      )}\n    </div>\n  );\n};\n\n/**\n * Hook for creating context menu items\n */\nexport const useContextMenu = () => {\n  const createItem = (\n    id: string,\n    label: string,\n    action?: () => void,\n    options?: Partial<Omit<ContextMenuItem, \"id\" | \"label\" | \"action\">>\n  ): ContextMenuItem => ({\n    id,\n    label,\n    action,\n    ...options,\n  });\n\n  const createSeparator = (): ContextMenuItem => ({\n    id: `separator-${Date.now()}`,\n    label: \"\",\n    separator: true,\n  });\n\n  return {\n    createItem,\n    createSeparator,\n  };\n};\n", "\"use client\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  DismissableLayer,\n  FocusScope,\n  Portal,\n  Positioner,\n  Slot,\n} from \"../../primitives\";\nimport { Check, ChevronRight } from \"../../icons\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\ntype MenuSelectEvent = Event & { currentTarget?: EventTarget | null };\n\ntype DropdownMenuContextValue = {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  triggerRef: React.RefObject<HTMLElement>;\n  contentId: string;\n};\n\nconst DropdownMenuContext =\n  React.createContext<DropdownMenuContextValue | null>(null);\n\nconst useDropdownMenu = () => {\n  const context = React.useContext(DropdownMenuContext);\n  if (!context) {\n    throw new Error(\n      \"GlassDropdownMenu components must be used within GlassDropdownMenu\"\n    );\n  }\n  return context;\n};\n\nconst useControllableOpen = ({\n  open,\n  defaultOpen,\n  onOpenChange,\n}: {\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}) => {\n  const [uncontrolledOpen, setUncontrolledOpen] = React.useState(\n    defaultOpen ?? false\n  );\n  const isControlled = open !== undefined;\n  const resolvedOpen = isControlled ? open : uncontrolledOpen;\n\n  const setOpen = React.useCallback(\n    (nextOpen: boolean) => {\n      if (!isControlled) {\n        setUncontrolledOpen(nextOpen);\n      }\n      onOpenChange?.(nextOpen);\n    },\n    [isControlled, onOpenChange]\n  );\n\n  return [resolvedOpen ?? false, setOpen] as const;\n};\n\nconst composeRefs = <T,>(\n  ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> => {\n  return (node) => {\n    refs.forEach((ref) => {\n      if (typeof ref === \"function\") {\n        ref(node);\n      } else if (ref) {\n        (ref as React.MutableRefObject<T | null>).current = node;\n      }\n    });\n  };\n};\n\nconst getFocusableMenuItems = (root: HTMLElement | null) =>\n  Array.from(\n    root?.querySelectorAll<HTMLElement>(\n      '[role=\"menuitem\"]:not([aria-disabled=\"true\"]), [role=\"menuitemcheckbox\"]:not([aria-disabled=\"true\"]), [role=\"menuitemradio\"]:not([aria-disabled=\"true\"])'\n    ) ?? []\n  );\n\n// DropdownMenu Root component\nexport interface GlassDropdownMenuProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onOpenChange\"> {\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  modal?: boolean;\n}\n\nexport const GlassDropdownMenu = React.forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuProps\n>(\n  (\n    {\n      className,\n      \"data-testid\": dataTestId,\n      children,\n      open,\n      defaultOpen,\n      onOpenChange,\n      modal: _modal,\n      ...props\n    },\n    ref\n  ) => {\n    const [resolvedOpen, setOpen] = useControllableOpen({\n      open,\n      defaultOpen,\n      onOpenChange,\n    });\n    const triggerRef = React.useRef<HTMLElement>(null);\n    const contentId = React.useId();\n\n    const value = React.useMemo(\n      () => ({\n        open: resolvedOpen,\n        setOpen,\n        triggerRef,\n        contentId,\n      }),\n      [contentId, resolvedOpen, setOpen]\n    );\n\n    return (\n      <DropdownMenuContext.Provider value={value}>\n        <div\n          ref={ref}\n          className={className}\n          data-testid={dataTestId}\n          {...props}\n        >\n          {children}\n        </div>\n      </DropdownMenuContext.Provider>\n    );\n  }\n);\n\nGlassDropdownMenu.displayName = \"GlassDropdownMenu\";\n\n// DropdownMenuTrigger component\nexport interface GlassDropdownMenuTriggerProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  variant?: \"default\" | \"outline\" | \"ghost\" | \"minimal\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  asChild?: boolean;\n}\n\nexport const GlassDropdownMenuTrigger = forwardRef<\n  HTMLButtonElement,\n  GlassDropdownMenuTriggerProps\n>(\n  (\n    {\n      className,\n      variant = \"outline\",\n      size = \"md\",\n      asChild = false,\n      children,\n      onClick,\n      onKeyDown,\n      disabled,\n      ...props\n    },\n    ref\n  ) => {\n    const { open, setOpen, triggerRef, contentId } = useDropdownMenu();\n    const Comp = asChild ? Slot : \"button\";\n\n    const sizeStyles = {\n      sm: \"h-8 glass-px-3 glass-text-xs\",\n      md: \"h-10 glass-px-4 glass-text-sm\",\n      lg: \"h-12 glass-px-6 glass-text-base\",\n    };\n\n    const variantStyles = {\n      default:\n        \"glass-surface-primary glass-text-primary hover:glass-surface-primary/90\",\n      outline:\n        \"glass-border glass-border-glass-border glass-surface-transparent hover:glass-surface-subtle hover:glass-text-primary\",\n      ghost: \"hover:glass-surface-subtle hover:glass-text-primary\",\n      minimal: \"glass-text-secondary hover:glass-text-primary\",\n    };\n\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n      onClick?.(event);\n      if (!event.defaultPrevented && !disabled) {\n        setOpen(!open);\n      }\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n      onKeyDown?.(event);\n      if (event.defaultPrevented || disabled) return;\n\n      if (\n        event.key === \"Enter\" ||\n        event.key === \" \" ||\n        event.key === \"ArrowDown\"\n      ) {\n        event.preventDefault();\n        setOpen(true);\n      }\n    };\n\n    return (\n      <Comp\n        data-glass-component\n        ref={composeRefs(ref, triggerRef as React.Ref<HTMLButtonElement>)}\n        type={asChild ? undefined : \"button\"}\n        className={cn(\n          \"glass-inline-flex glass-items-center glass-justify-center glass-gap-2\",\n          \"glass-whitespace-nowrap glass-radius-lg glass-font-medium\",\n          \"glass-transition-all glass-duration-200\",\n          \"focus-visible:outline-none focus-visible:ring-2\",\n          \"focus-visible:ring-primary focus-visible:ring-offset-2\",\n          \"disabled:pointer-events-none disabled:opacity-50\",\n          sizeStyles?.[size],\n          variantStyles?.[variant],\n          className\n        )}\n        disabled={disabled}\n        aria-haspopup=\"menu\"\n        aria-expanded={open}\n        aria-controls={open ? contentId : undefined}\n        data-state={open ? \"open\" : \"closed\"}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        {...props}\n      >\n        {children}\n      </Comp>\n    );\n  }\n);\n\nGlassDropdownMenuTrigger.displayName = \"GlassDropdownMenuTrigger\";\n\n// DropdownMenuContent component\nexport interface GlassDropdownMenuContentProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  align?: \"start\" | \"center\" | \"end\";\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  sideOffset?: number;\n  portalContainer?: HTMLElement | null;\n  portalled?: boolean;\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n  contained?: boolean;\n  forceMount?: boolean;\n}\n\nexport const GlassDropdownMenuContent = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuContentProps\n>(\n  (\n    {\n      className,\n      align = \"end\",\n      side = \"bottom\",\n      sideOffset = 4,\n      children,\n      portalContainer,\n      portalled = true,\n      positionStrategy = \"fixed\",\n      contained = false,\n      forceMount = false,\n      style,\n      onKeyDown,\n      ...props\n    },\n    ref\n  ) => {\n    const { open, setOpen, triggerRef, contentId } = useDropdownMenu();\n    const isContained = contained || positionStrategy === \"contained\";\n\n    if (!open && !forceMount) {\n      return null;\n    }\n\n    const renderContent = (\n      <Motion preset=\"scaleIn\">\n        <Positioner\n          anchorRef={triggerRef}\n          side={side}\n          align={align}\n          sideOffset={isContained ? 0 : sideOffset}\n          contained={isContained}\n          strategy={positionStrategy === \"absolute\" ? \"absolute\" : \"fixed\"}\n        >\n          <DismissableLayer\n            ref={ref}\n            id={contentId}\n            role=\"menu\"\n            tabIndex={-1}\n            aria-orientation=\"vertical\"\n            data-state={open ? \"open\" : \"closed\"}\n            data-side={side}\n            data-position-strategy={\n              isContained ? \"contained\" : positionStrategy\n            }\n            onDismiss={() => setOpen(false)}\n            className={cn(\n              \"glass-z-50 glass-min-w-[8rem] glass-overflow-hidden glass-radius-xl glass-p-1\",\n              \"glass-shadow-lg glass-border glass-border-glass-border/20\",\n              \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n              \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n              \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n              \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n              \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n              isContained && \"glass-w-full glass-max-w-full\",\n              className\n            )}\n            style={{\n              ...(isContained\n                ? {\n                    position: \"absolute\",\n                    left: 0,\n                    top: \"calc(100% + 0.25rem)\",\n                    transform: \"none\",\n                    width: \"max-content\",\n                    minWidth: \"12rem\",\n                    maxWidth: \"min(16rem, calc(100vw - 1rem))\",\n                  }\n                : undefined),\n              ...(style as React.CSSProperties | undefined),\n            }}\n            onKeyDown={(event) => {\n              onKeyDown?.(event);\n              if (event.defaultPrevented) return;\n\n              const items = getFocusableMenuItems(event.currentTarget);\n              if (items.length === 0) return;\n              const activeIndex = items.indexOf(\n                document.activeElement as HTMLElement\n              );\n\n              if (event.key === \"ArrowDown\") {\n                event.preventDefault();\n                items[(activeIndex + 1 + items.length) % items.length]?.focus();\n              } else if (event.key === \"ArrowUp\") {\n                event.preventDefault();\n                items[(activeIndex - 1 + items.length) % items.length]?.focus();\n              } else if (event.key === \"Home\") {\n                event.preventDefault();\n                items[0]?.focus();\n              } else if (event.key === \"End\") {\n                event.preventDefault();\n                items[items.length - 1]?.focus();\n              } else if (event.key === \"Escape\") {\n                event.preventDefault();\n                setOpen(false);\n                triggerRef.current?.focus();\n              }\n            }}\n            {...props}\n          >\n            <FocusScope loop>\n              <OptimizedGlass\n                intent=\"neutral\"\n                elevation=\"level2\"\n                intensity=\"medium\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                animation=\"none\"\n                performanceMode=\"medium\"\n                className=\"glass-p-0 glass-radial-reveal glass-lift\"\n              >\n                {children}\n              </OptimizedGlass>\n            </FocusScope>\n          </DismissableLayer>\n        </Positioner>\n      </Motion>\n    );\n\n    if (!portalled || isContained) {\n      return renderContent;\n    }\n\n    return <Portal container={portalContainer}>{renderContent}</Portal>;\n  }\n);\n\nGlassDropdownMenuContent.displayName = \"GlassDropdownMenuContent\";\n\n// DropdownMenuItem component\nexport interface GlassDropdownMenuItemProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n  variant?: \"default\" | \"destructive\";\n  icon?: React.ReactNode;\n  shortcut?: string;\n  disabled?: boolean;\n  onSelect?: (event: MenuSelectEvent) => void;\n}\n\nexport const GlassDropdownMenuItem = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuItemProps\n>(\n  (\n    {\n      className,\n      variant = \"default\",\n      icon,\n      shortcut,\n      children,\n      disabled = false,\n      onClick,\n      onSelect,\n      ...props\n    },\n    ref\n  ) => {\n    const { setOpen } = useDropdownMenu();\n    const variantStyles = {\n      default:\n        \"glass-text-primary focus:glass-surface-subtle focus:glass-text-primary\",\n      destructive:\n        \"glass-text-danger focus:glass-surface-danger/10 focus:glass-text-danger\",\n    };\n\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      onClick?.(event);\n      if (event.defaultPrevented || disabled) return;\n\n      const selectEvent = new Event(\"glassDropdownMenu.select\", {\n        cancelable: true,\n      }) as MenuSelectEvent;\n      Object.defineProperty(selectEvent, \"currentTarget\", {\n        configurable: true,\n        value: event.currentTarget,\n      });\n      onSelect?.(selectEvent);\n\n      if (!selectEvent.defaultPrevented) {\n        setOpen(false);\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        role=\"menuitem\"\n        tabIndex={disabled ? undefined : -1}\n        aria-disabled={disabled || undefined}\n        data-disabled={disabled ? \"\" : undefined}\n        className={cn(\n          \"glass-relative glass-flex glass-cursor-default glass-select-none glass-items-center glass-radius-lg glass-px-3 glass-py-2 glass-text-sm glass-outline-none\",\n          \"glass-transition-all glass-duration-200 glass-hover--translate-y-0-5\",\n          \"focus:glass-surface-subtle focus:glass-text-primary glass-ring-0\",\n          \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n          variantStyles?.[variant],\n          className\n        )}\n        onClick={handleClick}\n        {...props}\n      >\n        {icon && (\n          <span className=\"glass-mr-3 glass-flex glass-h-4 glass-w-4 glass-items-center glass-justify-center\">\n            {icon}\n          </span>\n        )}\n        <span className=\"glass-flex-1\">{children}</span>\n        {shortcut && (\n          <span className=\"glass-ml-auto glass-text-xs glass-text-secondary\">\n            {shortcut}\n          </span>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassDropdownMenuItem.displayName = \"GlassDropdownMenuItem\";\n\n// DropdownMenuCheckboxItem component\nexport interface GlassDropdownMenuCheckboxItemProps\n  extends Omit<GlassDropdownMenuItemProps, \"checked\"> {\n  checked?: boolean | \"indeterminate\";\n  onCheckedChange?: (checked: boolean) => void;\n}\n\nexport const GlassDropdownMenuCheckboxItem = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuCheckboxItemProps\n>(\n  (\n    {\n      className,\n      checked = false,\n      icon,\n      children,\n      onCheckedChange,\n      onSelect,\n      ...props\n    },\n    ref\n  ) => {\n    const isChecked = checked === true;\n\n    return (\n      <GlassDropdownMenuItem\n        ref={ref}\n        role=\"menuitemcheckbox\"\n        aria-checked={checked === \"indeterminate\" ? \"mixed\" : isChecked}\n        className={cn(\n          \"glass-relative glass-flex glass-cursor-default glass-select-none glass-items-center\",\n          \"glass-radius-lg glass-px-3 glass-py-2 glass-text-sm outline-none\",\n          \"glass-transition-colors glass-duration-200\",\n          \"focus:glass-surface-subtle focus:glass-text-primary\",\n          \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n          className\n        )}\n        onSelect={(event) => {\n          onSelect?.(event);\n          if (!event.defaultPrevented) {\n            onCheckedChange?.(!isChecked);\n          }\n        }}\n        {...props}\n      >\n        <span className=\"glass-absolute glass-left-2 glass-flex glass-h-3-5 glass-w-3-5 glass-items-center glass-justify-center\">\n          {isChecked && <Check className=\"glass-h-3 glass-w-3\" />}\n        </span>\n        {icon && (\n          <span className=\"glass-ml-6 glass-mr-3 glass-flex glass-h-4 glass-w-4 glass-items-center glass-justify-center\">\n            {icon}\n          </span>\n        )}\n        <span className=\"glass-flex-1\">{children}</span>\n      </GlassDropdownMenuItem>\n    );\n  }\n);\n\nGlassDropdownMenuCheckboxItem.displayName = \"GlassDropdownMenuCheckboxItem\";\n\ntype RadioGroupContextValue = {\n  value?: string;\n  onValueChange?: (value: string) => void;\n};\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n  null\n);\n\nexport interface GlassDropdownMenuRadioGroupProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  value?: string;\n  onValueChange?: (value: string) => void;\n}\n\nexport const GlassDropdownMenuRadioGroup = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuRadioGroupProps\n>(({ value, onValueChange, children, ...props }, ref) => (\n  <RadioGroupContext.Provider value={{ value, onValueChange }}>\n    <div ref={ref} role=\"group\" {...props}>\n      {children}\n    </div>\n  </RadioGroupContext.Provider>\n));\n\nGlassDropdownMenuRadioGroup.displayName = \"GlassDropdownMenuRadioGroup\";\n\n// DropdownMenuRadioItem component\nexport interface GlassDropdownMenuRadioItemProps\n  extends GlassDropdownMenuItemProps {\n  value: string;\n}\n\nexport const GlassDropdownMenuRadioItem = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuRadioItemProps\n>(({ className, icon, children, value, onSelect, ...props }, ref) => {\n  const radioGroup = React.useContext(RadioGroupContext);\n  const checked = radioGroup?.value === value;\n\n  return (\n    <GlassDropdownMenuItem\n      ref={ref}\n      role=\"menuitemradio\"\n      aria-checked={checked}\n      className={cn(\n        \"glass-relative glass-flex glass-cursor-default glass-select-none glass-items-center\",\n        \"glass-radius-lg glass-px-3 glass-py-2 glass-text-sm outline-none\",\n        \"glass-transition-colors glass-duration-200\",\n        \"focus:glass-surface-subtle focus:glass-text-primary\",\n        \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n        className\n      )}\n      onSelect={(event) => {\n        onSelect?.(event);\n        if (!event.defaultPrevented) {\n          radioGroup?.onValueChange?.(value);\n        }\n      }}\n      {...props}\n    >\n      <span className=\"glass-absolute glass-left-2 glass-flex glass-h-3-5 glass-w-3-5 glass-items-center glass-justify-center\">\n        {checked && (\n          <div className=\"glass-h-2 glass-w-2 glass-radius-full glass-bg-transparent\" />\n        )}\n      </span>\n      {icon && (\n        <span className=\"glass-ml-6 glass-mr-3 glass-flex glass-h-4 glass-w-4 glass-items-center glass-justify-center\">\n          {icon}\n        </span>\n      )}\n      <span className=\"glass-flex-1\">{children}</span>\n    </GlassDropdownMenuItem>\n  );\n});\n\nGlassDropdownMenuRadioItem.displayName = \"GlassDropdownMenuRadioItem\";\n\n// DropdownMenuLabel component\nexport interface GlassDropdownMenuLabelProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  inset?: boolean;\n}\n\nexport const GlassDropdownMenuLabel = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuLabelProps\n>(({ className, inset = false, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        \"glass-px-2 glass-py-1.5 glass-text-sm glass-font-semibold glass-text-primary\",\n        inset && \"pl-8\",\n        className\n      )}\n      {...props}\n    />\n  );\n});\n\nGlassDropdownMenuLabel.displayName = \"GlassDropdownMenuLabel\";\n\n// DropdownMenuSeparator component\nexport interface GlassDropdownMenuSeparatorProps\n  extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const GlassDropdownMenuSeparator = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => {\n  return (\n    <div\n      ref={ref}\n      role=\"separator\"\n      className={cn(\n        \"-glass-mx-1 glass-my-1 glass-h-px glass-surface-subtle/20\",\n        className\n      )}\n      {...props}\n    />\n  );\n});\n\nGlassDropdownMenuSeparator.displayName = \"GlassDropdownMenuSeparator\";\n\n// DropdownMenuShortcut component (for keyboard shortcuts)\nexport interface GlassDropdownMenuShortcutProps\n  extends React.HTMLAttributes<HTMLSpanElement> {}\n\nexport const GlassDropdownMenuShortcut = forwardRef<\n  HTMLSpanElement,\n  GlassDropdownMenuShortcutProps\n>(({ className, ...props }, ref) => {\n  return (\n    <span\n      ref={ref}\n      className={cn(\n        \"glass-ml-auto glass-text-xs glass-tracking-widest glass-text-secondary\",\n        className\n      )}\n      {...props}\n    />\n  );\n});\n\nGlassDropdownMenuShortcut.displayName = \"GlassDropdownMenuShortcut\";\n\ntype SubMenuContextValue = {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  triggerRef: React.RefObject<HTMLElement>;\n};\n\nconst SubMenuContext = React.createContext<SubMenuContextValue | null>(null);\n\nexport interface GlassDropdownMenuSubProps {\n  children?: React.ReactNode;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n}\n\nexport const GlassDropdownMenuSub = ({\n  children,\n  open,\n  defaultOpen,\n  onOpenChange,\n}: GlassDropdownMenuSubProps) => {\n  const [resolvedOpen, setOpen] = useControllableOpen({\n    open,\n    defaultOpen,\n    onOpenChange,\n  });\n  const triggerRef = React.useRef<HTMLElement>(null);\n  const value = React.useMemo(\n    () => ({ open: resolvedOpen, setOpen, triggerRef }),\n    [resolvedOpen, setOpen]\n  );\n\n  return (\n    <SubMenuContext.Provider value={value}>{children}</SubMenuContext.Provider>\n  );\n};\n\nGlassDropdownMenuSub.displayName = \"GlassDropdownMenuSub\";\n\n// DropdownMenuSubTrigger component\nexport interface GlassDropdownMenuSubTriggerProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  icon?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport const GlassDropdownMenuSubTrigger = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuSubTriggerProps\n>(\n  (\n    {\n      className,\n      icon,\n      children,\n      onPointerEnter,\n      onFocus,\n      onClick,\n      onKeyDown,\n      ...props\n    },\n    ref\n  ) => {\n    const context = React.useContext(SubMenuContext);\n\n    const openSubmenu = () => context?.setOpen(true);\n\n    return (\n      <div\n        ref={composeRefs(ref, context?.triggerRef as React.Ref<HTMLDivElement>)}\n        role=\"menuitem\"\n        aria-haspopup=\"menu\"\n        aria-expanded={context?.open}\n        tabIndex={-1}\n        className={cn(\n          \"glass-flex glass-cursor-default glass-select-none glass-items-center glass-radius-lg glass-px-3 glass-py-2 glass-text-sm glass-outline-none\",\n          \"focus:glass-surface-subtle focus:glass-text-primary\",\n          \"data-[state=open]:glass-surface-subtle data-[state=open]:glass-text-primary\",\n          \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n          className\n        )}\n        data-state={context?.open ? \"open\" : \"closed\"}\n        onPointerEnter={(event) => {\n          onPointerEnter?.(event);\n          if (!event.defaultPrevented) openSubmenu();\n        }}\n        onFocus={(event) => {\n          onFocus?.(event);\n          if (!event.defaultPrevented) openSubmenu();\n        }}\n        onClick={(event) => {\n          onClick?.(event);\n          if (!event.defaultPrevented) context?.setOpen(!context.open);\n        }}\n        onKeyDown={(event) => {\n          onKeyDown?.(event);\n          if (event.defaultPrevented) return;\n          if (\n            event.key === \"ArrowRight\" ||\n            event.key === \"Enter\" ||\n            event.key === \" \"\n          ) {\n            event.preventDefault();\n            context?.setOpen(true);\n          } else if (event.key === \"ArrowLeft\" || event.key === \"Escape\") {\n            event.preventDefault();\n            context?.setOpen(false);\n          }\n        }}\n        {...props}\n      >\n        {icon && (\n          <span className=\"glass-mr-3 glass-flex glass-h-4 glass-w-4 glass-items-center glass-justify-center\">\n            {icon}\n          </span>\n        )}\n        <span className=\"glass-flex-1\">{children}</span>\n        <ChevronRight className=\"glass-ml-auto glass-h-4 glass-w-4\" />\n      </div>\n    );\n  }\n);\n\nGlassDropdownMenuSubTrigger.displayName = \"GlassDropdownMenuSubTrigger\";\n\n// DropdownMenuSubContent component\nexport interface GlassDropdownMenuSubContentProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  portalContainer?: HTMLElement | null;\n  portalled?: boolean;\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n  contained?: boolean;\n  sideOffset?: number;\n  forceMount?: boolean;\n}\n\nexport const GlassDropdownMenuSubContent = forwardRef<\n  HTMLDivElement,\n  GlassDropdownMenuSubContentProps\n>(\n  (\n    {\n      className,\n      children,\n      portalContainer,\n      portalled = true,\n      positionStrategy = \"fixed\",\n      contained = false,\n      sideOffset,\n      forceMount = false,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const context = React.useContext(SubMenuContext);\n    const isContained = contained || positionStrategy === \"contained\";\n    const open = context?.open ?? false;\n\n    if (!open && !forceMount) {\n      return null;\n    }\n\n    const renderContent = (\n      <Positioner\n        anchorRef={context?.triggerRef}\n        side=\"right\"\n        align=\"start\"\n        sideOffset={isContained ? 0 : (sideOffset ?? 4)}\n        contained={isContained}\n        strategy={positionStrategy === \"absolute\" ? \"absolute\" : \"fixed\"}\n      >\n        <DismissableLayer\n          ref={ref}\n          role=\"menu\"\n          data-state={open ? \"open\" : \"closed\"}\n          data-side=\"right\"\n          data-position-strategy={isContained ? \"contained\" : positionStrategy}\n          className={cn(\n            \"glass-z-50 glass-min-w-[8rem] glass-overflow-hidden glass-radius-xl glass-p-1\",\n            \"glass-shadow-lg glass-border glass-border-glass-border/20\",\n            \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n            \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n            \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n            \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n            \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n            isContained && \"glass-w-full glass-max-w-full\",\n            className\n          )}\n          style={{\n            ...(isContained\n              ? {\n                  position: \"absolute\",\n                  left: 0,\n                  top: \"calc(100% + 0.25rem)\",\n                  transform: \"none\",\n                  width: \"max-content\",\n                  minWidth: \"12rem\",\n                  maxWidth: \"min(16rem, calc(100vw - 1rem))\",\n                }\n              : undefined),\n            ...(style as React.CSSProperties | undefined),\n          }}\n          {...props}\n        >\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            className=\"glass-p-0 glass-radial-reveal glass-lift\"\n          >\n            {children}\n          </OptimizedGlass>\n        </DismissableLayer>\n      </Positioner>\n    );\n\n    if (!portalled || isContained) {\n      return renderContent;\n    }\n\n    return <Portal container={portalContainer}>{renderContent}</Portal>;\n  }\n);\n\nGlassDropdownMenuSubContent.displayName = \"GlassDropdownMenuSubContent\";\n\nexport const DropdownMenu = {\n  Root: GlassDropdownMenu,\n  Trigger: GlassDropdownMenuTrigger,\n  Content: GlassDropdownMenuContent,\n  Item: GlassDropdownMenuItem,\n  CheckboxItem: GlassDropdownMenuCheckboxItem,\n  RadioGroup: GlassDropdownMenuRadioGroup,\n  RadioItem: GlassDropdownMenuRadioItem,\n  Label: GlassDropdownMenuLabel,\n  Separator: GlassDropdownMenuSeparator,\n  Sub: GlassDropdownMenuSub,\n  SubTrigger: GlassDropdownMenuSubTrigger,\n  SubContent: GlassDropdownMenuSubContent,\n  Portal,\n};\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useRef,\n  useState,\n  useCallback,\n  useEffect,\n} from \"react\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  LiquidGlassMaterial,\n  type LiquidGlassMaterialProps,\n} from \"../../primitives/LiquidGlassMaterial\";\nimport {\n  type LiquidGlassMaterial as MaterialType,\n  type MaterialVariant,\n} from \"../../tokens/glass\";\nimport { IconButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface HeaderAction {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  onClick?: () => void;\n  href?: string;\n  badge?: string | number;\n  disabled?: boolean;\n}\n\nexport interface UserMenuItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  href?: string;\n  onClick?: () => void;\n  disabled?: boolean;\n  divider?: boolean;\n}\n\nexport interface GlassHeaderProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    ConsciousnessFeatures {\n  /**\n   * Header variant\n   */\n  variant?: \"default\" | \"floating\" | \"sticky\" | \"transparent\";\n  /**\n   * Header size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Material type - standard uses OptimizedGlass, liquid uses LiquidGlassMaterial\n   */\n  material?: MaterialType;\n  /**\n   * Material variant - regular or clear transparency (only for liquid material)\n   */\n  materialVariant?: MaterialVariant;\n  /**\n   * Enable scroll-adaptive density (liquid material only)\n   */\n  scrollAdaptive?: boolean;\n  /**\n   * Left content (logo, brand)\n   */\n  logo?: React.ReactNode;\n  /**\n   * Navigation items\n   */\n  navigation?: React.ReactNode;\n  /**\n   * Header actions\n   */\n  actions?: HeaderAction[];\n  /**\n   * Search configuration\n   */\n  search?: {\n    placeholder?: string;\n    onSearch?: (query: string) => void;\n    suggestions?: string[];\n  };\n  /**\n   * User menu configuration\n   */\n  userMenu?: {\n    user: {\n      name: string;\n      email?: string;\n      avatar?: string;\n      status?: \"online\" | \"away\" | \"busy\" | \"offline\";\n    };\n    items: UserMenuItem[];\n  };\n  /**\n   * Mobile menu toggle\n   */\n  mobileMenuOpen?: boolean;\n  /**\n   * Mobile menu toggle callback\n   */\n  onMobileMenuToggle?: () => void;\n  /**\n   * Breadcrumbs\n   */\n  breadcrumbs?: React.ReactNode;\n  /**\n   * Custom content\n   */\n  children?: React.ReactNode;\n  className?: string;\n}\n\n/**\n * GlassHeader component\n * A glassmorphism header with navigation, search, and user menu\n */\nexport const GlassHeader = forwardRef<HTMLDivElement, GlassHeaderProps>(\n  (\n    {\n      variant = \"default\",\n      size = \"md\",\n      material = \"standard\",\n      materialVariant = \"regular\",\n      scrollAdaptive = true,\n      logo,\n      navigation,\n      actions = [],\n      search,\n      userMenu,\n      mobileMenuOpen = false,\n      onMobileMenuToggle,\n      breadcrumbs,\n      children,\n      className,\n      // Consciousness features\n      predictive = false,\n      preloadContent = false,\n      eyeTracking = false,\n      gazeResponsive = false,\n      adaptive = false,\n      biometricResponsive = false,\n      spatialAudio = false,\n      audioFeedback = false,\n      trackAchievements = false,\n      achievementId,\n      usageContext = \"main\",\n      ...props\n    },\n    ref\n  ) => {\n    const headerRef = useRef<HTMLDivElement>(null);\n    const [isScrolled, setIsScrolled] = useState(false);\n    const [scrollDensity, setScrollDensity] = useState(1.0); // For scroll-adaptive density\n    const [adaptiveSize, setAdaptiveSize] = useState(size);\n    const [predictiveSearchSuggestions, setPredictiveSearchSuggestions] =\n      useState<string[]>([]);\n    const [navigationUsage, setNavigationUsage] = useState<\n      Record<string, number>\n    >({});\n\n    // Consciousness feature hooks - only initialize if features are enabled\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n    const interactionRecorder =\n      predictive || trackAchievements\n        ? useInteractionRecorder(`glass-header-${variant}`)\n        : null;\n    const [searchQuery, setSearchQuery] = useState(\"\");\n    const [isSearchFocused, setIsSearchFocused] = useState(false);\n\n    // Enhanced scroll tracking with adaptive density for liquid glass\n    useEffect(() => {\n      const handleScroll = () => {\n        const scrollY = window.scrollY;\n        const scrolled = scrollY > 10;\n        setIsScrolled(scrolled);\n\n        // Scroll-adaptive density for liquid glass headers\n        if (material === \"liquid\" && scrollAdaptive) {\n          // Increase density (reduce transparency, enhance blur) as user scrolls\n          const maxScrollForDensity = 200; // Max scroll distance for full density\n          const densityFactor = Math.min(scrollY / maxScrollForDensity, 1);\n          const newDensity = 1 + densityFactor * 0.5; // 1.0 to 1.5 density range\n          setScrollDensity(newDensity);\n        }\n\n        // Record scroll interaction\n        if (interactionRecorder && scrolled !== isScrolled) {\n          // Note: recordScroll method may not be available, using recordClick as fallback\n          if (interactionRecorder.recordClick) {\n            interactionRecorder.recordClick({\n              target: \"header\",\n              data: {\n                type: \"scroll\",\n                scrolled,\n                scrollY,\n                density: scrollDensity,\n                material,\n              },\n            } as any);\n          }\n        }\n      };\n\n      window.addEventListener(\"scroll\", handleScroll, { passive: true });\n      return () => window.removeEventListener(\"scroll\", handleScroll);\n    }, [\n      interactionRecorder,\n      isScrolled,\n      material,\n      scrollAdaptive,\n      scrollDensity,\n    ]);\n\n    // Biometric adaptation effects\n    useEffect(() => {\n      if (!biometricResponsive || !biometricAdapter) return;\n\n      const adaptHeader = () => {\n        const stressLevel = biometricAdapter.currentStressLevel;\n\n        // Adapt header size based on stress level\n        if (stressLevel > 0.7) {\n          setAdaptiveSize(\"lg\"); // Larger header when stressed\n        } else if (stressLevel < 0.3) {\n          setAdaptiveSize(\"sm\"); // Compact header when relaxed\n        } else {\n          setAdaptiveSize(size); // Use original size\n        }\n      };\n\n      // Initial adaptation\n      adaptHeader();\n\n      // Listen for biometric changes\n      const interval = setInterval(adaptHeader, ANIMATION.DURATION.slower * 7);\n      return () => clearInterval(interval);\n    }, [biometricResponsive, biometricAdapter, size]);\n\n    // Predictive search suggestions\n    useEffect(() => {\n      if (!predictive || !predictiveEngine || !search) return;\n\n      const updatePredictiveSearch = () => {\n        const predictions = predictiveEngine.predictions;\n        const searchPredictions = predictions\n          .filter((p: any) => p.type === \"suggest\" && p.metadata?.searchQuery)\n          .map((p: any) => p.metadata.searchQuery)\n          .slice(0, 5);\n\n        setPredictiveSearchSuggestions(searchPredictions);\n      };\n\n      // Update every 2 seconds during active search\n      const interval = isSearchFocused\n        ? setInterval(updatePredictiveSearch, ANIMATION.DURATION.slower * 3)\n        : null;\n      updatePredictiveSearch(); // Initial update\n\n      return () => {\n        if (interval) clearInterval(interval);\n      };\n    }, [predictive, predictiveEngine, search, isSearchFocused]);\n\n    // Navigation usage tracking\n    const trackNavigation = useCallback(\n      (navItem: string) => {\n        if (!predictive) return;\n\n        setNavigationUsage((prev: any) => ({\n          ...prev,\n          [navItem]: (prev[navItem] || 0) + 1,\n        }));\n\n        if (interactionRecorder) {\n          interactionRecorder.recordClick({\n            target: `nav-${navItem}`,\n            data: {\n              context: \"header-navigation\",\n            },\n          } as any);\n        }\n\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\"navigation_usage\", {\n            navItem,\n            totalUsage: (navigationUsage[navItem] || 0) + 1,\n          });\n        }\n\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"navigation_click\");\n        }\n      },\n      [\n        predictive,\n        interactionRecorder,\n        achievementTracker,\n        trackAchievements,\n        navigationUsage,\n        spatialAudioEngine,\n        audioFeedback,\n      ]\n    );\n\n    const effectiveSize = biometricResponsive ? adaptiveSize : size;\n\n    const sizeClasses = {\n      sm: \"h-12 glass-px-4\",\n      md: \"h-16 glass-px-6\",\n      lg: \"h-20 glass-px-8\",\n    };\n\n    const variantClasses = {\n      default: \"border-b border-border/20\",\n      floating: \"border border-border/20 glass-radius-lg glass-mx-4 glass-mt-4\",\n      sticky: \"border-b border-border/30 sticky top-0 z-40\",\n      transparent: \"bg-transparent\",\n    };\n\n    // Common props for both material types\n    const commonProps = {\n      ref,\n      className: cn(\n        \"glass-w-full glass-flex glass-items-center glass-justify-between\",\n        \"glass-transition\",\n        sizeClasses?.[effectiveSize],\n        variantClasses?.[variant],\n        variant === \"floating\" ? \"squiricle\" : \"\",\n        // Consciousness feature styles\n        {\n          \"glass-backdrop-blur-sm\":\n            isScrolled && (predictive || gazeResponsive),\n          \"glass-shadow-lg\": gazeResponsive,\n        },\n        className\n      ),\n      // Use utility class instead of inline style\n      // Note: any external style prop is ignored to comply with no-inline-style-attr\n      \"data-overflow\": \"visible\",\n      ...props,\n    };\n\n    const elevation =\n      variant === \"transparent\"\n        ? \"level1\"\n        : variant === \"floating\"\n          ? \"level3\"\n          : \"level2\";\n\n    // Render with LiquidGlassMaterial for enhanced effects\n    if (material === \"liquid\") {\n      return (\n        <LiquidGlassMaterial\n          data-glass-component\n          {...commonProps}\n          material=\"liquid\"\n          variant={materialVariant}\n          intent=\"primary\"\n          elevation={elevation}\n          adaptToContent={true}\n          adaptToMotion={true}\n          enableMicroInteractions={true}\n          // Removed inline style to comply with no-inline-style-attr (opacity adaptation skipped)\n          performanceLevel={variant === \"floating\" ? \"high\" : \"balanced\"}\n          interactive={true}\n          radius={variant === \"floating\" ? \"xl\" : \"lg\"}\n        >\n          {/* Removed extra color overlay to follow global background */}\n          {/* Left section */}\n          <div className=\"glass-flex glass-items-center glass-gap-4\">\n            {/* Mobile menu toggle */}\n            {onMobileMenuToggle && (\n              <IconButton\n                className=\"glass-focus md:glass-hidden\"\n                icon={\n                  <div className=\"glass-w-5 glass-h-5 glass-flex glass-flex-col glass-justify-center glass-gap-1\">\n                    <div\n                      className={cn(\n                        `h-0.5 bg-current transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                        mobileMenuOpen ? \"rotate-45 translate-y-1.5\" : \"w-5\"\n                      )}\n                    />\n                    <div\n                      className={cn(\n                        `h-0.5 bg-current transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                        mobileMenuOpen ? \"opacity-0\" : \"w-5\"\n                      )}\n                    />\n                    <div\n                      className={cn(\n                        `h-0.5 bg-current transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                        mobileMenuOpen ? \"-rotate-45 -translate-y-1.5\" : \"w-5\"\n                      )}\n                    />\n                  </div>\n                }\n                intent=\"neutral\"\n                size=\"sm\"\n                onClick={onMobileMenuToggle}\n                aria-label={mobileMenuOpen ? \"Close menu\" : \"Open menu\"}\n              />\n            )}\n\n            {/* Logo */}\n            {logo && <div className=\"glass-flex-shrink-0\">{logo}</div>}\n\n            {/* Navigation */}\n            {navigation && (\n              <nav className=\"glass-hidden md:glass-block\">{navigation}</nav>\n            )}\n          </div>\n\n          {/* Center section */}\n          <div className=\"glass-flex-1 glass-flex glass-justify-center glass-px-4\">\n            {search && (\n              <div className=\"glass-relative glass-w-full glass-max-w-md\">\n                <GlassInput\n                  placeholder={search.placeholder || \"Search...\"}\n                  value={searchQuery}\n                  onChange={(e) => setSearchQuery(e.target.value)}\n                  onFocus={() => setIsSearchFocused(true)}\n                  onBlur={() => setIsSearchFocused(false)}\n                  leftIcon={\n                    <svg\n                      className=\"glass-w-4 glass-h-4\"\n                      fill=\"none\"\n                      stroke=\"currentColor\"\n                      viewBox=\"0 0 24 24\"\n                    >\n                      <path\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                        strokeWidth={2}\n                        d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                      />\n                    </svg>\n                  }\n                  clearable\n                  onClear={() => setSearchQuery(\"\")}\n                  className=\"glass-w-full\"\n                />\n\n                {/* Search suggestions - combine original and predictive suggestions */}\n                {isSearchFocused &&\n                  ((search.suggestions?.length ?? 0) > 0 ||\n                    predictiveSearchSuggestions.length > 0) && (\n                    <Motion\n                      preset=\"slideDown\"\n                      className=\"glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-1 glass-z-1000\"\n                    >\n                      <OptimizedGlass\n                        intent=\"neutral\"\n                        elevation={\"level4\"}\n                        intensity=\"strong\"\n                        depth={2}\n                        tint=\"neutral\"\n                        border=\"subtle\"\n                        animation=\"none\"\n                        performanceMode=\"high\"\n                        className=\"glass-max-h-60 glass-overflow-y-auto glass-radius-xl\"\n                      >\n                        <div className=\"glass-p-3\">\n                          {/* Predictive suggestions first */}\n                          {predictiveSearchSuggestions.length > 0 && (\n                            <>\n                              <div className=\"glass-text-xs glass-text-primary glass-font-medium glass-mb-2 glass-px-2\">\n                                \uD83E\uDDE0 Predicted\n                              </div>\n                              {predictiveSearchSuggestions.map(\n                                (suggestion, index) => (\n                                  <GlassButton\n                                    key={`predictive-${index}`}\n                                    className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-radius-xl hover:glass-surface-primary/20 glass-transition-colors glass-mb-2 glass-border glass-border\"\n                                    onClick={(e) => {\n                                      setSearchQuery(suggestion);\n                                      search.onSearch?.(suggestion);\n                                      if (interactionRecorder) {\n                                        interactionRecorder.recordClick({\n                                          target:\n                                            \"predictive-search-suggestion\",\n                                          data: {\n                                            value: suggestion,\n                                            type: \"predictive\",\n                                          },\n                                        } as any);\n                                      }\n                                    }}\n                                  >\n                                    <span className=\"glass-text-primary\">\n                                      \uD83D\uDCA1\n                                    </span>{\" \"}\n                                    {suggestion}\n                                  </GlassButton>\n                                )\n                              )}\n                            </>\n                          )}\n\n                          {/* Original suggestions */}\n                          {search.suggestions &&\n                            search.suggestions.length > 0 && (\n                              <>\n                                {predictiveSearchSuggestions.length > 0 && (\n                                  <div className=\"glass-border-t glass-border-white/10 glass-my-2\"></div>\n                                )}\n                                <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-font-medium glass-mb-2 glass-px-2\">\n                                  Recent\n                                </div>\n                                {search.suggestions.map((suggestion, index) => (\n                                  <GlassButton\n                                    key={`original-${index}`}\n                                    className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-radius-xl hover:glass-surface-subtle glass-transition-colors glass-mb-2 last:glass-mb-0\"\n                                    onClick={(e) => {\n                                      setSearchQuery(suggestion);\n                                      search.onSearch?.(suggestion);\n                                      if (interactionRecorder) {\n                                        interactionRecorder.recordClick({\n                                          target: \"search-suggestion\",\n                                          data: {\n                                            value: suggestion,\n                                            type: \"regular\",\n                                          },\n                                        } as any);\n                                      }\n                                    }}\n                                  >\n                                    {suggestion}\n                                  </GlassButton>\n                                ))}\n                              </>\n                            )}\n                        </div>\n                      </OptimizedGlass>\n                    </Motion>\n                  )}\n              </div>\n            )}\n\n            {/* Breadcrumbs */}\n            {breadcrumbs && !search && (\n              <div className=\"glass-flex glass-items-center\">{breadcrumbs}</div>\n            )}\n\n            {/* Custom content */}\n            {children && !search && !breadcrumbs && (\n              <div className=\"glass-flex glass-items-center\">{children}</div>\n            )}\n          </div>\n\n          {/* Right section */}\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            {/* Actions */}\n            {(actions || []).map((action) => (\n              <NotificationButton key={action.id} action={action} />\n            ))}\n\n            {/* User Menu */}\n            {userMenu && <UserMenu {...userMenu} />}\n          </div>\n        </LiquidGlassMaterial>\n      );\n    }\n\n    // Fallback to OptimizedGlass for standard material\n    return (\n      <OptimizedGlass\n        {...commonProps}\n        intent=\"primary\"\n        elevation={elevation}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"lavender\"\n        border={variant === \"floating\" ? \"gradient\" : \"subtle\"}\n        animation=\"none\"\n        performanceMode=\"medium\"\n        role=\"navigation\"\n        aria-label={commonProps[\"aria-label\"] || \"Main navigation\"}\n      >\n        {/* Removed extra color overlay to follow global background */}\n        {/* Left section */}\n        <div className=\"glass-flex glass-items-center glass-gap-4\">\n          {/* Mobile menu toggle */}\n          {onMobileMenuToggle && (\n            <IconButton\n              icon={\n                <div className=\"glass-w-5 glass-h-5 glass-flex glass-flex-col glass-justify-center glass-gap-1\">\n                  <div\n                    className={cn(\n                      \"h-0.5 bg-current transition-all duration-200\",\n                      mobileMenuOpen ? \"rotate-45 translate-y-1.5\" : \"w-5\"\n                    )}\n                  />\n                  <div\n                    className={cn(\n                      \"h-0.5 bg-current transition-all duration-200\",\n                      mobileMenuOpen ? \"opacity-0\" : \"w-5\"\n                    )}\n                  />\n                  <div\n                    className={cn(\n                      \"h-0.5 bg-current transition-all duration-200\",\n                      mobileMenuOpen ? \"-rotate-45 -translate-y-1.5\" : \"w-5\"\n                    )}\n                  />\n                </div>\n              }\n              intent=\"neutral\"\n              size=\"sm\"\n              onClick={onMobileMenuToggle}\n              aria-label={mobileMenuOpen ? \"Close menu\" : \"Open menu\"}\n              className=\"md:glass-hidden\"\n            />\n          )}\n\n          {/* Logo */}\n          {logo && <div className=\"glass-flex-shrink-0\">{logo}</div>}\n\n          {/* Navigation */}\n          {navigation && (\n            <nav className=\"glass-hidden md:glass-block\">{navigation}</nav>\n          )}\n        </div>\n\n        {/* Center section */}\n        <div className=\"glass-flex-1 glass-flex glass-justify-center glass-px-4\">\n          {search && (\n            <div className=\"glass-relative glass-w-full glass-max-w-md\">\n              <GlassInput\n                placeholder={search.placeholder || \"Search...\"}\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                onFocus={() => setIsSearchFocused(true)}\n                onBlur={() => setIsSearchFocused(false)}\n                leftIcon={\n                  <svg\n                    className=\"glass-w-4 glass-h-4\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    viewBox=\"0 0 24 24\"\n                  >\n                    <path\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                      strokeWidth={2}\n                      d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                    />\n                  </svg>\n                }\n                clearable\n                onClear={() => setSearchQuery(\"\")}\n                className=\"glass-w-full\"\n              />\n\n              {/* Search suggestions - combine original and predictive suggestions */}\n              {isSearchFocused &&\n                ((search.suggestions?.length ?? 0) > 0 ||\n                  predictiveSearchSuggestions.length > 0) && (\n                  <Motion\n                    preset=\"slideDown\"\n                    className=\"glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-1 glass-z-1000\"\n                  >\n                    <OptimizedGlass\n                      intent=\"neutral\"\n                      elevation={\"level4\"}\n                      intensity=\"strong\"\n                      depth={2}\n                      tint=\"neutral\"\n                      border=\"subtle\"\n                      animation=\"none\"\n                      performanceMode=\"high\"\n                      className=\"glass-max-h-60 glass-overflow-y-auto glass-radius-xl\"\n                    >\n                      <div className=\"glass-p-3\">\n                        {/* Predictive suggestions first */}\n                        {predictiveSearchSuggestions.length > 0 && (\n                          <>\n                            <div className=\"glass-text-xs glass-text-primary glass-font-medium glass-mb-2 glass-px-2\">\n                              \uD83E\uDDE0 Predicted\n                            </div>\n                            {predictiveSearchSuggestions.map(\n                              (suggestion, index) => (\n                                <GlassButton\n                                  key={`predictive-${index}`}\n                                  className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-radius-xl hover:glass-surface-primary/20 glass-transition-colors glass-mb-2 glass-border glass-border\"\n                                  onClick={(e) => {\n                                    setSearchQuery(suggestion);\n                                    search.onSearch?.(suggestion);\n                                    if (interactionRecorder) {\n                                      interactionRecorder.recordClick({\n                                        target: \"predictive-search-suggestion\",\n                                        data: {\n                                          value: suggestion,\n                                          type: \"predictive\",\n                                        },\n                                      } as any);\n                                    }\n                                  }}\n                                >\n                                  <span className=\"glass-text-primary\">\uD83D\uDCA1</span>{\" \"}\n                                  {suggestion}\n                                </GlassButton>\n                              )\n                            )}\n                          </>\n                        )}\n\n                        {/* Original suggestions */}\n                        {search.suggestions &&\n                          search.suggestions.length > 0 && (\n                            <>\n                              {predictiveSearchSuggestions.length > 0 && (\n                                <div className=\"glass-border-t glass-border-white/10 glass-my-2\"></div>\n                              )}\n                              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-font-medium glass-mb-2 glass-px-2\">\n                                Recent\n                              </div>\n                              {search.suggestions.map((suggestion, index) => (\n                                <GlassButton\n                                  key={`original-${index}`}\n                                  className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-radius-xl hover:glass-surface-subtle glass-transition-colors glass-mb-2 last:glass-mb-0\"\n                                  onClick={(e) => {\n                                    setSearchQuery(suggestion);\n                                    search.onSearch?.(suggestion);\n                                    if (interactionRecorder) {\n                                      interactionRecorder.recordClick({\n                                        target: \"search-suggestion\",\n                                        data: {\n                                          value: suggestion,\n                                          type: \"regular\",\n                                        },\n                                      } as any);\n                                    }\n                                  }}\n                                >\n                                  {suggestion}\n                                </GlassButton>\n                              ))}\n                            </>\n                          )}\n                      </div>\n                    </OptimizedGlass>\n                  </Motion>\n                )}\n            </div>\n          )}\n\n          {/* Breadcrumbs */}\n          {breadcrumbs && !search && (\n            <div className=\"glass-flex glass-items-center\">{breadcrumbs}</div>\n          )}\n\n          {/* Custom content */}\n          {children && !search && !breadcrumbs && (\n            <div className=\"glass-flex glass-items-center\">{children}</div>\n          )}\n        </div>\n\n        {/* Right section */}\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          {/* Actions */}\n          {(actions || []).map((action) => (\n            <NotificationButton key={action.id} action={action} />\n          ))}\n\n          {/* User Menu */}\n          {userMenu && <UserMenu {...userMenu} />}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassHeader.displayName = \"GlassHeader\";\n\n/**\n * NotificationButton component\n */\ninterface NotificationButtonProps {\n  action: HeaderAction;\n}\n\nfunction NotificationButton({ action }: NotificationButtonProps) {\n  const [isOpen, setIsOpen] = useState(false);\n\n  // Close on Escape for accessibility and convenience\n  React.useEffect(() => {\n    if (!isOpen) return;\n    const onKeyDown = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") setIsOpen(false);\n    };\n    window.addEventListener(\"keydown\", onKeyDown);\n    return () => window.removeEventListener(\"keydown\", onKeyDown);\n  }, [isOpen]);\n\n  return (\n    <div className=\"glass-relative\">\n      <GlassButton\n        variant=\"ghost\"\n        flat\n        onClick={(e) => {\n          setIsOpen(!isOpen);\n          action.onClick?.();\n        }}\n        disabled={action.disabled}\n        className={cn(\n          \"relative glass-p-2 glass-radius-md transition-colors glass-focus\",\n          \"hover:bg-white/10\",\n          action.disabled && \"opacity-50 cursor-not-allowed\"\n        )}\n        aria-label={action.label}\n      >\n        <div className=\"glass-w-5 glass-h-5 glass-flex glass-items-center glass-justify-center\">\n          {action.icon}\n        </div>\n        {action.badge && (\n          <span className=\"glass-absolute glass-top-0 glass-right-0 glass-z-20 glass-pointer-events-none glass-surface-danger glass-text-primary glass-text-xs glass-radius-full glass-min-glass-w-4 glass-h-4 glass-flex glass-items-center glass-justify-center glass-px-1 glass-font-semibold glass-shadow-md\">\n            {action.badge}\n          </span>\n        )}\n      </GlassButton>\n\n      {/* Notification Dropdown */}\n      {isOpen && action.id === \"notifications\" && (\n        <Motion\n          preset=\"slideDown\"\n          className=\"glass-absolute glass-top-full glass-right-0 glass-mt-2 glass-z-1000\"\n        >\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation={\"level4\"}\n            intensity=\"strong\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            className=\"glass-w-80 glass-ring-1 glass-ring-white-opacity-10 glass-shadow-[0_12px_40px_color-mix(in_srgb,var(--glass-gray-900)_45%,transparent)] glass-radius-xl\"\n          >\n            <div className=\"glass-p-4\">\n              <h3 className=\"glass-font-semibold glass-text-primary glass-mb-3 glass-flex glass-items-center glass-justify-between\">\n                Notifications\n                <span className=\"glass-text-xs glass-text-primary glass-surface-primary/10 glass-px-2 glass-py-1 glass-radius-full\">\n                  3\n                </span>\n              </h3>\n              <div className=\"glass-gap-3 glass-max-glass-h-64 glass-overflow-y-auto\">\n                <div className=\"glass-p-3 glass-surface-subtle/8 glass-border glass-border-white/15 glass-transition-colors glass-cursor-pointer glass-shadow-[inset_0_1px_0_rgba(255,255,255,0.06)] glass-radius-xl\">\n                  <div className=\"glass-flex glass-items-start glass-justify-between\">\n                    <div>\n                      <p className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                        New evaluation completed\n                      </p>\n                      <p className=\"glass-text-xs glass-text-primary glass-mt-1\">\n                        Customer Support QA Template\n                      </p>\n                    </div>\n                    <span className=\"glass-w-2 glass-h-2 glass-surface-primary glass-radius-full glass-mt-2\"></span>\n                  </div>\n                  <p className=\"glass-text-xs glass-text-primary-opacity-70 glass-mt-2\">\n                    2 minutes ago\n                  </p>\n                </div>\n                <div className=\"glass-p-3 glass-surface-subtle/8 glass-border glass-border-white/15 glass-transition-colors glass-cursor-pointer glass-shadow-[inset_0_1px_0_rgba(255,255,255,0.06)] glass-radius-xl\">\n                  <div className=\"glass-flex glass-items-start glass-justify-between\">\n                    <div>\n                      <p className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                        Model comparison ready\n                      </p>\n                      <p className=\"glass-text-xs glass-text-success glass-mt-1\">\n                        GPT-4 vs Claude-3.5 Sonnet\n                      </p>\n                    </div>\n                    <span className=\"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-mt-2\"></span>\n                  </div>\n                  <p className=\"glass-text-xs glass-text-primary-opacity-70 glass-mt-2\">\n                    15 minutes ago\n                  </p>\n                </div>\n                <div className=\"glass-p-3 glass-surface-subtle/8 glass-border glass-border-white/15 glass-transition-colors glass-cursor-pointer glass-shadow-[inset_0_1px_0_rgba(255,255,255,0.06)] glass-radius-xl\">\n                  <div className=\"glass-flex glass-items-start glass-justify-between\">\n                    <div>\n                      <p className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                        Team member joined\n                      </p>\n                      <p className=\"glass-text-xs glass-text-primary glass-mt-1\">\n                        Sarah Chen joined your organization\n                      </p>\n                    </div>\n                    <span className=\"glass-w-2 glass-h-2 glass-surface-primary glass-radius-full glass-mt-2\"></span>\n                  </div>\n                  <p className=\"glass-text-xs glass-text-primary-opacity-70 glass-mt-2\">\n                    1 hour ago\n                  </p>\n                </div>\n              </div>\n              <div className=\"glass-pt-3 glass-mt-3 glass-border-t glass-border-white/10\">\n                <GlassButton className=\"glass-w-full glass-text-sm glass-text-primary hover:glass-text-secondary glass-font-medium glass-transition-colors glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-[14px]\">\n                  View all notifications\n                </GlassButton>\n              </div>\n            </div>\n          </OptimizedGlass>\n        </Motion>\n      )}\n\n      {/* Backdrop for closing */}\n      {isOpen && (\n        <div\n          className=\"glass-fixed glass-inset-0 glass-z-40\"\n          onClick={(e) => setIsOpen(false)}\n        />\n      )}\n    </div>\n  );\n}\n\n/**\n * UserMenu component\n */\ninterface UserMenuProps {\n  user: {\n    name: string;\n    email?: string;\n    avatar?: string;\n    status?: \"online\" | \"away\" | \"busy\" | \"offline\";\n  };\n  items: UserMenuItem[];\n}\n\nfunction UserMenu({ user, items }: UserMenuProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const triggerRef = useRef<HTMLButtonElement>(null);\n\n  const statusColors = {\n    online: \"glass-surface-success\",\n    away: \"glass-surface-warning\",\n    busy: \"glass-surface-danger\",\n    offline: \"glass-surface-primary\",\n  };\n\n  const handleItemClick = (item: UserMenuItem) => {\n    if (item?.disabled) return;\n\n    item?.onClick?.();\n    setIsOpen(false);\n\n    if (item?.href) {\n      window.location.href = item?.href;\n    }\n  };\n\n  return (\n    <div className=\"glass-relative\">\n      <GlassButton\n        variant=\"ghost\"\n        flat\n        ref={triggerRef}\n        onClick={(e) => setIsOpen(!isOpen)}\n        className=\"glass-flex glass-items-center glass-gap-2 glass-p-1 glass-radius-md hover:glass-surface-subtle/5 active:glass-surface-subtle/10 glass-transition-colors\"\n        aria-expanded={isOpen}\n        aria-haspopup=\"menu\"\n      >\n        <div className=\"glass-relative\">\n          {user.avatar ? (\n            <img\n              src={user.avatar}\n              alt={user.name}\n              className=\"glass-w-8 glass-h-8 glass-radius-full glass-object-cover\"\n            />\n          ) : (\n            <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-primary/20 glass-flex glass-items-center glass-justify-center\">\n              <span\n                className=\"glass-text-sm glass-font-medium\"\n                suppressHydrationWarning\n              >\n                {user.name.charAt(0)}\n              </span>\n            </div>\n          )}\n\n          {user.status && (\n            <div\n              className={cn(\n                \"absolute -bottom-0.5 -right-0.5 w-3 h-3 glass-radius-full border-2 border-background\",\n                statusColors?.[user.status]\n              )}\n            />\n          )}\n        </div>\n\n        <div className=\"glass-hidden sm:glass-block glass-text-left\">\n          <p\n            className=\"glass-text-sm glass-font-medium glass-text-primary\"\n            suppressHydrationWarning\n          >\n            {user.name}\n          </p>\n          {user.email && (\n            <p\n              className=\"glass-text-xs glass-text-primary-opacity-70\"\n              suppressHydrationWarning\n            >\n              {user.email}\n            </p>\n          )}\n        </div>\n\n        <svg\n          className={cn(\n            \"w-4 h-4 transition-transform duration-200\",\n            isOpen ? \"rotate-180\" : \"rotate-0\"\n          )}\n          fill=\"none\"\n          stroke=\"currentColor\"\n          viewBox=\"0 0 24 24\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={2}\n            d=\"M19 9l-7 7-7-7\"\n          />\n        </svg>\n      </GlassButton>\n\n      {/* Dropdown menu */}\n      {isOpen && (\n        <Motion\n          preset=\"slideDown\"\n          className=\"glass-absolute glass-top-full glass-right-0 glass-mt-2 glass-z-1000\"\n        >\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation={\"level4\"}\n            intensity=\"strong\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            className=\"glass-w-80 glass-p-1 glass-ring-1 glass-ring-white-opacity-10 glass-shadow-[0_20px_60px_rgba(2,8,23,0.55)] glass-radius-2xl\"\n          >\n            <FocusTrap active={isOpen} onEscape={() => setIsOpen(false)}>\n              <div className=\"glass-p-3\">\n                {/* User info header */}\n                <div className=\"glass-px-3 glass-py-3 glass-gradient-primary glass-gradient-primary glass-via-white-opacity-3 glass-gradient-primary glass-border glass-border-white/12 glass-radius-[18px] glass-mb-2 glass-shadow-[inset_0_1px_0_rgba(255,255,255,0.08)]\">\n                  <div className=\"glass-flex glass-items-center glass-gap-3\">\n                    {user.avatar ? (\n                      <img\n                        src={user.avatar}\n                        alt={user.name}\n                        className=\"glass-w-10 glass-h-10 glass-radius-full glass-object-cover glass-border-2 glass-border-white/20\"\n                      />\n                    ) : (\n                      <div className=\"glass-w-10 glass-h-10 glass-radius-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-flex glass-items-center glass-justify-center glass-border-2 glass-border-white/20\">\n                        <span\n                          className=\"glass-text-primary glass-font-semibold\"\n                          suppressHydrationWarning\n                        >\n                          {user.name.charAt(0)}\n                        </span>\n                      </div>\n                    )}\n                    <div>\n                      <p\n                        className=\"glass-font-semibold glass-text-primary glass-text-sm\"\n                        suppressHydrationWarning\n                      >\n                        {user.name}\n                      </p>\n                      {user.email && (\n                        <p\n                          className=\"glass-text-xs glass-text-primary\"\n                          suppressHydrationWarning\n                        >\n                          {user.email}\n                        </p>\n                      )}\n                      {user.status && (\n                        <div className=\"glass-flex glass-items-center glass-gap-1 glass-mt-1\">\n                          <span\n                            className={cn(\n                              \"w-2 h-2 glass-radius-full\",\n                              statusColors?.[user.status]\n                            )}\n                          />\n                          <span className=\"glass-text-xs glass-text-primary-opacity-70 glass-capitalize\">\n                            {user.status}\n                          </span>\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </div>\n\n                {/* Menu items */}\n                <div className=\"glass-gap-1\">\n                  {items.map((item) => (\n                    <React.Fragment key={item?.id}>\n                      {item?.divider ? (\n                        <div className=\"glass-my-2 glass-border-t glass-border-white/10\" />\n                      ) : (\n                        <button\n                          type=\"button\"\n                          onClick={(e) => handleItemClick(item)}\n                          disabled={item?.disabled}\n                          className={cn(\n                            \"w-full flex items-center justify-between glass-gap-3 glass-px-3 glass-py-2.5 rounded-[14px]\",\n                            \"glass-text-sm text-left transition-colors\",\n                            item?.id === \"logout\"\n                              ? \"glass-text-danger hover:glass-surface-danger/10\"\n                              : \"glass-text-primary/90 hover:glass-text-primary hover:bg-white/10\",\n                            item?.disabled && \"opacity-50 cursor-not-allowed\"\n                          )}\n                        >\n                          <span className=\"glass-inline-glass-flex glass-items-center glass-gap-3 glass-truncate\">\n                            {item?.icon && (\n                              <span\n                                className={cn(\n                                  \"w-4 h-4 flex items-center justify-center\",\n                                  item?.id === \"logout\"\n                                    ? \"glass-text-danger\"\n                                    : \"glass-text-primary/80\"\n                                )}\n                              >\n                                {item?.icon}\n                              </span>\n                            )}\n                            <span className=\"glass-truncate glass-font-medium\">\n                              {item?.label}\n                            </span>\n                          </span>\n                          {item?.id !== \"logout\" && (\n                            <svg\n                              className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-40\"\n                              fill=\"none\"\n                              stroke=\"currentColor\"\n                              viewBox=\"0 0 24 24\"\n                            >\n                              <path\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                                strokeWidth={2}\n                                d=\"M9 5l7 7-7 7\"\n                              />\n                            </svg>\n                          )}\n                        </button>\n                      )}\n                    </React.Fragment>\n                  ))}\n                </div>\n              </div>\n            </FocusTrap>\n          </OptimizedGlass>\n        </Motion>\n      )}\n\n      {/* Backdrop */}\n      {isOpen && (\n        <div\n          className=\"glass-fixed glass-inset-0 glass-z-40\"\n          onClick={(e) => setIsOpen(false)}\n        />\n      )}\n    </div>\n  );\n}\n\n/**\n * HeaderBreadcrumbs component\n */\nexport interface BreadcrumbItem {\n  label: string;\n  href?: string;\n  onClick?: () => void;\n}\n\nexport interface HeaderBreadcrumbsProps {\n  items: BreadcrumbItem[];\n  separator?: React.ReactNode;\n  className?: string;\n}\n\nexport function HeaderBreadcrumbs({\n  items,\n  separator = \"/\",\n  className,\n}: HeaderBreadcrumbsProps) {\n  return (\n    <nav\n      className={cn(\"flex items-center glass-gap-2 glass-text-sm\", className)}\n      aria-label=\"Breadcrumb\"\n    >\n      <ol className=\"glass-flex glass-items-center glass-gap-2\">\n        {items.map((item, index) => (\n          <li key={index} className=\"glass-flex glass-items-center glass-gap-2\">\n            {index > 0 && (\n              <span className=\"glass-text-secondary\">{separator}</span>\n            )}\n\n            {index === (items?.length || 0) - 1 ? (\n              <span className=\"glass-font-medium glass-text-primary\">\n                {item?.label}\n              </span>\n            ) : item?.href ? (\n              <a\n                href={item?.href}\n                className=\"glass-text-secondary hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                {item?.label}\n              </a>\n            ) : item?.onClick ? (\n              <GlassButton\n                onClick={item?.onClick}\n                className=\"glass-text-secondary hover:glass-text-primary glass-transition-colors\"\n              >\n                {item?.label}\n              </GlassButton>\n            ) : (\n              <span className=\"glass-text-secondary\">{item?.label}</span>\n            )}\n          </li>\n        ))}\n      </ol>\n    </nav>\n  );\n}\n\n/**\n * HeaderNavigation component\n */\nexport interface NavItem {\n  label: string;\n  href?: string;\n  onClick?: () => void;\n  active?: boolean;\n  disabled?: boolean;\n}\n\nexport interface HeaderNavigationProps {\n  items: NavItem[];\n  className?: string;\n}\n\nexport function HeaderNavigation({ items, className }: HeaderNavigationProps) {\n  return (\n    <nav className={className}>\n      <ul className=\"glass-flex glass-items-center glass-gap-1\">\n        {items.map((item, index) => (\n          <li key={index}>\n            {item?.href ? (\n              <a\n                href={item?.href}\n                className={cn(\n                  \"glass-px-3 glass-py-2 glass-radius-md glass-text-sm font-medium transition-colors\",\n                  \"hover:bg-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/20\",\n                  {\n                    \"bg-primary/10 text-primary\": item?.active,\n                    \"glass-text-secondary hover:text-foreground\": !item?.active,\n                    \"opacity-50 cursor-not-allowed\": item?.disabled,\n                  }\n                )}\n                aria-current={item?.active ? \"page\" : undefined}\n              >\n                {item?.label}\n              </a>\n            ) : (\n              <GlassButton\n                onClick={item?.onClick}\n                disabled={item?.disabled}\n                className={cn(\n                  \"glass-px-3 glass-py-2 glass-radius-md glass-text-sm font-medium transition-colors\",\n                  \"hover:bg-muted/50 focus:outline-none focus:ring-2 focus:ring-primary/20\",\n                  {\n                    \"bg-primary/10 text-primary\": item?.active,\n                    \"glass-text-secondary hover:text-foreground\": !item?.active,\n                    \"opacity-50 cursor-not-allowed\": item?.disabled,\n                  }\n                )}\n                aria-current={item?.active ? \"page\" : undefined}\n              >\n                {item?.label}\n              </GlassButton>\n            )}\n          </li>\n        ))}\n      </ul>\n    </nav>\n  );\n}\n\n/**\n * Enhanced GlassHeader with consciousness features enabled by default\n * Use this for headers that should be intelligent and adaptive\n */\nexport const ConsciousGlassHeader = forwardRef<\n  HTMLDivElement,\n  GlassHeaderProps\n>((props, ref) => (\n  <GlassHeader\n    ref={ref}\n    predictive={true}\n    adaptive={true}\n    biometricResponsive={true}\n    trackAchievements={true}\n    achievementId=\"conscious_header_usage\"\n    usageContext=\"main\"\n    {...props}\n  />\n));\n\nConsciousGlassHeader.displayName = \"ConsciousGlassHeader\";\n\n/**\n * Predictive header with intelligent search suggestions and navigation tracking\n */\nexport const PredictiveHeader = forwardRef<HTMLDivElement, GlassHeaderProps>(\n  (props, ref) => (\n    <GlassHeader\n      ref={ref}\n      predictive={true}\n      preloadContent={true}\n      trackAchievements={true}\n      achievementId=\"predictive_header_usage\"\n      usageContext=\"main\"\n      {...props}\n    />\n  )\n);\n\nPredictiveHeader.displayName = \"PredictiveHeader\";\n\n/**\n * Gaze-responsive header with eye tracking for enhanced interactions\n */\nexport const GazeResponsiveHeader = forwardRef<\n  HTMLDivElement,\n  GlassHeaderProps\n>((props, ref) => (\n  <GlassHeader\n    ref={ref}\n    eyeTracking={true}\n    gazeResponsive={true}\n    spatialAudio={true}\n    audioFeedback={true}\n    trackAchievements={true}\n    achievementId=\"gaze_header_interaction\"\n    usageContext=\"main\"\n    {...props}\n  />\n));\n\nGazeResponsiveHeader.displayName = \"GazeResponsiveHeader\";\n\n/**\n * Accessibility-focused header with biometric adaptation and spatial audio\n */\nexport const AccessibleHeader = forwardRef<HTMLDivElement, GlassHeaderProps>(\n  (props, ref) => (\n    <GlassHeader\n      ref={ref}\n      adaptive={true}\n      biometricResponsive={true}\n      spatialAudio={true}\n      audioFeedback={true}\n      trackAchievements={true}\n      achievementId=\"accessible_header_usage\"\n      usageContext=\"main\"\n      {...props}\n    />\n  )\n);\n\nAccessibleHeader.displayName = \"AccessibleHeader\";\n\n/**\n * Pre-configured consciousness header presets\n */\nexport const HeaderConsciousnessPresets = {\n  /**\n   * Minimal consciousness features for performance-sensitive contexts\n   */\n  minimal: {\n    predictive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Balanced consciousness features for general use\n   */\n  balanced: {\n    predictive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Full consciousness features for immersive experiences\n   */\n  immersive: {\n    predictive: true,\n    preloadContent: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Accessibility-focused consciousness features\n   */\n  accessible: {\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n} as const;\n", "\"use client\";\nimport React, { useEffect, useRef, useCallback } from \"react\";\n\nexport interface FocusTrapProps {\n  children: React.ReactNode;\n  /**\n   * Whether the focus trap is active\n   */\n  active?: boolean;\n  /**\n   * Whether to restore focus when trap is deactivated\n   */\n  restoreFocus?: boolean;\n  /**\n   * Whether to focus the first element when trap is activated\n   */\n  autoFocus?: boolean;\n  /**\n   * Whether to allow escape key to deactivate trap\n   */\n  allowEscape?: boolean;\n  /**\n   * Callback when escape is pressed\n   */\n  onEscape?: () => void;\n  /**\n   * Elements to exclude from focus trap\n   */\n  exclude?: string[];\n  /**\n   * Whether to lock scroll when trap is active\n   */\n  lockScroll?: boolean;\n  /**\n   * Custom selector for focusable elements\n   */\n  focusableSelector?: string;\n}\n\nconst DEFAULT_FOCUSABLE_SELECTOR = [\n  \"a[href]:not([disabled])\",\n  \"button:not([disabled])\",\n  \"textarea:not([disabled])\",\n  \"input:not([disabled])\",\n  \"select:not([disabled])\",\n  '[tabindex]:not([tabindex=\"-1\"])',\n  '[contenteditable=\"true\"]',\n  \"audio[controls]\",\n  \"video[controls]\",\n  \"details>summary:first-of-type\",\n  \"details\",\n].join(\",\");\n\n/**\n * FocusTrap component\n * Traps focus within a container for accessibility\n */\nexport function FocusTrap({\n  children,\n  active = true,\n  restoreFocus = true,\n  autoFocus = true,\n  allowEscape = true,\n  onEscape,\n  exclude = [],\n  lockScroll = false,\n  focusableSelector = DEFAULT_FOCUSABLE_SELECTOR,\n}: FocusTrapProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const previousFocusRef = useRef<HTMLElement | null>(null);\n  const sentinelStartRef = useRef<HTMLDivElement>(null);\n  const sentinelEndRef = useRef<HTMLDivElement>(null);\n\n  // Get all focusable elements within the container\n  const getFocusableElements = useCallback(() => {\n    if (!containerRef.current) return [];\n\n    const elements = Array.from(\n      containerRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n    );\n\n    // Filter out excluded elements\n    if (exclude.length > 0) {\n      return elements.filter((el: any) => {\n        return !exclude.some((selector) => el.matches(selector));\n      });\n    }\n\n    return elements.filter((el: any) => {\n      // Check if element is visible and not hidden. Avoid offsetParent here:\n      // fixed-position dialogs and jsdom both commonly report null.\n      const style = window.getComputedStyle(el);\n      return (\n        style.display !== \"none\" &&\n        style.visibility !== \"hidden\" &&\n        style.opacity !== \"0\" &&\n        !el.hasAttribute(\"hidden\") &&\n        el.getAttribute(\"aria-hidden\") !== \"true\"\n      );\n    });\n  }, [focusableSelector, exclude]);\n\n  // Focus the first focusable element\n  const focusFirst = useCallback(() => {\n    const elements = getFocusableElements();\n    if (elements.length > 0) {\n      elements[0].focus();\n    }\n  }, [getFocusableElements]);\n\n  // Focus the last focusable element\n  const focusLast = useCallback(() => {\n    const elements = getFocusableElements();\n    if (elements.length > 0) {\n      elements[elements.length - 1].focus();\n    }\n  }, [getFocusableElements]);\n\n  // Handle tab key navigation\n  const handleTabKey = useCallback(\n    (event: KeyboardEvent) => {\n      if (!active || !containerRef.current) return;\n\n      const focusableElements = getFocusableElements();\n      if (focusableElements.length === 0) return;\n\n      const firstElement = focusableElements[0];\n      const lastElement = focusableElements[focusableElements.length - 1];\n      const activeElement = document.activeElement as HTMLElement;\n\n      // Tab forward\n      if (!event.shiftKey) {\n        if (\n          activeElement === lastElement ||\n          !containerRef.current.contains(activeElement)\n        ) {\n          event.preventDefault();\n          firstElement.focus();\n        }\n      }\n      // Tab backward\n      else {\n        if (\n          activeElement === firstElement ||\n          !containerRef.current.contains(activeElement)\n        ) {\n          event.preventDefault();\n          lastElement.focus();\n        }\n      }\n    },\n    [active, getFocusableElements]\n  );\n\n  // Handle escape key\n  const handleEscapeKey = useCallback(\n    (event: KeyboardEvent) => {\n      if (!active || !allowEscape) return;\n\n      if (event.key === \"Escape\") {\n        event.preventDefault();\n        event.stopPropagation();\n        onEscape?.();\n      }\n    },\n    [active, allowEscape, onEscape]\n  );\n\n  // Handle sentinel focus (for screen readers)\n  const handleSentinelFocus = useCallback(\n    (position: \"start\" | \"end\") => {\n      if (!active) return;\n\n      if (position === \"start\") {\n        focusLast();\n      } else {\n        focusFirst();\n      }\n    },\n    [active, focusFirst, focusLast]\n  );\n\n  // Lock scroll when active\n  useEffect(() => {\n    if (!lockScroll) return;\n\n    if (active) {\n      const scrollY = window.scrollY;\n      const body = document.body;\n      const previousPosition = body.style.position;\n      const previousTop = body.style.top;\n      const previousWidth = body.style.width;\n      const previousOverflow = body.style.overflow;\n\n      body.style.position = \"fixed\";\n      body.style.top = `-${scrollY}px`;\n      body.style.width = \"100%\";\n      body.style.overflow = \"hidden\";\n\n      return () => {\n        body.style.position = previousPosition;\n        body.style.top = previousTop;\n        body.style.width = previousWidth;\n        body.style.overflow = previousOverflow;\n        window.scrollTo(0, scrollY);\n      };\n    }\n  }, [active, lockScroll]);\n\n  // Set up focus trap\n  useEffect(() => {\n    if (!active) return;\n\n    // Store current focus\n    if (restoreFocus) {\n      previousFocusRef.current = document.activeElement as HTMLElement;\n    }\n\n    // Auto focus first element\n    if (autoFocus) {\n      // Use setTimeout to ensure DOM is ready\n      setTimeout(() => {\n        focusFirst();\n      }, 0);\n    }\n\n    // Add event listeners\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Tab\") {\n        handleTabKey(event);\n      } else if (event.key === \"Escape\") {\n        handleEscapeKey(event);\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n\n      // Restore focus\n      if (restoreFocus && previousFocusRef.current) {\n        previousFocusRef.current.focus();\n      }\n    };\n  }, [\n    active,\n    autoFocus,\n    restoreFocus,\n    focusFirst,\n    handleTabKey,\n    handleEscapeKey,\n  ]);\n\n  // Handle focus outside of trap\n  useEffect(() => {\n    if (!active) return;\n\n    const handleFocusIn = (event: FocusEvent) => {\n      const target = event.target as HTMLElement;\n\n      // Check if focus moved outside the container\n      if (containerRef.current && !containerRef.current.contains(target)) {\n        event.preventDefault();\n        event.stopPropagation();\n        focusFirst();\n      }\n    };\n\n    // Use capture phase to intercept focus before it reaches the target\n    document.addEventListener(\"focusin\", handleFocusIn, true);\n\n    return () => {\n      document.removeEventListener(\"focusin\", handleFocusIn, true);\n    };\n  }, [active, focusFirst]);\n\n  if (!active) {\n    return <>{children}</>;\n  }\n\n  return (\n    <>\n      {/* Start sentinel for screen readers */}\n      <div\n        ref={sentinelStartRef}\n        tabIndex={0}\n        onFocus={() => handleSentinelFocus(\"start\")}\n        aria-hidden=\"true\"\n        style={{\n          position: \"fixed\",\n          top: 0,\n          left: 0,\n          width: 1,\n          height: 0,\n          padding: 0,\n          margin: -1,\n          overflow: \"hidden\",\n          clip: \"rect(0, 0, 0, 0)\",\n          whiteSpace: \"nowrap\",\n          border: 0,\n        }}\n      />\n\n      <div ref={containerRef} data-focus-trap=\"true\">\n        {children}\n      </div>\n\n      {/* End sentinel for screen readers */}\n      <div\n        ref={sentinelEndRef}\n        tabIndex={0}\n        onFocus={() => handleSentinelFocus(\"end\")}\n        aria-hidden=\"true\"\n        style={{\n          position: \"fixed\",\n          top: 0,\n          left: 0,\n          width: 1,\n          height: 0,\n          padding: 0,\n          margin: -1,\n          overflow: \"hidden\",\n          clip: \"rect(0, 0, 0, 0)\",\n          whiteSpace: \"nowrap\",\n          border: 0,\n        }}\n      />\n    </>\n  );\n}\n\n/**\n * Hook to create a focus trap programmatically\n */\nexport function useFocusTrap(\n  containerRef: React.RefObject<HTMLElement>,\n  options: Omit<FocusTrapProps, \"children\"> = {}\n) {\n  const {\n    active = true,\n    restoreFocus = true,\n    autoFocus = true,\n    allowEscape = true,\n    onEscape,\n    exclude = [],\n    focusableSelector = DEFAULT_FOCUSABLE_SELECTOR,\n  } = options;\n\n  const previousFocusRef = useRef<HTMLElement | null>(null);\n\n  const getFocusableElements = useCallback(() => {\n    if (!containerRef.current) return [];\n\n    const elements = Array.from(\n      containerRef.current.querySelectorAll<HTMLElement>(focusableSelector)\n    );\n\n    if (exclude.length > 0) {\n      return elements.filter((el: any) => {\n        return !exclude.some((selector) => el.matches(selector));\n      });\n    }\n\n    return elements.filter((el: any) => {\n      const style = window.getComputedStyle(el);\n      return (\n        style.display !== \"none\" &&\n        style.visibility !== \"hidden\" &&\n        style.opacity !== \"0\" &&\n        !el.hasAttribute(\"hidden\") &&\n        el.getAttribute(\"aria-hidden\") !== \"true\"\n      );\n    });\n  }, [containerRef, focusableSelector, exclude]);\n\n  const focusFirst = useCallback(() => {\n    const elements = getFocusableElements();\n    if (elements.length > 0) {\n      elements[0].focus();\n    }\n  }, [getFocusableElements]);\n\n  const focusLast = useCallback(() => {\n    const elements = getFocusableElements();\n    if (elements.length > 0) {\n      elements[elements.length - 1].focus();\n    }\n  }, [getFocusableElements]);\n\n  useEffect(() => {\n    if (!active || !containerRef.current) return;\n\n    if (restoreFocus) {\n      previousFocusRef.current = document.activeElement as HTMLElement;\n    }\n\n    if (autoFocus) {\n      setTimeout(() => {\n        focusFirst();\n      }, 0);\n    }\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (!containerRef.current) return;\n\n      if (event.key === \"Tab\") {\n        const focusableElements = getFocusableElements();\n        if (focusableElements.length === 0) return;\n\n        const firstElement = focusableElements[0];\n        const lastElement = focusableElements[focusableElements.length - 1];\n        const activeElement = document.activeElement as HTMLElement;\n\n        if (!event.shiftKey) {\n          if (activeElement === lastElement) {\n            event.preventDefault();\n            firstElement.focus();\n          }\n        } else {\n          if (activeElement === firstElement) {\n            event.preventDefault();\n            lastElement.focus();\n          }\n        }\n      } else if (event.key === \"Escape\" && allowEscape) {\n        event.preventDefault();\n        onEscape?.();\n      }\n    };\n\n    const handleFocusIn = (event: FocusEvent) => {\n      const target = event.target as HTMLElement;\n\n      if (containerRef.current && !containerRef.current.contains(target)) {\n        event.preventDefault();\n        focusFirst();\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    document.addEventListener(\"focusin\", handleFocusIn, true);\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"focusin\", handleFocusIn, true);\n\n      if (restoreFocus && previousFocusRef.current) {\n        previousFocusRef.current.focus();\n      }\n    };\n  }, [\n    active,\n    containerRef,\n    restoreFocus,\n    autoFocus,\n    allowEscape,\n    onEscape,\n    focusFirst,\n    getFocusableElements,\n  ]);\n\n  return {\n    focusFirst,\n    focusLast,\n    getFocusableElements,\n  };\n}\n", "\"use client\";\n// Removed circular imports - components import directly from source\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport {\n  announceToScreenReader,\n  createFormFieldA11y,\n  useA11yId,\n} from \"../../utils/a11y\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassInputProps extends Omit<\n  React.InputHTMLAttributes<HTMLInputElement>,\n  \"size\"\n> {\n  /**\n   * GlassInput variant\n   */\n  variant?: \"default\" | \"filled\" | \"outlined\" | \"minimal\";\n  /**\n   * GlassInput size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * GlassInput state\n   */\n  state?: \"default\" | \"error\" | \"warning\" | \"success\";\n  /**\n   * Whether input is full width\n   */\n  fullWidth?: boolean;\n  /**\n   * Left icon\n   */\n  leftIcon?: React.ReactNode;\n  /**\n   * Right icon\n   */\n  rightIcon?: React.ReactNode;\n  /**\n   * Helper text\n   */\n  helperText?: string;\n  /**\n   * Error text\n   */\n  errorText?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Clear button\n   */\n  clearable?: boolean;\n  /**\n   * Custom clear function\n   */\n  onClear?: () => void;\n\n  // Accessibility props\n  /**\n   * Accessible label for the input\n   */\n  label?: string;\n  /**\n   * ID of element that labels the input\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element(s) that describe the input\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Whether the input is required\n   */\n  \"aria-required\"?: boolean;\n  /**\n   * Whether the input value is invalid\n   */\n  \"aria-invalid\"?: boolean;\n  /**\n   * ID of error message element\n   */\n  \"aria-errormessage\"?: string;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n}\n\n/**\n * GlassInput component\n * A glassmorphism input field with various states and configurations\n */\nexport const GlassInput = forwardRef<HTMLInputElement, GlassInputProps>(\n  (\n    {\n      variant = \"default\",\n      size = \"md\",\n      state = \"default\",\n      fullWidth = false,\n      leftIcon,\n      rightIcon,\n      helperText,\n      errorText,\n      loading = false,\n      clearable = false,\n      material = \"glass\",\n      materialProps,\n      onClear,\n      className,\n      disabled,\n      label,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"aria-required\": ariaRequired,\n      \"aria-invalid\": ariaInvalid,\n      \"aria-errormessage\": ariaErrorMessage,\n      \"data-testid\": dataTestId,\n      required,\n      ...props\n    },\n    ref\n  ) => {\n    const [isFocused, setIsFocused] = useState(false);\n    const inputRef = useRef<HTMLInputElement | null>(null);\n\n    // Generate unique IDs for accessibility\n    const inputId = useA11yId(\"glass-input\");\n    const helperTextId =\n      helperText || errorText ? useA11yId(\"glass-input-helper\") : undefined;\n    const errorId = errorText ? useA11yId(\"glass-input-error\") : undefined;\n    const labelId = label ? useA11yId(\"glass-input-label\") : undefined;\n\n    const currentState = errorText ? \"error\" : state;\n    const displayHelperText = errorText || helperText;\n    const isInvalid = currentState === \"error\" || ariaInvalid === true;\n    const isRequired = required || ariaRequired === true;\n\n    // Create accessibility attributes\n    const a11yProps = createFormFieldA11y({\n      id: inputId,\n      label: !ariaLabelledBy && !labelId ? label : undefined,\n      description: displayHelperText,\n      error: errorText,\n      required: isRequired,\n      invalid: isInvalid,\n      disabled: disabled || loading,\n      labelId: ariaLabelledBy || labelId,\n      descriptionId: helperTextId,\n      errorId: errorId || ariaErrorMessage,\n    });\n\n    // Add aria-label if no explicit label is provided\n    if (!label && !props[\"aria-label\"] && !ariaLabelledBy) {\n      a11yProps[\"aria-label\"] = props.placeholder || \"Input field\";\n    }\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (errorText) {\n        announceToScreenReader(`Input error: ${errorText}`, \"assertive\");\n      }\n    }, [errorText]);\n\n    const sizeClasses = {\n      sm: \"glass-h-8 glass-px-3 glass-text-sm\",\n      md: \"glass-h-10 glass-px-4 glass-text-sm\",\n      lg: \"glass-h-12 glass-px-5 glass-text-base\",\n    };\n\n    const variantClasses = {\n      default: \"glass-surface-dark/30 glass-border glass-border-white/10\",\n      filled: \"glass-surface-dark/40 glass-border glass-border-transparent\",\n      outlined: \"glass-bg-transparent glass-border glass-border-white/20\",\n      minimal: \"glass-bg-transparent glass-border-0\",\n    };\n\n    const stateClasses = {\n      default: \"focus:glass-border-blue\",\n      error: \"glass-border-red focus:glass-border-red\",\n      warning: \"glass-border-yellow focus:glass-border-yellow\",\n      success: \"glass-border-green focus:glass-border-green\",\n    };\n\n    const iconSize = {\n      sm: \"glass-w-4 glass-h-4\",\n      md: \"glass-w-4 glass-h-4\",\n      lg: \"glass-w-5 glass-h-5\",\n    };\n    const accessibleName =\n      label || props[\"aria-label\"] || props.placeholder || \"input\";\n\n    const setInputRef = useCallback(\n      (node: HTMLInputElement | null) => {\n        inputRef.current = node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref) {\n          (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n            node;\n        }\n      },\n      [ref]\n    );\n\n    const handleClear = () => {\n      if (disabled || loading) return;\n\n      if (inputRef.current) {\n        inputRef.current.value = \"\";\n        inputRef.current.focus();\n      }\n\n      if (onClear) {\n        onClear();\n      } else if (props?.onChange && inputRef.current) {\n        const event = {\n          target: inputRef.current,\n          currentTarget: inputRef.current,\n        } as React.ChangeEvent<HTMLInputElement>;\n        props?.onChange(event);\n      }\n    };\n\n    return (\n      <div\n        data-glass-component\n        data-testid={dataTestId || \"glassinput\"}\n        className={cn(\n          \"glass-relative glass-min-w-0\",\n          { \"glass-w-full\": fullWidth },\n          className\n        )}\n      >\n        {/* Label */}\n        {label && (\n          <label\n            id={labelId}\n            htmlFor={inputId}\n            className={cn(\n              \"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\",\n              isRequired &&\n                'after:content-[\"*\"] after:glass-ml-1 after:text-destructive'\n            )}\n          >\n            {label}\n          </label>\n        )}\n\n        {material === \"liquid\" ? (\n          <LiquidGlassMaterial\n            ior={materialProps?.ior || (isFocused ? 1.46 : 1.43)}\n            thickness={\n              materialProps?.thickness ||\n              (size === \"sm\" ? 5 : size === \"md\" ? 7 : 9)\n            }\n            tint={\n              materialProps?.tint ||\n              (currentState === \"error\"\n                ? { r: 220, g: 38, b: 38, a: 0.08 }\n                : currentState === \"warning\"\n                  ? { r: 217, g: 119, b: 6, a: 0.08 }\n                  : currentState === \"success\"\n                    ? { r: 34, g: 197, b: 94, a: 0.08 }\n                    : { r: 0, g: 0, b: 0, a: 0.04 })\n            }\n            variant={materialProps?.variant || \"clear\"}\n            quality={materialProps?.quality || \"high\"}\n            environmentAdaptation\n            motionResponsive={false}\n            interactive\n            className={cn(\n              \"glass-relative glass-flex glass-items-center glass-transition-all glass-duration-200 liquid-glass-input-surface\",\n              sizeClasses?.[size],\n              variantClasses?.[variant],\n              stateClasses?.[currentState],\n              {\n                \"glass-opacity-50\": disabled,\n                \"glass-ring-2 glass-ring-primary\":\n                  isFocused && currentState === \"default\",\n                \"glass-ring-2 glass-ring-red\":\n                  isFocused && currentState === \"error\",\n                \"glass-ring-2 glass-ring-yellow\":\n                  isFocused && currentState === \"warning\",\n                \"glass-ring-2 glass-ring-green\":\n                  isFocused && currentState === \"success\",\n              },\n              className\n            )}\n            style={{\n              ...({\n                \"--liquid-glass-input-density\": isFocused ? \"0.95\" : \"0.92\",\n                \"--liquid-glass-focus-refraction\": \"1.15\",\n              } as React.CSSProperties),\n              background:\n                \"var(--glass-primary-level3-surface)\",\n              border: \"1px solid rgba(148, 163, 184, 0.24)\",\n              boxShadow:\n                \"0 8px 22px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n            }}\n            data-liquid-glass-input=\"true\"\n            data-input-state={currentState}\n            data-input-focused={isFocused}\n            aria-busy={loading || undefined}\n          >\n            {leftIcon && (\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center glass-mr-3 glass-text-secondary\",\n                  iconSize?.[size]\n                )}\n              >\n                {leftIcon}\n              </div>\n            )}\n\n            <input\n              ref={setInputRef}\n              {...a11yProps}\n              className={cn(\n                \"glass-flex-1 glass-bg-transparent glass-border-0 glass-outline-none glass-pulse-ring glass-text-primary glass-min-w-0\",\n                {\n                  \"glass-pr-8\": clearable || rightIcon || loading,\n                }\n              )}\n              disabled={disabled || loading}\n              onFocus={(e) => {\n                setIsFocused(true);\n                props?.onFocus?.(e);\n              }}\n              onBlur={(e) => {\n                setIsFocused(false);\n                props?.onBlur?.(e);\n              }}\n              {...(() => {\n                const {\n                  variant,\n                  size,\n                  state,\n                  fullWidth,\n                  leftIcon,\n                  rightIcon,\n                  clearable,\n                  loading: _,\n                  loadingText: __,\n                  material: ___,\n                  materialProps: ____,\n                  label: _____,\n                  helperText: ______,\n                  errorText: _______,\n                  successText: ________,\n                  warningText: _________,\n                  description: __________,\n                  ...validProps\n                } = props as any;\n                return validProps;\n              })()}\n            />\n\n            {loading && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                iconOnly\n                disabled\n                aria-label=\"Loading\"\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center glass-text-secondary\",\n                  iconSize?.[size]\n                )}\n              >\n                <div className=\"glass-animate-spin\">\u27F3</div>\n              </GlassButton>\n            )}\n\n            {clearable && props.value && !loading && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                iconOnly\n                onClick={handleClear}\n                aria-label={`Clear ${accessibleName}`}\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center glass-text-secondary hover:glass-text-primary glass-transition-colors\",\n                  iconSize?.[size]\n                )}\n              >\n                \u00D7\n              </GlassButton>\n            )}\n\n            {rightIcon && !loading && (\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center glass-text-secondary\",\n                  iconSize?.[size]\n                )}\n              >\n                {rightIcon}\n              </div>\n            )}\n          </LiquidGlassMaterial>\n        ) : (\n          <OptimizedGlass\n            elevation={isFocused ? \"level2\" : \"level1\"}\n            intensity=\"subtle\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            liftOnHover\n            press\n            style={{\n              background:\n                \"var(--glass-primary-level3-surface)\",\n              border: \"1px solid rgba(148, 163, 184, 0.24)\",\n              boxShadow:\n                \"0 8px 22px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n            }}\n            className={cn(\n              \"glass-relative glass-flex glass-items-center glass-transition-all glass-duration-200 glass-radius-2xl glass-surface-dark/30 glass-border glass-border-white/10\",\n              sizeClasses?.[size],\n              variantClasses?.[variant],\n              stateClasses?.[currentState],\n              {\n                \"glass-opacity-50\": disabled,\n                \"glass-ring-2 glass-ring-primary\":\n                  isFocused && currentState === \"default\",\n                \"glass-ring-2 glass-ring-red\":\n                  isFocused && currentState === \"error\",\n                \"glass-ring-2 glass-ring-yellow\":\n                  isFocused && currentState === \"warning\",\n                \"glass-ring-2 glass-ring-green\":\n                  isFocused && currentState === \"success\",\n              },\n              className\n            )}\n            aria-busy={loading || undefined}\n          >\n            {leftIcon && (\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center glass-mr-3 glass-text-secondary\",\n                  iconSize?.[size]\n                )}\n              >\n                {leftIcon}\n              </div>\n            )}\n\n            <input\n              ref={setInputRef}\n              {...a11yProps}\n              className={cn(\n                \"glass-flex-1 glass-bg-transparent glass-border-0 glass-outline-none glass-pulse-ring glass-text-primary glass-min-w-0\",\n                {\n                  \"glass-pr-8\": clearable || rightIcon || loading,\n                }\n              )}\n              disabled={disabled || loading}\n              onFocus={(e) => {\n                setIsFocused(true);\n                props?.onFocus?.(e);\n              }}\n              onBlur={(e) => {\n                setIsFocused(false);\n                props?.onBlur?.(e);\n              }}\n              {...(() => {\n                const {\n                  variant,\n                  size,\n                  state,\n                  fullWidth,\n                  leftIcon,\n                  rightIcon,\n                  helperText,\n                  errorText,\n                  loading,\n                  clearable,\n                  onClear,\n                  className,\n                  label,\n                  ...validProps\n                } = props as any;\n                return validProps;\n              })()}\n            />\n\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              {loading && (\n                <div\n                  className={cn(\n                    \"glass-animate-spin glass-radius-full glass-border-2 glass-border-white/30 glass-border-t-white/60\",\n                    iconSize?.[size]\n                  )}\n                />\n              )}\n\n              {clearable && props?.value && !loading && (\n                <GlassButton\n                  type=\"button\"\n                  onClick={handleClear}\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  iconOnly\n                  aria-label={`Clear ${accessibleName}`}\n                  className={cn(\n                    \"glass-flex glass-items-center glass-justify-center glass-text-secondary hover:glass-text-primary glass-transition-colors\",\n                    iconSize?.[size]\n                  )}\n                >\n                  \u00D7\n                </GlassButton>\n              )}\n\n              {rightIcon && !loading && (\n                <div\n                  className={cn(\n                    \"glass-flex glass-items-center glass-justify-center glass-text-secondary\",\n                    iconSize?.[size]\n                  )}\n                >\n                  {rightIcon}\n                </div>\n              )}\n            </div>\n          </OptimizedGlass>\n        )}\n\n        {displayHelperText && (\n          <p\n            id={errorText ? errorId : helperTextId}\n            className={cn(\n              \"glass-mt-1 glass-text-xs\",\n              currentState === \"error\"\n                ? \"text-destructive\"\n                : currentState === \"warning\"\n                  ? \"text-warning\"\n                  : currentState === \"success\"\n                    ? \"text-success\"\n                    : \"glass-text-secondary\"\n            )}\n            role={errorText ? \"alert\" : undefined}\n            aria-live={errorText ? \"polite\" : undefined}\n          >\n            {displayHelperText}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassInput.displayName = \"GlassInput\";\n\n// Backward-compat alias exports for legacy imports\nexport { GlassTextarea as GlassTextArea } from \"./GlassTextarea\";\nexport type { GlassTextareaProps as GlassTextAreaProps } from \"./GlassTextarea\";\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useId,\n  useRef,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle } from \"@/icons\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassTextareaProps\n  extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n  /** Textarea variant */\n  variant?: \"default\" | \"filled\" | \"outlined\" | \"minimal\";\n  /** Textarea size */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Textarea state */\n  state?: \"default\" | \"error\" | \"warning\" | \"success\";\n  /** Whether textarea is full width */\n  fullWidth?: boolean;\n  /** Label text */\n  label?: string;\n  /** Helper text */\n  helperText?: string;\n  /** Error text */\n  errorText?: string;\n  /** Whether to auto-resize based on content */\n  autoResize?: boolean;\n  /** Minimum number of rows */\n  minRows?: number;\n  /** Maximum number of rows */\n  maxRows?: number;\n  /** Character count display */\n  showCharCount?: boolean;\n  /** Maximum character count */\n  maxLength?: number;\n  /** Loading state */\n  loading?: boolean;\n  /** Icon to display */\n  icon?: React.ReactNode;\n  /** Data test id */\n  \"data-testid\"?: string;\n}\n\nexport const GlassTextarea = forwardRef<\n  HTMLTextAreaElement,\n  GlassTextareaProps\n>(\n  (\n    {\n      variant = \"default\",\n      size = \"md\",\n      state = \"default\",\n      fullWidth = false,\n      label,\n      helperText,\n      errorText,\n      autoResize = false,\n      minRows = 3,\n      maxRows = 10,\n      showCharCount = false,\n      maxLength,\n      loading = false,\n      icon,\n      className,\n      id,\n      rows = minRows,\n      value,\n      onChange,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n    const generatedId = useId();\n    const textareaId = id || `glass-textarea-${generatedId}`;\n    const setTextareaRef = useCallback(\n      (node: HTMLTextAreaElement | null) => {\n        textareaRef.current = node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref) {\n          (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current =\n            node;\n        }\n      },\n      [ref]\n    );\n\n    const currentLength = typeof value === \"string\" ? value?.length || 0 : 0;\n\n    const sizeConfig = {\n      sm: {\n        text: \"glass-text-sm\",\n        padding: \"glass-px-3 glass-py-2\",\n        minHeight: \"min-h-[80px]\",\n      },\n      md: {\n        text: \"glass-text-sm\",\n        padding: \"glass-px-4 glass-py-3\",\n        minHeight: \"min-h-[100px]\",\n      },\n      lg: {\n        text: \"glass-text-base\",\n        padding: \"glass-px-4 glass-py-4\",\n        minHeight: \"min-h-[120px]\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        base: \"bg-background/50 border border-border/20\",\n        focus: \"focus:border-primary focus:ring-1 focus:ring-primary\",\n      },\n      filled: {\n        base: \"bg-muted/50 border border-transparent\",\n        focus: \"focus:bg-background/50 focus:border-primary\",\n      },\n      outlined: {\n        base: \"bg-transparent border-2 border-border/20\",\n        focus: \"focus:border-primary\",\n      },\n      minimal: {\n        base: \"bg-transparent border-0 border-b border-border/20\",\n        focus: \"focus:border-primary\",\n      },\n    };\n\n    const stateConfig = {\n      default: \"\",\n      error: \"border-red-400 focus:border-red-400 focus:ring-red-400\",\n      warning: \"border-amber-400 focus:border-amber-400 focus:ring-amber-400\",\n      success: \"border-green-400 focus:border-green-400 focus:ring-green-400\",\n    };\n\n    const config = sizeConfig?.[size];\n    const variantStyles = variantConfig?.[variant];\n    const stateStyles = stateConfig?.[state];\n    const hasError = state === \"error\" || !!errorText;\n\n    // Auto-resize functionality\n    useEffect(() => {\n      if (autoResize && textareaRef.current) {\n        const textarea = textareaRef.current;\n        const lineHeight = parseInt(getComputedStyle(textarea).lineHeight);\n        const paddingTop = parseInt(getComputedStyle(textarea).paddingTop);\n        const paddingBottom = parseInt(\n          getComputedStyle(textarea).paddingBottom\n        );\n\n        textarea.style.height = \"auto\";\n        const scrollHeight = textarea.scrollHeight;\n        const minHeight = lineHeight * minRows + paddingTop + paddingBottom;\n        const maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n\n        textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`;\n      }\n    }, [value, autoResize, minRows, maxRows]);\n\n    const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n      onChange?.(event);\n    };\n\n    return (\n      <div\n        data-glass-component\n        className={cn(\n          \"glass-textarea-wrapper\",\n          fullWidth && \"w-full\",\n          className\n        )}\n        data-testid={dataTestId}\n      >\n        {/* Label */}\n        {label && (\n          <label\n            htmlFor={textareaId}\n            className={cn(\n              \"block font-medium text-foreground glass-mb-2\",\n              config.text,\n              props?.disabled && \"opacity-50\"\n            )}\n          >\n            {label}\n            {props?.required && (\n              <span\n                className=\"glass-text-primary glass-ml-1\"\n                aria-label=\"required\"\n              >\n                *\n              </span>\n            )}\n          </label>\n        )}\n\n        {/* Textarea Container */}\n        <div className=\"glass-relative\">\n          <textarea\n            ref={setTextareaRef}\n            id={textareaId}\n            rows={autoResize ? undefined : rows}\n            value={value}\n            onChange={handleChange}\n            maxLength={maxLength}\n            aria-label={!label ? props[\"aria-label\"] || \"Text area\" : undefined}\n            aria-describedby={\n              helperText\n                ? `${textareaId}-helper`\n                : errorText\n                  ? `${textareaId}-error`\n                  : undefined\n            }\n            aria-invalid={hasError}\n            className={cn(\n              \"glass-textarea\",\n              `w-full resize-none glass-radius-lg glass-backdrop-blur-md transition-all duration-[${ANIMATION.DURATION.fast}ms] glass-pulse-ring`,\n              \"placeholder:glass-text-secondary\",\n              \"focus:outline-none focus:ring-offset-2 focus:ring-offset-background\",\n\n              // Size\n              config.text,\n              config.padding,\n              !autoResize && config.minHeight,\n\n              // Variant\n              variantStyles.base,\n              variantStyles.focus,\n\n              // State\n              stateStyles,\n\n              // Disabled\n              props?.disabled && \"opacity-50 cursor-not-allowed\",\n\n              // Loading\n              loading && \"animate-pulse cursor-wait\",\n\n              // Full width\n              fullWidth && \"w-full\"\n            )}\n            {...props}\n          />\n\n          {/* Icon */}\n          {icon && (\n            <div\n              className={cn(\n                \"absolute top-3 right-3 glass-text-secondary\",\n                props?.disabled && \"opacity-50\"\n              )}\n            >\n              {icon}\n            </div>\n          )}\n\n          {/* Error Icon */}\n          {hasError && (\n            <div className=\"glass-absolute glass-top-3 glass-right-3 glass-text-primary\">\n              <AlertCircle className=\"glass-h-5 glass-w-5\" />\n            </div>\n          )}\n        </div>\n\n        {/* Character Count */}\n        {showCharCount && maxLength && (\n          <div\n            className={cn(\n              \"flex justify-end glass-mt-1 glass-text-xs\",\n              currentLength > maxLength * 0.9\n                ? \"text-amber-400\"\n                : \"glass-text-secondary\",\n              currentLength >= maxLength && \"text-red-400\"\n            )}\n          >\n            {currentLength}/{maxLength}\n          </div>\n        )}\n\n        {/* Helper Text */}\n        {helperText && !hasError && (\n          <p\n            id={`${textareaId}-helper`}\n            className={cn(\n              \"glass-mt-2 glass-text-xs glass-text-secondary\",\n              props?.disabled && \"opacity-50\"\n            )}\n          >\n            {helperText}\n          </p>\n        )}\n\n        {/* Error Text */}\n        {errorText && (\n          <p\n            id={`${textareaId}-error`}\n            className=\"glass-mt-2 glass-text-xs glass-text-primary glass-flex glass-items-center glass-gap-1\"\n          >\n            <AlertCircle className=\"glass-h-3 glass-w-3\" />\n            {errorText}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassTextarea.displayName = \"GlassTextarea\";\n\nexport default GlassTextarea;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ChevronRight } from \"@/icons\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport {\n  GlassMenuPrimitiveContent,\n  GlassMenuPrimitiveItem,\n  GlassMenuPrimitiveRoot,\n} from \"./GlassMenuPrimitive\";\n\nexport interface MenuItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  shortcut?: string;\n  disabled?: boolean;\n  children?: MenuItem[];\n  action?: () => void;\n  separator?: boolean;\n  checked?: boolean;\n  type?: \"normal\" | \"checkbox\" | \"radio\";\n  group?: string;\n}\n\nexport interface GlassMenubarProps {\n  /**\n   * Menu items\n   */\n  items?: MenuItem[];\n  /**\n   * Menubar orientation\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Whether menubar is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Accessible label for the menubar\n   */\n  \"aria-label\"?: string;\n  /**\n   * Test ID for testing\n   */\n  \"data-testid\"?: string;\n  positionStrategy?: \"absolute\" | \"contained\";\n  contained?: boolean;\n}\n\nexport interface GlassMenubarContentProps {\n  /**\n   * Menu content\n   */\n  children: React.ReactNode;\n  /**\n   * Content position\n   */\n  position?: { x: number; y: number };\n  /**\n   * Whether content is open\n   */\n  isOpen: boolean;\n  /**\n   * Callback to close content\n   */\n  onClose: () => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  positionStrategy?: \"absolute\" | \"contained\";\n}\n\nexport interface GlassMenubarItemProps {\n  /**\n   * Menu item data\n   */\n  item: MenuItem;\n  /**\n   * Whether item is hovered\n   */\n  isHovered?: boolean;\n  /**\n   * Whether item has submenu open\n   */\n  hasSubmenuOpen?: boolean;\n  /**\n   * Callback when item is clicked\n   */\n  onClick: (item: MenuItem) => void;\n  /**\n   * Callback to open submenu\n   */\n  onOpenSubmenu: (item: MenuItem) => void;\n  /**\n   * Callback to close submenu\n   */\n  onCloseSubmenu: () => void;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * ARIA haspopup attribute\n   */\n  \"aria-haspopup\"?: \"menu\" | undefined;\n  /**\n   * ARIA expanded attribute\n   */\n  \"aria-expanded\"?: boolean | undefined;\n}\n\n/**\n * GlassMenubar component\n * A glassmorphism menubar with dropdown menus\n */\nexport const GlassMenubar: React.FC<GlassMenubarProps> = ({\n  items = [],\n  orientation = \"horizontal\",\n  size = \"md\",\n  className,\n  disabled = false,\n  positionStrategy = \"absolute\",\n  contained = false,\n  \"aria-label\": ariaLabel = \"Menu bar\",\n  \"data-testid\": dataTestId,\n}) => {\n  const [openMenus, setOpenMenus] = useState<Set<string>>(new Set());\n  const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n\n  const handleItemClick = (item: MenuItem) => {\n    if (item?.disabled) return;\n\n    if (item?.children && item?.children.length > 0) {\n      // Toggle submenu\n      setOpenMenus((prev: Set<string>) => {\n        const newSet = new Set(prev);\n        if (newSet.has(item?.id)) {\n          newSet.delete(item?.id);\n        } else {\n          // Close other menus\n          newSet.clear();\n          newSet.add(item?.id);\n        }\n        return newSet;\n      });\n    } else {\n      // Execute action and close all menus\n      item?.action?.();\n      setOpenMenus(new Set());\n    }\n  };\n\n  const handleMouseEnter = (item: MenuItem) => {\n    if (item?.disabled) return;\n    setHoveredItem(item?.id);\n  };\n\n  const handleMouseLeave = () => {\n    setHoveredItem(null);\n  };\n\n  const sizeClasses = {\n    sm: \"h-8 glass-px-3 glass-text-sm\",\n    md: \"h-10 glass-px-4 glass-text-base\",\n    lg: \"h-12 glass-px-6 glass-text-lg\",\n  };\n\n  return (\n    <GlassMenuPrimitiveRoot\n      data-testid={dataTestId}\n      orientation={orientation}\n      disabled={disabled}\n      className={cn(className)}\n      aria-label={ariaLabel}\n    >\n      {items.map((item, index) => (\n        <React.Fragment key={item?.id}>\n          {item?.separator && (\n            <div\n              className={cn(\n                \"bg-white/20\",\n                orientation === \"horizontal\"\n                  ? \"w-px h-6 glass-mx-2\"\n                  : \"h-px w-6 glass-my-2\"\n              )}\n            />\n          )}\n\n          <GlassMenubarItem\n            item={item}\n            isHovered={hoveredItem === item?.id}\n            hasSubmenuOpen={openMenus.has(item?.id)}\n            onClick={handleItemClick}\n            onOpenSubmenu={(item) =>\n              setOpenMenus((prev: any) => new Set([...prev, item?.id]))\n            }\n            onCloseSubmenu={() => setOpenMenus(new Set())}\n            size={size}\n            aria-haspopup={\n              item?.children && item?.children.length > 0 ? \"menu\" : undefined\n            }\n            aria-expanded={openMenus.has(item?.id) ? true : undefined}\n          />\n\n          {/* Submenu */}\n          {item?.children && openMenus.has(item?.id) && (\n            <GlassMenubarContent\n              isOpen={true}\n              onClose={() => setOpenMenus(new Set())}\n              positionStrategy={contained ? \"contained\" : positionStrategy}\n              className={cn(\n                \"absolute glass-z-9999\",\n                orientation === \"horizontal\"\n                  ? \"top-full left-0 glass-mt-1\"\n                  : \"top-0 left-full glass-ml-1\"\n              )}\n            >\n              <GlassMenubar\n                items={item?.children}\n                orientation=\"vertical\"\n                size={size}\n                disabled={disabled}\n                positionStrategy={contained ? \"contained\" : positionStrategy}\n                contained={contained}\n              />\n            </GlassMenubarContent>\n          )}\n        </React.Fragment>\n      ))}\n    </GlassMenuPrimitiveRoot>\n  );\n};\n\n/**\n * GlassMenubarContent component\n * Container for menubar dropdown content\n */\nexport const GlassMenubarContent: React.FC<GlassMenubarContentProps> = ({\n  children,\n  position,\n  isOpen,\n  onClose,\n  className,\n  positionStrategy = \"absolute\",\n}) => {\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  // Handle outside click\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      if (\n        contentRef.current &&\n        !contentRef.current.contains(e.target as Node) &&\n        isOpen\n      ) {\n        onClose();\n      }\n    };\n\n    if (isOpen) {\n      document.addEventListener(\"mousedown\", handleClickOutside);\n    }\n\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, [isOpen, onClose]);\n\n  // Handle escape key\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\" && isOpen) {\n        onClose();\n      }\n    };\n\n    if (isOpen) {\n      document.addEventListener(\"keydown\", handleEscape);\n    }\n\n    return () => document.removeEventListener(\"keydown\", handleEscape);\n  }, [isOpen, onClose]);\n\n  if (!isOpen) return null;\n\n  const positionStyle = position\n    ? {\n        left: position.x,\n        top: position.y,\n      }\n    : undefined;\n\n  return (\n    <Motion\n      preset=\"scaleIn\"\n      duration={150}\n      style={{ ...(positionStyle || {}) }}\n    >\n      <GlassMenuPrimitiveContent\n        ref={contentRef}\n        className={className}\n        positionStrategy={positionStrategy}\n        onDismiss={onClose}\n      >\n        {children}\n      </GlassMenuPrimitiveContent>\n    </Motion>\n  );\n};\n\n/**\n * GlassMenubarItem component\n * Individual menubar item\n */\nexport const GlassMenubarItem: React.FC<GlassMenubarItemProps> = ({\n  item,\n  isHovered = false,\n  hasSubmenuOpen = false,\n  onClick,\n  onOpenSubmenu,\n  onCloseSubmenu,\n  size = \"md\",\n  className,\n  \"aria-haspopup\": ariaHasPopup,\n  \"aria-expanded\": ariaExpanded,\n}) => {\n  const sizeClasses = {\n    sm: \"h-8 glass-px-3 glass-text-sm\",\n    md: \"h-10 glass-px-4 glass-text-base\",\n    lg: \"h-12 glass-px-6 glass-text-lg\",\n  };\n\n  const handleClick = () => {\n    onClick(item);\n  };\n\n  const handleMouseEnter = () => {\n    if (item?.children && item?.children.length > 0) {\n      onOpenSubmenu(item);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    onCloseSubmenu();\n  };\n\n  if (item?.separator) {\n    return (\n      <div\n        className=\"glass-h-px glass-surface-subtle/20 glass-mx-2 glass-my-1\"\n        role=\"separator\"\n      />\n    );\n  }\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n    const current = e.currentTarget;\n    const menubar = current.closest('[role=\"menubar\"]') as HTMLElement | null;\n    if (!menubar) return;\n    const items = Array.from(\n      menubar.querySelectorAll('button[role=\"menuitem\"]')\n    ) as HTMLButtonElement[];\n    const index = items.indexOf(current);\n    if (index === -1) return;\n\n    if (e.key === \"ArrowRight\") {\n      items[(index + 1) % (items?.length || 0)]?.focus();\n      e.preventDefault();\n    } else if (e.key === \"ArrowLeft\") {\n      items[(index - 1 + (items?.length || 0)) % (items?.length || 0)]?.focus();\n      e.preventDefault();\n    } else if (\n      e.key === \"ArrowDown\" &&\n      item?.children &&\n      item?.children.length > 0\n    ) {\n      onOpenSubmenu(item);\n      e.preventDefault();\n    } else if (e.key === \"Escape\") {\n      onCloseSubmenu();\n      current.blur();\n      e.preventDefault();\n    } else if (e.key === \"Home\") {\n      items[0]?.focus();\n      e.preventDefault();\n    } else if (e.key === \"End\") {\n      items[items.length - 1]?.focus();\n      e.preventDefault();\n    } else if (e.key === \"Enter\" || e.key === \" \") {\n      handleClick();\n      e.preventDefault();\n    }\n  };\n\n  return (\n    <GlassMenuPrimitiveItem\n      className={cn(\n        \"after:absolute after:left-0 after:bottom-0 after:h-0.5 after:bg-primary after:transition-all after:duration-200\",\n        isHovered || hasSubmenuOpen\n          ? \"after:opacity-100 after:w-full\"\n          : \"after:opacity-0 after:w-0\",\n        sizeClasses?.[size],\n        {\n          \"bg-white/20 glass-text-primary\": isHovered || hasSubmenuOpen,\n          \"font-medium\": item?.checked,\n        },\n        className\n      )}\n      onClick={handleClick}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      disabled={item?.disabled}\n      type=\"button\"\n      role=\"menuitem\"\n      aria-haspopup={ariaHasPopup}\n      aria-expanded={ariaExpanded}\n      aria-disabled={item?.disabled}\n      aria-checked={\n        item?.type === \"checkbox\" || item?.type === \"radio\"\n          ? item?.checked\n          : undefined\n      }\n      onKeyDown={handleKeyDown}\n    >\n      <div className=\"glass-flex glass-items-center glass-gap-3\">\n        {/* Icon */}\n        {item?.icon && (\n          <div className=\"glass-flex glass-items-center glass-justify-center glass-w-4 glass-h-4\">\n            {item?.icon}\n          </div>\n        )}\n\n        {/* Checkbox/Radio indicator */}\n        {item?.type === \"checkbox\" && (\n          <div\n            className={cn(\n              \"w-4 h-4 border border-white/40 glass-radius-md\",\n              item?.checked && \"bg-white border-white\"\n            )}\n          >\n            {item?.checked && (\n              <div className=\"glass-w-full glass-h-full glass-flex glass-items-center glass-justify-center\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-dark glass-radius-sm\" />\n              </div>\n            )}\n          </div>\n        )}\n\n        {item?.type === \"radio\" && (\n          <div\n            className={cn(\n              \"w-4 h-4 border border-white/40 glass-radius-full\",\n              item?.checked && \"border-white\"\n            )}\n          >\n            {item?.checked && (\n              <div className=\"glass-w-full glass-h-full glass-flex glass-items-center glass-justify-center\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-subtle glass-radius-full\" />\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Label */}\n        <span className=\"glass-flex-1 glass-text-left glass-truncate\">\n          {item?.label}\n        </span>\n      </div>\n\n      <div className=\"glass-flex glass-items-center glass-gap-2\">\n        {/* Shortcut */}\n        {item?.shortcut && (\n          <span className=\"glass-text-primary-glass-opacity-50 glass-text-xs glass-font-mono\">\n            {item?.shortcut}\n          </span>\n        )}\n\n        {/* Submenu indicator */}\n        {item?.children && item?.children.length > 0 && (\n          <ChevronRight className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-50\" />\n        )}\n      </div>\n    </GlassMenuPrimitiveItem>\n  );\n};\n\n/**\n * Hook for creating menubar items\n */\nexport const useMenubar = () => {\n  const createItem = (\n    id: string,\n    label: string,\n    action?: () => void,\n    options?: Partial<Omit<MenuItem, \"id\" | \"label\" | \"action\">>\n  ): MenuItem => ({\n    id,\n    label,\n    action,\n    ...options,\n  });\n\n  const createSeparator = (): MenuItem => ({\n    id: `separator-${Date.now()}`,\n    label: \"\",\n    separator: true,\n  });\n\n  const createCheckboxItem = (\n    id: string,\n    label: string,\n    checked: boolean,\n    onChange: (checked: boolean) => void,\n    options?: Partial<Omit<MenuItem, \"id\" | \"label\" | \"type\" | \"checked\">>\n  ): MenuItem => ({\n    id,\n    label,\n    type: \"checkbox\",\n    checked,\n    action: () => onChange(!checked),\n    ...options,\n  });\n\n  const createRadioItem = (\n    id: string,\n    label: string,\n    checked: boolean,\n    onChange: (checked: boolean) => void,\n    options?: Partial<Omit<MenuItem, \"id\" | \"label\" | \"type\" | \"checked\">>\n  ): MenuItem => ({\n    id,\n    label,\n    type: \"radio\",\n    checked,\n    action: () => onChange(!checked),\n    ...options,\n  });\n\n  return {\n    createItem,\n    createSeparator,\n    createCheckboxItem,\n    createRadioItem,\n  };\n};\n\n/**\n * Preset menubar configurations\n */\nexport const createFileMenu = (): MenuItem[] => [\n  {\n    id: \"file-new\",\n    label: \"New\",\n    shortcut: \"Ctrl+N\",\n    action: () => {\n      // New file action - implement based on your needs\n    },\n  },\n  {\n    id: \"file-open\",\n    label: \"Open\",\n    shortcut: \"Ctrl+O\",\n    action: () => {\n      // Open file action - implement based on your needs\n    },\n  },\n  {\n    id: \"file-separator-1\",\n    label: \"\",\n    separator: true,\n  },\n  {\n    id: \"file-save\",\n    label: \"Save\",\n    shortcut: \"Ctrl+S\",\n    action: () => {\n      // Save file action - implement based on your needs\n    },\n  },\n  {\n    id: \"file-save-as\",\n    label: \"Save As\",\n    shortcut: \"Ctrl+Shift+S\",\n    action: () => {\n      // Save as action - implement based on your needs\n    },\n  },\n];\n\nexport const createEditMenu = (): MenuItem[] => [\n  {\n    id: \"edit-undo\",\n    label: \"Undo\",\n    shortcut: \"Ctrl+Z\",\n    action: () => {\n      // Undo action - implement based on your needs\n    },\n  },\n  {\n    id: \"edit-redo\",\n    label: \"Redo\",\n    shortcut: \"Ctrl+Y\",\n    action: () => {\n      // Redo action - implement based on your needs\n    },\n  },\n  {\n    id: \"edit-separator-1\",\n    label: \"\",\n    separator: true,\n  },\n  {\n    id: \"edit-cut\",\n    label: \"Cut\",\n    shortcut: \"Ctrl+X\",\n    action: () => {\n      // Cut action - implement based on your needs\n    },\n  },\n  {\n    id: \"edit-copy\",\n    label: \"Copy\",\n    shortcut: \"Ctrl+C\",\n    action: () => {\n      // Copy action - implement based on your needs\n    },\n  },\n  {\n    id: \"edit-paste\",\n    label: \"Paste\",\n    shortcut: \"Ctrl+V\",\n    action: () => {\n      // Paste action - implement based on your needs\n    },\n  },\n];\n", "\"use client\";\n\nimport React from \"react\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { DismissableLayer, FocusScope, OptimizedGlass } from \"../../primitives\";\n\nexport interface GlassMenuPrimitiveRootProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  orientation?: \"horizontal\" | \"vertical\";\n  disabled?: boolean;\n}\n\nexport const GlassMenuPrimitiveRoot = React.forwardRef<\n  HTMLDivElement,\n  GlassMenuPrimitiveRootProps\n>(\n  (\n    {\n      children,\n      className,\n      orientation = \"horizontal\",\n      disabled = false,\n      ...props\n    },\n    ref\n  ) => (\n    <OptimizedGlass\n      ref={ref}\n      data-glass-component\n      intent=\"neutral\"\n      elevation=\"level2\"\n      intensity=\"medium\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation=\"none\"\n      performanceMode=\"medium\"\n      className={cn(\n        \"relative glass-backdrop-blur-md ring-1 ring-white/10 bg-white/5\",\n        orientation === \"horizontal\" ? \"flex flex-row\" : \"flex flex-col\",\n        disabled && \"opacity-50 pointer-events-none\",\n        className\n      )}\n      role=\"menubar\"\n      aria-orientation={orientation}\n      aria-disabled={disabled}\n      {...props}\n    >\n      {children}\n    </OptimizedGlass>\n  )\n);\n\nGlassMenuPrimitiveRoot.displayName = \"GlassMenuPrimitiveRoot\";\n\nexport interface GlassMenuPrimitiveContentProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  open?: boolean;\n  onDismiss?: () => void;\n  positionStrategy?: \"absolute\" | \"contained\";\n}\n\nexport const GlassMenuPrimitiveContent = React.forwardRef<\n  HTMLDivElement,\n  GlassMenuPrimitiveContentProps\n>(\n  (\n    {\n      children,\n      className,\n      open = true,\n      onDismiss,\n      positionStrategy = \"absolute\",\n      ...props\n    },\n    ref\n  ) => {\n    if (!open) return null;\n\n    return (\n      <DismissableLayer\n        ref={ref}\n        role=\"menu\"\n        data-position-strategy={positionStrategy}\n        onDismiss={onDismiss}\n        className={cn(\n          \"glass-backdrop-blur-lg bg-white/10 border border-white/20 shadow-2xl\",\n          \"min-w-48 glass-py-1\",\n          className\n        )}\n        {...props}\n      >\n        <FocusScope loop>{children}</FocusScope>\n      </DismissableLayer>\n    );\n  }\n);\n\nGlassMenuPrimitiveContent.displayName = \"GlassMenuPrimitiveContent\";\n\nexport interface GlassMenuPrimitiveItemProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  inset?: boolean;\n}\n\nexport const GlassMenuPrimitiveItem = React.forwardRef<\n  HTMLButtonElement,\n  GlassMenuPrimitiveItemProps\n>(({ children, className, inset = false, type = \"button\", ...props }, ref) => (\n  <button\n    ref={ref}\n    type={type}\n    className={cn(\n      \"relative flex items-center justify-between w-full\",\n      \"glass-text-primary/80 hover:glass-text-primary transition-colors duration-200\",\n      \"hover:bg-white/10 glass-radius-md glass-hover--translate-y-0-5\",\n      \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30 focus:ring-offset-2 focus:ring-offset-transparent\",\n      \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n      inset && \"glass-pl-8\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n  </button>\n));\n\nGlassMenuPrimitiveItem.displayName = \"GlassMenuPrimitiveItem\";\n\nexport const GlassMenuPrimitive = {\n  Root: GlassMenuPrimitiveRoot,\n  Content: GlassMenuPrimitiveContent,\n  Item: GlassMenuPrimitiveItem,\n};\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton, IconButton } from \"../button/GlassButton\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\nimport { HStack, VStack } from \"../layout/GlassStack\";\n\nexport interface MobileNavItem {\n  id: string;\n  label: string;\n  icon: React.ReactNode;\n  href?: string;\n  onClick?: () => void;\n  badge?: string | number;\n  badgeVariant?:\n    | \"default\"\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"warning\"\n    | \"error\";\n  disabled?: boolean;\n  children?: MobileNavItem[];\n}\n\nexport interface MobileNavSection {\n  id: string;\n  label?: string;\n  items: MobileNavItem[];\n}\n\nexport interface GlassMobileNavProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Whether mobile nav is open\n   */\n  open?: boolean;\n  /**\n   * Open state change handler\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Navigation variant\n   */\n  variant?: \"overlay\" | \"push\" | \"slide\";\n  /**\n   * Navigation position\n   */\n  position?: \"left\" | \"right\" | \"top\" | \"bottom\";\n  /**\n   * Glass elevation\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Logo/brand component\n   */\n  logo?: React.ReactNode;\n  /**\n   * Navigation title\n   */\n  title?: string;\n  /**\n   * Navigation sections\n   */\n  navigation?: MobileNavSection[];\n  /**\n   * Current active path\n   */\n  activePath?: string;\n  /**\n   * Path matcher function\n   */\n  isActive?: (href: string, activePath: string) => boolean;\n  /**\n   * Footer content\n   */\n  footer?: React.ReactNode;\n  /**\n   * Close on item click\n   */\n  closeOnClick?: boolean;\n  /**\n   * Show backdrop\n   */\n  showBackdrop?: boolean;\n  /**\n   * Custom item renderer\n   */\n  renderItem?: (item: MobileNavItem, level: number) => React.ReactNode;\n}\n\n/**\n * GlassMobileNav component\n * Mobile-first navigation with glassmorphism design\n */\nexport const GlassMobileNav = forwardRef<HTMLDivElement, GlassMobileNavProps>(\n  (\n    {\n      open = false,\n      onOpenChange,\n      variant = \"overlay\",\n      position = \"left\",\n      elevation = \"modal\",\n      logo,\n      title,\n      navigation = [],\n      activePath = \"\",\n      isActive,\n      footer,\n      closeOnClick = true,\n      showBackdrop = true,\n      renderItem,\n      className,\n      children,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n    const previousBodyOverflowRef = useRef<string | null>(null);\n    const prefersReducedMotion = useReducedMotion();\n\n    // Default active path matcher\n    const defaultIsActive = (href: string, currentPath: string) => {\n      if (href === \"/\") return currentPath === \"/\";\n      return currentPath.startsWith(href);\n    };\n\n    const checkIsActive = isActive || defaultIsActive;\n\n    // Position classes\n    const positionClasses = {\n      left: {\n        overlay: \"fixed inset-y-0 left-0 w-80 max-w-[85vw]\",\n        push: \"fixed inset-y-0 left-0 w-80 max-w-[85vw]\",\n        slide: \"fixed inset-y-0 left-0 w-80 max-w-[85vw]\",\n      },\n      right: {\n        overlay: \"fixed inset-y-0 right-0 w-80 max-w-[85vw]\",\n        push: \"fixed inset-y-0 right-0 w-80 max-w-[85vw]\",\n        slide: \"fixed inset-y-0 right-0 w-80 max-w-[85vw]\",\n      },\n      top: {\n        overlay: \"fixed inset-x-0 top-0 h-96 max-h-[85vh]\",\n        push: \"fixed inset-x-0 top-0 h-96 max-h-[85vh]\",\n        slide: \"fixed inset-x-0 top-0 h-96 max-h-[85vh]\",\n      },\n      bottom: {\n        overlay: \"fixed inset-x-0 bottom-0 h-96 max-h-[85vh]\",\n        push: \"fixed inset-x-0 bottom-0 h-96 max-h-[85vh]\",\n        slide: \"fixed inset-x-0 bottom-0 h-96 max-h-[85vh]\",\n      },\n    };\n\n    // Transform classes for animations\n    const transformClasses = {\n      left: open ? \"translate-x-0\" : \"-translate-x-full\",\n      right: open ? \"translate-x-0\" : \"translate-x-full\",\n      top: open ? \"translate-y-0\" : \"-translate-y-full\",\n      bottom: open ? \"translate-y-0\" : \"translate-y-full\",\n    };\n\n    // Toggle item expansion\n    const toggleItem = (itemId: string) => {\n      const newExpanded = new Set(expandedItems);\n      if (newExpanded.has(itemId)) {\n        newExpanded.delete(itemId);\n      } else {\n        newExpanded.add(itemId);\n      }\n      setExpandedItems(newExpanded);\n    };\n\n    // Handle item click\n    const handleItemClick = (item: MobileNavItem) => {\n      if (item?.children && item?.children.length > 0) {\n        toggleItem(item?.id);\n      } else {\n        if (item?.href && closeOnClick) {\n          onOpenChange?.(false);\n        }\n        item?.onClick?.();\n      }\n    };\n\n    // Render navigation item\n    const renderNavigationItem = (item: MobileNavItem, level = 0) => {\n      if (renderItem) {\n        return renderItem(item, level);\n      }\n\n      const active = item?.href ? checkIsActive(item?.href, activePath) : false;\n      const hasChildren = item?.children && item?.children.length > 0;\n      const isExpanded = expandedItems.has(item?.id);\n\n      const itemContent = (\n        <>\n          <div className=\"glass-flex glass-items-center glass-gap-3 glass-flex-1 glass-min-w-0\">\n            <div className=\"glass-flex-shrink-0 glass-text-lg\">\n              {item?.icon}\n            </div>\n            <span className=\"glass-font-medium glass-truncate\">\n              {item?.label}\n            </span>\n            {item?.badge && (\n              <GlassBadge\n                variant={item?.badgeVariant || \"outline\"}\n                size=\"xs\"\n                className=\"glass-ml-auto\"\n              >\n                {item?.badge}\n              </GlassBadge>\n            )}\n          </div>\n          {hasChildren && (\n            <div className=\"glass-flex-shrink-0 glass-ml-2\">\n              <div\n                className={cn(\n                  \"transition-transform duration-200\",\n                  isExpanded && \"rotate-90\"\n                )}\n              >\n                \u25B6\n              </div>\n            </div>\n          )}\n        </>\n      );\n\n      return (\n        <div data-glass-component key={item?.id}>\n          <GlassButton\n            variant={active ? \"primary\" : \"ghost\"}\n            size=\"md\"\n            disabled={item?.disabled}\n            className={cn(\n              \"w-full justify-start h-12 glass-px-4\",\n              level > 0 && \"ml-6 glass-mr-2\"\n            )}\n            onClick={(e) => handleItemClick(item)}\n          >\n            {itemContent}\n          </GlassButton>\n\n          {/* Render children */}\n          {hasChildren && isExpanded && (\n            <Motion preset=\"slideDown\" className=\"glass-mt-1\">\n              <VStack space=\"xs\">\n                {item?.children!.map((child: any) =>\n                  renderNavigationItem(child, level + 1)\n                )}\n              </VStack>\n            </Motion>\n          )}\n        </div>\n      );\n    };\n\n    // Render section\n    const renderSection = (section: MobileNavSection) => {\n      return (\n        <div key={section.id}>\n          {/* Section header */}\n          {section.label && (\n            <div className=\"glass-px-4 glass-py-2\">\n              <h3 className=\"glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                {section.label}\n              </h3>\n            </div>\n          )}\n\n          {/* Section items */}\n          <VStack space=\"xs\">\n            {section.items.map((item: any) => renderNavigationItem(item))}\n          </VStack>\n        </div>\n      );\n    };\n\n    // Handle backdrop click\n    const handleClose = useCallback(() => {\n      onOpenChange?.(false);\n    }, [onOpenChange]);\n\n    const handleBackdropClick = useCallback(() => {\n      handleClose();\n    }, [handleClose]);\n\n    // Prevent body scroll when open\n    useEffect(() => {\n      if (open) {\n        previousBodyOverflowRef.current = document.body.style.overflow;\n        document.body.style.overflow = \"hidden\";\n        return () => {\n          document.body.style.overflow = previousBodyOverflowRef.current || \"\";\n          previousBodyOverflowRef.current = null;\n        };\n      }\n    }, [open]);\n\n    return (\n      <>\n        {/* Backdrop */}\n        {showBackdrop && open && (\n          <Motion\n            preset=\"fadeIn\"\n            className=\"glass-fixed glass-inset-0 glass-surface-dark/50 glass-backdrop-blur-md glass-z-100 glass-contrast-guard\"\n            style={{\n              backgroundColor:\n                \"color-mix(in srgb, var(--glass-black) 40%, transparent)\",\n            }}\n            onClick={handleBackdropClick}\n            aria-hidden=\"true\"\n          />\n        )}\n\n        {/* Navigation */}\n        <FocusTrap\n          active={open}\n          restoreFocus\n          autoFocus\n          allowEscape\n          onEscape={handleClose}\n        >\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            ref={ref}\n            role=\"dialog\"\n            aria-modal={open ? true : undefined}\n            aria-hidden={!open}\n            aria-label={ariaLabel || title || \"Mobile navigation\"}\n            {...(!open ? { inert: \"\" } : {})}\n            className={cn(\n              \"flex flex-col z-[101] max-w-[100vw] max-h-[100dvh] motion-reduce:transition-none\",\n              prefersReducedMotion\n                ? \"transition-none\"\n                : \"transition-transform duration-300 ease-out\",\n              !open && \"pointer-events-none\",\n              positionClasses?.[position][variant],\n              transformClasses?.[position],\n              className\n            )}\n            {...props}\n          >\n            {/* Header */}\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-glass-border/20\">\n              <HStack\n                space=\"sm\"\n                align=\"center\"\n                className=\"glass-flex-1 glass-min-w-0\"\n              >\n                {logo && <div className=\"glass-flex-shrink-0\">{logo}</div>}\n                {title && (\n                  <h1 className=\"glass-font-bold glass-text-lg glass-text-primary glass-truncate\">\n                    {title}\n                  </h1>\n                )}\n              </HStack>\n\n              <IconButton\n                icon=\"\u00D7\"\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleClose}\n                aria-label=\"Close navigation\"\n                className=\"glass-focus glass-touch-target\"\n              />\n            </div>\n\n            {/* Navigation content */}\n            <nav className=\"glass-flex-1 glass-p-4 glass-overflow-y-auto glass-overscroll-contain\">\n              <VStack space=\"lg\">\n                {navigation.map((section: any) => renderSection(section))}\n                {children}\n              </VStack>\n            </nav>\n\n            {/* Footer */}\n            {footer && (\n              <div className=\"glass-p-4 glass-border-t glass-border-glass-border/20\">\n                {footer}\n              </div>\n            )}\n          </OptimizedGlass>\n        </FocusTrap>\n      </>\n    );\n  }\n);\n\nGlassMobileNav.displayName = \"GlassMobileNav\";\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useCallback,\n  useRef,\n  useMemo,\n  ForwardedRef,\n  ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport {\n  SpringConfig,\n  SpringPresets,\n} from \"../../animations/physics/springPhysics\";\nimport {\n  createNavigationA11y,\n  useA11yId,\n  announceToScreenReader,\n  keyboardHandlers,\n  KEYS,\n} from \"../../utils/a11y\";\nimport { useKeyboardNavigation } from \"../../utils/a11yHooks\";\n\n// Helper components\nconst Badge = ({ children }: { children: React.ReactNode }) => (\n  <span className=\"glass-inline-glass-flex glass-items-center glass-justify-center glass-min-w-18px glass-h-18px glass-px-1.5 glass-text-xs glass-font-semibold glass-text-primary glass-surface-blue glass-radius-full\">\n    {children}\n  </span>\n);\n\nconst Icon = ({ name, size = 24 }: { name: string; size?: number }) => (\n  <span style={{ fontSize: size }} aria-hidden=\"true\">\n    \uD83D\uDD39\n  </span>\n);\n\nconst Tooltip = ({\n  children,\n  title,\n}: {\n  children: React.ReactNode;\n  title: string;\n}) => <div title={title}>{children}</div>;\n\n// Simple animation hook for indicator position\nconst INITIAL_INDICATOR_STYLE = {\n  left: 0,\n  top: 0,\n  width: 0,\n  height: 0,\n  opacity: 0,\n};\n\nconst useIndicatorAnimation = (_prefersReducedMotion: boolean) => {\n  const [indicatorStyle, setIndicatorStyle] = useState(INITIAL_INDICATOR_STYLE);\n\n  const animateIndicator = useCallback(\n    (nextStyle: typeof INITIAL_INDICATOR_STYLE) => {\n      setIndicatorStyle((prev) => {\n        if (\n          prev.left === nextStyle.left &&\n          prev.top === nextStyle.top &&\n          prev.width === nextStyle.width &&\n          prev.height === nextStyle.height &&\n          prev.opacity === nextStyle.opacity\n        ) {\n          return prev;\n        }\n        return nextStyle;\n      });\n    },\n    []\n  );\n\n  return { indicatorStyle, animateIndicator };\n};\n\nimport { GlassNavigationProps, NavigationItem } from \"./types\";\n\n// Navigation component with glass styling\n\n// Remove styled components\n\n/**\n * A glass-styled navigation component with various layout options\n */\nexport const GlassNavigation = forwardRef<HTMLDivElement, GlassNavigationProps>(\n  (\n    {\n      items = [],\n      activeItem,\n      onItemClick,\n      onMenuToggle,\n      position = \"top\",\n      variant = \"standard\",\n      className,\n      style,\n      logo,\n      actions,\n      showDivider = false,\n      glassIntensity = 0.7,\n      sticky = false,\n      maxWidth,\n      compact = false,\n      centered = false,\n      zIndex = 100,\n      width,\n      initialExpandedItems = [],\n      collapsible = false,\n      initialCollapsed = false,\n      ...rest\n    }: GlassNavigationProps,\n    ref: ForwardedRef<HTMLDivElement>\n  ): React.ReactElement | null => {\n    const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n    const [expandedItems, setExpandedItems] =\n      useState<string[]>(initialExpandedItems);\n    const [collapsed, setCollapsed] = useState(initialCollapsed);\n    const prefersReducedMotion = useReducedMotion();\n    const navItemsRef = useRef<HTMLUListElement>(null);\n    const itemRefs = useRef<Record<string, HTMLLIElement | null>>({});\n    const { defaultSpring } = useAnimationContext();\n\n    // Enhanced keyboard navigation with accessibility\n    const navigationItems = items\n      .filter((item: any) => !item.disabled)\n      .map((item: any) => ({\n        id: item.id || item.key,\n        disabled: item.disabled,\n      }));\n\n    const {\n      focusedIndex,\n      selectedIds,\n      handleKeyDown: handleNavKeyDown,\n      registerItem,\n      focusItem,\n    } = useKeyboardNavigation({\n      items: navigationItems,\n      orientation:\n        position === \"left\" || position === \"right\" ? \"vertical\" : \"horizontal\",\n      loop: true,\n      homeEndKeys: true,\n      onActivate: (id) => {\n        const item = items.find((item) => (item.id || item.key) === id);\n        if (item) {\n          handleItemClick(id, item);\n        }\n      },\n    });\n\n    const navId = useA11yId(\"glass-navigation\");\n\n    const finalChildAnimationConfig = useMemo(() => {\n      const baseFallback: SpringConfig = SpringPresets.default;\n      let resolvedConfig: SpringConfig;\n\n      if (typeof defaultSpring === \"object\" && defaultSpring !== null) {\n        resolvedConfig = { ...baseFallback, ...defaultSpring };\n      } else if (\n        typeof defaultSpring === \"string\" &&\n        defaultSpring in SpringPresets\n      ) {\n        resolvedConfig =\n          SpringPresets?.[defaultSpring as keyof typeof SpringPresets];\n      } else {\n        resolvedConfig = baseFallback;\n      }\n\n      return resolvedConfig;\n    }, [defaultSpring]);\n\n    const disableChildAnimation = useMemo(() => {\n      return prefersReducedMotion;\n    }, [prefersReducedMotion]);\n\n    const { indicatorStyle, animateIndicator } =\n      useIndicatorAnimation(prefersReducedMotion);\n\n    useEffect(() => {\n      if (disableChildAnimation) {\n        animateIndicator(INITIAL_INDICATOR_STYLE);\n        return;\n      }\n\n      const activeElement = activeItem ? itemRefs.current?.[activeItem] : null;\n      const containerElement = navItemsRef.current;\n\n      if (activeElement && containerElement) {\n        const itemRect = activeElement.getBoundingClientRect();\n        const containerRect = containerElement.getBoundingClientRect();\n\n        let newStyle: typeof indicatorStyle;\n        if (position === \"left\" || position === \"right\") {\n          newStyle = {\n            left: position === \"left\" ? 0 : containerRect.width - 3,\n            top: itemRect.top - containerRect.top,\n            width: 3,\n            height: itemRect.height,\n            opacity: 1,\n          };\n        } else {\n          newStyle = {\n            left: itemRect.left - containerRect.left,\n            top: position === \"top\" ? containerRect.height - 3 : 0,\n            width: itemRect.width,\n            height: 3,\n            opacity: 1,\n          };\n        }\n        animateIndicator(newStyle);\n      } else {\n        animateIndicator(INITIAL_INDICATOR_STYLE);\n      }\n    }, [\n      activeItem,\n      position,\n      collapsed,\n      disableChildAnimation,\n      animateIndicator,\n    ]);\n\n    const toggleMobileMenu = useCallback(() => {\n      const newState = !mobileMenuOpen;\n      setMobileMenuOpen(newState);\n      if (onMenuToggle) {\n        onMenuToggle(newState);\n      }\n    }, [mobileMenuOpen, onMenuToggle]);\n\n    const handleItemClick = useCallback(\n      (id: string, item: NavigationItem) => {\n        if (item?.onClick) {\n          item?.onClick();\n        }\n\n        if (onItemClick) {\n          onItemClick(item);\n        }\n\n        if (item?.children && item?.children.length > 0) {\n          setExpandedItems((prev: any) =>\n            prev.includes(id)\n              ? prev.filter((itemId: any) => itemId !== id)\n              : [...prev, id]\n          );\n        }\n\n        if (mobileMenuOpen) {\n          setMobileMenuOpen(false);\n          if (onMenuToggle) {\n            onMenuToggle(false);\n          }\n        }\n      },\n      [onItemClick, mobileMenuOpen, onMenuToggle]\n    );\n\n    const toggleCollapsed = useCallback(() => {\n      setCollapsed((prev: boolean) => !prev);\n    }, []);\n\n    // Navigation positioning and styling classes\n    const getPositionClasses = (position: GlassNavigationProps[\"position\"]) => {\n      const base = \"flex items-center box-border\";\n      switch (position) {\n        case \"left\":\n        case \"right\":\n          return cn(base, \"flex-col h-full\");\n        default:\n          return cn(base, \"flex-row w-full\");\n      }\n    };\n\n    const getPositionStyles = (position: GlassNavigationProps[\"position\"]) => {\n      switch (position) {\n        case \"left\":\n          return { left: 0, height: \"100vh\" };\n        case \"right\":\n          return { right: 0, height: \"100vh\" };\n        case \"bottom\":\n          return { bottom: 0, width: \"100%\" };\n        case \"top\":\n        default:\n          return { top: 0, width: \"100%\" };\n      }\n    };\n\n    const renderNavItem = useCallback(\n      (item: NavigationItem, level = 0): ReactNode => {\n        const itemId = item?.id || item?.key;\n        const isActive = Boolean(activeItem === item?.id || item?.active);\n        const hasChildren = item?.children && item?.children.length > 0;\n        const isExpanded = itemId ? expandedItems.includes(itemId) : false;\n\n        const assignRef = (el: HTMLLIElement | null) => {\n          if (item?.id) {\n            if (itemRefs.current) itemRefs.current[item?.id] = el;\n          }\n        };\n\n        if (item?.customElement) {\n          return (\n            <li\n              ref={assignRef}\n              key={item?.id || item?.key}\n              className={cn(\"relative z-10\", item?.className)}\n            >\n              {item?.customElement}\n            </li>\n          );\n        }\n\n        const content = (\n          <>\n            {item?.icon && (\n              <span className=\"nav-item-icon\" aria-hidden=\"true\">\n                {item?.icon}\n              </span>\n            )}\n\n            {(!collapsed || level > 0) && (\n              <span className=\"nav-item-label\">{item?.label}</span>\n            )}\n\n            {item?.badge && <Badge>{String(item?.badge)}</Badge>}\n\n            {hasChildren && !collapsed && (\n              <span className=\"nav-item-expand-icon\" aria-hidden=\"true\">\n                <Icon name={isExpanded ? \"expand_less\" : \"expand_more\"} />\n              </span>\n            )}\n          </>\n        );\n\n        const itemClasses = cn(\n          \"flex items-center glass-gap-2 text-decoration-none border-none bg-transparent cursor-pointer transition-all duration-200\",\n          \"glass-radius-md border-0 outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50\",\n          \"glass-focus glass-touch-target glass-contrast-guard\",\n          {\n            \"glass-px-2 glass-py-1.5 glass-text-sm\": variant === \"minimal\",\n            \"glass-px-4 glass-py-2.5 glass-text-base\": variant !== \"minimal\",\n            \"text-blue-200 font-semibold bg-blue-500/15\": isActive,\n            \"glass-text-secondary font-normal hover:bg-white/10\": !isActive,\n            \"opacity-50 pointer-events-none\": item?.disabled,\n            \"active:scale-[0.98]\": !item?.disabled,\n          }\n        );\n\n        // Create accessibility attributes for navigation items\n        const itemA11yProps = createNavigationA11y({\n          id: itemId,\n          current: isActive ? \"page\" : undefined,\n          expanded: hasChildren ? isExpanded : undefined,\n          controls: hasChildren ? `${itemId}-submenu` : undefined,\n          posinset:\n            level === 0\n              ? items.findIndex((i) => i.id === item?.id) + 1\n              : undefined,\n          setsize: level === 0 ? items.length : undefined,\n        });\n\n        const navItem = item?.href ? (\n          <a\n            href={item?.href}\n            target={item?.external ? \"_blank\" : undefined}\n            rel={item?.external ? \"noopener noreferrer\" : undefined}\n            className={itemClasses}\n            onClick={(e) => {\n              if (item?.disabled) {\n                e.preventDefault();\n                return;\n              }\n              handleItemClick(item?.id || item?.key, item);\n            }}\n            onKeyDown={handleNavKeyDown}\n            {...itemA11yProps}\n            aria-disabled={item?.disabled}\n            ref={(el) => {\n              registerItem(item?.id || item?.key, el);\n              assignRef(el as any);\n            }}\n          >\n            {content}\n          </a>\n        ) : (\n          <button\n            type=\"button\"\n            className={itemClasses}\n            onClick={(e) => handleItemClick(item?.id || item?.key, item)}\n            onKeyDown={handleNavKeyDown}\n            disabled={item?.disabled}\n            {...itemA11yProps}\n            ref={(el) => {\n              registerItem(item?.id || item?.key, el);\n              assignRef(el as any);\n            }}\n          >\n            {content}\n          </button>\n        );\n\n        return (\n          <li\n            ref={assignRef}\n            key={itemId}\n            className={cn(\n              \"relative z-10\",\n              (position === \"top\" || position === \"bottom\") && \"flex-none\",\n              item?.className\n            )}\n          >\n            {item?.tooltip && !collapsed ? (\n              <Tooltip title={item?.tooltip}>{navItem}</Tooltip>\n            ) : collapsed && level === 0 ? (\n              <Tooltip title={item?.label}>{navItem}</Tooltip>\n            ) : (\n              navItem\n            )}\n\n            {hasChildren && (\n              <ul\n                id={`${itemId}-submenu`}\n                aria-hidden={!isExpanded || collapsed}\n                className={cn(\n                  \"list-none m-0 glass-p-2 glass-mt-1 glass-radius-md bg-white/5 overflow-hidden transition-all duration-300\",\n                  {\n                    \"opacity-100 max-glass-h-500px visible\":\n                      isExpanded && !collapsed,\n                    \"opacity-0 max-h-0 invisible\": !isExpanded || collapsed,\n                  }\n                )}\n                style={\n                  !isExpanded || collapsed ? { display: \"none\" } : undefined\n                }\n              >\n                {item?.children?.map((child: any) =>\n                  renderNavItem(child, level + 1)\n                )}\n              </ul>\n            )}\n          </li>\n        );\n      },\n      [activeItem, expandedItems, collapsed, variant, handleItemClick]\n    );\n\n    // Determine glass elevation based on variant\n    const glassElevation = variant === \"minimal\" ? \"level1\" : \"level2\";\n    const glassTier = variant === \"minimal\" ? \"low\" : \"medium\";\n\n    return (\n      <nav>\n        <OptimizedGlass\n          ref={ref as React.RefObject<HTMLDivElement>}\n          intent=\"neutral\"\n          elevation={glassElevation}\n          tier={glassTier}\n          intensity=\"medium\"\n          depth={variant === \"prominent\" ? 3 : 2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation={prefersReducedMotion ? \"none\" : \"gentle\"}\n          performanceMode=\"medium\"\n          id={navId}\n          role=\"navigation\"\n          aria-label=\"Main navigation\"\n          onKeyDown={handleNavKeyDown}\n          className={cn(\n            // Base navigation styles\n            getPositionClasses(position),\n            {\n              \"justify-center\": centered,\n              \"justify-between\": !centered,\n              \"glass-p-2 glass-px-4\": compact,\n              \"glass-p-3 glass-px-6\": !compact,\n              \"sticky top-0\": sticky,\n            },\n            // Position-specific styling\n            position === \"left\" || position === \"right\" ? \"w-60\" : \"w-full\",\n            position === \"left\" || position === \"right\" ? \"h-screen\" : \"h-auto\",\n            // Mobile responsive\n            \"md:glass-p-2 md:glass-px-4\",\n            className\n          )}\n          style={{\n            ...getPositionStyles(position),\n            ...style,\n            zIndex,\n            width: width\n              ? typeof width === \"number\"\n                ? `${width}px`\n                : width\n              : position === \"left\" || position === \"right\"\n                ? \"240px\"\n                : \"100%\",\n            maxWidth: maxWidth\n              ? typeof maxWidth === \"number\"\n                ? `${maxWidth}px`\n                : maxWidth\n              : undefined,\n          }}\n          {...rest}\n        >\n          {/* Mobile menu toggle */}\n          <button\n            onClick={toggleMobileMenu}\n            className={cn(\n              \"hidden md:hidden lg:hidden\",\n              \"bg-transparent border-none cursor-pointer glass-p-2 text-inherit\",\n              \"flex items-center justify-center\",\n              \"glass-focus glass-touch-target glass-contrast-guard\",\n              \"max-md:flex\"\n            )}\n            aria-label={mobileMenuOpen ? \"Close menu\" : \"Open menu\"}\n            aria-expanded={mobileMenuOpen}\n          >\n            <Icon name={mobileMenuOpen ? \"close\" : \"menu\"} />\n          </button>\n\n          {/* Logo container */}\n          {logo && (\n            <div\n              className={cn(\"flex items-center\", {\n                \"justify-center w-full glass-p-4\":\n                  position === \"left\" || position === \"right\",\n              })}\n            >\n              {logo}\n            </div>\n          )}\n\n          {/* Navigation items container */}\n          <ul\n            ref={navItemsRef}\n            className={cn(\n              \"flex list-none m-0 glass-p-0 flex-1 items-center relative\",\n              {\n                \"flex-col glass-gap-4\":\n                  position === \"left\" || position === \"right\",\n                \"flex-row flex-wrap glass-gap-3\":\n                  position === \"top\" || position === \"bottom\",\n                \"glass-gap-3\": variant === \"minimal\",\n                \"mt-6 w-full\": position === \"left\" || position === \"right\",\n                \"mobile-open\": mobileMenuOpen,\n              }\n            )}\n            role=\"menubar\"\n            aria-orientation={\n              position === \"left\" || position === \"right\"\n                ? \"vertical\"\n                : \"horizontal\"\n            }\n          >\n            {/* Active indicator */}\n            {!prefersReducedMotion && (\n              <div\n                className=\"glass-absolute glass-surface-blue glass-radius-sm glass-z-0 glass-pointer-events-none glass-transition-all glass-duration-300 glass-ease-out\"\n                style={{\n                  left: `${indicatorStyle.left}px`,\n                  top: `${indicatorStyle.top}px`,\n                  width: `${indicatorStyle.width}px`,\n                  height: `${indicatorStyle.height}px`,\n                  opacity: indicatorStyle.opacity,\n                }}\n              />\n            )}\n\n            {/* Navigation items */}\n            {items.map((item: any) => renderNavItem(item))}\n          </ul>\n\n          {/* Divider */}\n          {showDivider && (\n            <div\n              className={cn(\"bg-white/20\", {\n                \"w-4/5 h-px my-3 mx-auto\":\n                  position === \"left\" || position === \"right\",\n                \"w-px h-6 mx-3\": position === \"top\" || position === \"bottom\",\n              })}\n            />\n          )}\n\n          {/* Actions container */}\n          {actions && (\n            <div className=\"glass-flex glass-items-center glass-gap-3\">\n              {actions}\n            </div>\n          )}\n\n          {/* Collapsible button */}\n          {collapsible && (position === \"left\" || position === \"right\") && (\n            <button\n              onClick={toggleCollapsed}\n              title={collapsed ? \"Expand\" : \"Collapse\"}\n              aria-label={\n                collapsed ? \"Expand navigation\" : \"Collapse navigation\"\n              }\n              className={cn(\n                \"absolute top-1/2 -translate-y-1/2 w-6 h-6 glass-radius-full\",\n                \"flex items-center justify-center cursor-pointer\",\n                \"bg-white/10 border border-white/20 transition-all duration-200\",\n                \"glass-focus glass-touch-target glass-contrast-guard\",\n                \"hover:bg-white/20\",\n                {\n                  \"-right-3\": !collapsed,\n                  \"-left-3\": collapsed,\n                }\n              )}\n            >\n              <Icon\n                name={\n                  position === \"left\"\n                    ? collapsed\n                      ? \"chevron_right\"\n                      : \"chevron_left\"\n                    : collapsed\n                      ? \"chevron_left\"\n                      : \"chevron_right\"\n                }\n              />\n            </button>\n          )}\n        </OptimizedGlass>\n      </nav>\n    );\n  }\n);\n\nGlassNavigation.displayName = \"GlassNavigation\";\n", "import React, { createContext, useContext, useState, useEffect } from \"react\";\n\nexport interface AnimationContextType {\n  reducedMotion: boolean;\n  setReducedMotion: (reduced: boolean) => void;\n  defaultSpring: {\n    stiffness: number;\n    damping: number;\n    mass: number;\n  };\n}\n\nconst defaultContextValue: AnimationContextType = {\n  reducedMotion: false,\n  setReducedMotion: () => {},\n  defaultSpring: {\n    stiffness: 100,\n    damping: 10,\n    mass: 1,\n  },\n};\n\nexport const AnimationContext =\n  createContext<AnimationContextType>(defaultContextValue);\n\n// AnimationProvider component\nexport interface AnimationProviderProps {\n  children: React.ReactNode;\n  defaultReducedMotion?: boolean;\n  defaultSpring?: {\n    stiffness: number;\n    damping: number;\n    mass: number;\n  };\n}\n\nexport const AnimationProvider: React.FC<AnimationProviderProps> = ({\n  children,\n  defaultReducedMotion = false,\n  defaultSpring = { stiffness: 100, damping: 10, mass: 1 },\n}) => {\n  const [reducedMotion, setReducedMotion] = useState(defaultReducedMotion);\n\n  // Check for prefers-reduced-motion\n  useEffect(() => {\n    if (typeof window !== \"undefined\") {\n      const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n      setReducedMotion(mediaQuery.matches);\n\n      const handleChange = (e: MediaQueryListEvent) => {\n        setReducedMotion(e.matches);\n      };\n\n      mediaQuery.addEventListener(\"change\", handleChange);\n      return () => mediaQuery.removeEventListener(\"change\", handleChange);\n    }\n  }, []);\n\n  const contextValue: AnimationContextType = {\n    reducedMotion,\n    setReducedMotion,\n    defaultSpring,\n  };\n\n  return (\n    <AnimationContext.Provider value={contextValue}>\n      {children}\n    </AnimationContext.Provider>\n  );\n};\n\nexport const useAnimation = () => {\n  const context = useContext(AnimationContext);\n  if (!context) {\n    // Instead of throwing, return default values to prevent crashes\n    return defaultContextValue;\n  }\n  return context;\n};\n\nexport const useAnimationContext = useAnimation;\n", "// Basic spring physics configuration\nexport const springConfig = {\n  stiffness: 100,\n  damping: 10,\n  mass: 1,\n};\n\nexport const gentleSpring = {\n  stiffness: 50,\n  damping: 15,\n  mass: 1,\n};\n\nexport const bouncySpring = {\n  stiffness: 200,\n  damping: 8,\n  mass: 1,\n};\n\nexport interface SpringConfig {\n  stiffness: number;\n  damping: number;\n  mass: number;\n}\n\nexport const SpringPresets = {\n  default: springConfig,\n  gentle: gentleSpring,\n  bouncy: bouncySpring,\n};\n", "/**\n * AuraGlass Accessibility Hooks\n * Enhanced accessibility hooks for comprehensive WCAG 2.1 AA compliance\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useA11yId, announceToScreenReader, KEYS } from './a11y';\n\n/**\n * Enhanced announcement hook with queuing and debouncing\n */\nexport function useScreenReaderAnnouncement() {\n  const queueRef = useRef<Array<{ message: string; priority: 'polite' | 'assertive' }>>([]);\n  const isProcessingRef = useRef(false);\n  const timeoutRef = useRef<NodeJS.Timeout>();\n\n  const announce = useCallback((message: string, priority: 'polite' | 'assertive' = 'polite') => {\n    queueRef.current.push({ message, priority });\n    processQueue();\n  }, []);\n\n  const processQueue = useCallback(async () => {\n    if (isProcessingRef.current || queueRef.current.length === 0) return;\n\n    isProcessingRef.current = true;\n    const { message, priority } = queueRef.current.shift()!;\n\n    announceToScreenReader(message, priority);\n\n    // Wait before processing next announcement\n    timeoutRef.current = setTimeout(() => {\n      isProcessingRef.current = false;\n      processQueue();\n    }, priority === 'assertive' ? 1000 : 500);\n  }, []);\n\n  const clearQueue = useCallback(() => {\n    queueRef.current = [];\n    isProcessingRef.current = false;\n    if (timeoutRef.current) {\n      clearTimeout(timeoutRef.current);\n    }\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      clearQueue();\n    };\n  }, [clearQueue]);\n\n  return {\n    announce,\n    clearQueue,\n  };\n}\n\n/**\n * Hook for managing keyboard navigation in collections\n */\nexport interface UseKeyboardNavigationOptions {\n  items: Array<{ id: string; disabled?: boolean }>;\n  orientation?: 'horizontal' | 'vertical' | 'both';\n  loop?: boolean;\n  homeEndKeys?: boolean;\n  pageKeys?: boolean;\n  onActivate?: (id: string) => void;\n  onSelect?: (id: string) => void;\n}\n\nexport function useKeyboardNavigation(options: UseKeyboardNavigationOptions) {\n  const {\n    items,\n    orientation = 'vertical',\n    loop = true,\n    homeEndKeys = true,\n    pageKeys = false,\n    onActivate,\n    onSelect,\n  } = options;\n\n  const [focusedIndex, setFocusedIndex] = useState(0);\n  const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n  const itemRefs = useRef<Map<string, HTMLElement>>(new Map());\n\n  const enabledItems = items.filter((item: any) => !item.disabled);\n\n  const focusItem = useCallback((index: number) => {\n    if (index < 0 || index >= enabledItems.length) return;\n    \n    const item = enabledItems[index];\n    const element = itemRefs.current.get(item.id);\n    \n    if (element) {\n      element.focus();\n      setFocusedIndex(index);\n    }\n  }, [enabledItems]);\n\n  const moveNext = useCallback(() => {\n    const nextIndex = focusedIndex + 1;\n    if (nextIndex < enabledItems.length) {\n      focusItem(nextIndex);\n    } else if (loop) {\n      focusItem(0);\n    }\n  }, [focusedIndex, enabledItems.length, loop, focusItem]);\n\n  const movePrevious = useCallback(() => {\n    const prevIndex = focusedIndex - 1;\n    if (prevIndex >= 0) {\n      focusItem(prevIndex);\n    } else if (loop) {\n      focusItem(enabledItems.length - 1);\n    }\n  }, [focusedIndex, enabledItems.length, loop, focusItem]);\n\n  const moveToFirst = useCallback(() => {\n    focusItem(0);\n  }, [focusItem]);\n\n  const moveToLast = useCallback(() => {\n    focusItem(enabledItems.length - 1);\n  }, [enabledItems.length, focusItem]);\n\n  const handleKeyDown = useCallback((event: React.KeyboardEvent | KeyboardEvent) => {\n    const { key } = event;\n\n    const isVertical = orientation === 'vertical' || orientation === 'both';\n    const isHorizontal = orientation === 'horizontal' || orientation === 'both';\n\n    switch (key) {\n      case KEYS.ARROW_DOWN:\n        if (isVertical) {\n          event.preventDefault();\n          moveNext();\n        }\n        break;\n      case KEYS.ARROW_UP:\n        if (isVertical) {\n          event.preventDefault();\n          movePrevious();\n        }\n        break;\n      case KEYS.ARROW_RIGHT:\n        if (isHorizontal) {\n          event.preventDefault();\n          moveNext();\n        }\n        break;\n      case KEYS.ARROW_LEFT:\n        if (isHorizontal) {\n          event.preventDefault();\n          movePrevious();\n        }\n        break;\n      case KEYS.HOME:\n        if (homeEndKeys) {\n          event.preventDefault();\n          moveToFirst();\n        }\n        break;\n      case KEYS.END:\n        if (homeEndKeys) {\n          event.preventDefault();\n          moveToLast();\n        }\n        break;\n      case KEYS.PAGE_UP:\n        if (pageKeys) {\n          event.preventDefault();\n          const jumpIndex = Math.max(0, focusedIndex - 10);\n          focusItem(jumpIndex);\n        }\n        break;\n      case KEYS.PAGE_DOWN:\n        if (pageKeys) {\n          event.preventDefault();\n          const jumpIndex = Math.min(enabledItems.length - 1, focusedIndex + 10);\n          focusItem(jumpIndex);\n        }\n        break;\n      case KEYS.ENTER:\n      case KEYS.SPACE:\n        if (focusedIndex >= 0 && focusedIndex < enabledItems.length) {\n          event.preventDefault();\n          const item = enabledItems[focusedIndex];\n          onActivate?.(item.id);\n        }\n        break;\n    }\n  }, [\n    orientation,\n    moveNext,\n    movePrevious,\n    moveToFirst,\n    moveToLast,\n    homeEndKeys,\n    pageKeys,\n    focusedIndex,\n    enabledItems,\n    focusItem,\n    onActivate,\n  ]);\n\n  const registerItem = useCallback((id: string, element: HTMLElement | null) => {\n    if (element) {\n      itemRefs.current.set(id, element);\n    } else {\n      itemRefs.current.delete(id);\n    }\n  }, []);\n\n  const selectItem = useCallback((id: string, multiSelect = false) => {\n    setSelectedIds((prev: Set<string>) => {\n      const newSelection = new Set(multiSelect ? prev : []);\n\n      if (newSelection.has(id)) {\n        newSelection.delete(id);\n      } else {\n        newSelection.add(id);\n      }\n\n      return newSelection;\n    });\n\n    onSelect?.(id);\n  }, [onSelect]);\n\n  return {\n    focusedIndex,\n    selectedIds,\n    handleKeyDown,\n    registerItem,\n    focusItem,\n    selectItem,\n    moveNext,\n    movePrevious,\n    moveToFirst,\n    moveToLast,\n  };\n}\n\n/**\n * Hook for managing expanded/collapsed state with keyboard navigation\n */\nexport function useExpandableNavigation() {\n  const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n\n  const isExpanded = useCallback((id: string) => {\n    return expandedIds.has(id);\n  }, [expandedIds]);\n\n  const toggleExpanded = useCallback((id: string) => {\n    setExpandedIds((prev: Set<string>) => {\n      const newSet = new Set(prev);\n      if (newSet.has(id)) {\n        newSet.delete(id);\n      } else {\n        newSet.add(id);\n      }\n      return newSet;\n    });\n  }, []);\n\n  const expandItem = useCallback((id: string) => {\n    setExpandedIds((prev: Set<string>) => new Set([...prev, id]));\n  }, []);\n\n  const collapseItem = useCallback((id: string) => {\n    setExpandedIds((prev: Set<string>) => {\n      const newSet = new Set(prev);\n      newSet.delete(id);\n      return newSet;\n    });\n  }, []);\n\n  const expandAll = useCallback((ids: string[]) => {\n    setExpandedIds(new Set(ids));\n  }, []);\n\n  const collapseAll = useCallback(() => {\n    setExpandedIds(new Set());\n  }, []);\n\n  return {\n    expandedIds,\n    isExpanded,\n    toggleExpanded,\n    expandItem,\n    collapseItem,\n    expandAll,\n    collapseAll,\n  };\n}\n\n/**\n * Hook for managing live region announcements\n */\nexport function useLiveRegion() {\n  const regionRef = useRef<HTMLDivElement>();\n  const [message, setMessage] = useState('');\n\n  useEffect(() => {\n    // Create live region if it doesn't exist\n    if (!regionRef.current) {\n      const region = document.createElement('div');\n      region.setAttribute('aria-live', 'polite');\n      region.setAttribute('aria-atomic', 'true');\n      region.className='glass-sr-only';\n      region.style.cssText = `\n        position: absolute;\n        left: -10000px;\n        width: 1px;\n        height: 1px;\n        overflow: hidden;\n        clip: rect(0, 0, 0, 0);\n        white-space: nowrap;\n        border-width: 0;\n      `;\n      document.body.appendChild(region);\n      regionRef.current = region;\n    }\n\n    return () => {\n      if (regionRef.current && document.body.contains(regionRef.current)) {\n        document.body.removeChild(regionRef.current);\n      }\n    };\n  }, []);\n\n  const announce = useCallback((newMessage: string, priority: 'polite' | 'assertive' = 'polite') => {\n    if (regionRef.current) {\n      regionRef.current.setAttribute('aria-live', priority);\n      setMessage(newMessage);\n      \n      // Clear message after announcement\n      setTimeout(() => {\n        setMessage('');\n      }, 1000);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (regionRef.current) {\n      regionRef.current.textContent = message;\n    }\n  }, [message]);\n\n  return { announce };\n}\n\n/**\n * Hook for managing form field accessibility\n */\nexport interface UseFormFieldA11yOptions {\n  id?: string;\n  label?: string;\n  required?: boolean;\n  error?: string;\n  description?: string;\n  disabled?: boolean;\n}\n\nexport function useFormFieldA11y(options: UseFormFieldA11yOptions) {\n  const {\n    id: providedId,\n    label,\n    required = false,\n    error,\n    description,\n    disabled = false,\n  } = options;\n\n  const fieldId = useA11yId(providedId || 'form-field');\n  const labelId = label ? useA11yId('label') : undefined;\n  const errorId = error ? useA11yId('error') : undefined;\n  const descriptionId = description ? useA11yId('description') : undefined;\n\n  // Build describedby string\n  const describedBy = [descriptionId, errorId].filter(Boolean).join(' ') || undefined;\n\n  const fieldProps = {\n    id: fieldId,\n    'aria-required': required || undefined,\n    'aria-invalid': Boolean(error) || undefined,\n    'aria-describedby': describedBy,\n    'aria-labelledby': labelId,\n    disabled,\n  };\n\n  const labelProps = {\n    id: labelId,\n    htmlFor: fieldId,\n  };\n\n  const errorProps = error ? {\n    id: errorId,\n    role: 'alert' as const,\n    'aria-live': 'polite' as const,\n  } : {};\n\n  const descriptionProps = description ? {\n    id: descriptionId,\n  } : {};\n\n  const { announce } = useScreenReaderAnnouncement();\n\n  // Announce error changes\n  useEffect(() => {\n    if (error) {\n      announce(`Field error: ${error}`, 'assertive');\n    }\n  }, [error, announce]);\n\n  return {\n    fieldId,\n    labelId,\n    errorId,\n    descriptionId,\n    fieldProps,\n    labelProps,\n    errorProps,\n    descriptionProps,\n    isInvalid: Boolean(error),\n    announce,\n  };\n}\n\n/**\n * Hook for managing focus restoration\n */\nexport function useFocusRestore() {\n  const previousFocusRef = useRef<HTMLElement | null>(null);\n\n  const saveFocus = useCallback(() => {\n    previousFocusRef.current = document.activeElement as HTMLElement;\n  }, []);\n\n  const restoreFocus = useCallback(() => {\n    if (previousFocusRef.current) {\n      previousFocusRef.current.focus();\n      previousFocusRef.current = null;\n    }\n  }, []);\n\n  return {\n    saveFocus,\n    restoreFocus,\n  };\n}\n\n/**\n * Hook for managing tab navigation between elements\n */\nexport function useTabNavigation() {\n  const containerRef = useRef<HTMLElement>(null);\n\n  const trapFocus = useCallback((event: React.KeyboardEvent) => {\n    if (event.key !== 'Tab' || !containerRef.current) return;\n\n    const focusableElements = containerRef.current.querySelectorAll<HTMLElement>(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n    );\n\n    const firstElement = focusableElements[0];\n    const lastElement = focusableElements[focusableElements.length - 1];\n\n    if (event.shiftKey) {\n      if (document.activeElement === firstElement) {\n        event.preventDefault();\n        lastElement?.focus();\n      }\n    } else {\n      if (document.activeElement === lastElement) {\n        event.preventDefault();\n        firstElement?.focus();\n      }\n    }\n  }, []);\n\n  return {\n    containerRef,\n    trapFocus,\n  };\n}\n\n/**\n * Hook for managing modal accessibility\n */\nexport function useModalA11y() {\n  const modalRef = useRef<HTMLElement>(null);\n  const { saveFocus, restoreFocus } = useFocusRestore();\n  const { announce } = useScreenReaderAnnouncement();\n\n  const openModal = useCallback((title?: string) => {\n    saveFocus();\n    \n    // Announce modal opening\n    if (title) {\n      announce(`${title} dialog opened`, 'assertive');\n    }\n\n    // Focus first focusable element\n    setTimeout(() => {\n      if (modalRef.current) {\n        const firstFocusable = modalRef.current.querySelector<HTMLElement>(\n          'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n        );\n        firstFocusable?.focus();\n      }\n    }, 0);\n  }, [saveFocus, announce]);\n\n  const closeModal = useCallback((title?: string) => {\n    // Announce modal closing\n    if (title) {\n      announce(`${title} dialog closed`, 'polite');\n    }\n\n    restoreFocus();\n  }, [restoreFocus, announce]);\n\n  const handleEscape = useCallback((onClose: () => void) => (event: React.KeyboardEvent) => {\n    if (event.key === 'Escape') {\n      onClose();\n    }\n  }, []);\n\n  return {\n    modalRef,\n    openModal,\n    closeModal,\n    handleEscape,\n  };\n}\n\n/**\n * Hook for managing loading state accessibility\n */\nexport function useLoadingA11y(isLoading: boolean, loadingText = 'Loading...') {\n  const { announce } = useScreenReaderAnnouncement();\n\n  useEffect(() => {\n    if (isLoading) {\n      announce(loadingText, 'polite');\n    }\n  }, [isLoading, loadingText, announce]);\n\n  const loadingProps = {\n    'aria-busy': isLoading || undefined,\n    'aria-live': isLoading ? 'polite' as const : undefined,\n    'aria-label': isLoading ? loadingText : undefined,\n  };\n\n  return { loadingProps, announce };\n}\n\n/**\n * Hook for managing validation state accessibility\n */\nexport interface UseValidationA11yOptions {\n  isValid?: boolean;\n  errors?: string[];\n  warnings?: string[];\n  validMessage?: string;\n}\n\nexport function useValidationA11y(options: UseValidationA11yOptions) {\n  const { isValid, errors = [], warnings = [], validMessage } = options;\n  const { announce } = useScreenReaderAnnouncement();\n\n  const prevErrorsRef = useRef<string[]>([]);\n  const prevWarningsRef = useRef<string[]>([]);\n\n  // Announce new errors\n  useEffect(() => {\n    const newErrors = errors.filter((error: any) => !prevErrorsRef.current.includes(error));\n    if (newErrors.length > 0) {\n      announce(`Validation errors: ${newErrors.join(', ')}`, 'assertive');\n    }\n    prevErrorsRef.current = errors;\n  }, [errors, announce]);\n\n  // Announce new warnings\n  useEffect(() => {\n    const newWarnings = warnings.filter((warning: any) => !prevWarningsRef.current.includes(warning));\n    if (newWarnings.length > 0) {\n      announce(`Validation warnings: ${newWarnings.join(', ')}`, 'polite');\n    }\n    prevWarningsRef.current = warnings;\n  }, [warnings, announce]);\n\n  // Announce validation success\n  useEffect(() => {\n    if (isValid && validMessage) {\n      announce(validMessage, 'polite');\n    }\n  }, [isValid, validMessage, announce]);\n\n  const validationProps = {\n    'aria-invalid': errors.length > 0 || undefined,\n    'aria-describedby': [...errors, ...warnings].length > 0 ? 'validation-messages' : undefined,\n  };\n\n  return {\n    validationProps,\n    hasErrors: errors.length > 0,\n    hasWarnings: warnings.length > 0,\n    announce,\n  };\n}", "\"use client\";\n// Removed circular import - using regular button element\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ChevronRight } from \"@/icons\";\nimport React, { useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\nexport interface NavigationItem {\n  id: string;\n  label: string;\n  href?: string;\n  icon?: React.ReactNode;\n  description?: string;\n  badge?: string | number;\n  disabled?: boolean;\n  external?: boolean;\n  children?: NavigationItem[];\n  action?: () => void;\n  separator?: boolean;\n  featured?: boolean;\n}\n\nexport interface GlassNavigationMenuProps\n  extends React.HTMLAttributes<HTMLElement> {\n  /**\n   * Navigation items\n   */\n  items?: NavigationItem[];\n  /**\n   * Menu orientation\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Menu variant\n   */\n  variant?: \"default\" | \"sidebar\" | \"header\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Active item ID\n   */\n  activeItem?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Whether menu is collapsed (for sidebar variant)\n   */\n  collapsed?: boolean;\n  /**\n   * Callback when item is clicked\n   */\n  onItemClick?: (item: NavigationItem) => void;\n}\n\nexport interface GlassNavigationMenuContentProps {\n  /**\n   * Menu content\n   */\n  children: React.ReactNode;\n  /**\n   * Content className\n   */\n  className?: string;\n  /**\n   * Whether content is open\n   */\n  isOpen?: boolean;\n}\n\nexport interface GlassNavigationMenuItemProps {\n  /**\n   * Navigation item\n   */\n  item: NavigationItem;\n  /**\n   * Whether item is active\n   */\n  isActive?: boolean;\n  /**\n   * Whether item has submenu open\n   */\n  hasSubmenuOpen?: boolean;\n  /**\n   * Whether menu is collapsed\n   */\n  collapsed?: boolean;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Callback when item is clicked\n   */\n  onClick: (item: NavigationItem) => void;\n  /**\n   * Callback to toggle submenu\n   */\n  onToggleSubmenu: (itemId: string) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassNavigationMenu component\n * Advanced glassmorphism navigation menu with nested items\n */\nexport const GlassNavigationMenu: React.FC<GlassNavigationMenuProps> = ({\n  items = [],\n  orientation = \"vertical\",\n  variant = \"default\",\n  size = \"md\",\n  activeItem,\n  className,\n  collapsed = false,\n  onItemClick,\n  \"aria-label\": ariaLabel,\n  ...rest\n}) => {\n  const [openSubmenus, setOpenSubmenus] = useState<Set<string>>(new Set());\n\n  const handleItemClick = (item: NavigationItem) => {\n    if (item?.disabled) return;\n\n    if (item?.children && item?.children.length > 0) {\n      // Toggle submenu\n      setOpenSubmenus((prev: Set<string>) => {\n        const newSet = new Set(prev);\n        if (newSet.has(item?.id)) {\n          newSet.delete(item?.id);\n        } else {\n          newSet.add(item?.id);\n        }\n        return newSet;\n      });\n    } else {\n      // Execute action\n      if (item?.href) {\n        if (item?.external) {\n          window.open(item?.href, \"_blank\");\n        } else {\n          window.location.href = item?.href;\n        }\n      } else {\n        item?.action?.();\n      }\n      onItemClick?.(item);\n    }\n  };\n\n  const toggleSubmenu = (itemId: string) => {\n    setOpenSubmenus((prev: Set<string>) => {\n      const newSet = new Set(prev);\n      if (newSet.has(itemId)) {\n        newSet.delete(itemId);\n      } else {\n        newSet.add(itemId);\n      }\n      return newSet;\n    });\n  };\n\n  const variantClasses = {\n    default: \"glass-backdrop-blur ring-1 ring-white/10 bg-white/5\",\n    sidebar:\n      \"glass-backdrop-blur ring-0 border-r border-white/10 bg-white/5\",\n    header:\n      \"glass-backdrop-blur ring-0 border-b border-white/10 bg-white/5\",\n  };\n\n  return (\n    <OptimizedGlass\n      as=\"nav\"\n      data-glass-component\n      intent=\"neutral\"\n      elevation=\"level1\"\n      intensity=\"medium\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation=\"none\"\n      performanceMode=\"medium\"\n      className={cn(\n        variantClasses?.[variant],\n        orientation === \"horizontal\" ? \"flex flex-row\" : \"flex flex-col\",\n        className\n      )}\n      role=\"navigation\"\n      aria-label={ariaLabel ?? \"Navigation menu\"}\n      {...rest}\n    >\n      {items.map((item, index) => (\n        <React.Fragment key={item?.id || index}>\n          {item?.separator && (\n            <div\n              className={cn(\n                \"bg-white/20\",\n                orientation === \"horizontal\"\n                  ? \"w-px h-8 glass-mx-4\"\n                  : \"h-px w-full glass-my-2 glass-mx-4\"\n              )}\n            />\n          )}\n\n          <GlassNavigationMenuItem\n            item={item}\n            isActive={activeItem === item?.id}\n            hasSubmenuOpen={openSubmenus.has(item?.id)}\n            collapsed={collapsed}\n            size={size}\n            onClick={handleItemClick}\n            onToggleSubmenu={toggleSubmenu}\n          />\n\n          {/* Submenu */}\n          {item?.children && openSubmenus.has(item?.id) && !collapsed && (\n            <Motion preset=\"slideDown\" duration={200}>\n              <div\n                className={cn(\n                  \"glass-ml-4 border-l border-white/20 pl-4\",\n                  orientation === \"horizontal\" &&\n                    \"absolute top-full left-0 glass-mt-2 z-50\"\n                )}\n              >\n                <GlassNavigationMenu\n                  items={item?.children ?? []}\n                  orientation=\"vertical\"\n                  variant=\"default\"\n                  size={size}\n                  activeItem={activeItem}\n                  onItemClick={onItemClick}\n                />\n              </div>\n            </Motion>\n          )}\n        </React.Fragment>\n      ))}\n    </OptimizedGlass>\n  );\n};\n\n/**\n * GlassNavigationMenuContent component\n * Container for navigation menu content\n */\nexport const GlassNavigationMenuContent: React.FC<\n  GlassNavigationMenuContentProps\n> = ({ children, className, isOpen = true }) => {\n  if (!isOpen) return null;\n\n  return (\n    <Motion preset=\"slideDown\" duration={200}>\n      <div className={className}>{children}</div>\n    </Motion>\n  );\n};\n\n/**\n * GlassNavigationMenuItem component\n * Individual navigation menu item\n */\nexport const GlassNavigationMenuItem: React.FC<\n  GlassNavigationMenuItemProps\n> = ({\n  item,\n  isActive = false,\n  hasSubmenuOpen = false,\n  collapsed = false,\n  size = \"md\",\n  onClick,\n  onToggleSubmenu,\n  className,\n}) => {\n  const hoverTimer = React.useRef<number | null>(null);\n\n  const clearHoverTimer = () => {\n    if (hoverTimer.current) {\n      window.clearTimeout(hoverTimer.current);\n      hoverTimer.current = null;\n    }\n  };\n\n  const onHoverEnter = () => {\n    if (!item?.children || item?.children.length === 0 || collapsed) return;\n    clearHoverTimer();\n    hoverTimer.current = window.setTimeout(() => {\n      if (!hasSubmenuOpen) onToggleSubmenu(item?.id);\n    }, 120);\n  };\n\n  const onHoverLeave = () => {\n    if (!item?.children || item?.children.length === 0 || collapsed) return;\n    clearHoverTimer();\n    hoverTimer.current = window.setTimeout(() => {\n      if (hasSubmenuOpen) onToggleSubmenu(item?.id);\n    }, 180);\n  };\n\n  // Cleanup timer on unmount\n  React.useEffect(() => {\n    return () => {\n      clearHoverTimer();\n    };\n  }, []);\n\n  const sizeClasses = {\n    sm: \"h-8 glass-px-3 glass-text-sm\",\n    md: \"h-10 glass-px-4 glass-text-base\",\n    lg: \"h-12 glass-px-6 glass-text-lg\",\n  };\n\n  const handleClick = () => {\n    onClick(item);\n  };\n\n  const handleSubmenuToggle = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    onToggleSubmenu(item?.id);\n  };\n\n  if (item?.separator) {\n    return (\n      <div className=\"glass-h-px glass-surface-subtle/20 glass-mx-4 glass-my-2\" />\n    );\n  }\n\n  if (collapsed) {\n    return (\n      <Motion preset=\"none\">\n        <button\n          className={cn(\n            \"glass-relative glass-flex glass-items-center glass-justify-center glass-w-full\",\n            \"glass-text-primary/70 hover:glass-text-primary transition-colors duration-200\",\n            \"hover:bg-white/10 glass-radius-lg\",\n            \"glass-focus glass-touch-target glass-contrast-guard\",\n            \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30 focus:ring-offset-2 focus:ring-offset-transparent\",\n            \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n            sizeClasses?.[size],\n            {\n              \"bg-white/20 glass-text-primary\": isActive,\n              \"glass-text-primary\": isActive,\n            },\n            className\n          )}\n          onClick={handleClick}\n          disabled={item?.disabled}\n          title={item?.label}\n          type=\"button\"\n          style={{\n            border: 0,\n            background: \"transparent\",\n            color: \"inherit\",\n            font: \"inherit\",\n          }}\n        >\n          {item?.icon && (\n            <div className=\"glass-flex glass-items-center glass-justify-center\">\n              {item?.icon}\n            </div>\n          )}\n\n          {item?.badge && (\n            <div className=\"glass-absolute glass-top-1 glass--right-1 glass-w-5 glass-h-5 glass-surface-red glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs glass-font-bold glass-text-primary\">\n              {typeof item?.badge === \"number\" && item?.badge > 99\n                ? \"99+\"\n                : item?.badge}\n            </div>\n          )}\n        </button>\n      </Motion>\n    );\n  }\n\n  return (\n    <Motion preset=\"none\">\n      <button\n        className={cn(\n          \"glass-relative glass-flex glass-items-center glass-justify-between glass-w-full\",\n          \"glass-text-primary/70 hover:glass-text-primary transition-all duration-200\",\n          \"hover:bg-white/10 glass-radius-lg\",\n          \"glass-focus glass-touch-target glass-contrast-guard\",\n          \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30 focus:ring-offset-2 focus:ring-offset-transparent\",\n          \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n          sizeClasses?.[size],\n          {\n            \"bg-white/20 glass-text-primary shadow-md\": isActive,\n            \"glass-text-primary\": isActive,\n          },\n          className\n        )}\n        onClick={handleClick}\n        onMouseEnter={onHoverEnter}\n        onMouseLeave={onHoverLeave}\n        disabled={item?.disabled}\n        type=\"button\"\n        style={{\n          border: 0,\n          background: \"transparent\",\n          color: \"inherit\",\n          font: \"inherit\",\n        }}\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-3 glass-flex-1 glass-min-w-0\">\n          {/* Icon */}\n          {item?.icon && (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-flex-shrink-0\">\n              {item?.icon}\n            </div>\n          )}\n\n          {/* Content */}\n          <div className=\"glass-flex-1 glass-min-w-0 glass-text-left\">\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <span className=\"glass-truncate glass-font-medium\">\n                {item?.label}\n              </span>\n\n              {item?.badge && (\n                <span className=\"glass-flex-shrink-0 glass-px-2 glass-py-0.5 glass-surface-red/20 glass-text-secondary glass-radius-full glass-text-xs glass-font-medium\">\n                  {typeof item?.badge === \"number\" && item?.badge > 99\n                    ? \"99+\"\n                    : item?.badge}\n                </span>\n              )}\n            </div>\n\n            {item?.description && (\n              <p className=\"glass-text-primary-glass-opacity-50 glass-text-sm glass-truncate glass-mt-0-5\">\n                {item?.description}\n              </p>\n            )}\n          </div>\n        </div>\n\n        {/* Right side actions */}\n        <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-shrink-0\">\n          {/* External link indicator */}\n          {item?.external && (\n            <div className=\"glass-w-3 glass-h-3 glass-text-primary-glass-opacity-50\">\n              \u2197\n            </div>\n          )}\n\n          {/* Featured indicator */}\n          {item?.featured && (\n            <div className=\"glass-w-2 glass-h-2 glass-surface-yellow glass-radius-full glass-animate-pulse\" />\n          )}\n\n          {/* Submenu toggle */}\n          {item?.children && item?.children.length > 0 && (\n            <button\n              onClick={handleSubmenuToggle}\n              className=\"glass-p-1 hover:glass-surface-subtle/10 glass-radius-md glass-transition-colors glass-duration-200 glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Toggle submenu\"\n              type=\"button\"\n              style={{\n                border: 0,\n                background: \"transparent\",\n                color: \"inherit\",\n                font: \"inherit\",\n              }}\n            >\n              <Motion preset=\"rotateIn\" duration={200}>\n                <ChevronRight className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-50\" />\n              </Motion>\n            </button>\n          )}\n        </div>\n      </button>\n    </Motion>\n  );\n};\n\n/**\n * Hook for managing navigation menu state\n */\nexport const useNavigationMenu = (initialActiveItem?: string) => {\n  const [activeItem, setActiveItem] = useState(initialActiveItem);\n  const [collapsed, setCollapsed] = useState(false);\n\n  const navigateTo = (item: NavigationItem) => {\n    setActiveItem(item?.id);\n    if (item?.href) {\n      if (item?.external) {\n        window.open(item?.href, \"_blank\");\n      } else {\n        window.location.href = item?.href;\n      }\n    } else {\n      item?.action?.();\n    }\n  };\n\n  return {\n    activeItem,\n    setActiveItem,\n    collapsed,\n    setCollapsed,\n    navigateTo,\n    toggleCollapsed: () => setCollapsed(!collapsed),\n  };\n};\n\n/**\n * Preset navigation configurations\n */\nexport const createDashboardNavigation = (): NavigationItem[] => [\n  {\n    id: \"dashboard\",\n    label: \"Dashboard\",\n    icon: \"\uD83D\uDCCA\",\n    href: \"/dashboard\",\n    description: \"Overview and analytics\",\n  },\n  {\n    id: \"projects\",\n    label: \"Projects\",\n    icon: \"\uD83D\uDCC1\",\n    href: \"/projects\",\n    badge: 3,\n    children: [\n      {\n        id: \"projects-active\",\n        label: \"Active Projects\",\n        href: \"/projects/active\",\n        badge: 2,\n      },\n      {\n        id: \"projects-completed\",\n        label: \"Completed\",\n        href: \"/projects/completed\",\n        badge: 1,\n      },\n    ],\n  },\n  {\n    id: \"analytics\",\n    label: \"Analytics\",\n    icon: \"\uD83D\uDCC8\",\n    href: \"/analytics\",\n    featured: true,\n  },\n];\n\nexport const createAdminNavigation = (): NavigationItem[] => [\n  {\n    id: \"users\",\n    label: \"User Management\",\n    icon: \"\uD83D\uDC65\",\n    href: \"/admin/users\",\n    children: [\n      {\n        id: \"users-list\",\n        label: \"All Users\",\n        href: \"/admin/users\",\n      },\n      {\n        id: \"users-roles\",\n        label: \"Roles & Permissions\",\n        href: \"/admin/users/roles\",\n      },\n    ],\n  },\n  {\n    id: \"system\",\n    label: \"System Settings\",\n    icon: \"\u2699\uFE0F\",\n    href: \"/admin/system\",\n  },\n  {\n    id: \"logs\",\n    label: \"Audit Logs\",\n    icon: \"\uD83D\uDCCB\",\n    href: \"/admin/logs\",\n  },\n];\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ChevronLeft,\n  ChevronRight,\n  ChevronsLeft,\n  ChevronsRight,\n  MoreHorizontal,\n} from \"@/icons\";\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  createPaginationA11y,\n  useA11yId,\n  announceToScreenReader,\n  keyboardHandlers,\n} from \"../../utils/a11y\";\n\nexport interface GlassPaginationProps {\n  /**\n   * Current page (1-based)\n   */\n  currentPage: number;\n  /**\n   * Total number of pages\n   */\n  totalPages: number;\n  /**\n   * Callback when page changes\n   */\n  onPageChange: (page: number) => void;\n  /**\n   * Maximum number of page buttons to show\n   */\n  maxPageButtons?: number;\n  /**\n   * Show first/last page buttons\n   */\n  showFirstLast?: boolean;\n  /**\n   * Show previous/next buttons\n   */\n  showPrevNext?: boolean;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n\n  // Accessibility props\n  /**\n   * Accessible label for the pagination component\n   */\n  \"aria-label\"?: string;\n  /**\n   * Whether to announce page changes to screen readers\n   */\n  announcePageChanges?: boolean;\n  \"data-testid\"?: string;\n}\n\nexport interface GlassPaginationContentProps {\n  /**\n   * Pagination content\n   */\n  children: React.ReactNode;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nexport interface GlassPaginationItemProps {\n  /**\n   * Item content\n   */\n  children: React.ReactNode;\n  /**\n   * Whether item is active\n   */\n  isActive?: boolean;\n  /**\n   * Whether item is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Click handler\n   */\n  onClick?: () => void;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Accessible label\n   */\n  ariaLabel?: string;\n  /**\n   * Internal ref for page registration\n   */\n  innerRef?: (el: HTMLDivElement | null) => void;\n}\n\n/**\n * GlassPagination component\n * A glassmorphism pagination component\n */\nexport const GlassPagination: React.FC<GlassPaginationProps> = ({\n  currentPage,\n  totalPages,\n  onPageChange,\n  maxPageButtons = 7,\n  showFirstLast = true,\n  showPrevNext = true,\n  size = \"md\",\n  className,\n  disabled = false,\n  loading = false,\n  \"aria-label\": ariaLabel = \"Pagination\",\n  announcePageChanges = true,\n  \"data-testid\": dataTestId,\n}) => {\n  const getPageNumbers = () => {\n    const pages: (number | string)[] = [];\n    const halfMax = Math.floor(maxPageButtons / 2);\n\n    if (totalPages <= maxPageButtons) {\n      // Show all pages if total is less than max buttons\n      for (let i = 1; i <= totalPages; i++) {\n        pages.push(i);\n      }\n    } else {\n      // Always show first page\n      pages.push(1);\n\n      // Calculate start and end of middle section\n      let start = Math.max(2, currentPage - halfMax);\n      let end = Math.min(totalPages - 1, currentPage + halfMax);\n\n      // Adjust if we're near the beginning\n      if (currentPage <= halfMax + 1) {\n        end = Math.min(totalPages - 1, maxPageButtons - 1);\n      }\n      // Adjust if we're near the end\n      else if (currentPage >= totalPages - halfMax) {\n        start = Math.max(2, totalPages - maxPageButtons + 2);\n      }\n\n      // Add ellipsis after first page if needed\n      if (start > 2) {\n        pages.push(\"...\");\n      }\n\n      // Add middle pages\n      for (let i = start; i <= end; i++) {\n        pages.push(i);\n      }\n\n      // Add ellipsis before last page if needed\n      if (end < totalPages - 1) {\n        pages.push(\"...\");\n      }\n\n      // Always show last page\n      if (totalPages > 1) {\n        pages.push(totalPages);\n      }\n    }\n\n    return pages;\n  };\n\n  const handlePageChange = (page: number) => {\n    if (\n      page >= 1 &&\n      page <= totalPages &&\n      page !== currentPage &&\n      !disabled &&\n      !loading\n    ) {\n      const previousPage = currentPage;\n      onPageChange(page);\n\n      // Announce page change to screen readers\n      if (announcePageChanges) {\n        const direction = page > previousPage ? \"next\" : \"previous\";\n        announceToScreenReader(\n          `Moved to page ${page} of ${totalPages}`,\n          \"polite\"\n        );\n      }\n    }\n  };\n\n  const sizeClasses = {\n    sm: \"h-8 glass-px-2 glass-text-sm\",\n    md: \"h-10 glass-px-3 glass-text-base\",\n    lg: \"h-12 glass-px-4 glass-text-lg\",\n  };\n\n  const pageNumbers = getPageNumbers();\n\n  // Ink highlight for active page number\n  const pagesRef = React.useRef<HTMLDivElement>(null);\n  const pageRefMap = React.useRef(new Map<number, HTMLDivElement>());\n  const [ink, setInk] = React.useState<{ left: number; width: number }>({\n    left: 0,\n    width: 0,\n  });\n\n  const updateInk = React.useCallback(() => {\n    const activeEl = pageRefMap.current.get(currentPage);\n    const container = pagesRef.current;\n    if (!activeEl || !container) return;\n    const cr = container.getBoundingClientRect();\n    const ar = activeEl.getBoundingClientRect();\n    setInk({ left: ar.left - cr.left, width: ar.width });\n  }, [currentPage]);\n\n  const registerPageRef = (page: number, el: HTMLDivElement | null) => {\n    const map = pageRefMap.current;\n    if (el) map.set(page, el);\n    else map.delete(page);\n    // Defer measure to next frame\n    requestAnimationFrame(updateInk);\n  };\n\n  React.useEffect(() => {\n    updateInk();\n    const onResize = () => updateInk();\n    window.addEventListener(\"resize\", onResize);\n    return () => window.removeEventListener(\"resize\", onResize);\n  }, [updateInk]);\n\n  return (\n    <nav\n      data-glass-component\n      aria-label={ariaLabel}\n      role=\"navigation\"\n      className={cn(className)}\n      data-testid={dataTestId}\n    >\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level2\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"glass-inline-flex glass-max-w-full glass-flex-wrap glass-items-center glass-justify-center glass-gap-1 glass-p-1 glass-backdrop-blur-md glass-ring-1 glass-ring-white/10 glass-bg-white/5\",\n          disabled && \"opacity-50 pointer-events-none\",\n          className\n        )}\n        aria-busy={loading || undefined}\n      >\n        {/* First page button */}\n        {showFirstLast && totalPages > 3 && (\n          <GlassPaginationItem\n            onClick={() => handlePageChange(1)}\n            disabled={currentPage === 1 || disabled || loading}\n            size={size}\n            ariaLabel=\"First page\"\n          >\n            <ChevronsLeft className=\"glass-w-4 glass-h-4\" />\n          </GlassPaginationItem>\n        )}\n\n        {/* Previous page button */}\n        {showPrevNext && (\n          <GlassPaginationItem\n            onClick={() => handlePageChange(currentPage - 1)}\n            disabled={currentPage === 1 || disabled || loading}\n            size={size}\n            ariaLabel=\"Previous page\"\n          >\n            <ChevronLeft className=\"glass-w-4 glass-h-4\" />\n          </GlassPaginationItem>\n        )}\n\n        {/* Page numbers */}\n        <div\n          ref={pagesRef}\n          className=\"glass-relative glass-inline-flex glass-flex-wrap glass-items-center glass-justify-center glass-gap-1\"\n        >\n          {/* Ink indicator */}\n          <div\n            className=\"glass-absolute glass-bottom-0 glass-h-0-5 glass-surface-primary glass-transition-all glass-duration-200\"\n            style={{ left: ink.left, width: ink.width }}\n          />\n          {pageNumbers.map((page, index) => (\n            <React.Fragment key={index}>\n              {page === \"...\" ? (\n                <GlassPaginationItem\n                  disabled\n                  size={size}\n                  ariaLabel=\"More pages\"\n                >\n                  <MoreHorizontal className=\"glass-w-4 glass-h-4\" />\n                </GlassPaginationItem>\n              ) : (\n                <GlassPaginationItem\n                  isActive={page === currentPage}\n                  onClick={() => handlePageChange(page as number)}\n                  disabled={disabled || loading}\n                  size={size}\n                  ariaLabel={`Page ${page}`}\n                  innerRef={(el) => registerPageRef(page as number, el)}\n                >\n                  {page}\n                </GlassPaginationItem>\n              )}\n            </React.Fragment>\n          ))}\n        </div>\n\n        {/* Next page button */}\n        {showPrevNext && (\n          <GlassPaginationItem\n            onClick={() => handlePageChange(currentPage + 1)}\n            disabled={currentPage === totalPages || disabled || loading}\n            size={size}\n            ariaLabel=\"Next page\"\n          >\n            <ChevronRight className=\"glass-w-4 glass-h-4\" />\n          </GlassPaginationItem>\n        )}\n\n        {/* Last page button */}\n        {showFirstLast && totalPages > 3 && (\n          <GlassPaginationItem\n            onClick={() => handlePageChange(totalPages)}\n            disabled={currentPage === totalPages || disabled || loading}\n            size={size}\n            ariaLabel=\"Last page\"\n          >\n            <ChevronsRight className=\"glass-w-4 glass-h-4\" />\n          </GlassPaginationItem>\n        )}\n\n        {loading && (\n          <div className=\"glass-ml-2\">\n            <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-white/30 glass-border-t-white/60 glass-radius-full glass-animate-spin\" />\n          </div>\n        )}\n      </OptimizedGlass>\n    </nav>\n  );\n};\n\n/**\n * GlassPaginationContent component\n * Wrapper for pagination content\n */\nexport const GlassPaginationContent: React.FC<GlassPaginationContentProps> = ({\n  children,\n  className,\n}) => {\n  return (\n    <div className={cn(\"flex items-center justify-center\", className)}>\n      {children}\n    </div>\n  );\n};\n\n/**\n * GlassPaginationItem component\n * Individual pagination item/button\n */\nexport const GlassPaginationItem: React.FC<GlassPaginationItemProps> = ({\n  children,\n  isActive = false,\n  disabled = false,\n  onClick,\n  size = \"md\",\n  className,\n  ariaLabel,\n  innerRef,\n}) => {\n  // Create accessibility attributes\n  const a11yProps = createPaginationA11y({\n    label: ariaLabel,\n    current: isActive,\n    disabled,\n  });\n\n  // Add role=\"button\" for interactive divs with aria-label\n  if (ariaLabel) {\n    a11yProps.role = \"button\";\n  }\n  const sizeClasses = {\n    sm: \"h-8 w-8 glass-text-sm\",\n    md: \"h-10 w-10 glass-text-base\",\n    lg: \"h-12 w-12 glass-text-lg\",\n  };\n\n  return (\n    <Motion preset=\"none\">\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation={isActive ? \"level3\" : \"level1\"}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        liftOnHover\n        press\n        ref={innerRef}\n        className={cn(\n          \"glass-relative glass-flex glass-items-center glass-justify-center glass-font-medium glass-radius-md\",\n          \"glass-backdrop-blur-md border border-white/20\",\n          \"transition-all duration-200 glass-sheen\",\n          \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30 focus:ring-offset-2 focus:ring-offset-transparent\",\n          \"disabled:opacity-50 glass-disabled-cursor-not-allowed disabled:hover:transform-none\",\n          sizeClasses[size],\n          {\n            \"bg-white/15 glass-text-primary shadow-lg ring-1 ring-white/30 border-white/30\":\n              isActive,\n            \"bg-white/8 hover:bg-white/12 glass-text-primary/80 hover:glass-text-primary glass-hover--translate-y-0-5 border-white/20 hover:border-white/30\":\n              !isActive && !disabled,\n          },\n          className\n        )}\n        onClick={onClick}\n        {...a11yProps}\n      >\n        {children}\n      </OptimizedGlass>\n    </Motion>\n  );\n};\n\n/**\n * Hook for managing pagination state\n */\nexport const usePagination = (\n  initialPage = 1,\n  totalItems = 0,\n  itemsPerPage = 10\n) => {\n  const [currentPage, setCurrentPage] = React.useState(initialPage);\n  const [itemsPerPageState, setItemsPerPage] = React.useState(itemsPerPage);\n\n  const totalPages = Math.ceil(totalItems / itemsPerPageState);\n  const startIndex = (currentPage - 1) * itemsPerPageState;\n  const endIndex = startIndex + itemsPerPageState;\n  const currentItems = React.useMemo(() => {\n    // This would typically slice from your data array\n    return { startIndex, endIndex };\n  }, [startIndex, endIndex]);\n\n  const goToPage = (page: number) => {\n    const validPage = Math.max(1, Math.min(page, totalPages));\n    setCurrentPage(validPage);\n  };\n\n  const nextPage = () => goToPage(currentPage + 1);\n  const prevPage = () => goToPage(currentPage - 1);\n  const firstPage = () => goToPage(1);\n  const lastPage = () => goToPage(totalPages);\n\n  return {\n    currentPage,\n    totalPages,\n    itemsPerPage: itemsPerPageState,\n    setItemsPerPage,\n    currentItems,\n    goToPage,\n    nextPage,\n    prevPage,\n    firstPage,\n    lastPage,\n    hasNextPage: currentPage < totalPages,\n    hasPrevPage: currentPage > 1,\n  };\n};\n\n/**\n * Compound pagination component with item info\n */\nexport interface GlassPaginationWithInfoProps extends GlassPaginationProps {\n  /**\n   * Total number of items\n   */\n  totalItems: number;\n  /**\n   * Items per page\n   */\n  itemsPerPage: number;\n  /**\n   * Item name (e.g., \"items\", \"results\", \"products\")\n   */\n  itemName?: string;\n  /**\n   * Show item range info\n   */\n  showItemInfo?: boolean;\n}\n\nexport const GlassPaginationWithInfo: React.FC<\n  GlassPaginationWithInfoProps\n> = ({\n  totalItems,\n  itemsPerPage,\n  itemName = \"items\",\n  showItemInfo = true,\n  currentPage,\n  totalPages,\n  onPageChange,\n  ...paginationProps\n}) => {\n  const startItem = (currentPage - 1) * itemsPerPage + 1;\n  const endItem = Math.min(currentPage * itemsPerPage, totalItems);\n\n  return (\n    <div className=\"glass-flex glass-flex-col sm:glass-flex-row glass-items-center glass-justify-between glass-gap-4\">\n      {showItemInfo && (\n        <div className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n          Showing{\" \"}\n          <span className=\"glass-font-medium glass-text-primary\">\n            {startItem}-{endItem}\n          </span>{\" \"}\n          of{\" \"}\n          <span className=\"glass-font-medium glass-text-primary\">\n            {totalItems.toLocaleString()}\n          </span>{\" \"}\n          {itemName}\n        </div>\n      )}\n\n      <GlassPaginationContent>\n        <GlassPagination\n          currentPage={currentPage}\n          totalPages={totalPages}\n          onPageChange={onPageChange}\n          {...paginationProps}\n        />\n      </GlassPaginationContent>\n    </div>\n  );\n};\n", "\"use client\";\n\nimport React, { forwardRef, useId, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface GlassPageTab {\n  value: string;\n  label: React.ReactNode;\n  disabled?: boolean;\n  badge?: React.ReactNode;\n  panel?: React.ReactNode;\n}\n\nexport interface GlassPageTabsProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  tabs: GlassPageTab[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (value: string) => void;\n  orientation?: \"horizontal\" | \"vertical\";\n  activationMode?: \"automatic\" | \"manual\";\n  renderPanel?: boolean;\n}\n\nexport const GlassPageTabs = forwardRef<HTMLDivElement, GlassPageTabsProps>(\n  (\n    {\n      tabs,\n      value,\n      defaultValue,\n      onChange,\n      orientation = \"horizontal\",\n      activationMode = \"automatic\",\n      renderPanel = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const firstEnabled = tabs.find((tab) => !tab.disabled)?.value;\n    const [internalValue, setInternalValue] = useState(\n      defaultValue ?? value ?? firstEnabled ?? \"\"\n    );\n    const selectedValue = value ?? internalValue;\n    const selectedIndex = Math.max(\n      0,\n      tabs.findIndex((tab) => tab.value === selectedValue)\n    );\n    const selectedTab = tabs[selectedIndex];\n\n    const selectTab = (nextValue: string) => {\n      if (value === undefined) setInternalValue(nextValue);\n      onChange?.(nextValue);\n    };\n\n    const focusTab = (nextIndex: number, activate: boolean) => {\n      const nextTab = tabs[nextIndex];\n      if (!nextTab || nextTab.disabled) return;\n      const trigger = document.getElementById(\n        `${generatedId}-tab-${nextTab.value}`\n      );\n      trigger?.focus();\n      if (activate) selectTab(nextTab.value);\n    };\n\n    const move = (currentIndex: number, delta: number, activate: boolean) => {\n      if (!tabs.length) return;\n      for (let step = 1; step <= tabs.length; step += 1) {\n        const nextIndex =\n          (currentIndex + delta * step + tabs.length) % tabs.length;\n        if (!tabs[nextIndex]?.disabled) {\n          focusTab(nextIndex, activate);\n          return;\n        }\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-page-tabs\",\n          orientation === \"vertical\"\n            ? \"glass-grid glass-grid-cols-[minmax(160px,220px)_1fr] glass-gap-4\"\n            : \"glass-space-y-4\",\n          className\n        )}\n        {...props}\n      >\n        <div\n          role=\"tablist\"\n          aria-orientation={orientation}\n          className={cn(\n            \"glass-flex glass-gap-1 glass-rounded-lg glass-border glass-border-white/10 glass-bg-white/8 glass-p-1\",\n            orientation === \"vertical\" ? \"glass-flex-col\" : \"glass-flex-row\"\n          )}\n        >\n          {tabs.map((tab, index) => {\n            const selected = tab.value === selectedValue;\n            return (\n              <button\n                key={tab.value}\n                id={`${generatedId}-tab-${tab.value}`}\n                type=\"button\"\n                role=\"tab\"\n                aria-selected={selected}\n                aria-controls={`${generatedId}-panel-${tab.value}`}\n                tabIndex={selected ? 0 : -1}\n                disabled={tab.disabled}\n                className={cn(\n                  \"glass-inline-flex glass-min-h-9 glass-items-center glass-justify-center glass-gap-2 glass-rounded-md glass-px-3 glass-text-sm glass-font-medium glass-transition-colors\",\n                  selected\n                    ? \"glass-bg-white/18 glass-text-primary\"\n                    : \"glass-text-secondary hover:glass-bg-white/10 hover:glass-text-primary\",\n                  tab.disabled && \"glass-cursor-not-allowed glass-opacity-45\"\n                )}\n                onClick={() => !tab.disabled && selectTab(tab.value)}\n                onKeyDown={(event) => {\n                  const activate = activationMode === \"automatic\";\n                  if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n                    event.preventDefault();\n                    move(index, 1, activate);\n                  }\n                  if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n                    event.preventDefault();\n                    move(index, -1, activate);\n                  }\n                  if (event.key === \"Home\") {\n                    event.preventDefault();\n                    const next = tabs.findIndex((item) => !item.disabled);\n                    if (next >= 0) focusTab(next, activate);\n                  }\n                  if (event.key === \"End\") {\n                    event.preventDefault();\n                    const next = [...tabs]\n                      .reverse()\n                      .findIndex((item) => !item.disabled);\n                    if (next >= 0) focusTab(tabs.length - next - 1, activate);\n                  }\n                  if (\n                    activationMode === \"manual\" &&\n                    (event.key === \"Enter\" || event.key === \" \")\n                  ) {\n                    event.preventDefault();\n                    selectTab(tab.value);\n                  }\n                }}\n              >\n                <span>{tab.label}</span>\n                {tab.badge ? (\n                  <span className=\"glass-rounded-full glass-bg-white/12 glass-px-2 glass-py-0.5 glass-text-xs\">\n                    {tab.badge}\n                  </span>\n                ) : null}\n              </button>\n            );\n          })}\n        </div>\n        {renderPanel && selectedTab ? (\n          <div\n            id={`${generatedId}-panel-${selectedTab.value}`}\n            role=\"tabpanel\"\n            aria-labelledby={`${generatedId}-tab-${selectedTab.value}`}\n            tabIndex={0}\n            className=\"glass-rounded-lg glass-border glass-border-white/10 glass-bg-white/6 glass-p-4\"\n          >\n            {selectedTab.panel}\n          </div>\n        ) : null}\n      </div>\n    );\n  }\n);\n\nGlassPageTabs.displayName = \"GlassPageTabs\";\n", "\"use client\";\nimport React, { forwardRef, useState, useEffect } from \"react\";\nimport {\n  GlassMobileNav,\n  MobileNavItem,\n  MobileNavSection,\n} from \"./GlassMobileNav\";\nimport { GlassBottomNav, BottomNavItem } from \"./GlassBottomNav\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface ResponsiveNavConfig {\n  /**\n   * Mobile breakpoint (px)\n   */\n  mobileBreakpoint?: number;\n  /**\n   * Tablet breakpoint (px)\n   */\n  tabletBreakpoint?: number;\n  /**\n   * Navigation behavior on mobile\n   */\n  mobileNavType?: \"drawer\" | \"bottom\" | \"both\";\n  /**\n   * Navigation behavior on tablet\n   */\n  tabletNavType?: \"drawer\" | \"bottom\" | \"sidebar\";\n}\n\nexport interface GlassResponsiveNavProps {\n  /**\n   * Responsive configuration\n   */\n  config?: ResponsiveNavConfig;\n  /**\n   * Whether mobile nav is open\n   */\n  mobileNavOpen?: boolean;\n  /**\n   * Mobile nav open state change handler\n   */\n  onMobileNavOpenChange?: (open: boolean) => void;\n  /**\n   * Navigation sections (for drawer/sidebar)\n   */\n  navigation?: MobileNavSection[];\n  /**\n   * Bottom navigation items\n   */\n  bottomNavItems?: BottomNavItem[];\n  /**\n   * Current active path\n   */\n  activePath?: string;\n  /**\n   * Active bottom nav item ID\n   */\n  activeBottomNavId?: string;\n  /**\n   * Bottom nav active change handler\n   */\n  onBottomNavActiveChange?: (id: string) => void;\n  /**\n   * Path matcher function\n   */\n  isActive?: (href: string, activePath: string) => boolean;\n  /**\n   * Logo/brand component\n   */\n  logo?: React.ReactNode;\n  /**\n   * Navigation title\n   */\n  title?: string;\n  /**\n   * Footer content for mobile nav\n   */\n  footer?: React.ReactNode;\n  /**\n   * Glass elevation\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Custom classes\n   */\n  className?: string;\n  /**\n   * Children content\n   */\n  children?: React.ReactNode;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * ARIA label for the navigation\n   */\n  \"aria-label\"?: string;\n}\n\n/**\n * GlassResponsiveNav component\n * Adaptive navigation that switches between mobile drawer and bottom nav based on screen size\n */\nexport const GlassResponsiveNav = forwardRef<\n  HTMLDivElement,\n  GlassResponsiveNavProps\n>(\n  (\n    {\n      config = {},\n      mobileNavOpen = false,\n      onMobileNavOpenChange,\n      navigation = [],\n      bottomNavItems = [],\n      activePath = \"\",\n      activeBottomNavId,\n      onBottomNavActiveChange,\n      isActive,\n      logo,\n      title,\n      footer,\n      elevation = \"level2\",\n      respectMotionPreference = true,\n      className,\n      children,\n      \"aria-label\": ariaLabel,\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const navId = useA11yId(\"responsive-nav\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    const {\n      mobileBreakpoint = 768,\n      tabletBreakpoint = 1024,\n      mobileNavType = \"both\",\n      tabletNavType = \"sidebar\",\n    } = config;\n\n    const [screenSize, setScreenSize] = useState<\n      \"mobile\" | \"tablet\" | \"desktop\"\n    >(\"desktop\");\n\n    // Handle responsive behavior\n    useEffect(() => {\n      const checkScreenSize = () => {\n        const width = window.innerWidth;\n        if (width < mobileBreakpoint) {\n          setScreenSize(\"mobile\");\n        } else if (width < tabletBreakpoint) {\n          setScreenSize(\"tablet\");\n        } else {\n          setScreenSize(\"desktop\");\n        }\n      };\n\n      checkScreenSize();\n      window.addEventListener(\"resize\", checkScreenSize);\n      return () => window.removeEventListener(\"resize\", checkScreenSize);\n    }, [mobileBreakpoint, tabletBreakpoint]);\n\n    // Determine which navigation to show\n    const shouldShowMobileNav = () => {\n      if (screenSize === \"mobile\") {\n        return mobileNavType === \"drawer\" || mobileNavType === \"both\";\n      }\n      if (screenSize === \"tablet\") {\n        return tabletNavType === \"drawer\";\n      }\n      return false;\n    };\n\n    const shouldShowBottomNav = () => {\n      if (screenSize === \"mobile\") {\n        return mobileNavType === \"bottom\" || mobileNavType === \"both\";\n      }\n      if (screenSize === \"tablet\") {\n        return tabletNavType === \"bottom\";\n      }\n      return false;\n    };\n\n    const desktopItems = navigation.flatMap((section) => section.items ?? []);\n    const shouldShowDesktopNav =\n      screenSize === \"desktop\" &&\n      !children &&\n      (desktopItems.length > 0 || bottomNavItems.length > 0);\n    const renderedDesktopItems =\n      desktopItems.length > 0\n        ? desktopItems\n        : bottomNavItems.map((item) => ({\n            id: item.id,\n            label: item.label,\n            icon: item.icon,\n            href: \"#\",\n          }));\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"glass-relative glass-w-full\", className)}\n        id={navId}\n        role=\"navigation\"\n        aria-label={ariaLabel || \"Responsive navigation\"}\n      >\n        {/* Mobile/Drawer Navigation */}\n        {shouldShowMobileNav() && (\n          <GlassMobileNav\n            open={mobileNavOpen}\n            onOpenChange={onMobileNavOpenChange}\n            navigation={navigation}\n            activePath={activePath}\n            isActive={isActive}\n            logo={logo}\n            title={title}\n            footer={footer}\n            elevation={elevation as 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\"}\n          />\n        )}\n\n        {/* Bottom Navigation */}\n        {shouldShowBottomNav() && bottomNavItems.length > 0 && (\n          <GlassBottomNav\n            items={bottomNavItems}\n            activeId={activeBottomNavId}\n            onActiveChange={onBottomNavActiveChange}\n            elevation={elevation as 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\"}\n            variant=\"default\"\n            className=\"glass-z-40\"\n          />\n        )}\n\n        {shouldShowDesktopNav && (\n          <div\n            className=\"glass-flex glass-max-w-full glass-min-w-0 glass-flex-wrap glass-items-center glass-justify-center glass-gap-2 glass-overflow-hidden glass-p-2 glass-radius-xl glass-border glass-surface-overlay\"\n            style={{ maxWidth: \"100%\" }}\n          >\n            {logo && (\n              <div className=\"glass-flex glass-min-w-0 glass-items-center\">\n                {logo}\n              </div>\n            )}\n            {title && (\n              <div className=\"glass-min-w-0 glass-truncate glass-text-sm glass-font-semibold glass-text-primary\">\n                {title}\n              </div>\n            )}\n            {renderedDesktopItems.map((item) => {\n              const active =\n                \"href\" in item && typeof item.href === \"string\"\n                  ? (isActive?.(item.href, activePath) ??\n                    item.href === activePath)\n                  : item.id === activeBottomNavId;\n\n              return (\n                <a\n                  key={item.id}\n                  href={\"href\" in item && item.href ? item.href : \"#\"}\n                  className={cn(\n                    \"glass-flex glass-min-w-0 glass-items-center glass-gap-2 glass-radius-lg glass-px-2 glass-py-1.5 glass-text-sm glass-transition-all\",\n                    active\n                      ? \"glass-surface-primary glass-text-primary\"\n                      : \"glass-text-primary-opacity-80\"\n                  )}\n                  style={{\n                    maxWidth: \"8rem\",\n                    transition:\n                      \"background-color var(--glass-motion-duration-fast, 160ms) var(--glass-motion-easing-standard, ease), color var(--glass-motion-duration-fast, 160ms) var(--glass-motion-easing-standard, ease)\",\n                  }}\n                  aria-current={active ? \"page\" : undefined}\n                >\n                  {item.icon && (\n                    <span className=\"glass-flex glass-items-center glass-justify-center glass-w-4 glass-h-4\">\n                      {item.icon}\n                    </span>\n                  )}\n                  <span className=\"glass-truncate\">{item.label}</span>\n                </a>\n              );\n            })}\n            {footer && <div style={{ marginLeft: \"auto\" }}>{footer}</div>}\n          </div>\n        )}\n\n        {/* Custom content */}\n        {children}\n      </div>\n    );\n  }\n);\n\nGlassResponsiveNav.displayName = \"GlassResponsiveNav\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { LiquidGlassSegmentedControl } from \"./LiquidGlassSegmentedControl\";\n\nexport interface SegmentedItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface GlassSegmentedControlProps {\n  items?: SegmentedItem[];\n  value?: string;\n  onChange?: (id: string) => void;\n  size?: \"sm\" | \"md\" | \"lg\";\n  condensed?: boolean;\n  material?: \"glass\" | \"liquid\";\n  className?: string;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Accessible label for the segmented control\n   */\n  \"aria-label\"?: string;\n  /**\n   * Test ID for testing\n   */\n  \"data-testid\"?: string;\n}\n\nexport const GlassSegmentedControl = forwardRef<\n  HTMLDivElement,\n  GlassSegmentedControlProps\n>(\n  (\n    {\n      items = [],\n      value = \"\",\n      onChange = () => {},\n      size = \"md\",\n      condensed = false,\n      material = \"glass\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Segmented control\",\n      \"data-testid\": dataTestId,\n      className,\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const segmentedId = useA11yId(\"segmented-control\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    if (material === \"liquid\") {\n      return (\n        <LiquidGlassSegmentedControl\n          ref={ref}\n          segments={items}\n          value={value}\n          onValueChange={onChange}\n          className={className}\n          aria-label={ariaLabel}\n          data-testid={dataTestId}\n        />\n      );\n    }\n    const sizes = {\n      sm: \"h-8 glass-text-xs\",\n      md: \"h-9 glass-text-sm\",\n      lg: \"h-10 glass-text-base\",\n    };\n\n    return (\n      <nav\n        aria-label={ariaLabel}\n        data-testid={dataTestId}\n        className={className}\n      >\n        <OptimizedGlass\n          ref={ref}\n          elevation={\"level1\"}\n          animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n          role=\"group\"\n          aria-label={ariaLabel}\n          id={segmentedId}\n          className={cn(\n            // Avoid clipping child button content (icons/text) against glass-radius-md corners\n            \"inline-flex items-center glass-radius-xl glass-p-1 glass-gap-1 overflow-visible\"\n          )}\n        >\n          {items.map((it: any) => (\n            <GlassButton\n              key={it.id}\n              variant={it.id === value ? \"primary\" : \"secondary\"}\n              size={size}\n              disabled={it.disabled}\n              className={cn(\n                // Prevent glyphs from being visually cropped on some GPUs/Safari when glass effects are active\n                \"glass-radius-md overflow-visible whitespace-nowrap leading-normal\",\n                sizes[size],\n                condensed && \"glass-px-2\"\n              )}\n              onClick={(e) => !it.disabled && onChange(it.id)}\n              aria-pressed={it.id === value}\n            >\n              {it.icon && (\n                <span className=\"glass-mr-2 glass-inline-glass-flex\">{it.icon}</span>\n              )}\n              {!condensed && it.label}\n            </GlassButton>\n          ))}\n        </OptimizedGlass>\n      </nav>\n    );\n  }\n);\n\nGlassSegmentedControl.displayName = \"GlassSegmentedControl\";\n\nexport default GlassSegmentedControl;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassEffectGroup } from \"../../primitives/LiquidGlassEffectGroup\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassSegment {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface LiquidGlassSegmentedControlProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  segments: LiquidGlassSegment[];\n  value?: string;\n  onValueChange?: (value: string) => void;\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n}\n\nexport const LiquidGlassSegmentedControl = forwardRef<\n  HTMLDivElement,\n  LiquidGlassSegmentedControlProps\n>(\n  (\n    {\n      segments,\n      value,\n      onValueChange,\n      density = \"comfortable\",\n      className,\n      ...props\n    },\n    ref\n  ) => (\n    <LiquidGlassMaterial\n      ref={ref}\n      material=\"liquid\"\n      radius=\"full\"\n      className={cn(\n        \"liquid-glass-segmented-control glass-inline-flex\",\n        className\n      )}\n      data-density={density}\n      {...props}\n    >\n      <LiquidGlassEffectGroup\n        className=\"glass-flex glass-gap-1 glass-p-1\"\n        role=\"group\"\n      >\n        {segments.map((segment) => {\n          const selected = segment.id === value;\n          return (\n            <button\n              key={segment.id}\n              type=\"button\"\n              disabled={segment.disabled}\n              aria-pressed={selected}\n              className={cn(\n                \"glass-flex glass-items-center glass-gap-1 glass-radius-full glass-px-3 glass-py-1 glass-text-sm glass-text-secondary\",\n                selected &&\n                  \"glass-surface-subtle/20 glass-border-white/30 glass-text-primary\"\n              )}\n              onClick={() => onValueChange?.(segment.id)}\n            >\n              {segment.icon}\n              <span>{segment.label}</span>\n            </button>\n          );\n        })}\n      </LiquidGlassEffectGroup>\n    </LiquidGlassMaterial>\n  )\n);\n\nLiquidGlassSegmentedControl.displayName = \"LiquidGlassSegmentedControl\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { Motion } from \"../../primitives\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport type PopoverPlacement =\n  | \"top\"\n  | \"top-start\"\n  | \"top-end\"\n  | \"right\"\n  | \"right-start\"\n  | \"right-end\"\n  | \"bottom\"\n  | \"bottom-start\"\n  | \"bottom-end\"\n  | \"left\"\n  | \"left-start\"\n  | \"left-end\";\n\nexport interface GlassPopoverProps {\n  /**\n   * Whether the popover is open\n   */\n  open?: boolean;\n  /**\n   * Callback when popover should close\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Initial open state when uncontrolled\n   */\n  defaultOpen?: boolean;\n  /**\n   * Popover content\n   */\n  content: React.ReactNode;\n  /**\n   * Trigger element\n   */\n  children: React.ReactElement;\n  /**\n   * Popover placement\n   */\n  placement?: PopoverPlacement;\n  /**\n   * Trigger type\n   */\n  trigger?: \"click\" | \"hover\" | \"focus\" | \"manual\";\n  /**\n   * Delay before showing (for hover trigger)\n   */\n  showDelay?: number;\n  /**\n   * Delay before hiding (for hover trigger)\n   */\n  hideDelay?: number;\n  /**\n   * Whether to show arrow\n   */\n  showArrow?: boolean;\n  /**\n   * Offset from trigger\n   */\n  offset?: number;\n  /**\n   * Whether to close on click outside\n   */\n  closeOnClickOutside?: boolean;\n  /**\n   * Whether to close on escape key\n   */\n  closeOnEscape?: boolean;\n  /**\n   * Animation preset\n   */\n  animation?: \"fade\" | \"scale\" | \"slide\";\n  /**\n   * Z-index\n   */\n  zIndex?: number;\n  /**\n   * Appearance of the surface\n   * glass: translucent glass effect (default)\n   * solid: opaque panel (no bleed-through)\n   */\n  appearance?: \"glass\" | \"solid\";\n  /**\n   * Whether to apply radial reveal mask on open\n   * Tooltips often should not be masked; defaults to true for popovers\n   */\n  radialReveal?: boolean;\n  /**\n   * Custom class for popover content\n   */\n  contentClassName?: string;\n  /**\n   * Popover title\n   */\n  title?: string;\n  /**\n   * Popover description\n   */\n  description?: string;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n  /**\n   * Additional CSS classes\n   */\n  className?: string;\n  /**\n   * Test ID for the popover\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassPopover component\n * A floating popover with glassmorphism styling\n */\nexport const GlassPopover = forwardRef<HTMLDivElement, GlassPopoverProps>(\n  (\n    {\n      open,\n      onOpenChange,\n      defaultOpen = false,\n      content,\n      children,\n      placement = \"bottom\",\n      material = \"glass\",\n      materialProps,\n      trigger: triggerType = \"click\",\n      showDelay = 200,\n      hideDelay = 200,\n      showArrow = true,\n      offset = 8,\n      closeOnClickOutside = true,\n      closeOnEscape = true,\n      animation = \"scale\",\n      zIndex = 9999,\n      contentClassName,\n      appearance = \"glass\",\n      radialReveal = true,\n      title,\n      description,\n      className,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const [position, setPosition] = useState({ top: 0, left: 0 });\n    const [actualPlacement, setActualPlacement] =\n      useState<PopoverPlacement>(placement);\n    const triggerRef = useRef<HTMLElement>(null);\n    const popoverRef = useRef<HTMLDivElement>(null);\n    const showTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n    const hideTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n    // Support controlled and uncontrolled usage\n    const isControlled = typeof open === \"boolean\";\n    const [internalOpen, setInternalOpen] = useState<boolean>(defaultOpen);\n    const isOpen = isControlled ? (open as boolean) : internalOpen;\n    const setOpen = useCallback(\n      (value: boolean) => {\n        if (value === isOpen) {\n          return;\n        }\n\n        if (isControlled) {\n          onOpenChange?.(value);\n        } else {\n          setInternalOpen(value);\n        }\n      },\n      [isControlled, isOpen, onOpenChange]\n    );\n\n    // Calculate position\n    const calculatePosition = useCallback(() => {\n      if (!triggerRef.current || !popoverRef.current) return;\n\n      const triggerRect = triggerRef.current.getBoundingClientRect();\n      const popoverRect = popoverRef.current.getBoundingClientRect();\n      const viewport = {\n        width: window.innerWidth,\n        height: window.innerHeight,\n      };\n\n      let newPlacement = placement;\n      let top = 0;\n      let left = 0;\n\n      // Calculate initial position based on placement\n      switch (placement) {\n        case \"top\":\n          top = triggerRect.top - popoverRect.height - offset;\n          left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n          break;\n        case \"top-start\":\n          top = triggerRect.top - popoverRect.height - offset;\n          left = triggerRect.left;\n          break;\n        case \"top-end\":\n          top = triggerRect.top - popoverRect.height - offset;\n          left = triggerRect.right - popoverRect.width;\n          break;\n        case \"right\":\n          top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n          left = triggerRect.right + offset;\n          break;\n        case \"right-start\":\n          top = triggerRect.top;\n          left = triggerRect.right + offset;\n          break;\n        case \"right-end\":\n          top = triggerRect.bottom - popoverRect.height;\n          left = triggerRect.right + offset;\n          break;\n        case \"bottom\":\n          top = triggerRect.bottom + offset;\n          left = triggerRect.left + (triggerRect.width - popoverRect.width) / 2;\n          break;\n        case \"bottom-start\":\n          top = triggerRect.bottom + offset;\n          left = triggerRect.left;\n          break;\n        case \"bottom-end\":\n          top = triggerRect.bottom + offset;\n          left = triggerRect.right - popoverRect.width;\n          break;\n        case \"left\":\n          top = triggerRect.top + (triggerRect.height - popoverRect.height) / 2;\n          left = triggerRect.left - popoverRect.width - offset;\n          break;\n        case \"left-start\":\n          top = triggerRect.top;\n          left = triggerRect.left - popoverRect.width - offset;\n          break;\n        case \"left-end\":\n          top = triggerRect.bottom - popoverRect.height;\n          left = triggerRect.left - popoverRect.width - offset;\n          break;\n      }\n\n      // Flip if out of bounds\n      if (top < 0 && placement.startsWith(\"top\")) {\n        newPlacement = placement.replace(\"top\", \"bottom\") as PopoverPlacement;\n        top = triggerRect.bottom + offset;\n      } else if (\n        top + popoverRect.height > viewport.height &&\n        placement.startsWith(\"bottom\")\n      ) {\n        newPlacement = placement.replace(\"bottom\", \"top\") as PopoverPlacement;\n        top = triggerRect.top - popoverRect.height - offset;\n      }\n\n      if (left < 0 && placement.startsWith(\"left\")) {\n        newPlacement = placement.replace(\"left\", \"right\") as PopoverPlacement;\n        left = triggerRect.right + offset;\n      } else if (\n        left + popoverRect.width > viewport.width &&\n        placement.startsWith(\"right\")\n      ) {\n        newPlacement = placement.replace(\"right\", \"left\") as PopoverPlacement;\n        left = triggerRect.left - popoverRect.width - offset;\n      }\n\n      // Adjust for viewport boundaries\n      if (left < 0) left = 8;\n      if (left + popoverRect.width > viewport.width) {\n        left = viewport.width - popoverRect.width - 8;\n      }\n      if (top < 0) top = 8;\n      if (top + popoverRect.height > viewport.height) {\n        top = viewport.height - popoverRect.height - 8;\n      }\n\n      setPosition({ top, left });\n      setActualPlacement(newPlacement);\n    }, [placement, offset]);\n\n    // Handle trigger interactions\n    const handleShow = useCallback(() => {\n      if (hideTimeoutRef.current) {\n        clearTimeout(hideTimeoutRef.current);\n        hideTimeoutRef.current = undefined;\n      }\n\n      if (triggerType === \"hover\") {\n        showTimeoutRef.current = setTimeout(() => {\n          setOpen(true);\n        }, showDelay);\n      } else {\n        setOpen(true);\n      }\n    }, [triggerType, showDelay, setOpen]);\n\n    const handleHide = useCallback(() => {\n      if (showTimeoutRef.current) {\n        clearTimeout(showTimeoutRef.current);\n        showTimeoutRef.current = undefined;\n      }\n\n      if (triggerType === \"hover\") {\n        hideTimeoutRef.current = setTimeout(() => {\n          setOpen(false);\n        }, hideDelay);\n      } else {\n        setOpen(false);\n      }\n    }, [triggerType, hideDelay, setOpen]);\n\n    const handleClick = useCallback(() => {\n      if (triggerType === \"click\") {\n        setOpen(!isOpen);\n      }\n    }, [triggerType, isOpen, setOpen]);\n\n    // Update position when open\n    useEffect(() => {\n      if (isOpen) {\n        calculatePosition();\n\n        const handleResize = () => calculatePosition();\n        const handleScroll = () => calculatePosition();\n\n        window.addEventListener(\"resize\", handleResize);\n        window.addEventListener(\"scroll\", handleScroll, true);\n\n        return () => {\n          window.removeEventListener(\"resize\", handleResize);\n          window.removeEventListener(\"scroll\", handleScroll, true);\n        };\n      }\n    }, [isOpen, calculatePosition]);\n\n    // Handle click outside\n    useEffect(() => {\n      if (!isOpen || !closeOnClickOutside) return;\n\n      const handleClickOutside = (event: MouseEvent) => {\n        const target = event.target as Node;\n        if (\n          triggerRef.current?.contains(target) ||\n          popoverRef.current?.contains(target)\n        ) {\n          return;\n        }\n        setOpen(false);\n      };\n\n      document.addEventListener(\"mousedown\", handleClickOutside);\n      return () =>\n        document.removeEventListener(\"mousedown\", handleClickOutside);\n    }, [isOpen, closeOnClickOutside, setOpen]);\n\n    // Get arrow position\n    const getArrowClasses = () => {\n      const base =\n        \"absolute w-2 h-2 bg-background border border-border/20 rotate-45\";\n\n      switch (actualPlacement) {\n        case \"top\":\n        case \"top-start\":\n        case \"top-end\":\n          return `${base} -bottom-1 border-t-0 border-l-0`;\n        case \"right\":\n        case \"right-start\":\n        case \"right-end\":\n          return `${base} -left-1 border-r-0 border-b-0`;\n        case \"bottom\":\n        case \"bottom-start\":\n        case \"bottom-end\":\n          return `${base} -top-1 border-b-0 border-r-0`;\n        case \"left\":\n        case \"left-start\":\n        case \"left-end\":\n          return `${base} -right-1 border-l-0 border-t-0`;\n        default:\n          return base;\n      }\n    };\n\n    const getArrowPosition = () => {\n      switch (actualPlacement) {\n        case \"top\":\n        case \"bottom\":\n          return { left: \"50%\", transform: \"translateX(-50%)\" };\n        case \"top-start\":\n        case \"bottom-start\":\n          return { left: \"12px\" };\n        case \"top-end\":\n        case \"bottom-end\":\n          return { right: \"12px\" };\n        case \"left\":\n        case \"right\":\n          return { top: \"50%\", transform: \"translateY(-50%)\" };\n        case \"left-start\":\n        case \"right-start\":\n          return { top: \"12px\" };\n        case \"left-end\":\n        case \"right-end\":\n          return { bottom: \"12px\" };\n        default:\n          return {};\n      }\n    };\n\n    const getAnimationPreset = () => {\n      switch (animation) {\n        case \"fade\":\n          return \"fadeIn\";\n        case \"scale\":\n          return \"scaleIn\";\n        case \"slide\":\n          if (actualPlacement.startsWith(\"top\")) return \"slideUp\";\n          if (actualPlacement.startsWith(\"bottom\")) return \"slideDown\";\n          if (actualPlacement.startsWith(\"left\")) return \"slideLeft\";\n          if (actualPlacement.startsWith(\"right\")) return \"slideRight\";\n          return \"slideDown\";\n        default:\n          return \"scaleIn\";\n      }\n    };\n\n    // Clone trigger with event handlers\n    const triggerElement = children\n      ? React.cloneElement(children as any, {\n          ref: triggerRef,\n          onClick: (e: MouseEvent) => {\n            (children as any).props?.onClick?.(e);\n            handleClick();\n          },\n          onMouseEnter: (e: MouseEvent) => {\n            (children as any).props?.onMouseEnter?.(e);\n            if (triggerType === \"hover\") handleShow();\n          },\n          onMouseLeave: (e: MouseEvent) => {\n            (children as any).props?.onMouseLeave?.(e);\n            if (triggerType === \"hover\") handleHide();\n          },\n          onFocus: (e: FocusEvent) => {\n            (children as any).props?.onFocus?.(e);\n            if (triggerType === \"focus\") handleShow();\n          },\n          onBlur: (e: FocusEvent) => {\n            (children as any).props?.onBlur?.(e);\n            if (triggerType === \"focus\") handleHide();\n          },\n        })\n      : null;\n\n    return (\n      <>\n        {triggerElement}\n\n        {isOpen && (\n          <div\n            className=\"glass-fixed glass-inset-0 glass-pointer-events-none\"\n            style={{ zIndex }}\n          >\n            <Motion\n              preset={getAnimationPreset()}\n              className=\"glass-pointer-events-auto\"\n              style={{\n                position: \"absolute\",\n                top: position.top,\n                left: position.left,\n              }}\n            >\n              {appearance === \"glass\" ? (\n                material === \"liquid\" ? (\n                  <LiquidGlassMaterial\n                    ior={materialProps?.ior || 1.42}\n                    thickness={materialProps?.thickness || 6}\n                    tint={materialProps?.tint || { r: 0, g: 0, b: 0, a: 0.04 }}\n                    variant={materialProps?.variant || \"clear\"}\n                    quality={materialProps?.quality || \"balanced\"}\n                    environmentAdaptation\n                    motionResponsive={false}\n                    ref={popoverRef}\n                    className={cn(\n                      \"relative max-w-xs liquid-glass-popover-surface\",\n                      radialReveal && \"glass-radial-reveal\",\n                      className,\n                      contentClassName\n                    )}\n                    data-testid={dataTestId}\n                    style={{\n                      ...({\n                        \"--liquid-glass-popover-density\": \"0.8\",\n                        \"--liquid-glass-micro-refraction\": \"0.3\",\n                      } as React.CSSProperties),\n                    }}\n                    data-liquid-glass-popover=\"true\"\n                    data-popover-placement={placement}\n                    onMouseEnter={\n                      triggerType === \"hover\" ? handleShow : undefined\n                    }\n                    onMouseLeave={\n                      triggerType === \"hover\" ? handleHide : undefined\n                    }\n                    {...props}\n                  >\n                    <FocusTrap\n                      active={\n                        isOpen &&\n                        (triggerType === \"focus\" || triggerType === \"click\")\n                      }\n                      onEscape={\n                        closeOnEscape ? () => setOpen(false) : undefined\n                      }\n                    >\n                      <div className=\"glass-p-4\">{content}</div>\n                    </FocusTrap>\n                    {showArrow && (\n                      <div\n                        className={getArrowClasses()}\n                        style={getArrowPosition()}\n                      />\n                    )}\n                  </LiquidGlassMaterial>\n                ) : (\n                  <OptimizedGlass\n                    intent=\"neutral\"\n                    elevation=\"level4\"\n                    intensity=\"strong\"\n                    depth={2}\n                    tint=\"neutral\"\n                    border=\"subtle\"\n                    animation=\"none\"\n                    performanceMode=\"medium\"\n                    ref={popoverRef}\n                    className={cn(\n                      \"relative max-w-xs glass-lift glass-sheen\",\n                      radialReveal && \"glass-radial-reveal\",\n                      \"bg-background/95 glass-backdrop-blur-md\",\n                      \"border border-border/20 shadow-lg\",\n                      className,\n                      contentClassName\n                    )}\n                    data-testid={dataTestId}\n                    onMouseEnter={\n                      triggerType === \"hover\" ? handleShow : undefined\n                    }\n                    onMouseLeave={\n                      triggerType === \"hover\" ? handleHide : undefined\n                    }\n                    {...props}\n                  >\n                    <FocusTrap\n                      active={\n                        isOpen &&\n                        (triggerType === \"focus\" || triggerType === \"click\")\n                      }\n                      onEscape={\n                        closeOnEscape ? () => setOpen(false) : undefined\n                      }\n                    >\n                      <div className=\"glass-p-3\">\n                        {title && (\n                          <h3 className=\"glass-font-medium glass-text-primary glass-mb-1\">\n                            {title}\n                          </h3>\n                        )}\n                        {description && (\n                          <p className=\"glass-text-sm glass-text-secondary glass-mb-2\">\n                            {description}\n                          </p>\n                        )}\n                        {content}\n                      </div>\n                    </FocusTrap>\n                    {showArrow && (\n                      <div\n                        className={getArrowClasses()}\n                        style={getArrowPosition()}\n                      />\n                    )}\n                  </OptimizedGlass>\n                )\n              ) : (\n                <div\n                  ref={popoverRef}\n                  className={cn(\n                    \"relative max-w-xs glass-radius-xl bg-background text-foreground\",\n                    \"border border-border/30 shadow-2xl\",\n                    className,\n                    contentClassName\n                  )}\n                  data-testid={dataTestId}\n                  onMouseEnter={\n                    triggerType === \"hover\" ? handleShow : undefined\n                  }\n                  onMouseLeave={\n                    triggerType === \"hover\" ? handleHide : undefined\n                  }\n                >\n                  <FocusTrap\n                    active={\n                      isOpen &&\n                      (triggerType === \"focus\" || triggerType === \"click\")\n                    }\n                    onEscape={closeOnEscape ? () => setOpen(false) : undefined}\n                  >\n                    <div className=\"glass-p-3\">\n                      {title && (\n                        <h3 className=\"glass-font-medium glass-mb-1\">\n                          {title}\n                        </h3>\n                      )}\n                      {description && (\n                        <p className=\"glass-text-sm glass-text-secondary glass-mb-2\">\n                          {description}\n                        </p>\n                      )}\n                      {content}\n                    </div>\n                  </FocusTrap>\n                </div>\n              )}\n            </Motion>\n          </div>\n        )}\n      </>\n    );\n  }\n);\n\nGlassPopover.displayName = \"GlassPopover\";\n\n/**\n * Tooltip component (Simple popover for hover)\n */\nexport interface GlassTooltipProps\n  extends Omit<\n    GlassPopoverProps,\n    \"trigger\" | \"content\" | \"title\" | \"description\" | \"open\" | \"onOpenChange\"\n  > {\n  /**\n   * Tooltip text\n   */\n  content: string;\n  /**\n   * Whether tooltip is disabled\n   */\n  disabled?: boolean;\n}\n\nexport const GlassTooltip = forwardRef<HTMLDivElement, GlassTooltipProps>(\n  ({ content, disabled = false, ...props }, ref) => {\n    if (disabled) {\n      return props?.children;\n    }\n\n    const [open, setOpen] = React.useState(false);\n\n    return (\n      <GlassPopover\n        data-glass-component\n        ref={ref}\n        open={open}\n        onOpenChange={setOpen}\n        trigger=\"hover\"\n        showDelay={500}\n        hideDelay={0}\n        placement=\"top\"\n        radialReveal={false}\n        content={\n          <span className=\"glass-text-sm glass-text-primary\">{content}</span>\n        }\n        contentClassName=\"glass-px-2 glass-py-1\"\n        {...props}\n      />\n    );\n  }\n);\n\nGlassTooltip.displayName = \"GlassTooltip\";\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassTooltip } from \"../modal/GlassPopover\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ChevronLeft, ChevronRight } from \"@/icons\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport React, {\n  createContext,\n  forwardRef,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\nexport interface NavigationItem {\n  id: string;\n  label: string;\n  href?: string;\n  icon?: React.ReactNode;\n  badge?: string | number;\n  children?: NavigationItem[];\n  disabled?: boolean;\n  onClick?: () => void;\n}\n\nexport interface GlassSidebarProps {\n  /**\n   * Navigation items\n   */\n  items: NavigationItem[];\n  /**\n   * Currently active item\n   */\n  activeId?: string;\n  /**\n   * Sidebar variant\n   */\n  variant?: \"default\" | \"compact\" | \"floating\" | \"overlay\";\n  /**\n   * Sidebar width\n   */\n  width?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Whether sidebar is collapsible\n   */\n  collapsible?: boolean;\n  /**\n   * Whether sidebar is collapsed\n   */\n  collapsed?: boolean;\n  /**\n   * Callback when collapsed state changes\n   */\n  onCollapsedChange?: (collapsed: boolean) => void;\n  /**\n   * Whether sidebar is open (for mobile/overlay)\n   */\n  open?: boolean;\n  /**\n   * Render inside the parent container instead of using viewport-fixed overlay behavior.\n   */\n  contained?: boolean;\n  /**\n   * Whether to render the collapse toggle.\n   */\n  showToggle?: boolean;\n  /**\n   * Portal the collapse toggle to document.body. Defaults to true for viewport sidebars and false in contained mode.\n   */\n  renderToggleInPortal?: boolean;\n  /**\n   * Bounded sidebar height for contained/card previews.\n   */\n  height?: React.CSSProperties[\"height\"];\n  /**\n   * Bounded sidebar max-height for contained/card previews.\n   */\n  maxHeight?: React.CSSProperties[\"maxHeight\"];\n  /**\n   * Inline style override for the sidebar surface.\n   */\n  style?: React.CSSProperties;\n  /**\n   * Callback when open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Sidebar header content\n   */\n  header?: React.ReactNode;\n  /**\n   * Sidebar footer content\n   */\n  footer?: React.ReactNode;\n  /**\n   * Custom logo/brand\n   */\n  logo?: React.ReactNode;\n  /**\n   * Custom user info\n   */\n  userInfo?: React.ReactNode;\n  /**\n   * Navigation callback\n   */\n  onNavigate?: (item: NavigationItem) => void;\n  /**\n   * Custom item renderer\n   */\n  renderItem?: (item: NavigationItem, level: number) => React.ReactNode;\n  className?: string;\n  \"aria-label\"?: string;\n}\n\ninterface SidebarContextValue {\n  collapsed: boolean;\n  activeId?: string;\n  onNavigate?: (item: NavigationItem) => void;\n  renderItem?: (item: NavigationItem, level: number) => React.ReactNode;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | undefined>(\n  undefined\n);\n\nconst useSidebarContext = () => {\n  const context = useContext(SidebarContext);\n  if (!context) {\n    throw new Error(\"Sidebar components must be used within GlassSidebar\");\n  }\n  return context;\n};\n\n/**\n * GlassSidebar component\n * A glassmorphism sidebar navigation with advanced features\n */\nexport const GlassSidebar = forwardRef<HTMLDivElement, GlassSidebarProps>(\n  (\n    {\n      items,\n      activeId,\n      variant = \"default\",\n      width = \"md\",\n      collapsible = true,\n      collapsed = false,\n      onCollapsedChange,\n      open = true,\n      contained = false,\n      showToggle = true,\n      renderToggleInPortal,\n      height,\n      maxHeight,\n      onOpenChange,\n      header,\n      footer,\n      logo,\n      userInfo,\n      onNavigate,\n      renderItem,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const [edgeX, setEdgeX] = useState<number | null>(null);\n    const [internalCollapsed, setInternalCollapsed] = useState(collapsed);\n    const [mounted, setMounted] = useState(false);\n    const isCollapsed = collapsed ?? internalCollapsed;\n    const useViewportOverlay = variant === \"overlay\" && !contained;\n    const shouldPortalToggle = renderToggleInPortal ?? !contained;\n\n    const widthClasses = {\n      sm: isCollapsed ? \"w-16\" : \"w-48\",\n      md: isCollapsed ? \"w-16\" : \"w-64\",\n      lg: isCollapsed ? \"w-20\" : \"w-72\",\n      xl: isCollapsed ? \"w-20\" : \"w-80\",\n    };\n\n    const variantClasses = {\n      default: \"border-r border-border/20\",\n      compact: \"border-r border-border/10\",\n      floating: \"glass-mx-4 glass-my-4 squiricle border border-border/20\",\n      overlay: \"border-r border-border/20 shadow-xl\",\n    };\n\n    const handleToggleCollapse = () => {\n      const newCollapsed = !isCollapsed;\n      setInternalCollapsed(newCollapsed);\n      onCollapsedChange?.(newCollapsed);\n    };\n\n    const handleItemClick = (item: NavigationItem) => {\n      if (item?.disabled) return;\n      onNavigate?.(item);\n      if (useViewportOverlay) {\n        onOpenChange?.(false);\n      }\n    };\n\n    const contextValue: SidebarContextValue = {\n      collapsed: isCollapsed,\n      activeId,\n      onNavigate: handleItemClick,\n      renderItem,\n    };\n\n    if (variant === \"overlay\" && !open) {\n      return null;\n    }\n\n    // Map width to px for fixed toggle placement\n    const widthPxMap: Record<\"sm\" | \"md\" | \"lg\" | \"xl\", number> = {\n      sm: 192,\n      md: 256,\n      lg: 288,\n      xl: 320,\n    };\n    const collapsedWidthPxMap: Record<\"sm\" | \"md\" | \"lg\" | \"xl\", number> = {\n      sm: 64,\n      md: 64,\n      lg: 80,\n      xl: 80,\n    };\n\n    // Measure actual sidebar right edge in viewport coordinates\n    useLayoutEffect(() => {\n      const el = containerRef.current;\n      if (!el) return;\n      const update = () => {\n        const rect = el.getBoundingClientRect();\n        setEdgeX(rect.left + rect.width);\n      };\n      update();\n      let ro: ResizeObserver | null = null;\n      if (typeof window !== \"undefined\" && \"ResizeObserver\" in window) {\n        ro = new ResizeObserver(() => update());\n        ro.observe(el);\n      }\n      window.addEventListener(\"resize\", update);\n      window.addEventListener(\"scroll\", update, true);\n      return () => {\n        if (ro) ro.disconnect();\n        window.removeEventListener(\"resize\", update);\n        window.removeEventListener(\"scroll\", update, true);\n      };\n    }, [isCollapsed]);\n\n    useEffect(() => setMounted(true), []);\n\n    const fallbackX = (isCollapsed ? collapsedWidthPxMap : widthPxMap)[width];\n    const centerX = edgeX ?? fallbackX;\n    const toggleButton = (\n      <button\n        type=\"button\"\n        onClick={handleToggleCollapse}\n        title={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n        className={cn(\n          shouldPortalToggle\n            ? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n            : \"absolute glass-right-2 glass-top-3\",\n          \"w-10 h-10 glass-radius-full flex items-center justify-center\",\n          \"glass-backdrop-blur-lg border\",\n          \"glass-focus glass-touch-target glass-contrast-guard\",\n          \"shadow-[0_6px_18px_color-mix(in_srgb,var(--glass-black)_35%,transparent),inset_0_1px_2px_var(--glass-bg-active)] ring-1\",\n          \"hover:bg-white/15 active:bg-white/20\"\n        )}\n        aria-label={isCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n      >\n        {isCollapsed ? (\n          <ChevronRight\n            className=\"glass-w-5 glass-h-5 glass-text-primary glass-drop-shadow-custom\"\n            strokeWidth={3}\n          />\n        ) : (\n          <ChevronLeft\n            className=\"glass-w-5 glass-h-5 glass-text-primary glass-drop-shadow-custom\"\n            strokeWidth={3}\n          />\n        )}\n      </button>\n    );\n\n    return (\n      <SidebarContext.Provider data-glass-component value={contextValue}>\n        <Motion\n          preset={useViewportOverlay ? \"slideRight\" : \"none\"}\n          className={cn(\n            useViewportOverlay && \"fixed inset-y-0 left-0 z-50 h-screen\",\n            contained && \"glass-contained\",\n            \"relative overflow-visible z-[60]\"\n          )}\n          style={{ overflow: \"visible\" }}\n        >\n          <OptimizedGlass\n            ref={(node) => {\n              containerRef.current = node as HTMLDivElement | null;\n              if (typeof ref === \"function\") ref(node as any);\n              else if (ref && typeof (ref as any) === \"object\")\n                (ref as any).current = node;\n            }}\n            intent=\"primary\"\n            elevation={variant === \"floating\" ? \"level2\" : \"level1\"}\n            intensity=\"medium\"\n            depth={variant === \"floating\" ? 3 : 2}\n            tint=\"lavender\"\n            border={variant === \"floating\" ? \"gradient\" : \"subtle\"}\n            animation=\"none\"\n            performanceMode=\"medium\"\n            role=\"navigation\"\n            aria-label={props[\"aria-label\"] || \"Main navigation\"}\n            className={cn(\n              \"h-full flex flex-col transition-colors overflow-visible\",\n              contained ? \"min-h-0\" : \"min-h-[420px] max-h-[calc(100vh-2rem)]\",\n              useViewportOverlay && \"h-screen max-h-screen\",\n              contained && \"glass-contained\",\n              widthClasses?.[width],\n              variantClasses?.[variant],\n              variant === \"floating\" ? \"squiricle\" : \"\",\n              className\n            )}\n            style={{\n              ...style,\n              overflow: \"visible\",\n              height: height ?? style?.height,\n              maxHeight: maxHeight ?? style?.maxHeight,\n            }}\n            {...props}\n          >\n            {/* Background tints removed to respect global layout color */}\n            {/* Header */}\n            {(header || logo) && (\n              <div className=\"glass-flex-shrink-0 glass-p-4 glass-border-b glass-border-glass-border/20\">\n                {header || (\n                  <div className=\"glass-flex glass-items-center glass-justify-center glass-w-full\">\n                    {logo && (\n                      <div\n                        className={cn(\n                          `flex items-center glass-gap-3 transition-all duration-[${ANIMATION.DURATION.normal}ms]`,\n                          isCollapsed\n                            ? \"scale-75 opacity-70\"\n                            : \"scale-100 opacity-100\"\n                        )}\n                      >\n                        {logo}\n                      </div>\n                    )}\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* User Info */}\n            {userInfo && !isCollapsed && (\n              <div className=\"glass-flex-shrink-0 glass-p-4 glass-border-b glass-border-glass-border/10\">\n                {userInfo}\n              </div>\n            )}\n\n            {/* Navigation */}\n            <div\n              className={cn(\n                \"flex-1 glass-px-4 glass-py-2\",\n                isCollapsed\n                  ? \"overflow-hidden\"\n                  : \"overflow-y-auto overflow-x-visible\"\n              )}\n            >\n              <SidebarNavigation items={items} />\n            </div>\n\n            {/* Footer */}\n            {footer && (\n              <div className=\"glass-flex-shrink-0 glass-p-4 glass-border-t glass-border-glass-border/20\">\n                {footer}\n              </div>\n            )}\n\n            {showToggle &&\n              collapsible &&\n              mounted &&\n              (!shouldPortalToggle || contained) &&\n              toggleButton}\n          </OptimizedGlass>\n        </Motion>\n\n        {showToggle &&\n          collapsible &&\n          mounted &&\n          shouldPortalToggle &&\n          !contained &&\n          createPortal(\n            <div\n              className=\"glass-fixed glass-top-0 glass-h-screen glass-z-max\"\n              style={{\n                left: Math.max(0, centerX - 24),\n                width: 48,\n                pointerEvents: \"auto\",\n              }}\n            >\n              {toggleButton}\n            </div>,\n            document.body\n          )}\n\n        {/* Overlay backdrop */}\n        {useViewportOverlay && open && (\n          <div\n            className=\"glass-fixed glass-inset-0 glass-surface-dark/50 glass-backdrop-blur-sm glass-z-40 glass-contrast-guard\"\n            onClick={(e) => onOpenChange?.(false)}\n          />\n        )}\n      </SidebarContext.Provider>\n    );\n  }\n);\n\nGlassSidebar.displayName = \"GlassSidebar\";\n\n/**\n * SidebarNavigation component\n */\ninterface SidebarNavigationProps {\n  items: NavigationItem[];\n  level?: number;\n}\n\nfunction SidebarNavigation({ items, level = 0 }: SidebarNavigationProps) {\n  return (\n    <ul className={cn(\"glass-gap-2\", level > 0 && \"glass-ml-4\")}>\n      {(items || []).map((item) => (\n        <SidebarNavigationItem key={item?.id} item={item} level={level} />\n      ))}\n    </ul>\n  );\n}\n\n/**\n * SidebarNavigationItem component\n */\ninterface SidebarNavigationItemProps {\n  item: NavigationItem;\n  level: number;\n}\n\nfunction SidebarNavigationItem({ item, level }: SidebarNavigationItemProps) {\n  const { collapsed, activeId, onNavigate, renderItem } = useSidebarContext();\n  // Only expand the most essential group by default\n  const shouldExpandByDefault = level === 0 && item?.id === \"home\";\n  const [isExpanded, setIsExpanded] = useState(shouldExpandByDefault);\n\n  const isActive = activeId === item?.id;\n  const hasChildren = item?.children && item?.children.length > 0;\n\n  if (renderItem) {\n    return <li>{renderItem(item, level)}</li>;\n  }\n\n  const handleClick = () => {\n    if (hasChildren && !collapsed) {\n      setIsExpanded(!isExpanded);\n    } else {\n      onNavigate?.(item);\n      item?.onClick?.();\n    }\n  };\n\n  const buttonContent = (\n    <GlassButton\n      variant=\"ghost\"\n      onClick={handleClick}\n      disabled={item?.disabled}\n      className={cn(\n        `w-full flex items-center glass-gap-3 glass-radius-md transition-all duration-[${ANIMATION.DURATION.fast}ms] relative group`,\n        \"hover:bg-white/10 focus:outline-none\",\n        collapsed\n          ? \"glass-px-2 glass-py-2.5 justify-center\"\n          : \"glass-px-3 glass-py-2\",\n        \"glass-text-sm font-medium\",\n        isActive\n          ? 'bg-primary/15 text-primary shadow-[0_0_0_2px_${glassStyles.borderColor || \"hsl(var(--glass-color-primary)/0.2)\"}]'\n          : \"\",\n        !isActive && \"glass-text-secondary hover:text-foreground\",\n        item?.disabled && \"opacity-50 cursor-not-allowed\"\n      )}\n    >\n      {/* Icon */}\n      {item?.icon && (\n        <span className=\"glass-flex-shrink-0 glass-w-6 glass-h-6 glass-flex glass-items-center glass-justify-center glass-text-lg\">\n          {React.isValidElement(item.icon)\n            ? React.cloneElement(item.icon as React.ReactElement<any>, {\n                className: cn(\n                  (item.icon as React.ReactElement<any>).props?.className,\n                  collapsed ? \"w-6 h-6\" : \"w-5 h-5\"\n                ),\n              })\n            : item.icon}\n        </span>\n      )}\n\n      {/* Label and badge */}\n      {!collapsed && (\n        <>\n          <span className=\"glass-flex-1 glass-text-left glass-whitespace-nowrap glass-truncate glass-leading-5\">\n            {item?.label}\n          </span>\n\n          {item?.badge && (\n            <span\n              className={cn(\n                `flex-shrink-0 glass-px-2 glass-py-1 glass-text-xs glass-radius-full font-medium transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                \"bg-white/8 border border-white/15 shadow-md glass-backdrop-blur-md\",\n                \"group-hover:bg-white/12 group-hover:border-white/20 group-hover:shadow-lg\",\n                \"relative z-10\" // Ensure badge stays above any background effects\n              )}\n              style={{\n                color: \"var(--glass-white)\",\n              }}\n            >\n              {item?.badge}\n            </span>\n          )}\n\n          {hasChildren && (\n            <svg\n              width=\"16\"\n              height=\"16\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              strokeWidth=\"2\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              className={cn(\n                `flex-shrink-0 transition-transform duration-[${ANIMATION.DURATION.fast}ms] glass-text-primary/50`,\n                isExpanded ? \"rotate-90\" : \"rotate-0\"\n              )}\n            >\n              <polyline points=\"9 18 15 12 9 6\" />\n            </svg>\n          )}\n        </>\n      )}\n    </GlassButton>\n  );\n\n  return (\n    <li>\n      {collapsed && item?.label ? (\n        <GlassTooltip\n          content={item?.label}\n          placement=\"right\"\n          zIndex={9999}\n          showDelay={300}\n        >\n          {buttonContent}\n        </GlassTooltip>\n      ) : (\n        buttonContent\n      )}\n\n      {/* Children */}\n      {hasChildren && !collapsed && isExpanded && (\n        <Motion preset=\"slideDown\" className=\"glass-mt-1\">\n          <div className=\"glass-ml-2 glass-pl-4 glass-border-l glass-border-glass-border/20\">\n            <SidebarNavigation items={item?.children!} level={level + 1} />\n          </div>\n        </Motion>\n      )}\n    </li>\n  );\n}\n\n/**\n * SidebarBrand component\n */\nexport interface SidebarBrandProps {\n  logo?: React.ReactNode;\n  title?: string;\n  subtitle?: string;\n  href?: string;\n  onClick?: () => void;\n  className?: string;\n}\n\nexport function SidebarBrand({\n  logo,\n  title,\n  subtitle,\n  href,\n  onClick,\n  className,\n}: SidebarBrandProps) {\n  const { collapsed } = useSidebarContext();\n\n  const Content = () => (\n    <div\n      className={cn(\n        \"flex items-center glass-gap-3\",\n        collapsed && \"justify-center\"\n      )}\n    >\n      {logo && (\n        <div className=\"glass-flex-shrink-0 glass-w-8 glass-h-8 glass-flex glass-items-center glass-justify-center\">\n          {logo}\n        </div>\n      )}\n\n      {!collapsed && (title || subtitle) && (\n        <div className=\"glass-flex-1 glass-min-w-0\">\n          {title && (\n            <h1 className=\"glass-text-lg glass-font-bold glass-text-primary glass-truncate\">\n              {title}\n            </h1>\n          )}\n          {subtitle && (\n            <p className=\"glass-text-xs glass-text-secondary glass-truncate\">\n              {subtitle}\n            </p>\n          )}\n        </div>\n      )}\n    </div>\n  );\n\n  if (href) {\n    return (\n      <a href={href} className={cn(\"block\", className)}>\n        <Content />\n      </a>\n    );\n  }\n\n  if (onClick) {\n    return (\n      <GlassButton\n        variant=\"ghost\"\n        onClick={onClick}\n        className={cn(\"block w-full text-left\", className)}\n      >\n        <Content />\n      </GlassButton>\n    );\n  }\n\n  return (\n    <div className={className}>\n      <Content />\n    </div>\n  );\n}\n\n/**\n * SidebarUserInfo component\n */\nexport interface SidebarUserInfoProps {\n  name: string;\n  email?: string;\n  avatar?: string;\n  status?: \"online\" | \"away\" | \"busy\" | \"offline\";\n  actions?: React.ReactNode;\n  onClick?: () => void;\n  className?: string;\n}\n\nexport function SidebarUserInfo({\n  name,\n  email,\n  avatar,\n  status,\n  actions,\n  onClick,\n  className,\n}: SidebarUserInfoProps) {\n  const { collapsed } = useSidebarContext();\n\n  if (collapsed) {\n    return (\n      <div className={cn(\"flex justify-center\", className)}>\n        <div className=\"glass-relative\">\n          {avatar ? (\n            <img\n              src={avatar}\n              alt={name}\n              className=\"glass-w-8 glass-h-8 glass-radius-full glass-object-cover\"\n            />\n          ) : (\n            <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-primary/20 glass-flex glass-items-center glass-justify-center\">\n              <span className=\"glass-text-sm glass-font-medium\">\n                {name.charAt(0)}\n              </span>\n            </div>\n          )}\n\n          {status && (\n            <div\n              className={cn(\n                \"absolute -bottom-0.5 -right-0.5 w-3 h-3 glass-radius-full border border-background\",\n                {\n                  \"bg-green-500\": status === \"online\",\n                  \"bg-yellow-500\": status === \"away\",\n                  \"bg-red-500\": status === \"busy\",\n                  \"bg-gray-500\": status === \"offline\",\n                }\n              )}\n            />\n          )}\n        </div>\n      </div>\n    );\n  }\n\n  const Content = () => (\n    <div className=\"glass-flex glass-items-center glass-gap-3\">\n      <div className=\"glass-relative glass-flex-shrink-0\">\n        {avatar ? (\n          <img\n            src={avatar}\n            alt={name}\n            className=\"glass-w-10 glass-h-10 glass-radius-full glass-object-cover\"\n          />\n        ) : (\n          <div className=\"glass-w-10 glass-h-10 glass-radius-full glass-surface-primary/20 glass-flex glass-items-center glass-justify-center\">\n            <span className=\"glass-text-lg glass-font-medium\">\n              {name.charAt(0)}\n            </span>\n          </div>\n        )}\n\n        {status && (\n          <div\n            className={cn(\n              \"absolute -bottom-0.5 -right-0.5 w-3 h-3 glass-radius-full border-2 border-background\",\n              {\n                \"bg-green-500\": status === \"online\",\n                \"bg-yellow-500\": status === \"away\",\n                \"bg-red-500\": status === \"busy\",\n                \"bg-gray-500\": status === \"offline\",\n              }\n            )}\n          />\n        )}\n      </div>\n\n      <div className=\"glass-flex-1 glass-min-w-0\">\n        <p className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n          {name}\n        </p>\n        {email && (\n          <p className=\"glass-text-xs glass-text-secondary glass-truncate\">\n            {email}\n          </p>\n        )}\n      </div>\n\n      {actions && <div className=\"glass-flex-shrink-0\">{actions}</div>}\n    </div>\n  );\n\n  if (onClick) {\n    return (\n      <GlassButton\n        variant=\"ghost\"\n        onClick={onClick}\n        className={cn(\n          \"w-full text-left glass-p-2 glass-radius-md\",\n          \"hover:bg-muted/50 transition-colors\",\n          className\n        )}\n      >\n        <Content />\n      </GlassButton>\n    );\n  }\n\n  return (\n    <div className={className}>\n      <Content />\n    </div>\n  );\n}\n", "\"use client\";\n/**\n * GlassTabBar Component\n *\n * An advanced tab bar component with physics-based animations, glass styling,\n * and momentum scrolling for overflow tabs.\n */\nimport React, {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\n// import { useThemeColor, ThemeColors } from '../../hooks/useGlassTheme';\nimport { useAccessibilitySettings } from \"../../hooks/useAccessibilitySettings\";\nimport { TabBarContainer, TabSelector } from \"./styled\";\nimport TabItemComponent from \"./components/TabItem\";\nimport CollapsedMenu from \"./components/CollapsedMenu\";\nimport ScrollButtons from \"./components/ScrollButtons\";\nimport useResponsive from \"./hooks/useResponsive\";\nimport useTabAnimations from \"./hooks/useTabAnimations\";\nimport {\n  calculateVisibleTabs,\n  calculateTotalBadgeCount,\n  getNextEnabledTabIndex,\n  scrollTabIntoView,\n} from \"./utils/tabUtils\";\nimport {\n  GlassTabBarProps,\n  TabItem,\n  ScrollPosition,\n  ScrollAnimationRef,\n  TabBarRef,\n} from \"./types\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport { AnimationProps } from \"../../types/animations\";\nimport { SpringConfig } from \"../../animations/physics/springPhysics\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\n/**\n * GlassTabBar Component\n */\nexport const GlassTabBar = forwardRef<\n  TabBarRef,\n  GlassTabBarProps & AnimationProps\n>((props, ref) => {\n  const {\n    tabs,\n    activeTab,\n    onChange,\n    orientation = \"horizontal\",\n    variant = \"default\",\n    glassVariant = \"frosted\",\n    blurStrength = \"standard\",\n    animationStyle = \"spring\",\n    physics = {\n      tension: 280,\n      friction: 26,\n      mass: 1,\n    },\n    alignment = \"center\",\n    color = \"primary\",\n    fullWidth = false,\n    scrollable = true,\n    showLabels = true,\n    elevated = false,\n    background = true,\n    width,\n    height,\n    borderRadius,\n    className,\n    style,\n    onContextMenu,\n    renderTab,\n    iconPosition = \"left\",\n    verticalDisplayMode = \"expanded\",\n    placement = \"top\",\n    responsiveOrientation,\n    responsiveConfig,\n    collapseTabs = false,\n    renderCollapsedMenu,\n    keyboardNavigation = true,\n    tabIndex = 0,\n    ariaLabel = \"Tab Navigation\",\n    tabStyle,\n    tabClassName,\n    activeTabClassName,\n    defaultBadgeAnimation,\n    badgeStyle,\n    animationConfig: propAnimationConfig,\n    disableAnimation: propDisableAnimation,\n    // Capture remaining props\n    ...restProps\n  } = props;\n\n  const normalizedTabs = useMemo(() => tabs ?? [], [tabs]);\n\n  const responsiveState = useResponsive();\n\n  // Calculate effective values based on responsive state\n  const effectiveOrientation =\n    responsiveState.isMobile && responsiveOrientation === \"vertical\"\n      ? \"vertical\"\n      : orientation;\n  const effectiveShowLabels = responsiveState.isMobile ? false : showLabels;\n  const effectiveIconPosition = iconPosition as \"top\" | \"left\" | \"right\";\n  const effectiveVerticalDisplayMode = verticalDisplayMode;\n  const effectiveFullWidth = responsiveState.isMobile ? true : fullWidth;\n  const effectiveWidth = width || (responsiveState.isMobile ? \"100%\" : \"auto\");\n  const effectiveHeight = height;\n  const maxVisibleTabs = responsiveState.isMobile ? 3 : 8;\n\n  // Hooks\n  const { settings: accessibilitySettings } = useAccessibilitySettings();\n  const isReducedMotion = accessibilitySettings?.reducedMotion || false;\n  const contextValue = useAnimationContext();\n  const colorValue = \"hsl(var(--glass-color-primary))\"; // Default color\n\n  // Determine final animation settings\n  const finalDisableAnimation = !!(\n    propDisableAnimation ??\n    (contextValue as any)?.disableAnimation ??\n    isReducedMotion\n  );\n\n  const finalAnimationConfig: SpringConfig | undefined = useMemo(() => {\n    return (\n      propAnimationConfig ??\n      (contextValue as any)?.animationConfig ??\n      (physics\n        ? {\n            tension: physics.tension,\n            friction: physics.friction,\n            mass: physics.mass,\n          }\n        : undefined) ?? // Convert old prop\n      undefined // Or a default config if needed\n    );\n  }, [propAnimationConfig, contextValue, physics]);\n\n  // Refs\n  const tabsRef = useRef<HTMLDivElement>(null);\n  const tabRefs = useRef<(HTMLButtonElement | null)[]>([]);\n\n  // State\n  const [selectorStyle, setSelectorStyle] = useState({\n    width: 0,\n    height: 0,\n    left: 0,\n    top: 0,\n  });\n  const [showLeftScroll, setShowLeftScroll] = useState(false);\n  const [showRightScroll, setShowRightScroll] = useState(false);\n  const [isScrolling, setIsScrolling] = useState(false);\n\n  // State for collapsed tabs\n  const [visibleTabs, setVisibleTabs] = useState<TabItem[]>(normalizedTabs);\n  const [collapsedTabs, setCollapsedTabs] = useState<TabItem[]>([]);\n  const [showCollapsedMenu, setShowCollapsedMenu] = useState(false);\n\n  // Ref for tracking tab widths to determine when to collapse\n  const tabWidthsRef = useRef<number[]>([]);\n\n  // Set up scroll animation\n  const [scrollPosition, setScrollPosition] = useState<ScrollPosition>({\n    x: 0,\n    y: 0,\n    left: 0,\n    top: 0,\n  });\n\n  // Initialize scroll animation ref\n  const scrollAnimationRef = useRef<ScrollAnimationRef>({\n    rafId: null,\n    velocity: { x: 0, y: 0 },\n    timestamp: 0,\n    active: false,\n  });\n\n  // Set up tab animations\n  const {\n    animateToTab,\n    setActiveTab,\n    activeIndex,\n    isAnimating,\n    selectorPosition,\n    selectorWidth,\n  } = useTabAnimations(activeTab || 0);\n\n  // Magnetic effect state\n  const [tabMagneticData, setTabMagneticData] = useState({\n    closestTabIndex: null as number | null,\n    selectionProgress: 0,\n  });\n\n  // Physics animation state\n  const [usePhysicsAnimation, setUsePhysicsAnimation] = useState(false);\n\n  // Spring props for animations\n  const [springProps, setSpringProps] = useState({\n    left: 0,\n    top: 0,\n    width: 0,\n    height: 0,\n  });\n\n  // Transform state for magnetic effects\n  const [transform, setTransform] = useState({\n    translateX: 0,\n    translateY: 0,\n  });\n\n  // Expose imperative methods via the forwarded ref\n  useImperativeHandle(\n    ref,\n    () => ({\n      getContainerElement: () => tabsRef.current,\n      getTabElements: () => tabRefs.current,\n      getTabElement: (index: number) => {\n        if (index >= 0 && index < tabRefs.current.length) {\n          return tabRefs.current[index];\n        }\n        return null;\n      },\n      getActiveTab: () => activeTab || 0,\n      setActiveTab: (index: number) => {\n        if (\n          index >= 0 &&\n          index < normalizedTabs.length &&\n          !normalizedTabs[index].disabled\n        ) {\n          // Create a synthetic mouse event\n          const syntheticEvent = {\n            currentTarget:\n              tabRefs.current[index] || document.createElement(\"button\"),\n            preventDefault: () => {},\n            stopPropagation: () => {},\n          } as React.MouseEvent<HTMLButtonElement>;\n\n          // Call the onChange handler with the synthetic event\n          onChange?.(syntheticEvent, index);\n        }\n      },\n      selectTab: (index: number) => {\n        if (\n          index >= 0 &&\n          index < normalizedTabs.length &&\n          !normalizedTabs[index].disabled\n        ) {\n          // Create a synthetic mouse event\n          const syntheticEvent = {\n            currentTarget:\n              tabRefs.current[index] || document.createElement(\"button\"),\n            preventDefault: () => {},\n            stopPropagation: () => {},\n          } as React.MouseEvent<HTMLButtonElement>;\n\n          // Call the onChange handler with the synthetic event\n          onChange?.(syntheticEvent, index);\n        }\n      },\n      scrollToTab: (index: number, smooth = true) => {\n        if (\n          index >= 0 &&\n          index < tabRefs.current.length &&\n          tabRefs.current[index] &&\n          tabsRef.current\n        ) {\n          scrollTabIntoView(\n            tabRefs.current[index]!,\n            tabsRef.current!,\n            smooth ? \"smooth\" : \"auto\"\n          );\n        }\n      },\n      toggleBadge: (index: number, show: boolean) => {\n        // Badge toggle functionality - implement based on your application needs\n        // This provides the interface for dynamic badge show/hide functionality\n      },\n      updateBadge: (index: number, value: number | string) => {\n        // Badge update functionality - implement based on your application needs\n        // This provides the interface for dynamic badge value updates\n      },\n      isScrolling: () => isScrolling,\n    }),\n    [\n      tabsRef,\n      tabRefs,\n      normalizedTabs,\n      onChange,\n      effectiveOrientation,\n      isScrolling,\n      activeTab,\n    ]\n  );\n\n  // Handle tab click\n  const handleTabClick = (\n    event: React.MouseEvent<HTMLButtonElement>,\n    index: number\n  ) => {\n    if (collapseTabs && index === visibleTabs.length - 1) {\n      // This is the \"More\" menu tab, toggle the menu\n      setShowCollapsedMenu(!showCollapsedMenu);\n      return;\n    }\n\n    // If this is a normal tab click, handle it normally\n    if (visibleTabs[index].disabled) return;\n    onChange?.(event, index);\n  };\n\n  // Handle collapsed tab selection\n  const handleCollapsedTabSelect = (collapsedIndex: number) => {\n    // Find the original index of this tab in the full tabs array\n    const realIndex = collapsedTabs[collapsedIndex]\n      ? normalizedTabs.findIndex(\n          (tab) => tab.value === collapsedTabs[collapsedIndex].value\n        )\n      : -1;\n\n    if (realIndex !== -1) {\n      // Create a synthetic event that matches the expected type\n      const syntheticEvent = {\n        currentTarget:\n          tabRefs.current[realIndex] || document.createElement(\"button\"),\n        preventDefault: () => {},\n        stopPropagation: () => {},\n      } as React.MouseEvent<HTMLButtonElement>;\n\n      onChange?.(syntheticEvent, realIndex);\n    }\n\n    // Close the menu\n    setShowCollapsedMenu(false);\n  };\n\n  // Handle keyboard navigation\n  const handleKeyDown = (\n    event: React.KeyboardEvent<HTMLButtonElement>,\n    index: number\n  ) => {\n    if (!keyboardNavigation) return;\n\n    let newIndex = activeTab;\n\n    switch (event.key) {\n      case \"ArrowRight\":\n        if (effectiveOrientation === \"horizontal\") {\n          event.preventDefault();\n          newIndex = getNextEnabledTabIndex(\n            normalizedTabs,\n            activeTab || 0,\n            \"next\"\n          );\n        }\n        break;\n      case \"ArrowLeft\":\n        if (effectiveOrientation === \"horizontal\") {\n          event.preventDefault();\n          newIndex = getNextEnabledTabIndex(\n            normalizedTabs,\n            activeTab || 0,\n            \"prev\"\n          );\n        }\n        break;\n      case \"ArrowDown\":\n        if (effectiveOrientation === \"vertical\") {\n          event.preventDefault();\n          newIndex = getNextEnabledTabIndex(\n            normalizedTabs,\n            activeTab || 0,\n            \"next\"\n          );\n        }\n        break;\n      case \"ArrowUp\":\n        if (effectiveOrientation === \"vertical\") {\n          event.preventDefault();\n          newIndex = getNextEnabledTabIndex(\n            normalizedTabs,\n            activeTab || 0,\n            \"prev\"\n          );\n        }\n        break;\n      case \"Home\":\n        event.preventDefault();\n        newIndex = 0;\n        break;\n      case \"End\":\n        event.preventDefault();\n        newIndex = normalizedTabs.length - 1;\n        break;\n      case \"Enter\":\n      case \" \": // Space\n        event.preventDefault();\n        if (normalizedTabs[index] && !normalizedTabs[index].disabled) {\n          onChange?.(event, index);\n        }\n        return; // Skip the auto-navigation below\n      default:\n        return; // Exit for other keys\n    }\n\n    // Only change tabs if we found a new enabled tab\n    if (newIndex !== activeTab) {\n      onChange?.(event, newIndex || 0);\n      // Focus the new tab\n      setTimeout(() => {\n        const newTabEl = tabRefs.current[newIndex || 0];\n        if (newTabEl) {\n          newTabEl.focus();\n        }\n      }, 10);\n    }\n  };\n\n  // Handle scroll visibility check\n  const checkScrollVisibility = useCallback(() => {\n    if (!tabsRef.current || !scrollable) return;\n\n    const container = tabsRef.current;\n\n    if (effectiveOrientation === \"horizontal\") {\n      setShowLeftScroll(container.scrollLeft > 0);\n      setShowRightScroll(\n        container.scrollLeft < container.scrollWidth - container.clientWidth - 2\n      );\n    } else {\n      setShowLeftScroll(container.scrollTop > 0);\n      setShowRightScroll(\n        container.scrollTop <\n          container.scrollHeight - container.clientHeight - 2\n      );\n    }\n  }, [effectiveOrientation, scrollable]);\n\n  // Set scroll target with animation\n  const setScrollTarget = (\n    position: ScrollPosition | { x: number; y: number },\n    animate = true\n  ) => {\n    const scrollPos =\n      \"left\" in position\n        ? position\n        : { ...position, left: position.x, top: position.y };\n    setScrollPosition(scrollPos);\n\n    if (tabsRef.current) {\n      if (animate) {\n        // Apply smooth scrolling if animate is true\n        tabsRef.current.scrollTo({\n          left: scrollPos.left,\n          top: scrollPos.top,\n          behavior: \"smooth\",\n        });\n      } else {\n        // Instant scroll\n        tabsRef.current.scrollLeft = scrollPos.left;\n        tabsRef.current.scrollTop = scrollPos.top;\n      }\n    }\n  };\n\n  // Handle scroll button click\n  const handleScroll = (direction: \"left\" | \"right\" | \"up\" | \"down\") => {\n    if (!tabsRef.current) return;\n\n    const container = tabsRef.current;\n    const scrollAmount =\n      effectiveOrientation === \"horizontal\"\n        ? container.clientWidth / 2\n        : container.clientHeight / 2;\n\n    const targetPosition: ScrollPosition = {\n      x: scrollPosition.left,\n      y: scrollPosition.top,\n      left: scrollPosition.left,\n      top: scrollPosition.top,\n    };\n\n    if (effectiveOrientation === \"horizontal\") {\n      if (direction === \"left\") {\n        targetPosition.x = Math.max(0, scrollPosition.left - scrollAmount);\n        targetPosition.left = targetPosition.x;\n      } else {\n        targetPosition.x = Math.min(\n          container.scrollWidth - container.clientWidth,\n          scrollPosition.left + scrollAmount\n        );\n        targetPosition.left = targetPosition.x;\n      }\n      targetPosition.y = scrollPosition.top;\n      targetPosition.top = scrollPosition.top;\n    } else {\n      if (direction === \"up\") {\n        targetPosition.y = Math.max(0, scrollPosition.top - scrollAmount);\n        targetPosition.top = targetPosition.y;\n      } else {\n        targetPosition.y = Math.min(\n          container.scrollHeight - container.clientHeight,\n          scrollPosition.top + scrollAmount\n        );\n        targetPosition.top = targetPosition.y;\n      }\n      targetPosition.x = scrollPosition.left;\n      targetPosition.left = scrollPosition.left;\n    }\n\n    setScrollTarget(targetPosition);\n  };\n\n  // Setup momentum tracking\n  const momentumRef = useRef({\n    startX: 0,\n    startY: 0,\n    lastX: 0,\n    lastY: 0,\n    lastMoveTime: 0,\n    velocityX: 0,\n    velocityY: 0,\n  });\n\n  // Set up scroll animation configuration\n  const scrollPhysicsConfig = useMemo(() => {\n    return {\n      // Use physics parameters that create a fluid scrolling experience\n      tension: 180,\n      friction: 24,\n      mass: 1,\n      // Adjust physics based on animation style preference for consistency\n      ...(animationStyle === \"spring\" ? { friction: 18 } : {}),\n      ...(animationStyle === \"keyframes\" ? { tension: 220, friction: 26 } : {}),\n      ...(isReducedMotion ? { tension: 280, friction: 36 } : {}),\n    };\n  }, [animationStyle, isReducedMotion]);\n\n  // Handle scroll gesture events\n  const handleScrollGestureStart = (e: React.MouseEvent | React.TouchEvent) => {\n    if (!scrollable || !tabsRef.current) return;\n\n    // Cancel any ongoing scroll animation\n    if (scrollAnimationRef.current.rafId !== null) {\n      cancelAnimationFrame(scrollAnimationRef.current.rafId);\n      scrollAnimationRef.current.rafId = null;\n      scrollAnimationRef.current.active = false;\n    }\n\n    let clientX = 0;\n    let clientY = 0;\n\n    if (\"touches\" in e) {\n      clientX = e.touches[0].clientX;\n      clientY = e.touches[0].clientY;\n    } else {\n      clientX = e.clientX;\n      clientY = e.clientY;\n    }\n\n    // Initialize momentum tracking\n    momentumRef.current = {\n      startX: clientX,\n      startY: clientY,\n      lastX: clientX,\n      lastY: clientY,\n      lastMoveTime: Date.now(),\n      velocityX: 0,\n      velocityY: 0,\n    };\n\n    setIsScrolling(true);\n  };\n\n  const handleScrollGestureMove = (\n    e: React.MouseEvent<Element> | React.TouchEvent<Element>\n  ) => {\n    if (!isScrolling || !tabsRef.current) return;\n\n    // Prevent default to avoid browser handling\n    e.preventDefault();\n\n    const container = tabsRef.current;\n    let clientX = 0;\n    let clientY = 0;\n\n    if (\"touches\" in e) {\n      // Touch event\n      clientX = e.touches[0].clientX;\n      clientY = e.touches[0].clientY;\n    } else {\n      // Mouse event\n      clientX = e.clientX;\n      clientY = e.clientY;\n    }\n\n    // Calculate delta\n    const deltaX = clientX - momentumRef.current.lastX;\n    const deltaY = clientY - momentumRef.current.lastY;\n\n    // Track velocity for momentum\n    const now = Date.now();\n    const elapsed = now - momentumRef.current.lastMoveTime;\n    if (elapsed > 0) {\n      momentumRef.current.velocityX = (deltaX / elapsed) * 15; // Scale for better feel\n      momentumRef.current.velocityY = (deltaY / elapsed) * 15;\n    }\n\n    // Update last position and time\n    momentumRef.current.lastX = clientX;\n    momentumRef.current.lastY = clientY;\n    momentumRef.current.lastMoveTime = now;\n\n    // Apply scroll delta\n    if (effectiveOrientation === \"horizontal\") {\n      container.scrollLeft -= deltaX;\n      setScrollTarget(\n        {\n          left: container.scrollLeft,\n          top: scrollPosition.top,\n          x: container.scrollLeft,\n          y: scrollPosition.y,\n        },\n        false\n      );\n    } else {\n      container.scrollTop -= deltaY;\n      setScrollTarget(\n        {\n          left: scrollPosition.left,\n          top: container.scrollTop,\n          x: scrollPosition.x,\n          y: container.scrollTop,\n        },\n        false\n      );\n    }\n\n    checkScrollVisibility();\n  };\n\n  const handleScrollGestureEnd = () => {\n    if (!isScrolling || !tabsRef.current) return;\n\n    setIsScrolling(false);\n\n    const container = tabsRef.current;\n    const velocityX = momentumRef.current.velocityX;\n    const velocityY = momentumRef.current.velocityY;\n\n    // Only apply momentum if velocity is significant\n    if (Math.abs(velocityX) > 0.5 || Math.abs(velocityY) > 0.5) {\n      // Get boundaries for scrolling\n      const maxScrollX = container.scrollWidth - container.clientWidth;\n      const maxScrollY = container.scrollHeight - container.clientHeight;\n\n      // Store velocity for physics-based animation\n      scrollAnimationRef.current.velocity = {\n        x: velocityX,\n        y: velocityY,\n      };\n      scrollAnimationRef.current.timestamp = Date.now();\n      scrollAnimationRef.current.active = true;\n\n      // Use a more sophisticated physics-based animation\n      const animateScroll = () => {\n        if (!scrollAnimationRef.current.active || !tabsRef.current) {\n          scrollAnimationRef.current.rafId = null;\n          return;\n        }\n\n        const now = Date.now();\n        const elapsed = now - scrollAnimationRef.current.timestamp;\n        scrollAnimationRef.current.timestamp = now;\n\n        // Convert to seconds for physics calculations\n        const dt = Math.min(elapsed, 64) / 1000; // Cap at 64ms to avoid big jumps\n\n        // Apply physics (spring-driven deceleration)\n        const friction = scrollPhysicsConfig.friction;\n        const frictionFactor = Math.pow(0.95, friction * dt * 60); // Scale by dt\n\n        // Update velocity with friction\n        scrollAnimationRef.current.velocity.x *= frictionFactor;\n        scrollAnimationRef.current.velocity.y *= frictionFactor;\n\n        // Calculate new scroll position\n        let newScrollX =\n          tabsRef.current.scrollLeft -\n          scrollAnimationRef.current.velocity.x * dt * 60;\n        let newScrollY =\n          tabsRef.current.scrollTop -\n          scrollAnimationRef.current.velocity.y * dt * 60;\n\n        // Apply boundaries\n        newScrollX = Math.max(0, Math.min(maxScrollX, newScrollX));\n        newScrollY = Math.max(0, Math.min(maxScrollY, newScrollY));\n\n        // Apply scroll position\n        if (effectiveOrientation === \"horizontal\") {\n          tabsRef.current.scrollLeft = newScrollX;\n          setScrollTarget(\n            {\n              left: newScrollX,\n              top: scrollPosition.top,\n              x: newScrollX,\n              y: scrollPosition.y,\n            },\n            false\n          );\n        } else {\n          tabsRef.current.scrollTop = newScrollY;\n          setScrollTarget(\n            {\n              left: scrollPosition.left,\n              top: newScrollY,\n              x: scrollPosition.x,\n              y: newScrollY,\n            },\n            false\n          );\n        }\n\n        // Check if we should stop animating\n        const stopThreshold = 0.1;\n        const isMoving =\n          Math.abs(scrollAnimationRef.current.velocity.x) > stopThreshold ||\n          Math.abs(scrollAnimationRef.current.velocity.y) > stopThreshold;\n\n        // Apply boundary bounce effect if we hit an edge\n        if (effectiveOrientation === \"horizontal\") {\n          if (newScrollX === 0 || newScrollX === maxScrollX) {\n            // Bounce effect: reverse velocity with damping\n            scrollAnimationRef.current.velocity.x *= -0.3;\n          }\n        } else {\n          if (newScrollY === 0 || newScrollY === maxScrollY) {\n            // Bounce effect: reverse velocity with damping\n            scrollAnimationRef.current.velocity.y *= -0.3;\n          }\n        }\n\n        // Continue animation or stop\n        if (isMoving) {\n          checkScrollVisibility();\n          scrollAnimationRef.current.rafId =\n            requestAnimationFrame(animateScroll);\n        } else {\n          scrollAnimationRef.current.active = false;\n          scrollAnimationRef.current.rafId = null;\n        }\n      };\n\n      // Start animation\n      scrollAnimationRef.current.rafId = requestAnimationFrame(animateScroll);\n    }\n  };\n\n  // Update selector position function\n  const updateSelectorPosition = useCallback(() => {\n    if (\n      !tabsRef.current ||\n      !activeTab ||\n      activeTab < 0 ||\n      activeTab >= normalizedTabs.length\n    )\n      return;\n\n    const activeTabElement = tabRefs.current[activeTab];\n    if (!activeTabElement) return;\n\n    const tabRect = activeTabElement.getBoundingClientRect();\n    const containerRect = tabsRef.current.getBoundingClientRect();\n\n    // Update selector style\n    const newStyle = {\n      width: tabRect.width,\n      height: tabRect.height,\n      left: activeTabElement.offsetLeft,\n      top: activeTabElement.offsetTop,\n    };\n\n    // Adjust for underlined variant\n    if (variant === \"underline\") {\n      if (effectiveOrientation === \"horizontal\") {\n        newStyle.height = 2;\n        newStyle.top = containerRect.height - 2;\n      } else {\n        newStyle.width = 2;\n        newStyle.left = containerRect.width - 2;\n      }\n    }\n\n    setSelectorStyle(newStyle);\n    setSpringProps(newStyle);\n  }, [activeTab, effectiveOrientation, variant, normalizedTabs.length]);\n\n  // Magnetic selector function\n  const magneticSelector = useCallback(\n    (e: React.MouseEvent<Element>) => {\n      if (animationStyle !== \"spring\" || !tabsRef.current) return;\n\n      const container = tabsRef.current;\n      const rect = container.getBoundingClientRect();\n      const mouseX = e.clientX - rect.left;\n      const mouseY = e.clientY - rect.top;\n\n      // Find closest tab\n      let closestIndex = 0;\n      let closestDistance = Infinity;\n\n      tabRefs.current.forEach((tabRef, index) => {\n        if (!tabRef || visibleTabs[index]?.disabled) return;\n\n        const tabRect = tabRef.getBoundingClientRect();\n        const tabCenterX = tabRect.left + tabRect.width / 2 - rect.left;\n        const tabCenterY = tabRect.top + tabRect.height / 2 - rect.top;\n\n        const distance = Math.sqrt(\n          Math.pow(mouseX - tabCenterX, 2) + Math.pow(mouseY - tabCenterY, 2)\n        );\n\n        if (distance < closestDistance) {\n          closestDistance = distance;\n          closestIndex = index;\n        }\n      });\n\n      // Update magnetic data\n      const progress = Math.max(0, Math.min(1, 1 - closestDistance / 100));\n      setTabMagneticData({\n        closestTabIndex: closestIndex,\n        selectionProgress: progress,\n      });\n\n      // Update transform based on magnetic effect\n      if (progress > 0.1) {\n        const closestTab = tabRefs.current[closestIndex];\n        if (closestTab) {\n          const tabRect = closestTab.getBoundingClientRect();\n          const tabCenterX = tabRect.left + tabRect.width / 2 - rect.left;\n          const tabCenterY = tabRect.top + tabRect.height / 2 - rect.top;\n\n          setTransform({\n            translateX: (tabCenterX - mouseX) * progress * 0.3,\n            translateY: (tabCenterY - mouseY) * progress * 0.3,\n          });\n        }\n      } else {\n        setTransform({ translateX: 0, translateY: 0 });\n      }\n    },\n    [animationStyle, visibleTabs]\n  );\n\n  // Handle mouse leave\n  const handleMouseLeave = useCallback(() => {\n    if (animationStyle === \"spring\" && usePhysicsAnimation) {\n      // Reset selector position\n      updateSelectorPosition();\n      setTabMagneticData({ closestTabIndex: null, selectionProgress: 0 });\n      setTransform({ translateX: 0, translateY: 0 });\n    }\n  }, [animationStyle, usePhysicsAnimation, updateSelectorPosition]);\n\n  // Update selector position when active tab changes\n  useEffect(() => {\n    if (\n      !tabsRef.current ||\n      !activeTab ||\n      activeTab < 0 ||\n      activeTab >= normalizedTabs.length\n    )\n      return;\n\n    const activeTabElement = tabRefs.current[activeTab];\n    if (!activeTabElement) return;\n\n    const tabRect = activeTabElement.getBoundingClientRect();\n    const containerRect = tabsRef.current.getBoundingClientRect();\n\n    // Update selector style - this code needs to be in sync with updateSelectorPosition\n    const newStyle = {\n      width: tabRect.width,\n      height: tabRect.height,\n      left: activeTabElement.offsetLeft,\n      top: activeTabElement.offsetTop,\n    };\n\n    // Adjust for underlined variant\n    if (variant === \"underline\") {\n      if (effectiveOrientation === \"horizontal\") {\n        newStyle.height = 2;\n        newStyle.top = containerRect.height - 2;\n      } else {\n        newStyle.width = 2;\n        newStyle.left = containerRect.width - 2;\n      }\n    }\n\n    setSelectorStyle(newStyle); // Update local state for non-animated rendering\n    setSpringProps(newStyle); // Update spring props for animations\n\n    // Apply any physics-based animations\n    if (animationStyle === \"spring\") {\n      updateSelectorPosition();\n    }\n\n    // Also scroll active tab into view\n    scrollTabIntoView(activeTabElement!, tabsRef.current!, \"smooth\");\n  }, [\n    activeTab,\n    effectiveOrientation,\n    scrollable,\n    normalizedTabs.length,\n    variant,\n    tabsRef,\n    tabRefs,\n    animationStyle,\n    updateSelectorPosition,\n  ]);\n\n  // Setup scroll event listener\n  useEffect(() => {\n    const container = tabsRef.current;\n    if (!container || !scrollable) return;\n\n    const handleScroll = () => {\n      checkScrollVisibility();\n\n      // Update inertial scroll position\n      if (orientation === \"horizontal\") {\n        setScrollTarget(\n          { x: container.scrollLeft, y: scrollPosition.y },\n          false\n        );\n      } else {\n        setScrollTarget({ x: scrollPosition.x, y: container.scrollTop }, false);\n      }\n    };\n\n    container.addEventListener(\"scroll\", handleScroll);\n    return () => container.removeEventListener(\"scroll\", handleScroll);\n  }, [scrollable, orientation, checkScrollVisibility]);\n\n  // Check scroll visibility on mount and when tabs change\n  useEffect(() => {\n    checkScrollVisibility();\n\n    // Reset tab state when tabs change\n    // Initialize with all tabs visible temporarily\n    setVisibleTabs(normalizedTabs);\n    setCollapsedTabs([]);\n\n    // Re-calculate visible tabs after a short delay to allow DOM updates\n    if (collapseTabs) {\n      const timerId = setTimeout(() => {\n        if (!tabsRef.current) return;\n\n        // Ensure tabRefs array is aligned with tabs array\n        if (tabRefs.current.length !== normalizedTabs.length) {\n          // Optionally, could reschedule or handle this state\n          return;\n        }\n\n        // Update tab width measurements more robustly\n        const currentTabWidths: number[] = [];\n        normalizedTabs.forEach((_, index) => {\n          const tabRef = tabRefs.current[index];\n          const width = tabRef ? tabRef.getBoundingClientRect().width : 50; // Use fallback if ref missing\n          currentTabWidths[index] = width > 0 ? width : 50; // Use fallback if width is 0\n        });\n        tabWidthsRef.current = currentTabWidths;\n\n        const { visibleTabs: newVisible, hiddenTabs: newCollapsed } =\n          calculateVisibleTabs(normalizedTabs, tabsRef.current.clientWidth);\n\n        setVisibleTabs(newVisible);\n        setCollapsedTabs(newCollapsed);\n      }, 50); // Short delay for DOM updates\n\n      return () => clearTimeout(timerId); // Cleanup timeout on effect re-run\n    }\n    // Only include dependencies that trigger recalculation\n  }, [tabs, checkScrollVisibility, collapseTabs, maxVisibleTabs]);\n\n  // Create magnetic trail effect component\n  const MagneticTrailEffect = useCallback(() => {\n    if (\n      animationStyle !== \"spring\" ||\n      !tabMagneticData.closestTabIndex ||\n      tabMagneticData.closestTabIndex === activeTab ||\n      tabMagneticData.selectionProgress < 0.2\n    ) {\n      return null;\n    }\n\n    const trailOpacity = Math.min(0.4, tabMagneticData.selectionProgress * 0.4);\n    const trailSize = 20 + tabMagneticData.selectionProgress * 30;\n\n    return (\n      <div\n        style={{\n          position: \"absolute\",\n          pointerEvents: \"none\",\n          zIndex: 0,\n          width: `${trailSize}px`,\n          height: `${trailSize}px`,\n          borderRadius: \"50%\",\n          background:\n            color === \"default\"\n              ? `rgba(255, 255, 255, ${trailOpacity})`\n              : `var(--color-${color}-transparent)`,\n          filter: `blur(${trailSize / 4}px)`,\n          opacity: trailOpacity,\n          transform: `translate3d(${\n            springProps.left + springProps.width / 2 - trailSize / 2\n          }px, ${\n            springProps.top + springProps.height / 2 - trailSize / 2\n          }px, 0)`,\n          transition:\n            \"transform 0.1s ease-out, width 0.2s ease, height 0.2s ease, opacity 0.2s ease\",\n        }}\n      />\n    );\n  }, [animationStyle, tabMagneticData, activeTab, color, springProps]);\n\n  // Filter out props that shouldn't be passed to the styled component\n  const filteredRestProps = Object.fromEntries(\n    Object.entries(restProps).filter(\n      ([key]) =>\n        ![\n          \"onDrag\",\n          \"onDragStart\",\n          \"onDragEnd\",\n          \"onDragOver\",\n          \"onDragEnter\",\n          \"onDragLeave\",\n          \"onDrop\",\n          \"draggable\",\n        ].includes(key)\n    )\n  );\n\n  const containerClassName = cn(\"glass-tab-bar\", className);\n\n  const selectorOffset = !finalDisableAnimation\n    ? { x: transform.translateX, y: transform.translateY }\n    : undefined;\n\n  return (\n    <TabBarContainer\n      ref={tabsRef}\n      $orientation={effectiveOrientation}\n      $variant={variant}\n      $glassVariant={glassVariant}\n      $blurStrength={blurStrength}\n      $elevated={elevated}\n      $background={background}\n      $width={effectiveWidth}\n      $height={effectiveHeight}\n      $borderRadius={borderRadius}\n      className={containerClassName}\n      style={{ ...(style || {}) }}\n      onMouseMove={isScrolling ? handleScrollGestureMove : magneticSelector}\n      onMouseLeave={isScrolling ? handleScrollGestureEnd : handleMouseLeave}\n      onMouseDown={handleScrollGestureStart}\n      onTouchStart={handleScrollGestureStart}\n      onTouchMove={isScrolling ? handleScrollGestureMove : undefined}\n      onMouseUp={isScrolling ? handleScrollGestureEnd : undefined}\n      onTouchEnd={isScrolling ? handleScrollGestureEnd : undefined}\n      role=\"tablist\"\n      aria-label={ariaLabel}\n      aria-orientation={effectiveOrientation}\n      {...filteredRestProps}\n    >\n      {/* Selector indicator */}\n      {variant !== \"default\" && (\n        <TabSelector\n          left={selectorStyle.left}\n          top={selectorStyle.top}\n          width={selectorStyle.width}\n          height={selectorStyle.height}\n          variant={variant}\n          orientation={effectiveOrientation}\n          disableAnimation={finalDisableAnimation}\n          offset={selectorOffset}\n        />\n      )}\n\n      {/* Magnetic trail effect */}\n      {animationStyle === \"spring\" && !finalDisableAnimation && (\n        <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-lg glass-opacity-30\">\n          <div\n            className=\"glass-absolute glass-radius-full glass-surface-blue/20 glass-transition-all glass-duration-500 glass-ease-out\"\n            style={{\n              left: `${tabMagneticData.closestTabIndex !== null ? tabMagneticData.closestTabIndex * 60 : 0}px`,\n              width: \"60px\",\n              height: \"100%\",\n              transform: `scale(${tabMagneticData.selectionProgress})`,\n            }}\n          />\n        </div>\n      )}\n\n      {/* Tab buttons */}\n      {visibleTabs.map((tab, index) => {\n        const isActive = index === activeTab;\n        const tabKey = tab.value ?? tab.id ?? index;\n\n        // Check if this specific tab represents the \"More\" menu trigger\n        const isMoreTab =\n          collapseTabs &&\n          collapsedTabs.length > 0 &&\n          index === visibleTabs.length - 1;\n\n        // Setup ref tracking of all tab elements\n        const setTabRef = (el: HTMLButtonElement | null) => {\n          tabRefs.current[index] = el;\n        };\n\n        // Conditionally render using renderTab prop or default TabItemComponent\n        return renderTab ? (\n          <React.Fragment key={`tab-${tabKey}`}>\n            {renderTab(tab, index, isActive)}\n          </React.Fragment>\n        ) : (\n          <TabItemComponent\n            key={`tab-${tabKey}`}\n            id={tab.id || `tab-${index}`}\n            label={tab.label}\n            icon={tab.icon}\n            badge={tab.badge}\n            disabled={tab.disabled}\n            active={isActive}\n            onClick={(e) => handleTabClick(e, index)}\n            style={\n              effectiveFullWidth &&\n              !scrollable &&\n              effectiveOrientation === \"horizontal\"\n                ? {\n                    flex: \"1 1 0\",\n                    flexShrink: 1,\n                    justifyContent: \"center\",\n                    padding: effectiveShowLabels ? \"8px 10px\" : \"8px\",\n                  }\n                : undefined\n            }\n          />\n        );\n      })}\n\n      {/* Scroll arrows for horizontal orientation */}\n      {scrollable && effectiveOrientation === \"horizontal\" && (\n        <ScrollButtons\n          onScrollLeft={() => handleScroll(\"left\")}\n          onScrollRight={() => handleScroll(\"right\")}\n          showLeft={showLeftScroll}\n          showRight={showRightScroll}\n        />\n      )}\n\n      {/* Scroll arrows for vertical orientation */}\n      {scrollable && effectiveOrientation === \"vertical\" && (\n        <ScrollButtons\n          onScrollLeft={() => handleScroll(\"up\")}\n          onScrollRight={() => handleScroll(\"down\")}\n          showLeft={showLeftScroll}\n          showRight={showRightScroll}\n        />\n      )}\n\n      {/* Collapsed tabs menu */}\n      {collapseTabs &&\n        collapsedTabs.length > 0 &&\n        (renderCollapsedMenu ? (\n          renderCollapsedMenu(\n            collapsedTabs,\n            activeTab || 0,\n            handleCollapsedTabSelect\n          )\n        ) : (\n          <CollapsedMenu\n            items={collapsedTabs}\n            onItemClick={(item) => {\n              const index = collapsedTabs.indexOf(item);\n              handleCollapsedTabSelect(index);\n            }}\n          />\n        ))}\n    </TabBarContainer>\n  );\n});\n\n// Add displayName for better debugging\nGlassTabBar.displayName = \"GlassTabBar\";\n\nexport default GlassTabBar;\n", "\"use client\";\nimport React from \"react\";\nimport { useState, useEffect, useCallback, useRef } from \"react\";\n\nexport interface AccessibilitySettings {\n  reducedMotion: boolean;\n  highContrast: boolean;\n  largeText: boolean;\n  colorScheme: \"light\" | \"dark\" | \"auto\";\n  forcedColors: boolean;\n  screenReader: boolean;\n  keyboardNavigation: boolean;\n}\n\nexport interface AccessibilityOptions {\n  enableStorage?: boolean;\n  storageKey?: string;\n  detectScreenReader?: boolean;\n}\n\nconst DEFAULT_SETTINGS: AccessibilitySettings = {\n  reducedMotion: false,\n  highContrast: false,\n  largeText: false,\n  colorScheme: \"auto\",\n  forcedColors: false,\n  screenReader: false,\n  keyboardNavigation: false,\n};\n\n/**\n * Enhanced accessibility settings hook with comprehensive device detection\n */\nexport function useAccessibilitySettings(options: AccessibilityOptions = {}): {\n  settings: AccessibilitySettings;\n  updateSetting: <K extends keyof AccessibilitySettings>(\n    key: K,\n    value: AccessibilitySettings[K]\n  ) => void;\n  resetSettings: () => void;\n  isLoading: boolean;\n} {\n  const {\n    enableStorage = true,\n    storageKey = \"aura-glass-a11y-settings\",\n    detectScreenReader = true,\n  } = options;\n\n  const [settings, setSettings] =\n    useState<AccessibilitySettings>(DEFAULT_SETTINGS);\n  const [isLoading, setIsLoading] = useState(true);\n  const mediaQueriesRef = useRef<MediaQueryList[]>([]);\n  const keyboardDetectionRef = useRef<boolean>(false);\n\n  // Detect screen reader usage\n  const detectScreenReaderUsage = useCallback((): boolean => {\n    if (!detectScreenReader || typeof window === \"undefined\") return false;\n\n    // Check for common screen reader indicators\n    const indicators = [\n      // NVDA\n      () =>\n        \"speechSynthesis\" in window &&\n        window.speechSynthesis.getVoices().length > 0,\n      // JAWS, NVDA, others\n      () =>\n        navigator.userAgent.includes(\"NVDA\") ||\n        navigator.userAgent.includes(\"JAWS\"),\n      // VoiceOver (macOS/iOS)\n      () => \"webkitSpeechRecognition\" in window,\n      // General screen reader detection\n      () => window.navigator.userAgent.includes(\"Screenreader\"),\n    ];\n\n    return indicators.some((indicator) => {\n      try {\n        return indicator();\n      } catch {\n        return false;\n      }\n    });\n  }, [detectScreenReader]);\n\n  // Detect keyboard navigation preference\n  const detectKeyboardNavigation = useCallback(() => {\n    let keyboardUsed = false;\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (\n        e.key === \"Tab\" ||\n        e.key === \"Enter\" ||\n        e.key === \" \" ||\n        e.key.startsWith(\"Arrow\")\n      ) {\n        keyboardUsed = true;\n        keyboardDetectionRef.current = true;\n        setSettings((prev: any) => ({ ...prev, keyboardNavigation: true }));\n      }\n    };\n\n    const handleMouseDown = () => {\n      if (keyboardUsed) {\n        keyboardDetectionRef.current = false;\n        setSettings((prev: any) => ({ ...prev, keyboardNavigation: false }));\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown, { passive: true });\n    document.addEventListener(\"mousedown\", handleMouseDown, { passive: true });\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"mousedown\", handleMouseDown);\n    };\n  }, []);\n\n  // Load settings from storage\n  const loadStoredSettings = useCallback((): Partial<AccessibilitySettings> => {\n    if (!enableStorage || typeof window === \"undefined\") return {};\n\n    try {\n      const stored = localStorage.getItem(storageKey);\n      return stored ? JSON.parse(stored) : {};\n    } catch {\n      return {};\n    }\n  }, [enableStorage, storageKey]);\n\n  // Save settings to storage\n  const saveSettings = useCallback(\n    (newSettings: AccessibilitySettings) => {\n      if (!enableStorage || typeof window === \"undefined\") return;\n\n      try {\n        localStorage.setItem(storageKey, JSON.stringify(newSettings));\n      } catch {\n        // Ignore storage failures; settings remain active in memory.\n      }\n    },\n    [enableStorage, storageKey]\n  );\n\n  // Update individual setting\n  const updateSetting = useCallback(\n    <K extends keyof AccessibilitySettings>(\n      key: K,\n      value: AccessibilitySettings[K]\n    ) => {\n      setSettings((prev: any) => {\n        const newSettings = { ...prev, [key]: value };\n        saveSettings(newSettings);\n        return newSettings;\n      });\n    },\n    [saveSettings]\n  );\n\n  // Reset to defaults\n  const resetSettings = useCallback(() => {\n    const detectedSettings = detectSystemSettings();\n    const newSettings = { ...DEFAULT_SETTINGS, ...detectedSettings };\n    setSettings(newSettings);\n    saveSettings(newSettings);\n  }, [saveSettings]);\n\n  // Detect system accessibility preferences\n  const detectSystemSettings =\n    useCallback((): Partial<AccessibilitySettings> => {\n      if (typeof window === \"undefined\") return {};\n\n      const queries = [\n        { key: \"reducedMotion\", query: \"(prefers-reduced-motion: reduce)\" },\n        { key: \"highContrast\", query: \"(prefers-contrast: high)\" },\n        { key: \"forcedColors\", query: \"(forced-colors: active)\" },\n      ];\n\n      const colorSchemeQuery = window.matchMedia(\n        \"(prefers-color-scheme: dark)\"\n      );\n\n      const detected: Partial<AccessibilitySettings> = {\n        screenReader: detectScreenReaderUsage(),\n        colorScheme: colorSchemeQuery.matches ? \"dark\" : \"light\",\n      };\n\n      queries.forEach(({ key, query }) => {\n        try {\n          const mediaQuery = window.matchMedia(query);\n          (detected as any)[key] = mediaQuery.matches;\n        } catch {\n          (detected as any)[key] = false;\n        }\n      });\n\n      return detected;\n    }, [detectScreenReaderUsage]);\n\n  // Initialize settings\n  useEffect(() => {\n    if (typeof window === \"undefined\") {\n      setIsLoading(false);\n      return;\n    }\n\n    const initializeSettings = async () => {\n      try {\n        // Detect system preferences\n        const systemSettings = detectSystemSettings();\n\n        // Load stored preferences\n        const storedSettings = loadStoredSettings();\n\n        // Merge with priority: stored > system > defaults\n        const initialSettings = {\n          ...DEFAULT_SETTINGS,\n          ...systemSettings,\n          ...storedSettings,\n        };\n\n        setSettings(initialSettings);\n\n        // Set up media query listeners\n        const queries = [\n          { key: \"reducedMotion\", query: \"(prefers-reduced-motion: reduce)\" },\n          { key: \"highContrast\", query: \"(prefers-contrast: high)\" },\n          { key: \"forcedColors\", query: \"(forced-colors: active)\" },\n        ];\n\n        const colorSchemeQuery = window.matchMedia(\n          \"(prefers-color-scheme: dark)\"\n        );\n\n        const updateFromMediaQuery = () => {\n          const updates: Partial<AccessibilitySettings> = {\n            colorScheme: colorSchemeQuery.matches ? \"dark\" : \"light\",\n          };\n\n          queries.forEach(({ key, query }) => {\n            try {\n              const mediaQuery = window.matchMedia(query);\n              (updates as any)[key] = mediaQuery.matches;\n            } catch {\n              (updates as any)[key] = false;\n            }\n          });\n\n          setSettings((prev: any) => {\n            const newSettings = { ...prev, ...updates };\n            saveSettings(newSettings);\n            return newSettings;\n          });\n        };\n\n        // Add listeners\n        const mediaQueries = [\n          ...queries.map(({ query }) => window.matchMedia(query)),\n          colorSchemeQuery,\n        ];\n\n        mediaQueries.forEach((mq: any) => {\n          mq.addEventListener(\"change\", updateFromMediaQuery);\n        });\n\n        mediaQueriesRef.current = mediaQueries;\n\n        // Set up keyboard detection\n        const cleanupKeyboardDetection = detectKeyboardNavigation();\n\n        // Cleanup function\n        return () => {\n          mediaQueries.forEach((mq: any) => {\n            mq.removeEventListener(\"change\", updateFromMediaQuery);\n          });\n          cleanupKeyboardDetection();\n        };\n      } catch {\n        setSettings(DEFAULT_SETTINGS);\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    const cleanup = initializeSettings();\n\n    return () => {\n      cleanup?.then((fn) => fn?.());\n    };\n  }, [\n    detectSystemSettings,\n    loadStoredSettings,\n    saveSettings,\n    detectKeyboardNavigation,\n  ]);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      mediaQueriesRef.current = [];\n    };\n  }, []);\n\n  return {\n    settings,\n    updateSetting,\n    resetSettings,\n    isLoading,\n  };\n}\n\n/**\n * Hook for specific accessibility feature detection\n */\nexport function useAccessibilityFeature(\n  feature: keyof AccessibilitySettings\n): boolean {\n  const { settings } = useAccessibilitySettings();\n  return settings[feature] as boolean;\n}\n\n/**\n * Hook for accessibility-aware animations\n */\nexport function useAccessibleAnimation(defaultEnabled: boolean = true): {\n  shouldAnimate: boolean;\n  animationDuration: number;\n  transitionDuration: number;\n} {\n  const { settings } = useAccessibilitySettings();\n\n  const shouldAnimate = defaultEnabled && !settings.reducedMotion;\n  const animationDuration = settings.reducedMotion ? 0 : 300;\n  const transitionDuration = settings.reducedMotion ? 0 : 200;\n\n  return {\n    shouldAnimate,\n    animationDuration,\n    transitionDuration,\n  };\n}\n\n/**\n * Hook for accessibility-aware colors\n */\nexport function useAccessibleColors(): {\n  shouldUseHighContrast: boolean;\n  colorScheme: \"light\" | \"dark\" | \"auto\";\n  forcedColors: boolean;\n} {\n  const { settings } = useAccessibilitySettings();\n\n  return {\n    shouldUseHighContrast: settings.highContrast,\n    colorScheme: settings.colorScheme,\n    forcedColors: settings.forcedColors,\n  };\n}\n", "import React, { forwardRef } from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { OptimizedGlassCore as OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport styles from \"./GlassTabBar.module.css\";\n\ntype Orientation = \"horizontal\" | \"vertical\";\ntype TabVariant = \"default\" | \"pills\" | \"underline\";\ntype GlassVariant = \"frosted\" | \"dynamic\" | \"clear\" | \"tinted\" | \"luminous\";\ntype BlurStrength = \"none\" | \"light\" | \"standard\" | \"heavy\";\n\nconst BLUR_MAP: Record<BlurStrength, string> = {\n  none: \"0px\",\n  light: \"var(--glass-blur-sm, 6px)\",\n  standard: \"var(--glass-blur-md, 12px)\",\n  heavy: \"var(--glass-blur-lg, 20px)\",\n};\n\nconst toDimension = (value?: string | number): string | undefined => {\n  if (value === undefined) return undefined;\n  return typeof value === \"number\" ? `${value}px` : value;\n};\n\nexport interface TabBarContainerProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  $orientation?: Orientation;\n  $variant?: TabVariant;\n  $glassVariant?: GlassVariant;\n  $blurStrength?: BlurStrength;\n  $elevated?: boolean;\n  $background?: boolean;\n  $color?: string;\n  $width?: string | number;\n  $height?: string | number;\n  $borderRadius?: string | number;\n  $iconPosition?: \"top\" | \"left\" | \"right\";\n  $verticalDisplayMode?: \"expanded\" | \"compact\";\n  $placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n  $isResponsive?: boolean;\n}\n\nexport const TabBarContainer = forwardRef<HTMLDivElement, TabBarContainerProps>(\n  (props, ref) => {\n    const {\n      children,\n      className,\n      style,\n      $orientation = \"horizontal\",\n      $variant = \"default\",\n      $glassVariant,\n      $blurStrength = \"standard\",\n      $elevated = false,\n      $background = true,\n      $color,\n      $width,\n      $height,\n      $borderRadius,\n      $iconPosition,\n      $verticalDisplayMode,\n      $placement,\n      $isResponsive,\n      ...rest\n    } = props;\n\n    const inlineStyle: CSSProperties &\n      Record<string, string | number | undefined> = {\n      width: toDimension($width),\n      height: toDimension($height),\n      ...(typeof $borderRadius !== \"undefined\"\n        ? { borderRadius: toDimension($borderRadius) }\n        : {}),\n      ...style,\n    };\n\n    inlineStyle[\"--ag-tabbar-blur\"] =\n      BLUR_MAP[$blurStrength] || BLUR_MAP.standard;\n\n    if ($background === false) {\n      inlineStyle.background = \"transparent\";\n      inlineStyle.boxShadow = \"none\";\n      inlineStyle.border = \"none\";\n    }\n\n    const containerClassName = cn(\n      styles.container,\n      $orientation === \"vertical\" ? styles.vertical : styles.horizontal,\n      $elevated && styles.elevated,\n      $background === false && styles.noBackground,\n      className\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        intent=\"neutral\"\n        elevation={$elevated ? \"level2\" : \"level1\"}\n        tier=\"medium\"\n        border=\"subtle\"\n        className={containerClassName}\n        data-orientation={$orientation}\n        data-variant={$variant}\n        data-glass-variant={$glassVariant}\n        data-icon-position={$iconPosition}\n        data-display-mode={$verticalDisplayMode}\n        data-placement={$placement}\n        data-responsive={$isResponsive ? \"true\" : \"false\"}\n        data-color={$color}\n        style={{ ...(inlineStyle || {}) }}\n        {...rest}\n      >\n        {children}\n      </OptimizedGlass>\n    );\n  }\n);\n\nTabBarContainer.displayName = \"TabBarContainer\";\n\nexport interface TabSelectorProps extends React.HTMLAttributes<HTMLDivElement> {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  variant?: TabVariant;\n  orientation?: Orientation;\n  disableAnimation?: boolean;\n  offset?: { x: number; y: number };\n}\n\nexport const TabSelector = forwardRef<HTMLDivElement, TabSelectorProps>(\n  (\n    {\n      left,\n      top,\n      width,\n      height,\n      variant = \"pills\",\n      orientation = \"horizontal\",\n      disableAnimation = false,\n      offset,\n      className,\n      style,\n      ...rest\n    },\n    ref\n  ) => {\n    const selectorStyle: CSSProperties &\n      Record<string, string | number | undefined> = {\n      left,\n      top,\n      width,\n      height,\n      ...(offset\n        ? {\n            transform: `translate3d(${offset.x}px, ${offset.y}px, 0)`,\n          }\n        : {}),\n      ...(disableAnimation ? { transition: \"none\" } : {}),\n      ...style,\n    };\n\n    selectorStyle[\"--ag-selector-blur\"] =\n      \"var(--ag-tabbar-blur, var(--glass-blur-md, 12px))\";\n\n    if (variant === \"underline\") {\n      selectorStyle.borderRadius = \"9999px\";\n      if (orientation === \"horizontal\") {\n        selectorStyle.height = Math.max(height, 2);\n      } else {\n        selectorStyle.width = Math.max(width, 2);\n      }\n    }\n\n    return (\n      <div\n        ref={ref}\n        role=\"presentation\"\n        aria-hidden=\"true\"\n        className={cn(\n          styles.selectorBase,\n          variant === \"underline\" && styles.selectorUnderline,\n          className\n        )}\n        style={{ ...selectorStyle }}\n        {...rest}\n      />\n    );\n  }\n);\n\nTabSelector.displayName = \"TabSelector\";\n", ".container {\n  position: relative;\n  display: flex;\n  align-items: center;\n  padding: 0.25rem;\n  gap: 0;\n  overflow: hidden;\n  border-radius: var(--glass-radius-lg, var(--glass-radius-xl));\n  isolation: isolate;\n  backdrop-filter: var(\n    --glass-tabbar-filter,\n    blur(var(--ag-tabbar-blur, var(--glass-blur-md, 12px))) saturate(1.15)\n  );\n  -webkit-backdrop-filter: var(\n    --glass-tabbar-filter,\n    blur(var(--ag-tabbar-blur, var(--glass-blur-md, 12px))) saturate(1.15)\n  );\n  transition:\n    backdrop-filter var(--glass-motion-duration-fast, 150ms) ease,\n    box-shadow var(--glass-motion-duration-fast, 150ms) ease;\n}\n\n.horizontal {\n  flex-direction: row;\n}\n\n.vertical {\n  flex-direction: column;\n}\n\n.elevated {\n  box-shadow: var(\n    --glass-elev-tabbar-container,\n    0 12px 32px color-mix(in srgb, var(--glass-black) 18%, transparent)\n  );\n}\n\n.noBackground {\n  background: transparent !important;\n  box-shadow: none !important;\n}\n\n.container > * {\n  position: relative;\n  z-index: 1;\n}\n\n.selectorBase {\n  position: absolute;\n  left: 0;\n  top: 0;\n  z-index: 0;\n  border-radius: var(--glass-radius-lg, var(--glass-radius-xl));\n  pointer-events: none;\n  background: var(\n    --glass-tabbar-selector-bg,\n    linear-gradient(\n      180deg,\n      var(\n          --glass-tabbar-selector-color-top,\n          color-mix(in srgb, var(--glass-white) 28%, transparent)\n        )\n        0%,\n      var(\n          --glass-tabbar-selector-color-bottom,\n          color-mix(in srgb, var(--glass-white) 16%, transparent)\n        )\n        100%\n    )\n  );\n  box-shadow: var(\n    --glass-elev-tabbar-selector,\n    inset 0 1px 0\n      var(\n        --glass-border-hover,\n        color-mix(in srgb, var(--glass-white) 26%, transparent)\n      )\n  );\n  backdrop-filter: var(\n    --glass-tabbar-selector-filter,\n    blur(var(--ag-selector-blur, var(--glass-blur-lg))) saturate(1.2)\n  );\n  -webkit-backdrop-filter: var(\n    --glass-tabbar-selector-filter,\n    blur(var(--ag-selector-blur, var(--glass-blur-lg))) saturate(1.2)\n  );\n  transition:\n    transform var(--glass-motion-duration-fast, 150ms)\n      var(--glass-motion-snap, cubic-bezier(0.2, 0, 0, 1)),\n    width var(--glass-motion-duration-fast, 150ms)\n      var(--glass-motion-snap, cubic-bezier(0.2, 0, 0, 1)),\n    height var(--glass-motion-duration-fast, 150ms)\n      var(--glass-motion-snap, cubic-bezier(0.2, 0, 0, 1)),\n    left var(--glass-motion-duration-fast, 150ms)\n      var(--glass-motion-snap, cubic-bezier(0.2, 0, 0, 1)),\n    top var(--glass-motion-duration-fast, 150ms)\n      var(--glass-motion-snap, cubic-bezier(0.2, 0, 0, 1)),\n    opacity var(--glass-motion-duration-fast, 150ms) ease;\n  will-change: transform, width, height, left, top, opacity;\n}\n\n.selectorBase::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  pointer-events: none;\n  background: var(\n    --glass-tabbar-selector-highlight,\n    radial-gradient(\n      120% 60% at 20% 0%,\n      var(\n          --glass-tabbar-highlight-inner,\n          color-mix(in srgb, var(--glass-white) 55%, transparent)\n        )\n        0%,\n      var(--glass-tabbar-highlight-fade, transparent) 40%\n    )\n  );\n  mix-blend-mode: overlay;\n}\n\n.selectorUnderline {\n  border-radius: var(--glass-radius-pill, 9999px);\n  background: var(\n    --glass-color-primary,\n    color-mix(in srgb, hsl(var(--glass-color-primary)) 85%, transparent)\n  );\n  box-shadow: none;\n  backdrop-filter: var(--glass-tabbar-underline-filter, none);\n  -webkit-backdrop-filter: var(--glass-tabbar-underline-filter, none);\n}\n\n.selectorUnderline::after {\n  display: none;\n}\n", "\"use client\";\n// Typography tokens available via typography.css (imported in index.css)\nimport React from \"react\";\nimport { cn } from \"../../../lib/utilsComprehensive\";\nimport { glassTokenUtils } from \"../../../tokens/glass\";\n\nexport interface TabItemProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\"> {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: string | number;\n  disabled?: boolean;\n  active?: boolean;\n  onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n  /**\n   * ID of the tab panel this tab controls\n   */\n  \"aria-controls\"?: string;\n  /**\n   * Index of the tab for keyboard navigation\n   */\n  index?: number;\n  /**\n   * Total number of tabs for keyboard navigation\n   */\n  totalTabs?: number;\n  /**\n   * Callback for keyboard navigation\n   */\n  onKeyDown?: (event: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\nconst TabItemComponent: React.FC<TabItemProps> = ({\n  id,\n  label,\n  icon,\n  badge,\n  disabled = false,\n  active = false,\n  onClick,\n  \"aria-controls\": ariaControls,\n  index = 0,\n  totalTabs = 1,\n  onKeyDown,\n  className,\n  style,\n  ...rest\n}) => {\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n    if (onKeyDown) {\n      onKeyDown(e);\n      return;\n    }\n\n    const parent = e.currentTarget.parentElement;\n    if (!parent) return;\n\n    const tabs = Array.from(\n      parent.querySelectorAll('[role=\"tab\"]')\n    ) as HTMLButtonElement[];\n    const currentIndex = tabs.indexOf(e.currentTarget);\n\n    switch (e.key) {\n      case \"ArrowLeft\":\n        e.preventDefault();\n        const prevIndex =\n          currentIndex - 1 < 0 ? tabs.length - 1 : currentIndex - 1;\n        tabs[prevIndex]?.focus();\n        tabs[prevIndex]?.click();\n        break;\n      case \"ArrowRight\":\n        e.preventDefault();\n        const nextIndex = (currentIndex + 1) % tabs.length;\n        tabs[nextIndex]?.focus();\n        tabs[nextIndex]?.click();\n        break;\n      case \"Home\":\n        e.preventDefault();\n        tabs[0]?.focus();\n        tabs[0]?.click();\n        break;\n      case \"End\":\n        e.preventDefault();\n        tabs[tabs.length - 1]?.focus();\n        tabs[tabs.length - 1]?.click();\n        break;\n    }\n  };\n\n  return (\n    <button\n      data-glass-component\n      id={`tab-${id}`}\n      role=\"tab\"\n      aria-selected={active}\n      aria-controls={ariaControls || undefined}\n      aria-disabled={disabled}\n      tabIndex={active ? 0 : -1}\n      style={{\n        display: \"flex\",\n        alignItems: \"center\",\n        flexShrink: 0,\n        maxWidth: \"100%\",\n        minWidth: 0,\n        gap: \"6px\",\n        padding: \"8px 16px\",\n        background: active\n          ? glassTokenUtils.getSurface(\"neutral\", \"level1\").surface.base\n          : \"transparent\",\n        border: \"none\",\n        borderRadius: \"6px\",\n        color: active\n          ? \"var(--glass-white)\"\n          : glassTokenUtils.getSurface(\"neutral\", \"level1\").text.secondary,\n        cursor: disabled ? \"not-allowed\" : \"pointer\",\n        opacity: disabled ? 0.5 : 1,\n        fontSize: \"0.875rem\", // body text\n        fontWeight: active ? 600 : 400,\n        transition: \"all 0.2s ease\",\n        ...style,\n      }}\n      onClick={onClick}\n      onKeyDown={handleKeyDown}\n      disabled={disabled}\n      className={cn(\n        \"glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\",\n        className\n      )}\n      {...rest}\n    >\n      {icon && <span aria-hidden=\"true\">{icon}</span>}\n      <span\n        style={{\n          minWidth: 0,\n          overflow: \"hidden\",\n          textOverflow: \"ellipsis\",\n          whiteSpace: \"nowrap\",\n        }}\n      >\n        {label}\n      </span>\n      {badge && (\n        <span\n          aria-label={`${badge} notifications`}\n          style={{\n            background: \"hsl(var(--glass-color-danger))\",\n            color: \"white\",\n            borderRadius: \"10px\",\n            padding: \"2px 6px\",\n            fontSize: \"0.625rem\",\n            fontWeight: \"var(--typography-heading-weight)\", // semi-bold\n          }}\n        >\n          {badge}\n        </span>\n      )}\n    </button>\n  );\n};\n\nexport const TabItem = TabItemComponent;\n\nexport default TabItemComponent;\n", "'use client';\n// Typography tokens available via typography.css (imported in index.css)\nimport React, { forwardRef } from 'react';\nimport { cn } from '../../../lib/utilsComprehensive';\nimport { OptimizedGlass } from '../../../primitives';\nimport { useA11yId } from '@/utils/a11y';\nimport { useReducedMotion } from '../../../hooks/useReducedMotion';\n\nexport interface CollapsedMenuProps {\n  items: any[];\n  onItemClick?: (item: any) => void;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n  className?: string;\n  'aria-label'?: string;\n}\n\nconst CollapsedMenu = forwardRef<HTMLDivElement, CollapsedMenuProps>(({ \n  items,\n  onItemClick,\n  respectMotionPreference = true,\n  className,\n  'aria-label': ariaLabel,\n}, ref) => {\n  // Accessibility and motion preferences\n  const menuId = useA11yId('collapsed-menu');\n  const prefersReducedMotion = useReducedMotion();\n  const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n  return (\n    <OptimizedGlass\n      ref={ref}\n      intent=\"neutral\"\n      elevation=\"level3\"\n      intensity=\"strong\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation={shouldReduceMotion ? 'none' : 'gentle'}\n      performanceMode=\"medium\"\n      role=\"navigation\"\n      aria-label={ariaLabel}\n      id={menuId}\n      className={cn(\n        'absolute top-full right-0 min-w-[200px] glass-z-1000 glass-p-2',\n        className\n      )}\n    >\n      {(items || []).map((item, index) => (\n        <button\n          key={item?.id || index}\n          role=\"menuitem\"\n          tabIndex={0}\n          className={cn(\n            'w-full flex items-center glass-gap-2 glass-px-3 glass-py-2 text-left glass-text-sm',\n            'glass-text-primary/80 hover:glass-text-primary glass-radius-md',\n            'hover:bg-white/10 focus:bg-white/10',\n            'focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30',\n            !shouldReduceMotion && 'transition-all duration-200 glass-hover--translate-y-0-5'\n          )}\n          onClick={(e) => onItemClick?.(item)}\n        >\n          {item?.icon && <span aria-hidden=\"true\">{item?.icon}</span>}\n          <span>{item?.label}</span>\n        </button>\n      ))}\n    </OptimizedGlass>\n  );\n});\n\nCollapsedMenu.displayName = 'CollapsedMenu';\n\nexport default CollapsedMenu;", "\"use client\";\nimport React from \"react\";\nimport { createGlassStyle } from \"../../../core/mixins/glassMixins\";\n\nexport interface ScrollButtonsProps {\n  onScrollLeft?: () => void;\n  onScrollRight?: () => void;\n  showLeft?: boolean;\n  showRight?: boolean;\n  className?: string; // Add className to props\n}\n\nexport const ScrollButtons: React.FC<ScrollButtonsProps> = ({\n  onScrollLeft,\n  onScrollRight,\n  showLeft = false,\n  showRight = false,\n  className, // Destructure className\n}) => {\n  return (\n    <>\n      {showLeft && (\n        <button\n          type=\"button\"\n          aria-label=\"Scroll left\"\n          style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n          onClick={onScrollLeft}\n          className={`glass-focus glass-touch-target glass-contrast-guard ${className}`} // Apply className here\n        >\n          \u2039\n        </button>\n      )}\n      {showRight && (\n        <button\n          type=\"button\"\n          aria-label=\"Scroll right\"\n          style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n          onClick={onScrollRight}\n          className={`glass-focus glass-touch-target glass-contrast-guard ${className}`} // Apply className here\n        >\n          \u203A\n        </button>\n      )}\n    </>\n  );\n};\n\nexport default ScrollButtons;\n", "import React from 'react';\nimport { useState, useEffect } from 'react';\n\nexport interface ResponsiveState {\n  isMobile: boolean;\n  isTablet: boolean;\n  isDesktop: boolean;\n  width: number;\n  height: number;\n}\n\nconst useResponsive = (breakpoints = { mobile: 768, tablet: 1024 }): ResponsiveState => {\n  const [state, setState] = useState<ResponsiveState>({\n    isMobile: false,\n    isTablet: false,\n    isDesktop: true,\n    width: typeof window !== 'undefined' ? window.innerWidth : 1024,\n    height: typeof window !== 'undefined' ? window.innerHeight : 768,\n  });\n\n  useEffect(() => {\n    const updateState = () => {\n      const width = window.innerWidth;\n      const height = window.innerHeight;\n\n      setState({\n        isMobile: width < breakpoints.mobile,\n        isTablet: width >= breakpoints.mobile && width < breakpoints.tablet,\n        isDesktop: width >= breakpoints.tablet,\n        width,\n        height,\n      });\n    };\n\n    updateState();\n    window.addEventListener('resize', updateState);\n\n    return () => window.removeEventListener('resize', updateState);\n  }, [breakpoints.mobile, breakpoints.tablet]);\n\n  return state;\n};\n\nexport default useResponsive;\n", "import React from 'react';\nimport { useState, useCallback } from 'react';\n\nexport interface TabAnimationState {\n  activeIndex: number;\n  isAnimating: boolean;\n  selectorPosition: number;\n  selectorWidth: number;\n}\n\nconst useTabAnimations = (initialIndex = 0) => {\n  const [state, setState] = useState<TabAnimationState>({\n    activeIndex: initialIndex,\n    isAnimating: false,\n    selectorPosition: 0,\n    selectorWidth: 0,\n  });\n\n  const animateToTab = useCallback((index: number, position: number, width: number) => {\n    setState((prev: any) => ({\n      ...prev,\n      activeIndex: index,\n      isAnimating: true,\n      selectorPosition: position,\n      selectorWidth: width,\n    }));\n\n    // Simulate animation end\n    setTimeout(() => {\n      setState((prev: any) => ({\n        ...prev,\n        isAnimating: false,\n      }));\n    }, 300);\n  }, []);\n\n  const setActiveTab = useCallback((index: number) => {\n    setState((prev: any) => ({\n      ...prev,\n      activeIndex: index,\n    }));\n  }, []);\n\n  return {\n    ...state,\n    animateToTab,\n    setActiveTab,\n  };\n};\n\nexport default useTabAnimations;\n", "import React from \"react\";\nexport interface TabItem {\n  id?: string;\n  label: string;\n  disabled?: boolean;\n  width?: number;\n  /** Numeric badge count, or a numeric string (e.g. \"12\"). Non-numeric badges count as 0. */\n  badge?: number | string;\n}\n\nexport const calculateVisibleTabs = (\n  tabs: TabItem[],\n  containerWidth: number,\n  tabWidth: number = 120\n): { visibleTabs: TabItem[]; hiddenTabs: TabItem[] } => {\n  const maxVisibleTabs = Math.floor(containerWidth / tabWidth);\n  const visibleTabs = tabs.slice(0, maxVisibleTabs);\n  const hiddenTabs = tabs.slice(maxVisibleTabs);\n\n  return { visibleTabs, hiddenTabs };\n};\n\nexport const calculateTotalBadgeCount = (tabs: TabItem[]): number => {\n  return tabs.reduce((total, tab) => {\n    const numeric =\n      typeof tab.badge === \"number\"\n        ? tab.badge\n        : typeof tab.badge === \"string\"\n          ? Number.parseInt(tab.badge, 10)\n          : 0;\n    return total + (Number.isFinite(numeric) ? numeric : 0);\n  }, 0);\n};\n\nexport const getNextEnabledTabIndex = (\n  tabs: TabItem[],\n  currentIndex: number,\n  direction: \"next\" | \"prev\" = \"next\"\n): number => {\n  let index = currentIndex;\n\n  do {\n    index =\n      direction === \"next\"\n        ? (index + 1) % tabs.length\n        : index === 0\n          ? tabs.length - 1\n          : index - 1;\n  } while (tabs[index]?.disabled && index !== currentIndex);\n\n  return index;\n};\n\nexport const scrollTabIntoView = (\n  tabElement: HTMLElement,\n  containerElement: HTMLElement,\n  behavior: \"smooth\" | \"auto\" = \"smooth\"\n): void => {\n  const containerRect = containerElement.getBoundingClientRect();\n  const tabRect = tabElement.getBoundingClientRect();\n\n  if (tabRect.left < containerRect.left) {\n    // Tab is to the left of the container\n    containerElement.scrollBy({\n      left: tabRect.left - containerRect.left - 16,\n      behavior,\n    });\n  } else if (tabRect.right > containerRect.right) {\n    // Tab is to the right of the container\n    containerElement.scrollBy({\n      left: tabRect.right - containerRect.right + 16,\n      behavior,\n    });\n  }\n};\n", "\"use client\";\n/**\n * Glass Tab Item Component\n * Individual tab item with glassmorphic styling for tab navigation\n */\n\nimport React, { CSSProperties, forwardRef, ReactNode } from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\n/**\n * Glass Tab Item Props\n */\nexport interface GlassTabItemProps {\n  children?: ReactNode;\n  label: string;\n  value: string;\n  active?: boolean;\n  disabled?: boolean;\n  icon?: ReactNode;\n  badge?: string | number;\n  onClick?: (value: string) => void;\n  className?: string;\n  style?: CSSProperties;\n  href?: string;\n  target?: string;\n}\n\n/**\n * Glass Tab Item Component\n */\nexport const GlassTabItem = forwardRef<HTMLButtonElement, GlassTabItemProps>(\n  (\n    {\n      children,\n      label,\n      value,\n      active = false,\n      disabled = false,\n      icon,\n      badge,\n      onClick,\n      className = \"\",\n      style = {},\n      href,\n      target,\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n\n    const accentColor = \"var(--glass-theme-accent-primary, #5ac8ff)\";\n    const textPrimary = \"var(--glass-theme-text, var(--glass-text-primary))\";\n    const transitionDuration = prefersReducedMotion\n      ? \"0ms\"\n      : \"var(--glass-theme-motion-hover, 180ms)\";\n\n    const handleClick = () => {\n      if (!disabled && onClick) {\n        onClick(value);\n      }\n    };\n\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        handleClick();\n      }\n    };\n\n    const tabStyles: CSSProperties = {\n      position: \"relative\",\n      display: \"inline-flex\",\n      alignItems: \"center\",\n      gap: \"8px\",\n      padding: \"12px 20px\",\n      border: \"none\",\n      borderRadius: \"var(--glass-theme-button-radius, var(--glass-radius-md, 16px))\",\n      background: active\n        ? \"color-mix(in srgb, var(--glass-theme-accent-primary, rgba(96, 165, 250, 0.65)) 24%, transparent)\"\n        : \"transparent\",\n      // Use createGlassStyle() instead,\n      color: textPrimary,\n      fontSize: \"14px\",\n      fontWeight: active ? 600 : 400,\n      cursor: disabled ? \"not-allowed\" : \"pointer\",\n      opacity: disabled ? 0.5 : active ? 1 : 0.82,\n      transition: prefersReducedMotion\n        ? \"none\"\n        : `all ${transitionDuration} cubic-bezier(0.4, 0, 0.2, 1)`,\n      textDecoration: \"none\",\n      userSelect: \"none\",\n      ...style,\n    };\n\n    const Component = href ? \"a\" : \"button\";\n\n    return (\n      <Component\n        ref={ref as any}\n        className={`glass-tab-item ${active ? \"active\" : \"\"} ${disabled ? \"disabled\" : \"\"} ${className}`}\n        style={{ ...tabStyles }}\n        onClick={href ? undefined : handleClick}\n        onKeyDown={href ? undefined : handleKeyDown}\n        disabled={href ? undefined : disabled}\n        href={href}\n        target={target}\n        role={href ? \"tab\" : \"tab\"}\n        aria-selected={active}\n        aria-disabled={disabled}\n        tabIndex={disabled ? -1 : 0}\n      >\n        {/* Icon */}\n        {icon && (\n          <span className=\"glass-tab-item-icon\" aria-hidden=\"true\">\n            {icon}\n          </span>\n        )}\n\n        {/* Label */}\n        <span className=\"glass-tab-item-label\">{children || label}</span>\n\n        {/* Badge */}\n        {badge !== undefined && (\n          <span\n            className=\"glass-tab-item-badge\"\n            style={{\n              display: \"inline-flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              minWidth: \"20px\",\n              height: \"20px\",\n              padding: \"0 6px\",\n              borderRadius: \"10px\",\n              background: accentColor,\n              color: \"var(--glass-theme-text, #05111d)\",\n              fontSize: \"11px\",\n              fontWeight: 600,\n            }}\n          >\n            {badge}\n          </span>\n        )}\n\n        {/* Active Indicator */}\n        {active && !prefersReducedMotion && (\n          <span\n            className=\"glass-tab-item-indicator\"\n            style={{\n              position: \"absolute\",\n              bottom: 0,\n              left: \"50%\",\n              transform: \"translateX(-50%)\",\n              width: \"80%\",\n              height: \"2px\",\n              background: accentColor,\n              borderRadius: \"2px 2px 0 0\",\n            }}\n            aria-hidden=\"true\"\n          />\n        )}\n\n        <style>{`\n          .glass-tab-item:hover:not(.disabled) {\n            background: var(\n              --glass-theme-accent-primary,\n              rgba(255, 255, 255, 0.08)\n            ) !important;\n            transform: translateY(-1px);\n          }\n\n          .glass-tab-item:active:not(.disabled) {\n            transform: translateY(0);\n          }\n\n          .glass-tab-item:focus-visible {\n            outline: none;\n            box-shadow: var(\n              --glass-theme-focus-ring,\n              0 0 0 3px rgba(99, 102, 241, 0.3)\n            );\n          }\n\n          .glass-tab-item-icon {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 18px;\n          }\n\n          @media (prefers-reduced-motion: reduce) {\n            .glass-tab-item,\n            .glass-tab-item-indicator {\n              transition: none !important;\n              animation: none !important;\n            }\n            .glass-tab-item:hover:not(.disabled) {\n              transform: none !important;\n            }\n          }\n        `}</style>\n      </Component>\n    );\n  }\n);\n\nGlassTabItem.displayName = \"GlassTabItem\";\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { createContext, forwardRef, useContext, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\n// Context for tab management\ninterface TabsContextValue {\n  value: string;\n  onValueChange: (value: string) => void;\n  orientation: \"horizontal\" | \"vertical\";\n  variant: \"default\" | \"pills\" | \"underline\" | \"minimal\";\n  activationMode: \"automatic\" | \"manual\";\n  registerTrigger: (value: string, el: HTMLButtonElement | null) => void;\n  listRef: React.RefObject<HTMLDivElement>;\n  ink: { left: number; width: number };\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = () => {\n  const context = useContext(TabsContext);\n  if (!context) {\n    throw new Error(\n      \"Tabs components must be used within a GlassTabs component\"\n    );\n  }\n  return context;\n};\n\n// Main Tabs component\nexport interface GlassTabsProps extends React.HTMLAttributes<HTMLDivElement> {\n  value?: string;\n  defaultValue?: string;\n  onValueChange?: (value: string) => void;\n  orientation?: \"horizontal\" | \"vertical\";\n  variant?: \"default\" | \"pills\" | \"underline\" | \"minimal\";\n  activationMode?: \"automatic\" | \"manual\";\n}\n\nexport const GlassTabs = forwardRef<HTMLDivElement, GlassTabsProps>(\n  (\n    {\n      value,\n      defaultValue,\n      onValueChange,\n      orientation = \"horizontal\",\n      variant = \"default\",\n      activationMode = \"automatic\",\n      className,\n      children,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValue, setInternalValue] = useState(defaultValue || \"\");\n    const currentValue = value ?? internalValue;\n    const listRef = React.useRef<HTMLDivElement>(null);\n    const triggerMapRef = React.useRef(new Map<string, HTMLButtonElement>());\n    const [ink, setInk] = React.useState<{ left: number; width: number }>({\n      left: 0,\n      width: 0,\n    });\n\n    const registerTrigger = (val: string, el: HTMLButtonElement | null) => {\n      const map = triggerMapRef.current;\n      if (el) map.set(val, el);\n      else map.delete(val);\n      // Update ink when triggers mount/unmount\n      requestAnimationFrame(() => {\n        if (!listRef.current) return;\n        const active = map.get(currentValue);\n        if (!active) return;\n        const lr = listRef.current.getBoundingClientRect();\n        const ar = active.getBoundingClientRect();\n        setInk({ left: ar.left - lr.left, width: ar.width });\n      });\n    };\n\n    React.useEffect(() => {\n      const map = triggerMapRef.current;\n      if (!listRef.current) return;\n      const active = map.get(currentValue);\n      if (!active) return;\n      const lr = listRef.current.getBoundingClientRect();\n      const ar = active.getBoundingClientRect();\n      setInk({ left: ar.left - lr.left, width: ar.width });\n    }, [currentValue]);\n\n    React.useEffect(() => {\n      const handle = () => {\n        const map = triggerMapRef.current;\n        if (!listRef.current) return;\n        const active = map.get(currentValue);\n        if (!active) return;\n        const lr = listRef.current.getBoundingClientRect();\n        const ar = active.getBoundingClientRect();\n        setInk({ left: ar.left - lr.left, width: ar.width });\n      };\n      window.addEventListener(\"resize\", handle);\n      return () => window.removeEventListener(\"resize\", handle);\n    }, [currentValue]);\n\n    const handleValueChange = (newValue: string) => {\n      if (!value) {\n        setInternalValue(newValue);\n      }\n      onValueChange?.(newValue);\n    };\n\n    const contextValue: TabsContextValue = {\n      value: currentValue,\n      onValueChange: handleValueChange,\n      orientation,\n      variant,\n      activationMode,\n      registerTrigger,\n      listRef,\n      ink,\n    };\n\n    return (\n      <TabsContext.Provider data-glass-component value={contextValue}>\n        <div\n          ref={ref}\n          role=\"navigation\"\n          aria-label={ariaLabel}\n          className={cn(\n            \"glass-tabs\",\n            orientation === \"vertical\" ? \"flex glass-gap-6\" : \"w-full\",\n            className\n          )}\n          data-orientation={orientation}\n          {...props}\n        >\n          {children}\n        </div>\n      </TabsContext.Provider>\n    );\n  }\n);\n\nGlassTabs.displayName = \"GlassTabs\";\n\n// TabsList component\nexport interface GlassTabsListProps extends React.HTMLAttributes<HTMLDivElement> {\n  loop?: boolean;\n}\n\nexport const GlassTabsList = forwardRef<HTMLDivElement, GlassTabsListProps>(\n  ({ className, loop = true, children, ...props }, ref) => {\n    const { orientation, variant, listRef, ink } = useTabsContext();\n\n    const variantStyles = {\n      default: cn(\"glass-tabs-list\", \"glass-radius-xl glass-p-1 glass-gap-2\"),\n      pills: cn(\"glass-tabs-list-pills\", \"rounded-2xl glass-p-1.5 glass-gap-1\"),\n      underline: cn(\n        \"glass-tabs-list-underline\",\n        \"glass-border-b glass-border-glass-border/20\",\n        \"glass-gap-8 glass-px-1\"\n      ),\n      minimal: cn(\"glass-tabs-list-minimal\", \"glass-gap-4\"),\n    };\n\n    const shouldUseGlass = variant === \"default\" || variant === \"pills\";\n\n    const commonA11y = {\n      role: \"tablist\" as const,\n      \"aria-orientation\": orientation,\n      onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n        const isHorizontal = orientation === \"horizontal\";\n        const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\";\n        const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\";\n        if (\n          e.key !== prevKey &&\n          e.key !== nextKey &&\n          e.key !== \"Home\" &&\n          e.key !== \"End\"\n        )\n          return;\n        const container = e.currentTarget;\n        const tabs = Array.from(\n          container.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')\n        );\n        if (tabs.length === 0) return;\n        const current = document.activeElement as HTMLButtonElement | null;\n        let index = Math.max(\n          0,\n          tabs.findIndex((t) => t === current)\n        );\n        if (e.key === prevKey)\n          index = index > 0 ? index - 1 : loop ? tabs.length - 1 : 0;\n        if (e.key === nextKey)\n          index =\n            index < tabs.length - 1 ? index + 1 : loop ? 0 : tabs.length - 1;\n        if (e.key === \"Home\") index = 0;\n        if (e.key === \"End\") index = tabs.length - 1;\n        const next = tabs[index];\n        next?.focus();\n        e.preventDefault();\n      },\n    };\n\n    return shouldUseGlass ? (\n      <OptimizedGlass\n        ref={(node) => {\n          (listRef as any).current = node as HTMLDivElement | null;\n          if (typeof ref === \"function\") ref(node as any);\n          else if (ref)\n            (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n              node as any;\n        }}\n        variant=\"ethereal\"\n        elevation={\"level1\"}\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"glass-max-w-full glass-items-center glass-justify-start\",\n          orientation === \"horizontal\"\n            ? \"glass-flex glass-flex-row glass-overflow-x-auto glass-overflow-y-hidden\"\n            : \"glass-inline-flex glass-flex-col glass-overflow-y-auto\",\n          variantStyles[variant],\n          variant === \"pills\" ? \"rounded-2xl\" : \"glass-radius-xl\",\n          className\n        )}\n        {...(commonA11y as any)}\n        {...props}\n      >\n        {variant === (\"underline\" as typeof variant) &&\n          orientation === \"horizontal\" && (\n            <div className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-h-0-5\">\n              <div\n                className=\"glass-absolute glass-h-full glass-surface-primary glass-transition-all glass-duration-200\"\n                style={{ left: ink.left, width: ink.width }}\n              />\n            </div>\n          )}\n        {children}\n      </OptimizedGlass>\n    ) : (\n      <div\n        ref={(node) => {\n          (listRef as any).current = node as HTMLDivElement | null;\n          if (typeof ref === \"function\") ref(node as any);\n          else if (ref)\n            (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n              node as any;\n        }}\n        className={cn(\n          \"glass-max-w-full glass-items-center glass-justify-start\",\n          orientation === \"horizontal\"\n            ? \"glass-flex glass-flex-row glass-overflow-x-auto glass-overflow-y-hidden\"\n            : \"glass-inline-flex glass-flex-col glass-overflow-y-auto\",\n          variantStyles[variant],\n          className\n        )}\n        {...(commonA11y as any)}\n        {...props}\n      >\n        <div className=\"glass-relative glass-w-full\" />\n        {children}\n      </div>\n    );\n  }\n);\n\nGlassTabsList.displayName = \"GlassTabsList\";\n\n// TabsTrigger component\nexport interface GlassTabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  value: string;\n  icon?: React.ReactNode;\n  badge?: string | number;\n  disabled?: boolean;\n}\n\nexport const GlassTabsTrigger = forwardRef<\n  HTMLButtonElement,\n  GlassTabsTriggerProps\n>(\n  (\n    {\n      value,\n      icon,\n      badge,\n      disabled = false,\n      className,\n      children,\n      onClick,\n      ...props\n    },\n    ref\n  ) => {\n    const {\n      value: selectedValue,\n      onValueChange,\n      variant,\n      activationMode,\n      registerTrigger,\n    } = useTabsContext();\n    const isSelected = selectedValue === value;\n\n    const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (!disabled) {\n        onValueChange(value);\n        onClick?.(event);\n      }\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n      const tabButton = event.currentTarget;\n      const tablist = tabButton.closest(\n        '[role=\"tablist\"]'\n      ) as HTMLDivElement | null;\n      if (!tablist) return;\n      const isHorizontal =\n        tablist.getAttribute(\"aria-orientation\") !== \"vertical\";\n      const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\";\n      const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\";\n      const tabs = Array.from(\n        tablist.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')\n      );\n      const index = Math.max(\n        0,\n        tabs.findIndex((t) => t === tabButton)\n      );\n      let targetIndex = index;\n      if (event.key === prevKey)\n        targetIndex = index > 0 ? index - 1 : tabs.length - 1;\n      if (event.key === nextKey)\n        targetIndex = index < tabs.length - 1 ? index + 1 : 0;\n      if (event.key === \"Home\") targetIndex = 0;\n      if (event.key === \"End\") targetIndex = tabs.length - 1;\n      if (targetIndex !== index) {\n        const next = tabs[targetIndex];\n        next?.focus();\n        if (activationMode === \"automatic\") {\n          onValueChange(next?.getAttribute(\"data-value\") || \"\");\n        }\n        event.preventDefault();\n      }\n      if ((event.key === \"Enter\" || event.key === \" \") && !disabled) {\n        onValueChange(value);\n        event.preventDefault();\n      }\n    };\n\n    const baseStyles = cn(\n      \"glass-inline-flex glass-min-w-max glass-max-w-full glass-flex-shrink-0 glass-items-center glass-justify-center glass-gap-2\",\n      \"glass-whitespace-nowrap glass-radius-lg glass-px-3 glass-py-2\",\n      \"glass-text-sm glass-font-medium glass-transition-all glass-duration-200\",\n      \"focus-visible:outline-none focus-visible:ring-2\",\n      \"focus-visible:ring-primary focus-visible:ring-offset-2\",\n      \"disabled:pointer-events-none disabled:opacity-50\"\n    );\n\n    const variantStyles = {\n      default: cn(\n        isSelected\n          ? \"glass-surface-subtle glass-text-primary glass-shadow-md glass-border glass-border-glass-border/20\"\n          : \"glass-text-secondary hover:glass-text-primary hover:glass-surface-subtle/50\"\n      ),\n      pills: cn(\n        isSelected\n          ? \"glass-surface-primary glass-text-primary glass-shadow-lg\"\n          : \"glass-text-secondary hover:glass-text-primary hover:glass-surface-subtle/50\"\n      ),\n      underline: cn(\n        \"relative glass-px-1 glass-py-3 rounded-none\",\n        isSelected\n          ? \"glass-text-primary after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary\"\n          : \"glass-text-secondary hover:glass-text-primary\"\n      ),\n      minimal: cn(\n        \"glass-px-2 glass-py-1 glass-radius-md\",\n        isSelected\n          ? \"glass-text-primary glass-surface-primary/10\"\n          : \"glass-text-secondary hover:glass-text-primary hover:glass-surface-subtle/30\"\n      ),\n    };\n\n    // Convert Booleanish ARIA attributes to boolean\n    const buttonProps = {\n      ...props,\n      \"aria-pressed\":\n        props[\"aria-pressed\"] === \"true\"\n          ? true\n          : props[\"aria-pressed\"] === \"false\"\n            ? false\n            : props[\"aria-pressed\"] === \"mixed\"\n              ? undefined\n              : props[\"aria-pressed\"],\n      \"aria-expanded\":\n        props[\"aria-expanded\"] === \"true\"\n          ? true\n          : props[\"aria-expanded\"] === \"false\"\n            ? false\n            : props[\"aria-expanded\"],\n    };\n\n    return (\n      <Motion\n        preset=\"scaleIn\"\n        className=\"glass-relative glass-inline-glass-block glass-flex-shrink-0\"\n      >\n        <GlassButton\n          ref={(node: any) => {\n            if (typeof ref === \"function\") ref(node);\n            else if (ref)\n              (\n                ref as React.MutableRefObject<HTMLButtonElement | null>\n              ).current = node;\n            registerTrigger(value, node as HTMLButtonElement | null);\n          }}\n          role=\"tab\"\n          id={`trigger-${value}`}\n          aria-selected={!!isSelected}\n          aria-controls={`content-${value}`}\n          data-value={value}\n          data-state={isSelected ? \"active\" : \"inactive\"}\n          className={cn(baseStyles, variantStyles[variant], className)}\n          disabled={disabled}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          {...buttonProps}\n        >\n          {icon && <span className=\"glass-shrink-0\">{icon}</span>}\n\n          {children && (\n            <span className=\"glass-min-w-0 glass-truncate\">{children}</span>\n          )}\n\n          {badge && (\n            <span\n              className={cn(\n                \"glass-ml-2 glass-radius-full glass-px-2 glass-py-0.5 glass-text-xs\",\n                isSelected\n                  ? \"glass-surface-primary/20 glass-text-primary\"\n                  : \"glass-surface-subtle/50 glass-text-secondary\"\n              )}\n            >\n              {badge}\n            </span>\n          )}\n\n          {/* Active indicator for underline variant */}\n          {variant === (\"underline\" as typeof variant) && isSelected && (\n            <Motion\n              preset=\"slideUp\"\n              className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-h-0-5 glass-surface-primary\"\n            />\n          )}\n        </GlassButton>\n      </Motion>\n    );\n  }\n);\n\nGlassTabsTrigger.displayName = \"GlassTabsTrigger\";\n\n// TabsContent component\nexport interface GlassTabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n  value: string;\n  forceMount?: boolean;\n}\n\nexport const GlassTabsContent = forwardRef<\n  HTMLDivElement,\n  GlassTabsContentProps\n>(({ value, forceMount = false, className, children, ...props }, ref) => {\n  const { value: selectedValue } = useTabsContext();\n  const isSelected = selectedValue === value;\n\n  if (!isSelected && !forceMount) {\n    return null;\n  }\n\n  return (\n    <Motion\n      preset=\"fadeIn\"\n      className={cn(\n        \"glass-tabs-content\",\n        \"mt-6 focus-visible:outline-none\",\n        \"focus-visible:ring-2 focus-visible:ring-primary\",\n        \"focus-visible:ring-offset-2\",\n        !isSelected && \"hidden\",\n        className\n      )}\n    >\n      <div\n        ref={ref}\n        role=\"tabpanel\"\n        aria-labelledby={`trigger-${value}`}\n        id={`content-${value}`}\n        tabIndex={0}\n        data-state={isSelected ? \"active\" : \"inactive\"}\n        {...props}\n      >\n        {children}\n      </div>\n    </Motion>\n  );\n});\n\nGlassTabsContent.displayName = \"GlassTabsContent\";\n\n// Export all components\nexport {\n  GlassTabs as Tabs,\n  GlassTabsContent as TabsContent,\n  GlassTabsList as TabsList,\n  GlassTabsTrigger as TabsTrigger,\n};\n", "\"use client\";\n/**\n * EnhancedGlassTabs Component\n *\n * High-contrast, accessibility-focused tab component for chart navigation\n * with glass morphism styling.\n */\nimport React, {\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n  forwardRef,\n  useImperativeHandle,\n  useMemo,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n/**\n * TabItem interface\n */\nexport interface TabItem {\n  /**\n   * Unique ID for the tab\n   */\n  id: string;\n\n  /**\n   * Display label for the tab\n   */\n  label: string;\n\n  /**\n   * Optional badge count to display\n   */\n  badgeCount?: number;\n\n  /**\n   * Whether the tab is disabled\n   */\n  disabled?: boolean;\n\n  /**\n   * Optional icon component\n   */\n  icon?: React.ReactNode;\n}\n\n/**\n * EnhancedGlassTabs props interface\n */\nexport interface EnhancedGlassTabsProps {\n  /**\n   * Array of tab items\n   */\n  tabs?: TabItem[];\n\n  /**\n   * Currently active tab ID\n   */\n  activeTab?: string;\n\n  /**\n   * Callback when tab changes\n   */\n  onChange?: (tabId: string) => void;\n\n  /**\n   * Visual variant of the tabs\n   */\n  variant?: \"default\" | \"elevated\" | \"outlined\" | \"text\";\n\n  /**\n   * Size of the tabs\n   */\n  size?: \"small\" | \"medium\" | \"large\";\n\n  /**\n   * Color scheme for the tabs\n   */\n  color?: \"primary\" | \"secondary\" | \"accent\" | \"light\" | \"dark\";\n\n  /**\n   * Whether to use high contrast mode\n   */\n  highContrast?: boolean;\n\n  /**\n   * Animation behavior of the indicator\n   */\n  indicatorAnimation?: \"slide\" | \"fade\" | \"none\";\n\n  /**\n   * Whether to stretch tabs to fill width\n   */\n  fullWidth?: boolean;\n\n  /**\n   * Default tab to select if none provided\n   */\n  defaultTab?: string;\n\n  /**\n   * Whether to apply physics motion effects\n   */\n  physicsEnabled?: boolean;\n\n  /**\n   * Whether to show the active indicator\n   */\n  showIndicator?: boolean;\n\n  /**\n   * Text alignment within tabs\n   */\n  textAlign?: \"center\" | \"left\" | \"right\";\n\n  /**\n   * Additional CSS class name\n   */\n  className?: string;\n\n  /**\n   * Inline styles\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n\n  /**\n   * Accessible label for the tabs\n   */\n  \"aria-label\"?: string;\n\n  /**\n   * Test ID for testing\n   */\n  \"data-testid\"?: string;\n}\n\n// Ref interface\nexport interface EnhancedGlassTabsRef {\n  /** Gets the main tabs container DOM element */\n  getContainerElement: () => HTMLDivElement | null;\n  /** Programmatically sets the active tab */\n  setActiveTab: (tabId: string) => void;\n  /** Gets the ID of the currently active tab */\n  getActiveTab: () => string;\n  /** Get the DOM element for a specific tab button */\n  getTabElement: (tabId: string) => HTMLButtonElement | null;\n}\n\n// Color utility functions\nconst getTabColors = (\n  color: EnhancedGlassTabsProps[\"color\"],\n  isDarkMode: boolean,\n  highContrast: boolean\n) => {\n  const baseColors = {\n    primary: {\n      light: \"hsl(var(--glass-color-primary))\",\n      dark: \"hsl(var(--glass-color-primary))\",\n    },\n    secondary: {\n      light: \"var(--glass-color-secondary)\",\n      dark: \"var(--glass-color-secondary)\",\n    },\n    accent: {\n      light: \"hsl(var(--glass-color-danger))\",\n      dark: \"hsl(var(--glass-color-danger))\",\n    },\n    light: { light: \"var(--glass-gray-50)\", dark: \"var(--glass-gray-100)\" },\n    dark: { light: \"var(--glass-gray-800)\", dark: \"var(--glass-gray-900)\" },\n  };\n\n  const selectedColor =\n    baseColors?.[color || \"primary\"][isDarkMode ? \"dark\" : \"light\"];\n\n  return {\n    activeColor: selectedColor,\n    activeBg: isDarkMode ? `${selectedColor}22` : `${selectedColor}11`,\n    activeText: highContrast\n      ? isDarkMode\n        ? \"var(--glass-white)\"\n        : \"var(--glass-black)\"\n      : selectedColor,\n    inactiveText: isDarkMode\n      ? highContrast\n        ? \"color-mix(in srgb, var(--glass-white) 80%, transparent)\"\n        : \"color-mix(in srgb, var(--glass-white) 60%, transparent)\"\n      : highContrast\n        ? \"var(--glass-text-secondary-dark)\"\n        : \"var(--glass-text-tertiary-dark)\",\n    hoverBg: isDarkMode\n      ? \"color-mix(in srgb, var(--glass-white) 5%, transparent)\"\n      : \"color-mix(in srgb, var(--glass-black) 3%, transparent)\",\n    disabledText: isDarkMode\n      ? \"var(--glass-bg-hover)\"\n      : \"color-mix(in srgb, var(--glass-black) 30%, transparent)\",\n  };\n};\n\n// Utility to detect dark mode preference\nconst useIsDarkMode = () => {\n  const [isDark, setIsDark] = useState(false);\n\n  useEffect(() => {\n    const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n    setIsDark(mediaQuery.matches);\n\n    const handleChange = (e: MediaQueryListEvent) => setIsDark(e.matches);\n    mediaQuery.addEventListener(\"change\", handleChange);\n\n    return () => mediaQuery.removeEventListener(\"change\", handleChange);\n  }, []);\n\n  return isDark;\n};\n\n/**\n * EnhancedGlassTabs Component\n */\nexport const EnhancedGlassTabs = forwardRef<\n  EnhancedGlassTabsRef,\n  EnhancedGlassTabsProps\n>(\n  (\n    {\n      tabs = [],\n      activeTab,\n      onChange,\n      variant = \"default\",\n      size = \"medium\",\n      color = \"primary\",\n      highContrast = false,\n      indicatorAnimation = \"slide\",\n      fullWidth = false,\n      defaultTab,\n      physicsEnabled = true,\n      showIndicator = true,\n      textAlign = \"center\",\n      className,\n      style,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel = \"Tabs\",\n      \"data-testid\": dataTestId,\n    },\n    ref\n  ) => {\n    // Check for reduced motion preference\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n    const isDarkMode = useIsDarkMode();\n\n    // Generate unique IDs for accessibility\n    const tablistId = useA11yId(\"tablist\");\n    const tabIdPrefix = useA11yId(\"tab\");\n\n    // Refs for tab elements\n    const tabRefs = useRef<Record<string, HTMLButtonElement | null>>({});\n\n    // Ref for the container element\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    // State for currently active tab\n    const [currentTab, setCurrentTab] = useState(\n      activeTab || defaultTab || ((tabs?.length || 0) > 0 ? tabs[0].id : \"\")\n    );\n\n    // State for indicator position\n    const [indicatorStyle, setIndicatorStyle] = useState<{\n      left: number;\n      width: number;\n      height: number;\n      bottom: number;\n    }>({\n      left: 0,\n      width: 0,\n      height: 2,\n      bottom: 0,\n    });\n\n    // Handle tab change\n    const handleTabChange = (tabId: string) => {\n      if (currentTab !== tabId) {\n        setCurrentTab(tabId);\n        if (onChange) {\n          onChange(tabId);\n        }\n      }\n    };\n\n    // --- Imperative Handle (Moved After Handlers) ---\n    useImperativeHandle(\n      ref,\n      () => ({\n        getContainerElement: () => containerRef.current,\n        setActiveTab: (tabId) => {\n          if (tabs.some((tab) => tab.id === tabId)) {\n            handleTabChange(tabId);\n          }\n        },\n        getActiveTab: () => currentTab,\n        getTabElement: (tabId) => tabRefs.current?.[tabId] || null,\n      }),\n      [\n        containerRef,\n        currentTab,\n        tabs,\n        handleTabChange, // Dependency\n        tabRefs, // Dependency\n      ]\n    );\n\n    // Update active tab when controlled prop changes\n    useEffect(() => {\n      if (activeTab !== undefined && activeTab !== currentTab) {\n        setCurrentTab(activeTab);\n      }\n    }, [activeTab]);\n\n    // Update indicator position when active tab changes\n    useEffect(() => {\n      // Function to update the indicator position based on current tab\n      const updateIndicatorPosition = () => {\n        const activeTabElement = tabRefs.current?.[currentTab];\n        if (activeTabElement && containerRef.current) {\n          const { left, width } = activeTabElement.getBoundingClientRect();\n          const containerLeft =\n            containerRef.current.getBoundingClientRect().left || 0;\n          const relativeLeft = left - containerLeft;\n\n          const finalHeight = size === \"small\" ? 2 : size === \"large\" ? 4 : 3;\n          const finalBottom = 0;\n\n          setIndicatorStyle({\n            left: relativeLeft,\n            width,\n            height: finalHeight,\n            bottom: finalBottom,\n          });\n        }\n      };\n\n      // Run once immediately\n      updateIndicatorPosition();\n\n      // Set up resize observer to update indicator on tab resize\n      const resizeObserver = new ResizeObserver(() => {\n        updateIndicatorPosition();\n      });\n\n      // Observe the container and current tab element\n      if (containerRef.current) {\n        resizeObserver.observe(containerRef.current);\n      }\n\n      const activeTabElement = tabRefs.current?.[currentTab];\n      if (activeTabElement) {\n        resizeObserver.observe(activeTabElement);\n      }\n\n      // Add window resize listener\n      window.addEventListener(\"resize\", updateIndicatorPosition);\n\n      // Clean up\n      return () => {\n        resizeObserver.disconnect();\n        window.removeEventListener(\"resize\", updateIndicatorPosition);\n      };\n    }, [currentTab, size]); // Only re-run when tab or size changes\n\n    // Get color scheme for styling\n    const colors = useMemo(\n      () => getTabColors(color, isDarkMode, highContrast),\n      [color, isDarkMode, highContrast]\n    );\n\n    // Size-based styling\n    const sizeClasses = {\n      small: {\n        padding: \"glass-py-2 glass-px-4\",\n        text: \"glass-text-sm\",\n        indicatorHeight: 2,\n      },\n      medium: {\n        padding: \"glass-py-3 glass-px-5\",\n        text: \"glass-text-base\",\n        indicatorHeight: 3,\n      },\n      large: {\n        padding: \"glass-py-4 glass-px-6\",\n        text: \"glass-text-lg\",\n        indicatorHeight: 4,\n      },\n    };\n\n    const sizeConfig = sizeClasses[size];\n\n    // Text alignment classes\n    const alignmentClasses = {\n      left: \"glass-justify-start\",\n      center: \"glass-justify-center\",\n      right: \"glass-justify-end\",\n    };\n\n    return (\n      <nav\n        aria-label={ariaLabel}\n        data-testid={dataTestId}\n        className={cn(className)}\n      >\n        <OptimizedGlass\n          ref={containerRef}\n          intent=\"neutral\"\n          elevation={variant === \"elevated\" ? \"level2\" : \"level1\"}\n          tier=\"medium\"\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border={variant === \"outlined\" ? \"subtle\" : \"none\"}\n          animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n          performanceMode=\"medium\"\n          className={cn(\n            \"glass-flex glass-relative glass-overflow-hidden glass-w-full glass-radius-lg\",\n            {\n              \"glass-bg-transparent\": variant === \"text\",\n            }\n          )}\n          style={{\n            display: \"flex\",\n            overflow: \"hidden\",\n            width: \"100%\",\n            ...style,\n          }}\n        >\n          <div\n            className={cn(\"glass-flex glass-w-full glass-relative\", {\n              \"[&>*]:glass-flex-1\": fullWidth,\n            })}\n            style={{ display: \"flex\", width: \"100%\" }}\n            role=\"tablist\"\n            aria-orientation=\"horizontal\"\n            id={tablistId}\n          >\n            {tabs.map((tab) => {\n              const isActive = currentTab === tab.id;\n\n              return (\n                <button\n                  key={tab.id}\n                  ref={(element) => {\n                    if (tabRefs.current) tabRefs.current[tab.id] = element;\n                  }}\n                  role=\"tab\"\n                  id={`${tabIdPrefix}-${tab.id}`}\n                  tabIndex={tab.disabled ? -1 : isActive ? 0 : -1}\n                  aria-selected={isActive}\n                  aria-controls={`tabpanel-${tab.id}`}\n                  disabled={tab.disabled}\n                  className={cn(\n                    \"glass-relative glass-flex glass-items-center glass-gap-2 glass-whitespace-nowrap glass-border-none glass-cursor-pointer\",\n                    `glass-outline-none glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] ${ANIMATION.EASING.easeOut}`,\n                    \"glass-focus glass-touch-target glass-contrast-guard\",\n                    \"focus-visible:ring-2 focus-visible:ring-offset-2\",\n                    sizeConfig.padding,\n                    sizeConfig.text,\n                    alignmentClasses[textAlign],\n                    {\n                      \"glass-cursor-not-allowed glass-opacity-50\": tab.disabled,\n                      \"glass-bg-transparent\": !isActive,\n                      \"glass-font-semibold\": isActive,\n                      \"glass-font-medium\": !isActive,\n                    }\n                  )}\n                  style={{\n                    display: \"flex\",\n                    alignItems: \"center\",\n                    justifyContent:\n                      textAlign === \"left\"\n                        ? \"flex-start\"\n                        : textAlign === \"right\"\n                          ? \"flex-end\"\n                          : \"center\",\n                    whiteSpace: \"nowrap\",\n                    color: tab.disabled\n                      ? colors.disabledText\n                      : isActive\n                        ? colors.activeText\n                        : colors.inactiveText,\n                    backgroundColor: isActive ? colors.activeBg : \"transparent\",\n                  }}\n                  onMouseEnter={(e) => {\n                    if (!tab.disabled && !isActive) {\n                      e.currentTarget.style.backgroundColor = colors.hoverBg;\n                      e.currentTarget.style.color = colors.activeText;\n                    }\n                  }}\n                  onMouseLeave={(e) => {\n                    if (!tab.disabled && !isActive) {\n                      e.currentTarget.style.backgroundColor = \"transparent\";\n                      e.currentTarget.style.color = colors.inactiveText;\n                    }\n                  }}\n                  onClick={() => !tab.disabled && handleTabChange(tab.id)}\n                >\n                  {tab.icon && <span aria-hidden=\"true\">{tab.icon}</span>}\n                  <span>{tab.label}</span>\n                  {tab.badgeCount !== undefined && tab.badgeCount > 0 && (\n                    <span\n                      className=\"glass-inline-glass-flex glass-items-center glass-justify-center glass-min-w-18px glass-h-18px glass-px-1.5 glass-text-xs glass-font-semibold glass-text-primary glass-radius-full\"\n                      style={{ backgroundColor: colors.activeColor }}\n                    >\n                      {tab.badgeCount > 99 ? \"99+\" : tab.badgeCount}\n                    </span>\n                  )}\n                </button>\n              );\n            })}\n          </div>\n\n          {/* Active indicator */}\n          {showIndicator && currentTab && (\n            <div\n              className={cn(\n                \"glass-absolute glass-pointer-events-none\",\n                indicatorAnimation === \"slide\" &&\n                  !shouldReduceMotion &&\n                  `glass-transition-all glass-duration-[${ANIMATION.DURATION.normal}ms] ${ANIMATION.EASING.easeOut}`,\n                indicatorAnimation === \"fade\" &&\n                  !shouldReduceMotion &&\n                  `glass-transition-opacity glass-duration-[${ANIMATION.DURATION.fast}ms] ${ANIMATION.EASING.easeOut}`\n              )}\n              style={{\n                left: `${indicatorStyle.left}px`,\n                width: `${indicatorStyle.width}px`,\n                height: `${sizeConfig.indicatorHeight}px`,\n                bottom: `${indicatorStyle.bottom}px`,\n                backgroundColor: colors.activeColor,\n                borderRadius: `${sizeConfig.indicatorHeight / 2}px`,\n                boxShadow: \"var(--glass-elev-2)\",\n              }}\n            />\n          )}\n        </OptimizedGlass>\n      </nav>\n    );\n  }\n);\n\n// Add displayName\nEnhancedGlassTabs.displayName = \"EnhancedGlassTabs\";\n\nexport default EnhancedGlassTabs;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { LiquidGlassToolbar } from \"./LiquidGlassToolbar\";\n\nexport interface GlassToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n  left?: React.ReactNode;\n  center?: React.ReactNode;\n  right?: React.ReactNode;\n  sticky?: boolean;\n  floating?: boolean;\n  material?: \"glass\" | \"liquid\";\n  materialVariant?: \"regular\" | \"clear\";\n  scrollEdge?: \"soft\" | \"hard\" | false;\n  /**\n   * Whether to respect motion preferences for animations\n   */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassToolbar = forwardRef<HTMLDivElement, GlassToolbarProps>(\n  (\n    {\n      left,\n      center,\n      right,\n      sticky = false,\n      floating = false,\n      material = \"glass\",\n      materialVariant = \"regular\",\n      scrollEdge = false,\n      respectMotionPreference = true,\n      className,\n      \"aria-label\": ariaLabel,\n      ...rest\n    },\n    ref\n  ) => {\n    // Accessibility and motion preferences\n    const toolbarId = useA11yId(\"toolbar\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldReduceMotion = respectMotionPreference && prefersReducedMotion;\n\n    if (material === \"liquid\") {\n      return (\n        <LiquidGlassToolbar\n          ref={ref}\n          left={left}\n          center={center}\n          right={right}\n          sticky={sticky}\n          floating={floating}\n          materialVariant={materialVariant}\n          scrollEdge={scrollEdge}\n          aria-label={ariaLabel || \"Toolbar\"}\n          className={className}\n          {...rest}\n        />\n      );\n    }\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        elevation={floating ? \"level2\" : \"level1\"}\n        animation={shouldReduceMotion ? \"none\" : \"gentle\"}\n        role=\"navigation\"\n        aria-label={ariaLabel || \"Toolbar\"}\n        id={toolbarId}\n        className={cn(\n          \"glass-w-full glass-max-w-full glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3 glass-px-3 glass-py-2 glass-radius-xl\",\n          sticky && \"glass-sticky glass-top-0 glass-z-30\",\n          floating && \"glass-shadow-xl\",\n          className\n        )}\n        style={{\n          display: \"flex\",\n          flexWrap: \"wrap\",\n          alignItems: \"center\",\n          justifyContent: \"space-between\",\n          width: \"100%\",\n          maxWidth: \"100%\",\n          ...(sticky ? { position: \"sticky\", top: 0, zIndex: 30 } : {}),\n        }}\n        {...rest}\n      >\n        <div className=\"glass-min-w-0 glass-flex glass-flex-1 glass-items-center glass-gap-2 sm:glass-flex-none\">\n          {left}\n        </div>\n        <div className=\"glass-min-w-0 glass-order-3 glass-flex glass-w-full glass-items-center glass-justify-start sm:glass-order-none sm:glass-w-auto sm:glass-flex-1 sm:glass-justify-center\">\n          {center}\n        </div>\n        <div className=\"glass-min-w-0 glass-flex glass-flex-wrap glass-items-center glass-justify-end glass-gap-2\">\n          {right}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassToolbar.displayName = \"GlassToolbar\";\n\nexport default GlassToolbar;\n", "\"use client\";\n\nimport React, { forwardRef, type CSSProperties } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassEffectGroup } from \"../../primitives/LiquidGlassEffectGroup\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassToolbarItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: React.ReactNode;\n  disabled?: boolean;\n  primary?: boolean;\n  onClick?: () => void;\n}\n\nexport interface LiquidGlassToolbarGroup {\n  id: string;\n  items: LiquidGlassToolbarItem[];\n  \"aria-label\"?: string;\n}\n\nexport interface LiquidGlassToolbarProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  left?: React.ReactNode;\n  center?: React.ReactNode;\n  right?: React.ReactNode;\n  groups?: LiquidGlassToolbarGroup[];\n  floating?: boolean;\n  sticky?: boolean;\n  scrollEdge?: \"soft\" | \"hard\" | false;\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  primaryActionId?: string;\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nconst densityClass = {\n  compact: \"glass-gap-1 glass-px-2 glass-py-1\",\n  comfortable: \"glass-gap-2 glass-px-3 glass-py-2\",\n  spacious: \"glass-gap-3 glass-px-4 glass-py-3\",\n};\n\nconst toolbarButtonStyle: CSSProperties = {\n  border: 0,\n  background: \"transparent\",\n  color: \"inherit\",\n  cursor: \"pointer\",\n  font: \"inherit\",\n};\n\nexport const LiquidGlassToolbar = forwardRef<\n  HTMLDivElement,\n  LiquidGlassToolbarProps\n>(\n  (\n    {\n      left,\n      center,\n      right,\n      groups = [],\n      floating = false,\n      sticky = false,\n      scrollEdge = false,\n      density = \"comfortable\",\n      primaryActionId,\n      materialVariant = \"regular\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => (\n    <div\n      ref={ref}\n      role=\"toolbar\"\n      className={cn(\n        \"liquid-glass-toolbar glass-relative glass-flex glass-items-center glass-justify-between\",\n        sticky && \"glass-sticky glass-top-0 glass-z-40\",\n        floating && \"glass-z-40\",\n        densityClass[density],\n        className\n      )}\n      data-liquid-glass-toolbar=\"true\"\n      data-density={density}\n      {...props}\n    >\n      {scrollEdge && (\n        <LiquidGlassScrollEdge edge=\"top\" styleMode={scrollEdge} active />\n      )}\n      <LiquidGlassMaterial\n        material=\"liquid\"\n        variant={materialVariant}\n        radius=\"xl\"\n        interactive={false}\n        className=\"glass-w-full glass-max-w-full\"\n      >\n        <div className=\"glass-flex glass-w-full glass-max-w-full glass-flex-wrap glass-items-center glass-justify-between glass-gap-3\">\n          <div className=\"glass-flex glass-min-w-0 glass-flex-1 glass-items-center glass-gap-2 sm:glass-flex-none\">\n            {left}\n          </div>\n          <div className=\"glass-order-3 glass-flex glass-min-w-0 glass-w-full glass-items-center glass-justify-start glass-gap-2 glass-overflow-x-auto sm:glass-order-none sm:glass-w-auto sm:glass-flex-1 sm:glass-justify-center\">\n            {center}\n            {groups.map((group) => (\n              <LiquidGlassEffectGroup\n                key={group.id}\n                className=\"glass-flex glass-min-w-max glass-items-center glass-gap-1\"\n                aria-label={group[\"aria-label\"]}\n              >\n                {group.items.map((item) => (\n                  <button\n                    key={item.id}\n                    type=\"button\"\n                    disabled={item.disabled}\n                    aria-label={item.label}\n                    className={cn(\n                      \"glass-relative glass-inline-flex glass-min-w-max glass-items-center glass-gap-1 glass-radius-full glass-px-2 glass-py-1 glass-text-sm glass-transition\",\n                      (item.primary || item.id === primaryActionId) &&\n                        \"glass-text-primary\"\n                    )}\n                    style={toolbarButtonStyle}\n                    onClick={item.onClick}\n                  >\n                    {item.icon}\n                    <span>{item.label}</span>\n                    {item.badge && (\n                      <span className=\"glass-text-xs\">{item.badge}</span>\n                    )}\n                  </button>\n                ))}\n              </LiquidGlassEffectGroup>\n            ))}\n            {children}\n          </div>\n          <div className=\"glass-flex glass-min-w-0 glass-flex-wrap glass-items-center glass-justify-end glass-gap-2\">\n            {right}\n          </div>\n        </div>\n      </LiquidGlassMaterial>\n    </div>\n  )\n);\n\nLiquidGlassToolbar.displayName = \"LiquidGlassToolbar\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassBottomAccessoryProps extends React.HTMLAttributes<HTMLDivElement> {\n  collapsed?: boolean;\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nexport const LiquidGlassBottomAccessory = forwardRef<HTMLDivElement, LiquidGlassBottomAccessoryProps>(\n  ({ collapsed = false, materialVariant = \"regular\", className, children, ...props }, ref) => (\n    <LiquidGlassMaterial\n      ref={ref}\n      material=\"liquid\"\n      variant={materialVariant}\n      radius=\"full\"\n      className={cn(\"liquid-glass-bottom-accessory glass-w-full\", collapsed && \"glass-opacity-90\", className)}\n      data-liquid-glass-bottom-accessory=\"true\"\n      data-collapsed={collapsed ? \"true\" : \"false\"}\n      {...props}\n    >\n      <div className=\"glass-flex glass-items-center glass-gap-3 glass-px-3 glass-py-2\">{children}</div>\n    </LiquidGlassMaterial>\n  )\n);\n\nLiquidGlassBottomAccessory.displayName = \"LiquidGlassBottomAccessory\";\n", "\"use client\";\n\nimport React, { forwardRef, type CSSProperties } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassSidebarItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface LiquidGlassInsetSidebarProps\n  extends Omit<React.HTMLAttributes<HTMLElement>, \"onSelect\"> {\n  items: LiquidGlassSidebarItem[];\n  selectedId?: string;\n  onSelect?: (id: string) => void;\n  placement?: \"left\" | \"right\";\n  collapsible?: boolean;\n  collapsed?: boolean;\n  backgroundExtension?: boolean;\n  scrollEdge?: \"soft\" | \"hard\" | false;\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nconst sidebarButtonStyle = (selected: boolean): CSSProperties => ({\n  border: 0,\n  background: selected ? \"rgba(59, 130, 246, 0.14)\" : \"transparent\",\n  color: \"inherit\",\n  cursor: \"pointer\",\n  font: \"inherit\",\n  width: \"100%\",\n});\n\nexport const LiquidGlassInsetSidebar = forwardRef<\n  HTMLElement,\n  LiquidGlassInsetSidebarProps\n>(\n  (\n    {\n      items,\n      selectedId,\n      onSelect,\n      placement = \"left\",\n      collapsible = true,\n      collapsed = false,\n      backgroundExtension = true,\n      scrollEdge = \"soft\",\n      materialVariant = \"regular\",\n      className,\n      ...props\n    },\n    ref\n  ) => (\n    <aside\n      ref={ref}\n      className={cn(\n        \"liquid-glass-inset-sidebar glass-relative glass-z-30 glass-p-3\",\n        placement === \"right\" && \"glass-ml-auto\",\n        collapsed ? \"glass-w-20\" : \"glass-w-72\",\n        className\n      )}\n      data-liquid-glass-inset-sidebar=\"true\"\n      data-background-extension={backgroundExtension ? \"true\" : \"false\"}\n      {...props}\n    >\n      <LiquidGlassMaterial\n        material=\"liquid\"\n        variant={materialVariant}\n        radius=\"2xl\"\n        className=\"glass-h-full\"\n      >\n        {scrollEdge && (\n          <LiquidGlassScrollEdge edge=\"top\" styleMode={scrollEdge} active />\n        )}\n        <nav\n          aria-label={props[\"aria-label\"] || \"Sidebar\"}\n          className=\"glass-flex glass-flex-col glass-gap-1 glass-p-2\"\n        >\n          {items.map((item) => {\n            const selected = item.id === selectedId;\n            return (\n              <button\n                key={item.id}\n                type=\"button\"\n                disabled={item.disabled}\n                aria-current={selected ? \"page\" : undefined}\n                aria-label={collapsed ? item.label : undefined}\n                className={cn(\n                  \"glass-flex glass-items-center glass-gap-2 glass-radius-lg glass-px-3 glass-py-2 glass-text-left\",\n                  selected && \"glass-surface-primary glass-text-primary\"\n                )}\n                style={sidebarButtonStyle(selected)}\n                onClick={() => onSelect?.(item.id)}\n              >\n                {item.icon}\n                {!collapsed && (\n                  <span className=\"glass-min-w-0 glass-flex-1 glass-truncate\">\n                    {item.label}\n                  </span>\n                )}\n                {!collapsed && item.badge && (\n                  <span className=\"glass-text-xs\">{item.badge}</span>\n                )}\n              </button>\n            );\n          })}\n        </nav>\n        {!collapsible && (\n          <span className=\"glass-sr-only\">Sidebar is fixed</span>\n        )}\n      </LiquidGlassMaterial>\n    </aside>\n  )\n);\n\nLiquidGlassInsetSidebar.displayName = \"LiquidGlassInsetSidebar\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassInspectorSection {\n  id: string;\n  title: string;\n  content: React.ReactNode;\n}\n\nexport interface LiquidGlassInspectorPanelProps extends React.HTMLAttributes<HTMLElement> {\n  open: boolean;\n  onOpenChange?: (open: boolean) => void;\n  title?: string;\n  selectionLabel?: string;\n  placement?: \"right\" | \"left\" | \"bottom\";\n  resizable?: boolean;\n  sections?: LiquidGlassInspectorSection[];\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nexport const LiquidGlassInspectorPanel = forwardRef<HTMLElement, LiquidGlassInspectorPanelProps>(\n  (\n    {\n      open,\n      onOpenChange,\n      title = \"Inspector\",\n      selectionLabel,\n      placement = \"right\",\n      resizable = true,\n      sections = [],\n      materialVariant = \"regular\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    if (!open) return null;\n    return (\n      <aside\n        ref={ref}\n        className={cn(\n          \"liquid-glass-inspector-panel glass-relative glass-z-50 glass-p-3\",\n          placement === \"bottom\" ? \"glass-w-full\" : \"glass-w-80\",\n          resizable && placement !== \"bottom\" && \"glass-resize-x glass-overflow-auto\",\n          className\n        )}\n        aria-label={title}\n        data-liquid-glass-inspector-panel=\"true\"\n        {...props}\n      >\n        <LiquidGlassMaterial material=\"liquid\" variant={materialVariant} radius=\"2xl\" className=\"glass-h-full\">\n          <LiquidGlassScrollEdge edge=\"top\" styleMode=\"hard\" active />\n          <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-3 glass-p-4\">\n            <div>\n              <h2 className=\"glass-text-lg glass-font-semibold\">{title}</h2>\n              {selectionLabel && <p className=\"glass-text-sm glass-text-secondary\">{selectionLabel}</p>}\n            </div>\n            <button type=\"button\" aria-label=\"Close inspector\" onClick={() => onOpenChange?.(false)}>\n              x\n            </button>\n          </div>\n          <div className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\">\n            {sections.map((section) => (\n              <section key={section.id} aria-labelledby={`${section.id}-title`}>\n                <h3 id={`${section.id}-title`} className=\"glass-text-sm glass-font-semibold\">\n                  {section.title}\n                </h3>\n                <div className=\"glass-mt-2\">{section.content}</div>\n              </section>\n            ))}\n            {children}\n          </div>\n        </LiquidGlassMaterial>\n      </aside>\n    );\n  }\n);\n\nLiquidGlassInspectorPanel.displayName = \"LiquidGlassInspectorPanel\";\n", "\"use client\";\n\nimport React, {\n  forwardRef,\n  useEffect,\n  useState,\n  type CSSProperties,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassEffectGroup } from \"../../primitives/LiquidGlassEffectGroup\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassTabItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface LiquidGlassTabBarProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  tabs: LiquidGlassTabItem[];\n  activeTab?: string;\n  onChange?: (id: string) => void;\n  minimizeBehavior?: \"never\" | \"on-scroll-down\" | \"on-scroll\" | \"auto\";\n  searchTabId?: string;\n  bottomAccessory?: React.ReactNode;\n  accessoryPlacement?: \"above\" | \"collapsed\" | \"auto\";\n  scrollTargetRef?: React.RefObject<HTMLElement>;\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nconst tabButtonStyle = (selected: boolean): CSSProperties => ({\n  border: 0,\n  background: selected ? \"rgba(59, 130, 246, 0.14)\" : \"transparent\",\n  color: \"inherit\",\n  cursor: \"pointer\",\n  font: \"inherit\",\n});\n\nexport const LiquidGlassTabBar = forwardRef<\n  HTMLDivElement,\n  LiquidGlassTabBarProps\n>(\n  (\n    {\n      tabs,\n      activeTab,\n      onChange,\n      minimizeBehavior = \"auto\",\n      searchTabId,\n      bottomAccessory,\n      accessoryPlacement = \"auto\",\n      scrollTargetRef,\n      materialVariant = \"regular\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [minimized, setMinimized] = useState(false);\n\n    useEffect(() => {\n      if (minimizeBehavior === \"never\" || typeof window === \"undefined\") return;\n      const target = scrollTargetRef?.current ?? window;\n      let lastY = 0;\n      const readY = () =>\n        target === window ? window.scrollY : (target as HTMLElement).scrollTop;\n      const onScroll = () => {\n        const y = readY();\n        setMinimized(\n          minimizeBehavior === \"on-scroll-down\" ? y > lastY && y > 16 : y > 16\n        );\n        lastY = y;\n      };\n      target.addEventListener(\"scroll\", onScroll as EventListener, {\n        passive: true,\n      });\n      return () =>\n        target.removeEventListener(\"scroll\", onScroll as EventListener);\n    }, [minimizeBehavior, scrollTargetRef]);\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"liquid-glass-tab-bar glass-relative glass-z-40\",\n          className\n        )}\n        data-liquid-glass-tab-bar=\"true\"\n        data-minimized={minimized ? \"true\" : \"false\"}\n        {...props}\n      >\n        {bottomAccessory && accessoryPlacement !== \"collapsed\" && (\n          <div className=\"glass-mb-2\">{bottomAccessory}</div>\n        )}\n        <LiquidGlassScrollEdge edge=\"bottom\" styleMode=\"soft\" active />\n        <LiquidGlassMaterial\n          material=\"liquid\"\n          variant={materialVariant}\n          radius=\"full\"\n        >\n          <LiquidGlassEffectGroup className=\"glass-flex glass-max-w-full glass-items-center glass-gap-1 glass-overflow-x-auto glass-p-1\">\n            {tabs.map((tab) => {\n              const selected = tab.id === activeTab;\n              const isSearch = tab.id === searchTabId;\n              return (\n                <button\n                  key={tab.id}\n                  type=\"button\"\n                  role=\"tab\"\n                  aria-selected={selected}\n                  disabled={tab.disabled}\n                  className={cn(\n                    \"glass-flex glass-min-w-max glass-flex-shrink-0 glass-items-center glass-gap-1 glass-radius-full glass-px-3 glass-py-2\",\n                    selected && \"glass-surface-primary glass-text-primary\",\n                    minimized && !selected && \"glass-px-2\"\n                  )}\n                  style={tabButtonStyle(selected)}\n                  onClick={() => onChange?.(tab.id)}\n                >\n                  {tab.icon}\n                  {!minimized && <span>{tab.label}</span>}\n                  {isSearch && (\n                    <span className=\"glass-sr-only\">Search tab</span>\n                  )}\n                  {tab.badge && (\n                    <span className=\"glass-text-xs\">{tab.badge}</span>\n                  )}\n                </button>\n              );\n            })}\n            {bottomAccessory && accessoryPlacement === \"collapsed\" && (\n              <div>{bottomAccessory}</div>\n            )}\n          </LiquidGlassEffectGroup>\n        </LiquidGlassMaterial>\n      </div>\n    );\n  }\n);\n\nLiquidGlassTabBar.displayName = \"LiquidGlassTabBar\";\n", "'use client';\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  useA11yId,\n  createModalA11y,\n  keyboardHandlers,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { LiquidGlassAdaptiveSheet } from \"./LiquidGlassAdaptiveSheet\";\n\nexport interface GlassBottomSheetProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  children: React.ReactNode;\n  height?: number | string; // e.g. 70% or 560\n  className?: string;\n  /**\n   * Accessible title for the bottom sheet\n   */\n  title?: string;\n  /**\n   * Accessible description for the bottom sheet\n   */\n  description?: string;\n  /**\n   * Whether to respect motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Custom aria-label\n   */\n  \"aria-label\"?: string;\n  /**\n   * Custom aria-labelledby\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * Custom aria-describedby\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Testing attribute\n   */\n  \"data-testid\"?: string;\n  /**\n   * Material system to use for the sheet surface.\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Liquid material variant.\n   */\n  materialVariant?: \"regular\" | \"clear\";\n  /**\n   * Presentation mode for liquid sheets.\n   */\n  presentationMode?: \"interruptive\" | \"parallel\";\n  /**\n   * Source id for Liquid Glass source transitions.\n   */\n  sourceId?: string;\n}\n\nexport const GlassBottomSheet = forwardRef<\n  HTMLDivElement,\n  GlassBottomSheetProps\n>(\n  (\n    {\n      open,\n      onOpenChange,\n      children,\n      height = \"70%\",\n      className,\n      title,\n      description,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      material = \"glass\",\n      materialVariant = \"regular\",\n      presentationMode = \"interruptive\",\n      sourceId,\n      ...props\n    },\n    ref\n  ) => {\n    // Generate unique IDs for accessibility\n    const bottomSheetId = useA11yId(\"glass-bottom-sheet\");\n    const titleId = title ? useA11yId(\"glass-bottom-sheet-title\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-bottom-sheet-desc\")\n      : undefined;\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n\n    // Create accessibility attributes\n    const a11yProps = createModalA11y({\n      id: bottomSheetId,\n      titleId: ariaLabelledBy || titleId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      modal: true,\n    });\n\n    // Add aria-label if provided (or use default if no title/label)\n    if (ariaLabel) {\n      a11yProps[\"aria-label\"] = ariaLabel;\n    } else if (!ariaLabelledBy && !titleId) {\n      // Default aria-label if none provided\n      a11yProps[\"aria-label\"] = title || \"Bottom sheet\";\n    }\n\n    // Handle escape key\n    const handleEscape = keyboardHandlers.onEscape(() => onOpenChange(false));\n\n    // Announce to screen readers when opened\n    React.useEffect(() => {\n      if (open) {\n        announceToScreenReader(\n          `Bottom sheet opened: ${title || ariaLabel || \"Bottom sheet\"}`,\n          \"polite\"\n        );\n      }\n    }, [open, title, ariaLabel]);\n\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n\n    if (material === \"liquid\") {\n      return (\n        <LiquidGlassAdaptiveSheet\n          ref={ref}\n          open={open}\n          onOpenChange={onOpenChange}\n          title={title || ariaLabel}\n          height={height}\n          side=\"bottom\"\n          sourceId={sourceId}\n          presentationMode={presentationMode}\n          materialVariant={materialVariant}\n          className={className}\n          aria-describedby={ariaDescribedBy || descriptionId}\n          data-testid={props[\"data-testid\"]}\n        >\n          {description && (\n            <p id={descriptionId} className=\"glass-text-sm glass-text-secondary glass-mb-4\">\n              {description}\n            </p>\n          )}\n          {children}\n        </LiquidGlassAdaptiveSheet>\n      );\n    }\n\n    return (\n      <>\n        {open && (\n          <Motion\n            preset=\"fadeIn\"\n            duration={shouldAnimate ? 200 : 0}\n            className='glass-fixed glass-inset-0 glass-z-1100'\n            onClick={(e) => onOpenChange(false)}\n          >\n            <div className='glass-absolute glass-inset-0 glass-surface-dark/50' />\n          </Motion>\n        )}\n        <Motion\n          preset=\"slideUp\"\n          duration={shouldAnimate ? 300 : 0}\n          className={cn(\n            \"fixed left-0 right-0 bottom-0 z-[1101]\",\n            open ? \"pointer-events-auto\" : \"pointer-events-none\",\n            className\n          )}\n          style={{\n            height: typeof height === \"number\" ? `${height}px` : height,\n            transform: !shouldAnimate && !open ? \"translateY(100%)\" : undefined,\n          }}\n          onKeyDown={handleEscape}\n          data-testid={props['data-testid']}\n          {...a11yProps}\n          {...props}\n        >\n          <OptimizedGlass\n            ref={ref}\n            elevation=\"level3\"\n            className={cn(\"h-full rounded-t-2xl glass-p-4\")}\n            tabIndex={-1}\n          >\n            {/* Handle indicator */}\n            <div\n              className='glass-mx-auto glass-w-10 glass-h-1.5 glass-radius-full glass-surface-subtle/30 glass-mb-3'\n              aria-hidden=\"true\"\n            />\n\n            {/* Header with title and description */}\n            {(title || description) && (\n              <div className='glass-mb-4'>\n                {title && (\n                  <h2\n                    id={titleId}\n                    className='glass-text-lg glass-font-semibold glass-text-primary'\n                  >\n                    {title}\n                  </h2>\n                )}\n                {description && (\n                  <p\n                    id={descriptionId}\n                    className=\"glass-text-sm glass-text-secondary glass-mt-1\"\n                  >\n                    {description}\n                  </p>\n                )}\n              </div>\n            )}\n\n            {children}\n          </OptimizedGlass>\n        </Motion>\n      </>\n    );\n  }\n);\n\nGlassBottomSheet.displayName = \"GlassBottomSheet\";\n\nexport default GlassBottomSheet;\n", "\"use client\";\n\nimport React, { forwardRef, useEffect } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassAdaptiveSheetProps extends React.HTMLAttributes<HTMLDivElement> {\n  open: boolean;\n  onOpenChange?: (open: boolean) => void;\n  title?: string;\n  side?: \"bottom\" | \"left\" | \"right\";\n  height?: number | string;\n  sourceId?: string;\n  presentationMode?: \"interruptive\" | \"parallel\";\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nexport const LiquidGlassAdaptiveSheet = forwardRef<HTMLDivElement, LiquidGlassAdaptiveSheetProps>(\n  (\n    {\n      open,\n      onOpenChange,\n      title,\n      side = \"bottom\",\n      height = \"70%\",\n      sourceId,\n      presentationMode = \"interruptive\",\n      materialVariant = \"regular\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    useEffect(() => {\n      if (!open || typeof document === \"undefined\") return;\n      const onKeyDown = (event: KeyboardEvent) => {\n        if (event.key === \"Escape\") onOpenChange?.(false);\n      };\n      document.addEventListener(\"keydown\", onKeyDown);\n      return () => document.removeEventListener(\"keydown\", onKeyDown);\n    }, [onOpenChange, open]);\n\n    if (!open) return null;\n\n    const isBottom = side === \"bottom\";\n    return (\n      <div\n        className=\"glass-fixed glass-inset-0 glass-z-1100\"\n        data-liquid-glass-adaptive-sheet-root=\"true\"\n        data-presentation-mode={presentationMode}\n      >\n        {presentationMode === \"interruptive\" && (\n          <button\n            type=\"button\"\n            aria-label=\"Close sheet\"\n            className=\"glass-absolute glass-inset-0 glass-bg-black/30\"\n            onClick={() => onOpenChange?.(false)}\n          />\n        )}\n        <div\n          ref={ref}\n          role=\"dialog\"\n          aria-modal={presentationMode === \"interruptive\"}\n          aria-label={title}\n          className={cn(\n            \"liquid-glass-adaptive-sheet glass-absolute glass-p-3\",\n            isBottom ? \"glass-left-0 glass-right-0 glass-bottom-0\" : side === \"left\" ? \"glass-left-0 glass-top-0 glass-bottom-0 glass-w-96\" : \"glass-right-0 glass-top-0 glass-bottom-0 glass-w-96\",\n            className\n          )}\n          style={isBottom ? { height: typeof height === \"number\" ? `${height}px` : height } : undefined}\n          data-source-id={sourceId}\n          {...props}\n        >\n          <LiquidGlassMaterial material=\"liquid\" variant={materialVariant} radius={isBottom ? \"2xl\" : \"xl\"} className=\"glass-h-full\">\n            <LiquidGlassScrollEdge edge=\"top\" styleMode=\"soft\" active />\n            {title && <h2 className=\"glass-p-4 glass-text-lg glass-font-semibold\">{title}</h2>}\n            <div className=\"glass-p-4\">{children}</div>\n          </LiquidGlassMaterial>\n        </div>\n      </div>\n    );\n  }\n);\n\nLiquidGlassAdaptiveSheet.displayName = \"LiquidGlassAdaptiveSheet\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { X } from \"@/icons\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useId,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { trapFocus } from \"../../utils/focus\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n// import { usePredictiveEngine, useInteractionRecorder } from '../advanced/GlassPredictiveEngine';\n// import { useAchievements } from '../advanced/GlassAchievementSystem';\n// import { useBiometricAdaptation } from '../advanced/GlassBiometricAdaptation';\n// import { useEyeTracking } from '../advanced/GlassEyeTracking';\n// import { useSpatialAudio } from '../advanced/GlassSpatialAudio';\n\nexport interface GlassDialogProps extends ConsciousnessFeatures {\n  /**\n   * Whether the dialog is open\n   */\n  open?: boolean;\n  /**\n   * Callback when dialog open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /** Optional close callback for compatibility */\n  onClose?: () => void;\n  /**\n   * Dialog title\n   */\n  title?: React.ReactNode;\n  /**\n   * Dialog description\n   */\n  description?: React.ReactNode;\n  /**\n   * Dialog content\n   */\n  children?: React.ReactNode;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n  /**\n   * Dialog size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n  /**\n   * Dialog variant\n   */\n  variant?: \"default\" | \"centered\" | \"fullscreen\";\n  /**\n   * Whether to close on backdrop click\n   */\n  closeOnBackdropClick?: boolean;\n  /**\n   * Whether to close on escape key\n   */\n  closeOnEscape?: boolean;\n  /**\n   * Whether to show close button\n   */\n  showCloseButton?: boolean;\n  /**\n   * Animation preset\n   */\n  animation?: \"fade\" | \"scale\" | \"slide\" | \"flip\";\n  /**\n   * Dialog footer content\n   */\n  footer?: React.ReactNode;\n  /**\n   * Custom header content\n   */\n  header?: React.ReactNode;\n  /**\n   * Whether dialog is modal (blocks interaction with background)\n   */\n  modal?: boolean;\n  /**\n   * Custom backdrop blur\n   */\n  backdropBlur?: boolean;\n  /**\n   * Dialog elevation\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Custom z-index\n   */\n  zIndex?: number;\n  style?: React.CSSProperties;\n  className?: string;\n  /**\n   * Custom className for dialog content\n   */\n  contentClassName?: string;\n  /**\n   * Accessible label for the dialog when no title is rendered\n   */\n  \"aria-label\"?: string;\n  /**\n   * Custom data-testid attribute\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassDialog component\n * Modal dialog with glassmorphism styling and comprehensive functionality\n */\nexport const GlassDialog = forwardRef<HTMLDivElement, GlassDialogProps>(\n  (\n    {\n      open = false,\n      onOpenChange,\n      title,\n      description,\n      children,\n      size = \"md\",\n      variant = \"default\",\n      material = \"glass\",\n      materialProps,\n      closeOnBackdropClick = true,\n      closeOnEscape = true,\n      showCloseButton = true,\n      animation = \"scale\",\n      footer,\n      header,\n      modal = true,\n      backdropBlur = true,\n      elevation = \"modal\",\n      zIndex = 50,\n      style,\n      className,\n      contentClassName,\n      onClose,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      // Consciousness features\n      consciousness,\n      predictive,\n      adaptive,\n      eyeTracking,\n      spatialAudio,\n      trackAchievements,\n      ...props\n    },\n    ref\n  ) => {\n    const [isVisible, setIsVisible] = useState(open);\n    const dialogRef = useRef<HTMLDivElement>(null);\n    const previouslyFocusedRef = useRef<HTMLElement | null>(null);\n    const previousBodyOverflowRef = useRef<string | null>(null);\n    const generatedId = useId();\n    const prefersReducedMotion = useReducedMotion();\n    const titleId = title ? `${generatedId}-title` : undefined;\n    const descriptionId = description\n      ? `${generatedId}-description`\n      : undefined;\n\n    // Consciousness state\n    const [interactionCount, setInteractionCount] = useState(0);\n    const [dialogEngagement, setDialogEngagement] = useState<{\n      timeSpent: number;\n      contentScrolled: boolean;\n      interactionCount: number;\n    }>({ timeSpent: 0, contentScrolled: false, interactionCount: 0 });\n    const [dialogInsights, setDialogInsights] = useState<{\n      urgency: \"low\" | \"medium\" | \"high\";\n      complexity: number;\n      userStress: number;\n    } | null>(null);\n    const wasOpenRef = useRef(false);\n    const dialogEngagementRef = useRef(dialogEngagement);\n\n    useEffect(() => {\n      dialogEngagementRef.current = dialogEngagement;\n    }, [dialogEngagement]);\n\n    // Consciousness hooks (mock implementations)\n    const predictiveEngine = predictive\n      ? {\n          analyzeModalEngagement: async () => ({\n            urgency: \"low\" as const,\n            complexity: 0.5,\n            userStress: 0.3,\n          }),\n        }\n      : null;\n    const eyeTracker = eyeTracking\n      ? {\n          startTracking: (handler: any) => {},\n          stopTracking: () => {},\n        }\n      : null;\n    const biometricAdapter = adaptive\n      ? {\n          getCurrentBiometrics: () => ({ stressLevel: 0.3 }),\n        }\n      : null;\n    const spatialAudioEngine = spatialAudio\n      ? {\n          playSound: (sound: string, config?: any) => {},\n        }\n      : null;\n    const interactionRecorder = consciousness\n      ? {\n          recordInteraction: (type: string, data?: any) => {},\n        }\n      : null;\n    const achievementTracker = trackAchievements\n      ? {\n          recordInteraction: (type: string, data?: any) => {},\n        }\n      : null;\n\n    // Handle escape key\n    useEffect(() => {\n      if (!closeOnEscape || !open) return;\n\n      const handleEscape = (event: KeyboardEvent) => {\n        if (event.key === \"Escape\") {\n          onOpenChange?.(false);\n          onClose?.();\n        }\n      };\n\n      document.addEventListener(\"keydown\", handleEscape);\n      return () => document.removeEventListener(\"keydown\", handleEscape);\n    }, [closeOnEscape, open, onOpenChange, onClose]);\n\n    // Handle body scroll lock\n    useEffect(() => {\n      if (modal && open) {\n        previousBodyOverflowRef.current = document.body.style.overflow;\n        document.body.style.overflow = \"hidden\";\n        return () => {\n          document.body.style.overflow = previousBodyOverflowRef.current || \"\";\n          previousBodyOverflowRef.current = null;\n        };\n      }\n    }, [modal, open]);\n\n    // Focus management: trap focus and restore on close\n    useEffect(() => {\n      if (!open || !dialogRef.current) return;\n\n      // Store previously focused element\n      previouslyFocusedRef.current = document.activeElement as HTMLElement;\n\n      // Set up focus trap\n      const releaseFocus = trapFocus(dialogRef.current, {\n        returnFocus: false, // We'll handle this manually for better control\n        escapeDeactivates: false, // We handle escape separately\n        allowOutsideClick: true, // We handle backdrop clicks separately\n      });\n\n      return () => {\n        releaseFocus();\n        // Restore focus to previously focused element\n        if (previouslyFocusedRef.current) {\n          setTimeout(() => {\n            previouslyFocusedRef.current?.focus();\n          }, ANIMATION.DURATION.instant);\n        }\n      };\n    }, [open]);\n\n    // Handle visibility state\n    useEffect(() => {\n      if (open) {\n        setIsVisible(true);\n      } else {\n        // Delay hiding to allow exit animation\n        const timer = setTimeout(\n          () => setIsVisible(false),\n          prefersReducedMotion ? 0 : ANIMATION.DURATION.fast * 1.3\n        );\n        return () => clearTimeout(timer);\n      }\n    }, [open, prefersReducedMotion]);\n\n    // Consciousness effects\n    // Dialog lifecycle tracking with spatial audio\n    useEffect(() => {\n      if (open && !wasOpenRef.current) {\n        const openTime = Date.now();\n        wasOpenRef.current = true;\n        setInteractionCount((prev: any) => prev + 1);\n\n        // Record dialog opening\n        if (consciousness && interactionRecorder) {\n          interactionRecorder.recordInteraction(\"dialog_open\", {\n            title: title?.toString() || \"Dialog\",\n            size,\n            variant,\n            timestamp: openTime,\n          });\n        }\n\n        // Track achievement for dialog interaction\n        if (trackAchievements && achievementTracker) {\n          achievementTracker.recordInteraction(\"dialog_opened\", {\n            dialogTitle: title?.toString() || \"Dialog\",\n            timestamp: openTime,\n          });\n        }\n\n        // Play spatial audio for dialog opening\n        if (spatialAudio && spatialAudioEngine) {\n          spatialAudioEngine.playSound(\"dialog-open\", {\n            volume: 0.5,\n            position: \"center\",\n            reverb: 0.3,\n          });\n        }\n\n        // Start tracking time\n        const timeTracker = setInterval(() => {\n          setDialogEngagement((prev: any) => ({\n            ...prev,\n            timeSpent: Date.now() - openTime,\n          }));\n        }, 1000);\n\n        return () => clearInterval(timeTracker);\n      } else if (!open && wasOpenRef.current) {\n        const latestEngagement = dialogEngagementRef.current;\n        wasOpenRef.current = false;\n        // Record dialog closing\n        if (\n          consciousness &&\n          interactionRecorder &&\n          latestEngagement.timeSpent > 0\n        ) {\n          interactionRecorder.recordInteraction(\"dialog_close\", {\n            title: title?.toString() || \"Dialog\",\n            timeSpent: latestEngagement.timeSpent,\n            interactions: latestEngagement.interactionCount,\n            contentScrolled: latestEngagement.contentScrolled,\n            timestamp: Date.now(),\n          });\n        }\n\n        // Play spatial audio for dialog closing\n        if (spatialAudio && spatialAudioEngine) {\n          spatialAudioEngine.playSound(\"dialog-close\", {\n            volume: 0.4,\n            position: \"center\",\n            reverb: 0.2,\n          });\n        }\n      }\n    }, [\n      open,\n      consciousness,\n      interactionRecorder,\n      trackAchievements,\n      achievementTracker,\n      spatialAudio,\n      spatialAudioEngine,\n      title,\n      size,\n      variant,\n    ]);\n\n    // Eye tracking for dialog engagement\n    useEffect(() => {\n      if (!eyeTracking || !eyeTracker || !open) return;\n\n      const handleGazeData = (gazeData: any) => {\n        // Track if user is looking at dialog content\n        const dialogElement = document.querySelector(\n          '[data-consciousness-dialog=\"true\"]'\n        );\n        if (dialogElement) {\n          const rect = dialogElement.getBoundingClientRect();\n          const isLookingAtDialog =\n            gazeData.x >= rect.left &&\n            gazeData.x <= rect.right &&\n            gazeData.y >= rect.top &&\n            gazeData.y <= rect.bottom;\n\n          if (isLookingAtDialog && trackAchievements && achievementTracker) {\n            achievementTracker.recordInteraction(\"dialog_gaze_engagement\", {\n              dialogTitle: title?.toString(),\n              gazeTime: Date.now(),\n            });\n          }\n        }\n      };\n\n      eyeTracker.startTracking(handleGazeData);\n      return () => eyeTracker.stopTracking();\n    }, [\n      eyeTracking,\n      eyeTracker,\n      open,\n      trackAchievements,\n      achievementTracker,\n      title,\n    ]);\n\n    // Biometric adaptation for dialog behavior\n    useEffect(() => {\n      if (!adaptive || !biometricAdapter || !open) return;\n\n      const updateAdaptiveFeatures = () => {\n        const biometrics = biometricAdapter.getCurrentBiometrics();\n\n        setDialogInsights({\n          urgency:\n            biometrics.stressLevel > 0.7\n              ? \"high\"\n              : biometrics.stressLevel > 0.4\n                ? \"medium\"\n                : \"low\",\n          complexity: (children?.toString().length || 0) > 300 ? 0.8 : 0.4,\n          userStress: biometrics.stressLevel,\n        });\n\n        if (trackAchievements && achievementTracker) {\n          achievementTracker.recordInteraction(\"dialog_biometric_adaptation\", {\n            stressLevel: biometrics.stressLevel,\n            dialogComplexity:\n              (children?.toString().length || 0) > 300 ? \"high\" : \"low\",\n          });\n        }\n      };\n\n      const interval = setInterval(updateAdaptiveFeatures, 3000);\n      updateAdaptiveFeatures();\n\n      return () => clearInterval(interval);\n    }, [\n      adaptive,\n      biometricAdapter,\n      open,\n      children,\n      trackAchievements,\n      achievementTracker,\n    ]);\n\n    // Enhanced handlers with consciousness tracking\n    const handleBackdropClick = useCallback(\n      (event: React.MouseEvent) => {\n        if (closeOnBackdropClick && event.target === event.currentTarget) {\n          // Record backdrop click interaction\n          if (consciousness && interactionRecorder) {\n            interactionRecorder.recordInteraction(\"dialog_backdrop_click\", {\n              dialogTitle: title?.toString(),\n              timestamp: Date.now(),\n            });\n          }\n\n          // Play spatial audio for backdrop close\n          if (spatialAudio && spatialAudioEngine) {\n            spatialAudioEngine.playSound(\"dialog-backdrop-close\", {\n              volume: 0.3,\n              position: \"left\",\n              reverb: 0.1,\n            });\n          }\n\n          onOpenChange?.(false);\n          onClose?.();\n        }\n      },\n      [\n        closeOnBackdropClick,\n        onOpenChange,\n        onClose,\n        consciousness,\n        interactionRecorder,\n        title,\n        spatialAudio,\n        spatialAudioEngine,\n      ]\n    );\n\n    const handleClose = useCallback(() => {\n      // Record close button interaction\n      if (consciousness && interactionRecorder) {\n        interactionRecorder.recordInteraction(\"dialog_close_button\", {\n          dialogTitle: title?.toString(),\n          timestamp: Date.now(),\n        });\n      }\n\n      // Play spatial audio for button close\n      if (spatialAudio && spatialAudioEngine) {\n        spatialAudioEngine.playSound(\"dialog-button-close\", {\n          volume: 0.3,\n          position: \"right\",\n          reverb: 0.1,\n        });\n      }\n\n      onOpenChange?.(false);\n      onClose?.();\n    }, [\n      onOpenChange,\n      onClose,\n      consciousness,\n      interactionRecorder,\n      title,\n      spatialAudio,\n      spatialAudioEngine,\n    ]);\n\n    // Size classes\n    const sizeClasses = {\n      xs: \"max-w-xs\",\n      sm: \"max-w-sm\",\n      md: \"max-w-md\",\n      lg: \"max-w-lg\",\n      xl: \"max-w-xl\",\n      \"2xl\": \"max-w-2xl\",\n      full: \"max-w-full glass-mx-4\",\n    };\n\n    // Animation presets\n    const getAnimationPreset = () => {\n      if (prefersReducedMotion) return \"none\";\n\n      switch (animation) {\n        case \"fade\":\n          return \"fadeIn\";\n        case \"scale\":\n          return \"scaleIn\";\n        case \"slide\":\n          return \"slideUp\";\n        case \"flip\":\n          return \"rotateIn\";\n        default:\n          return \"scaleIn\";\n      }\n    };\n\n    if (!isVisible) return null;\n\n    return (\n      <div\n        data-glass-component\n        className={cn(\n          \"fixed inset-0 flex items-center justify-center\",\n          variant === \"fullscreen\" ? \"glass-p-0\" : \"glass-p-4\",\n          consciousness && \"consciousness-dialog-container\",\n          adaptive &&\n            dialogInsights?.urgency === \"high\" &&\n            \"consciousness-urgent-dialog\",\n          eyeTracking && \"consciousness-eye-trackable\",\n          className\n        )}\n        style={{ ...style, zIndex }}\n        data-testid={dataTestId}\n        onClick={handleBackdropClick}\n        role=\"dialog\"\n        aria-modal={modal}\n        aria-label={ariaLabel || (title ? undefined : \"Dialog\")}\n        aria-labelledby={titleId}\n        aria-describedby={descriptionId}\n        data-consciousness-dialog=\"true\"\n        data-consciousness-active={String(!!consciousness)}\n        data-dialog-title={title?.toString()}\n        data-dialog-urgency={dialogInsights?.urgency}\n        data-user-stress={dialogInsights?.userStress}\n        data-interaction-count={interactionCount}\n        {...props}\n      >\n        {/* Backdrop */}\n        <Motion\n          preset=\"fadeIn\"\n          duration={prefersReducedMotion ? 0 : 200}\n          className={cn(\n            \"absolute inset-0 glass-surface-dark/50\",\n            backdropBlur && \"glass-backdrop-blur-md\"\n          )}\n          style={{\n            backgroundColor:\n              \"color-mix(in srgb, var(--glass-black) 40%, transparent)\",\n          }}\n          aria-hidden=\"true\"\n        />\n\n        {/* Dialog Content */}\n        <Motion\n          ref={dialogRef}\n          preset={getAnimationPreset()}\n          duration={prefersReducedMotion ? 0 : 200}\n          className={cn(\n            \"relative w-full\",\n            variant === \"fullscreen\" ? \"h-full\" : \"glass-max-h-90vh\",\n            sizeClasses[size]\n          )}\n        >\n          {material === \"liquid\" ? (\n            <LiquidGlassMaterial\n              ior={materialProps?.ior || 1.48}\n              thickness={materialProps?.thickness || 10}\n              tint={materialProps?.tint || { r: 0, g: 0, b: 0, a: 0.08 }}\n              variant={materialProps?.variant || \"regular\"}\n              quality={materialProps?.quality || \"high\"}\n              environmentAdaptation\n              motionResponsive\n              ref={ref}\n              className={cn(\n                \"w-full overflow-hidden liquid-glass-dialog-surface\",\n                variant === \"fullscreen\" && \"h-full rounded-none\",\n                consciousness && \"consciousness-dialog-glass\",\n                eyeTracking && \"consciousness-eye-trackable-content\",\n                adaptive &&\n                  dialogInsights?.urgency === \"high\" &&\n                  \"consciousness-urgent-glass\",\n                predictive &&\n                  dialogInsights &&\n                  \"consciousness-predictive-glass\",\n                className\n              )}\n              style={{\n                ...({\n                  \"--liquid-glass-dialog-density\": \"0.9\",\n                  \"--liquid-glass-adaptive-tint\":\n                    dialogInsights?.urgency === \"high\"\n                      ? \"rgba(220, 38, 38, 0.12)\"\n                      : \"rgba(0, 0, 0, 0.08)\",\n                } as React.CSSProperties),\n              }}\n              data-liquid-glass-dialog=\"true\"\n              data-dialog-urgency={dialogInsights?.urgency}\n              {...props}\n            >\n              {/* Header */}\n              {(header || title || description || showCloseButton) && (\n                <div className=\"glass-flex glass-items-start glass-justify-between glass-p-6 glass-border-b glass-border-glass-border/10\">\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    {header || (\n                      <>\n                        {title && (\n                          <h2\n                            id={titleId}\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id={descriptionId}\n                            className=\"glass-text-sm glass-text-secondary-foreground\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </>\n                    )}\n                  </div>\n                  {showCloseButton && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      iconOnly\n                      onClick={handleClose}\n                      aria-label=\"Close dialog\"\n                      className=\"glass-flex-shrink-0 glass-ml-4\"\n                    >\n                      \u00D7\n                    </GlassButton>\n                  )}\n                </div>\n              )}\n\n              {/* Content */}\n              <div\n                className={cn(\n                  \"flex-1 overflow-y-auto glass-p-6\",\n                  contentClassName\n                )}\n              >\n                {children}\n              </div>\n\n              {/* Footer */}\n              {footer && (\n                <div className=\"glass-p-6 glass-border-t glass-border-glass-border/10\">\n                  {footer}\n                </div>\n              )}\n            </LiquidGlassMaterial>\n          ) : (\n            <OptimizedGlass\n              intent=\"neutral\"\n              elevation=\"level2\"\n              intensity=\"medium\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              animation=\"none\"\n              performanceMode=\"medium\"\n              ref={ref}\n              liftOnHover\n              hoverSheen\n              className={cn(\n                \"w-full overflow-hidden border border-border/20 glass-radial-reveal\",\n                variant === \"fullscreen\" && \"h-full rounded-none\",\n                consciousness && \"consciousness-dialog-glass\",\n                eyeTracking && \"consciousness-eye-trackable-content\",\n                adaptive &&\n                  dialogInsights?.urgency === \"high\" &&\n                  \"consciousness-urgent-glass\",\n                predictive &&\n                  dialogInsights &&\n                  \"consciousness-predictive-glass\",\n                className\n              )}\n              {...props}\n            >\n              {/* Header */}\n              {(header || title || description || showCloseButton) && (\n                <div className=\"glass-flex glass-items-start glass-justify-between glass-p-6 glass-border-b glass-border-glass-border/10\">\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    {header || (\n                      <>\n                        {title && (\n                          <h2\n                            id={titleId}\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id={descriptionId}\n                            className=\"glass-text-sm glass-text-secondary\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </>\n                    )}\n                  </div>\n\n                  {showCloseButton && (\n                    <GlassButton\n                      type=\"button\"\n                      className={cn(\n                        \"glass-ml-4 glass-p-2 glass-radius-lg glass-text-secondary hover:text-foreground hover:bg-muted/20 transition-colors\",\n                        consciousness && \"consciousness-close-button\",\n                        adaptive &&\n                          dialogInsights?.urgency === \"high\" &&\n                          \"consciousness-urgent-close\"\n                      )}\n                      onClick={handleClose}\n                      aria-label=\"Close dialog\"\n                      consciousness={consciousness}\n                      adaptive={adaptive}\n                      spatialAudio={spatialAudio}\n                      trackAchievements={trackAchievements}\n                      data-consciousness-close=\"true\"\n                    >\n                      <X className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n                  )}\n                </div>\n              )}\n\n              {/* Content */}\n              {children && (\n                <div\n                  className={cn(\n                    \"flex-1 overflow-y-auto glass-p-6\",\n                    consciousness && \"consciousness-dialog-body\",\n                    eyeTracking && \"consciousness-eye-trackable-body\",\n                    adaptive &&\n                      dialogInsights?.urgency === \"high\" &&\n                      \"consciousness-urgent-body\"\n                  )}\n                  data-consciousness-body=\"true\"\n                  data-content-complexity={dialogInsights?.complexity}\n                  onScroll={(e) => {\n                    setDialogEngagement((prev: any) => ({\n                      ...prev,\n                      contentScrolled: true,\n                      interactionCount: prev.interactionCount + 1,\n                    }));\n\n                    if (consciousness && interactionRecorder) {\n                      interactionRecorder.recordInteraction(\"dialog_scroll\", {\n                        dialogTitle: title?.toString(),\n                        timestamp: Date.now(),\n                      });\n                    }\n                  }}\n                  onClick={(e) => {\n                    setDialogEngagement((prev: any) => ({\n                      ...prev,\n                      interactionCount: prev.interactionCount + 1,\n                    }));\n\n                    if (consciousness && interactionRecorder) {\n                      interactionRecorder.recordInteraction(\n                        \"dialog_content_click\",\n                        {\n                          dialogTitle: title?.toString(),\n                          timestamp: Date.now(),\n                        }\n                      );\n                    }\n                  }}\n                >\n                  {children}\n\n                  {/* Dialog Insights Display */}\n                  {predictive && dialogInsights && (\n                    <div className=\"glass-mt-4 glass-p-3 glass-surface-primary/10 glass-radius-lg glass-border glass-border-primary/20 glass-text-xs\">\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-primary\">\n                          Dialog Insights\n                        </span>\n                        <div className=\"glass-flex glass-gap-2\">\n                          <span\n                            className={cn(\n                              \"glass-px-2 glass-py-1 glass-radius-md\",\n                              dialogInsights.urgency === \"high\"\n                                ? \"bg-red-500/20 text-red-300\"\n                                : dialogInsights.urgency === \"medium\"\n                                  ? \"bg-yellow-500/20 text-yellow-300\"\n                                  : \"bg-green-500/20 text-green-300\"\n                            )}\n                          >\n                            {dialogInsights.urgency} urgency\n                          </span>\n                          {dialogInsights.userStress > 0.7 && (\n                            <span className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-primary/20 glass-text-secondary\">\n                              high stress\n                            </span>\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                  )}\n                </div>\n              )}\n\n              {/* Footer */}\n              {footer && (\n                <div className=\"glass-p-6 glass-border-t glass-border-glass-border/10\">\n                  {footer}\n                </div>\n              )}\n            </OptimizedGlass>\n          )}\n        </Motion>\n      </div>\n    );\n  }\n);\n\nGlassDialog.displayName = \"GlassDialog\";\n\n// Compound components for easier usage\nexport interface DialogTriggerProps {\n  children: React.ReactNode;\n  asChild?: boolean;\n}\n\nexport const DialogTrigger = forwardRef<HTMLButtonElement, DialogTriggerProps>(\n  ({ children, asChild = false, ...props }, ref) => {\n    if (asChild) {\n      return React.cloneElement(children as any, {\n        ref,\n        ...props,\n      });\n    }\n\n    return (\n      <GlassButton ref={ref} {...props}>\n        {children}\n      </GlassButton>\n    );\n  }\n);\n\nDialogTrigger.displayName = \"DialogTrigger\";\n\nexport interface DialogContentProps extends GlassDialogProps {}\n\nexport const DialogContent = GlassDialog;\n\nexport interface DialogHeaderProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DialogHeader = forwardRef<HTMLDivElement, DialogHeaderProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex flex-col glass-gap-1.5 text-center sm:text-left\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nDialogHeader.displayName = \"DialogHeader\";\n\nexport interface DialogTitleProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <h2\n        ref={ref}\n        className={cn(\n          \"glass-text-lg font-semibold leading-none tracking-tight\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </h2>\n    );\n  }\n);\n\nDialogTitle.displayName = \"DialogTitle\";\n\nexport interface DialogDescriptionProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DialogDescription = forwardRef<\n  HTMLParagraphElement,\n  DialogDescriptionProps\n>(({ children, className, ...props }, ref) => {\n  return (\n    <p\n      ref={ref}\n      className={cn(\"glass-text-sm glass-text-secondary\", className)}\n      {...props}\n    >\n      {children}\n    </p>\n  );\n});\n\nDialogDescription.displayName = \"DialogDescription\";\n\nexport interface DialogFooterProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DialogFooter = forwardRef<HTMLDivElement, DialogFooterProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex flex-col-reverse sm:flex-row sm:justify-end sm:glass-gap-2\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nDialogFooter.displayName = \"DialogFooter\";\n\n// Hook for dialog state management\nexport const useDialog = (defaultOpen = false) => {\n  const [open, setOpen] = useState(defaultOpen);\n\n  const openDialog = () => setOpen(true);\n  const closeDialog = () => setOpen(false);\n  const toggleDialog = () => setOpen((prev: any) => !prev);\n\n  return {\n    open,\n    setOpen,\n    openDialog,\n    closeDialog,\n    toggleDialog,\n  };\n};\n\n// Consciousness-Enhanced Dialog Variants\nexport const GlassPredictiveDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog {...props} consciousness={true} predictive={true} />\n);\n\nexport const GlassAdaptiveDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog {...props} consciousness={true} adaptive={true} />\n);\n\nexport const GlassEyeTrackingDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog {...props} consciousness={true} eyeTracking={true} />\n);\n\nexport const GlassSpatialAudioDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog {...props} consciousness={true} spatialAudio={true} />\n);\n\nexport const GlassAchievementDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog {...props} consciousness={true} trackAchievements={true} />\n);\n\nexport const GlassConsciousnessDialog: React.FC<GlassDialogProps> = (props) => (\n  <GlassDialog\n    {...props}\n    consciousness={true}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\n// Types are already exported via interface declarations above\n", "/**\n * AuraGlass Focus Utilities\n * Keyboard navigation and focus management helpers\n */\n\nimport { RefObject, KeyboardEvent } from 'react';\n\n/**\n * Focus trap configuration\n */\nexport interface FocusTrapOptions {\n  initialFocus?: RefObject<HTMLElement>;\n  returnFocus?: boolean;\n  allowOutsideClick?: boolean;\n  escapeDeactivates?: boolean;\n}\n\n/**\n * Get all focusable elements within a container\n */\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\n  const focusableSelectors = [\n    'a[href]:not([disabled])',\n    'button:not([disabled])',\n    'input:not([disabled]):not([type=\"hidden\"])',\n    'select:not([disabled])',\n    'textarea:not([disabled])',\n    '[tabindex]:not([tabindex=\"-1\"])',\n    '[contenteditable=\"true\"]',\n    'audio[controls]',\n    'video[controls]',\n    'details > summary',\n  ].join(', ');\n  \n  return Array.from(container.querySelectorAll<HTMLElement>(focusableSelectors))\n    .filter((el: any) => {\n      // Check if element is visible\n      const styles = window.getComputedStyle(el);\n      return styles.display !== 'none' && \n             styles.visibility !== 'hidden' && \n             styles.opacity !== '0';\n    });\n}\n\n/**\n * Trap focus within a container\n */\nexport function trapFocus(container: HTMLElement, options: FocusTrapOptions = {}) {\n  const focusableElements = getFocusableElements(container);\n  const firstFocusable = focusableElements[0];\n  const lastFocusable = focusableElements[focusableElements.length - 1];\n  \n  // Store previously focused element\n  const previouslyFocused = document.activeElement as HTMLElement;\n  \n  // Set initial focus\n  if (options.initialFocus?.current) {\n    options.initialFocus.current.focus();\n  } else if (firstFocusable) {\n    firstFocusable.focus();\n  }\n  \n  // Handle tab navigation\n  const handleKeyDown = (e: globalThis.KeyboardEvent) => {\n    if (e.key === 'Tab') {\n      if (focusableElements.length === 0) {\n        e.preventDefault();\n        return;\n      }\n      \n      if (e.shiftKey) {\n        // Shift + Tab\n        if (document.activeElement === firstFocusable) {\n          e.preventDefault();\n          lastFocusable?.focus();\n        }\n      } else {\n        // Tab\n        if (document.activeElement === lastFocusable) {\n          e.preventDefault();\n          firstFocusable?.focus();\n        }\n      }\n    }\n    \n    // Handle escape\n    if (options.escapeDeactivates && e.key === 'Escape') {\n      releaseFocus();\n    }\n  };\n  \n  // Handle clicks outside\n  const handleClickOutside = (e: MouseEvent) => {\n    if (!options.allowOutsideClick && !container.contains(e.target as Node)) {\n      e.preventDefault();\n      e.stopPropagation();\n      firstFocusable?.focus();\n    }\n  };\n  \n  // Add event listeners\n  document.addEventListener('keydown', handleKeyDown);\n  document.addEventListener('mousedown', handleClickOutside);\n  \n  // Release function\n  const releaseFocus = () => {\n    document.removeEventListener('keydown', handleKeyDown);\n    document.removeEventListener('mousedown', handleClickOutside);\n    \n    if (options.returnFocus && previouslyFocused) {\n      previouslyFocused.focus();\n    }\n  };\n  \n  return releaseFocus;\n}\n\n/**\n * Roving tabindex for lists and menus\n */\nexport class RovingTabIndex {\n  private elements: HTMLElement[];\n  private currentIndex: number = 0;\n  \n  constructor(container: HTMLElement, selector = '[role=\"menuitem\"], [role=\"option\"]') {\n    this.elements = Array.from(container.querySelectorAll<HTMLElement>(selector));\n    this.init();\n  }\n  \n  private init() {\n    this.elements.forEach((el, index) => {\n      el.tabIndex = index === 0 ? 0 : -1;\n      el.addEventListener('keydown', this.handleKeyDown.bind(this));\n      el.addEventListener('click', () => this.setFocus(index));\n    });\n  }\n  \n  private handleKeyDown(e: globalThis.KeyboardEvent) {\n    const key = e.key;\n    let nextIndex = this.currentIndex;\n    \n    switch (key) {\n      case 'ArrowDown':\n      case 'ArrowRight':\n        e.preventDefault();\n        nextIndex = (this.currentIndex + 1) % this.elements.length;\n        break;\n      case 'ArrowUp':\n      case 'ArrowLeft':\n        e.preventDefault();\n        nextIndex = (this.currentIndex - 1 + this.elements.length) % this.elements.length;\n        break;\n      case 'Home':\n        e.preventDefault();\n        nextIndex = 0;\n        break;\n      case 'End':\n        e.preventDefault();\n        nextIndex = this.elements.length - 1;\n        break;\n      default:\n        return;\n    }\n    \n    this.setFocus(nextIndex);\n  }\n  \n  private setFocus(index: number) {\n    // Update tabindex\n    this.elements[this.currentIndex].tabIndex = -1;\n    this.elements[index].tabIndex = 0;\n    \n    // Set focus\n    this.elements[index].focus();\n    \n    // Update current index\n    this.currentIndex = index;\n  }\n  \n  public destroy() {\n    this.elements.forEach((el: any) => {\n      el.removeEventListener('keydown', this.handleKeyDown.bind(this));\n    });\n  }\n}\n\n/**\n * Focus ring styles for consistent appearance\n */\nexport function applyFocusRing(element: HTMLElement, color = 'var(--glass-focus-color)') {\n  element.style.outline = `2px solid ${color}`;\n  element.style.outlineOffset = '2px';\n}\n\n/**\n * Remove focus ring\n */\nexport function removeFocusRing(element: HTMLElement) {\n  element.style.outline = 'none';\n  element.style.outlineOffset = '';\n}\n\n/**\n * Check if element is focusable\n */\nexport function isFocusable(element: HTMLElement): boolean {\n  if (element.tabIndex >= 0) return true;\n  \n  const focusableTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'A'];\n  if (focusableTags.includes(element.tagName)) {\n    return !(element as any).disabled;\n  }\n  \n  return element.contentEditable === 'true';\n}\n\n/**\n * Focus the first focusable element in a container\n */\nexport function focusFirstElement(container: HTMLElement): boolean {\n  const elements = getFocusableElements(container);\n  if (elements.length > 0) {\n    elements[0].focus();\n    return true;\n  }\n  return false;\n}\n\n/**\n * Handle keyboard navigation for button-like elements\n */\nexport function handleButtonKeyDown(\n  e: KeyboardEvent<HTMLElement>,\n  onClick?: (e: any) => void\n) {\n  if (e.key === 'Enter' || e.key === ' ') {\n    e.preventDefault();\n    onClick?.(e);\n  }\n}\n\n/**\n * Create a focus scope that manages tab order\n */\nexport class FocusScope {\n  private container: HTMLElement;\n  private scopeId: string;\n  \n  constructor(container: HTMLElement) {\n    this.container = container;\n    this.scopeId = `focus-scope-${Date.now()}`;\n    this.init();\n  }\n  \n  private init() {\n    this.container.setAttribute('data-focus-scope', this.scopeId);\n    \n    // Mark elements outside scope as inert\n    const allFocusable = document.querySelectorAll<HTMLElement>(\n      'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n    );\n    \n    allFocusable.forEach((el: any) => {\n      if (!this.container.contains(el)) {\n        el.setAttribute('data-focus-disabled', 'true');\n        el.setAttribute('tabindex', '-1');\n      }\n    });\n  }\n  \n  public release() {\n    // Restore focusability\n    const disabled = document.querySelectorAll('[data-focus-disabled=\"true\"]');\n    disabled.forEach((el: any) => {\n      el.removeAttribute('data-focus-disabled');\n      el.removeAttribute('tabindex');\n    });\n    \n    this.container.removeAttribute('data-focus-scope');\n  }\n}\n\n/**\n * Announce content to screen readers\n */\nexport function announceToScreenReader(message: string, priority: 'polite' | 'assertive' = 'polite') {\n  const announcement = document.createElement('div');\n  announcement.setAttribute('role', 'status');\n  announcement.setAttribute('aria-live', priority);\n  announcement.style.position = 'absolute';\n  announcement.style.left = '-10000px';\n  announcement.style.width = '1px';\n  announcement.style.height = '1px';\n  announcement.style.overflow = 'hidden';\n  \n  announcement.textContent = message;\n  document.body.appendChild(announcement);\n  \n  // Remove after announcement\n  setTimeout(() => {\n    document.body.removeChild(announcement);\n  }, 1000);\n}", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { X } from \"@/icons\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport {\n  useInteractionRecorder,\n  usePredictiveEngine,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassDrawerProps extends ConsciousnessFeatures {\n  /**\n   * Whether the drawer is open\n   */\n  open?: boolean;\n  /**\n   * Callback when drawer open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Drawer position\n   */\n  position?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  /**\n   * Drawer size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n  /**\n   * Drawer title\n   */\n  title?: React.ReactNode;\n  /**\n   * Drawer description\n   */\n  description?: React.ReactNode;\n  /**\n   * Drawer content\n   */\n  children?: React.ReactNode;\n  /**\n   * Accessible label for the drawer\n   */\n  \"aria-label\"?: string;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n  /**\n   * Whether to close on backdrop click\n   */\n  closeOnBackdropClick?: boolean;\n  /**\n   * Whether to close on escape key\n   */\n  closeOnEscape?: boolean;\n  /**\n   * Whether to show close button\n   */\n  showCloseButton?: boolean;\n  /**\n   * Custom header content\n   */\n  header?: React.ReactNode;\n  /**\n   * Custom footer content\n   */\n  footer?: React.ReactNode;\n  /**\n   * Whether drawer is modal (blocks interaction with background)\n   */\n  modal?: boolean;\n  /**\n   * Render as a bounded inline drawer for embedded previews/cards instead of a\n   * fixed viewport drawer.\n   */\n  contained?: boolean;\n  /**\n   * Use denser drawer spacing for compact embedded surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Custom backdrop blur\n   */\n  backdropBlur?: boolean;\n  /**\n   * Drawer elevation\n   */\n  elevation?: 0 | 1 | 2 | 3 | 4 | \"float\" | \"modal\";\n  /**\n   * Custom z-index\n   */\n  zIndex?: number;\n  /**\n   * Whether to show overlay\n   */\n  showOverlay?: boolean;\n  /**\n   * Animation duration in milliseconds\n   */\n  animationDuration?: number;\n  /**\n   * Whether drawer can be resized\n   */\n  resizable?: boolean;\n  /**\n   * Inline style for the drawer content surface. In contained mode, width,\n   * height, and maxHeight constrain the embedded surface.\n   */\n  style?: React.CSSProperties;\n  className?: string;\n  /**\n   * Custom data-testid attribute\n   */\n  \"data-testid\"?: string;\n\n  // Consciousness features\n  /**\n   * Enable comprehensive consciousness tracking\n   */\n  consciousness?: boolean;\n  /**\n   * Custom className for drawer content\n   */\n  contentClassName?: string;\n}\n\n/**\n * GlassDrawer component\n * Slide-out panel with glassmorphism styling and comprehensive functionality\n */\nexport const GlassDrawer = forwardRef<HTMLDivElement, GlassDrawerProps>(\n  (\n    {\n      open = true,\n      onOpenChange,\n      position = \"right\",\n      size = \"md\",\n      material = \"glass\",\n      materialProps,\n      title,\n      description,\n      children = null,\n      closeOnBackdropClick = true,\n      closeOnEscape = true,\n      showCloseButton = true,\n      header,\n      footer,\n      modal = true,\n      contained = false,\n      compact = false,\n      backdropBlur = true,\n      elevation = \"modal\",\n      zIndex = 50,\n      showOverlay = true,\n      animationDuration = 300,\n      resizable = false,\n      style,\n      className,\n      contentClassName,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      // Consciousness features\n      consciousness = false,\n      predictive = false,\n      adaptive = false,\n      eyeTracking = false,\n      spatialAudio = false,\n      trackAchievements = false,\n      ...props\n    },\n    ref\n  ) => {\n    const [isVisible, setIsVisible] = useState(open);\n    const contentRef = useRef<HTMLDivElement>(null);\n    const previousBodyOverflowRef = useRef<string | null>(null);\n    const prefersReducedMotion = useReducedMotion();\n    const effectiveAnimationDuration = prefersReducedMotion\n      ? 0\n      : animationDuration;\n    const isContained = contained;\n    const isModal = modal && !isContained;\n\n    // Consciousness state\n    const [interactionCount, setInteractionCount] = useState(0);\n    const [drawerFocusTime, setDrawerFocusTime] = useState<number>(0);\n    const [contentEngagement, setContentEngagement] = useState<{\n      scrollDepth: number;\n      timeSpent: number;\n      interactions: number;\n    }>({ scrollDepth: 0, timeSpent: 0, interactions: 0 });\n    const [drawerInsights, setDrawerInsights] = useState<{\n      urgency: \"low\" | \"medium\" | \"high\";\n      complexity: number;\n      userStress: number;\n    } | null>(null);\n    const wasOpenRef = useRef(false);\n    const drawerFocusTimeRef = useRef(0);\n\n    // Consciousness hooks\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const interactionRecorder = consciousness ? useInteractionRecorder() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n\n    // Handle escape key with consciousness tracking\n    useEffect(() => {\n      if (!closeOnEscape || !open) return;\n\n      const handleEscape = (event: KeyboardEvent) => {\n        if (event.key === \"Escape\") {\n          // Record escape key close\n          if (consciousness && interactionRecorder) {\n            // Create synthetic event for escape interaction\n            const syntheticEvent = {\n              currentTarget: { id: \"drawer-escape\" },\n              type: \"keydown\",\n            } as any;\n            interactionRecorder.recordFocus(syntheticEvent);\n          }\n\n          // Play spatial audio for escape close\n          if (spatialAudio && spatialAudioEngine) {\n            const audioPosition =\n              position === \"left\"\n                ? { x: -1, y: 0, z: 0 }\n                : position === \"right\"\n                  ? { x: 1, y: 0, z: 0 }\n                  : { x: 0, y: 0, z: 0 };\n            spatialAudioEngine.playGlassSound(\n              \"drawer-escape-close\",\n              audioPosition,\n              {\n                volume: 0.4,\n              }\n            );\n          }\n\n          onOpenChange?.(false);\n        }\n      };\n\n      document.addEventListener(\"keydown\", handleEscape);\n      return () => document.removeEventListener(\"keydown\", handleEscape);\n    }, [\n      closeOnEscape,\n      open,\n      onOpenChange,\n      consciousness,\n      interactionRecorder,\n      title,\n      position,\n      spatialAudio,\n      spatialAudioEngine,\n    ]);\n\n    // Handle body scroll lock\n    useEffect(() => {\n      if (isModal && open) {\n        previousBodyOverflowRef.current = document.body.style.overflow;\n        document.body.style.overflow = \"hidden\";\n        return () => {\n          document.body.style.overflow = previousBodyOverflowRef.current || \"\";\n          previousBodyOverflowRef.current = null;\n        };\n      }\n    }, [isModal, open]);\n\n    // Handle visibility state\n    useEffect(() => {\n      if (open) {\n        setIsVisible(true);\n      } else {\n        // Delay hiding to allow exit animation\n        const timer = setTimeout(\n          () => setIsVisible(false),\n          effectiveAnimationDuration\n        );\n        return () => clearTimeout(timer);\n      }\n    }, [open, effectiveAnimationDuration]);\n\n    // Consciousness effects\n    // Drawer opening/closing tracking with spatial audio\n    useEffect(() => {\n      if (open && !wasOpenRef.current) {\n        const openTime = Date.now();\n        wasOpenRef.current = true;\n        drawerFocusTimeRef.current = openTime;\n        setDrawerFocusTime(openTime);\n        setInteractionCount((prev: any) => prev + 1);\n\n        // Record drawer opening interaction\n        if (consciousness && interactionRecorder) {\n          // Create synthetic event for drawer open\n          const syntheticEvent = {\n            currentTarget: { id: \"drawer-open\" },\n            type: \"click\",\n          } as any;\n          interactionRecorder.recordClick(syntheticEvent);\n        }\n\n        // Track achievement for drawer interaction\n        if (trackAchievements && achievementTracker) {\n          achievementTracker.recordAction(\"drawer_opened\", {\n            drawerPosition: position,\n            drawerSize: size,\n            title: title || \"Drawer\",\n            timestamp: openTime,\n          });\n        }\n\n        // Play spatial audio for drawer opening\n        if (spatialAudio && spatialAudioEngine) {\n          const audioConfig = {\n            sound: `drawer-${position}-open`,\n            volume: 0.6,\n            position:\n              position === \"left\"\n                ? { x: -1, y: 0, z: 0 }\n                : position === \"right\"\n                  ? { x: 1, y: 0, z: 0 }\n                  : { x: 0, y: 0, z: 0 },\n            reverb: 0.3,\n          };\n          spatialAudioEngine.playGlassSound(\n            audioConfig.sound,\n            audioConfig.position,\n            {\n              volume: audioConfig.volume,\n            }\n          );\n        }\n      } else if (!open && wasOpenRef.current) {\n        const closeTime = Date.now();\n        const timeSpent = closeTime - drawerFocusTimeRef.current;\n        wasOpenRef.current = false;\n        drawerFocusTimeRef.current = 0;\n\n        // Record drawer closing interaction\n        if (consciousness && interactionRecorder) {\n          // Create synthetic event for drawer close\n          const syntheticEvent = {\n            currentTarget: { id: \"drawer-close\" },\n            type: \"click\",\n          } as any;\n          interactionRecorder.recordClick(syntheticEvent);\n        }\n\n        // Update content engagement\n        setContentEngagement((prev: any) =>\n          prev.timeSpent === timeSpent ? prev : { ...prev, timeSpent }\n        );\n\n        // Play spatial audio for drawer closing\n        if (spatialAudio && spatialAudioEngine) {\n          const audioConfig = {\n            sound: `drawer-${position}-close`,\n            volume: 0.4,\n            position:\n              position === \"left\"\n                ? { x: -1, y: 0, z: 0 }\n                : position === \"right\"\n                  ? { x: 1, y: 0, z: 0 }\n                  : { x: 0, y: 0, z: 0 },\n            reverb: 0.2,\n          };\n          spatialAudioEngine.playGlassSound(\n            audioConfig.sound,\n            audioConfig.position,\n            {\n              volume: audioConfig.volume,\n            }\n          );\n        }\n      }\n    }, [\n      open,\n      consciousness,\n      interactionRecorder,\n      trackAchievements,\n      achievementTracker,\n      spatialAudio,\n      spatialAudioEngine,\n      title,\n      position,\n      size,\n      isModal,\n    ]);\n\n    // Eye tracking for drawer engagement\n    useEffect(() => {\n      if (!eyeTracking || !eyeTracker || !open) return;\n\n      const handleGazeData = (gazeData: any) => {\n        // Track if user is looking at drawer content\n        if (contentRef.current) {\n          const rect = contentRef.current.getBoundingClientRect();\n          const isLookingAtDrawer =\n            gazeData.x >= rect.left &&\n            gazeData.x <= rect.right &&\n            gazeData.y >= rect.top &&\n            gazeData.y <= rect.bottom;\n\n          if (isLookingAtDrawer && trackAchievements && achievementTracker) {\n            achievementTracker.recordAction(\"drawer_gaze_engagement\", {\n              drawerTitle: title,\n              gazeTime: Date.now(),\n              drawerArea: \"content\",\n              position,\n            });\n          }\n        }\n      };\n\n      // Eye tracking methods not available in current implementation\n      // eyeTracker.startTracking(handleGazeData);\n      // return () => eyeTracker.stopTracking();\n    }, [\n      eyeTracking,\n      eyeTracker,\n      open,\n      trackAchievements,\n      achievementTracker,\n      title,\n      position,\n    ]);\n\n    // Biometric adaptation for drawer behavior\n    useEffect(() => {\n      if (!adaptive || !biometricAdapter || !open) return;\n\n      const updateAdaptiveFeatures = () => {\n        const stressLevel = biometricAdapter.currentStressLevel;\n\n        // Analyze drawer content complexity and user stress\n        setDrawerInsights({\n          urgency:\n            stressLevel > 0.7 ? \"high\" : stressLevel > 0.4 ? \"medium\" : \"low\",\n          complexity: (children?.toString().length || 0) > 500 ? 0.8 : 0.4,\n          userStress: stressLevel,\n        });\n\n        // Record biometric adaptation for achievements\n        if (trackAchievements && achievementTracker) {\n          const stressLevel = biometricAdapter.currentStressLevel;\n          achievementTracker.recordAction(\"drawer_biometric_adaptation\", {\n            stressLevel: stressLevel,\n            drawerComplexity:\n              (children?.toString().length || 0) > 500 ? \"high\" : \"low\",\n            position,\n            adaptations: {\n              urgencyLevel: stressLevel > 0.7 ? \"high\" : \"normal\",\n            },\n          });\n        }\n      };\n\n      const interval = setInterval(\n        updateAdaptiveFeatures,\n        ANIMATION.DURATION.slower * 4\n      );\n      updateAdaptiveFeatures(); // Run immediately\n\n      return () => clearInterval(interval);\n    }, [\n      adaptive,\n      biometricAdapter,\n      open,\n      children,\n      trackAchievements,\n      achievementTracker,\n      position,\n    ]);\n\n    // Predictive drawer insights\n    useEffect(() => {\n      if (!predictive || !predictiveEngine || !open) return;\n\n      const generateDrawerInsights = async () => {\n        try {\n          const drawerContext = {\n            title: title || \"Drawer\",\n            position,\n            size,\n            modal: isModal,\n            hasFooter: !!footer,\n            contentLength: children?.toString().length || 0,\n            interactionCount,\n            timeSpent: drawerFocusTime ? Date.now() - drawerFocusTime : 0,\n          };\n\n          const insights = predictiveEngine.insights;\n\n          // Transform insights array to expected object format\n          const transformedInsights =\n            insights && insights.length > 0\n              ? {\n                  urgency:\n                    (insights.find((i) => i.type === \"urgency\" && i.metadata)\n                      ?.metadata?.urgency as \"low\" | \"medium\" | \"high\") ||\n                    \"medium\",\n                  complexity:\n                    (insights.find((i) => i.type === \"complexity\" && i.metadata)\n                      ?.metadata?.complexity as number) || 0,\n                  userStress:\n                    (insights.find((i) => i.type === \"stress\" && i.metadata)\n                      ?.metadata?.userStress as number) || 0,\n                }\n              : null;\n\n          setDrawerInsights((prevInsights) => {\n            if (transformedInsights) {\n              return transformedInsights;\n            }\n            return prevInsights;\n          });\n        } catch {\n          setDrawerInsights(null);\n        }\n      };\n\n      const timeoutId = setTimeout(\n        generateDrawerInsights,\n        ANIMATION.DURATION.slower * 1.4\n      );\n      return () => clearTimeout(timeoutId);\n    }, [\n      predictive,\n      predictiveEngine,\n      open,\n      title,\n      position,\n      size,\n      isModal,\n      footer,\n      children,\n      interactionCount,\n      drawerFocusTime,\n    ]);\n\n    // Enhanced handlers with consciousness tracking\n    const handleBackdropClick = useCallback(\n      (event: React.MouseEvent) => {\n        if (closeOnBackdropClick && event.target === event.currentTarget) {\n          // Record backdrop click interaction\n          if (consciousness && interactionRecorder) {\n            // Create synthetic event for backdrop click\n            const syntheticEvent = {\n              currentTarget: { id: \"drawer-backdrop\" },\n              type: \"click\",\n            } as any;\n            interactionRecorder.recordClick(syntheticEvent);\n          }\n\n          // Play spatial audio for backdrop close\n          if (spatialAudio && spatialAudioEngine) {\n            const audioPosition =\n              position === \"left\"\n                ? { x: -1, y: 0, z: 0 }\n                : position === \"right\"\n                  ? { x: 1, y: 0, z: 0 }\n                  : { x: 0, y: 0, z: 0 };\n            spatialAudioEngine.playGlassSound(\n              \"drawer-backdrop-close\",\n              audioPosition,\n              {\n                volume: 0.3,\n              }\n            );\n          }\n\n          onOpenChange?.(false);\n        }\n      },\n      [\n        closeOnBackdropClick,\n        onOpenChange,\n        consciousness,\n        interactionRecorder,\n        title,\n        position,\n        spatialAudio,\n        spatialAudioEngine,\n      ]\n    );\n\n    // Handle close\n    const handleClose = useCallback(() => {\n      // Record close button interaction\n      if (consciousness && interactionRecorder) {\n        // Create synthetic event for close button\n        const syntheticEvent = {\n          currentTarget: { id: \"drawer-close-button\" },\n          type: \"click\",\n        } as any;\n        interactionRecorder.recordClick(syntheticEvent);\n      }\n\n      // Play spatial audio for button close\n      if (spatialAudio && spatialAudioEngine) {\n        const audioPosition =\n          position === \"left\"\n            ? { x: -1, y: 0, z: 0 }\n            : position === \"right\"\n              ? { x: 1, y: 0, z: 0 }\n              : { x: 0, y: 0, z: 0 };\n        spatialAudioEngine.playGlassSound(\n          \"drawer-button-close\",\n          audioPosition,\n          {\n            volume: 0.3,\n          }\n        );\n      }\n\n      onOpenChange?.(false);\n    }, [\n      onOpenChange,\n      consciousness,\n      interactionRecorder,\n      title,\n      position,\n      spatialAudio,\n      spatialAudioEngine,\n    ]);\n\n    // Size classes based on position\n    const getSizeClasses = () => {\n      const isVertical = position === \"top\" || position === \"bottom\";\n\n      if (isVertical) {\n        // Height for top/bottom drawers\n        switch (size) {\n          case \"xs\":\n            return \"h-32\";\n          case \"sm\":\n            return \"h-48\";\n          case \"md\":\n            return \"h-64\";\n          case \"lg\":\n            return \"h-80\";\n          case \"xl\":\n            return \"h-96\";\n          case \"full\":\n            return \"h-full\";\n          default:\n            return \"h-64\";\n        }\n      } else {\n        // Width for left/right drawers\n        switch (size) {\n          case \"xs\":\n            return \"w-64\";\n          case \"sm\":\n            return \"w-80\";\n          case \"md\":\n            return \"w-96\";\n          case \"lg\":\n            return \"w-[28rem]\";\n          case \"xl\":\n            return \"w-[32rem]\";\n          case \"full\":\n            return \"w-full\";\n          default:\n            return \"w-96\";\n        }\n      }\n    };\n\n    // Position classes\n    const getPositionClasses = () => {\n      if (isContained) return \"\";\n\n      switch (position) {\n        case \"top\":\n          return \"top-0 left-0 right-0\";\n        case \"right\":\n          return \"top-0 right-0 bottom-0\";\n        case \"bottom\":\n          return \"bottom-0 left-0 right-0\";\n        case \"left\":\n          return \"top-0 left-0 bottom-0\";\n        default:\n          return \"top-0 right-0 bottom-0\";\n      }\n    };\n\n    // Animation direction based on position\n    const getAnimationPreset = () => {\n      if (prefersReducedMotion) return \"none\";\n\n      switch (position) {\n        case \"top\":\n          return \"slideDown\";\n        case \"right\":\n          return \"slideLeft\";\n        case \"bottom\":\n          return \"slideUp\";\n        case \"left\":\n          return \"slideRight\";\n        default:\n          return \"slideLeft\";\n      }\n    };\n\n    // Border radius based on position\n    const getBorderRadius = () => {\n      if (isContained) return \"rounded-xl\";\n\n      switch (position) {\n        case \"top\":\n          return \"rounded-b-xl\";\n        case \"right\":\n          return \"rounded-l-xl\";\n        case \"bottom\":\n          return \"rounded-t-xl\";\n        case \"left\":\n          return \"rounded-r-xl\";\n        default:\n          return \"rounded-l-xl\";\n      }\n    };\n    const drawerSectionClass = compact\n      ? \"glass-flex glass-items-start glass-justify-between glass-p-4 glass-border-b glass-border-glass-border/10 glass-flex-shrink-0\"\n      : \"glass-flex glass-items-start glass-justify-between glass-p-6 glass-border-b glass-border-glass-border/10 glass-flex-shrink-0\";\n    const drawerFooterClass = compact\n      ? \"glass-p-4 glass-border-t glass-border-glass-border/10 glass-flex-shrink-0\"\n      : \"glass-p-6 glass-border-t glass-border-glass-border/10 glass-flex-shrink-0\";\n    const drawerBodyClass = compact\n      ? \"flex-1 overflow-y-auto glass-p-4\"\n      : \"flex-1 overflow-y-auto glass-p-6\";\n\n    if (!isVisible) return null;\n\n    return (\n      <div\n        data-glass-component\n        data-testid={dataTestId}\n        className={cn(\n          isContained ? \"relative flex w-full\" : \"fixed inset-0\",\n          consciousness && \"consciousness-drawer-container\",\n          adaptive &&\n            drawerInsights?.urgency === \"high\" &&\n            \"consciousness-urgent-drawer\",\n          eyeTracking && \"consciousness-eye-trackable\",\n          className\n        )}\n        style={isContained ? undefined : { zIndex }}\n        role=\"dialog\"\n        aria-modal={isModal}\n        aria-label={ariaLabel || (title ? undefined : \"Drawer\")}\n        aria-labelledby={title ? \"drawer-title\" : undefined}\n        aria-describedby={description ? \"drawer-description\" : undefined}\n        data-contained={isContained ? \"true\" : undefined}\n        data-consciousness-drawer=\"true\"\n        data-consciousness-active={String(!!consciousness)}\n        data-drawer-title={title}\n        data-drawer-position={position}\n        data-drawer-size={size}\n        data-drawer-urgency={drawerInsights?.urgency}\n        data-user-stress={drawerInsights?.userStress}\n        data-interaction-count={interactionCount}\n      >\n        {/* Backdrop/Overlay */}\n        {showOverlay && !isContained && (\n          <Motion\n            preset=\"fadeIn\"\n            duration={effectiveAnimationDuration}\n            className={cn(\n              \"absolute inset-0 glass-surface-dark/50 cursor-pointer\",\n              backdropBlur && \"glass-backdrop-blur-md\",\n              consciousness && \"consciousness-drawer-backdrop\",\n              adaptive &&\n                drawerInsights?.urgency === \"high\" &&\n                \"consciousness-urgent-backdrop\"\n            )}\n            style={{\n              backgroundColor:\n                \"color-mix(in srgb, var(--glass-black) 40%, transparent)\",\n            }}\n            onClick={handleBackdropClick}\n            data-consciousness-backdrop=\"true\"\n            data-drawer-backdrop-position={position}\n          />\n        )}\n\n        {/* Drawer Content */}\n        <Motion\n          preset={getAnimationPreset()}\n          duration={effectiveAnimationDuration}\n          className={cn(\n            isContained\n              ? \"relative flex flex-col w-full\"\n              : \"absolute flex flex-col\",\n            getPositionClasses(),\n            getSizeClasses(),\n            consciousness && \"consciousness-drawer-content\",\n            predictive && drawerInsights && \"consciousness-predictive-drawer\",\n            adaptive &&\n              drawerInsights?.urgency === \"high\" &&\n              \"consciousness-urgent-content\"\n          )}\n          data-consciousness-content=\"true\"\n          data-drawer-complexity={drawerInsights?.complexity}\n          data-time-spent={drawerFocusTime ? Date.now() - drawerFocusTime : 0}\n          style={style}\n        >\n          {material === \"liquid\" ? (\n            <LiquidGlassMaterial\n              ior={materialProps?.ior || 1.45}\n              thickness={materialProps?.thickness || 8}\n              tint={materialProps?.tint || { r: 0, g: 0, b: 0, a: 0.06 }}\n              variant={materialProps?.variant || \"regular\"}\n              quality={materialProps?.quality || \"balanced\"}\n              environmentAdaptation\n              motionResponsive\n              ref={ref}\n              className={cn(\n                isContained\n                  ? \"w-full flex flex-col overflow-hidden liquid-glass-drawer-surface\"\n                  : \"h-full flex flex-col liquid-glass-drawer-surface\",\n                getBorderRadius(),\n                resizable && \"resize overflow-auto\",\n                consciousness && \"consciousness-drawer-glass\",\n                eyeTracking && \"consciousness-eye-trackable-content\",\n                adaptive &&\n                  drawerInsights?.urgency === \"high\" &&\n                  \"consciousness-urgent-glass\",\n                predictive && drawerInsights && \"consciousness-predictive-glass\"\n              )}\n              style={{\n                ...({\n                  \"--liquid-glass-drawer-density\":\n                    position === \"top\" || position === \"bottom\"\n                      ? \"0.85\"\n                      : \"0.9\",\n                  \"--liquid-glass-motion-factor\": \"0.6\",\n                  \"--liquid-glass-adaptive-tint\":\n                    drawerInsights?.urgency === \"high\"\n                      ? \"color-mix(in srgb, hsl(var(--glass-color-danger)) 10%, transparent)\"\n                      : \"color-mix(in srgb, var(--glass-black) 6%, transparent)\",\n                } as React.CSSProperties),\n              }}\n              data-liquid-glass-drawer=\"true\"\n              data-drawer-position={position}\n              data-drawer-urgency={drawerInsights?.urgency}\n              {...props}\n            >\n              {/* Header */}\n              {(header || title || description || showCloseButton) && (\n                <div className={drawerSectionClass}>\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    {header || (\n                      <>\n                        {title && (\n                          <h2\n                            id=\"drawer-title\"\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id=\"drawer-description\"\n                            className=\"glass-text-sm glass-text-secondary-foreground\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </>\n                    )}\n                  </div>\n                  {showCloseButton && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      iconOnly\n                      onClick={handleClose}\n                      aria-label=\"Close drawer\"\n                      className=\"glass-flex-shrink-0 glass-ml-4\"\n                    >\n                      \u00D7\n                    </GlassButton>\n                  )}\n                </div>\n              )}\n\n              {/* Content */}\n              <div className={cn(drawerBodyClass, contentClassName)}>\n                {children}\n              </div>\n\n              {/* Footer */}\n              {footer && <div className={drawerFooterClass}>{footer}</div>}\n            </LiquidGlassMaterial>\n          ) : (\n            <OptimizedGlass\n              intent=\"neutral\"\n              elevation=\"level2\"\n              intensity=\"medium\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              animation=\"none\"\n              performanceMode=\"medium\"\n              ref={ref}\n              liftOnHover\n              hoverSheen\n              className={cn(\n                isContained\n                  ? \"w-full flex flex-col overflow-hidden border border-border/20 glass-radial-reveal\"\n                  : \"h-full flex flex-col border border-border/20 glass-radial-reveal\",\n                getBorderRadius(),\n                resizable && \"resize overflow-auto\",\n                consciousness && \"consciousness-drawer-glass\",\n                eyeTracking && \"consciousness-eye-trackable-content\",\n                adaptive &&\n                  drawerInsights?.urgency === \"high\" &&\n                  \"consciousness-urgent-glass\",\n                predictive && drawerInsights && \"consciousness-predictive-glass\"\n              )}\n              {...props}\n            >\n              {/* Header */}\n              {(header || title || description || showCloseButton) && (\n                <div className={drawerSectionClass}>\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    {header || (\n                      <>\n                        {title && (\n                          <h2\n                            id=\"drawer-title\"\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id=\"drawer-description\"\n                            className=\"glass-text-sm glass-text-secondary\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </>\n                    )}\n                  </div>\n\n                  {showCloseButton && (\n                    <GlassButton\n                      type=\"button\"\n                      className={cn(\n                        \"glass-ml-4 glass-p-2 glass-radius-lg glass-text-secondary hover:text-foreground hover:bg-muted/20 transition-colors\",\n                        consciousness && \"consciousness-close-button\",\n                        adaptive &&\n                          drawerInsights?.urgency === \"high\" &&\n                          \"consciousness-urgent-close\"\n                      )}\n                      onClick={handleClose}\n                      aria-label=\"Close drawer\"\n                      data-consciousness-close=\"true\"\n                    >\n                      <X className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n                  )}\n                </div>\n              )}\n\n              {/* Content */}\n              {children && (\n                <div\n                  ref={contentRef}\n                  className={cn(\n                    drawerBodyClass,\n                    consciousness && \"consciousness-drawer-body\",\n                    eyeTracking && \"consciousness-eye-trackable-body\",\n                    adaptive &&\n                      drawerInsights?.urgency === \"high\" &&\n                      \"consciousness-urgent-body\"\n                  )}\n                  tabIndex={0}\n                  data-consciousness-body=\"true\"\n                  data-content-complexity={drawerInsights?.complexity}\n                  data-scroll-tracking={String(!!consciousness)}\n                  onScroll={(e) => {\n                    if (consciousness && interactionRecorder) {\n                      const scrollElement = e.target as HTMLElement;\n                      const scrollDepth =\n                        scrollElement.scrollTop /\n                          (scrollElement.scrollHeight -\n                            scrollElement.clientHeight) || 0;\n\n                      setContentEngagement((prev: any) => ({\n                        ...prev,\n                        scrollDepth: Math.max(prev.scrollDepth, scrollDepth),\n                        interactions: prev.interactions + 1,\n                      }));\n\n                      // Create synthetic event for scroll\n                      const syntheticEvent = {\n                        currentTarget: { id: \"drawer-content\" },\n                        type: \"scroll\",\n                      } as any;\n                      interactionRecorder.recordFocus(syntheticEvent);\n                    }\n                  }}\n                  onClick={(e) => {\n                    if (consciousness && interactionRecorder) {\n                      setContentEngagement((prev: any) => ({\n                        ...prev,\n                        interactions: prev.interactions + 1,\n                      }));\n\n                      interactionRecorder.recordClick(e);\n                    }\n                  }}\n                >\n                  {children}\n\n                  {/* Drawer Insights Display */}\n                  {predictive && drawerInsights && (\n                    <div className=\"glass-mt-4 glass-p-3 glass-surface-primary/10 glass-radius-lg glass-border glass-border-primary/20 glass-text-xs\">\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-primary\">\n                          Drawer Insights\n                        </span>\n                        <div className=\"glass-flex glass-gap-2\">\n                          <span\n                            className={cn(\n                              \"glass-px-2 glass-py-1 glass-radius-md\",\n                              drawerInsights.urgency === \"high\"\n                                ? \"bg-red-500/20 text-red-300\"\n                                : drawerInsights.urgency === \"medium\"\n                                  ? \"bg-yellow-500/20 text-yellow-300\"\n                                  : \"bg-green-500/20 text-green-300\"\n                            )}\n                          >\n                            {drawerInsights.urgency} urgency\n                          </span>\n                          {drawerInsights.userStress > 0.7 && (\n                            <span className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-primary/20 glass-text-secondary\">\n                              high stress\n                            </span>\n                          )}\n                          <span className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-blue/20 glass-text-secondary\">\n                            {position} drawer\n                          </span>\n                        </div>\n                      </div>\n                    </div>\n                  )}\n                </div>\n              )}\n\n              {/* Footer */}\n              {footer && <div className={drawerFooterClass}>{footer}</div>}\n            </OptimizedGlass>\n          )}\n        </Motion>\n      </div>\n    );\n  }\n);\n\nGlassDrawer.displayName = \"GlassDrawer\";\n\n// Compound components for easier usage\nexport interface DrawerTriggerProps {\n  children: React.ReactNode;\n  asChild?: boolean;\n}\n\nexport const DrawerTrigger = forwardRef<HTMLButtonElement, DrawerTriggerProps>(\n  ({ children, asChild = false, ...props }, ref) => {\n    if (asChild) {\n      return React.cloneElement(children as any, {\n        ref,\n        ...props,\n      });\n    }\n\n    return (\n      <GlassButton ref={ref} {...props}>\n        {children}\n      </GlassButton>\n    );\n  }\n);\n\nDrawerTrigger.displayName = \"DrawerTrigger\";\n\nexport interface DrawerContentProps extends GlassDrawerProps {}\n\nexport const DrawerContent = GlassDrawer;\n\nexport interface DrawerHeaderProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DrawerHeader = forwardRef<HTMLDivElement, DrawerHeaderProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\"flex flex-col glass-gap-1.5\", className)}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nDrawerHeader.displayName = \"DrawerHeader\";\n\nexport interface DrawerTitleProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DrawerTitle = forwardRef<HTMLHeadingElement, DrawerTitleProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <h2\n        ref={ref}\n        className={cn(\n          \"glass-text-lg font-semibold leading-none tracking-tight\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </h2>\n    );\n  }\n);\n\nDrawerTitle.displayName = \"DrawerTitle\";\n\nexport interface DrawerDescriptionProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DrawerDescription = forwardRef<\n  HTMLParagraphElement,\n  DrawerDescriptionProps\n>(({ children, className, ...props }, ref) => {\n  return (\n    <p\n      ref={ref}\n      className={cn(\"glass-text-sm glass-text-secondary\", className)}\n      {...props}\n    >\n      {children}\n    </p>\n  );\n});\n\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport interface DrawerFooterProps {\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const DrawerFooter = forwardRef<HTMLDivElement, DrawerFooterProps>(\n  ({ children, className, ...props }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex flex-col-reverse sm:flex-row sm:justify-end sm:glass-gap-2\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nDrawerFooter.displayName = \"DrawerFooter\";\n\n// Hook for drawer state management\nexport const useDrawer = (defaultOpen = false) => {\n  const [open, setOpen] = useState(defaultOpen);\n\n  const openDrawer = () => setOpen(true);\n  const closeDrawer = () => setOpen(false);\n  const toggleDrawer = () => setOpen((prev: any) => !prev);\n\n  return {\n    open,\n    setOpen,\n    openDrawer,\n    closeDrawer,\n    toggleDrawer,\n  };\n};\n\n// Consciousness-Enhanced Drawer Variants\nexport const GlassPredictiveDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer {...props} consciousness={true} predictive={true} />\n);\n\nexport const GlassAdaptiveDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer {...props} consciousness={true} adaptive={true} />\n);\n\nexport const GlassEyeTrackingDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer {...props} consciousness={true} eyeTracking={true} />\n);\n\nexport const GlassSpatialAudioDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer {...props} consciousness={true} spatialAudio={true} />\n);\n\nexport const GlassAchievementDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer {...props} consciousness={true} trackAchievements={true} />\n);\n\nexport const GlassConsciousnessDrawer: React.FC<GlassDrawerProps> = (props) => (\n  <GlassDrawer\n    {...props}\n    consciousness={true}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\n// Types are already exported via interface declarations above\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  forwardRef,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId, announceToScreenReader } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassHoverCardProps {\n  /**\n   * Content to display in the hover card\n   */\n  content: React.ReactNode;\n  /**\n   * Children to trigger the hover card\n   */\n  children: React.ReactNode;\n  /**\n   * Hover card placement\n   */\n  placement?:\n    | \"top\"\n    | \"right\"\n    | \"bottom\"\n    | \"left\"\n    | \"top-start\"\n    | \"top-end\"\n    | \"right-start\"\n    | \"right-end\"\n    | \"bottom-start\"\n    | \"bottom-end\"\n    | \"left-start\"\n    | \"left-end\";\n  /**\n   * Hover card alignment\n   */\n  align?: \"start\" | \"center\" | \"end\";\n  /**\n   * Offset from trigger element\n   */\n  offset?: number;\n  /**\n   * Delay before showing (ms)\n   */\n  showDelay?: number;\n  /**\n   * Delay before hiding (ms)\n   */\n  hideDelay?: number;\n  /**\n   * Whether hover card is open\n   */\n  open?: boolean;\n  /**\n   * Callback when open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Maximum width\n   */\n  maxWidth?: string | number;\n  /**\n   * Custom trigger className\n   */\n  triggerClassName?: string;\n  /**\n   * Accessible title for the hover card\n   */\n  title?: string;\n  /**\n   * Accessible description for the hover card\n   */\n  description?: string;\n  /**\n   * Whether to respect motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Custom aria-label\n   */\n  \"aria-label\"?: string;\n  /**\n   * Custom aria-labelledby\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * Custom aria-describedby\n   */\n  \"aria-describedby\"?: string;\n}\n\nexport interface GlassHoverCardContentProps {\n  /**\n   * Content to display\n   */\n  children: React.ReactNode;\n  /**\n   * Content className\n   */\n  className?: string;\n  /**\n   * Whether to show arrow\n   */\n  showArrow?: boolean;\n  /**\n   * Arrow className\n   */\n  arrowClassName?: string;\n}\n\nexport interface GlassHoverCardTriggerProps {\n  /**\n   * Trigger content\n   */\n  children: React.ReactNode;\n  /**\n   * Trigger className\n   */\n  className?: string;\n  /**\n   * Trigger as child\n   */\n  asChild?: boolean;\n}\n\n/**\n * GlassHoverCard component\n * A glassmorphism hover card that appears on hover\n */\nexport const GlassHoverCard = forwardRef<HTMLDivElement, GlassHoverCardProps>(\n  (\n    {\n      content,\n      children,\n      placement = \"top\",\n      align = \"center\",\n      offset = 8,\n      showDelay = 300,\n      hideDelay = 100,\n      open: controlledOpen,\n      onOpenChange,\n      className,\n      maxWidth = \"320px\",\n      triggerClassName,\n      title,\n      description,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      ...props\n    },\n    ref\n  ) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [position, setPosition] = useState({ x: 0, y: 0 });\n    const triggerRef = useRef<HTMLDivElement>(null);\n    const contentRef = useRef<HTMLDivElement>(null);\n    const showTimeoutRef = useRef<NodeJS.Timeout>();\n    const hideTimeoutRef = useRef<NodeJS.Timeout>();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n\n    const open = controlledOpen !== undefined ? controlledOpen : isOpen;\n    const setOpen = useCallback(\n      (value: boolean) => {\n        if (value === open) {\n          return;\n        }\n\n        if (onOpenChange) {\n          onOpenChange(value);\n        } else {\n          setIsOpen(value);\n        }\n      },\n      [onOpenChange, open]\n    );\n\n    // Generate unique IDs for accessibility\n    const hoverCardId = useA11yId(\"glass-hover-card\");\n    const titleId = title ? useA11yId(\"glass-hover-card-title\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-hover-card-desc\")\n      : undefined;\n\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n\n    // Calculate position based on placement and alignment\n    const calculatePosition = () => {\n      if (!triggerRef.current || !contentRef.current) return;\n\n      const triggerRect = triggerRef.current.getBoundingClientRect();\n      const contentRect = contentRef.current.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n\n      let x = 0;\n      let y = 0;\n\n      // Horizontal positioning\n      switch (placement) {\n        case \"left\":\n        case \"left-start\":\n        case \"left-end\":\n          x = triggerRect.left - contentRect.width - offset;\n          break;\n        case \"right\":\n        case \"right-start\":\n        case \"right-end\":\n          x = triggerRect.right + offset;\n          break;\n        default: // top, bottom, top-start, top-end, bottom-start, bottom-end\n          x = triggerRect.left + triggerRect.width / 2 - contentRect.width / 2;\n      }\n\n      // Vertical positioning\n      switch (placement) {\n        case \"top\":\n        case \"top-start\":\n        case \"top-end\":\n          y = triggerRect.top - contentRect.height - offset;\n          break;\n        case \"bottom\":\n        case \"bottom-start\":\n        case \"bottom-end\":\n          y = triggerRect.bottom + offset;\n          break;\n        default: // left, right, left-start, left-end, right-start, right-end\n          y = triggerRect.top + triggerRect.height / 2 - contentRect.height / 2;\n      }\n\n      // Alignment adjustments\n      switch (placement) {\n        case \"top-start\":\n        case \"bottom-start\":\n          x = triggerRect.left;\n          break;\n        case \"top-end\":\n        case \"bottom-end\":\n          x = triggerRect.right - contentRect.width;\n          break;\n        case \"left-start\":\n        case \"right-start\":\n          y = triggerRect.top;\n          break;\n        case \"left-end\":\n        case \"right-end\":\n          y = triggerRect.bottom - contentRect.height;\n          break;\n      }\n\n      // Keep within viewport bounds\n      x = Math.max(10, Math.min(x, viewportWidth - contentRect.width - 10));\n      y = Math.max(10, Math.min(y, viewportHeight - contentRect.height - 10));\n\n      setPosition({ x, y });\n    };\n\n    // Handle mouse enter\n    const handleMouseEnter = () => {\n      if (hideTimeoutRef.current) {\n        clearTimeout(hideTimeoutRef.current);\n        hideTimeoutRef.current = undefined;\n      }\n\n      if (!open) {\n        showTimeoutRef.current = setTimeout(() => {\n          setOpen(true);\n        }, showDelay);\n      }\n    };\n\n    // Handle mouse leave\n    const handleMouseLeave = () => {\n      if (showTimeoutRef.current) {\n        clearTimeout(showTimeoutRef.current);\n        showTimeoutRef.current = undefined;\n      }\n\n      if (open) {\n        hideTimeoutRef.current = setTimeout(() => {\n          setOpen(false);\n        }, hideDelay);\n      }\n    };\n\n    // Update position when content opens\n    useEffect(() => {\n      if (open) {\n        // Small delay to ensure content is rendered\n        setTimeout(calculatePosition, ANIMATION.DURATION.instant);\n\n        // Announce to screen readers when opened\n        announceToScreenReader(\n          `Hover card opened: ${title || ariaLabel || \"Hover card\"}`,\n          \"polite\"\n        );\n      }\n    }, [open, placement, align, offset, title, ariaLabel]);\n\n    // Recalculate position on window resize\n    useEffect(() => {\n      if (!open) return;\n\n      const handleResize = () => calculatePosition();\n      window.addEventListener(\"resize\", handleResize);\n      return () => window.removeEventListener(\"resize\", handleResize);\n    }, [open]);\n\n    return (\n      <div className=\"glass-relative glass-inline-glass-block\">\n        <div\n          ref={triggerRef}\n          className={triggerClassName}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n        >\n          {children}\n        </div>\n\n        {open && (\n          <Motion\n            preset=\"fadeIn\"\n            duration={shouldAnimate ? 200 : 0}\n            className=\"glass-fixed glass-z-9999\"\n            style={{\n              left: position.x,\n              top: position.y,\n              maxWidth:\n                typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n            }}\n          >\n            <div\n              ref={contentRef}\n              className={cn(\"relative\", className)}\n              onMouseEnter={handleMouseEnter}\n              onMouseLeave={handleMouseLeave}\n              role=\"tooltip\"\n              id={hoverCardId}\n              aria-labelledby={ariaLabelledBy || titleId}\n              aria-describedby={ariaDescribedBy || descriptionId}\n              aria-label={!ariaLabelledBy && !titleId ? ariaLabel : undefined}\n              {...props}\n            >\n              <OptimizedGlass\n                ref={ref}\n                intent=\"neutral\"\n                elevation=\"level3\"\n                intensity=\"strong\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                animation=\"none\"\n                performanceMode=\"medium\"\n                liftOnHover\n                hoverSheen\n                className=\"glass-backdrop-blur-md glass-surface-dark/20 glass-border glass-border-white/20 glass-shadow-2xl glass-radial-reveal glass-contrast-guard\"\n              >\n                <div className=\"glass-p-4\">\n                  {/* Header with title and description */}\n                  {(title || description) && (\n                    <div className=\"glass-mb-2\">\n                      {title && (\n                        <h3\n                          id={titleId}\n                          className=\"glass-font-medium glass-text-primary glass-text-sm glass-mb-1\"\n                        >\n                          {title}\n                        </h3>\n                      )}\n                      {description && (\n                        <p\n                          id={descriptionId}\n                          className=\"glass-text-xs glass-text-secondary\"\n                        >\n                          {description}\n                        </p>\n                      )}\n                    </div>\n                  )}\n                  {content}\n                </div>\n              </OptimizedGlass>\n\n              {/* Arrow */}\n              <div\n                className={cn(\n                  \"absolute w-3 h-3 bg-white/10 border border-white/20 glass-backdrop-blur-md\",\n                  \"rotate-45\",\n                  {\n                    \"-bottom-2 left-1/2 -translate-x-1/2\":\n                      placement.startsWith(\"top\"),\n                    \"-top-2 left-1/2 -translate-x-1/2\":\n                      placement.startsWith(\"bottom\"),\n                    \"-right-2 top-1/2 -translate-y-1/2\":\n                      placement.startsWith(\"left\"),\n                    \"-left-2 top-1/2 -translate-y-1/2\":\n                      placement.startsWith(\"right\"),\n                  }\n                )}\n                style={{ ...{ clipPath: \"polygon(0 0, 100% 100%, 0 100%)\" } }}\n              />\n            </div>\n          </Motion>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassHoverCard.displayName = \"GlassHoverCard\";\n\n/**\n * GlassHoverCardContent component\n * Content wrapper for hover card\n */\nexport const GlassHoverCardContent: React.FC<GlassHoverCardContentProps> = ({\n  children,\n  className,\n  showArrow = true,\n  arrowClassName,\n}) => {\n  return (\n    <div className={className}>\n      {children}\n      {showArrow && (\n        <div\n          className={cn(\n            \"absolute w-3 h-3 bg-white/10 border border-white/20 glass-backdrop-blur-md rotate-45\",\n            arrowClassName\n          )}\n        />\n      )}\n    </div>\n  );\n};\n\n/**\n * GlassHoverCardTrigger component\n * Trigger wrapper for hover card\n */\nexport const GlassHoverCardTrigger: React.FC<GlassHoverCardTriggerProps> = ({\n  children,\n  className,\n  asChild = false,\n}) => {\n  if (asChild && React.isValidElement(children)) {\n    return React.cloneElement(children, {\n      className: cn(children.props?.className, className),\n    });\n  }\n\n  return <div className={className}>{children}</div>;\n};\n\n/**\n * Hook for managing hover card state\n */\nexport const useHoverCard = () => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  return {\n    isOpen,\n    setIsOpen,\n    open: () => setIsOpen(true),\n    close: () => setIsOpen(false),\n    toggle: () => setIsOpen(!isOpen),\n  };\n};\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport {\n  announceToScreenReader,\n  createModalA11y,\n  focusUtils,\n  useA11yId,\n} from \"../../utils/a11y\";\nimport { GlassButton, IconButton } from \"../button/GlassButton\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n// import { usePredictiveEngine, useInteractionRecorder } from '../advanced/GlassPredictiveEngine';\n// import { useAchievements } from '../advanced/GlassAchievementSystem';\n// import { useBiometricAdaptation } from '../advanced/GlassBiometricAdaptation';\n// import { useEyeTracking } from '../advanced/GlassEyeTracking';\n// import { useSpatialAudio } from '../advanced/GlassSpatialAudio';\n\nexport interface GlassModalProps extends ConsciousnessFeatures {\n  /**\n   * Whether the modal is open\n   */\n  open?: boolean;\n  /**\n   * Callback when modal should close\n   */\n  onClose?: () => void;\n  /**\n   * Modal title\n   */\n  title?: string;\n  /**\n   * Modal description\n   */\n  description?: string;\n  /**\n   * Modal size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"full\";\n  /**\n   * Modal variant\n   */\n  variant?: \"default\" | \"centered\" | \"drawer\" | \"fullscreen\";\n  /**\n   * Whether modal can be closed by clicking backdrop\n   */\n  closeOnBackdropClick?: boolean;\n  /**\n   * Whether modal can be closed by pressing escape\n   */\n  closeOnEscape?: boolean;\n  /**\n   * Custom close button\n   */\n  closeButton?: React.ReactNode;\n  /**\n   * Whether to show default close button\n   */\n  showCloseButton?: boolean;\n  /**\n   * Modal footer content\n   */\n  footer?: React.ReactNode;\n  /**\n   * Modal children\n   */\n  children: React.ReactNode;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n  /**\n   * Custom backdrop\n   */\n  backdrop?: React.ReactNode;\n  /**\n   * Backdrop blur intensity\n   */\n  backdropBlur?: \"none\" | \"sm\" | \"md\" | \"lg\";\n  /**\n   * Animation preset\n   */\n  animation?: \"fade\" | \"scale\" | \"slide\" | \"flip\";\n  /**\n   * Whether to lock scroll when open\n   */\n  lockScroll?: boolean;\n  /**\n   * Render as a bounded inline surface for embedded previews/cards instead of\n   * a viewport modal overlay.\n   */\n  contained?: boolean;\n  /**\n   * Use denser modal spacing for compact embedded surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Z-index\n   */\n  zIndex?: number;\n  /**\n   * Inline style for the modal content surface. In contained mode, width,\n   * height, and maxHeight constrain the embedded surface.\n   */\n  style?: React.CSSProperties;\n  className?: string;\n\n  // Accessibility props\n  /**\n   * Accessible label for the modal\n   */\n  \"aria-label\"?: string;\n  /**\n   * ID of element that labels the modal\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element that describes the modal\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Whether this is an alert dialog that requires immediate attention\n   */\n  role?: \"dialog\" | \"alertdialog\";\n  /**\n   * Element to focus when modal opens\n   */\n  initialFocus?: React.RefObject<HTMLElement>;\n  /**\n   * Element to focus when modal closes\n   */\n  restoreFocus?: React.RefObject<HTMLElement>;\n  /**\n   * Custom className for modal content\n   */\n  contentClassName?: string;\n  /**\n   * Custom data-testid attribute\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassModal component\n * A versatile modal with glassmorphism styling\n */\nexport const GlassModal = forwardRef<HTMLDivElement, GlassModalProps>(\n  (\n    {\n      open = true,\n      onClose = () => {},\n      title,\n      description,\n      size = \"md\",\n      variant = \"default\",\n      material = \"glass\",\n      materialProps,\n      closeOnBackdropClick = true,\n      closeOnEscape = true,\n      closeButton,\n      showCloseButton = true,\n      footer,\n      children = null,\n      backdrop,\n      backdropBlur = \"md\",\n      animation = \"scale\",\n      lockScroll = true,\n      contained = false,\n      compact = false,\n      zIndex = 50,\n      style,\n      className,\n      role = \"dialog\",\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      initialFocus,\n      restoreFocus,\n      contentClassName,\n      \"data-testid\": dataTestId,\n      // Consciousness features\n      consciousness,\n      predictive,\n      adaptive,\n      eyeTracking,\n      spatialAudio,\n      trackAchievements,\n      ...props\n    },\n    ref\n  ) => {\n    const [mounted, setMounted] = useState(false);\n    const contentRef = useRef<HTMLDivElement>(null);\n    const previousActiveElement = useRef<HTMLElement | null>(null);\n    const previousBodyStylesRef = useRef<{\n      position: string;\n      top: string;\n      width: string;\n      overflow: string;\n    } | null>(null);\n    const prefersReducedMotion = useReducedMotion();\n\n    // Consciousness state\n    const [interactionCount, setInteractionCount] = useState(0);\n    const [modalFocusTime, setModalFocusTime] = useState<number>(0);\n    const [contentEngagement, setContentEngagement] = useState<{\n      scrollDepth: number;\n      timeSpent: number;\n      interactions: number;\n    }>({ scrollDepth: 0, timeSpent: 0, interactions: 0 });\n    const [modalInsights, setModalInsights] = useState<{\n      urgency: \"low\" | \"medium\" | \"high\";\n      complexity: number;\n      userStress: number;\n    } | null>(null);\n\n    // Consciousness hooks (mock implementations)\n    const predictiveEngine = useMemo(\n      () =>\n        predictive\n          ? {\n              analyzeModalEngagement: async (context?: any) => ({\n                urgency: \"low\" as const,\n                complexity: 0.5,\n                userStress: 0.3,\n              }),\n            }\n          : null,\n      [predictive]\n    );\n    const eyeTracker = useMemo(\n      () =>\n        eyeTracking\n          ? {\n              startTracking: (handler: any) => {},\n              stopTracking: () => {},\n            }\n          : null,\n      [eyeTracking]\n    );\n    const biometricAdapter = useMemo(\n      () =>\n        adaptive\n          ? {\n              getCurrentBiometrics: () => ({ stressLevel: 0.3 }),\n            }\n          : null,\n      [adaptive]\n    );\n    const spatialAudioEngine = useMemo(\n      () =>\n        spatialAudio\n          ? {\n              playSound: (sound: string, config?: any) => {},\n            }\n          : null,\n      [spatialAudio]\n    );\n    const interactionRecorder = useMemo(\n      () =>\n        consciousness\n          ? {\n              recordInteraction: (type: string, data?: any) => {},\n            }\n          : null,\n      [consciousness]\n    );\n    const achievementTracker = useMemo(\n      () =>\n        trackAchievements\n          ? {\n              recordInteraction: (type: string, data?: any) => {},\n            }\n          : null,\n      [trackAchievements]\n    );\n    const wasOpenRef = useRef(false);\n    const modalFocusTimeRef = useRef(0);\n    const contentEngagementRef = useRef(contentEngagement);\n\n    useEffect(() => {\n      contentEngagementRef.current = contentEngagement;\n    }, [contentEngagement]);\n\n    // Generate unique IDs for accessibility\n    const modalId = useA11yId(\"glass-modal\");\n    const titleId = title ? useA11yId(\"glass-modal-title\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-modal-desc\")\n      : undefined;\n\n    // Create accessibility attributes\n    const isContained = contained;\n    const baseA11yProps = createModalA11y({\n      id: modalId,\n      titleId: ariaLabelledBy || titleId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      modal: !isContained,\n    });\n\n    // Create final a11y props with role override and default label\n    const a11yProps = {\n      ...baseA11yProps,\n      ...(role && { role }),\n      // Provide aria-label if no title or labelledby is provided\n      ...(!ariaLabelledBy &&\n        !titleId && { \"aria-label\": ariaLabel || \"Modal\" }),\n    };\n\n    useEffect(() => {\n      setMounted(true);\n    }, []);\n\n    // Focus management\n    useEffect(() => {\n      if (!mounted) return;\n\n      if (open) {\n        // Store the previously focused element\n        previousActiveElement.current = document.activeElement as HTMLElement;\n\n        // Focus management after modal renders\n        setTimeout(() => {\n          if (initialFocus?.current) {\n            initialFocus.current.focus();\n          } else if (contentRef.current) {\n            // Focus first focusable element or the modal itself\n            focusUtils.focusFirst(contentRef.current);\n            if (document.activeElement === document.body) {\n              contentRef.current.focus();\n            }\n          }\n        }, 100);\n\n        // Announce modal opening to screen readers\n        if (role === \"alertdialog\") {\n          announceToScreenReader(\n            `Alert dialog opened: ${title || ariaLabel || \"Dialog\"}`,\n            \"assertive\"\n          );\n        } else {\n          announceToScreenReader(\n            `Dialog opened: ${title || ariaLabel || \"Dialog\"}`,\n            \"polite\"\n          );\n        }\n      } else if (previousActiveElement.current && mounted) {\n        // Restore focus when modal closes\n        if (restoreFocus?.current) {\n          restoreFocus.current.focus();\n        } else {\n          previousActiveElement.current.focus();\n        }\n      }\n    }, [open, mounted, title, ariaLabel, role, initialFocus, restoreFocus]);\n\n    useEffect(() => {\n      if (!mounted) return;\n\n      if (open && lockScroll && !isContained) {\n        const scrollY = window.scrollY;\n        const body = document.body;\n        previousBodyStylesRef.current = {\n          position: body.style.position,\n          top: body.style.top,\n          width: body.style.width,\n          overflow: body.style.overflow,\n        };\n\n        body.style.position = \"fixed\";\n        body.style.top = `-${scrollY}px`;\n        body.style.width = \"100%\";\n        body.style.overflow = \"hidden\";\n\n        return () => {\n          const previousStyles = previousBodyStylesRef.current;\n          body.style.position = previousStyles?.position || \"\";\n          body.style.top = previousStyles?.top || \"\";\n          body.style.width = previousStyles?.width || \"\";\n          body.style.overflow = previousStyles?.overflow || \"\";\n          previousBodyStylesRef.current = null;\n          // Only scroll in real browser, not jsdom\n          if (typeof window !== \"undefined\" && window.scrollTo) {\n            try {\n              window.scrollTo(0, scrollY);\n            } catch (e) {\n              // Ignore scrollTo errors in test environment\n            }\n          }\n        };\n      }\n    }, [open, lockScroll, mounted, isContained]);\n\n    // Consciousness effects\n    // Modal opening/closing tracking with spatial audio\n    useEffect(() => {\n      if (!mounted) return;\n\n      if (open && !wasOpenRef.current) {\n        const openTime = Date.now();\n        wasOpenRef.current = true;\n        modalFocusTimeRef.current = openTime;\n        setModalFocusTime(openTime);\n        setInteractionCount((prev: any) => prev + 1);\n\n        // Record modal opening interaction\n        if (consciousness && interactionRecorder) {\n          interactionRecorder.recordInteraction(\"modal_open\", {\n            title: title || \"Untitled Modal\",\n            size,\n            variant: isContained ? \"contained\" : variant,\n            role,\n            timestamp: openTime,\n          });\n        }\n\n        // Track achievement for modal interaction\n        if (trackAchievements && achievementTracker) {\n          achievementTracker.recordInteraction(\"modal_opened\", {\n            modalType: role,\n            title: title || \"Modal\",\n            timestamp: openTime,\n          });\n        }\n\n        // Play spatial audio for modal opening\n        if (spatialAudio && spatialAudioEngine) {\n          const audioConfig =\n            role === \"alertdialog\"\n              ? {\n                  sound: \"alert-modal-open\",\n                  volume: 0.7,\n                  position: \"center\",\n                  reverb: 0.4,\n                }\n              : {\n                  sound: \"modal-open\",\n                  volume: 0.5,\n                  position: \"center\",\n                  reverb: 0.3,\n                };\n          spatialAudioEngine.playSound(audioConfig.sound, audioConfig);\n        }\n      } else if (!open && wasOpenRef.current) {\n        const closeTime = Date.now();\n        const timeSpent = closeTime - modalFocusTimeRef.current;\n        const latestEngagement = contentEngagementRef.current;\n        wasOpenRef.current = false;\n        modalFocusTimeRef.current = 0;\n\n        // Record modal closing interaction\n        if (consciousness && interactionRecorder) {\n          interactionRecorder.recordInteraction(\"modal_close\", {\n            title: title || \"Untitled Modal\",\n            timeSpent,\n            interactions: latestEngagement.interactions,\n            scrollDepth: latestEngagement.scrollDepth,\n            timestamp: closeTime,\n          });\n        }\n\n        // Update content engagement\n        setContentEngagement((prev: any) =>\n          prev.timeSpent === timeSpent ? prev : { ...prev, timeSpent }\n        );\n\n        // Play spatial audio for modal closing\n        if (spatialAudio && spatialAudioEngine) {\n          spatialAudioEngine.playSound(\"modal-close\", {\n            volume: 0.4,\n            position: \"center\",\n            reverb: 0.2,\n          });\n        }\n      }\n    }, [\n      open,\n      mounted,\n      consciousness,\n      interactionRecorder,\n      trackAchievements,\n      achievementTracker,\n      spatialAudio,\n      spatialAudioEngine,\n      title,\n      size,\n      variant,\n      role,\n      isContained,\n    ]);\n\n    // Eye tracking for modal engagement\n    useEffect(() => {\n      if (!eyeTracking || !eyeTracker || !open) return;\n\n      const handleGazeData = (gazeData: any) => {\n        // Track if user is looking at modal content\n        if (contentRef.current) {\n          const rect = contentRef.current.getBoundingClientRect();\n          const isLookingAtModal =\n            gazeData.x >= rect.left &&\n            gazeData.x <= rect.right &&\n            gazeData.y >= rect.top &&\n            gazeData.y <= rect.bottom;\n\n          if (isLookingAtModal && trackAchievements && achievementTracker) {\n            achievementTracker.recordInteraction(\"modal_gaze_engagement\", {\n              modalTitle: title,\n              gazeTime: Date.now(),\n              modalArea: \"content\",\n            });\n          }\n        }\n      };\n\n      eyeTracker.startTracking(handleGazeData);\n      return () => eyeTracker.stopTracking();\n    }, [\n      eyeTracking,\n      eyeTracker,\n      open,\n      trackAchievements,\n      achievementTracker,\n      title,\n    ]);\n\n    // Biometric adaptation for modal behavior\n    useEffect(() => {\n      if (!adaptive || !biometricAdapter || !open) return;\n\n      const updateAdaptiveFeatures = () => {\n        const biometrics = biometricAdapter.getCurrentBiometrics();\n\n        // Analyze modal content complexity and user stress\n        setModalInsights({\n          urgency:\n            role === \"alertdialog\"\n              ? \"high\"\n              : biometrics.stressLevel > 0.7\n                ? \"medium\"\n                : \"low\",\n          complexity: (children?.toString().length || 0) > 500 ? 0.8 : 0.4,\n          userStress: biometrics.stressLevel,\n        });\n\n        // Record biometric adaptation for achievements\n        if (trackAchievements && achievementTracker) {\n          achievementTracker.recordInteraction(\"modal_biometric_adaptation\", {\n            stressLevel: biometrics.stressLevel,\n            modalComplexity:\n              (children?.toString().length || 0) > 500 ? \"high\" : \"low\",\n            adaptations: {\n              urgencyLevel: role === \"alertdialog\" ? \"high\" : \"normal\",\n            },\n          });\n        }\n      };\n\n      const interval = setInterval(\n        updateAdaptiveFeatures,\n        ANIMATION.DURATION.slower * 4\n      );\n      updateAdaptiveFeatures(); // Run immediately\n\n      return () => clearInterval(interval);\n    }, [\n      adaptive,\n      biometricAdapter,\n      open,\n      role,\n      children,\n      trackAchievements,\n      achievementTracker,\n    ]);\n\n    // Predictive modal insights\n    useEffect(() => {\n      if (!predictive || !predictiveEngine || !open) return;\n\n      const generateModalInsights = async () => {\n        try {\n          const modalContext = {\n            title: title || \"Modal\",\n            role,\n            size,\n            variant,\n            hasFooter: !!footer,\n            contentLength: children?.toString().length || 0,\n            interactionCount,\n            timeSpent: modalFocusTime ? Date.now() - modalFocusTime : 0,\n          };\n\n          const insights =\n            await predictiveEngine.analyzeModalEngagement(modalContext);\n          setModalInsights((prevInsights) => ({\n            urgency: insights.urgency || prevInsights?.urgency || \"low\",\n            complexity: insights.complexity || prevInsights?.complexity || 0.5,\n            userStress: insights.userStress || prevInsights?.userStress || 0.3,\n          }));\n        } catch {\n          setModalInsights(null);\n        }\n      };\n\n      const timeoutId = setTimeout(\n        generateModalInsights,\n        ANIMATION.DURATION.slower * 1.4\n      );\n      return () => clearTimeout(timeoutId);\n    }, [\n      predictive,\n      predictiveEngine,\n      open,\n      title,\n      role,\n      size,\n      variant,\n      footer,\n      children,\n      interactionCount,\n      modalFocusTime,\n    ]);\n\n    // Enhanced handlers with consciousness tracking\n    const handleBackdropClick = useCallback(\n      (e: React.MouseEvent) => {\n        if (closeOnBackdropClick && e.target === e.currentTarget) {\n          // Record backdrop click interaction\n          if (consciousness && interactionRecorder) {\n            interactionRecorder.recordInteraction(\"modal_backdrop_click\", {\n              modalTitle: title,\n              timestamp: Date.now(),\n            });\n          }\n\n          // Play spatial audio for backdrop close\n          if (spatialAudio && spatialAudioEngine) {\n            spatialAudioEngine.playSound(\"modal-backdrop-close\", {\n              volume: 0.3,\n              position: \"left\",\n              reverb: 0.1,\n            });\n          }\n\n          onClose();\n        }\n      },\n      [\n        closeOnBackdropClick,\n        onClose,\n        consciousness,\n        interactionRecorder,\n        title,\n        spatialAudio,\n        spatialAudioEngine,\n      ]\n    );\n\n    const handleEscapeKey = useCallback(() => {\n      if (closeOnEscape) {\n        // Record escape key close\n        if (consciousness && interactionRecorder) {\n          interactionRecorder.recordInteraction(\"modal_escape_close\", {\n            modalTitle: title,\n            timestamp: Date.now(),\n          });\n        }\n\n        // Play spatial audio for escape close\n        if (spatialAudio && spatialAudioEngine) {\n          spatialAudioEngine.playSound(\"modal-escape-close\", {\n            volume: 0.4,\n            position: \"right\",\n            reverb: 0.2,\n          });\n        }\n\n        onClose();\n      }\n    }, [\n      closeOnEscape,\n      onClose,\n      consciousness,\n      interactionRecorder,\n      title,\n      spatialAudio,\n      spatialAudioEngine,\n    ]);\n\n    const sizeClasses = {\n      xs: \"max-w-xs\",\n      sm: \"max-w-sm\",\n      md: \"max-w-md\",\n      lg: \"max-w-lg\",\n      xl: \"max-w-xl\",\n      \"2xl\": \"max-w-2xl\",\n      full: \"max-w-full glass-mx-4\",\n    };\n\n    const variantClasses = {\n      default: \"items-center justify-center glass-p-4\",\n      centered: \"items-center justify-center glass-p-4\",\n      drawer: \"items-end justify-center pb-0\",\n      fullscreen: \"items-center justify-center glass-p-0\",\n    };\n    const modalSectionClass = compact\n      ? \"glass-flex-shrink-0 glass-p-4 glass-border-b glass-border-glass-border/20\"\n      : \"glass-flex-shrink-0 glass-p-6 glass-border-b glass-border-glass-border/20\";\n    const modalFooterClass = compact\n      ? \"glass-flex-shrink-0 glass-p-4 glass-border-t glass-border-glass-border/20\"\n      : \"glass-flex-shrink-0 glass-p-6 glass-border-t glass-border-glass-border/20\";\n    const modalBodyClass = compact\n      ? \"flex-1 overflow-y-auto glass-p-4\"\n      : \"flex-1 overflow-y-auto glass-p-6\";\n\n    const backdropBlurClasses = {\n      none: \"\",\n      sm: \"glass-backdrop-blur-md\",\n      md: \"glass-backdrop-blur-md\",\n      lg: \"glass-backdrop-blur-md\",\n    };\n\n    const getAnimationPreset = () => {\n      if (prefersReducedMotion) return \"none\";\n\n      switch (animation) {\n        case \"fade\":\n          return \"fadeIn\";\n        case \"scale\":\n          return \"scaleIn\";\n        case \"slide\":\n          return variant === \"drawer\" ? \"slideUp\" : \"slideDown\";\n        case \"flip\":\n          return \"scaleIn\";\n        default:\n          return \"scaleIn\";\n      }\n    };\n\n    if (!mounted || !open) {\n      return null;\n    }\n\n    return (\n      <div\n        data-glass-component\n        data-testid={dataTestId}\n        className={cn(\n          isContained\n            ? \"relative flex w-full\"\n            : cn(\n                \"fixed inset-0 flex\",\n                variantClasses[variant],\n                backdropBlurClasses[backdropBlur]\n              ),\n          consciousness && \"consciousness-modal-container\",\n          adaptive &&\n            modalInsights?.urgency === \"high\" &&\n            \"consciousness-urgent-modal\",\n          eyeTracking && \"consciousness-eye-trackable\",\n          className\n        )}\n        style={isContained ? undefined : { zIndex }}\n        data-contained={isContained ? \"true\" : undefined}\n        data-consciousness-modal=\"true\"\n        data-consciousness-active={String(!!consciousness)}\n        data-modal-title={title}\n        data-modal-role={role}\n        data-modal-urgency={modalInsights?.urgency}\n        data-user-stress={modalInsights?.userStress}\n        data-interaction-count={interactionCount}\n      >\n        {/* Backdrop */}\n        {!isContained &&\n          (backdrop || (\n            <Motion\n              preset=\"fadeIn\"\n              duration={prefersReducedMotion ? 0 : undefined}\n              className=\"glass-absolute glass-inset-0 glass-surface-dark/50\"\n              style={{\n                backgroundColor:\n                  \"color-mix(in srgb, var(--glass-black) 40%, transparent)\",\n              }}\n              onClick={handleBackdropClick}\n              aria-hidden=\"true\"\n            />\n          ))}\n\n        {/* Modal content */}\n        <Motion\n          preset={getAnimationPreset()}\n          duration={prefersReducedMotion ? 0 : undefined}\n          className={cn(\n            \"relative w-full\",\n            sizeClasses[size],\n            isContained\n              ? \"max-h-none\"\n              : variant === \"fullscreen\"\n                ? \"h-full\"\n                : \"max-h-full\",\n            consciousness && \"consciousness-modal-content\",\n            predictive && modalInsights && \"consciousness-predictive-modal\",\n            adaptive &&\n              modalInsights?.urgency === \"high\" &&\n              \"consciousness-urgent-content\"\n          )}\n          data-consciousness-content=\"true\"\n          data-modal-complexity={modalInsights?.complexity}\n          data-time-spent={modalFocusTime ? Date.now() - modalFocusTime : 0}\n          style={style}\n        >\n          <FocusTrap\n            active={open && !isContained}\n            onEscape={handleEscapeKey}\n            lockScroll={false}\n          >\n            {material === \"liquid\" ? (\n              <LiquidGlassMaterial\n                ior={materialProps?.ior || 1.52}\n                thickness={materialProps?.thickness || 12}\n                tint={materialProps?.tint || { r: 0, g: 0, b: 0, a: 0.1 }}\n                variant={materialProps?.variant || \"regular\"}\n                quality={materialProps?.quality || \"high\"}\n                environmentAdaptation\n                motionResponsive\n                ref={ref}\n                tabIndex={-1}\n                {...a11yProps}\n                className={cn(\n                  \"w-full flex flex-col liquid-glass-modal-surface\",\n                  \"focus:outline-none\",\n                  isContained\n                    ? \"overflow-hidden\"\n                    : variant === \"fullscreen\"\n                      ? \"h-full\"\n                      : \"max-h-full overflow-hidden\",\n                  consciousness && \"consciousness-modal-glass\",\n                  eyeTracking && \"consciousness-eye-trackable-content\",\n                  adaptive &&\n                    modalInsights?.urgency === \"high\" &&\n                    \"consciousness-urgent-glass\",\n                  predictive &&\n                    modalInsights &&\n                    \"consciousness-predictive-glass\"\n                )}\n                style={{\n                  ...({\n                    \"--liquid-glass-depth-offset\":\n                      variant === \"drawer\" ? \"8px\" : \"12px\",\n                    \"--liquid-glass-tint-adaptive\":\n                      modalInsights?.urgency === \"high\"\n                        ? \"color-mix(in srgb, hsl(var(--glass-color-danger)) 15%, transparent)\"\n                        : \"color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n                  } as React.CSSProperties),\n                }}\n                data-liquid-glass-modal=\"true\"\n                data-modal-urgency={modalInsights?.urgency}\n                {...props}\n              >\n                {/* Header */}\n                {(title || description || showCloseButton) && (\n                  <div className={modalSectionClass}>\n                    <div className=\"glass-flex glass-items-start glass-justify-between\">\n                      <div className=\"glass-flex-1 glass-min-w-0\">\n                        {title && (\n                          <h2\n                            id={titleId}\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id={descriptionId}\n                            className=\"glass-text-sm glass-text-secondary-foreground glass-mt-1\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </div>\n                      {showCloseButton && (\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          iconOnly\n                          onClick={onClose}\n                          aria-label=\"Close modal\"\n                          className=\"glass-flex-shrink-0 glass-ml-4\"\n                        >\n                          \u00D7\n                        </GlassButton>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                {/* Content */}\n                <div className={cn(modalBodyClass, contentClassName)}>\n                  {children}\n                </div>\n\n                {/* Footer */}\n                {footer && <div className={modalFooterClass}>{footer}</div>}\n              </LiquidGlassMaterial>\n            ) : (\n              <OptimizedGlass\n                intent=\"neutral\"\n                elevation=\"level4\"\n                intensity=\"strong\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                animation=\"none\"\n                performanceMode=\"medium\"\n                ref={ref}\n                tabIndex={-1}\n                {...a11yProps}\n                className={cn(\n                  \"w-full flex flex-col glass-overlay-noise glass-edge glass-overlay-specular glass-typography-reset\",\n                  \"focus:outline-none\",\n                  isContained\n                    ? \"overflow-hidden\"\n                    : variant === \"fullscreen\"\n                      ? \"h-full\"\n                      : \"max-h-full overflow-hidden\",\n                  consciousness && \"consciousness-modal-glass\",\n                  eyeTracking && \"consciousness-eye-trackable-content\",\n                  adaptive &&\n                    modalInsights?.urgency === \"high\" &&\n                    \"consciousness-urgent-glass\",\n                  predictive &&\n                    modalInsights &&\n                    \"consciousness-predictive-glass\"\n                )}\n                {...props}\n              >\n                {/* Header */}\n                {(title || description || showCloseButton) && (\n                  <div className={modalSectionClass}>\n                    <div className=\"glass-flex glass-items-start glass-justify-between\">\n                      <div className=\"glass-flex-1 glass-min-w-0\">\n                        {title && (\n                          <h2\n                            id={titleId}\n                            className=\"glass-text-lg glass-font-semibold glass-text-primary\"\n                          >\n                            {title}\n                          </h2>\n                        )}\n                        {description && (\n                          <p\n                            id={descriptionId}\n                            className=\"glass-mt-1 glass-text-sm glass-text-secondary\"\n                          >\n                            {description}\n                          </p>\n                        )}\n                      </div>\n\n                      {showCloseButton && (\n                        <div className=\"glass-flex-shrink-0 glass-ml-4\">\n                          {closeButton || (\n                            <IconButton\n                              icon={\n                                <svg\n                                  className=\"glass-w-4 glass-h-4\"\n                                  fill=\"none\"\n                                  stroke=\"currentColor\"\n                                  viewBox=\"0 0 24 24\"\n                                >\n                                  <path\n                                    strokeLinecap=\"round\"\n                                    strokeLinejoin=\"round\"\n                                    strokeWidth={2}\n                                    d=\"M6 18L18 6M6 6l12 12\"\n                                  />\n                                </svg>\n                              }\n                              variant=\"ghost\"\n                              size=\"sm\"\n                              onClick={() => {\n                                // Record close button interaction\n                                if (consciousness && interactionRecorder) {\n                                  interactionRecorder.recordInteraction(\n                                    \"modal_close_button\",\n                                    {\n                                      modalTitle: title,\n                                      timestamp: Date.now(),\n                                    }\n                                  );\n                                }\n\n                                // Play spatial audio for button close\n                                if (spatialAudio && spatialAudioEngine) {\n                                  spatialAudioEngine.playSound(\n                                    \"modal-button-close\",\n                                    {\n                                      volume: 0.3,\n                                      position: \"right\",\n                                      reverb: 0.1,\n                                    }\n                                  );\n                                }\n\n                                onClose();\n                              }}\n                              aria-label=\"Close modal\"\n                              className={cn(\n                                consciousness && \"consciousness-close-button\",\n                                adaptive &&\n                                  modalInsights?.urgency === \"high\" &&\n                                  \"consciousness-urgent-close\"\n                              )}\n                              data-consciousness-close=\"true\"\n                            />\n                          )}\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                {/* Body */}\n                <div\n                  ref={contentRef}\n                  className={cn(\n                    modalBodyClass,\n                    consciousness && \"consciousness-modal-body\",\n                    eyeTracking && \"consciousness-eye-trackable-body\",\n                    adaptive &&\n                      modalInsights?.urgency === \"high\" &&\n                      \"consciousness-urgent-body\"\n                  )}\n                  tabIndex={0}\n                  data-consciousness-body=\"true\"\n                  data-content-complexity={modalInsights?.complexity}\n                  data-scroll-tracking={String(!!consciousness)}\n                  onScroll={(e) => {\n                    if (consciousness && interactionRecorder) {\n                      const scrollElement = e.target as HTMLElement;\n                      const scrollDepth =\n                        scrollElement.scrollTop /\n                          (scrollElement.scrollHeight -\n                            scrollElement.clientHeight) || 0;\n\n                      setContentEngagement((prev: any) => ({\n                        ...prev,\n                        scrollDepth: Math.max(prev.scrollDepth, scrollDepth),\n                        interactions: prev.interactions + 1,\n                      }));\n\n                      interactionRecorder.recordInteraction(\"modal_scroll\", {\n                        modalTitle: title,\n                        scrollDepth,\n                        timestamp: Date.now(),\n                      });\n                    }\n                  }}\n                  onClick={(e) => {\n                    if (consciousness && interactionRecorder) {\n                      setContentEngagement((prev: any) => ({\n                        ...prev,\n                        interactions: prev.interactions + 1,\n                      }));\n\n                      interactionRecorder.recordInteraction(\n                        \"modal_content_click\",\n                        {\n                          modalTitle: title,\n                          timestamp: Date.now(),\n                        }\n                      );\n                    }\n                  }}\n                >\n                  {children}\n\n                  {/* Modal Insights Display */}\n                  {predictive && modalInsights && (\n                    <div className=\"glass-mt-4 glass-p-3 glass-surface-primary/10 glass-radius-lg glass-border glass-border-primary/20 glass-text-xs\">\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-primary\">\n                          Modal Insights\n                        </span>\n                        <div className=\"glass-flex glass-gap-2\">\n                          <span\n                            className={cn(\n                              \"glass-px-2 glass-py-1 glass-radius-md\",\n                              modalInsights.urgency === \"high\"\n                                ? \"bg-red-500/20 text-red-300\"\n                                : modalInsights.urgency === \"medium\"\n                                  ? \"bg-yellow-500/20 text-yellow-300\"\n                                  : \"bg-green-500/20 text-green-300\"\n                            )}\n                          >\n                            {modalInsights.urgency} urgency\n                          </span>\n                          {modalInsights.userStress > 0.7 && (\n                            <span className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-primary/20 glass-text-secondary\">\n                              high stress\n                            </span>\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                  )}\n                </div>\n\n                {/* Footer */}\n                {footer && <div className={modalFooterClass}>{footer}</div>}\n              </OptimizedGlass>\n            )}\n          </FocusTrap>\n        </Motion>\n      </div>\n    );\n  }\n);\n\nGlassModal.displayName = \"GlassModal\";\n\n// Consciousness-Enhanced Modal Variants\nexport const GlassPredictiveModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal {...props} consciousness={true} predictive={true} />\n);\n\nexport const GlassAdaptiveModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal {...props} consciousness={true} adaptive={true} />\n);\n\nexport const GlassEyeTrackingModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal {...props} consciousness={true} eyeTracking={true} />\n);\n\nexport const GlassSpatialAudioModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal {...props} consciousness={true} spatialAudio={true} />\n);\n\nexport const GlassAchievementModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal {...props} consciousness={true} trackAchievements={true} />\n);\n\nexport const GlassConsciousnessModal: React.FC<GlassModalProps> = (props) => (\n  <GlassModal\n    {...props}\n    consciousness={true}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\n// Re-export dialog and drawer from their dedicated modules for compatibility\nexport { GlassDialog } from \"./GlassDialog\";\nexport type { GlassDialogProps } from \"./GlassDialog\";\nexport { GlassDrawer } from \"./GlassDrawer\";\nexport type { GlassDrawerProps } from \"./GlassDrawer\";\n\n// (Note) Dialog and Drawer live in their dedicated files.\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassPopoverMenuItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  shortcut?: React.ReactNode;\n  selected?: boolean;\n  disabled?: boolean;\n  onSelect?: () => void;\n}\n\nexport interface LiquidGlassPopoverMenuProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  open: boolean;\n  items: LiquidGlassPopoverMenuItem[];\n  onOpenChange?: (open: boolean) => void;\n  sourceId?: string;\n}\n\nexport const LiquidGlassPopoverMenu = forwardRef<\n  HTMLDivElement,\n  LiquidGlassPopoverMenuProps\n>(({ open, items, onOpenChange, sourceId, className, ...props }, ref) => {\n  if (!open) return null;\n  return (\n    <LiquidGlassMaterial\n      ref={ref}\n      material=\"liquid\"\n      radius=\"xl\"\n      className={cn(\n        \"liquid-glass-popover-menu glass-min-w-56 glass-p-2\",\n        className\n      )}\n      data-liquid-glass-popover-menu=\"true\"\n      data-source-id={sourceId}\n      {...props}\n    >\n      <style>{`\n          .liquid-glass-popover-menu button {\n            background-color: rgba(15, 23, 42, 0.72) !important;\n            border: 1px solid rgba(255, 255, 255, 0.24) !important;\n            color: rgba(255, 255, 255, 0.95) !important;\n          }\n\n          .liquid-glass-popover-menu button span {\n            color: rgba(255, 255, 255, 0.95) !important;\n          }\n\n          .liquid-glass-popover-menu button .glass-text-secondary {\n            color: rgba(255, 255, 255, 0.78) !important;\n          }\n        `}</style>\n      <div role=\"menu\" className=\"glass-flex glass-flex-col glass-gap-1\">\n        {items.map((item) => (\n          <button\n            key={item.id}\n            type=\"button\"\n            role=\"menuitem\"\n            disabled={item.disabled}\n            aria-checked={item.selected}\n            className={cn(\n              \"glass-flex glass-items-center glass-gap-2 glass-radius-lg glass-px-3 glass-py-2 glass-text-left\",\n              item.selected && \"glass-surface-primary\"\n            )}\n            onClick={() => {\n              item.onSelect?.();\n              onOpenChange?.(false);\n            }}\n          >\n            {item.icon}\n            <span className=\"glass-flex-1\">{item.label}</span>\n            {item.shortcut && (\n              <span className=\"glass-text-xs glass-text-secondary\">\n                {item.shortcut}\n              </span>\n            )}\n          </button>\n        ))}\n      </div>\n    </LiquidGlassMaterial>\n  );\n});\n\nLiquidGlassPopoverMenu.displayName = \"LiquidGlassPopoverMenu\";\n", "\"use client\";\nimport { GlassInput } from \"./GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { Check, Minus } from \"@/icons\";\nimport React, { forwardRef } from \"react\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport {\n  createFormFieldA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassCheckboxProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n  /** Whether the checkbox is checked */\n  checked?: boolean;\n  /** Indeterminate state (partially checked) */\n  indeterminate?: boolean;\n  /** Callback when the checkbox state changes */\n  onCheckedChange?: (checked: boolean) => void;\n  /** Size of the checkbox */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n  /** Label text */\n  label?: string;\n  /** Description text */\n  description?: string;\n  /** Position of label relative to checkbox */\n  labelPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n  /** Whether the checkbox is disabled */\n  disabled?: boolean;\n  /** Loading state */\n  loading?: boolean;\n  /** Whether to show focus ring */\n  focusRing?: boolean;\n  /** Custom check icon */\n  checkIcon?: React.ReactNode;\n  /** Custom indeterminate icon */\n  indeterminateIcon?: React.ReactNode;\n  /** Error message */\n  error?: string;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** Accessible name for the checkbox */\n  \"aria-label\"?: string;\n  /** ID of element that labels the checkbox */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the checkbox */\n  \"aria-describedby\"?: string;\n}\n\nexport const GlassCheckbox = forwardRef<HTMLInputElement, GlassCheckboxProps>(\n  (\n    {\n      checked,\n      indeterminate = false,\n      onCheckedChange,\n      onChange,\n      size = \"md\",\n      variant = \"default\",\n      label,\n      description,\n      labelPosition = \"right\",\n      disabled = false,\n      loading = false,\n      focusRing = true,\n      checkIcon,\n      indeterminateIcon,\n      error,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"data-testid\": dataTestId,\n      className,\n      id,\n      required,\n      defaultChecked,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldAnimate = isMotionSafe && !prefersReducedMotion;\n\n    // Generate unique IDs for accessibility\n    const checkboxId = useA11yId(\"glass-checkbox\");\n    const finalId = id || checkboxId;\n    const labelId = label ? useA11yId(\"glass-checkbox-label\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-checkbox-description\")\n      : undefined;\n    const errorId = error ? useA11yId(\"glass-checkbox-error\") : undefined;\n\n    const isInvalid = !!error;\n    const isRequired = required || false;\n    const isControlled = checked !== undefined;\n    const [internalChecked, setInternalChecked] = React.useState(\n      Boolean(defaultChecked)\n    );\n    const isChecked = isControlled ? Boolean(checked) : internalChecked;\n\n    // Create accessibility attributes\n    const a11yProps = createFormFieldA11y({\n      id: finalId,\n      label: !ariaLabelledBy && !labelId ? ariaLabel || label : undefined,\n      description: description,\n      error: error,\n      required: isRequired,\n      invalid: isInvalid,\n      disabled: disabled || loading,\n      labelId: ariaLabelledBy || labelId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      errorId: errorId,\n    });\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (error) {\n        announceToScreenReader(`Checkbox error: ${error}`, \"assertive\");\n      }\n    }, [error]);\n\n    const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n      if (disabled || loading) return;\n\n      const newChecked = event.target.checked;\n      if (!isControlled) {\n        setInternalChecked(newChecked);\n      }\n      onCheckedChange?.(newChecked);\n      onChange?.(event);\n    };\n\n    const sizeConfig = {\n      sm: {\n        box: \"glass-h-4 glass-w-4\",\n        icon: \"glass-h-3 glass-w-3\",\n        text: \"glass-text-xs\",\n        gap: \"glass-gap-2\",\n      },\n      md: {\n        box: \"glass-h-5 glass-w-5\",\n        icon: \"glass-h-4 glass-w-4\",\n        text: \"glass-text-sm\",\n        gap: \"glass-gap-3\",\n      },\n      lg: {\n        box: \"glass-h-6 glass-w-6\",\n        icon: \"glass-h-5 glass-w-5\",\n        text: \"glass-text-base\",\n        gap: \"glass-gap-4\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        checked: \"bg-primary border-primary/20 text-primary-foreground\",\n        unchecked: \"bg-background/50 border border-border/20\",\n        hover: \"hover:border-primary/50\",\n      },\n      success: {\n        checked: \"bg-green-500 border-green-400/20 glass-text-primary\",\n        unchecked: \"bg-background/50 border border-border/20\",\n        hover: \"hover:border-green-400/50\",\n      },\n      warning: {\n        checked: \"bg-amber-500 border-amber-400/20 glass-text-primary\",\n        unchecked: \"bg-background/50 border border-border/20\",\n        hover: \"hover:border-amber-400/50\",\n      },\n      error: {\n        checked: \"bg-red-500 border-red-400/20 glass-text-primary\",\n        unchecked: \"bg-background/50 border border-border/20\",\n        hover: \"hover:border-red-400/50\",\n      },\n      info: {\n        checked: \"bg-blue-500 border-blue-400/20 glass-text-primary\",\n        unchecked: \"bg-background/50 border border-border/20\",\n        hover: \"hover:border-blue-400/50\",\n      },\n    };\n\n    const config = sizeConfig[size];\n    const colors = variantConfig[variant];\n    const isCheckedOrIndeterminate = isChecked || indeterminate;\n\n    const checkboxElement = (\n      <div\n        className=\"glass-relative glass-inline-flex glass-items-center\"\n        data-testid={dataTestId || \"glasscheckbox\"}\n      >\n        {/* Hidden input */}\n        <input\n          ref={ref}\n          type=\"checkbox\"\n          {...a11yProps}\n          checked={isControlled ? isChecked : undefined}\n          defaultChecked={!isControlled ? defaultChecked : undefined}\n          onChange={handleChange}\n          disabled={disabled || loading}\n          className=\"glass-sr-only glass-touch-target glass-contrast-guard\"\n          aria-label={\n            ariaLabel || label || a11yProps[\"aria-label\"] || \"Checkbox\"\n          }\n          {...props}\n        />\n\n        {/* Visual checkbox */}\n        <OptimizedGlass\n          elevation={isCheckedOrIndeterminate ? \"level2\" : \"level1\"}\n          intensity=\"medium\"\n          depth={2}\n          tint={isCheckedOrIndeterminate ? \"primary\" : \"neutral\"}\n          border=\"subtle\"\n          animation={\n            shouldAnimate && respectMotionPreference ? \"float\" : \"none\"\n          }\n          performanceMode=\"medium\"\n          liftOnHover\n          press\n          className={cn(\n            \"glass-checkbox-box relative inline-flex items-center justify-center\",\n            \"cursor-pointer group glass-radius-lg transition-all duration-200\",\n\n            // Size\n            config.box,\n\n            // Disabled state\n            disabled && \"opacity-50 cursor-not-allowed\",\n\n            // Loading state\n            loading && \"cursor-wait\",\n\n            // Focus styles\n            focusRing && [\n              \"focus-within:outline-none focus-within:ring-2 focus-within:ring-offset-2\",\n              \"focus-within:ring-primary focus-within:ring-offset-background\",\n            ],\n\n            // Error state\n            error && !isCheckedOrIndeterminate && \"ring-2 ring-destructive/50\"\n          )}\n          role=\"checkbox\"\n          aria-checked={!!isChecked}\n          aria-busy={loading || undefined}\n          aria-label={\n            a11yProps[\"aria-label\"] || label || description || \"checkbox\"\n          }\n          aria-labelledby={a11yProps[\"aria-labelledby\"]}\n          aria-describedby={a11yProps[\"aria-describedby\"]}\n        >\n          {/* Check/indeterminate icon */}\n          <Motion\n            preset={\n              shouldAnimate && respectMotionPreference ? \"scaleIn\" : \"none\"\n            }\n            className={cn(\n              \"flex items-center justify-center\",\n              config.icon,\n              isCheckedOrIndeterminate ? \"opacity-100\" : \"opacity-0\"\n            )}\n          >\n            {loading && (\n              <div\n                className={cn(\n                  shouldAnimate && respectMotionPreference\n                    ? \"animate-spin\"\n                    : \"\",\n                  \"glass-radius-full border-2 border-current border-t-transparent\",\n                  size === \"sm\"\n                    ? \"glass-w-2 glass-h-2\"\n                    : size === \"md\"\n                      ? \"glass-w-3 glass-h-3\"\n                      : \"glass-w-4 glass-h-4\"\n                )}\n              />\n            )}\n\n            {!loading &&\n              indeterminate &&\n              (indeterminateIcon || (\n                <Minus className={config.icon} strokeWidth={3} />\n              ))}\n\n            {!loading &&\n              !indeterminate &&\n              isChecked &&\n              (checkIcon || <Check className={config.icon} strokeWidth={3} />)}\n          </Motion>\n        </OptimizedGlass>\n      </div>\n    );\n\n    const labelElement = label && (\n      <label\n        id={labelId}\n        htmlFor={finalId}\n        className={cn(\n          \"glass-checkbox-label cursor-pointer font-medium text-foreground\",\n          config.text,\n          disabled && \"cursor-not-allowed opacity-70\",\n          isRequired &&\n            'after:content-[\"*\"] after:glass-ml-1 after:text-destructive'\n        )}\n      >\n        {label}\n      </label>\n    );\n\n    const descriptionElement = description && (\n      <p\n        id={descriptionId}\n        className={cn(\n          \"glass-checkbox-description glass-text-secondary\",\n          size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\",\n          disabled && \"opacity-70\"\n        )}\n      >\n        {description}\n      </p>\n    );\n\n    const errorElement = error && (\n      <p\n        id={errorId}\n        className={cn(\n          \"glass-checkbox-error text-destructive\",\n          size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n        )}\n        role=\"alert\"\n        aria-live=\"polite\"\n      >\n        {error}\n      </p>\n    );\n\n    // Render based on label position\n    if (!label && !description && !error) {\n      return React.cloneElement(checkboxElement, {\n        className: cn(checkboxElement.props.className, className),\n      });\n    }\n\n    return (\n      <div\n        className={cn(\n          \"glass-flex\",\n          {\n            \"glass-flex-row glass-items-start\":\n              labelPosition === \"left\" || labelPosition === \"right\",\n            \"glass-flex-col glass-items-start\":\n              labelPosition === \"top\" || labelPosition === \"bottom\",\n          },\n          config.gap,\n          className\n        )}\n        data-testid={dataTestId || \"glasscheckbox\"}\n      >\n        {(labelPosition === \"left\" || labelPosition === \"right\") && (\n          <div className=\"glass-flex glass-items-start glass-pt-0.5\">\n            {checkboxElement}\n          </div>\n        )}\n\n        {(labelPosition === \"top\" || labelPosition === \"bottom\") &&\n          checkboxElement}\n\n        <div className=\"glass-gap-1 glass-min-w-0 glass-flex-1\">\n          {labelElement}\n          {descriptionElement}\n          {errorElement}\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassCheckbox.displayName = \"GlassCheckbox\";\n\nexport default GlassCheckbox;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  createFormFieldA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\n\nexport interface GlassCheckboxOption {\n  value: string;\n  label: string;\n  description?: string;\n  disabled?: boolean;\n  icon?: React.ReactNode;\n}\n\nexport interface GlassCheckboxGroupProps\n  extends Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    \"onChange\" | \"defaultValue\"\n  > {\n  /** Currently selected values */\n  value?: string[];\n  /** Default selected values (uncontrolled) */\n  defaultValue?: string[];\n  /** Callback when selection changes */\n  onChange?: (value: string[]) => void;\n  /** Checkbox options */\n  options?: GlassCheckboxOption[];\n  /** Whether the checkbox group is disabled */\n  disabled?: boolean;\n  /** Size of the checkboxes */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n  /** Orientation of the checkbox group */\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Label for the checkbox group */\n  label?: string;\n  /** Description text */\n  description?: string;\n  /** Error message */\n  error?: string;\n  /** Whether the checkbox group is required */\n  required?: boolean;\n  /** Minimum number of selections required */\n  minSelections?: number;\n  /** Maximum number of selections allowed */\n  maxSelections?: number;\n  /** Custom checkbox item component */\n  renderItem?: (\n    option: GlassCheckboxOption,\n    index: number,\n    isSelected: boolean\n  ) => React.ReactNode;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** Accessible label for the checkbox group */\n  \"aria-label\"?: string;\n  /** ID of element that labels the checkbox group */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the checkbox group */\n  \"aria-describedby\"?: string;\n}\n\nexport interface GlassCheckboxItemProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Value of this checkbox item */\n  value: string;\n  /** Whether this item is checked */\n  checked?: boolean;\n  /** Whether this item is disabled */\n  disabled?: boolean;\n  /** Whether this item is indeterminate */\n  indeterminate?: boolean;\n  /** Child content */\n  children?: React.ReactNode;\n  /** Callback when checked state changes */\n  onChange?: (checked: boolean) => void;\n}\n\n// Context for checkbox group communication\ninterface CheckboxGroupContext {\n  selectedValues: string[];\n  onChange?: (value: string, checked: boolean) => void;\n  disabled?: boolean;\n  size: \"sm\" | \"md\" | \"lg\";\n  variant: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n  name: string;\n  respectMotionPreference: boolean;\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContext | null>(null);\n\nconst useCheckboxGroup = () => {\n  const context = useContext(CheckboxGroupContext);\n  if (!context) {\n    throw new Error(\"CheckboxItem must be used within CheckboxGroup\");\n  }\n  return context;\n};\n\nexport const GlassCheckboxItem = forwardRef<\n  HTMLDivElement,\n  GlassCheckboxItemProps\n>(\n  (\n    {\n      value,\n      checked,\n      disabled: itemDisabled,\n      indeterminate = false,\n      children,\n      className,\n      onChange,\n      onClick,\n      onKeyDown,\n      ...props\n    },\n    ref\n  ) => {\n    const context = useCheckboxGroup();\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Use context if available, otherwise standalone\n    const isSelected = context\n      ? context.selectedValues.includes(value)\n      : checked || false;\n    const isDisabled = context\n      ? context.disabled || itemDisabled\n      : itemDisabled;\n    const size = context?.size || \"md\";\n    const variant = context?.variant || \"default\";\n    const respectMotionPreference = context?.respectMotionPreference ?? true;\n\n    const itemId = useA11yId(\"glass-checkbox-item\");\n\n    const sizeConfig = {\n      sm: {\n        checkbox: \"glass-w-4 glass-h-4\",\n        check: \"glass-w-2 glass-h-2\",\n        text: \"glass-text-xs\",\n        gap: \"glass-gap-2\",\n      },\n      md: {\n        checkbox: \"glass-w-5 glass-h-5\",\n        check: \"glass-w-2 glass-h-2\",\n        text: \"glass-text-sm\",\n        gap: \"glass-gap-3\",\n      },\n      lg: {\n        checkbox: \"glass-w-6 glass-h-6\",\n        check: \"glass-w-3 glass-h-3\",\n        text: \"glass-text-base\",\n        gap: \"glass-gap-4\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        checkbox:\n          isSelected || indeterminate\n            ? \"bg-primary/20 border-primary/40\"\n            : \"bg-background/50 border-border/20\",\n        check: \"bg-primary\",\n        focus: \"focus:ring-primary/50\",\n      },\n      success: {\n        checkbox:\n          isSelected || indeterminate\n            ? \"glass-surface-success/20 glass-border-success/40\"\n            : \"bg-background/50 border-border/20\",\n        check: \"glass-surface-success\",\n        focus: \"focus:ring-success/50\",\n      },\n      warning: {\n        checkbox:\n          isSelected || indeterminate\n            ? \"glass-surface-warning/20 glass-border-warning/40\"\n            : \"bg-background/50 border-border/20\",\n        check: \"glass-surface-warning\",\n        focus: \"focus:ring-warning/50\",\n      },\n      error: {\n        checkbox:\n          isSelected || indeterminate\n            ? \"glass-surface-danger/20 glass-border-danger/40\"\n            : \"bg-background/50 border-border/20\",\n        check: \"glass-surface-danger\",\n        focus: \"focus:ring-danger/50\",\n      },\n      info: {\n        checkbox:\n          isSelected || indeterminate\n            ? \"bg-blue-500/20 border-blue-400/40\"\n            : \"bg-background/50 border-border/20\",\n        check: \"bg-blue-500\",\n        focus: \"glass-focus-ring-blue-500/50\",\n      },\n    };\n\n    const config = sizeConfig[size];\n    const colors = variantConfig[variant];\n\n    const handleClick = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        if (isDisabled) return;\n\n        const newChecked = !isSelected;\n\n        if (context) {\n          context.onChange?.(value, newChecked);\n        } else {\n          onChange?.(newChecked);\n        }\n\n        onClick?.(e);\n        play(newChecked ? \"check\" : \"uncheck\");\n\n        // Announce selection for screen readers\n        const childText = typeof children === \"string\" ? children : value;\n        announceToScreenReader(\n          `${childText} ${newChecked ? \"checked\" : \"unchecked\"}`,\n          \"polite\"\n        );\n      },\n      [\n        isDisabled,\n        isSelected,\n        context,\n        value,\n        onChange,\n        onClick,\n        play,\n        children,\n      ]\n    );\n\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent<HTMLDivElement>) => {\n        if (e.key === \" \" || e.key === \"Enter\") {\n          e.preventDefault();\n          handleClick(e as any);\n        }\n        onKeyDown?.(e);\n      },\n      [handleClick, onKeyDown]\n    );\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={0.5}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation={shouldAnimate && respectMotionPreference ? \"float\" : \"none\"}\n        performanceMode=\"high\"\n        liftOnHover={!isDisabled}\n        className={cn(\n          \"glass-checkbox-item flex items-center cursor-pointer\",\n          \"glass-p-3 glass-radius-lg border glass-backdrop-blur-md transition-all duration-200\",\n          \"focus:outline-none glass-focus\",\n          config.gap,\n          isDisabled && \"opacity-50 cursor-not-allowed\",\n          (isSelected || indeterminate) && \"ring-2 ring-current/20\",\n          className\n        )}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        tabIndex={isDisabled ? -1 : 0}\n        role=\"checkbox\"\n        aria-checked={indeterminate ? \"mixed\" : isSelected}\n        aria-disabled={isDisabled}\n        id={itemId}\n        {...props}\n      >\n        {/* Checkbox square */}\n        <Motion\n          preset={shouldAnimate && respectMotionPreference ? \"scaleIn\" : \"none\"}\n        >\n          <OptimizedGlass\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={1}\n            tint=\"neutral\"\n            border=\"subtle\"\n            className={cn(\n              \"glass-checkbox-square relative glass-radius-md border glass-backdrop-blur-md\",\n              \"flex items-center justify-center transition-all duration-200\",\n              config.checkbox,\n              colors.checkbox,\n              colors.focus\n            )}\n          >\n            {/* Checkbox indicator */}\n            {(isSelected || indeterminate) && (\n              <Motion\n                preset={\n                  shouldAnimate && respectMotionPreference ? \"scaleIn\" : \"none\"\n                }\n                className={cn(\n                  \"glass-checkbox-indicator flex items-center justify-center glass-text-primary\",\n                  config.check\n                )}\n              >\n                {indeterminate ? (\n                  // Indeterminate indicator (horizontal line)\n                  <div className=\"glass-w-2 glass-h-0-5 glass-bg-transparent glass-radius-full\" />\n                ) : (\n                  // Check mark\n                  <svg\n                    className=\"glass-w-full glass-h-full\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    viewBox=\"0 0 24 24\"\n                    strokeWidth={3}\n                  >\n                    <path\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                      d=\"M5 13l4 4L19 7\"\n                    />\n                  </svg>\n                )}\n              </Motion>\n            )}\n\n            {/* Inner glow effect */}\n            <div className=\"glass-absolute glass-inset-0 glass-radius-md glass-gradient-primary glass-gradient-primary glass-via-transparent glass-gradient-primary\" />\n          </OptimizedGlass>\n        </Motion>\n\n        {/* Content */}\n        <div className=\"glass-flex-1 glass-min-w-0\">{children}</div>\n\n        {/* Hidden input for form submission */}\n        <input\n          type=\"checkbox\"\n          name={context?.name}\n          value={value}\n          checked={isSelected}\n          onChange={() => {}} // Handled by onClick\n          disabled={isDisabled}\n          className=\"glass-sr-only\"\n          tabIndex={-1}\n        />\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassCheckboxItem.displayName = \"GlassCheckboxItem\";\n\nexport const GlassCheckboxGroup = forwardRef<\n  HTMLDivElement,\n  GlassCheckboxGroupProps\n>(\n  (\n    {\n      value,\n      defaultValue = [],\n      onChange,\n      options = [],\n      disabled = false,\n      size = \"md\",\n      variant = \"default\",\n      orientation = \"vertical\",\n      label,\n      description,\n      error,\n      required = false,\n      minSelections,\n      maxSelections,\n      renderItem,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      className,\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n\n    // Generate unique IDs for accessibility\n    const checkboxGroupId = useA11yId(\"glass-checkbox-group\");\n    const finalId = id || checkboxGroupId;\n    const labelId = label ? useA11yId(\"glass-checkbox-group-label\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-checkbox-group-description\")\n      : undefined;\n    const errorId = error ? useA11yId(\"glass-checkbox-group-error\") : undefined;\n    const name = useA11yId(\"glass-checkbox-group-name\");\n\n    const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n    const currentValue = value !== undefined ? value : internalValue;\n\n    const isInvalid =\n      !!error ||\n      (minSelections !== undefined && currentValue.length < minSelections) ||\n      (maxSelections !== undefined && currentValue.length > maxSelections);\n\n    // Create accessibility attributes\n    const a11yProps = createFormFieldA11y({\n      id: finalId,\n      label: !ariaLabelledBy && !labelId ? ariaLabel || label : undefined,\n      description: description,\n      error: error,\n      required: required,\n      invalid: isInvalid,\n      disabled: disabled,\n      labelId: ariaLabelledBy || labelId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      errorId: errorId,\n    });\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (error) {\n        announceToScreenReader(`Checkbox group error: ${error}`, \"assertive\");\n      }\n    }, [error]);\n\n    const handleChange = useCallback(\n      (itemValue: string, checked: boolean) => {\n        let newValue: string[];\n\n        if (checked) {\n          if (maxSelections && currentValue.length >= maxSelections) {\n            // Don't allow more selections than maximum\n            return;\n          }\n          newValue = [...currentValue, itemValue];\n        } else {\n          if (minSelections && currentValue.length <= minSelections) {\n            // Don't allow fewer selections than minimum\n            return;\n          }\n          newValue = currentValue.filter((v: any) => v !== itemValue);\n        }\n\n        if (value === undefined) {\n          setInternalValue(newValue);\n        }\n        onChange?.(newValue);\n      },\n      [value, currentValue, onChange, minSelections, maxSelections]\n    );\n\n    const contextValue: CheckboxGroupContext = {\n      selectedValues: currentValue,\n      onChange: handleChange,\n      disabled,\n      size,\n      variant,\n      name,\n      respectMotionPreference,\n    };\n\n    const sizeConfig = {\n      sm: {\n        label: \"glass-text-xs\",\n        gap: \"glass-gap-2\",\n      },\n      md: {\n        label: \"glass-text-sm\",\n        gap: \"glass-gap-3\",\n      },\n      lg: {\n        label: \"glass-text-base\",\n        gap: \"glass-gap-4\",\n      },\n    };\n\n    const config = sizeConfig[size];\n\n    // Get validation error message\n    const getValidationError = () => {\n      if (minSelections && currentValue.length < minSelections) {\n        return `Please select at least ${minSelections} option${minSelections > 1 ? \"s\" : \"\"}`;\n      }\n      if (maxSelections && currentValue.length > maxSelections) {\n        return `Please select no more than ${maxSelections} option${maxSelections > 1 ? \"s\" : \"\"}`;\n      }\n      return error;\n    };\n\n    const validationError = getValidationError();\n\n    return (\n      <CheckboxGroupContext.Provider value={contextValue}>\n        <div className={cn(\"glass-checkbox-group-container\", className)}>\n          {/* Label */}\n          {label && (\n            <label\n              id={labelId}\n              className={cn(\n                \"glass-checkbox-group-label block font-medium text-foreground mb-3\",\n                config.label,\n                required &&\n                  'after:content-[\"*\"] after:glass-ml-1 after:text-destructive'\n              )}\n            >\n              {label}\n            </label>\n          )}\n\n          {/* Checkbox Group */}\n          <div\n            ref={ref}\n            id={finalId}\n            role=\"group\"\n            className={cn(\n              \"glass-checkbox-group flex\",\n              orientation === \"horizontal\" ? \"flex-row flex-wrap\" : \"flex-col\",\n              config.gap,\n              disabled && \"opacity-50\",\n              validationError &&\n                \"ring-2 ring-destructive/50 glass-radius-lg glass-p-2\",\n              className\n            )}\n            {...a11yProps}\n            aria-invalid={isInvalid || undefined}\n            aria-required={required || undefined}\n            {...props}\n          >\n            {options.map((option, index) => {\n              if (renderItem) {\n                return (\n                  <div key={option.value}>\n                    {renderItem(\n                      option,\n                      index,\n                      currentValue.includes(option.value)\n                    )}\n                  </div>\n                );\n              }\n\n              return (\n                <GlassCheckboxItem\n                  key={option.value}\n                  value={option.value}\n                  disabled={option.disabled}\n                >\n                  <div className=\"glass-flex glass-items-start glass-gap-3\">\n                    {option.icon && (\n                      <div className=\"glass-flex-shrink-0 glass-mt-0-5\">\n                        {option.icon}\n                      </div>\n                    )}\n                    <div className=\"glass-flex-1 glass-min-w-0\">\n                      <div\n                        className={cn(\n                          \"font-medium text-foreground\",\n                          config.label\n                        )}\n                      >\n                        {option.label}\n                      </div>\n                      {option.description && (\n                        <div\n                          className={cn(\n                            \"glass-text-secondary glass-mt-1\",\n                            size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n                          )}\n                        >\n                          {option.description}\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </GlassCheckboxItem>\n              );\n            })}\n          </div>\n\n          {/* Selection count indicator */}\n          {(minSelections || maxSelections) && (\n            <div\n              className={cn(\n                \"glass-mt-2 glass-text-secondary\",\n                size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n              )}\n            >\n              Selected: {currentValue.length}\n              {maxSelections && ` / ${maxSelections}`}\n              {minSelections && !maxSelections && ` (min: ${minSelections})`}\n            </div>\n          )}\n\n          {/* Description */}\n          {description && (\n            <p\n              id={descriptionId}\n              className={cn(\n                \"glass-checkbox-group-description glass-text-secondary glass-mt-2\",\n                size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n              )}\n            >\n              {description}\n            </p>\n          )}\n\n          {/* Error message */}\n          {validationError && (\n            <p\n              id={errorId}\n              className={cn(\n                \"glass-checkbox-group-error text-destructive glass-mt-2\",\n                size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n              )}\n              role=\"alert\"\n              aria-live=\"polite\"\n            >\n              {validationError}\n            </p>\n          )}\n        </div>\n      </CheckboxGroupContext.Provider>\n    );\n  }\n);\n\nGlassCheckboxGroup.displayName = \"GlassCheckboxGroup\";\n\nexport default GlassCheckboxGroup;\n", "\"use client\";\nimport type { AnimationProps, Transition } from \"framer-motion\";\nimport { useReducedMotion } from \"./useReducedMotion\";\n\nexport type MotionAwareEase =\n  | string\n  | number[]\n  | ((progress: number) => number);\n\nexport type MotionAwareNormalizedEase =\n  | \"easeIn\"\n  | \"easeOut\"\n  | \"easeInOut\"\n  | \"linear\"\n  | number[]\n  | ((progress: number) => number);\n\nexport type MotionAwareTransition = Transition;\n\nexport type MotionAwareAnimationProps = AnimationProps &\n  Record<string, unknown>;\n\nexport interface MotionAwareAnimationConfig {\n  getAnimationProps: (\n    props?: MotionAwareAnimationProps\n  ) => MotionAwareAnimationProps;\n  getTransition: (\n    duration?: number,\n    easing?: MotionAwareEase\n  ) => MotionAwareTransition;\n}\n\nexport interface AnimationDurationConfig {\n  duration: number;\n}\n\nexport function useMotionAwareAnimation(): MotionAwareAnimationConfig {\n  const prefersReducedMotion = useReducedMotion();\n\n  const getAnimationProps = (\n    props: MotionAwareAnimationProps = {}\n  ): MotionAwareAnimationProps => {\n    if (prefersReducedMotion) {\n      return {\n        ...props,\n        // Use a zero-duration transition compatible with Framer Motion\n        transition: { duration: 0 },\n        animate: (props?.initial || {}) as AnimationProps[\"animate\"],\n      };\n    }\n    return props;\n  };\n\n  // Normalize easing to Framer Motion-friendly values\n  const normalizeEase = (\n    easing: MotionAwareEase\n  ): MotionAwareNormalizedEase | \"spring\" => {\n    if (typeof easing === \"string\") {\n      const e = easing.trim().toLowerCase();\n      // Convert common CSS names to Framer Motion names\n      if (e === \"ease-in\") return \"easeIn\";\n      if (e === \"ease-out\") return \"easeOut\";\n      if (e === \"ease-in-out\" || e === \"ease\") return \"easeInOut\";\n      if (e === \"linear\") return \"linear\";\n      if (e === \"spring\") return \"spring\";\n      // Support CSS cubic-bezier() by converting to an array that Framer understands\n      if (e.startsWith(\"cubic-bezier(\") && e.endsWith(\")\")) {\n        const nums = e\n          .slice(\"cubic-bezier(\".length, -1)\n          .split(\",\")\n          .map((n) => parseFloat(n.trim()))\n          .filter((n) => Number.isFinite(n));\n        if (nums.length === 4) return nums as unknown as number[];\n      }\n      // Fallback\n      return \"easeInOut\";\n    }\n    return easing;\n  };\n\n  const getTransition = (\n    duration: number = 0.3,\n    easing: MotionAwareEase = \"easeOut\"\n  ): MotionAwareTransition => {\n    if (prefersReducedMotion) {\n      return { duration: 0 };\n    }\n    const normalized = normalizeEase(easing);\n    if (normalized === \"spring\") {\n      // Let callers provide additional spring settings if needed elsewhere\n      return { type: \"spring\" };\n    }\n    return { duration, ease: normalized };\n  };\n\n  return {\n    getAnimationProps,\n    getTransition,\n  };\n}\n\nexport function useAnimationDuration(\n  baseDuration: number = 200\n): AnimationDurationConfig {\n  const prefersReducedMotion = useReducedMotion();\n\n  return {\n    duration: prefersReducedMotion ? 0 : baseDuration,\n  };\n}\n\nexport function useMotionPreference() {\n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate = !prefersReducedMotion;\n\n  return { shouldAnimate, prefersReducedMotion };\n}\n", "/**\n * AuraGlass Sound Design System\n * Haptic and audio feedback for glass interactions\n */\nimport {\n  getSafeDocument,\n  getSafeNavigator,\n  getSafeWindow,\n  isBrowser,\n} from \"./env\";\n\ninterface SoundConfig {\n  url?: string;\n  volume?: number;\n  pitch?: number;\n  duration?: number;\n  delay?: number;\n  reverb?: number;\n  pan?: number;\n}\n\ninterface HapticPattern {\n  intensity: number;\n  duration: number;\n  delay?: number;\n  pattern?: number[];\n}\n\nexport class GlassSoundDesign {\n  private static instance: GlassSoundDesign;\n  private audioContext: AudioContext | null = null;\n  private sounds: Map<string, AudioBuffer> = new Map();\n  private oscillators: Map<string, OscillatorNode> = new Map();\n  private gainNodes: Map<string, GainNode> = new Map();\n  private enabled: boolean = true;\n  private hapticEnabled: boolean = true;\n\n  // Predefined glass sounds\n  private readonly glassSounds = {\n    tap: {\n      frequency: 800,\n      duration: 50,\n      volume: 0.3,\n      type: \"sine\" as OscillatorType,\n    },\n    hover: {\n      frequency: 400,\n      duration: 30,\n      volume: 0.1,\n      type: \"triangle\" as OscillatorType,\n    },\n    slide: {\n      frequency: 600,\n      duration: 100,\n      volume: 0.2,\n      type: \"sine\" as OscillatorType,\n    },\n    break: {\n      frequency: 1200,\n      duration: 200,\n      volume: 0.5,\n      type: \"sawtooth\" as OscillatorType,\n    },\n    morph: {\n      frequency: 500,\n      duration: 150,\n      volume: 0.25,\n      type: \"sine\" as OscillatorType,\n    },\n    ripple: {\n      frequency: 300,\n      duration: 300,\n      volume: 0.15,\n      type: \"sine\" as OscillatorType,\n    },\n    success: {\n      frequency: 880,\n      duration: 150,\n      volume: 0.4,\n      type: \"sine\" as OscillatorType,\n    },\n    error: {\n      frequency: 200,\n      duration: 200,\n      volume: 0.4,\n      type: \"square\" as OscillatorType,\n    },\n    notification: {\n      frequency: 660,\n      duration: 100,\n      volume: 0.3,\n      type: \"sine\" as OscillatorType,\n    },\n  };\n\n  // Haptic patterns\n  private readonly hapticPatterns = {\n    tap: { intensity: 1, duration: 10 },\n    hover: { intensity: 0.3, duration: 5 },\n    slide: { intensity: 0.5, duration: 20 },\n    success: { intensity: 0.8, duration: 50, pattern: [10, 10, 10] },\n    error: { intensity: 1, duration: 100, pattern: [50, 50] },\n    notification: { intensity: 0.6, duration: 30, pattern: [10, 10, 10, 10] },\n    longPress: { intensity: 0.7, duration: 200 },\n    swipe: { intensity: 0.4, duration: 15 },\n  };\n\n  private constructor() {\n    // Do NOT create AudioContext at import time.\n    if (isBrowser()) {\n      // Set up gesture listeners to initialize audio lazily on first user interaction.\n      this.setupGestureListeners();\n      this.checkHapticSupport();\n    } else {\n      this.enabled = false;\n      this.hapticEnabled = false;\n    }\n  }\n\n  /**\n\n  \n   * Attach one-time listeners to create/resume AudioContext after a user gesture\n\n  \n   */\n\n  private setupGestureListeners() {\n    const doc = getSafeDocument();\n    const win = getSafeWindow();\n    if (!doc || !win) return;\n\n    const enable = async () => {\n      const currentWin = getSafeWindow();\n      const currentDoc = getSafeDocument();\n      if (!currentWin || !currentDoc) return;\n\n      try {\n        if (!this.audioContext) {\n          this.audioContext = new (currentWin.AudioContext ||\n            (currentWin as any).webkitAudioContext)();\n        }\n\n        if (this.audioContext?.state === \"suspended\") {\n          await this.audioContext.resume();\n        }\n      } catch {\n        this.enabled = false;\n      } finally {\n        currentDoc.removeEventListener(\"click\", enable, true);\n        currentDoc.removeEventListener(\"touchstart\", enable, true);\n        currentDoc.removeEventListener(\"keydown\", enable, true);\n      }\n    };\n\n    // Capture phase to run before most bubbling handlers, and once\n    doc.addEventListener(\"click\", enable, {\n      capture: true,\n      once: true,\n      passive: true,\n    } as any);\n    doc.addEventListener(\"touchstart\", enable, {\n      capture: true,\n      once: true,\n      passive: true,\n    } as any);\n    doc.addEventListener(\"keydown\", enable, {\n      capture: true,\n      once: true,\n      passive: true,\n    } as any);\n  }\n\n  static getInstance(): GlassSoundDesign {\n    if (!GlassSoundDesign.instance) {\n      GlassSoundDesign.instance = new GlassSoundDesign();\n    }\n    return GlassSoundDesign.instance;\n  }\n\n  /**\n   * Get available glass sound types\n   */\n  getGlassSoundTypes() {\n    return Object.keys(this.glassSounds) as Array<\n      keyof typeof this.glassSounds\n    >;\n  }\n\n  /**\n   * Get available haptic pattern types\n   */\n  getHapticPatternTypes() {\n    return Object.keys(this.hapticPatterns) as Array<\n      keyof typeof this.hapticPatterns\n    >;\n  }\n\n  /**\n   * Initialize Web Audio API context\n   */\n  private initAudioContext() {\n    const win = getSafeWindow();\n    if (!win) return;\n    try {\n      if (!this.audioContext) {\n        this.audioContext = new (win.AudioContext ||\n          (win as any).webkitAudioContext)();\n      }\n    } catch {\n      this.enabled = false;\n    }\n  }\n\n  /**\n   * Allow callers to explicitly request audio enablement (e.g., from a button onClick)\n   */\n  async requestEnableAudio() {\n    if (!isBrowser()) return false;\n    try {\n      this.initAudioContext();\n      if (this.audioContext?.state === \"suspended\") {\n        await this.audioContext.resume();\n      }\n      return !!this.audioContext && this.audioContext.state !== \"suspended\";\n    } catch {\n      this.enabled = false;\n      return false;\n    }\n  }\n\n  /**\n   * Check if haptic feedback is supported\n   */\n  private checkHapticSupport() {\n    const nav = getSafeNavigator();\n    this.hapticEnabled = !!nav && \"vibrate\" in nav;\n  }\n\n  /**\n   * Play a synthetic glass sound\n   */\n  playGlassSound(\n    type: keyof typeof GlassSoundDesign.prototype.glassSounds,\n    customConfig?: Partial<typeof GlassSoundDesign.prototype.glassSounds.tap>\n  ) {\n    if (!this.enabled || !this.audioContext) return;\n\n    const config = { ...this.glassSounds[type], ...customConfig };\n\n    try {\n      // Create oscillator\n      const oscillator = this.audioContext.createOscillator();\n      const gainNode = this.audioContext.createGain();\n\n      // Configure oscillator\n      oscillator.type = config.type;\n      oscillator.frequency.setValueAtTime(\n        config.frequency,\n        this.audioContext.currentTime\n      );\n\n      // Configure gain (volume)\n      gainNode.gain.setValueAtTime(\n        config.volume,\n        this.audioContext.currentTime\n      );\n      gainNode.gain.exponentialRampToValueAtTime(\n        0.01,\n        this.audioContext.currentTime + config.duration / 1000\n      );\n\n      // Connect nodes\n      oscillator.connect(gainNode);\n      gainNode.connect(this.audioContext.destination);\n\n      // Play sound\n      oscillator.start(this.audioContext.currentTime);\n      oscillator.stop(this.audioContext.currentTime + config.duration / 1000);\n\n      // Cleanup\n      oscillator.onended = () => {\n        oscillator.disconnect();\n        gainNode.disconnect();\n      };\n    } catch {\n      this.enabled = false;\n    }\n  }\n\n  /**\n   * Play a chord (multiple frequencies)\n   */\n  playChord(\n    frequencies: number[],\n    duration: number = 200,\n    volume: number = 0.3\n  ) {\n    if (!this.enabled || !this.audioContext) return;\n\n    frequencies.forEach((freq: any) => {\n      this.playGlassSound(\"tap\", {\n        frequency: freq,\n        duration,\n        volume: volume / frequencies.length,\n      });\n    });\n  }\n\n  /**\n   * Play an arpeggio\n   */\n  playArpeggio(\n    frequencies: number[],\n    noteDuration: number = 100,\n    noteDelay: number = 50,\n    volume: number = 0.3\n  ) {\n    if (!this.enabled || !this.audioContext) return;\n\n    frequencies.forEach((freq, index) => {\n      setTimeout(() => {\n        this.playGlassSound(\"tap\", {\n          frequency: freq,\n          duration: noteDuration,\n          volume,\n        });\n      }, index * noteDelay);\n    });\n  }\n\n  /**\n   * Create ambient glass atmosphere\n   */\n  createAmbientGlass(\n    config: {\n      baseFrequency?: number;\n      modulationRate?: number;\n      volume?: number;\n    } = {}\n  ) {\n    if (!this.enabled || !this.audioContext) return null;\n\n    const { baseFrequency = 200, modulationRate = 0.5, volume = 0.1 } = config;\n\n    try {\n      // Create nodes\n      const oscillator = this.audioContext.createOscillator();\n      const modulatorOsc = this.audioContext.createOscillator();\n      const modulatorGain = this.audioContext.createGain();\n      const mainGain = this.audioContext.createGain();\n\n      // Configure main oscillator\n      oscillator.type = \"sine\";\n      oscillator.frequency.setValueAtTime(\n        baseFrequency,\n        this.audioContext.currentTime\n      );\n\n      // Configure modulator\n      modulatorOsc.type = \"sine\";\n      modulatorOsc.frequency.setValueAtTime(\n        modulationRate,\n        this.audioContext.currentTime\n      );\n      modulatorGain.gain.setValueAtTime(50, this.audioContext.currentTime);\n\n      // Configure main gain\n      mainGain.gain.setValueAtTime(volume, this.audioContext.currentTime);\n\n      // Connect modulation\n      modulatorOsc.connect(modulatorGain);\n      modulatorGain.connect(oscillator.frequency);\n\n      // Connect to output\n      oscillator.connect(mainGain);\n      mainGain.connect(this.audioContext.destination);\n\n      // Start oscillators\n      oscillator.start();\n      modulatorOsc.start();\n\n      // Store for later control\n      const id = Date.now().toString();\n      this.oscillators.set(id, oscillator);\n      this.gainNodes.set(id, mainGain);\n\n      return {\n        id,\n        stop: () => {\n          oscillator.stop();\n          modulatorOsc.stop();\n          oscillator.disconnect();\n          modulatorOsc.disconnect();\n          modulatorGain.disconnect();\n          mainGain.disconnect();\n          this.oscillators.delete(id);\n          this.gainNodes.delete(id);\n        },\n        setVolume: (newVolume: number) => {\n          mainGain.gain.setValueAtTime(\n            newVolume,\n            this.audioContext!.currentTime\n          );\n        },\n      };\n    } catch {\n      return null;\n    }\n  }\n\n  /**\n   * Trigger haptic feedback\n   */\n  triggerHaptic(\n    pattern:\n      | keyof typeof GlassSoundDesign.prototype.hapticPatterns\n      | HapticPattern\n  ) {\n    if (!this.hapticEnabled) return;\n\n    const config =\n      typeof pattern === \"string\" ? this.hapticPatterns[pattern] : pattern;\n\n    try {\n      const nav = getSafeNavigator();\n      if (!nav || typeof nav.vibrate !== \"function\") return;\n\n      if (\n        \"pattern\" in config &&\n        config.pattern &&\n        Array.isArray(config.pattern)\n      ) {\n        nav.vibrate(config.pattern);\n      } else {\n        nav.vibrate(config.duration);\n      }\n    } catch {\n      this.hapticEnabled = false;\n    }\n  }\n\n  /**\n   * Combined sound and haptic feedback\n   */\n  playFeedback(\n    type: \"tap\" | \"hover\" | \"slide\" | \"success\" | \"error\" | \"notification\"\n  ) {\n    // Play sound\n    if (this.glassSounds[type]) {\n      this.playGlassSound(type);\n    }\n\n    // Trigger haptic\n    if (this.hapticPatterns[type]) {\n      this.triggerHaptic(type);\n    }\n  }\n\n  /**\n   * Create a glass resonance effect\n   */\n  createResonance(frequency: number = 440, decay: number = 2) {\n    if (!this.enabled || !this.audioContext) return;\n\n    const impulseLength = this.audioContext.sampleRate * decay;\n    const impulse = this.audioContext.createBuffer(\n      2,\n      impulseLength,\n      this.audioContext.sampleRate\n    );\n\n    for (let channel = 0; channel < 2; channel++) {\n      const channelData = impulse.getChannelData(channel);\n      for (let i = 0; i < impulseLength; i++) {\n        channelData[i] =\n          (Math.random() * 2 - 1) * Math.pow(1 - i / impulseLength, 2);\n      }\n    }\n\n    const convolver = this.audioContext.createConvolver();\n    convolver.buffer = impulse;\n\n    this.playGlassSound(\"tap\", { frequency });\n  }\n\n  /**\n   * Enable/disable sound\n   */\n  setEnabled(enabled: boolean) {\n    this.enabled = enabled;\n  }\n\n  /**\n   * Enable/disable haptics\n   */\n  setHapticEnabled(enabled: boolean) {\n    const nav = getSafeNavigator();\n    this.hapticEnabled = !!nav && enabled && \"vibrate\" in nav;\n  }\n\n  /**\n   * Get audio context state\n   */\n  getState() {\n    return {\n      soundEnabled: this.enabled,\n      hapticEnabled: this.hapticEnabled,\n      audioContextState: this.audioContext?.state,\n    };\n  }\n\n  /**\n   * Cleanup\n   */\n  destroy() {\n    // Stop all oscillators\n    this.oscillators.forEach((osc: any) => {\n      try {\n        osc.stop();\n        osc.disconnect();\n      } catch {}\n    });\n\n    // Disconnect all gain nodes\n    this.gainNodes.forEach((gain: any) => {\n      try {\n        gain.disconnect();\n      } catch {}\n    });\n\n    // Clear maps\n    this.oscillators.clear();\n    this.gainNodes.clear();\n    this.sounds.clear();\n\n    // Close audio context\n    if (this.audioContext) {\n      this.audioContext.close();\n      this.audioContext = null;\n    }\n  }\n}\n\n// Export singleton instance\nexport const glassSoundDesign = GlassSoundDesign.getInstance();\n\n// React hook for sound design\nexport function useGlassSound() {\n  const play = (type: string) => {\n    glassSoundDesign.playGlassSound(type as any);\n  };\n\n  const haptic = (pattern: string) => {\n    glassSoundDesign.triggerHaptic(pattern as any);\n  };\n\n  const feedback = (\n    type: Parameters<typeof glassSoundDesign.playFeedback>[0]\n  ) => {\n    glassSoundDesign.playFeedback(type);\n  };\n\n  return { play, haptic, feedback, soundDesign: glassSoundDesign };\n}\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { Check, Palette, RotateCcw } from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassInput } from \"./GlassInput\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\nexport interface Color {\n  r: number;\n  g: number;\n  b: number;\n  a?: number;\n}\n\nexport interface HslColor {\n  h: number;\n  s: number;\n  l: number;\n  a?: number;\n}\n\nexport interface GlassColorPickerProps {\n  /**\n   * Current color value\n   */\n  value?: string;\n  /**\n   * Default color value\n   */\n  defaultValue?: string;\n  /**\n   * Callback when color changes\n   */\n  onChange?: (color: string) => void;\n  /**\n   * Color format (hex, rgb, hsl, rgba, hsla)\n   */\n  format?: \"hex\" | \"rgb\" | \"hsl\" | \"rgba\" | \"hsla\";\n  /**\n   * Show alpha channel\n   */\n  showAlpha?: boolean;\n  /**\n   * Predefined color palette\n   */\n  palette?: string[];\n  /**\n   * Show color input field\n   */\n  showInput?: boolean;\n  /**\n   * Show color presets\n   */\n  showPresets?: boolean;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Popover placement\n   */\n  placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\n// Color conversion utilities\nconst hexToRgb = (hex: string): Color | null => {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(\n    hex\n  );\n  return result\n    ? {\n        r: parseInt(result[1], 16),\n        g: parseInt(result[2], 16),\n        b: parseInt(result[3], 16),\n        a: result[4] ? parseInt(result[4], 16) / 255 : undefined,\n      }\n    : null;\n};\n\nconst rgbToHex = (r: number, g: number, b: number, a?: number): string => {\n  const toHex = (n: number) =>\n    Math.round(Math.max(0, Math.min(255, n)))\n      .toString(16)\n      .padStart(2, \"0\");\n  const alpha = a !== undefined ? toHex(a * 255) : \"\";\n  return `#${toHex(r)}${toHex(g)}${toHex(b)}${alpha}`;\n};\n\nconst rgbToHsl = (r: number, g: number, b: number, a?: number): HslColor => {\n  r /= 255;\n  g /= 255;\n  b /= 255;\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  let h = 0,\n    s = 0;\n  const l = (max + min) / 2;\n\n  if (max !== min) {\n    const d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n    switch (max) {\n      case r:\n        h = (g - b) / d + (g < b ? 6 : 0);\n        break;\n      case g:\n        h = (b - r) / d + 2;\n        break;\n      case b:\n        h = (r - g) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n\n  return { h: h * 360, s: s * 100, l: l * 100, a };\n};\n\nconst hslToRgb = (h: number, s: number, l: number, a?: number): Color => {\n  h /= 360;\n  s /= 100;\n  l /= 100;\n\n  const hue2rgb = (p: number, q: number, t: number) => {\n    if (t < 0) t += 1;\n    if (t > 1) t -= 1;\n    if (t < 1 / 6) return p + (q - p) * 6 * t;\n    if (t < 1 / 2) return q;\n    if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n  };\n\n  let r, g, b;\n\n  if (s === 0) {\n    r = g = b = l;\n  } else {\n    const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n    const p = 2 * l - q;\n    r = hue2rgb(p, q, h + 1 / 3);\n    g = hue2rgb(p, q, h);\n    b = hue2rgb(p, q, h - 1 / 3);\n  }\n\n  return {\n    r: Math.round(r * 255),\n    g: Math.round(g * 255),\n    b: Math.round(b * 255),\n    a,\n  };\n};\n\n// Predefined color palettes\nconst defaultPalette = [\n  \"var(--glass-black)\",\n  \"var(--glass-white)\",\n  \"#ff0000\",\n  \"#00ff00\",\n  \"#0000ff\",\n  \"#ffff00\",\n  \"#ff00ff\",\n  \"#00ffff\",\n  \"#ffa500\",\n  \"#800080\",\n  \"#ffc0cb\",\n  \"#a52a2a\",\n  \"#808080\",\n  \"#000080\",\n  \"#008000\",\n];\n\nconst materialPalette = [\n  \"#f44336\",\n  \"#e91e63\",\n  \"#9c27b0\",\n  \"#673ab7\",\n  \"#3f51b5\",\n  \"#2196f3\",\n  \"#03a9f4\",\n  \"#00bcd4\",\n  \"#009688\",\n  \"#4caf50\",\n  \"#8bc34a\",\n  \"#cddc39\",\n  \"#ffeb3b\",\n  \"#ffc107\",\n  \"#ff9800\",\n  \"#ff5722\",\n  \"#795548\",\n  \"#9e9e9e\",\n  \"#607d8b\",\n];\n\n/**\n * GlassColorPicker component\n * A comprehensive color picker with multiple selection methods\n */\nexport const GlassColorPicker: React.FC<GlassColorPickerProps> = ({\n  value,\n  defaultValue = \"#3b82f6\",\n  onChange,\n  format = \"hex\",\n  showAlpha = false,\n  palette = defaultPalette,\n  showInput = true,\n  showPresets = true,\n  disabled = false,\n  size = \"md\",\n  className,\n  placement = \"bottom\",\n  ...props\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [currentColor, setCurrentColor] = useState(\n    normalizeColorInputValue(value || defaultValue)\n  );\n  const [hsl, setHsl] = useState<HslColor>({ h: 210, s: 100, l: 50 });\n  const [rgb, setRgb] = useState<Color>({ r: 59, g: 130, b: 246 });\n  const [inputValue, setInputValue] = useState(currentColor);\n\n  const triggerRef = useRef<HTMLDivElement>(null);\n  const popoverRef = useRef<HTMLDivElement>(null);\n  const swatchRef = useRef<HTMLDivElement>(null);\n  const hueRef = useRef<HTMLInputElement>(null);\n  const satRef = useRef<HTMLInputElement>(null);\n  const lightRef = useRef<HTMLInputElement>(null);\n  const alphaRef = useRef<HTMLInputElement>(null);\n  // apply trigger color without JSX style attr\n  useEffect(() => {\n    if (triggerRef.current) {\n      triggerRef.current.style.backgroundColor = currentColor;\n    }\n    if (swatchRef.current) {\n      swatchRef.current.style.backgroundColor = currentColor;\n    }\n    if (hueRef.current) {\n      hueRef.current.classList.add(\"glass-color-hue-gradient\");\n    }\n    if (satRef.current) {\n      satRef.current.style.background = `linear-gradient(to right, hsl(${hsl.h}, 0%, ${hsl.l}%) 0%, hsl(${hsl.h}, 100%, ${hsl.l}%) 100%)`;\n    }\n    if (lightRef.current) {\n      lightRef.current.style.background = `linear-gradient(to right, hsl(${hsl.h}, ${hsl.s}%, 0%) 0%, hsl(${hsl.h}, ${hsl.s}%, 50%) 50%, hsl(${hsl.h}, ${hsl.s}%, 100%) 100%)`;\n    }\n    if (alphaRef.current) {\n      alphaRef.current.style.background = `linear-gradient(to right, transparent 0%, ${currentColor} 100%)`;\n    }\n  }, [currentColor, hsl.h, hsl.s, hsl.l]);\n\n  // Size configurations\n  const sizeConfigs = {\n    sm: { trigger: \"glass-w-8 glass-h-8\", popover: \"glass-w-64\" },\n    md: { trigger: \"glass-w-10 glass-h-10\", popover: \"glass-w-80\" },\n    lg: { trigger: \"glass-w-12 glass-h-12\", popover: \"glass-w-96\" },\n  };\n\n  // Update color when value prop changes\n  useEffect(() => {\n    if (value) {\n      const normalized = normalizeColorInputValue(value);\n      setCurrentColor(normalized);\n      setInputValue(normalized);\n      updateColorValues(normalized);\n    }\n  }, [value]);\n\n  // Update HSL and RGB when color changes\n  const updateColorValues = useCallback((color: string) => {\n    const rgbColor = hexToRgb(color);\n    if (rgbColor) {\n      setRgb(rgbColor);\n      const hslColor = rgbToHsl(rgbColor.r, rgbColor.g, rgbColor.b, rgbColor.a);\n      setHsl(hslColor);\n    }\n  }, []);\n\n  // Handle color change\n  const handleColorChange = useCallback(\n    (newColor: string) => {\n      setCurrentColor(newColor);\n      setInputValue(newColor);\n      updateColorValues(newColor);\n      onChange?.(newColor);\n    },\n    [onChange, updateColorValues]\n  );\n\n  // Handle HSL slider changes\n  const handleHslChange = useCallback(\n    (type: \"h\" | \"s\" | \"l\", value: number) => {\n      const newHsl = { ...hsl, [type]: value };\n      setHsl(newHsl);\n\n      const newRgb = hslToRgb(newHsl.h, newHsl.s, newHsl.l, newHsl.a);\n      setRgb(newRgb);\n\n      const hexColor = rgbToHex(newRgb.r, newRgb.g, newRgb.b, newRgb.a);\n      handleColorChange(hexColor);\n    },\n    [hsl, handleColorChange]\n  );\n\n  // Handle RGB slider changes\n  const handleRgbChange = useCallback(\n    (type: \"r\" | \"g\" | \"b\", value: number) => {\n      const newRgb = { ...rgb, [type]: value };\n      setRgb(newRgb);\n\n      const newHsl = rgbToHsl(newRgb.r, newRgb.g, newRgb.b, newRgb.a);\n      setHsl(newHsl);\n\n      const hexColor = rgbToHex(newRgb.r, newRgb.g, newRgb.b, newRgb.a);\n      handleColorChange(hexColor);\n    },\n    [rgb, handleColorChange]\n  );\n\n  // Handle alpha change\n  const handleAlphaChange = useCallback(\n    (value: number) => {\n      const newRgb = { ...rgb, a: value / 100 };\n      setRgb(newRgb);\n\n      const newHsl = rgbToHsl(newRgb.r, newRgb.g, newRgb.b, newRgb.a);\n      setHsl(newHsl);\n\n      const hexColor = rgbToHex(newRgb.r, newRgb.g, newRgb.b, newRgb.a);\n      handleColorChange(hexColor);\n    },\n    [rgb, handleColorChange]\n  );\n\n  // Handle input change\n  const handleInputChange = useCallback(\n    (newValue: string) => {\n      setInputValue(newValue);\n      if (/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$/.test(newValue)) {\n        handleColorChange(newValue);\n      }\n    },\n    [handleColorChange]\n  );\n\n  // Format color for display\n  const formatColorValue = useCallback(\n    (color: string) => {\n      const rgbColor = hexToRgb(color);\n      if (!rgbColor) return color;\n\n      switch (format) {\n        case \"rgb\":\n          return rgbColor.a !== undefined\n            ? `rgba(${rgbColor.r}, ${rgbColor.g}, ${rgbColor.b}, ${rgbColor.a})`\n            : `rgb(${rgbColor.r}, ${rgbColor.g}, ${rgbColor.b})`;\n        case \"hsl\":\n          const hslColor = rgbToHsl(\n            rgbColor.r,\n            rgbColor.g,\n            rgbColor.b,\n            rgbColor.a\n          );\n          return hslColor.a !== undefined\n            ? `hsla(${Math.round(hslColor.h)}, ${Math.round(hslColor.s)}%, ${Math.round(hslColor.l)}%, ${hslColor.a})`\n            : `hsl(${Math.round(hslColor.h)}, ${Math.round(hslColor.s)}%, ${Math.round(hslColor.l)}%)`;\n        default:\n          return color;\n      }\n    },\n    [format]\n  );\n\n  // Close popover when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        triggerRef.current &&\n        !triggerRef.current.contains(event.target as Node) &&\n        popoverRef.current &&\n        !popoverRef.current.contains(event.target as Node)\n      ) {\n        setIsOpen(false);\n      }\n    };\n\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, []);\n\n  const config = sizeConfigs[size];\n\n  return (\n    <div data-glass-component className=\"glass-relative\">\n      {/* Color Trigger */}\n      <div\n        ref={triggerRef}\n        className={cn(\n          \"glass-radius-lg glass-border-2 glass-border-white/20 glass-cursor-pointer\",\n          \"glass-focus\",\n          config.trigger,\n          disabled && \"glass-opacity-50\",\n          className\n        )}\n        onClick={(e) => !disabled && setIsOpen(!isOpen)}\n        role=\"button\"\n        aria-label=\"Choose color\"\n        aria-haspopup=\"dialog\"\n        aria-expanded={isOpen}\n        aria-disabled={disabled}\n        tabIndex={disabled ? -1 : 0}\n        onKeyDown={(e) => {\n          if (e.key === \"Enter\" || e.key === \" \") {\n            e.preventDefault();\n            !disabled && setIsOpen(!isOpen);\n          }\n        }}\n        {...props}\n      />\n\n      {/* Color Picker Popover */}\n      {isOpen && (\n        <Motion\n          preset=\"fadeIn\"\n          className={cn(\n            \"absolute z-50 glass-mt-2\",\n            placement === \"top\" && \"glass-bottom-full\",\n            placement === \"bottom\" && \"glass-top-full\",\n            placement === \"left\" && \"glass-right-full\",\n            placement === \"right\" && \"glass-left-full\"\n          )}\n        >\n          <div\n            ref={popoverRef}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            aria-label=\"Color picker\"\n            className={cn(\n              \"glass-radius-xl glass-border glass-border-white/20 glass-shadow-2xl glass-backdrop-blur-md glass-surface-dark/30\",\n              config.popover\n            )}\n          >\n            <GlassCard\n              variant=\"outline\"\n              className=\"glass-border-0 glass-bg-transparent\"\n            >\n              <CardHeader className=\"glass-pb-4\">\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <CardTitle\n                    id=\"color-picker-title\"\n                    className=\"glass-text-lg glass-font-semibold glass-text-primary glass-flex glass-items-center glass-gap-2\"\n                  >\n                    <Palette\n                      className=\"glass-w-5 glass-h-5\"\n                      aria-hidden=\"true\"\n                    />\n                    Color Picker\n                  </CardTitle>\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => setIsOpen(false)}\n                    aria-label=\"Close color picker\"\n                  >\n                    \u00D7\n                  </GlassButton>\n                </div>\n              </CardHeader>\n\n              <CardContent className=\"glass-space-y-6\">\n                {/* Current Color Display */}\n                <div className=\"glass-flex glass-items-center glass-gap-4\">\n                  <div\n                    ref={swatchRef}\n                    className=\"glass-w-16 glass-h-16 glass-radius-lg glass-border-2 glass-border-white/20\"\n                  />\n                  <div className=\"glass-flex-1\">\n                    {showInput && (\n                      <GlassInput\n                        value={inputValue}\n                        onChange={(e) => handleInputChange(e.target.value)}\n                        placeholder=\"var(--glass-black)\"\n                        className=\"glass-text-sm\"\n                      />\n                    )}\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-1\">\n                      {formatColorValue(currentColor)}\n                    </div>\n                  </div>\n                </div>\n\n                {/* HSL Sliders */}\n                <div className=\"glass-gap-4\">\n                  <div>\n                    <label\n                      htmlFor=\"hue-slider\"\n                      id=\"hue-label\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      Hue\n                    </label>\n                    <input\n                      ref={hueRef}\n                      id=\"hue-slider\"\n                      type=\"range\"\n                      role=\"slider\"\n                      aria-labelledby=\"hue-label\"\n                      aria-valuemin={0}\n                      aria-valuemax={360}\n                      aria-valuenow={Math.round(hsl.h)}\n                      aria-valuetext={`${Math.round(hsl.h)} degrees`}\n                      min=\"0\"\n                      max=\"360\"\n                      value={hsl.h}\n                      onChange={(e) =>\n                        handleHslChange(\"h\", Number(e.target.value))\n                      }\n                      className=\"glass-w-full glass-h-2 glass-surface-subtle glass-radius-lg glass-appearance-none glass-cursor-pointer glass-slider\"\n                    />\n                  </div>\n\n                  <div>\n                    <label\n                      htmlFor=\"saturation-slider\"\n                      id=\"saturation-label\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      Saturation\n                    </label>\n                    <input\n                      ref={satRef}\n                      id=\"saturation-slider\"\n                      type=\"range\"\n                      role=\"slider\"\n                      aria-labelledby=\"saturation-label\"\n                      aria-valuemin={0}\n                      aria-valuemax={100}\n                      aria-valuenow={Math.round(hsl.s)}\n                      aria-valuetext={`${Math.round(hsl.s)} percent`}\n                      min=\"0\"\n                      max=\"100\"\n                      value={hsl.s}\n                      onChange={(e) =>\n                        handleHslChange(\"s\", Number(e.target.value))\n                      }\n                      className=\"glass-w-full glass-h-2 glass-surface-subtle glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                    />\n                  </div>\n\n                  <div>\n                    <label\n                      htmlFor=\"lightness-slider\"\n                      id=\"lightness-label\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      Lightness\n                    </label>\n                    <input\n                      ref={lightRef}\n                      id=\"lightness-slider\"\n                      type=\"range\"\n                      role=\"slider\"\n                      aria-labelledby=\"lightness-label\"\n                      aria-valuemin={0}\n                      aria-valuemax={100}\n                      aria-valuenow={Math.round(hsl.l)}\n                      aria-valuetext={`${Math.round(hsl.l)} percent`}\n                      min=\"0\"\n                      max=\"100\"\n                      value={hsl.l}\n                      onChange={(e) =>\n                        handleHslChange(\"l\", Number(e.target.value))\n                      }\n                      className=\"glass-w-full glass-h-2 glass-surface-subtle glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                    />\n                  </div>\n\n                  {showAlpha && (\n                    <div>\n                      <label\n                        htmlFor=\"alpha-slider\"\n                        id=\"alpha-label\"\n                        className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                      >\n                        Alpha\n                      </label>\n                      <input\n                        ref={alphaRef}\n                        id=\"alpha-slider\"\n                        type=\"range\"\n                        role=\"slider\"\n                        aria-labelledby=\"alpha-label\"\n                        aria-valuemin={0}\n                        aria-valuemax={100}\n                        aria-valuenow={Math.round((rgb.a || 1) * 100)}\n                        aria-valuetext={`${Math.round((rgb.a || 1) * 100)} percent`}\n                        min=\"0\"\n                        max=\"100\"\n                        value={(rgb.a || 1) * 100}\n                        onChange={(e) =>\n                          handleAlphaChange(Number(e.target.value))\n                        }\n                        className=\"glass-w-full glass-h-2 glass-surface-subtle glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                      />\n                    </div>\n                  )}\n                </div>\n\n                {/* RGB Inputs */}\n                <div className=\"glass-grid glass-grid-cols-3 glass-gap-4\">\n                  <div>\n                    <label\n                      htmlFor=\"red-input\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      R\n                    </label>\n                    <GlassInput\n                      id=\"red-input\"\n                      type=\"number\"\n                      min=\"0\"\n                      max=\"255\"\n                      value={rgb.r}\n                      onChange={(e) =>\n                        handleRgbChange(\"r\", Number(e.target.value))\n                      }\n                      aria-label=\"Red channel value\"\n                      aria-valuemin={0}\n                      aria-valuemax={255}\n                      aria-valuenow={rgb.r}\n                      className=\"glass-text-sm\"\n                    />\n                  </div>\n                  <div>\n                    <label\n                      htmlFor=\"green-input\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      G\n                    </label>\n                    <GlassInput\n                      id=\"green-input\"\n                      type=\"number\"\n                      min=\"0\"\n                      max=\"255\"\n                      value={rgb.g}\n                      onChange={(e) =>\n                        handleRgbChange(\"g\", Number(e.target.value))\n                      }\n                      aria-label=\"Green channel value\"\n                      aria-valuemin={0}\n                      aria-valuemax={255}\n                      aria-valuenow={rgb.g}\n                      className=\"glass-text-sm\"\n                    />\n                  </div>\n                  <div>\n                    <label\n                      htmlFor=\"blue-input\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-2 glass-block\"\n                    >\n                      B\n                    </label>\n                    <GlassInput\n                      id=\"blue-input\"\n                      type=\"number\"\n                      min=\"0\"\n                      max=\"255\"\n                      value={rgb.b}\n                      onChange={(e) =>\n                        handleRgbChange(\"b\", Number(e.target.value))\n                      }\n                      aria-label=\"Blue channel value\"\n                      aria-valuemin={0}\n                      aria-valuemax={255}\n                      aria-valuenow={rgb.b}\n                      className=\"glass-text-sm\"\n                    />\n                  </div>\n                </div>\n\n                {/* Color Palette */}\n                {showPresets && (\n                  <div>\n                    <label\n                      id=\"palette-label\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-3 glass-block\"\n                    >\n                      Palette\n                    </label>\n                    <div\n                      role=\"group\"\n                      aria-labelledby=\"palette-label\"\n                      className=\"glass-grid glass-grid-cols-5 glass-gap-2\"\n                    >\n                      {palette.map((color, i) => (\n                        <button\n                          key={`${color}-${i}`}\n                          className={cn(\n                            \"glass-w-8 glass-h-8 glass-radius-lg glass-border-2 glass-focus\",\n                            currentColor === color\n                              ? \"glass-border-white glass-scale-110\"\n                              : \"glass-border-white/20\"\n                          )}\n                          ref={(el) => {\n                            if (el) el.style.backgroundColor = color;\n                          }}\n                          onClick={(e) => handleColorChange(color)}\n                          aria-label={`Select color ${color}`}\n                          aria-pressed={currentColor === color}\n                          title={color}\n                        >\n                          {currentColor === color && (\n                            <Check\n                              className=\"glass-w-4 glass-h-4 glass-text-primary glass-mx-auto\"\n                              aria-hidden=\"true\"\n                            />\n                          )}\n                        </button>\n                      ))}\n                    </div>\n                  </div>\n                )}\n\n                {/* Material Palette */}\n                {showPresets && (\n                  <div>\n                    <label\n                      id=\"material-palette-label\"\n                      className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-mb-3 glass-block\"\n                    >\n                      Material Colors\n                    </label>\n                    <div\n                      role=\"group\"\n                      aria-labelledby=\"material-palette-label\"\n                      className=\"glass-grid glass-grid-cols-5 glass-gap-2\"\n                    >\n                      {materialPalette.slice(0, 10).map((color, i) => (\n                        <button\n                          key={`${color}-${i}`}\n                          className=\"glass-w-8 glass-h-8 glass-radius-lg glass-border-2 glass-border-white/20 hover:glass-border-white/40 glass-transition-all glass-duration-200 glass-focus\"\n                          ref={(el) => {\n                            if (el) el.style.backgroundColor = color;\n                          }}\n                          onClick={(e) => handleColorChange(color)}\n                          aria-label={`Select color ${color}`}\n                          title={color}\n                        />\n                      ))}\n                    </div>\n                  </div>\n                )}\n\n                {/* Actions */}\n                <div className=\"glass-flex glass-justify-between glass-gap-3 glass-pt-4 glass-border-t glass-border-white/10\">\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => handleColorChange(defaultValue)}\n                  >\n                    <RotateCcw className=\"glass-w-4 glass-h-4 glass-mr-2\" />\n                    Reset\n                  </GlassButton>\n                  <div className=\"glass-flex glass-gap-2\">\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={(e) => setIsOpen(false)}\n                    >\n                      Cancel\n                    </GlassButton>\n                    <GlassButton\n                      variant=\"primary\"\n                      size=\"sm\"\n                      onClick={(e) => setIsOpen(false)}\n                    >\n                      Done\n                    </GlassButton>\n                  </div>\n                </div>\n              </CardContent>\n            </GlassCard>\n          </div>\n        </Motion>\n      )}\n    </div>\n  );\n};\n\n// Color Palette Component\nexport interface GlassColorPaletteProps {\n  colors: string[];\n  selectedColor?: string;\n  onColorSelect?: (color: string) => void;\n  size?: \"sm\" | \"md\" | \"lg\";\n  className?: string;\n}\n\nexport const GlassColorPalette: React.FC<GlassColorPaletteProps> = ({\n  colors,\n  selectedColor,\n  onColorSelect,\n  size = \"md\",\n  className,\n}) => {\n  const sizeConfigs = {\n    sm: \"glass-w-6 glass-h-6\",\n    md: \"glass-w-8 glass-h-8\",\n    lg: \"glass-w-10 glass-h-10\",\n  };\n\n  return (\n    <div className={cn(\"glass-flex glass-flex-wrap glass-gap-2\", className)}>\n      {colors.map((color, i) => (\n        <button\n          key={`${color}-${i}`}\n          className={cn(\n            \"glass-radius-lg glass-border-2\",\n            sizeConfigs[size],\n            selectedColor === color\n              ? \"glass-border-white glass-scale-110 glass-ring-2 glass-ring-white/50\"\n              : \"glass-border-white/20 glass-hover-scale-105\"\n          )}\n          ref={(el) => {\n            if (el) el.style.backgroundColor = color;\n          }}\n          onClick={(e) => onColorSelect?.(color)}\n          title={color}\n        />\n      ))}\n    </div>\n  );\n};\n\nexport default GlassColorPicker;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useMemo,\n  useCallback,\n  useRef,\n} from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  createButtonA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface FabProps extends ConsciousnessFeatures {\n  /**\n   * The content of the button\n   */\n  children: React.ReactNode;\n\n  /**\n   * The color of the button\n   */\n  color?:\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"error\"\n    | \"warning\"\n    | \"info\"\n    | \"default\";\n\n  /**\n   * If true, the button will be disabled\n   */\n  disabled?: boolean;\n\n  /**\n   * The URL to link to when the button is clicked\n   */\n  href?: string;\n\n  /**\n   * The size of the button\n   */\n  size?: \"small\" | \"medium\" | \"large\";\n\n  /**\n   * The variant of the button\n   */\n  variant?: \"standard\" | \"extended\" | \"glass\";\n\n  /**\n   * Callback fired when the button is clicked\n   */\n  onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n\n  /**\n   * The position of the FAB (fixed positioning options)\n   */\n  position?:\n    | \"bottomRight\"\n    | \"bottomLeft\"\n    | \"topRight\"\n    | \"topLeft\"\n    | \"center\"\n    | \"none\";\n\n  /**\n   * Tooltip text for the FAB\n   */\n  tooltip?: string;\n\n  /**\n   * If true, the FAB will show a pulse animation\n   */\n  pulse?: boolean;\n\n  /**\n   * Additional CSS class\n   */\n  className?: string;\n\n  /**\n   * If true, glass glow effect will be more intense\n   */\n  enhanced?: boolean;\n\n  /**\n   * Z-index for the FAB\n   */\n  zIndex?: number;\n\n  /**\n   * Type of the button\n   */\n  type?: \"button\" | \"submit\" | \"reset\";\n\n  /** Controls visibility for entrance/exit animation */\n  isVisible?: boolean;\n\n  /** Additional style properties */\n  style?: React.CSSProperties;\n\n  /** Prop for disabling animation */\n  disableAnimation?: boolean;\n\n  /** Animation configuration */\n  animationConfig?: Record<string, unknown>;\n\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\n  /** Glass surface elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n\n  /** Accessible label for the button (required for icon-only buttons) */\n  \"aria-label\"?: string;\n  /** ID of element that labels the button */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the button */\n  \"aria-describedby\"?: string;\n  /** Whether button is pressed/active (for toggle buttons) */\n  \"aria-pressed\"?: boolean;\n  /** Whether button controls expanded content */\n  \"aria-expanded\"?: boolean;\n  /** ID of element controlled by this button */\n  \"aria-controls\"?: string;\n  /** Whether button has popup menu or dialog */\n  \"aria-haspopup\"?:\n    | boolean\n    | \"false\"\n    | \"true\"\n    | \"menu\"\n    | \"listbox\"\n    | \"tree\"\n    | \"grid\"\n    | \"dialog\";\n  /** Description text for complex buttons (automatically creates describedby) */\n  description?: string;\n}\n\n// Get color by name for intent mapping\nconst getColorIntent = (\n  color: string\n): \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" => {\n  switch (color) {\n    case \"primary\":\n      return \"primary\";\n    case \"secondary\":\n      return \"info\";\n    case \"success\":\n      return \"success\";\n    case \"error\":\n      return \"danger\";\n    case \"warning\":\n      return \"warning\";\n    case \"info\":\n      return \"info\";\n    default:\n      return \"neutral\";\n  }\n};\n\n// Get size classes\nconst getSizeClasses = (size: string, variant: string) => {\n  const isExtended = variant === \"extended\";\n\n  switch (size) {\n    case \"small\":\n      return {\n        width: isExtended ? \"w-auto min-w-20\" : \"w-10\",\n        height: \"h-10\",\n        padding: isExtended ? \"px-3 py-2\" : \"p-0\",\n        fontSize: \"glass-text-xl\",\n      };\n    case \"large\":\n      return {\n        width: isExtended ? \"w-auto min-w-32\" : \"w-16\",\n        height: \"h-16\",\n        padding: isExtended ? \"px-5 py-3\" : \"p-0\",\n        fontSize: \"text-3xl\",\n      };\n    default: // medium\n      return {\n        width: isExtended ? \"w-auto min-w-28\" : \"w-14\",\n        height: \"glass-h-14\",\n        padding: isExtended ? \"px-4 py-2.5\" : \"p-0\",\n        fontSize: \"glass-text-2xl\",\n      };\n  }\n};\n\n// Get position classes\nconst getPositionClasses = (position: string) => {\n  switch (position) {\n    case \"bottomRight\":\n      return \"fixed bottom-4 right-4\";\n    case \"bottomLeft\":\n      return \"fixed bottom-4 left-4\";\n    case \"topRight\":\n      return \"fixed top-4 right-4\";\n    case \"topLeft\":\n      return \"fixed top-4 left-4\";\n    case \"center\":\n      return \"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\";\n    case \"none\":\n    default:\n      return \"\";\n  }\n};\n\n// Get color classes for variants\nconst getColorClasses = (color: string, variant: string) => {\n  if (variant === \"glass\") {\n    return \"glass-text-primary bg-white/10 glass-backdrop-blur border border-white/20\";\n  }\n\n  switch (color) {\n    case \"primary\":\n      return \"bg-primary-500 glass-text-primary hover:bg-primary-600\";\n    case \"secondary\":\n      return \"bg-secondary-500 glass-text-primary hover:bg-secondary-600\";\n    case \"success\":\n      return \"bg-success-500 glass-text-primary hover:bg-success-600\";\n    case \"error\":\n      return \"bg-danger-500 glass-text-primary hover:bg-danger-600\";\n    case \"warning\":\n      return \"bg-warning-500 glass-text-primary hover:bg-warning-600\";\n    case \"info\":\n      return \"bg-info-500 glass-text-primary hover:bg-info-600\";\n    default:\n      return \"bg-white/15 glass-text-primary hover:bg-white/20\";\n  }\n};\n\n// Get pulse animation classes\nconst getPulseClasses = (pulse: boolean, color: string) => {\n  if (!pulse) return \"\";\n\n  const baseClasses = \"animate-pulse-ring\";\n\n  switch (color) {\n    case \"primary\":\n      return `${baseClasses} ring-primary-400`;\n    case \"secondary\":\n      return `${baseClasses} ring-secondary-400`;\n    case \"success\":\n      return `${baseClasses} ring-success-400`;\n    case \"error\":\n      return `${baseClasses} ring-danger-400`;\n    case \"warning\":\n      return `${baseClasses} ring-warning-400`;\n    case \"info\":\n      return `${baseClasses} ring-info-400`;\n    default:\n      return `${baseClasses} ring-gray-400`;\n  }\n};\n\n// Get variant-specific glass props\nconst getGlassVariantProps = (variant: string, enhanced: boolean) => {\n  if (variant === \"glass\") {\n    return {\n      variant: \"frosted\" as const,\n      intensity: enhanced ? (\"ultra\" as const) : (\"strong\" as const),\n      border: \"glow\" as const,\n      lighting: \"volumetric\" as const,\n      caustics: enhanced,\n      refraction: enhanced,\n    };\n  }\n\n  return {\n    variant: \"clear\" as const,\n    intensity: \"medium\" as const,\n    border: \"subtle\" as const,\n    lighting: \"ambient\" as const,\n  };\n};\n\n// Tooltip component\nconst TooltipComponent: React.FC<{\n  tooltip: string;\n  position: string;\n  show: boolean;\n}> = ({ tooltip, position, show }) => {\n  const getTooltipPosition = (position: string) => {\n    if (position === \"bottomRight\" || position === \"bottomLeft\") {\n      return \"absolute -top-8 left-1/2 -translate-x-1/2\";\n    }\n    if (position === \"topRight\" || position === \"topLeft\") {\n      return \"absolute -bottom-8 left-1/2 -translate-x-1/2\";\n    }\n    return \"absolute -top-8 left-1/2 -translate-x-1/2\";\n  };\n\n  return (\n    <span\n      data-glass-component\n      className={cn(\n        \"bg-white/10 glass-backdrop-blur-md border border-white/15 glass-text-primary px-2 py-1 glass-radius-md glass-text-xs whitespace-nowrap\",\n        `pointer-events-none z-50 transition-opacity duration-[${ANIMATION.DURATION.fast}ms]`,\n        getTooltipPosition(position),\n        show ? \"opacity-100 visible\" : \"opacity-0 invisible\"\n      )}\n    >\n      {tooltip}\n    </span>\n  );\n};\n\n// Wrapper component to handle tooltip\nconst FabWrapper: React.FC<{\n  position: string;\n  children: React.ReactNode;\n  className?: string;\n}> = ({ position, children, className }) => {\n  return (\n    <div\n      className={cn(\n        position === \"none\" ? \"relative\" : \"static\",\n        \"inline-block\",\n        className\n      )}\n    >\n      {children}\n    </div>\n  );\n};\n\n/**\n * Fab Component\n *\n * A floating action button (FAB) performs the primary action in an application.\n */\nexport const Fab = forwardRef<HTMLButtonElement | HTMLAnchorElement, FabProps>(\n  (props, ref) => {\n    const prefersReducedMotion = useReducedMotion();\n    const {\n      children,\n      color = \"primary\",\n      disabled = false,\n      href,\n      size = \"medium\",\n      variant = \"standard\",\n      onClick,\n      position = \"bottomRight\",\n      tooltip,\n      pulse = false,\n      className,\n      enhanced = false,\n      zIndex = 1050,\n      type = \"button\",\n      isVisible = true,\n      animationConfig,\n      disableAnimation,\n      style,\n      intent = \"primary\",\n      elevation = \"level4\",\n      tier = \"high\",\n      description,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"aria-pressed\": ariaPressed,\n      \"aria-expanded\": ariaExpanded,\n      \"aria-controls\": ariaControls,\n      \"aria-haspopup\": ariaHaspopup,\n      // Consciousness features\n      predictive = false,\n      preloadContent = false,\n      eyeTracking = false,\n      gazeResponsive = false,\n      adaptive = false,\n      biometricResponsive = false,\n      spatialAudio = false,\n      audioFeedback = false,\n      trackAchievements = false,\n      achievementId,\n      usageContext = \"fab\",\n      ...rest\n    } = props;\n\n    const fabRef = useRef<HTMLButtonElement | HTMLAnchorElement | null>(null);\n    const [isHovered, setIsHovered] = useState(false);\n    const [clickCount, setClickCount] = useState(0);\n    const [shouldRender, setShouldRender] = useState(isVisible);\n\n    // Consciousness feature hooks - only initialize if features are enabled\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n    const interactionRecorder =\n      predictive || trackAchievements\n        ? useInteractionRecorder(`glass-fab-${variant}-${usageContext}`)\n        : null;\n\n    // Generate unique ID for accessibility\n    const componentId = useA11yId(\"glass-fab\");\n    const descriptionId = description ? useA11yId(\"glass-fab-desc\") : undefined;\n\n    // Handle visibility changes\n    useEffect(() => {\n      if (isVisible) {\n        setShouldRender(true);\n      } else {\n        // Delay hiding to allow exit animation\n        const timeout = setTimeout(\n          () => setShouldRender(false),\n          ANIMATION.DURATION.normal\n        );\n        return () => clearTimeout(timeout);\n      }\n    }, [isVisible]);\n\n    // Eye tracking region registration\n    useEffect(() => {\n      if (!gazeResponsive || !eyeTracker || !fabRef.current) return;\n\n      const engine = eyeTracker.engine;\n      if (!engine) return;\n\n      const element = fabRef.current;\n      const registerRegion = () => {\n        const rect = element.getBoundingClientRect();\n        engine.registerRegion({\n          id: componentId,\n          x: rect.left,\n          y: rect.top,\n          width: rect.width,\n          height: rect.height,\n          element,\n        });\n      };\n\n      registerRegion();\n      window.addEventListener(\"resize\", registerRegion);\n      window.addEventListener(\"scroll\", registerRegion, true);\n\n      return () => {\n        window.removeEventListener(\"resize\", registerRegion);\n        window.removeEventListener(\"scroll\", registerRegion, true);\n        engine.unregisterRegion(componentId);\n      };\n    }, [gazeResponsive, eyeTracker, componentId]);\n\n    // Eye tracking effects\n    useEffect(() => {\n      if (!gazeResponsive || !eyeTracker || !fabRef.current) return;\n\n      const isGazed = eyeTracker.activeInteractions.some(\n        (interaction: any) => interaction.region.id === componentId\n      );\n\n      const handleGazeEnter = () => {\n        if (!disabled) {\n          setIsHovered(true);\n\n          if (spatialAudioEngine && audioFeedback) {\n            spatialAudioEngine.playGlassSound(\"fab_gaze_enter\", {\n              x: fabRef.current?.offsetLeft || 0,\n              y: fabRef.current?.offsetTop || 0,\n              z: 0, // Default z position\n            });\n          }\n        }\n      };\n\n      const handleGazeExit = () => {\n        setIsHovered(false);\n      };\n\n      if (isGazed) {\n        handleGazeEnter();\n      } else if (isHovered) {\n        handleGazeExit();\n      }\n    }, [\n      gazeResponsive,\n      eyeTracker,\n      eyeTracker?.activeInteractions,\n      componentId,\n      disabled,\n      spatialAudioEngine,\n      audioFeedback,\n      isHovered,\n    ]);\n\n    // Enhanced interaction tracking\n    const handleInteraction = useCallback(\n      (event: React.MouseEvent<HTMLElement>) => {\n        if (disabled) return;\n\n        setClickCount((prev) => prev + 1);\n\n        // Record interaction for predictive learning\n        if (interactionRecorder) {\n          interactionRecorder.recordClick(event);\n        }\n\n        // Play spatial audio feedback\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"fab_click_success\", {\n            x: fabRef.current?.offsetLeft || 0,\n            y: fabRef.current?.offsetTop || 0,\n            z: 0, // Default z position\n          });\n        }\n\n        // Track achievements\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(achievementId || \"fab_interaction\", {\n            variant,\n            context: usageContext,\n            clickCount,\n            timestamp: Date.now(),\n          });\n        }\n\n        // Call original onClick handler\n        onClick?.(\n          event as React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>\n        );\n      },\n      [\n        disabled,\n        interactionRecorder,\n        spatialAudioEngine,\n        audioFeedback,\n        achievementTracker,\n        trackAchievements,\n        achievementId,\n        variant,\n        usageContext,\n        clickCount,\n        onClick,\n      ]\n    );\n\n    // Create accessibility attributes\n    const a11yProps = createButtonA11y({\n      id: componentId,\n      label: ariaLabel,\n      description,\n      pressed: ariaPressed,\n      expanded: ariaExpanded,\n      controls: ariaControls,\n      haspopup:\n        ariaHaspopup === \"true\"\n          ? true\n          : ariaHaspopup === \"false\"\n            ? false\n            : (ariaHaspopup as\n                | boolean\n                | \"menu\"\n                | \"listbox\"\n                | \"tree\"\n                | \"grid\"\n                | \"dialog\"\n                | undefined),\n      disabled: disabled,\n      descriptionId,\n    });\n\n    // Get computed classes and styles\n    const colorIntent = getColorIntent(color);\n    const sizeClasses = getSizeClasses(size, variant);\n    const positionClasses = getPositionClasses(position);\n    const colorClasses = getColorClasses(color, variant);\n    const pulseClasses = getPulseClasses(pulse, color);\n    const glassVariantProps = getGlassVariantProps(variant, enhanced);\n\n    const baseClasses = cn(\n      // Base styles\n      \"inline-flex items-center justify-center\",\n      \"font-medium cursor-pointer outline-none\",\n      `select-none box-border transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n      \"will-change-transform\",\n      // Size classes\n      sizeClasses.width,\n      sizeClasses.height,\n      sizeClasses.padding,\n      sizeClasses.fontSize,\n      // Position classes\n      positionClasses,\n      // Shape\n      variant === \"extended\" ? \"glass-radius-full\" : \"glass-radius-full\",\n      // Color classes (for non-glass variants)\n      variant !== \"glass\" && colorClasses,\n      // Pulse classes\n      pulseClasses,\n      // Hover and interaction states\n      !disabled && \"glass-hover-scale-105 active:scale-95\",\n      // Disabled state\n      disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n      // Visibility animation\n      isVisible ? \"opacity-100 scale-100\" : \"opacity-0 scale-75\",\n      // Consciousness feature styles\n      gazeResponsive &&\n        isHovered &&\n        \"ring-2 ring-blue-400/40 shadow-lg shadow-blue-400/20\",\n      className\n    );\n\n    const combinedStyle = {\n      ...style,\n      zIndex,\n      transition: \"opacity 0.3s ease-in-out, transform 0.3s ease-in-out\",\n    };\n\n    const Component = href ? \"a\" : \"button\";\n\n    const fabButton = (\n      <Motion\n        preset=\"scaleIn\"\n        duration={0.3}\n        animateOnMount={isVisible}\n        animateOnHover={!disabled}\n        className=\"glass-inline-glass-block\"\n      >\n        {variant === \"glass\" ? (\n          <OptimizedGlass\n            as={href ? \"a\" : \"button\"}\n            type={href ? undefined : type}\n            {...(href ? { href } : {})}\n            {...(!href ? { disabled } : {})}\n            intent={intent}\n            elevation={elevation}\n            tier={tier}\n            {...glassVariantProps}\n            interactive\n            hoverSheen\n            liftOnHover\n            press\n            className={baseClasses}\n            style={{ ...combinedStyle }}\n            onClick={handleInteraction}\n            onMouseEnter={() => setIsHovered(true)}\n            onMouseLeave={() => setIsHovered(false)}\n            ref={(node: HTMLElement | null) => {\n              if (typeof ref === \"function\") {\n                ref(node as HTMLButtonElement | HTMLAnchorElement | null);\n              } else if (ref) {\n                ref.current = node as\n                  | HTMLButtonElement\n                  | HTMLAnchorElement\n                  | null;\n              }\n              if (fabRef.current !== undefined) {\n                fabRef.current = node as\n                  | HTMLButtonElement\n                  | HTMLAnchorElement\n                  | null;\n              }\n            }}\n            {...a11yProps}\n            {...rest}\n          >\n            <span className=\"glass-relative glass-z-10 glass-focus glass-touch-target glass-contrast-guard\">\n              {children}\n            </span>\n            {description && (\n              <span id={descriptionId} className=\"glass-sr-only\">\n                {description}\n              </span>\n            )}\n          </OptimizedGlass>\n        ) : (\n          <Component\n            className={baseClasses}\n            style={{ ...combinedStyle }}\n            href={href}\n            disabled={disabled}\n            onClick={handleInteraction}\n            type={href ? undefined : type}\n            onMouseEnter={() => setIsHovered(true)}\n            onMouseLeave={() => setIsHovered(false)}\n            ref={(node: HTMLElement | null) => {\n              if (typeof ref === \"function\") {\n                ref(node as HTMLButtonElement | HTMLAnchorElement);\n              } else if (ref) {\n                ref.current = node as HTMLButtonElement | HTMLAnchorElement;\n              }\n              if (fabRef.current !== undefined) {\n                fabRef.current = node as\n                  | HTMLButtonElement\n                  | HTMLAnchorElement\n                  | null;\n              }\n            }}\n            {...a11yProps}\n            {...rest}\n          >\n            {children}\n            {description && (\n              <span\n                id={descriptionId}\n                className=\"glass-sr-only glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                {description}\n              </span>\n            )}\n          </Component>\n        )}\n      </Motion>\n    );\n\n    // --- Conditional Rendering Logic ---\n    if (!shouldRender) {\n      return null;\n    }\n\n    if (!tooltip) {\n      return fabButton;\n    }\n\n    return (\n      <FabWrapper position={position}>\n        {fabButton}\n        <TooltipComponent\n          tooltip={tooltip}\n          position={position}\n          show={isHovered}\n        />\n      </FabWrapper>\n    );\n  }\n);\n\nFab.displayName = \"Fab\";\n\n/**\n * GlassFab Component\n *\n * A floating action button with glass morphism styling.\n */\nexport const GlassFab = forwardRef<HTMLElement, FabProps>((props, ref) => {\n  const {\n    className,\n    variant = \"glass\",\n    intent = \"primary\",\n    elevation = \"level4\",\n    tier = \"high\",\n    enhanced = true,\n    ...rest\n  } = props;\n\n  return (\n    <Fab\n      ref={ref as React.RefObject<HTMLButtonElement | HTMLAnchorElement>}\n      className={cn(\"glass-fab\", className)}\n      variant={variant}\n      intent={intent}\n      elevation={elevation}\n      tier={tier}\n      enhanced={enhanced}\n      {...rest}\n    />\n  );\n});\n\nGlassFab.displayName = \"GlassFab\";\n\nexport default Fab;\n", "\"use client\";\nimport React, {\n  useRef,\n  useState,\n  useCallback,\n  useEffect,\n  forwardRef,\n  CSSProperties,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassButton, GlassButtonProps } from \"./GlassButton\";\nimport { Motion, Slot } from \"../../primitives\";\nimport { announceToScreenReader } from \"../../utils/a11y\";\nimport { getSafeWindow, isBrowser, safeMatchMedia } from \"../../utils/env\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface MagneticButtonProps extends GlassButtonProps {\n  /**\n   * Strength of the magnetic effect. Higher values mean stronger pull.\n   * @default 0.5\n   */\n  magneticStrength?: number;\n  /**\n   * Radius in pixels within which the magnetic effect is active.\n   * @default 150\n   */\n  magneticRadius?: number;\n  /**\n   * Damping factor for the return-to-center movement (0 to 1). Lower values are slower/smoother.\n   * @default 0.8\n   */\n  magneticDampingFactor?: number; // Note: This is not directly used in the current calculation logic\n  /**\n   * Custom styles to apply to the button, merged with magnetic transform.\n   */\n  style?: CSSProperties;\n  /**\n   * If true, the component will render its child element and pass relevant props\n   * (styles, event handlers) down to it, instead of rendering its own button element.\n   * @default false\n   */\n  asChild?: boolean;\n  /**\n   * Whether to announce magnetic interactions to screen readers (for users who navigate with voice control)\n   * @default false\n   */\n  announceInteractions?: boolean;\n  /**\n   * Whether to reduce magnetic effect when user prefers reduced motion\n   * @default true\n   */\n  respectReducedMotion?: boolean;\n}\n\n/**\n * A GlassButton with a magnetic effect that attracts the button towards the cursor on hover.\n */\nexport const MagneticButton = forwardRef<HTMLElement, MagneticButtonProps>(\n  function MagneticButton(\n    {\n      magneticStrength = 0.5,\n      magneticRadius = 150,\n      magneticDampingFactor = 0.8,\n      style: propStyle,\n      onPointerEnter,\n      onPointerLeave,\n      asChild = false,\n      announceInteractions = false,\n      respectReducedMotion = true,\n      children,\n      ...restProps\n    },\n    ref\n  ) {\n    const Comp = asChild ? Slot : GlassButton;\n\n    const elementRef = useRef<HTMLElement>(null);\n    const [position, setPosition] = useState({ x: 0, y: 0 });\n    const [isHovered, setIsHovered] = useState(false);\n    const animationFrame = useRef<number | null>(null);\n\n    // Check if user prefers reduced motion\n    // CRITICAL SSR FIX: Default to false (motion allowed) to match client default\n    const prefersReducedMotion = useCallback(() => {\n      if (!respectReducedMotion) return false;\n      return (\n        safeMatchMedia(\"(prefers-reduced-motion: reduce)\")?.matches ?? false\n      );\n    }, [respectReducedMotion]);\n\n    // Accessibility: Announce when magnetic interaction becomes available\n    const announceInteractionRef = useRef(false);\n    useEffect(() => {\n      if (!isBrowser()) return;\n      if (\n        announceInteractions &&\n        !announceInteractionRef.current &&\n        !prefersReducedMotion()\n      ) {\n        announceToScreenReader(\n          \"Interactive magnetic button available\",\n          \"polite\"\n        );\n        announceInteractionRef.current = true;\n      }\n    }, [announceInteractions, prefersReducedMotion]);\n\n    const combinedRef = useCallback(\n      (node: HTMLElement | null) => {\n        if (elementRef.current !== node) {\n          (elementRef as React.MutableRefObject<HTMLElement | null>).current =\n            node;\n        }\n        if (ref) {\n          if (typeof ref === \"function\") {\n            ref(node);\n          } else {\n            (ref as React.MutableRefObject<HTMLElement | null>).current = node;\n          }\n        }\n      },\n      [ref]\n    );\n\n    const calculateMagneticAttraction = useCallback(\n      (distanceX: number, distanceY: number, rect: DOMRect) => {\n        // Disable magnetic effect if user prefers reduced motion\n        if (prefersReducedMotion()) {\n          return { x: 0, y: 0 };\n        }\n\n        const distance = Math.sqrt(distanceX ** 2 + distanceY ** 2);\n\n        if (distance > magneticRadius || !rect) {\n          return { x: 0, y: 0 };\n        }\n\n        // Smoother falloff using cosine easing\n        const normalizedDistance = distance / magneticRadius;\n        const pullFactor = (Math.cos(normalizedDistance * Math.PI) + 1) / 2; // Cosine easing\n        const attraction = pullFactor * magneticStrength;\n\n        // Avoid division by zero if distance is zero\n        if (distance === 0) return { x: 0, y: 0 };\n\n        // Scale pull relative to button size (pull towards edge, not just center proportional)\n        const pullToX = (distanceX / distance) * (rect.width / 2) * attraction;\n        const pullToY = (distanceY / distance) * (rect.height / 2) * attraction;\n\n        return {\n          x: pullToX,\n          y: pullToY,\n        };\n      },\n      [magneticRadius, magneticStrength, prefersReducedMotion]\n    );\n\n    const handlePointerMove = useCallback(\n      (e: PointerEvent) => {\n        if (!isBrowser() || !elementRef.current || !isHovered) return;\n\n        const rect = elementRef.current.getBoundingClientRect();\n        const centerX = rect.left + rect.width / 2;\n        const centerY = rect.top + rect.height / 2;\n        const distanceX = e.clientX - centerX;\n        const distanceY = e.clientY - centerY;\n\n        const attraction = calculateMagneticAttraction(\n          distanceX,\n          distanceY,\n          rect\n        );\n\n        // Directly set position based on attraction\n        setPosition({\n          x: attraction.x,\n          y: attraction.y,\n        });\n      },\n      [isHovered, calculateMagneticAttraction]\n    );\n\n    const returnToCenter = useCallback(() => {\n      const win = getSafeWindow();\n      if (!win) return;\n\n      if (\n        !isHovered &&\n        elementRef.current &&\n        (Math.abs(position.x) > 0.01 || Math.abs(position.y) > 0.01)\n      ) {\n        // Smoother damping towards center\n        const dampFactor = 0.15; // Controls speed of return (higher is faster damping)\n        const nextX = position.x * (1 - dampFactor);\n        const nextY = position.y * (1 - dampFactor);\n\n        setPosition({ x: nextX, y: nextY });\n        animationFrame.current = win.requestAnimationFrame(returnToCenter);\n      } else if (!isHovered) {\n        // Snap to center when close enough\n        setPosition({ x: 0, y: 0 });\n        if (animationFrame.current !== null) {\n          win.cancelAnimationFrame(animationFrame.current);\n          animationFrame.current = null;\n        }\n      } else {\n        // If hovered, ensure no return animation is running\n        if (animationFrame.current !== null) {\n          win.cancelAnimationFrame(animationFrame.current);\n          animationFrame.current = null;\n        }\n      }\n    }, [isHovered, position.x, position.y]);\n\n    useEffect(() => {\n      if (!isBrowser()) {\n        return;\n      }\n\n      const win = getSafeWindow();\n      if (!win) return;\n\n      win.addEventListener(\"pointermove\", handlePointerMove, {\n        capture: false,\n        passive: true,\n      });\n      return () => {\n        win.removeEventListener(\"pointermove\", handlePointerMove, {\n          capture: false,\n        });\n        if (animationFrame.current !== null) {\n          cancelAnimationFrame(animationFrame.current);\n        }\n      };\n    }, [handlePointerMove]);\n\n    useEffect(() => {\n      // Stop any ongoing return animation if we start hovering\n      if (isHovered && animationFrame.current !== null) {\n        const win = getSafeWindow();\n        if (win && animationFrame.current !== null) {\n          win.cancelAnimationFrame(animationFrame.current);\n        }\n        animationFrame.current = null;\n      }\n      // Start return animation if we stop hovering\n      else if (!isHovered) {\n        // Ensure previous animation frame is cancelled before starting a new one\n        if (animationFrame.current !== null) {\n          cancelAnimationFrame(animationFrame.current);\n        }\n        const win = getSafeWindow();\n        if (win) {\n          animationFrame.current = win.requestAnimationFrame(returnToCenter);\n        }\n      }\n\n      // Cleanup function for the effect\n      return () => {\n        const win = getSafeWindow();\n        if (win && animationFrame.current !== null) {\n          win.cancelAnimationFrame(animationFrame.current);\n        }\n      };\n    }, [isHovered, returnToCenter]);\n\n    const handlePointerEnter = (e: React.PointerEvent<HTMLElement>) => {\n      setIsHovered(true);\n      if (onPointerEnter) {\n        onPointerEnter(e as any);\n      }\n    };\n\n    const handlePointerLeave = (e: React.PointerEvent<HTMLElement>) => {\n      setIsHovered(false);\n      if (onPointerLeave) {\n        onPointerLeave(e as any);\n      }\n    };\n\n    const combinedStyle: CSSProperties = {\n      ...propStyle,\n      transform: prefersReducedMotion()\n        ? \"none\"\n        : `translate3d(${position.x}px, ${position.y}px, 0)`,\n      transition: prefersReducedMotion()\n        ? \"none\"\n        : isHovered\n          ? \"transform 0.05s linear\"\n          : \"transform 0.2s cubic-bezier(0.2, 0.8, 0.2, 1)\",\n      willChange: prefersReducedMotion() ? \"auto\" : \"transform\",\n    };\n\n    return (\n      <Motion preset=\"none\" className={cn(\"glass-inline-block\")}>\n        <Comp\n          ref={combinedRef}\n          style={{ ...combinedStyle }}\n          onPointerEnter={handlePointerEnter}\n          onPointerLeave={handlePointerLeave}\n          {...restProps}\n        >\n          {children}\n        </Comp>\n      </Motion>\n    );\n  }\n);\n\nMagneticButton.displayName = \"MagneticButton\";\n\nexport default MagneticButton;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassButtonStyleProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  prominent?: boolean;\n  materialVariant?: \"regular\" | \"clear\";\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\nconst sizeClass = {\n  sm: \"glass-px-3 glass-py-1 glass-text-sm\",\n  md: \"glass-px-4 glass-py-2\",\n  lg: \"glass-px-5 glass-py-3\",\n  xl: \"glass-px-6 glass-py-4 glass-text-lg\",\n};\n\nexport const LiquidGlassButtonStyle = forwardRef<HTMLButtonElement, LiquidGlassButtonStyleProps>(\n  ({ prominent = false, materialVariant = \"regular\", size = \"md\", className, children, ...props }, ref) => (\n    <LiquidGlassMaterial material=\"liquid\" variant={materialVariant} radius=\"full\" interactive>\n      <button\n        ref={ref}\n        type=\"button\"\n        className={cn(\n          \"liquid-glass-button-style glass-inline-flex glass-items-center glass-justify-center glass-gap-2 glass-radius-full glass-bg-transparent glass-font-medium glass-outline-none\",\n          sizeClass[size],\n          prominent && \"glass-text-primary\",\n          className\n        )}\n        data-liquid-glass-button-style=\"true\"\n        {...props}\n      >\n        {children}\n      </button>\n    </LiquidGlassMaterial>\n  )\n);\n\nLiquidGlassButtonStyle.displayName = \"LiquidGlassButtonStyle\";\n", "import React from 'react';\nexport { GlassCard, type GlassCardProps } from './GlassCard';\n\n// Basic card sub-components for compatibility\nexport const CardHeader = ({ children, className, ...props }: any) => {\n  return React.createElement('div', {\n    className: `card-header ${className || ''}`,\n    ...props\n  }, children);\n};\n\nexport const CardTitle = ({ children, className, ...props }: any) => {\n  return React.createElement('h2', {\n    className: `card-title ${className || ''}`,\n    ...props\n  }, children);\n};\n\nexport const CardContent = ({ children, className, ...props }: any) => {\n  return React.createElement('div', {\n    className: `card-content ${className || ''}`,\n    ...props\n  }, children);\n};\n\nexport const CardFooter = ({ children, className, ...props }: any) => {\n  return React.createElement('div', {\n    className: `card-footer ${className || ''}`,\n    ...props\n  }, children);\n};\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport {\n  OptimizedGlassCore as OptimizedGlass,\n  type OptimizedGlassProps,\n} from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface GlassCardProps\n  extends Omit<OptimizedGlassProps, \"variant\" | \"tint\"> {\n  /**\n   * Card variant style\n   */\n  variant?:\n    | \"default\"\n    | \"outlined\"\n    | \"elevated\"\n    | \"interactive\"\n    | \"feature\"\n    | \"minimal\"\n    | \"primary\"\n    | \"outline\";\n  /**\n   * Tint color (for liquid glass material)\n   */\n  tint?: string | { r: number; g: number; b: number; a: number };\n  /**\n   * Card size\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Whether the card is hoverable\n   */\n  hoverable?: boolean;\n  /**\n   * Whether the card is clickable\n   */\n  clickable?: boolean;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Glass material variant\n   */\n  material?: \"glass\" | \"liquid\";\n  /**\n   * Material properties for liquid glass\n   */\n  materialProps?: {\n    ior?: number;\n    thickness?: number;\n    tint?: { r: number; g: number; b: number; a: number };\n    variant?: \"regular\" | \"clear\";\n    quality?: \"ultra\" | \"high\" | \"balanced\" | \"efficient\";\n  };\n}\n\n/**\n * GlassCard component\n * A versatile card component with glassmorphism styling\n */\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"level2\",\n      hoverable = false,\n      clickable = false,\n      loading = false,\n      disabled = false,\n      material = \"glass\",\n      materialProps,\n      tint,\n      interactive,\n      className,\n      children,\n      onClick,\n      onKeyDown,\n      role,\n      tabIndex,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const sizeClasses = {\n      sm: \"glass-p-3\",\n      md: \"glass-p-4\",\n      lg: \"glass-p-6\",\n      xl: \"glass-p-8\",\n    };\n\n    const variantClasses = {\n      default: \"\",\n      outlined: \"glass-focus glass-border-subtle\",\n      elevated: \"\",\n      interactive: prefersReducedMotion\n        ? \"transition-none\"\n        : `transition-all duration-[${ANIMATION.DURATION.fast}ms] hover:scale-[1.02] active:scale-[0.98]`,\n      feature: \"relative overflow-hidden\",\n      minimal: \"glass-backdrop-blur bg-transparent border-0\",\n      primary: \"\",\n      outline: \"glass-focus glass-border-subtle\",\n    };\n\n    const getElevation = ():\n      | \"level1\"\n      | \"level2\"\n      | \"level3\"\n      | \"level4\"\n      | \"level5\" => {\n      if (variant === \"elevated\") return \"level2\";\n      if (variant === \"feature\") return \"level3\";\n      if (variant === \"minimal\") return \"level1\";\n      return elevation || \"level1\";\n    };\n\n    const isInteractive = interactive || hoverable || clickable;\n    const isActionable = clickable || typeof onClick === \"function\";\n    const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n      onKeyDown?.(event);\n\n      if (\n        event.defaultPrevented ||\n        disabled ||\n        !isActionable ||\n        (event.key !== \"Enter\" && event.key !== \" \")\n      ) {\n        return;\n      }\n\n      event.preventDefault();\n      onClick?.(event as unknown as React.MouseEvent<HTMLDivElement>);\n    };\n\n    const cardStyle = {\n      \"--liquid-glass-card-density\": variant === \"minimal\" ? \"0.8\" : \"0.92\",\n      \"--liquid-glass-hover-lift\": hoverable ? \"8px\" : \"0px\",\n      \"--liquid-glass-interaction-depth\": isInteractive ? \"1.05\" : \"1.0\",\n    } as React.CSSProperties;\n\n    return material === \"liquid\" ? (\n      <LiquidGlassMaterial\n        ref={ref}\n        ior={\n          materialProps?.ior ||\n          (variant === \"elevated\" ? 1.48 : variant === \"feature\" ? 1.5 : 1.45)\n        }\n        thickness={\n          materialProps?.thickness ||\n          (size === \"sm\" ? 8 : size === \"md\" ? 12 : size === \"lg\" ? 16 : 20)\n        }\n        tint={\n          materialProps?.tint &&\n          typeof materialProps.tint === \"object\" &&\n          \"r\" in materialProps.tint\n            ? (materialProps.tint as {\n                r: number;\n                g: number;\n                b: number;\n                a: number;\n              })\n            : tint && typeof tint === \"object\" && \"r\" in tint\n              ? (tint as { r: number; g: number; b: number; a: number })\n              : variant === \"primary\"\n                ? { r: 59, g: 130, b: 246, a: 0.08 }\n                : { r: 0, g: 0, b: 0, a: 0.06 }\n        }\n        variant={materialProps?.variant || \"regular\"}\n        quality={\n          materialProps?.quality || (variant === \"feature\" ? \"ultra\" : \"high\")\n        }\n        environmentAdaptation\n        motionResponsive\n        interactive={isInteractive}\n        className={cn(\n          \"liquid-glass-card-surface relative glass-radius-xl overflow-hidden\",\n          `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n          hoverable && [\"group\"],\n          sizeClasses[size],\n          variantClasses[variant],\n          {\n            \"opacity-50 pointer-events-none\": disabled,\n            \"cursor-pointer\": clickable && !disabled,\n            \"glass-hover-scale-105 active:scale-95\":\n              hoverable && !disabled && !prefersReducedMotion,\n            \"transition-none\": prefersReducedMotion,\n            \"animate-pulse\": loading && !prefersReducedMotion,\n          },\n          className\n        )}\n        style={{ ...cardStyle }}\n        role={role || (isActionable ? \"button\" : undefined)}\n        tabIndex={\n          tabIndex !== undefined\n            ? tabIndex\n            : isActionable && !disabled\n              ? 0\n              : undefined\n        }\n        aria-disabled={disabled || undefined}\n        aria-busy={loading || undefined}\n        onClick={disabled ? undefined : onClick}\n        onKeyDown={handleKeyDown}\n        data-liquid-glass-card=\"true\"\n        data-card-variant={variant}\n        data-card-size={size}\n        {...props}\n      >\n        {loading && (\n          <div\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-white-opacity-10 glass-gradient-primary\",\n              !prefersReducedMotion && \"glass-animate-glass-shimmer\"\n            )}\n          />\n        )}\n        {children}\n      </LiquidGlassMaterial>\n    ) : (\n      <OptimizedGlass\n        ref={ref}\n        elevation={getElevation()}\n        intensity=\"medium\"\n        depth={variant === \"elevated\" ? \"deep\" : \"medium\"}\n        border={variant === \"outlined\" ? \"glow\" : \"subtle\"}\n        interactive={isInteractive}\n        tier=\"high\"\n        className={cn(\n          \"glass-foundation-complete relative glass-radius-xl overflow-hidden glass-overlay-noise glass-edge glass-overlay-specular glass-typography-reset\",\n          `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n          // Advanced hover effects with glass enhancement\n          hoverable && [\"group\"],\n          sizeClasses[size],\n          variantClasses[variant],\n          {\n            // Sophisticated micro-interactions\n            \"hover:scale-[1.008] hover:-translate-y-1\":\n              hoverable && !disabled && !prefersReducedMotion,\n            \"hover:shadow-2xl hover:shadow-blue-500/10\": hoverable && !disabled,\n            // Enhanced click feedback\n            \"cursor-pointer\": clickable && !disabled,\n            \"active:scale-[0.995] active:translate-y-0\":\n              clickable && !disabled && !prefersReducedMotion,\n            \"\": clickable && !disabled, // Remove broken CSS class\n            // Disabled state\n            \"opacity-50 pointer-events-none\": disabled,\n            // Loading state\n            \"animate-pulse\": loading && !prefersReducedMotion,\n            \"transition-none\": prefersReducedMotion,\n          },\n          className\n        )}\n        role={role || (isActionable ? \"button\" : undefined)}\n        tabIndex={\n          tabIndex !== undefined\n            ? tabIndex\n            : isActionable && !disabled\n              ? 0\n              : undefined\n        }\n        aria-disabled={disabled || undefined}\n        aria-busy={loading || undefined}\n        onClick={disabled ? undefined : onClick}\n        onKeyDown={handleKeyDown}\n        {...props}\n      >\n        {/* Advanced micro-interaction overlays */}\n        {hoverable && (\n          <>\n            {/* Subtle glow overlay on hover */}\n            <div\n              className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-transparent glass-gradient-primary glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms] glass-pointer-events-none glass-radius-lg`}\n            />\n\n            {/* Shimmer effect on hover */}\n            <div\n              className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-white-opacity-10 glass-gradient-primary glass--translate-x-full glass-group-hover:translate-x-full glass-transition-transform glass-duration-[${ANIMATION.DURATION.slower * 1.4}ms] glass-pointer-events-none glass-radius-lg`}\n            />\n\n            {/* Border glow enhancement */}\n            <div\n              className={`glass-absolute glass-inset-0 glass-radius-lg glass-border glass-border-white/0 glass-group-hover:glass-border-white/20 glass-transition-colors glass-duration-[${ANIMATION.DURATION.normal}ms] glass-pointer-events-none`}\n            />\n          </>\n        )}\n\n        {/* Feature variant enhancement */}\n        {variant === \"feature\" && (\n          <div className=\"glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-secondary-opacity-4 glass-gradient-primary glass-radius-lg\" />\n        )}\n\n        {/* Content with enhanced loading state */}\n        <div className=\"glass-relative glass-z-10\">\n          {loading ? (\n            <div className=\"glass-auto-gap glass-auto-gap-md\">\n              <div className=\"glass-h-4 glass-surface-subtle/20 glass-animate-pulse glass-radius-sm glass-shimmer glass-contrast-guard\" />\n              <div className=\"glass-h-4 glass-surface-subtle/15 glass-animate-pulse glass-radius-sm glass-w-3-4 glass-shimmer glass-contrast-guard\" />\n              <div className=\"glass-h-4 glass-surface-subtle/10 glass-animate-pulse glass-radius-sm glass-w-1-2 glass-shimmer glass-contrast-guard\" />\n            </div>\n          ) : (\n            children\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassCard.displayName = \"GlassCard\";\n\n/**\n * CardHeader component\n */\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Header size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether to show border below header\n   */\n  bordered?: boolean;\n}\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n  ({ size = \"md\", bordered = false, className, children, ...props }, ref) => {\n    const sizeClasses = {\n      sm: \"glass-pb-2\",\n      md: \"glass-pb-3\",\n      lg: \"glass-pb-4\",\n    };\n\n    return (\n      <div\n        data-glass-component\n        ref={ref}\n        className={cn(\n          \"flex flex-col glass-gap-1-5\",\n          sizeClasses[size],\n          {\n            \"border-b glass-border-subtle\": bordered,\n          },\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nCardHeader.displayName = \"CardHeader\";\n\n/**\n * CardTitle component\n */\nexport interface CardTitleProps\n  extends React.HTMLAttributes<HTMLHeadingElement> {\n  /**\n   * Title size\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Heading level\n   */\n  level?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, CardTitleProps>(\n  ({ size = \"md\", level = 2, className, children, ...props }, ref) => {\n    const sizeClasses = {\n      sm: \"glass-text-base font-medium\",\n      md: \"glass-text-lg font-semibold\",\n      lg: \"glass-text-xl font-semibold\",\n      xl: \"glass-text-2xl font-bold\",\n    };\n\n    const headingProps = {\n      ref,\n      className: cn(\n        \"glass-text-primary leading-none tracking-tight\",\n        sizeClasses[size],\n        className\n      ),\n      ...props,\n      children,\n    };\n\n    switch (level) {\n      case 1:\n        return <h1 {...headingProps} />;\n      case 2:\n        return <h2 {...headingProps} />;\n      case 3:\n        return <h3 {...headingProps} />;\n      case 4:\n        return <h4 {...headingProps} />;\n      case 5:\n        return <h5 {...headingProps} />;\n      case 6:\n        return <h6 {...headingProps} />;\n      default:\n        return <h2 {...headingProps} />;\n    }\n  }\n);\n\nCardTitle.displayName = \"CardTitle\";\n\n/**\n * CardDescription component\n */\nexport interface CardDescriptionProps\n  extends React.HTMLAttributes<HTMLParagraphElement> {\n  /**\n   * Description size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const CardDescription = forwardRef<\n  HTMLParagraphElement,\n  CardDescriptionProps\n>(({ size = \"md\", className, children, ...props }, ref) => {\n  const sizeClasses = {\n    sm: \"glass-text-xs\",\n    md: \"glass-text-sm\",\n    lg: \"glass-text-base\",\n  };\n\n  return (\n    <p\n      ref={ref}\n      className={cn(\"glass-text-secondary\", sizeClasses[size], className)}\n      {...props}\n    >\n      {children}\n    </p>\n  );\n});\n\nCardDescription.displayName = \"CardDescription\";\n\n/**\n * CardContent component\n */\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Content padding\n   */\n  padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n  /**\n   * Automatically add vertical spacing between direct children\n   * Defaults to true for better readability across components\n   */\n  autoSpacing?: boolean;\n  /**\n   * Spacing size when autoSpacing is enabled\n   */\n  spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const CardContent = forwardRef<HTMLDivElement, CardContentProps>(\n  (\n    {\n      padding = \"none\",\n      autoSpacing = true,\n      spacing = \"md\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const paddingClasses = {\n      none: \"\",\n      sm: \"glass-p-2\",\n      md: \"glass-p-4\",\n      lg: \"glass-p-6\",\n    };\n    const spacingClass = autoSpacing\n      ? spacing === \"sm\"\n        ? \"glass-auto-gap glass-auto-gap-sm\"\n        : spacing === \"lg\"\n          ? \"glass-auto-gap glass-auto-gap-lg\"\n          : \"glass-auto-gap glass-auto-gap-md\"\n      : \"\";\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-text-primary\",\n          paddingClasses[padding],\n          spacingClass,\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nCardContent.displayName = \"CardContent\";\n\n/**\n * CardFooter component\n */\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Footer alignment\n   */\n  align?: \"left\" | \"center\" | \"right\" | \"between\" | \"around\";\n  /**\n   * Whether to show border above footer\n   */\n  bordered?: boolean;\n  /**\n   * Footer padding\n   */\n  padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n}\n\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n  (\n    {\n      align = \"left\",\n      bordered = false,\n      padding = \"md\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const alignClasses = {\n      left: \"justify-start\",\n      center: \"justify-center\",\n      right: \"justify-end\",\n      between: \"justify-between\",\n      around: \"justify-around\",\n    };\n\n    const paddingClasses = {\n      none: \"\",\n      sm: \"glass-pt-2\",\n      md: \"glass-pt-3\",\n      lg: \"glass-pt-4\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex items-center\",\n          alignClasses[align],\n          paddingClasses[padding],\n          {\n            \"border-t glass-border-subtle\": bordered,\n          },\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nCardFooter.displayName = \"CardFooter\";\n\n/**\n * CardActions component\n */\nexport interface CardActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Actions alignment\n   */\n  align?: \"left\" | \"center\" | \"right\";\n  /**\n   * Actions spacing\n   */\n  spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const CardActions = forwardRef<HTMLDivElement, CardActionsProps>(\n  ({ align = \"right\", spacing = \"md\", className, children, ...props }, ref) => {\n    const alignClasses = {\n      left: \"justify-start\",\n      center: \"justify-center\",\n      right: \"justify-end\",\n    };\n\n    const spacingClasses = {\n      sm: \"glass-gap-1\",\n      md: \"glass-gap-2\",\n      lg: \"glass-gap-3\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex items-center\",\n          alignClasses[align],\n          spacingClasses[spacing],\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </div>\n    );\n  }\n);\n\nCardActions.displayName = \"CardActions\";\n", "\"use client\";\n\nconst TOKEN_COLOR_FALLBACKS: Record<string, string> = {\n  \"--glass-color-primary\": \"#3b82f6\",\n  \"--glass-color-primary-light\": \"#60a5fa\",\n  \"--glass-color-secondary\": \"#8b5cf6\",\n  \"--glass-color-accent\": \"#06b6d4\",\n  \"--glass-color-info\": \"#3b82f6\",\n  \"--glass-color-success\": \"#22c55e\",\n  \"--glass-color-success-light\": \"#4ade80\",\n  \"--glass-color-warning\": \"#f59e0b\",\n  \"--glass-color-warning-light\": \"#fbbf24\",\n  \"--glass-color-danger\": \"#ef4444\",\n  \"--glass-color-danger-dark\": \"#b91c1c\",\n  \"--glass-gray-500\": \"#64748b\",\n  \"--glass-black\": \"#000000\",\n  \"--glass-white\": \"#ffffff\",\n};\n\nconst clampByte = (value: number) =>\n  Math.max(0, Math.min(255, Math.round(value)));\n\nconst byteToHex = (value: number) =>\n  clampByte(value).toString(16).padStart(2, \"0\");\n\nconst rgbToHex = (r: number, g: number, b: number) =>\n  `#${byteToHex(r)}${byteToHex(g)}${byteToHex(b)}`;\n\nconst normalizeHex = (value: string): string | null => {\n  const trimmed = value.trim();\n  const short = /^#([a-f\\d])([a-f\\d])([a-f\\d])$/i.exec(trimmed);\n  if (short) {\n    return `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}`.toLowerCase();\n  }\n\n  const long = /^#([a-f\\d]{6})([a-f\\d]{2})?$/i.exec(trimmed);\n  return long ? `#${long[1]}`.toLowerCase() : null;\n};\n\nconst parseRgb = (value: string): string | null => {\n  const rgb = /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/i.exec(value);\n  return rgb ? rgbToHex(Number(rgb[1]), Number(rgb[2]), Number(rgb[3])) : null;\n};\n\nconst hslToHex = (h: number, s: number, l: number): string => {\n  const hue = (((h % 360) + 360) % 360) / 360;\n  const saturation = Math.max(0, Math.min(100, s)) / 100;\n  const lightness = Math.max(0, Math.min(100, l)) / 100;\n\n  if (saturation === 0) {\n    const gray = lightness * 255;\n    return rgbToHex(gray, gray, gray);\n  }\n\n  const q =\n    lightness < 0.5\n      ? lightness * (1 + saturation)\n      : lightness + saturation - lightness * saturation;\n  const p = 2 * lightness - q;\n  const hueToRgb = (t: number) => {\n    let channel = t;\n    if (channel < 0) channel += 1;\n    if (channel > 1) channel -= 1;\n    if (channel < 1 / 6) return p + (q - p) * 6 * channel;\n    if (channel < 1 / 2) return q;\n    if (channel < 2 / 3) return p + (q - p) * (2 / 3 - channel) * 6;\n    return p;\n  };\n\n  return rgbToHex(\n    hueToRgb(hue + 1 / 3) * 255,\n    hueToRgb(hue) * 255,\n    hueToRgb(hue - 1 / 3) * 255\n  );\n};\n\nconst parseHsl = (value: string): string | null => {\n  const normalized = value\n    .trim()\n    .replace(/^hsla?\\(\\s*/i, \"\")\n    .replace(/\\s*\\)$/i, \"\")\n    .replace(/\\s*\\/\\s*[\\d.]+%?$/, \"\")\n    .replace(/,/g, \" \");\n  const hsl = /^(-?[\\d.]+)(?:deg)?\\s+([\\d.]+)%\\s+([\\d.]+)%$/i.exec(normalized);\n  return hsl ? hslToHex(Number(hsl[1]), Number(hsl[2]), Number(hsl[3])) : null;\n};\n\nconst parseColorToHex = (value: string): string | null =>\n  normalizeHex(value) || parseRgb(value) || parseHsl(value);\n\nconst getTokenName = (value: string): string | null => {\n  const match = /var\\(\\s*(--[\\w-]+)/.exec(value);\n  return match?.[1] ?? null;\n};\n\nconst resolveTokenValue = (tokenName: string): string | null => {\n  if (typeof document === \"undefined\") return null;\n  const root = document.documentElement;\n  const computed = window\n    .getComputedStyle(root)\n    .getPropertyValue(tokenName)\n    .trim();\n  return computed || null;\n};\n\n/**\n * Native <input type=\"color\"> controls only accept #rrggbb. AuraGlass APIs can\n * still accept tokens; this adapter resolves or falls back before touching the DOM value.\n */\nexport function normalizeColorInputValue(\n  value: string | null | undefined,\n  fallback = \"#3b82f6\"\n): string {\n  const normalizedFallback = normalizeHex(fallback) || \"#3b82f6\";\n  if (!value) return normalizedFallback;\n\n  const direct = parseColorToHex(value);\n  if (direct) return direct;\n\n  const tokenName = getTokenName(value);\n  if (!tokenName) return normalizedFallback;\n\n  const resolved = resolveTokenValue(tokenName);\n  if (resolved) {\n    const resolvedHex = parseColorToHex(resolved);\n    if (resolvedHex) return resolvedHex;\n  }\n\n  return TOKEN_COLOR_FALLBACKS[tokenName] ?? normalizedFallback;\n}\n", "\"use client\";\n\nimport React, { forwardRef, useId, useMemo, useRef, useState } from \"react\";\nimport { ChevronDown, Search } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface GlassComboboxOption {\n  value: string;\n  label: string;\n  group?: string;\n  disabled?: boolean;\n}\n\nexport interface GlassComboboxProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  options: GlassComboboxOption[];\n  value?: string;\n  defaultValue?: string;\n  onChange?: (value: string, option: GlassComboboxOption) => void;\n  placeholder?: string;\n  label?: string;\n  disabled?: boolean;\n  emptyText?: string;\n}\n\nexport const GlassCombobox = forwardRef<HTMLDivElement, GlassComboboxProps>(\n  (\n    {\n      options,\n      value,\n      defaultValue,\n      onChange,\n      placeholder = \"Search options\",\n      label = \"Combobox\",\n      disabled,\n      emptyText = \"No options\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const id = useId();\n    const inputRef = useRef<HTMLInputElement | null>(null);\n    const [open, setOpen] = useState(false);\n    const [query, setQuery] = useState(\"\");\n    const [activeIndex, setActiveIndex] = useState(0);\n    const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n    const selectedValue = value ?? internalValue;\n    const selectedOption = options.find(\n      (option) => option.value === selectedValue\n    );\n\n    const filteredOptions = useMemo(() => {\n      const normalized = query.trim().toLowerCase();\n      if (!normalized) return options;\n      return options.filter((option) =>\n        option.label.toLowerCase().includes(normalized)\n      );\n    }, [options, query]);\n\n    const enabledOptions = filteredOptions.filter((option) => !option.disabled);\n    const activeOption = enabledOptions[activeIndex] ?? enabledOptions[0];\n\n    const commit = (option: GlassComboboxOption | undefined) => {\n      if (!option || option.disabled) return;\n      if (value === undefined) setInternalValue(option.value);\n      setQuery(option.label);\n      setOpen(false);\n      onChange?.(option.value, option);\n    };\n\n    const groupedOptions = useMemo(() => {\n      const groups = new Map<string, GlassComboboxOption[]>();\n      filteredOptions.forEach((option) => {\n        const key = option.group ?? \"\";\n        groups.set(key, [...(groups.get(key) ?? []), option]);\n      });\n      return Array.from(groups.entries());\n    }, [filteredOptions]);\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\"glass-relative glass-space-y-2\", className)}\n        {...props}\n      >\n        <label\n          htmlFor={`${id}-input`}\n          className=\"glass-block glass-text-sm glass-font-medium glass-text-primary\"\n        >\n          {label}\n        </label>\n        <div className=\"glass-relative\">\n          <Search\n            aria-hidden=\"true\"\n            className=\"glass-pointer-events-none glass-absolute glass-left-3 glass-top-1/2 glass-h-4 glass-w-4 -glass-translate-y-1/2 glass-text-secondary\"\n          />\n          <input\n            ref={inputRef}\n            id={`${id}-input`}\n            role=\"combobox\"\n            aria-expanded={open}\n            aria-controls={`${id}-listbox`}\n            aria-activedescendant={\n              activeOption ? `${id}-option-${activeOption.value}` : undefined\n            }\n            aria-autocomplete=\"list\"\n            disabled={disabled}\n            value={query || selectedOption?.label || \"\"}\n            placeholder={placeholder}\n            className=\"glass-h-10 glass-w-full glass-rounded-lg glass-border glass-border-white/15 glass-bg-white/8 glass-px-9 glass-text-sm glass-text-primary glass-outline-none focus:glass-border-primary\"\n            onFocus={() => setOpen(true)}\n            onChange={(event) => {\n              setQuery(event.target.value);\n              setActiveIndex(0);\n              setOpen(true);\n            }}\n            onKeyDown={(event) => {\n              if (event.key === \"ArrowDown\") {\n                event.preventDefault();\n                setOpen(true);\n                setActiveIndex((current) =>\n                  Math.min(current + 1, Math.max(enabledOptions.length - 1, 0))\n                );\n              }\n              if (event.key === \"ArrowUp\") {\n                event.preventDefault();\n                setActiveIndex((current) => Math.max(current - 1, 0));\n              }\n              if (event.key === \"Enter\") {\n                event.preventDefault();\n                commit(activeOption);\n              }\n              if (event.key === \"Escape\") {\n                setOpen(false);\n              }\n            }}\n          />\n          <ChevronDown\n            aria-hidden=\"true\"\n            className=\"glass-pointer-events-none glass-absolute glass-right-3 glass-top-1/2 glass-h-4 glass-w-4 -glass-translate-y-1/2 glass-text-secondary\"\n          />\n        </div>\n        {open ? (\n          <div\n            id={`${id}-listbox`}\n            role=\"listbox\"\n            className=\"glass-absolute glass-z-50 glass-mt-1 glass-max-h-72 glass-w-full glass-overflow-auto glass-rounded-lg glass-border glass-border-white/15 glass-bg-white/10 glass-backdrop-blur-lg glass-p-1 glass-shadow-xl\"\n          >\n            {filteredOptions.length === 0 ? (\n              <div className=\"glass-px-3 glass-py-2 glass-text-sm glass-text-secondary\">\n                {emptyText}\n              </div>\n            ) : (\n              groupedOptions.map(([group, groupOptions]) => (\n                <div\n                  key={group || \"ungrouped\"}\n                  role=\"group\"\n                  aria-label={group || undefined}\n                >\n                  {group ? (\n                    <div className=\"glass-px-3 glass-py-1 glass-text-xs glass-font-semibold glass-uppercase glass-tracking-wide glass-text-secondary\">\n                      {group}\n                    </div>\n                  ) : null}\n                  {groupOptions.map((option) => {\n                    const enabledIndex = enabledOptions.findIndex(\n                      (item) => item.value === option.value\n                    );\n                    const active = enabledIndex === activeIndex;\n                    return (\n                      <button\n                        key={option.value}\n                        id={`${id}-option-${option.value}`}\n                        type=\"button\"\n                        role=\"option\"\n                        aria-selected={option.value === selectedValue}\n                        disabled={option.disabled}\n                        className={cn(\n                          \"glass-flex glass-w-full glass-items-center glass-rounded-md glass-px-3 glass-py-2 glass-text-left glass-text-sm glass-text-primary\",\n                          active && \"glass-bg-white/12\",\n                          option.disabled &&\n                            \"glass-cursor-not-allowed glass-opacity-45\"\n                        )}\n                        onMouseDown={(event) => event.preventDefault()}\n                        onClick={() => commit(option)}\n                      >\n                        {option.label}\n                      </button>\n                    );\n                  })}\n                </div>\n              ))\n            )}\n          </div>\n        ) : null}\n      </div>\n    );\n  }\n);\n\nGlassCombobox.displayName = \"GlassCombobox\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Calendar } from \"../../icons\";\nimport { GlassInput, type GlassInputProps } from \"./GlassInput\";\n\nexport interface GlassDateFieldProps\n  extends Omit<GlassInputProps, \"type\" | \"leftIcon\"> {}\n\nexport const GlassDateField = forwardRef<HTMLInputElement, GlassDateFieldProps>(\n  ({ label = \"Date\", ...props }, ref) => (\n    <GlassInput\n      ref={ref}\n      type=\"date\"\n      label={label}\n      leftIcon={<Calendar aria-hidden=\"true\" />}\n      {...props}\n    />\n  )\n);\n\nGlassDateField.displayName = \"GlassDateField\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton, IconButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"./GlassInput\";\n\nexport interface DateRange {\n  from: Date | null;\n  to: Date | null;\n}\n\nexport interface GlassDatePickerProps {\n  /**\n   * Selected date (controlled)\n   */\n  value?: Date | null;\n  /**\n   * Default selected date (uncontrolled)\n   */\n  defaultValue?: Date | null;\n  /**\n   * Date change handler\n   */\n  onChange?: (date: Date | null) => void;\n  /**\n   * Date range mode\n   */\n  mode?: \"single\" | \"range\";\n  /**\n   * Selected date range (for range mode)\n   */\n  rangeValue?: DateRange;\n  /**\n   * Default date range (for range mode)\n   */\n  defaultRangeValue?: DateRange;\n  /**\n   * Range change handler\n   */\n  onRangeChange?: (range: DateRange) => void;\n  /**\n   * Minimum selectable date\n   */\n  minDate?: Date;\n  /**\n   * Maximum selectable date\n   */\n  maxDate?: Date;\n  /**\n   * Disabled dates\n   */\n  disabledDates?: Date[] | ((date: Date) => boolean);\n  /**\n   * Date format string\n   */\n  format?: string;\n  /**\n   * Input placeholder\n   */\n  placeholder?: string;\n  /**\n   * Component size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether the component is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Whether the component is required\n   */\n  required?: boolean;\n  /**\n   * Error state\n   */\n  error?: boolean;\n  /**\n   * Helper text\n   */\n  helperText?: string;\n  /**\n   * Error message\n   */\n  errorMessage?: string;\n  /**\n   * Show week numbers\n   */\n  showWeekNumbers?: boolean;\n  /**\n   * First day of week (0 = Sunday, 1 = Monday)\n   */\n  firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n  /**\n   * Show today button\n   */\n  showTodayButton?: boolean;\n  /**\n   * Show clear button\n   */\n  showClearButton?: boolean;\n  /**\n   * Custom date renderer\n   */\n  renderDate?: (\n    date: Date,\n    isSelected: boolean,\n    isDisabled: boolean\n  ) => React.ReactNode;\n  /**\n   * Locale for date formatting\n   */\n  locale?: string;\n  className?: string;\n  /**\n   * Accessible label\n   */\n  \"aria-label\"?: string;\n  /**\n   * ID of element that labels this component\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element(s) that describe this component\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Data test id\n   */\n  \"data-testid\"?: string;\n  /**\n   * ID for the component\n   */\n  id?: string;\n}\n\n/**\n * GlassDatePicker component\n * Calendar interface with glassmorphism styling and comprehensive date selection\n */\nexport const GlassDatePicker = forwardRef<HTMLDivElement, GlassDatePickerProps>(\n  (\n    {\n      value,\n      defaultValue,\n      onChange,\n      mode = \"single\",\n      rangeValue,\n      defaultRangeValue,\n      onRangeChange,\n      minDate,\n      maxDate,\n      disabledDates,\n      format = \"MM/dd/yyyy\",\n      placeholder = \"Select date...\",\n      size = \"md\",\n      disabled = false,\n      required = false,\n      error = false,\n      helperText,\n      errorMessage,\n      showWeekNumbers = false,\n      firstDayOfWeek = 0,\n      showTodayButton = true,\n      showClearButton = true,\n      renderDate,\n      locale = \"en-US\",\n      className,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledby,\n      \"aria-describedby\": ariaDescribedby,\n      \"data-testid\": dataTestId,\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    // Internal state for uncontrolled mode\n    const [internalValue, setInternalValue] = useState<Date | null>(\n      defaultValue || null\n    );\n    const [internalRangeValue, setInternalRangeValue] = useState<DateRange>(\n      defaultRangeValue || { from: null, to: null }\n    );\n\n    // Calendar state\n    const [isOpen, setIsOpen] = useState(false);\n    const [currentMonth, setCurrentMonth] = useState(new Date());\n    const [inputValue, setInputValue] = useState(\"\");\n\n    // Refs\n    const containerRef = useRef<HTMLDivElement>(null);\n    const inputRef = useRef<HTMLInputElement>(null);\n\n    // Determine current values\n    const currentDate = value !== undefined ? value : internalValue;\n    const currentRange =\n      rangeValue !== undefined ? rangeValue : internalRangeValue;\n\n    // Format date\n    const formatDate = (date: Date): string => {\n      return new Intl.DateTimeFormat(locale, {\n        year: \"numeric\",\n        month: \"2-digit\",\n        day: \"2-digit\",\n      }).format(date);\n    };\n\n    // Parse date from string\n    const parseDate = (dateString: string): Date | null => {\n      const date = new Date(dateString);\n      return isNaN(date.getTime()) ? null : date;\n    };\n\n    // Update input value when date changes\n    useEffect(() => {\n      if (mode === \"single\") {\n        setInputValue(currentDate ? formatDate(currentDate) : \"\");\n      } else {\n        const { from, to } = currentRange;\n        if (from && to) {\n          setInputValue(`${formatDate(from)} - ${formatDate(to)}`);\n        } else if (from) {\n          setInputValue(formatDate(from));\n        } else {\n          setInputValue(\"\");\n        }\n      }\n    }, [currentDate, currentRange, mode, locale]);\n\n    // Handle date selection\n    const handleDateSelect = (date: Date) => {\n      if (isDateDisabled(date)) return;\n\n      if (mode === \"single\") {\n        const newValue = date;\n        if (value === undefined) {\n          setInternalValue(newValue);\n        }\n        onChange?.(newValue);\n        setIsOpen(false);\n      } else {\n        const { from, to } = currentRange;\n\n        if (!from || (from && to)) {\n          // Start new range\n          const newRange = { from: date, to: null };\n          if (rangeValue === undefined) {\n            setInternalRangeValue(newRange);\n          }\n          onRangeChange?.(newRange);\n        } else {\n          // Complete range\n          const newRange =\n            date < from ? { from: date, to: from } : { from, to: date };\n          if (rangeValue === undefined) {\n            setInternalRangeValue(newRange);\n          }\n          onRangeChange?.(newRange);\n          setIsOpen(false);\n        }\n      }\n    };\n\n    // Check if date is disabled\n    const isDateDisabled = (date: Date): boolean => {\n      if (minDate && date < minDate) return true;\n      if (maxDate && date > maxDate) return true;\n\n      if (Array.isArray(disabledDates)) {\n        return disabledDates.some(\n          (disabledDate) => date.toDateString() === disabledDate.toDateString()\n        );\n      }\n\n      if (typeof disabledDates === \"function\") {\n        return disabledDates(date);\n      }\n\n      return false;\n    };\n\n    // Check if date is selected\n    const isDateSelected = (date: Date): boolean => {\n      if (mode === \"single\") {\n        return currentDate\n          ? date.toDateString() === currentDate.toDateString()\n          : false;\n      } else {\n        const { from, to } = currentRange;\n        if (from && to) {\n          return date >= from && date <= to;\n        }\n        return from ? date.toDateString() === from.toDateString() : false;\n      }\n    };\n\n    // Check if date is in range (for range mode)\n    const isDateInRange = (date: Date): boolean => {\n      if (mode !== \"range\") return false;\n      const { from, to } = currentRange;\n      return from && to ? date > from && date < to : false;\n    };\n\n    // Handle input change\n    const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      const newValue = e.target.value;\n      setInputValue(newValue);\n\n      if (mode === \"single\") {\n        const parsedDate = parseDate(newValue);\n        if (parsedDate && !isDateDisabled(parsedDate)) {\n          if (value === undefined) {\n            setInternalValue(parsedDate);\n          }\n          onChange?.(parsedDate);\n          setCurrentMonth(parsedDate);\n        }\n      }\n    };\n\n    // Handle clear\n    const handleClear = () => {\n      if (mode === \"single\") {\n        if (value === undefined) {\n          setInternalValue(null);\n        }\n        onChange?.(null);\n      } else {\n        const newRange = { from: null, to: null };\n        if (rangeValue === undefined) {\n          setInternalRangeValue(newRange);\n        }\n        onRangeChange?.(newRange);\n      }\n      setInputValue(\"\");\n    };\n\n    // Handle today button\n    const handleToday = () => {\n      const today = new Date();\n      today.setHours(0, 0, 0, 0);\n\n      if (!isDateDisabled(today)) {\n        handleDateSelect(today);\n        setCurrentMonth(today);\n      }\n    };\n\n    // Generate calendar days\n    const generateCalendarDays = () => {\n      const startOfMonth = new Date(\n        currentMonth.getFullYear(),\n        currentMonth.getMonth(),\n        1\n      );\n      const endOfMonth = new Date(\n        currentMonth.getFullYear(),\n        currentMonth.getMonth() + 1,\n        0\n      );\n      const startOfWeek = new Date(startOfMonth);\n      startOfWeek.setDate(\n        startOfMonth.getDate() -\n          ((startOfMonth.getDay() - firstDayOfWeek + 7) % 7)\n      );\n\n      const days: Date[] = [];\n      const current = new Date(startOfWeek);\n\n      // Generate 6 weeks (42 days) to ensure consistent calendar size\n      for (let i = 0; i < 42; i++) {\n        days.push(new Date(current));\n        current.setDate(current.getDate() + 1);\n      }\n\n      return days;\n    };\n\n    // Get month names\n    const getMonthNames = () => {\n      return Array.from({ length: 12 }, (_, i) =>\n        new Intl.DateTimeFormat(locale, { month: \"long\" }).format(\n          new Date(2000, i, 1)\n        )\n      );\n    };\n\n    // Get day names\n    const getDayNames = () => {\n      const baseDate = new Date(2000, 0, 2); // A Sunday\n      return Array.from({ length: 7 }, (_, i) => {\n        const date = new Date(baseDate);\n        date.setDate(baseDate.getDate() + ((i + firstDayOfWeek) % 7));\n        return new Intl.DateTimeFormat(locale, { weekday: \"short\" }).format(\n          date\n        );\n      });\n    };\n\n    // Navigate months\n    const navigateMonth = (direction: \"prev\" | \"next\") => {\n      setCurrentMonth((prev: any) => {\n        const newMonth = new Date(prev);\n        newMonth.setMonth(prev.getMonth() + (direction === \"next\" ? 1 : -1));\n        return newMonth;\n      });\n    };\n\n    // Close on outside click\n    useEffect(() => {\n      const handleClickOutside = (event: MouseEvent) => {\n        if (\n          containerRef.current &&\n          !containerRef.current.contains(event.target as Node)\n        ) {\n          setIsOpen(false);\n        }\n      };\n\n      if (isOpen) {\n        document.addEventListener(\"mousedown\", handleClickOutside);\n        return () =>\n          document.removeEventListener(\"mousedown\", handleClickOutside);\n      }\n    }, [isOpen]);\n\n    // Keyboard navigation\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === \"Escape\") {\n        setIsOpen(false);\n        inputRef.current?.focus();\n      } else if (e.key === \"Enter\") {\n        setIsOpen(true);\n      }\n    };\n\n    const calendarDays = generateCalendarDays();\n    const monthNames = getMonthNames();\n    const dayNames = getDayNames();\n\n    return (\n      <div\n        data-glass-component\n        ref={containerRef}\n        className={cn(\n          \"glass-datepicker glass-relative glass-w-full glass-min-w-0\",\n          className\n        )}\n        data-testid={dataTestId}\n        {...props}\n      >\n        <div ref={ref}>\n          <GlassInput\n            ref={inputRef}\n            id={id}\n            value={inputValue}\n            onChange={handleInputChange}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            size={size}\n            disabled={disabled}\n            required={required}\n            state={error ? \"error\" : \"default\"}\n            helperText={error && errorMessage ? errorMessage : helperText}\n            aria-label={ariaLabel}\n            aria-labelledby={ariaLabelledby}\n            aria-describedby={ariaDescribedby}\n            rightIcon={\n              <GlassButton\n                type=\"button\"\n                className=\"glass-p-1 glass-radius-md hover:glass-surface-subtle glass-transition-colors\"\n                onClick={(e) => setIsOpen(!isOpen)}\n                disabled={disabled}\n                aria-label=\"Open calendar\"\n              >\n                <svg\n                  className=\"glass-w-4 glass-h-4\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  viewBox=\"0 0 24 24\"\n                  aria-hidden=\"true\"\n                >\n                  <path\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                    strokeWidth={2}\n                    d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"\n                  />\n                </svg>\n              </GlassButton>\n            }\n            clearable={\n              showClearButton &&\n              (mode === \"single\"\n                ? !!currentDate\n                : !!(currentRange.from || currentRange.to))\n            }\n            onClear={handleClear}\n          />\n        </div>\n\n        {/* Calendar Popup */}\n        {isOpen && (\n          <Motion className=\"glass-absolute glass-top-full glass-left-0 glass-z-50 glass-mt-2\">\n            <Glass className=\"glass-w-80 glass-border glass-border-white/20 glass-p-4 glass-radius-lg\">\n              {/* Calendar Header */}\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n                <IconButton\n                  icon=\"\u2039\"\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => navigateMonth(\"prev\")}\n                  aria-label=\"Previous month\"\n                />\n\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <select\n                    value={currentMonth.getMonth()}\n                    onChange={(e) =>\n                      setCurrentMonth(\n                        new Date(\n                          currentMonth.getFullYear(),\n                          parseInt(e.target.value),\n                          1\n                        )\n                      )\n                    }\n                    className=\"glass-bg-transparent glass-border glass-border-white/20 glass-radius-md glass-px-2 glass-py-1 glass-text-sm glass-focus-ring-2 glass-focus-ring-primary/20\"\n                  >\n                    {monthNames.map((month, index) => (\n                      <option key={month} value={index}>\n                        {month}\n                      </option>\n                    ))}\n                  </select>\n\n                  <select\n                    value={currentMonth.getFullYear()}\n                    onChange={(e) =>\n                      setCurrentMonth(\n                        new Date(\n                          parseInt(e.target.value),\n                          currentMonth.getMonth(),\n                          1\n                        )\n                      )\n                    }\n                    className=\"glass-bg-transparent glass-border glass-border-white/20 glass-radius-md glass-px-2 glass-py-1 glass-text-sm glass-focus-ring-2 glass-focus-ring-primary/20\"\n                  >\n                    {Array.from({ length: 201 }, (_, i) => 1900 + i).map(\n                      (year: any) => (\n                        <option key={year} value={year}>\n                          {year}\n                        </option>\n                      )\n                    )}\n                  </select>\n                </div>\n\n                <IconButton\n                  icon=\"\u203A\"\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => navigateMonth(\"next\")}\n                  aria-label=\"Next month\"\n                />\n              </div>\n\n              {/* Day Headers */}\n              <div className=\"glass-grid glass-grid-cols-7 glass-gap-1 glass-mb-2\">\n                {showWeekNumbers && (\n                  <div className=\"glass-text-xs glass-text-secondary glass-p-2 glass-text-center\">\n                    Wk\n                  </div>\n                )}\n                {dayNames.map((day: any) => (\n                  <div\n                    key={day}\n                    className=\"glass-text-xs glass-text-secondary glass-p-2 glass-text-center glass-font-medium\"\n                  >\n                    {day}\n                  </div>\n                ))}\n              </div>\n\n              {/* Calendar Grid */}\n              <div className=\"glass-grid glass-grid-cols-7 glass-gap-1\">\n                {Array.from({ length: 6 }, (_, weekIndex) => (\n                  <React.Fragment key={weekIndex}>\n                    {showWeekNumbers && (\n                      <div className=\"glass-text-xs glass-text-secondary glass-p-2 glass-text-center\">\n                        {/* Week number calculation would go here */}\n                        {weekIndex + 1}\n                      </div>\n                    )}\n                    {calendarDays\n                      .slice(weekIndex * 7, (weekIndex + 1) * 7)\n                      .map((date: any) => {\n                        const isCurrentMonth =\n                          date.getMonth() === currentMonth.getMonth();\n                        const isSelected = isDateSelected(date);\n                        const isDisabled = isDateDisabled(date);\n                        const isInRange = isDateInRange(date);\n                        const isToday =\n                          date.toDateString() === new Date().toDateString();\n\n                        return (\n                          <GlassButton\n                            key={date.toISOString()}\n                            type=\"button\"\n                            className={cn(\n                              \"glass-p-2 glass-text-sm glass-radius-md glass-relative glass-text-primary glass-focus\",\n                              {\n                                \"glass-text-secondary\": !isCurrentMonth,\n                                \"glass-surface-primary\": isSelected,\n                                \"glass-surface-subtle/20\": isInRange,\n                                \"glass-opacity-50\": isDisabled,\n                                \"glass-font-bold\": isToday,\n                              }\n                            )}\n                            onClick={(e) => handleDateSelect(date)}\n                            disabled={isDisabled}\n                            aria-label={formatDate(date)}\n                          >\n                            {renderDate\n                              ? renderDate(date, isSelected, isDisabled)\n                              : date.getDate()}\n                            {isToday && !isSelected && (\n                              <div\n                                className=\"glass-absolute glass-bottom-1 glass-left-1-2 glass-w-1 glass-h-1 glass-surface-primary glass-radius-full\"\n                                style={{ transform: \"translateX(-50%)\" }}\n                              />\n                            )}\n                          </GlassButton>\n                        );\n                      })}\n                  </React.Fragment>\n                ))}\n              </div>\n\n              {/* Footer Actions */}\n              {(showTodayButton || showClearButton) && (\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-mt-4 glass-pt-4 glass-border-t glass-border-white/20\">\n                  {showTodayButton && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={handleToday}\n                    >\n                      Today\n                    </GlassButton>\n                  )}\n\n                  {showClearButton && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={handleClear}\n                    >\n                      Clear\n                    </GlassButton>\n                  )}\n                </div>\n              )}\n            </Glass>\n          </Motion>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassDatePicker.displayName = \"GlassDatePicker\";\n\n// DateRange interface is already exported above\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { Calendar, ChevronLeft, ChevronRight, X } from \"@/icons\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\n\nexport interface DateRange {\n  from: Date | null;\n  to: Date | null;\n}\n\nexport interface GlassDateRangePickerProps {\n  /**\n   * Current date range value\n   */\n  value?: DateRange;\n  /**\n   * Default date range value\n   */\n  defaultValue?: DateRange;\n  /**\n   * Callback when date range changes\n   */\n  onChange?: (range: DateRange) => void;\n  /**\n   * Placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Date format for display\n   */\n  dateFormat?: \"short\" | \"long\" | \"numeric\";\n  /**\n   * Locale for date formatting\n   */\n  locale?: string;\n  /**\n   * Minimum selectable date\n   */\n  minDate?: Date;\n  /**\n   * Maximum selectable date\n   */\n  maxDate?: Date;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom className for the popover\n   */\n  popoverClassName?: string;\n  /**\n   * Show clear button\n   */\n  showClear?: boolean;\n  /**\n   * Predefined date ranges\n   */\n  presets?: Array<{\n    label: string;\n    getValue: () => DateRange;\n  }>;\n  /**\n   * Custom range label\n   */\n  rangeLabel?: string;\n  /**\n   * Data test id\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassDateRangePicker component\n * A glassmorphism date range picker with calendar interface\n */\nexport const GlassDateRangePicker: React.FC<GlassDateRangePickerProps> = ({\n  value,\n  defaultValue,\n  onChange,\n  placeholder = \"Select date range\",\n  dateFormat = \"short\",\n  locale = \"en-US\",\n  minDate,\n  maxDate,\n  disabled = false,\n  size = \"md\",\n  className,\n  popoverClassName,\n  showClear = true,\n  \"data-testid\": dataTestId,\n  presets = [\n    {\n      label: \"Today\",\n      getValue: () => {\n        const today = new Date();\n        return { from: today, to: today };\n      },\n    },\n    {\n      label: \"Yesterday\",\n      getValue: () => {\n        const yesterday = new Date();\n        yesterday.setDate(yesterday.getDate() - 1);\n        return { from: yesterday, to: yesterday };\n      },\n    },\n    {\n      label: \"Last 7 days\",\n      getValue: () => {\n        const today = new Date();\n        const lastWeek = new Date();\n        lastWeek.setDate(today.getDate() - 6);\n        return { from: lastWeek, to: today };\n      },\n    },\n    {\n      label: \"Last 30 days\",\n      getValue: () => {\n        const today = new Date();\n        const lastMonth = new Date();\n        lastMonth.setDate(today.getDate() - 29);\n        return { from: lastMonth, to: today };\n      },\n    },\n    {\n      label: \"This month\",\n      getValue: () => {\n        const today = new Date();\n        const firstDay = new Date(today.getFullYear(), today.getMonth(), 1);\n        return { from: firstDay, to: today };\n      },\n    },\n    {\n      label: \"Last month\",\n      getValue: () => {\n        const today = new Date();\n        const firstDay = new Date(today.getFullYear(), today.getMonth() - 1, 1);\n        const lastDay = new Date(today.getFullYear(), today.getMonth(), 0);\n        return { from: firstDay, to: lastDay };\n      },\n    },\n  ],\n  rangeLabel = \"to\",\n  ...props\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [currentRange, setCurrentRange] = useState<DateRange>(\n    value || defaultValue || { from: null, to: null }\n  );\n  const [currentMonth, setCurrentMonth] = useState(new Date());\n  const [selectingFrom, setSelectingFrom] = useState(true);\n\n  const triggerRef = useRef<HTMLDivElement>(null);\n  const popoverRef = useRef<HTMLDivElement>(null);\n\n  // Size configurations\n  const sizeConfigs = {\n    sm: {\n      trigger: \"glass-h-8 glass-px-3 glass-text-sm\",\n      calendar: \"glass-w-64\",\n    },\n    md: {\n      trigger: \"glass-h-10 glass-px-4 glass-text-base\",\n      calendar: \"glass-w-80\",\n    },\n    lg: {\n      trigger: \"glass-h-12 glass-px-6 glass-text-lg\",\n      calendar: \"glass-w-96\",\n    },\n  };\n\n  // Update current range when value prop changes\n  useEffect(() => {\n    if (value) {\n      setCurrentRange(value);\n    }\n  }, [value]);\n\n  // Handle range change\n  const handleRangeChange = (newRange: DateRange) => {\n    setCurrentRange(newRange);\n    onChange?.(newRange);\n  };\n\n  // Handle date selection\n  const handleDateSelect = (date: Date) => {\n    const newRange = { ...currentRange };\n\n    if (selectingFrom || !currentRange.from) {\n      newRange.from = date;\n      newRange.to = null;\n      setSelectingFrom(false);\n    } else if (!currentRange.to || date < currentRange.from) {\n      newRange.from = date;\n      newRange.to = null;\n      setSelectingFrom(false);\n    } else {\n      newRange.to = date;\n      setSelectingFrom(true);\n      setIsOpen(false);\n    }\n\n    handleRangeChange(newRange);\n  };\n\n  // Handle preset selection\n  const handlePresetSelect = (preset: (typeof presets)[0]) => {\n    const newRange = preset.getValue();\n    handleRangeChange(newRange);\n    setIsOpen(false);\n  };\n\n  // Clear selection\n  const handleClear = () => {\n    handleRangeChange({ from: null, to: null });\n    setSelectingFrom(true);\n  };\n\n  // Format date for display\n  const formatDate = (date: Date | null) => {\n    if (!date) return \"\";\n\n    const options: Intl.DateTimeFormatOptions = {\n      year: \"numeric\",\n      month:\n        dateFormat === \"numeric\"\n          ? \"2-digit\"\n          : dateFormat === \"long\"\n            ? \"long\"\n            : \"short\",\n      day: \"2-digit\",\n    };\n\n    return new Intl.DateTimeFormat(locale, options).format(date);\n  };\n\n  // Get display value\n  const getDisplayValue = () => {\n    if (!currentRange.from && !currentRange.to) {\n      return placeholder;\n    }\n\n    if (currentRange.from && !currentRange.to) {\n      return `${formatDate(currentRange.from)} ${rangeLabel} ...`;\n    }\n\n    if (currentRange.from && currentRange.to) {\n      return `${formatDate(currentRange.from)} ${rangeLabel} ${formatDate(currentRange.to)}`;\n    }\n\n    return placeholder;\n  };\n\n  // Check if date is in range\n  const isDateInRange = (date: Date) => {\n    if (!currentRange.from || !currentRange.to) return false;\n    return date >= currentRange.from && date <= currentRange.to;\n  };\n\n  // Check if date is range start or end\n  const isRangeBoundary = (date: Date) => {\n    if (!currentRange.from && !currentRange.to) return false;\n    return (\n      (currentRange.from &&\n        date.toDateString() === currentRange.from.toDateString()) ||\n      (currentRange.to &&\n        date.toDateString() === currentRange.to.toDateString())\n    );\n  };\n\n  // Generate calendar data\n  const calendarData = React.useMemo(() => {\n    const year = currentMonth.getFullYear();\n    const month = currentMonth.getMonth();\n\n    const firstDay = new Date(year, month, 1);\n    const lastDay = new Date(year, month + 1, 0);\n    const startDate = new Date(firstDay);\n    startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n    const weeks: Date[][] = [];\n    let currentWeek: Date[] = [];\n    const currentDateIter = new Date(startDate);\n\n    // Build weeks until we've passed the last day and flushed any partial week\n    while (currentDateIter <= lastDay || currentWeek.length > 0) {\n      currentWeek.push(new Date(currentDateIter));\n\n      if (currentWeek.length === 7) {\n        weeks.push([...currentWeek]);\n        currentWeek = [];\n        // If we've already passed the month end and just flushed the trailing week, break\n        if (currentDateIter > lastDay) break;\n      }\n\n      currentDateIter.setDate(currentDateIter.getDate() + 1);\n    }\n\n    return {\n      year,\n      month,\n      monthName: new Intl.DateTimeFormat(locale, { month: \"long\" }).format(\n        currentMonth\n      ),\n      weeks,\n    };\n  }, [currentMonth, locale]);\n\n  // Navigate months\n  const navigateMonth = (direction: \"prev\" | \"next\") => {\n    setCurrentMonth((prev: any) => {\n      const newDate = new Date(prev);\n      if (direction === \"prev\") {\n        newDate.setMonth(newDate.getMonth() - 1);\n      } else {\n        newDate.setMonth(newDate.getMonth() + 1);\n      }\n      return newDate;\n    });\n  };\n\n  // Check if date is disabled\n  const isDisabled = (date: Date) => {\n    if (minDate && date < minDate) return true;\n    if (maxDate && date > maxDate) return true;\n    return false;\n  };\n\n  // Check if date is today\n  const isToday = (date: Date) => {\n    const today = new Date();\n    return date.toDateString() === today.toDateString();\n  };\n\n  // Check if date is in current month\n  const isCurrentMonth = (date: Date) => {\n    return date.getMonth() === currentMonth.getMonth();\n  };\n\n  // Close popover when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        triggerRef.current &&\n        !triggerRef.current.contains(event.target as Node) &&\n        popoverRef.current &&\n        !popoverRef.current.contains(event.target as Node)\n      ) {\n        setIsOpen(false);\n      }\n    };\n\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, []);\n\n  const config = sizeConfigs[size];\n\n  return (\n    <div\n      data-glass-component\n      className={cn(\"glass-relative glass-w-full glass-min-w-0\", className)}\n      data-testid={dataTestId}\n    >\n      {/* Trigger */}\n      <div\n        ref={triggerRef}\n        className={cn(\n          \"glass-relative glass-flex glass-items-center glass-justify-between glass-surface-subtle/10 glass-backdrop-blur-md glass-border glass-border-white/20\",\n          \"glass-radius-lg glass-cursor-pointer glass-transition\",\n          config.trigger,\n          disabled && \"glass-opacity-50\"\n        )}\n        onClick={(e) => !disabled && setIsOpen(!isOpen)}\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-1 glass-min-w-0\">\n          <Calendar className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-60 glass-flex-shrink-0\" />\n          <span\n            className={cn(\n              \"glass-truncate\",\n              !currentRange.from && !currentRange.to\n                ? \"glass-text-primary/50\"\n                : \"glass-text-primary\"\n            )}\n          >\n            {getDisplayValue()}\n          </span>\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          {showClear && (currentRange.from || currentRange.to) && (\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                handleClear();\n              }}\n              className=\"glass-p-1 hover:glass-surface-subtle/20 glass-radius-md glass-transition-colors\"\n              aria-label=\"Clear date range\"\n            >\n              <X className=\"glass-w-3 glass-h-3 glass-text-primary-glass-opacity-60\" />\n            </button>\n          )}\n        </div>\n      </div>\n\n      {/* Popover */}\n      {isOpen && (\n        <Motion\n          preset=\"fadeIn\"\n          className=\"glass-absolute glass-z-50 glass-mt-2\"\n        >\n          <div\n            ref={popoverRef}\n            className={cn(\n              \"glass-surface-dark/30 glass-backdrop-blur-md glass-border glass-border-white/20 glass-radius-xl glass-shadow-2xl\",\n              config.calendar,\n              popoverClassName\n            )}\n          >\n            <GlassCard\n              variant=\"outline\"\n              className=\"glass-border-0 glass-bg-transparent\"\n            >\n              <CardContent className=\"glass-p-4\">\n                <div className=\"glass-flex glass-gap-6\">\n                  {/* Presets */}\n                  {presets && presets.length > 0 && (\n                    <div className=\"glass-flex-shrink-0\">\n                      <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80 glass-mb-3\">\n                        Quick Select\n                      </h4>\n                      <div className=\"glass-gap-1\">\n                        {presets.map((preset, index) => (\n                          <GlassButton\n                            key={preset.label}\n                            variant=\"ghost\"\n                            size=\"sm\"\n                            onClick={(e) => handlePresetSelect(preset)}\n                            className=\"glass-w-full glass-justify-start glass-text-left\"\n                          >\n                            {preset.label}\n                          </GlassButton>\n                        ))}\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Calendar */}\n                  <div className=\"glass-flex-1\">\n                    {/* Header */}\n                    <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n                      <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                        {calendarData.monthName} {calendarData.year}\n                      </h3>\n                      <div className=\"glass-flex glass-gap-1\">\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => navigateMonth(\"prev\")}\n                        >\n                          <ChevronLeft className=\"glass-w-4 glass-h-4\" />\n                        </GlassButton>\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => navigateMonth(\"next\")}\n                        >\n                          <ChevronRight className=\"glass-w-4 glass-h-4\" />\n                        </GlassButton>\n                      </div>\n                    </div>\n\n                    {/* Calendar Grid */}\n                    <div className=\"glass-gap-2\">\n                      {/* Week headers */}\n                      <div className=\"glass-grid glass-grid-cols-7 glass-gap-1\">\n                        {[\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"].map(\n                          (day) => (\n                            <div\n                              key={day}\n                              className=\"glass-text-center glass-text-sm glass-font-medium glass-text-primary-glass-opacity-60 glass-py-2\"\n                            >\n                              {day}\n                            </div>\n                          )\n                        )}\n                      </div>\n\n                      {/* Calendar days */}\n                      <div className=\"glass-grid glass-grid-cols-7 glass-gap-1\">\n                        {calendarData.weeks.flat().map((date, index) => {\n                          const isInRange = isDateInRange(date);\n                          const isBoundary = isRangeBoundary(date);\n                          const isDisabledDate = isDisabled(date);\n                          const isCurrentMonthDate = isCurrentMonth(date);\n                          const isTodayDate = isToday(date);\n\n                          return (\n                            <Motion\n                              key={index}\n                              preset=\"scaleIn\"\n                              className=\"glass-aspect-square\"\n                            >\n                              <button\n                                onClick={(e) =>\n                                  !isDisabledDate && handleDateSelect(date)\n                                }\n                                disabled={isDisabledDate}\n                                className={cn(\n                                  \"glass-w-full glass-h-full glass-radius-lg glass-text-sm glass-font-medium\",\n                                  \"glass-flex glass-items-center glass-justify-center glass-focus\",\n                                  {\n                                    \"glass-text-primary/60\":\n                                      !isCurrentMonthDate,\n                                    \"glass-text-primary\": isCurrentMonthDate,\n                                    \"glass-surface-primary\": isBoundary,\n                                    \"glass-surface-subtle/20\":\n                                      isInRange && !isBoundary,\n                                    \"glass-surface-subtle/10 glass-text-primary glass-font-semibold\":\n                                      isTodayDate && !isInRange && !isBoundary,\n                                    \"glass-ring-2 glass-ring-primary\":\n                                      isBoundary,\n                                  }\n                                )}\n                              >\n                                {date.getDate()}\n                              </button>\n                            </Motion>\n                          );\n                        })}\n                      </div>\n                    </div>\n\n                    {/* Footer */}\n                    <div className=\"glass-flex glass-justify-between glass-items-center glass-mt-4 glass-pt-4 glass-border-t glass-border-white/10\">\n                      <div className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                        {selectingFrom\n                          ? \"Select start date\"\n                          : \"Select end date\"}\n                      </div>\n                      <div className=\"glass-flex glass-gap-2\">\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => setIsOpen(false)}\n                        >\n                          Cancel\n                        </GlassButton>\n                        <GlassButton\n                          variant=\"primary\"\n                          size=\"sm\"\n                          onClick={(e) => setIsOpen(false)}\n                        >\n                          Apply\n                        </GlassButton>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </CardContent>\n            </GlassCard>\n          </div>\n        </Motion>\n      )}\n    </div>\n  );\n};\n\nexport default GlassDateRangePicker;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface GlassFieldGroupProps\n  extends React.FieldsetHTMLAttributes<HTMLFieldSetElement> {\n  legend?: React.ReactNode;\n  description?: React.ReactNode;\n  columns?: 1 | 2 | 3;\n}\n\nexport const GlassFieldGroup = forwardRef<\n  HTMLFieldSetElement,\n  GlassFieldGroupProps\n>(\n  (\n    { legend, description, columns = 1, className, children, ...props },\n    ref\n  ) => {\n    return (\n      <fieldset\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-space-y-3 glass-rounded-lg glass-border glass-border-white/10 glass-bg-white/6 glass-p-4\",\n          className\n        )}\n        {...props}\n      >\n        {legend ? (\n          <legend className=\"glass-text-sm glass-font-semibold glass-text-primary\">\n            {legend}\n          </legend>\n        ) : null}\n        {description ? (\n          <p className=\"glass-text-xs glass-text-secondary\">{description}</p>\n        ) : null}\n        <div\n          className={cn(\n            \"glass-grid glass-gap-3\",\n            columns === 2 && \"md:glass-grid-cols-2\",\n            columns === 3 && \"md:glass-grid-cols-3\"\n          )}\n        >\n          {children}\n        </div>\n      </fieldset>\n    );\n  }\n);\n\nGlassFieldGroup.displayName = \"GlassFieldGroup\";\n", "\"use client\";\n\nimport React from \"react\";\n\nimport { Label, OptimizedGlass, Slot } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle } from \"../../icons\";\nimport {\n  Controller,\n  ControllerProps,\n  FieldPath,\n  FieldValues,\n  FormProvider,\n  useFormContext,\n} from \"react-hook-form\";\nimport { GlassLabel } from \"./GlassLabel\";\n\n// Form root is just the FormProvider\nconst GlassForm = FormProvider as <\n  TFieldValues extends FieldValues,\n  TContext = unknown,\n  TTransformedValues = TFieldValues,\n>(\n  props: React.ComponentProps<\n    typeof FormProvider<TFieldValues, TContext, TTransformedValues>\n  >\n) => React.JSX.Element;\n\n// Form field context types\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n  name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n);\n\n// Glass Form Field\nconst GlassFormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider\n      data-glass-component\n      value={{ name: props?.name }}\n    >\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  );\n};\n\n// Form item context types\ntype FormItemContextValue = {\n  id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n);\n\n// Glass Form Item\nexport interface GlassFormItemProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Item spacing variant */\n  spacing?: \"sm\" | \"md\" | \"lg\";\n  /** Whether to show glass background */\n  glass?: boolean;\n}\n\nconst GlassFormItem = React.forwardRef<HTMLDivElement, GlassFormItemProps>(\n  ({ className, spacing = \"md\", glass = false, ...props }, ref) => {\n    const id = React.useId();\n\n    const spacingConfig = {\n      sm: \"glass-auto-gap glass-auto-gap-xs\",\n      md: \"glass-auto-gap glass-auto-gap-sm\",\n      lg: \"glass-auto-gap glass-auto-gap-md\",\n    };\n\n    return (\n      <FormItemContext.Provider value={{ id }}>\n        {glass ? (\n          <OptimizedGlass\n            elevation={\"level1\"}\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            ref={ref}\n            className={cn(\n              \"glass-form-item glass-contrast-guard\",\n              spacingConfig?.[spacing],\n              className\n            )}\n            {...props}\n          />\n        ) : (\n          <div\n            ref={ref}\n            className={cn(\n              \"glass-form-item\",\n              spacingConfig?.[spacing],\n              className\n            )}\n            {...props}\n          />\n        )}\n      </FormItemContext.Provider>\n    );\n  }\n);\nGlassFormItem.displayName = \"GlassFormItem\";\n\n// Glass Form Label\nexport interface GlassFormLabelProps\n  extends React.ComponentPropsWithoutRef<typeof Label> {\n  /** Label size variant */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Whether to show required indicator */\n  required?: boolean;\n}\n\nconst GlassFormLabel = React.forwardRef<\n  React.ElementRef<typeof Label>,\n  GlassFormLabelProps\n>(({ className, size = \"md\", required = false, ...props }, ref) => {\n  const { error, formItemId } = useFormField();\n\n  return (\n    <GlassLabel\n      ref={ref}\n      size={size}\n      required={required}\n      className={cn(\"glass-form-label\", error && \"text-red-400\", className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  );\n});\nGlassFormLabel.displayName = \"GlassFormLabel\";\n\n// Glass Form Control\nexport interface GlassFormControlProps\n  extends React.ComponentPropsWithoutRef<typeof Slot> {\n  /** Whether to add glass styling to the control */\n  glass?: boolean;\n}\n\nconst GlassFormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  GlassFormControlProps\n>(({ className, glass = false, ...props }, ref) => {\n  const { error, formItemId, formDescriptionId, formMessageId } =\n    useFormField();\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      className={cn(\n        \"glass-form-control\",\n        glass && [\n          \"glass-backdrop-blur-md bg-background/50\",\n          \"border border-border/20 glass-radius-lg\",\n        ],\n        className\n      )}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  );\n});\nGlassFormControl.displayName = \"GlassFormControl\";\n\n// Glass Form Description\nexport interface GlassFormDescriptionProps\n  extends React.HTMLAttributes<HTMLParagraphElement> {\n  /** Description size variant */\n  size?: \"xs\" | \"sm\" | \"md\";\n  /** Description variant */\n  variant?: \"default\" | \"muted\" | \"accent\";\n}\n\nconst GlassFormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  GlassFormDescriptionProps\n>(({ className, size = \"sm\", variant = \"muted\", ...props }, ref) => {\n  const { formDescriptionId } = useFormField();\n\n  const sizeConfig = {\n    xs: \"glass-text-xs\",\n    sm: \"glass-text-sm\",\n    md: \"glass-text-base\",\n  };\n\n  const variantConfig = {\n    default: \"text-foreground\",\n    muted: \"glass-text-secondary\",\n    accent: \"text-primary\",\n  };\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn(\n        \"glass-form-description\",\n        sizeConfig?.[size],\n        variantConfig?.[variant],\n        className\n      )}\n      {...props}\n    />\n  );\n});\nGlassFormDescription.displayName = \"GlassFormDescription\";\n\n// Glass Form Message\nexport interface GlassFormMessageProps\n  extends React.HTMLAttributes<HTMLParagraphElement> {\n  /** Message size variant */\n  size?: \"xs\" | \"sm\" | \"md\";\n  /** Message variant */\n  variant?: \"error\" | \"warning\" | \"success\" | \"info\";\n  /** Whether to show icon */\n  showIcon?: boolean;\n}\n\nconst GlassFormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  GlassFormMessageProps\n>(\n  (\n    {\n      className,\n      children,\n      size = \"sm\",\n      variant = \"error\",\n      showIcon = true,\n      ...props\n    },\n    ref\n  ) => {\n    const { error, formMessageId } = useFormField();\n    const body = error ? String(error?.message) : children;\n\n    if (!body) {\n      return null;\n    }\n\n    const sizeConfig = {\n      xs: \"glass-text-xs\",\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n    };\n\n    const variantConfig = {\n      error: \"text-red-400\",\n      warning: \"text-amber-400\",\n      success: \"text-green-400\",\n      info: \"text-blue-400\",\n    };\n\n    const iconSize = {\n      xs: \"h-3 w-3\",\n      sm: \"h-4 w-4\",\n      md: \"h-5 w-5\",\n    };\n\n    return (\n      <p\n        ref={ref}\n        id={formMessageId}\n        className={cn(\n          \"glass-form-message font-medium flex items-center glass-gap-1.5\",\n          sizeConfig?.[size],\n          variantConfig?.[variant],\n          className\n        )}\n        {...props}\n      >\n        {showIcon && variant === \"error\" && (\n          <AlertCircle className={iconSize?.[size]} />\n        )}\n        {body}\n      </p>\n    );\n  }\n);\nGlassFormMessage.displayName = \"GlassFormMessage\";\n\n// Custom hook for form field state\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext);\n  const itemContext = React.useContext(FormItemContext);\n  const { getFieldState, formState } = useFormContext();\n\n  const fieldState = getFieldState(fieldContext.name, formState);\n\n  if (!fieldContext) {\n    throw new Error(\"useFormField should be used within <GlassFormField>\");\n  }\n\n  const { id } = itemContext;\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  };\n};\n\n// Export all components\nexport {\n  GlassForm,\n  GlassFormControl,\n  GlassFormDescription,\n  GlassFormField,\n  GlassFormItem,\n  GlassFormLabel,\n  GlassFormMessage,\n  useFormField,\n};\n\n// Re-export with shorter names for easier usage\nexport {\n  GlassForm as Form,\n  GlassFormControl as FormControl,\n  GlassFormDescription as FormDescription,\n  GlassFormField as FormField,\n  GlassFormItem as FormItem,\n  GlassFormLabel as FormLabel,\n  GlassFormMessage as FormMessage,\n  useFormField as useGlassFormField,\n};\n\nexport default GlassForm;\n", "'use client';\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\n\nexport interface GlassLabelProps\n  extends React.LabelHTMLAttributes<HTMLLabelElement> {\n  /** Size of the label */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"muted\" | \"accent\" | \"success\" | \"warning\" | \"error\";\n  /** Whether the label is required */\n  required?: boolean;\n  /** Whether the label is for a disabled field */\n  disabled?: boolean;\n  /** Custom icon */\n  icon?: React.ReactNode;\n  /** Optional description for the label */\n  description?: string;\n  /** Whether the label should have enhanced visual styling */\n  enhanced?: boolean;\n  /** Optional test id hook */\n  'data-testid'?: string;\n}\n\nexport const GlassLabel = forwardRef<HTMLLabelElement, GlassLabelProps>(\n  (\n    {\n      size = \"md\",\n      variant = \"default\",\n      required = false,\n      disabled = false,\n      icon,\n      description,\n      enhanced = false,\n      className,\n      children,\n      id,\n      'data-testid': dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const labelId = useA11yId(\"glass-label\");\n    const finalId = id || labelId;\n    const sizeConfig = {\n      xs: \"glass-text-xs\",\n      sm: \"glass-text-sm\",\n      md: \"glass-text-sm\",\n      lg: \"glass-text-base\",\n    };\n\n    const variantConfig = {\n      default: \"text-foreground\",\n      muted: \"glass-text-secondary\",\n      accent: \"text-primary\",\n      success: \"text-green-400\",\n      warning: \"text-amber-400\",\n      error: \"text-red-400\",\n    };\n\n    return (\n      <div data-glass-component className=\"glass-label-container\">\n        <label\n          ref={ref}\n          id={finalId}\n          data-testid={dataTestId ?? 'glasslabel'}\n          className={cn(\n            \"glass-label\",\n            \"font-medium leading-none transition-colors duration-200\",\n            \"peer-glass-disabled-cursor-not-allowed peer-disabled:opacity-70\",\n\n            // Size\n            sizeConfig[size],\n\n            // Variant\n            variantConfig[variant],\n\n            // Disabled state\n            disabled && \"opacity-50 cursor-not-allowed\",\n\n            // Icon spacing\n            icon && \"flex items-center glass-gap-2\",\n\n            // Enhanced styling\n            enhanced && \"glass-focus\",\n\n            className\n          )}\n          {...props}\n        >\n          {icon && <span className='glass-shrink-0'>{icon}</span>}\n\n          <span>\n            {children}\n            {required && (\n              <span\n                className='glass-text-danger glass-ml-1'\n                aria-label=\"required\"\n              >\n                *\n              </span>\n            )}\n          </span>\n        </label>\n\n        {description && (\n          <p\n            className={cn(\n              \"glass-label-description glass-text-secondary glass-mt-1\",\n              size === \"xs\" ? \"glass-text-xs\" : \"glass-text-sm\",\n              disabled && \"opacity-50\"\n            )}\n          >\n            {description}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassLabel.displayName = \"GlassLabel\";\n\nexport default GlassLabel;\n", "\"use client\";\n\nimport React, { forwardRef, useId } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { GlassValidationMessage } from \"./GlassValidationMessage\";\n\nexport interface GlassFormFieldProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  label?: React.ReactNode;\n  htmlFor?: string;\n  description?: React.ReactNode;\n  error?: React.ReactNode;\n  required?: boolean;\n  disabled?: boolean;\n}\n\nexport const GlassFormField = forwardRef<HTMLDivElement, GlassFormFieldProps>(\n  (\n    {\n      label,\n      htmlFor,\n      description,\n      error,\n      required,\n      disabled,\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const generatedId = useId();\n    const labelId = htmlFor ?? `glass-field-${generatedId}`;\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        data-disabled={disabled || undefined}\n        className={cn(\n          \"glass-space-y-2\",\n          disabled && \"glass-opacity-60\",\n          className\n        )}\n        {...props}\n      >\n        {label ? (\n          <label\n            htmlFor={labelId}\n            className=\"glass-block glass-text-sm glass-font-medium glass-text-primary\"\n          >\n            {label}\n            {required ? (\n              <span\n                aria-hidden=\"true\"\n                className=\"glass-ml-1 glass-text-red-300\"\n              >\n                *\n              </span>\n            ) : null}\n          </label>\n        ) : null}\n        {children}\n        {description && !error ? (\n          <p className=\"glass-text-xs glass-text-secondary\">{description}</p>\n        ) : null}\n        {error ? (\n          <GlassValidationMessage tone=\"error\">{error}</GlassValidationMessage>\n        ) : null}\n      </div>\n    );\n  }\n);\n\nGlassFormField.displayName = \"GlassFormField\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { AlertCircle, AlertTriangle, CheckCircle, Info } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface GlassValidationMessageProps\n  extends React.HTMLAttributes<HTMLParagraphElement> {\n  tone?: \"error\" | \"warning\" | \"success\" | \"info\";\n  icon?: React.ReactNode;\n}\n\nconst toneConfig = {\n  error: { icon: AlertCircle, role: \"alert\", className: \"glass-text-red-300\" },\n  warning: {\n    icon: AlertTriangle,\n    role: \"status\",\n    className: \"glass-text-amber-300\",\n  },\n  success: {\n    icon: CheckCircle,\n    role: \"status\",\n    className: \"glass-text-green-300\",\n  },\n  info: { icon: Info, role: \"status\", className: \"glass-text-secondary\" },\n};\n\nexport const GlassValidationMessage = forwardRef<\n  HTMLParagraphElement,\n  GlassValidationMessageProps\n>(({ tone = \"info\", icon, className, children, ...props }, ref) => {\n  const config = toneConfig[tone];\n  const Icon = config.icon;\n\n  return (\n    <p\n      ref={ref}\n      role={config.role}\n      className={cn(\n        \"glass-flex glass-items-start glass-gap-1.5 glass-text-xs\",\n        config.className,\n        className\n      )}\n      {...props}\n    >\n      <span aria-hidden=\"true\" className=\"glass-mt-0.5 glass-inline-flex\">\n        {icon ?? <Icon size={14} />}\n      </span>\n      <span>{children}</span>\n    </p>\n  );\n});\n\nGlassValidationMessage.displayName = \"GlassValidationMessage\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle, Check, Circle } from \"@/icons\";\nimport React from \"react\";\nimport { Motion } from \"../../primitives\";\n\nexport interface FormStep {\n  id: string;\n  title: string;\n  description?: string;\n  icon?: React.ReactNode;\n  completed?: boolean;\n  disabled?: boolean;\n  error?: boolean;\n  optional?: boolean;\n}\n\nexport interface GlassFormStepperProps {\n  /**\n   * Array of form steps\n   */\n  steps: FormStep[];\n  /**\n   * Current active step index\n   */\n  currentStep?: number;\n  /**\n   * Step click handler\n   */\n  onStepClick?: (stepIndex: number) => void;\n  /**\n   * Orientation of the stepper\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Show step numbers\n   */\n  showNumbers?: boolean;\n  /**\n   * Show step descriptions\n   */\n  showDescriptions?: boolean;\n  /**\n   * Allow clicking on completed steps\n   */\n  allowClickCompleted?: boolean;\n  /**\n   * Show progress line\n   */\n  showProgressLine?: boolean;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Test ID for the component\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassFormStepper component\n * A visual stepper component for multi-step forms with glassmorphism design\n */\nexport const GlassFormStepper: React.FC<GlassFormStepperProps> = ({\n  steps,\n  currentStep = 0,\n  onStepClick,\n  orientation = \"horizontal\",\n  size = \"md\",\n  showNumbers = true,\n  showDescriptions = false,\n  allowClickCompleted = true,\n  showProgressLine = true,\n  className,\n  \"data-testid\": dataTestId,\n  ...props\n}) => {\n  // Size configurations\n  const sizeConfigs = {\n    sm: {\n      stepSize: \"glass-w-8 glass-h-8\",\n      iconSize: \"glass-w-4 glass-h-4\",\n      fontSize: \"glass-text-sm\",\n      lineHeight: \"glass-h-px\",\n      spacing: \"glass-gap-4\",\n    },\n    md: {\n      stepSize: \"glass-w-10 glass-h-10\",\n      iconSize: \"glass-w-5 glass-h-5\",\n      fontSize: \"glass-text-base\",\n      lineHeight: \"glass-h-0-5\",\n      spacing: \"glass-gap-6\",\n    },\n    lg: {\n      stepSize: \"glass-w-12 glass-h-12\",\n      iconSize: \"glass-w-6 glass-h-6\",\n      fontSize: \"glass-text-lg\",\n      lineHeight: \"glass-h-1\",\n      spacing: \"glass-gap-8\",\n    },\n  };\n\n  const config = sizeConfigs[size];\n\n  // Get step state\n  const getStepState = (stepIndex: number, step: FormStep) => {\n    if (step.disabled) return \"disabled\";\n    if (step.error) return \"error\";\n    if (step.completed) return \"completed\";\n    if (stepIndex === currentStep) return \"active\";\n    if (stepIndex < currentStep) return \"completed\";\n    return \"pending\";\n  };\n\n  // Get step styles based on state\n  const getStepStyles = (state: string) => {\n    switch (state) {\n      case \"completed\":\n        return {\n          circle:\n            \"glass-surface-success glass-border-success glass-text-primary\",\n          icon: \"glass-text-primary\",\n          line: \"glass-surface-success\",\n          text: \"glass-text-primary\",\n        };\n      case \"active\":\n        return {\n          circle:\n            \"glass-surface-primary glass-border-primary glass-text-primary\",\n          icon: \"glass-text-primary\",\n          line: \"glass-surface-primary\",\n          text: \"glass-text-primary\",\n        };\n      case \"error\":\n        return {\n          circle: \"glass-surface-danger glass-border-danger glass-text-primary\",\n          icon: \"glass-text-primary\",\n          line: \"glass-surface-danger\",\n          text: \"glass-text-danger\",\n        };\n      case \"disabled\":\n        return {\n          circle:\n            \"glass-surface-subtle/10 glass-border-white/30 glass-text-secondary\",\n          icon: \"glass-text-primary/50\",\n          line: \"glass-surface-subtle/20\",\n          text: \"glass-text-primary/50\",\n        };\n      default:\n        return {\n          circle:\n            \"glass-surface-subtle/10 glass-border-white/30 glass-text-secondary\",\n          icon: \"glass-text-primary/60\",\n          line: \"glass-surface-subtle/20\",\n          text: \"glass-text-primary/60\",\n        };\n    }\n  };\n\n  // Handle step click\n  const handleStepClick = (stepIndex: number, step: FormStep) => {\n    const state = getStepState(stepIndex, step);\n\n    if (state === \"disabled\") return;\n    if (state === \"pending\" && !allowClickCompleted) return;\n\n    onStepClick?.(stepIndex);\n  };\n\n  // Render horizontal stepper\n  const renderHorizontalStepper = () => (\n    <nav\n      aria-label=\"Form steps\"\n      className={cn(\n        \"glass-flex glass-items-start glass-justify-center glass-w-full glass-min-w-0\",\n        config.spacing,\n        className\n      )}\n      style={{ minWidth: 0 }}\n    >\n      {steps.map((step, index) => {\n        const state = getStepState(index, step);\n        const styles = getStepStyles(state);\n        const isLast = index === steps.length - 1;\n\n        return (\n          <React.Fragment key={step.id}>\n            {/* Step */}\n            <div className=\"glass-flex glass-flex-col glass-items-center glass-group glass-min-w-0\">\n              <Motion\n                preset={state === \"active\" ? \"scaleIn\" : \"fadeIn\"}\n                className=\"glass-flex glass-flex-col glass-items-center glass-cursor-pointer\"\n                onClick={(e) => handleStepClick(index, step)}\n                role=\"button\"\n                aria-label={`Step ${index + 1}: ${step.title}${state === \"completed\" ? \" (completed)\" : state === \"active\" ? \" (current)\" : \"\"}`}\n                aria-current={state === \"active\" ? \"step\" : undefined}\n                aria-disabled={state === \"disabled\"}\n                tabIndex={state === \"disabled\" ? -1 : 0}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\" || e.key === \" \") {\n                    e.preventDefault();\n                    handleStepClick(index, step);\n                  }\n                }}\n              >\n                {/* Step Circle */}\n                <div\n                  className={cn(\n                    \"glass-relative glass-radius-full glass-border-2 glass-flex glass-items-center glass-justify-center glass-transition\",\n                    \"glass-hover-lift\",\n                    config.stepSize,\n                    styles.circle\n                  )}\n                >\n                  {state === \"completed\" ? (\n                    <Check className={config.iconSize} />\n                  ) : state === \"error\" ? (\n                    <AlertCircle className={config.iconSize} />\n                  ) : step.icon ? (\n                    <span className={cn(config.iconSize, styles.icon)}>\n                      {step.icon}\n                    </span>\n                  ) : showNumbers ? (\n                    <span\n                      className={cn(\n                        \"glass-font-medium\",\n                        config.fontSize.replace(\"text-\", \"text-\"),\n                        styles.icon\n                      )}\n                    >\n                      {index + 1}\n                    </span>\n                  ) : (\n                    <Circle className={config.iconSize} />\n                  )}\n\n                  {/* Optional indicator */}\n                  {step.optional && (\n                    <div className=\"glass-absolute glass-top-1 glass--right-1 glass-w-2 glass-h-2 glass-surface-yellow glass-radius-full\" />\n                  )}\n                </div>\n\n                {/* Step Label */}\n                <div className=\"glass-mt-3 glass-text-center glass-max-w-24 glass-min-w-0\">\n                  <h3\n                    className={cn(\n                      \"glass-font-medium glass-leading-tight glass-break-words\",\n                      config.fontSize,\n                      styles.text\n                    )}\n                  >\n                    {step.title}\n                  </h3>\n                  {showDescriptions && step.description && (\n                    <p\n                      className={cn(\n                        \"glass-text-xs glass-mt-1 glass-leading-tight glass-break-words\",\n                        state === \"active\"\n                          ? \"glass-text-primary/80\"\n                          : \"glass-text-primary/50\"\n                      )}\n                    >\n                      {step.description}\n                    </p>\n                  )}\n                </div>\n              </Motion>\n            </div>\n\n            {/* Connection Line */}\n            {!isLast && showProgressLine && (\n              <div\n                className={cn(\n                  \"glass-flex-1 glass-mx-2 glass-transition\",\n                  config.lineHeight,\n                  index < currentStep ? styles.line : \"glass-surface-subtle/20\"\n                )}\n              />\n            )}\n          </React.Fragment>\n        );\n      })}\n    </nav>\n  );\n\n  // Render vertical stepper\n  const renderVerticalStepper = () => (\n    <nav\n      aria-label=\"Form steps\"\n      className={cn(\"flex flex-col\", config.spacing, className)}\n      data-testid={dataTestId || \"glassformstepper\"}\n    >\n      {steps.map((step, index) => {\n        const state = getStepState(index, step);\n        const styles = getStepStyles(state);\n        const isLast = index === steps.length - 1;\n\n        return (\n          <React.Fragment key={step.id}>\n            <div className=\"glass-flex glass-items-start glass-group\">\n              <Motion\n                preset={state === \"active\" ? \"slideRight\" : \"fadeIn\"}\n                className=\"glass-flex glass-items-start glass-cursor-pointer\"\n                onClick={(e) => handleStepClick(index, step)}\n                role=\"button\"\n                aria-label={`Step ${index + 1}: ${step.title}${state === \"completed\" ? \" (completed)\" : state === \"active\" ? \" (current)\" : \"\"}`}\n                aria-current={state === \"active\" ? \"step\" : undefined}\n                aria-disabled={state === \"disabled\"}\n                tabIndex={state === \"disabled\" ? -1 : 0}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\" || e.key === \" \") {\n                    e.preventDefault();\n                    handleStepClick(index, step);\n                  }\n                }}\n              >\n                {/* Step Circle */}\n                <div\n                  className={cn(\n                    \"relative glass-radius-full border-2 flex items-center justify-center transition-all duration-200\",\n                    \"hover:scale-110 group-hover:shadow-lg glass-mr-4\",\n                    config.stepSize,\n                    styles.circle\n                  )}\n                >\n                  {state === \"completed\" ? (\n                    <Check className={config.iconSize} />\n                  ) : state === \"error\" ? (\n                    <AlertCircle className={config.iconSize} />\n                  ) : step.icon ? (\n                    <span className={cn(config.iconSize, styles.icon)}>\n                      {step.icon}\n                    </span>\n                  ) : showNumbers ? (\n                    <span\n                      className={cn(\n                        \"font-medium\",\n                        config.fontSize.replace(\"text-\", \"text-\"),\n                        styles.icon\n                      )}\n                    >\n                      {index + 1}\n                    </span>\n                  ) : (\n                    <Circle className={config.iconSize} />\n                  )}\n\n                  {/* Optional indicator */}\n                  {step.optional && (\n                    <div className=\"glass-absolute glass-top-1 glass--right-1 glass-w-2 glass-h-2 glass-surface-yellow glass-radius-full\" />\n                  )}\n                </div>\n\n                {/* Step Content */}\n                <div className=\"glass-flex-1 glass-pt-1\">\n                  <h3\n                    className={cn(\n                      \"font-medium leading-tight\",\n                      config.fontSize,\n                      styles.text\n                    )}\n                  >\n                    {step.title}\n                  </h3>\n                  {showDescriptions && step.description && (\n                    <p\n                      className={cn(\n                        \"glass-text-sm glass-mt-1 leading-tight\",\n                        state === \"active\"\n                          ? \"glass-text-primary/80\"\n                          : \"glass-text-primary/50\"\n                      )}\n                    >\n                      {step.description}\n                    </p>\n                  )}\n                </div>\n              </Motion>\n            </div>\n\n            {/* Connection Line */}\n            {!isLast && showProgressLine && (\n              <div className=\"glass-flex glass-justify-center glass-py-2\">\n                <div\n                  className={cn(\n                    \"w-px h-8 transition-all duration-300\",\n                    index < currentStep ? styles.line : \"bg-white/20\"\n                  )}\n                />\n              </div>\n            )}\n          </React.Fragment>\n        );\n      })}\n    </nav>\n  );\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      {orientation === \"horizontal\"\n        ? renderHorizontalStepper()\n        : renderVerticalStepper()}\n    </Motion>\n  );\n};\n\n// Compact stepper variant\nexport interface GlassCompactStepperProps\n  extends Omit<GlassFormStepperProps, \"orientation\" | \"showDescriptions\"> {\n  /**\n   * Show labels\n   */\n  showLabels?: boolean;\n}\n\n/**\n * GlassCompactStepper component\n * A compact version of the stepper for tight spaces\n */\nexport const GlassCompactStepper: React.FC<GlassCompactStepperProps> = ({\n  steps,\n  currentStep = 0,\n  onStepClick,\n  size = \"sm\",\n  showLabels = false,\n  className,\n  ...props\n}) => {\n  const sizeConfigs = {\n    sm: { stepSize: \"w-6 h-6\", iconSize: \"w-3 h-3\", fontSize: \"glass-text-xs\" },\n    md: { stepSize: \"w-8 h-8\", iconSize: \"w-4 h-4\", fontSize: \"glass-text-sm\" },\n    lg: {\n      stepSize: \"w-10 h-10\",\n      iconSize: \"w-5 h-5\",\n      fontSize: \"glass-text-base\",\n    },\n  };\n\n  const config = sizeConfigs[size];\n\n  return (\n    <div className={cn(\"flex items-center glass-gap-2\", className)}>\n      {steps.map((step, index) => {\n        const state = getStepState(index, step);\n        const styles = getStepStyles(state);\n        const isLast = index === steps.length - 1;\n\n        // Helper function (defined inside since it's specific to this component)\n        function getStepState(stepIndex: number, step: FormStep) {\n          if (step.disabled) return \"disabled\";\n          if (step.error) return \"error\";\n          if (step.completed) return \"completed\";\n          if (stepIndex === currentStep) return \"active\";\n          if (stepIndex < currentStep) return \"completed\";\n          return \"pending\";\n        }\n\n        // Helper function for styles\n        function getStepStyles(state: string) {\n          switch (state) {\n            case \"completed\":\n              return {\n                circle: \"bg-green-500 border-green-500\",\n                line: \"bg-green-500\",\n              };\n            case \"active\":\n              return {\n                circle: \"bg-primary border-primary\",\n                line: \"bg-primary/50\",\n              };\n            case \"error\":\n              return {\n                circle: \"bg-red-500 border-red-500\",\n                line: \"bg-red-500/50\",\n              };\n            case \"disabled\":\n              return {\n                circle: \"bg-white/10 border-white/30\",\n                line: \"bg-white/30\",\n              };\n            default:\n              return {\n                circle: \"bg-white/10 border-white/30\",\n                line: \"bg-white/30\",\n              };\n          }\n        }\n\n        return (\n          <React.Fragment key={step.id}>\n            <div className=\"glass-flex glass-items-center\">\n              <button\n                onClick={(e) => onStepClick?.(index)}\n                className={cn(\n                  \"relative glass-radius-full border flex items-center justify-center transition-all duration-200\",\n                  \"hover:scale-110\",\n                  config.stepSize,\n                  styles.circle\n                )}\n              >\n                {state === \"completed\" ? (\n                  <Check className={config.iconSize} />\n                ) : state === \"error\" ? (\n                  <AlertCircle className={config.iconSize} />\n                ) : step.icon ? (\n                  <span className={config.iconSize}>{step.icon}</span>\n                ) : (\n                  <span className={cn(\"font-medium\", config.fontSize)}>\n                    {index + 1}\n                  </span>\n                )}\n              </button>\n\n              {showLabels && (\n                <span\n                  className={cn(\n                    \"glass-ml-2 font-medium\",\n                    config.fontSize,\n                    \"glass-text-primary/80\"\n                  )}\n                >\n                  {step.title}\n                </span>\n              )}\n            </div>\n\n            {!isLast && <div className={cn(\"h-px w-8\", styles.line)} />}\n          </React.Fragment>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default GlassFormStepper;\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport type GlassFormTableRow = object;\n\nexport interface ColumnDef<T extends GlassFormTableRow = GlassFormTableRow> {\n  key: Extract<keyof T, string>;\n  header: string;\n}\nexport interface GlassFormTableProps<\n  T extends GlassFormTableRow = GlassFormTableRow,\n> {\n  columns: ColumnDef<T>[];\n  rows: T[];\n  onChange: (rows: T[]) => void;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\nexport function GlassFormTable<\n  T extends GlassFormTableRow = GlassFormTableRow,\n>({\n  columns,\n  rows,\n  onChange,\n  className,\n  \"data-testid\": dataTestId,\n}: GlassFormTableProps<T>) {\n  const safeColumns = columns ?? [];\n  const safeRows = rows ?? [];\n  const update = (ri: number, key: Extract<keyof T, string>, value: string) => {\n    const next = safeRows.slice();\n    next[ri] = { ...next[ri], [key]: value } as T;\n    onChange(next);\n  };\n  const add = () => onChange([...safeRows, {} as T]);\n  const remove = (ri: number) => onChange(safeRows.filter((_, i) => i !== ri));\n  return (\n    <div\n      data-glass-component\n      className={cn(\n        \"glass-overflow-auto glass-radius-xl glass-border glass-border-white-15\",\n        className\n      )}\n      data-testid={dataTestId}\n      role=\"region\"\n      aria-label=\"Editable data table\"\n    >\n      <table\n        className={cn(\"glass-w-full glass-text-sm\")}\n        role=\"table\"\n        aria-label=\"Form data table\"\n      >\n        <thead className={cn(\"glass-surface-white-5\")}>\n          <tr role=\"row\">\n            {safeColumns.map((c) => (\n              <th\n                key={String(c.key)}\n                role=\"columnheader\"\n                className={cn(\n                  \"glass-text-left glass-px-3 glass-py-2 glass-text-primary-70\"\n                )}\n              >\n                {c.header}\n              </th>\n            ))}\n            <th\n              role=\"columnheader\"\n              className={cn(\"glass-px-3 glass-py-2\")}\n              aria-label=\"Actions\"\n              scope=\"col\"\n            >\n              <span className=\"glass-sr-only\">Actions</span>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          {safeRows.map((r, ri) => (\n            <tr\n              key={ri}\n              role=\"row\"\n              className={cn(\"glass-border-t glass-border-white-10\")}\n            >\n              {safeColumns.map((c) => (\n                <td\n                  key={String(c.key)}\n                  role=\"gridcell\"\n                  className={cn(\"glass-px-3 glass-py-2\")}\n                >\n                  <input\n                    className={cn(\n                      \"glass-bg-transparent glass-border glass-border-white-20 glass-radius-md glass-px-2 glass-py-1 glass-w-full glass-focus glass-touch-target glass-contrast-guard\"\n                    )}\n                    value={String(r[c.key] ?? \"\")}\n                    onChange={(e) => update(ri, c.key, e.target.value)}\n                    aria-label={`${c.header} for row ${ri + 1}`}\n                  />\n                </td>\n              ))}\n              <td\n                role=\"gridcell\"\n                className={cn(\"glass-px-3 glass-py-2 glass-text-right\")}\n              >\n                <GlassButton\n                  size=\"sm\"\n                  variant=\"ghost\"\n                  onClick={(e) => remove(ri)}\n                  aria-label={`Remove row ${ri + 1}`}\n                >\n                  Remove\n                </GlassButton>\n              </td>\n            </tr>\n          ))}\n        </tbody>\n      </table>\n      <div className={cn(\"glass-p-2\")}>\n        <GlassButton\n          size=\"sm\"\n          variant=\"secondary\"\n          onClick={add}\n          aria-label=\"Add new row\"\n        >\n          Add Row\n        </GlassButton>\n      </div>\n    </div>\n  );\n}\n\nexport default GlassFormTable;\n", "\"use client\";\n\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useId,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport ClearIcon from \"../icons/ClearIcon\";\nimport { MultiSelectOption, OptionGroup, MultiSelectProps } from \"./types\";\nimport styles from \"./GlassMultiSelect.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ntype InternalOption<T extends string | number> = MultiSelectOption<T> & {\n  __isCreatable__?: boolean;\n};\n\nconst defaultFilter = <T extends string | number>(\n  option: MultiSelectOption<T>,\n  input: string\n): boolean => {\n  return option.label.toLowerCase().includes(input.toLowerCase());\n};\n\nconst valueKey = <T extends string | number>(\n  option: MultiSelectOption<T>\n): string => {\n  if (option.id !== undefined) return String(option.id);\n  return String(option.value);\n};\n\nconst normalizeValue = <T extends string | number>(\n  value: T | undefined | null\n): string => {\n  if (value === undefined || value === null) return \"\";\n  return String(value);\n};\n\nconst mergeOptionCollections = <T extends string | number>(\n  options: MultiSelectOption<T>[],\n  groups?: OptionGroup<T>[],\n  withGroups?: boolean\n) => {\n  if (withGroups && groups && groups.length > 0) {\n    return groups.flatMap((group) => group.options ?? []);\n  }\n  return options ?? [];\n};\n\nconst buildOptionLookup = <T extends string | number>(\n  options: MultiSelectOption<T>[]\n) => {\n  const map = new Map<string, MultiSelectOption<T>>();\n  options.forEach((option) => {\n    map.set(valueKey(option), option);\n  });\n  return map;\n};\n\nfunction ensureOption<T extends string | number>(\n  optionLookup: Map<string, MultiSelectOption<T>>,\n  value: T\n): MultiSelectOption<T> {\n  const existing = optionLookup.get(String(value));\n  if (existing) return existing;\n  return {\n    value,\n    label: String(value),\n  };\n}\n\nfunction flattenGroups<T extends string | number>(\n  groups: OptionGroup<T>[] | undefined,\n  fallbackOptions: MultiSelectOption<T>[],\n  withGroups?: boolean\n): { group?: OptionGroup<T>; options: MultiSelectOption<T>[] }[] {\n  if (withGroups && groups && groups.length > 0) {\n    return groups.map((group) => ({ group, options: group.options ?? [] }));\n  }\n  return [{ options: fallbackOptions }];\n}\n\nconst createCreatableOption = <T extends string | number>(\n  inputValue: string\n): InternalOption<T> => ({\n  id: `__creatable__${inputValue}`,\n  value: inputValue as unknown as T,\n  label: inputValue,\n  __isCreatable__: true,\n});\n\nconst GlassMultiSelectInternal = <T extends string | number = string | number>(\n  props: MultiSelectProps<T>,\n  ref: React.ForwardedRef<HTMLDivElement>\n) => {\n  const {\n    options = [],\n    groups,\n    withGroups,\n    value,\n    defaultValue,\n    onChange,\n    placeholder = \"Select\u2026\",\n    label,\n    helperText,\n    error,\n    errorMessage,\n    fullWidth,\n    width,\n    size = \"medium\",\n    disabled,\n    searchable = true,\n    clearable = true,\n    creatable,\n    closeOnSelect = true,\n    clearInputOnSelect = true,\n    keyboardNavigation = true,\n    filterOptions,\n    filterFunction,\n    onCreateOption,\n    onInputChange,\n    onRemove,\n    onSelect,\n    onOpen,\n    onClose,\n    loading,\n    loadingText = \"Loading\u2026\",\n    noOptionsText = \"No options\",\n    renderOption,\n    renderToken,\n    renderValue,\n    renderGroup,\n    maxSelections,\n    maxHeight = 280,\n    maxWidth,\n    compact = false,\n    contained = false,\n    preview = false,\n    density = \"comfortable\",\n    openUp,\n    ariaLabel,\n    autoFocus,\n    dataTestId,\n    id,\n    className,\n    style,\n  } = props;\n\n  const generatedId = useId();\n  const inputId = id ?? `glass-multi-select-${generatedId}`;\n\n  const rootRef = useRef<HTMLDivElement | null>(null);\n  const inputRef = useRef<HTMLInputElement | null>(null);\n  const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n  const [isOpen, setIsOpen] = useState(false);\n  const [inputValue, setInputValue] = useState(\"\");\n  const [focusedIndex, setFocusedIndex] = useState(-1);\n  const [openDirectionUp, setOpenDirectionUp] = useState<boolean | undefined>(\n    undefined\n  );\n\n  const allOptions = useMemo(\n    () => mergeOptionCollections<T>(options, groups, withGroups),\n    [options, groups, withGroups]\n  );\n\n  const optionLookup = useMemo(\n    () => buildOptionLookup(allOptions),\n    [allOptions]\n  );\n\n  const initializeValue = useCallback(\n    (values: T[] | undefined): MultiSelectOption<T>[] => {\n      if (!values || values.length === 0) return [];\n      return values.map((val) => ensureOption(optionLookup, val));\n    },\n    [optionLookup]\n  );\n\n  const isControlled = value !== undefined;\n  const [internalSelected, setInternalSelected] = useState<\n    MultiSelectOption<T>[]\n  >(() => initializeValue(isControlled ? (value as T[]) : defaultValue));\n\n  const selectedOptions = isControlled\n    ? initializeValue(value as T[])\n    : internalSelected;\n\n  const notifyChange = useCallback(\n    (next: MultiSelectOption<T>[]) => {\n      const valuesOnly = next.map((opt) => opt.value);\n      onChange?.(valuesOnly);\n    },\n    [onChange]\n  );\n\n  const updateSelected = useCallback(\n    (next: MultiSelectOption<T>[]) => {\n      if (!isControlled) {\n        setInternalSelected(next);\n      }\n      notifyChange(next);\n    },\n    [isControlled, notifyChange]\n  );\n\n  useEffect(() => {\n    if (isControlled) {\n      setInternalSelected(initializeValue(value as T[]));\n    }\n  }, [isControlled, value, optionLookup]);\n\n  useEffect(() => {\n    if (!isOpen) return;\n    if (openUp !== undefined) {\n      setOpenDirectionUp(openUp);\n      return;\n    }\n    const container = rootRef.current;\n    if (!container) return;\n    const rect = container.getBoundingClientRect();\n    const viewportHeight = window.innerHeight;\n    const availableBelow = viewportHeight - rect.bottom;\n    const availableAbove = rect.top;\n    const shouldOpenUp =\n      availableBelow < 200 && availableAbove > availableBelow;\n    setOpenDirectionUp(shouldOpenUp);\n  }, [isOpen, openUp]);\n\n  useEffect(() => {\n    if (!isOpen) return;\n    const handleOutsideClick = (event: MouseEvent) => {\n      const container = rootRef.current;\n      if (!container) return;\n      if (!container.contains(event.target as Node)) {\n        setIsOpen(false);\n        onClose?.();\n      }\n    };\n    document.addEventListener(\"mousedown\", handleOutsideClick);\n    return () => {\n      document.removeEventListener(\"mousedown\", handleOutsideClick);\n    };\n  }, [isOpen, onClose]);\n\n  useEffect(() => {\n    if (autoFocus) {\n      inputRef.current?.focus();\n    }\n  }, [autoFocus]);\n\n  const groupedOptions = useMemo(\n    () => flattenGroups(groups, options, withGroups),\n    [groups, options, withGroups]\n  );\n\n  const filteredGroups = useMemo(() => {\n    if (!searchable || !inputValue.trim()) {\n      return groupedOptions;\n    }\n\n    const userFilter = (opts: MultiSelectOption<T>[]) => {\n      if (filterOptions) {\n        try {\n          return filterOptions(opts, inputValue);\n        } catch (error) {\n          return opts;\n        }\n      }\n\n      if (filterFunction) {\n        try {\n          const result = filterFunction(opts, inputValue);\n          if (Array.isArray(result)) {\n            return result;\n          }\n          // Allow predicate-style fallthrough\n        } catch (error) {\n          // Fallthrough to default filter\n        }\n      }\n\n      return opts.filter((option) => defaultFilter(option, inputValue));\n    };\n\n    const filteredFlat = userFilter(allOptions);\n    const allowedKeys = new Set(filteredFlat.map((option) => valueKey(option)));\n\n    return groupedOptions\n      .map((group) => ({\n        group: group.group,\n        options: group.options.filter((option) =>\n          allowedKeys.has(valueKey(option))\n        ),\n      }))\n      .filter((group) => group.options.length > 0);\n  }, [\n    searchable,\n    inputValue,\n    groupedOptions,\n    filterOptions,\n    filterFunction,\n    allOptions,\n  ]);\n\n  const flatOptionList: InternalOption<T>[] = useMemo(() => {\n    const flattened: InternalOption<T>[] = [];\n    filteredGroups.forEach(({ options: groupOptions }) => {\n      flattened.push(...groupOptions);\n    });\n\n    if (creatable && inputValue.trim()) {\n      const existing = flattened.find(\n        (option) =>\n          normalizeValue(option.value) ===\n          normalizeValue(inputValue as unknown as T)\n      );\n      if (!existing) {\n        flattened.push(createCreatableOption<T>(inputValue.trim()));\n      }\n    }\n\n    return flattened;\n  }, [filteredGroups, creatable, inputValue]);\n\n  useEffect(() => {\n    if (!isOpen) {\n      setFocusedIndex(-1);\n      return;\n    }\n    if (keyboardNavigation) {\n      setFocusedIndex(flatOptionList.length > 0 ? 0 : -1);\n    }\n  }, [isOpen, flatOptionList, keyboardNavigation]);\n\n  const handleOpen = useCallback(() => {\n    if (disabled) return;\n    if (!isOpen) {\n      setIsOpen(true);\n      onOpen?.();\n    }\n  }, [disabled, isOpen, onOpen]);\n\n  const handleClose = useCallback(() => {\n    if (isOpen) {\n      setIsOpen(false);\n      onClose?.();\n    }\n  }, [isOpen, onClose]);\n\n  const handleSelectOption = useCallback(\n    (option: InternalOption<T>) => {\n      if (option.disabled) return;\n      if (option.__isCreatable__) {\n        onCreateOption?.(option.label);\n      }\n\n      const alreadySelected = selectedOptions.some(\n        (selected) =>\n          normalizeValue(selected.value) === normalizeValue(option.value)\n      );\n\n      let nextSelected: MultiSelectOption<T>[];\n\n      if (alreadySelected) {\n        nextSelected = selectedOptions.filter(\n          (selected) =>\n            normalizeValue(selected.value) !== normalizeValue(option.value)\n        );\n        onRemove?.(option.value);\n      } else {\n        if (maxSelections && selectedOptions.length >= maxSelections) {\n          return;\n        }\n        nextSelected = [...selectedOptions, option];\n        onSelect?.(option);\n      }\n\n      updateSelected(nextSelected);\n\n      if (clearInputOnSelect) {\n        setInputValue(\"\");\n        onInputChange?.(\"\");\n      }\n\n      if (closeOnSelect) {\n        handleClose();\n      }\n    },\n    [\n      selectedOptions,\n      updateSelected,\n      clearInputOnSelect,\n      closeOnSelect,\n      handleClose,\n      onInputChange,\n      onSelect,\n      onCreateOption,\n      maxSelections,\n    ]\n  );\n\n  const handleRemoveOption = useCallback(\n    (option: MultiSelectOption<T>) => {\n      const next = selectedOptions.filter(\n        (selected) =>\n          normalizeValue(selected.value) !== normalizeValue(option.value)\n      );\n      updateSelected(next);\n      onRemove?.(option.value);\n    },\n    [selectedOptions, onRemove, updateSelected]\n  );\n\n  const handleClearAll = useCallback(() => {\n    selectedOptions.forEach((option) => {\n      onRemove?.(option.value);\n    });\n    updateSelected([]);\n    setInputValue(\"\");\n    onInputChange?.(\"\");\n  }, [selectedOptions, onRemove, onInputChange, updateSelected]);\n\n  const handleInputChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const nextValue = event.target.value;\n      setInputValue(nextValue);\n      onInputChange?.(nextValue);\n      if (!isOpen) {\n        setIsOpen(true);\n        onOpen?.();\n      }\n    },\n    [isOpen, onInputChange, onOpen]\n  );\n\n  const focusPrevious = useCallback(() => {\n    setFocusedIndex((prev) => {\n      if (!keyboardNavigation) return prev;\n      if (flatOptionList.length === 0) return -1;\n      const nextIndex = prev <= 0 ? flatOptionList.length - 1 : prev - 1;\n      return nextIndex;\n    });\n  }, [flatOptionList.length, keyboardNavigation]);\n\n  const focusNext = useCallback(() => {\n    setFocusedIndex((prev) => {\n      if (!keyboardNavigation) return prev;\n      if (flatOptionList.length === 0) return -1;\n      const nextIndex = prev >= flatOptionList.length - 1 ? 0 : prev + 1;\n      return nextIndex;\n    });\n  }, [flatOptionList.length, keyboardNavigation]);\n\n  const handleKeyDown = useCallback(\n    (event: React.KeyboardEvent<HTMLInputElement>) => {\n      if (disabled) return;\n\n      switch (event.key) {\n        case \"ArrowDown\":\n          event.preventDefault();\n          handleOpen();\n          focusNext();\n          break;\n        case \"ArrowUp\":\n          event.preventDefault();\n          handleOpen();\n          focusPrevious();\n          break;\n        case \"Enter\":\n          if (\n            isOpen &&\n            focusedIndex >= 0 &&\n            focusedIndex < flatOptionList.length\n          ) {\n            event.preventDefault();\n            handleSelectOption(flatOptionList[focusedIndex]);\n          }\n          break;\n        case \"Escape\":\n          if (isOpen) {\n            event.preventDefault();\n            handleClose();\n          }\n          break;\n        case \"Backspace\":\n          if (inputValue === \"\" && selectedOptions.length > 0) {\n            event.preventDefault();\n            const lastOption = selectedOptions[selectedOptions.length - 1];\n            handleRemoveOption(lastOption);\n          }\n          break;\n        default:\n          break;\n      }\n    },\n    [\n      disabled,\n      handleOpen,\n      focusNext,\n      focusPrevious,\n      isOpen,\n      focusedIndex,\n      flatOptionList,\n      handleSelectOption,\n      handleClose,\n      inputValue,\n      selectedOptions,\n      handleRemoveOption,\n    ]\n  );\n\n  const handleContainerClick = useCallback(() => {\n    if (disabled) return;\n    handleOpen();\n    inputRef.current?.focus();\n  }, [disabled, handleOpen]);\n\n  const isCompact = compact || preview || density === \"compact\";\n  const effectiveSize = isCompact ? \"small\" : size;\n  const effectiveMaxHeight = maxHeight ?? (isCompact || contained ? 180 : 280);\n  const dropdownMaxHeight =\n    typeof effectiveMaxHeight === \"number\"\n      ? `${effectiveMaxHeight}px`\n      : effectiveMaxHeight;\n\n  const renderTokens = () => {\n    if (renderValue) {\n      return renderValue(selectedOptions);\n    }\n\n    return selectedOptions.map((option) => {\n      if (renderToken) {\n        return (\n          <div\n            key={valueKey(option)}\n            className={cn(\"galileo-multiselect-token-wrapper\")}\n          >\n            {renderToken(option, () => handleRemoveOption(option))}\n          </div>\n        );\n      }\n\n      return (\n        <span\n          key={valueKey(option)}\n          className={cn(\n            styles.token,\n            \"galileo-multiselect-token\",\n            option.disabled && styles.tokenDisabled\n          )}\n        >\n          <ContrastGuard>\n            <span className={styles.tokenLabel}>{option.label}</span>\n          </ContrastGuard>\n          {!disabled && !option.disabled && (\n            <button\n              type=\"button\"\n              className={cn(styles.removeButton, \"remove-button\")}\n              onClick={(event) => {\n                event.stopPropagation();\n                handleRemoveOption(option);\n              }}\n              aria-label={`Remove ${option.label}`}\n            >\n              <ClearIcon />\n            </button>\n          )}\n        </span>\n      );\n    });\n  };\n\n  const dropdownClassName = cn(\n    styles.dropdown,\n    isOpen && styles.dropdownVisible,\n    openDirectionUp && styles.dropdownAbove\n  );\n\n  const containerClassName = cn(\n    styles.container,\n    styles[\n      `size${effectiveSize.charAt(0).toUpperCase()}${effectiveSize.slice(1)}`\n    ],\n    isCompact && styles.containerCompact,\n    error && styles.containerError,\n    disabled && styles.containerDisabled,\n    !disabled && isOpen && styles.containerFocused\n  );\n\n  const rootClassName = cn(\n    styles.root,\n    fullWidth && styles.rootFullWidth,\n    (isCompact || contained) && styles.rootContained,\n    className\n  );\n\n  const resolvedWidthValue = fullWidth\n    ? \"100%\"\n    : width\n      ? typeof width === \"number\"\n        ? `${width}px`\n        : width\n      : undefined;\n\n  const inlineStyle: React.CSSProperties = {\n    ...(style ?? {}),\n    ...(contained || isCompact ? { maxWidth: \"100%\" } : null),\n  };\n\n  if (resolvedWidthValue) {\n    (inlineStyle as Record<string, unknown>)[\"--multi-select-width\"] =\n      resolvedWidthValue;\n  }\n\n  if (maxWidth !== undefined) {\n    (inlineStyle as Record<string, unknown>)[\"--multi-select-max-width\"] =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n  } else if (contained || isCompact) {\n    (inlineStyle as Record<string, unknown>)[\"--multi-select-max-width\"] =\n      \"320px\";\n  }\n\n  (inlineStyle as Record<string, unknown>)[\"--multi-select-dropdown-height\"] =\n    dropdownMaxHeight;\n\n  return (\n    <div\n      ref={mergeRefs(ref, rootRef)}\n      className={rootClassName}\n      style={{ ...inlineStyle }}\n      data-testid={dataTestId}\n    >\n      {label && (\n        <ContrastGuard>\n          <label className={styles.label} htmlFor={inputId}>\n            {label}\n          </label>\n        </ContrastGuard>\n      )}\n\n      <div\n        className={containerClassName}\n        onClick={handleContainerClick}\n        role=\"combobox\"\n        aria-expanded={isOpen}\n        aria-haspopup=\"listbox\"\n        aria-disabled={disabled}\n        aria-controls={\n          isOpen && flatOptionList.length > 0 ? `${inputId}-listbox` : undefined\n        }\n      >\n        <div className={styles.tokenList}>\n          {selectedOptions.length > 0\n            ? renderTokens()\n            : !inputValue && (\n                <span className={styles.placeholder}>{placeholder}</span>\n              )}\n\n          <input\n            ref={inputRef}\n            id={inputId}\n            className={styles.input}\n            type=\"text\"\n            value={inputValue}\n            onChange={handleInputChange}\n            onFocus={handleOpen}\n            onKeyDown={handleKeyDown}\n            placeholder={selectedOptions.length === 0 ? placeholder : \"\"}\n            disabled={disabled || !searchable}\n            aria-autocomplete=\"list\"\n            aria-controls={\n              isOpen && flatOptionList.length > 0\n                ? `${inputId}-listbox`\n                : undefined\n            }\n            aria-label={ariaLabel || label || placeholder}\n            autoComplete=\"off\"\n          />\n        </div>\n\n        {clearable && selectedOptions.length > 0 && !disabled && (\n          <button\n            type=\"button\"\n            className={styles.clearButton}\n            onClick={(event) => {\n              event.stopPropagation();\n              handleClearAll();\n            }}\n            aria-label=\"Clear all selections\"\n          >\n            <ClearIcon />\n          </button>\n        )}\n      </div>\n\n      {helperText && !error && (\n        <ContrastGuard>\n          <div className={styles.helperText}>{helperText}</div>\n        </ContrastGuard>\n      )}\n\n      {error && errorMessage && (\n        <ContrastGuard>\n          <div className={styles.errorText}>{errorMessage}</div>\n        </ContrastGuard>\n      )}\n\n      <div ref={dropdownRef} className={dropdownClassName} role=\"presentation\">\n        {loading && (\n          <ContrastGuard>\n            <div className={styles.loading}>\n              <span className={styles.spinner} aria-hidden=\"true\" />\n              <span>{loadingText}</span>\n            </div>\n          </ContrastGuard>\n        )}\n\n        {!loading && flatOptionList.length === 0 && (\n          <ContrastGuard>\n            <div className={styles.noOptions}>{noOptionsText}</div>\n          </ContrastGuard>\n        )}\n\n        {!loading && flatOptionList.length > 0 && (\n          <ul\n            className={styles.optionList}\n            role=\"listbox\"\n            id={`${inputId}-listbox`}\n            aria-multiselectable=\"true\"\n          >\n            {filteredGroups.map(({ group, options: groupOptions }) => (\n              <React.Fragment\n                key={group?.id ?? group?.label ?? \"group-default\"}\n              >\n                {group?.label &&\n                  (renderGroup ? (\n                    renderGroup(group)\n                  ) : (\n                    <li className={styles.groupHeader}>\n                      <ContrastGuard>{group.label}</ContrastGuard>\n                    </li>\n                  ))}\n\n                {groupOptions.map((option) => {\n                  const key = valueKey(option);\n                  const isSelected = selectedOptions.some(\n                    (selected) =>\n                      normalizeValue(selected.value) ===\n                      normalizeValue(option.value)\n                  );\n                  const optionIndex = flatOptionList.findIndex(\n                    (item) =>\n                      normalizeValue(item.value) ===\n                      normalizeValue(option.value)\n                  );\n                  const isFocused = optionIndex === focusedIndex;\n                  const optionClassName = cn(\n                    styles.option,\n                    isSelected && styles.optionSelected,\n                    isFocused && styles.optionFocused,\n                    option.disabled && styles.optionDisabled\n                  );\n\n                  return (\n                    <li\n                      key={key}\n                      role=\"option\"\n                      aria-selected={isSelected}\n                      aria-disabled={option.disabled || undefined}\n                      className={optionClassName}\n                      onClick={(event) => {\n                        event.preventDefault();\n                        handleSelectOption(option);\n                      }}\n                      onMouseEnter={() => setFocusedIndex(optionIndex)}\n                    >\n                      {renderOption ? (\n                        renderOption(option, isSelected)\n                      ) : (\n                        <ContrastGuard>{option.label}</ContrastGuard>\n                      )}\n                    </li>\n                  );\n                })}\n              </React.Fragment>\n            ))}\n\n            {flatOptionList.length > 0 &&\n              creatable &&\n              inputValue.trim() &&\n              (() => {\n                const creatableOption = flatOptionList.find(\n                  (opt) => opt.__isCreatable__\n                );\n                if (!creatableOption) return null;\n                const optionIndex = flatOptionList.findIndex(\n                  (item) => item.__isCreatable__\n                );\n                const optionClassName = cn(\n                  styles.option,\n                  optionIndex === focusedIndex && styles.optionFocused\n                );\n                return (\n                  <li\n                    key={creatableOption.id}\n                    className={optionClassName}\n                    onClick={(event) => {\n                      event.preventDefault();\n                      handleSelectOption(creatableOption);\n                    }}\n                    onMouseEnter={() => setFocusedIndex(optionIndex)}\n                  >\n                    Create \u201C{inputValue.trim()}\u201D\n                  </li>\n                );\n              })()}\n          </ul>\n        )}\n      </div>\n    </div>\n  );\n};\n\nfunction mergeRefs<T>(\n  forwardedRef: React.ForwardedRef<T>,\n  localRef: React.MutableRefObject<T | null>\n) {\n  return (value: T | null) => {\n    localRef.current = value;\n    if (typeof forwardedRef === \"function\") {\n      forwardedRef(value);\n    } else if (forwardedRef) {\n      (forwardedRef as React.MutableRefObject<T | null>).current = value;\n    }\n  };\n}\n\nexport const GlassMultiSelect = forwardRef(GlassMultiSelectInternal) as <\n  T extends string | number = string | number,\n>(\n  props: MultiSelectProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement;\n\n(GlassMultiSelect as any).displayName = \"GlassMultiSelect\";\n\nexport default GlassMultiSelect;\n", "'use client';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface ClearIconProps {\n  size?: number;\n  color?: string;\n  className?: string;\n  onClick?: () => void;\n}\n\nexport const ClearIcon: React.FC<ClearIconProps> = ({\n  size = 16,\n  color = 'currentColor',\n  className,\n  onClick\n}) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke={color}\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n    className={className}\n    onClick={onClick}\n    style={{ cursor: onClick ? 'pointer' : 'default' }}\n  >\n    <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n    <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n  </svg>\n);\n\nexport default ClearIcon;\n", ".root {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  gap: var(--aura-space-2);\n  width: var(--multi-select-width, 320px);\n  max-width: var(--multi-select-max-width, none);\n  font-family: var(--aura-font-sans);\n}\n\n.rootFullWidth {\n  --multi-select-width: 100%;\n  width: 100%;\n}\n\n.rootContained {\n  width: min(var(--multi-select-width, 320px), 100%);\n}\n\n.label {\n  font-size: 0.9rem;\n  font-weight: var(--aura-font-weight-medium);\n  color: var(--aura-color-global-text-secondary);\n}\n\n.container {\n  position: relative;\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: var(--aura-space-2);\n  padding: var(--multi-select-padding-y, 0.5rem)\n    var(--multi-select-padding-x, 0.75rem);\n  border-radius: var(--aura-radius-xl);\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 80%, transparent);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 80%,\n    transparent\n  );\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  transition:\n    border var(--aura-motion-duration-fast) var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n  cursor: text;\n}\n\n.containerFocused {\n  border-color: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 70%,\n    transparent\n  );\n  box-shadow: var(\n    --glass-elev-multiselect-focus,\n    0 0 0 2px\n      color-mix(in srgb, var(--aura-color-semantic-primary) 25%, transparent)\n  );\n}\n\n.containerError {\n  border-color: var(\n    --glass-multiselect-error-border,\n    color-mix(in srgb, var(--aura-color-semantic-error) 80%, transparent)\n  );\n  box-shadow: var(\n    --glass-elev-multiselect-error,\n    0 0 0 2px\n      color-mix(in srgb, var(--aura-color-semantic-error) 18%, transparent)\n  );\n}\n\n.containerDisabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n\n.sizeSmall {\n  --multi-select-padding-y: 0.25rem;\n  --multi-select-padding-x: 0.5rem;\n  min-height: 36px;\n}\n\n.containerCompact {\n  gap: var(--aura-space-1);\n  border-radius: var(--aura-radius-lg);\n}\n\n.sizeMedium {\n  --multi-select-padding-y: 0.5rem;\n  --multi-select-padding-x: 0.75rem;\n  min-height: 40px;\n}\n\n.sizeLarge {\n  --multi-select-padding-y: 0.625rem;\n  --multi-select-padding-x: 1rem;\n  min-height: 48px;\n}\n\n.tokenList {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: var(--aura-space-2);\n  flex: 1;\n  min-width: 0;\n}\n\n.placeholder {\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 70%,\n    transparent\n  );\n  font-size: 0.95rem;\n}\n\n.token {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n  padding: 0.15rem 0.5rem;\n  border-radius: var(--glass-radius-pill, 999px);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 25%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-semantic-primary) 45%, transparent);\n  color: var(--aura-color-global-text-primary);\n  font-size: 0.85rem;\n  line-height: 1;\n}\n\n.tokenDisabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n\n.tokenLabel {\n  max-width: min(160px, 42vw);\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.removeButton {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  border: none;\n  background: transparent;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-primary) 70%,\n    transparent\n  );\n  cursor: pointer;\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.removeButton:hover,\n.removeButton:focus-visible {\n  outline: none;\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 25%,\n    transparent\n  );\n  color: var(--aura-color-global-text-primary);\n}\n\n.input {\n  flex: 1;\n  min-width: 120px;\n  border: none;\n  background: transparent;\n  color: var(--aura-color-global-text-primary);\n  font-size: 0.95rem;\n  padding: 0;\n  line-height: 1.4;\n}\n\n.input:focus {\n  outline: none;\n}\n\n.input::placeholder {\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 55%,\n    transparent\n  );\n}\n\n.clearButton {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  background: transparent;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 65%,\n    transparent\n  );\n  cursor: pointer;\n  padding: 0.25rem;\n  border-radius: var(--aura-radius-sm);\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.clearButton:hover,\n.clearButton:focus-visible {\n  outline: none;\n  color: var(--aura-color-global-text-primary);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 20%,\n    transparent\n  );\n}\n\n.dropdown {\n  position: absolute;\n  left: 0;\n  right: 0;\n  margin-top: var(--aura-space-2);\n  z-index: 20;\n  border-radius: var(--aura-radius-xl);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 92%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 80%, transparent);\n  box-shadow: var(\n    --glass-elev-multiselect-dropdown,\n    0 18px 48px color-mix(in srgb, var(--glass-gray-900) 32%, transparent)\n  );\n  max-height: var(--multi-select-dropdown-height, 280px);\n  overflow: hidden;\n  display: none;\n}\n\n.dropdownVisible {\n  display: block;\n}\n\n.dropdownAbove {\n  bottom: calc(100% + var(--aura-space-2));\n  top: auto;\n  margin-top: 0;\n}\n\n.optionList {\n  list-style: none;\n  margin: 0;\n  padding: var(--aura-space-2) 0;\n  max-height: inherit;\n  overflow-y: auto;\n  scrollbar-width: thin;\n}\n\n.optionList::-webkit-scrollbar {\n  width: 6px;\n}\n\n.optionList::-webkit-scrollbar-thumb {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 45%,\n    transparent\n  );\n  border-radius: var(--aura-radius-md);\n}\n\n.option {\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n  padding: 0.65rem 1rem;\n  cursor: pointer;\n  color: var(--aura-color-global-text-primary);\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.option:hover {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 20%,\n    transparent\n  );\n}\n\n.optionSelected {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 35%,\n    transparent\n  );\n}\n\n.optionFocused {\n  outline: none;\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 25%,\n    transparent\n  );\n}\n\n.optionDisabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.groupHeader {\n  padding: 0.5rem 1rem;\n  font-size: 0.75rem;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 65%,\n    transparent\n  );\n}\n\n.helperText {\n  font-size: 0.8rem;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 75%,\n    transparent\n  );\n}\n\n.errorText {\n  font-size: 0.8rem;\n  color: var(\n    --glass-multiselect-error-text,\n    color-mix(in srgb, var(--aura-color-semantic-error) 90%, transparent)\n  );\n}\n\n.noOptions {\n  padding: 0.75rem 1rem;\n  text-align: center;\n  font-style: italic;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 70%,\n    transparent\n  );\n}\n\n.loading {\n  padding: 0.75rem 1rem;\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n  color: var(--aura-color-global-text-secondary);\n}\n\n.spinner {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  border: 2px solid\n    color-mix(in srgb, var(--aura-color-semantic-primary) 35%, transparent);\n  border-top-color: var(--aura-color-semantic-primary);\n  animation: spin var(--aura-motion-duration-slow) linear infinite;\n}\n\n@keyframes spin {\n  to {\n    transform: rotate(360deg);\n  }\n}\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  AlertCircle,\n  Check,\n  CheckCircle,\n  ChevronLeft,\n  ChevronRight,\n  Loader2,\n} from \"@/icons\";\nimport React, { createContext, useCallback, useContext, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\n\nexport type GlassMultiStepFormData = Record<string, unknown>;\nexport type GlassMultiStepValidationMode = \"onChange\" | \"onSubmit\" | \"onBlur\";\n\nexport interface GlassMultiStepComponentProps<TData = unknown> {\n  data: TData;\n  onChange: (data: TData) => void;\n  validationMode: GlassMultiStepValidationMode;\n}\n\nexport interface FormStep {\n  id: string;\n  title: string;\n  description?: string;\n  icon?: React.ReactNode;\n  component: React.ComponentType<Partial<GlassMultiStepComponentProps>>;\n  validation?: (data: unknown) => boolean | Promise<boolean>;\n  validationMessage?: string;\n  optional?: boolean;\n  data?: unknown;\n}\n\nexport interface GlassMultiStepFormProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSubmit\" | \"onChange\"> {\n  /**\n   * Form steps configuration\n   */\n  steps?: FormStep[];\n  /**\n   * Initial form data\n   */\n  initialData?: GlassMultiStepFormData;\n  /**\n   * Form submission handler\n   */\n  onSubmit?: (data: GlassMultiStepFormData) => void | Promise<void>;\n  /**\n   * Form cancellation handler\n   */\n  onCancel?: () => void;\n  /**\n   * Step change handler\n   */\n  onStepChange?: (stepIndex: number, data: GlassMultiStepFormData) => void;\n  /**\n   * Form title\n   */\n  title?: string;\n  /**\n   * Form description\n   */\n  description?: string;\n  /**\n   * Show step progress indicator\n   */\n  showProgress?: boolean;\n  /**\n   * Show step navigation buttons\n   */\n  showNavigation?: boolean;\n  /**\n   * Allow skipping optional steps\n   */\n  allowSkip?: boolean;\n  /**\n   * Custom submit button text\n   */\n  submitButtonText?: string;\n  /**\n   * Custom cancel button text\n   */\n  cancelButtonText?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Form validation mode\n   */\n  validationMode?: GlassMultiStepValidationMode;\n  /**\n   * Show step summary\n   */\n  showSummary?: boolean;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n// Form Context\nexport interface FormContextType {\n  currentStep: number;\n  totalSteps: number;\n  formData: GlassMultiStepFormData;\n  errors?: Record<string, string>;\n  isValid?: boolean;\n  updateFormData: (stepId: string, data: unknown) => void;\n  updateData?: (stepId: string, data: unknown) => void;\n  goToStep: (step: number) => void;\n  nextStep: () => void;\n  prevStep: () => void;\n  isStepValid: (stepIndex: number) => Promise<boolean>;\n  validateStep?: (stepIndex: number) => boolean | Promise<boolean>;\n  isStepCompleted: (stepIndex: number) => boolean;\n  validationMode: GlassMultiStepValidationMode;\n}\n\nconst FormContext = createContext<FormContextType | null>(null);\n\nexport const useFormContext = () => {\n  const context = useContext(FormContext);\n  if (!context) {\n    return {\n      currentStep: 0,\n      totalSteps: 1,\n      formData: {},\n      errors: {},\n      isValid: false,\n      nextStep: () => {},\n      prevStep: () => {},\n      goToStep: () => {},\n      updateFormData: () => {},\n      updateData: () => {},\n      isStepValid: async () => false,\n      validateStep: () => false,\n      isStepCompleted: () => false,\n      validationMode: \"onSubmit\" as const,\n    };\n  }\n  return context;\n};\n\n/**\n * GlassMultiStepForm component\n * A comprehensive multi-step form with validation, progress tracking, and smooth transitions\n */\nexport const GlassMultiStepForm: React.FC<GlassMultiStepFormProps> = ({\n  steps = [],\n  initialData = {},\n  onSubmit,\n  onCancel,\n  onStepChange,\n  title,\n  description,\n  showProgress = true,\n  showNavigation = true,\n  allowSkip = false,\n  submitButtonText = \"Submit\",\n  cancelButtonText = \"Cancel\",\n  loading = false,\n  validationMode = \"onChange\",\n  showSummary = false,\n  className,\n  ...props\n}) => {\n  const [currentStep, setCurrentStep] = useState(0);\n  const [formData, setFormData] = useState<GlassMultiStepFormData>(initialData);\n  const [stepValidations, setStepValidations] = useState<\n    Record<number, boolean>\n  >({});\n  const [stepCompletions, setStepCompletions] = useState<\n    Record<number, boolean>\n  >({});\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [validationErrors, setValidationErrors] = useState<\n    Record<number, string>\n  >({});\n\n  // Update form data for a specific step\n  const updateFormData = useCallback((stepId: string, data: unknown) => {\n    setFormData((prev) => ({\n      ...prev,\n      [stepId]: data,\n    }));\n  }, []);\n\n  // Check if step is valid\n  const isStepValid = useCallback(\n    async (stepIndex: number): Promise<boolean> => {\n      const step = steps[stepIndex];\n      if (!step.validation) return true;\n\n      try {\n        const isValid = await step.validation(formData[step.id] ?? {});\n        setStepValidations((prev) => ({\n          ...prev,\n          [stepIndex]: isValid,\n        }));\n\n        if (!isValid && step.validationMessage) {\n          setValidationErrors((prev) => ({\n            ...prev,\n            [stepIndex]: step.validationMessage!,\n          }));\n        } else {\n          setValidationErrors((prev) => {\n            const newErrors = { ...prev };\n            delete newErrors[stepIndex];\n            return newErrors;\n          });\n        }\n\n        return isValid;\n      } catch {\n        return false;\n      }\n    },\n    [steps, formData]\n  );\n\n  // Check if step is completed\n  const isStepCompleted = useCallback(\n    (stepIndex: number): boolean => {\n      return stepCompletions[stepIndex] || false;\n    },\n    [stepCompletions]\n  );\n\n  // Navigate to specific step\n  const goToStep = useCallback(\n    async (stepIndex: number) => {\n      if (stepIndex < 0 || stepIndex >= steps.length) return;\n\n      // Validate current step before moving\n      if (validationMode === \"onChange\") {\n        const isValid = await isStepValid(currentStep);\n        if (!isValid && !allowSkip) return;\n      }\n\n      setCurrentStep(stepIndex);\n      onStepChange?.(stepIndex, formData);\n    },\n    [\n      steps.length,\n      validationMode,\n      isStepValid,\n      currentStep,\n      allowSkip,\n      onStepChange,\n      formData,\n    ]\n  );\n\n  // Go to next step\n  const nextStep = useCallback(async () => {\n    const isValid = await isStepValid(currentStep);\n    if (!isValid && !allowSkip) return;\n\n    if (currentStep < steps.length - 1) {\n      setStepCompletions((prev) => ({\n        ...prev,\n        [currentStep]: true,\n      }));\n      setCurrentStep((prev) => prev + 1);\n      onStepChange?.(currentStep + 1, formData);\n    }\n  }, [\n    currentStep,\n    steps.length,\n    isStepValid,\n    allowSkip,\n    onStepChange,\n    formData,\n  ]);\n\n  // Go to previous step\n  const prevStep = useCallback(() => {\n    if (currentStep > 0) {\n      setCurrentStep((prev) => prev - 1);\n      onStepChange?.(currentStep - 1, formData);\n    }\n  }, [currentStep, onStepChange, formData]);\n\n  // Handle form submission\n  const handleSubmit = useCallback(async () => {\n    // Validate all steps\n    let allValid = true;\n    for (let i = 0; i < steps.length; i++) {\n      const isValid = await isStepValid(i);\n      if (!isValid && !steps[i].optional) {\n        allValid = false;\n        goToStep(i);\n        break;\n      }\n    }\n\n    if (!allValid) return;\n\n    setIsSubmitting(true);\n    try {\n      await onSubmit?.(formData);\n    } catch {\n      // Submission errors are left to the caller-provided submit handler.\n    } finally {\n      setIsSubmitting(false);\n    }\n  }, [steps, isStepValid, goToStep, onSubmit, formData]);\n\n  // Handle form cancellation\n  const handleCancel = useCallback(() => {\n    onCancel?.();\n  }, [onCancel]);\n\n  // Get step progress percentage\n  const getProgressPercentage = useCallback(() => {\n    if (!steps || steps.length === 0) return 0;\n    return Math.min(100, Math.max(0, ((currentStep + 1) / steps.length) * 100));\n  }, [currentStep, steps.length]);\n\n  // Context value\n  const contextValue: FormContextType = {\n    currentStep,\n    totalSteps: steps.length,\n    formData,\n    updateFormData,\n    updateData: updateFormData,\n    goToStep,\n    nextStep,\n    prevStep,\n    isStepValid,\n    validateStep: isStepValid,\n    isStepCompleted,\n    validationMode,\n  };\n\n  return (\n    <FormContext.Provider data-glass-component value={contextValue}>\n      <Motion\n        preset=\"fadeIn\"\n        className=\"glass-w-full glass-max-w-4xl glass-mx-auto\"\n      >\n        <GlassCard className={cn(\"overflow-hidden\", className)} {...props}>\n          {/* Header */}\n          <CardHeader className=\"glass-pb-6\">\n            {title && (\n              <CardTitle className=\"glass-text-primary glass-text-2xl glass-font-semibold glass-text-center\">\n                {title}\n              </CardTitle>\n            )}\n\n            {description && (\n              <p className=\"glass-text-primary-opacity-70 glass-text-center glass-mt-2\">\n                {description}\n              </p>\n            )}\n\n            {/* Progress Indicator */}\n            {showProgress && (\n              <div\n                className=\"glass-mt-6\"\n                role=\"group\"\n                aria-label=\"Form progress\"\n              >\n                <div className=\"glass-flex glass-justify-between glass-items-center glass-mb-2\">\n                  <span\n                    className=\"glass-text-sm glass-text-primary-glass-opacity-60\"\n                    aria-live=\"polite\"\n                  >\n                    Step {currentStep + 1} of {steps.length}\n                  </span>\n                  <span\n                    className=\"glass-text-sm glass-text-primary-glass-opacity-60\"\n                    aria-live=\"polite\"\n                  >\n                    {Math.round(getProgressPercentage())}% Complete\n                  </span>\n                </div>\n\n                {/* Progress Bar */}\n                <div\n                  role=\"progressbar\"\n                  aria-valuenow={Math.round(getProgressPercentage())}\n                  aria-valuemin={0}\n                  aria-valuemax={100}\n                  aria-label={`Form progress: ${Math.round(getProgressPercentage())}% complete`}\n                  className=\"glass-w-full glass-surface-subtle/10 glass-radius-full glass-h-2 glass-overflow-hidden\"\n                >\n                  <Motion\n                    preset=\"slideRight\"\n                    className=\"glass-h-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-full\"\n                    style={{ width: `${getProgressPercentage()}%` }}\n                  />\n                </div>\n\n                {/* Step Indicators */}\n                <nav\n                  aria-label=\"Form steps\"\n                  className=\"glass-flex glass-justify-between glass-mt-4\"\n                >\n                  {steps.map((step, index) => {\n                    const isCompleted = isStepCompleted(index);\n                    const isCurrent = index === currentStep;\n                    const isValid = stepValidations[index] !== false;\n                    const hasError = validationErrors[index];\n\n                    return (\n                      <div\n                        key={step.id}\n                        role=\"button\"\n                        aria-label={`${step.title}${isCurrent ? \" (current step)\" : \"\"}${isCompleted ? \" (completed)\" : \"\"}${hasError ? \" (has errors)\" : \"\"}`}\n                        aria-current={isCurrent ? \"step\" : undefined}\n                        tabIndex={0}\n                        className={cn(\n                          \"flex flex-col items-center cursor-pointer transition-all duration-200\",\n                          \"glass-hover-scale-105\",\n                          isCurrent && \"scale-105\",\n                          \"glass-focus glass-touch-target glass-contrast-guard\"\n                        )}\n                        onClick={(e) => goToStep(index)}\n                        onKeyDown={(e) => {\n                          if (e.key === \"Enter\" || e.key === \" \") {\n                            e.preventDefault();\n                            goToStep(index);\n                          }\n                        }}\n                      >\n                        <div\n                          className={cn(\n                            \"w-10 h-10 glass-radius-full flex items-center justify-center border-2 transition-all duration-200\",\n                            isCompleted &&\n                              isValid &&\n                              \"bg-green-500 border-green-500 glass-text-primary\",\n                            isCurrent &&\n                              \"bg-primary border-primary glass-text-primary\",\n                            !isCompleted &&\n                              !isCurrent &&\n                              \"bg-white/10 border-white/30 glass-text-primary/60\",\n                            hasError && \"border-red-500 bg-red-500/20\"\n                          )}\n                        >\n                          {isCompleted && isValid ? (\n                            <Check\n                              className=\"glass-w-5 glass-h-5\"\n                              aria-hidden=\"true\"\n                            />\n                          ) : step.icon ? (\n                            <span\n                              className=\"glass-w-5 glass-h-5\"\n                              aria-hidden=\"true\"\n                            >\n                              {step.icon}\n                            </span>\n                          ) : (\n                            <span\n                              className=\"glass-text-sm glass-font-medium\"\n                              aria-hidden=\"true\"\n                            >\n                              {index + 1}\n                            </span>\n                          )}\n                        </div>\n\n                        <div className=\"glass-text-center glass-mt-2\">\n                          <p\n                            className={cn(\n                              \"glass-text-xs font-medium transition-colors duration-200\",\n                              isCurrent\n                                ? \"glass-text-primary\"\n                                : \"glass-text-primary/60\"\n                            )}\n                          >\n                            {step.title}\n                          </p>\n                          {step.description && (\n                            <p className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-mt-1 glass-max-w-20 glass-truncate\">\n                              {step.description}\n                            </p>\n                          )}\n                        </div>\n                      </div>\n                    );\n                  })}\n                </nav>\n              </div>\n            )}\n          </CardHeader>\n\n          {/* Form Content */}\n          <CardContent className=\"glass-pt-0\">\n            <div className=\"glass-min-h-400px\">\n              {steps.map((step, index) => {\n                const StepComponent = step.component;\n                const isActive = index === currentStep;\n\n                return (\n                  <Motion\n                    key={step.id}\n                    preset={isActive ? \"fadeIn\" : \"none\"}\n                    className={cn(\n                      \"transition-opacity duration-300\",\n                      isActive\n                        ? \"opacity-100\"\n                        : \"opacity-0 absolute inset-0 pointer-events-none\"\n                    )}\n                  >\n                    {isActive && (\n                      <div>\n                        {/* Step Header */}\n                        <div className=\"glass-mb-6\">\n                          <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary glass-mb-2\">\n                            {step.title}\n                          </h3>\n                          {step.description && (\n                            <p className=\"glass-text-primary-opacity-70\">\n                              {step.description}\n                            </p>\n                          )}\n                        </div>\n\n                        {/* Step Content */}\n                        <StepComponent\n                          data={formData[step.id] ?? {}}\n                          onChange={(data) => updateFormData(step.id, data)}\n                          validationMode={validationMode}\n                        />\n\n                        {/* Validation Error */}\n                        {validationErrors[index] && (\n                          <div\n                            role=\"alert\"\n                            aria-live=\"assertive\"\n                            className=\"glass-mt-4 glass-p-3 glass-surface-red/20 glass-border glass-border-red/30 glass-radius-lg\"\n                          >\n                            <div className=\"glass-flex glass-items-center glass-gap-2\">\n                              <AlertCircle\n                                className=\"glass-w-4 glass-h-4 glass-text-primary\"\n                                aria-hidden=\"true\"\n                              />\n                              <span className=\"glass-text-secondary glass-text-sm\">\n                                {validationErrors[index]}\n                              </span>\n                            </div>\n                          </div>\n                        )}\n                      </div>\n                    )}\n                  </Motion>\n                );\n              })}\n            </div>\n\n            {/* Navigation */}\n            {showNavigation && (\n              <div className=\"glass-flex glass-justify-between glass-items-center glass-mt-8 glass-pt-6 glass-border-t glass-border-white/10\">\n                <div className=\"glass-flex glass-gap-3\">\n                  {currentStep > 0 && (\n                    <GlassButton\n                      variant=\"outline\"\n                      onClick={prevStep}\n                      disabled={loading}\n                      className=\"glass-flex glass-items-center glass-gap-2\"\n                    >\n                      <ChevronLeft className=\"glass-w-4 glass-h-4\" />\n                      Previous\n                    </GlassButton>\n                  )}\n\n                  {onCancel && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      onClick={handleCancel}\n                      disabled={loading || isSubmitting}\n                    >\n                      {cancelButtonText}\n                    </GlassButton>\n                  )}\n                </div>\n\n                <div className=\"glass-flex glass-gap-3\">\n                  {allowSkip && steps[currentStep].optional && (\n                    <GlassButton\n                      variant=\"outline\"\n                      onClick={nextStep}\n                      disabled={loading || isSubmitting}\n                    >\n                      Skip Step\n                    </GlassButton>\n                  )}\n\n                  {currentStep < steps.length - 1 ? (\n                    <GlassButton\n                      variant=\"primary\"\n                      onClick={nextStep}\n                      disabled={loading || isSubmitting}\n                      className=\"glass-flex glass-items-center glass-gap-2\"\n                    >\n                      Next\n                      <ChevronRight className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n                  ) : (\n                    <GlassButton\n                      variant=\"primary\"\n                      onClick={handleSubmit}\n                      disabled={loading || isSubmitting}\n                      className=\"glass-flex glass-items-center glass-gap-2 glass-min-glass-w-24\"\n                    >\n                      {isSubmitting ? (\n                        <>\n                          <Loader2 className=\"glass-w-4 glass-h-4 glass-animate-spin\" />\n                          Submitting...\n                        </>\n                      ) : (\n                        <>\n                          <CheckCircle className=\"glass-w-4 glass-h-4\" />\n                          {submitButtonText}\n                        </>\n                      )}\n                    </GlassButton>\n                  )}\n                </div>\n              </div>\n            )}\n\n            {/* Summary */}\n            {showSummary && (\n              <div className=\"glass-mt-6 glass-p-4 glass-surface-subtle/5 glass-radius-lg\">\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-primary glass-mb-3\">\n                  Form Summary\n                </h4>\n                <div className=\"glass-gap-2\">\n                  {steps.map((step, index) => {\n                    const isCompleted = isStepCompleted(index);\n                    const hasData = Boolean(formData[step.id]);\n\n                    return (\n                      <div\n                        key={step.id}\n                        className=\"glass-flex glass-items-center glass-justify-between\"\n                      >\n                        <div className=\"glass-flex glass-items-center glass-gap-2\">\n                          {isCompleted ? (\n                            <CheckCircle className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n                          ) : (\n                            <div className=\"glass-w-4 glass-h-4 glass-radius-full glass-border-2 glass-border-white/30\" />\n                          )}\n                          <span\n                            className={cn(\n                              \"glass-text-sm\",\n                              isCompleted\n                                ? \"glass-text-primary\"\n                                : \"glass-text-primary/60\"\n                            )}\n                          >\n                            {step.title}\n                          </span>\n                        </div>\n\n                        {hasData && (\n                          <GlassBadge variant=\"secondary\" size=\"sm\">\n                            Data Saved\n                          </GlassBadge>\n                        )}\n                      </div>\n                    );\n                  })}\n                </div>\n              </div>\n            )}\n          </CardContent>\n        </GlassCard>\n      </Motion>\n    </FormContext.Provider>\n  );\n};\n\n// Form Step Wrapper Component\nexport interface GlassFormStepProps {\n  children: React.ReactNode;\n  title?: string;\n  description?: string;\n  className?: string;\n}\n\nexport const GlassFormStep: React.FC<GlassFormStepProps> = ({\n  children,\n  title,\n  description,\n  className,\n}) => {\n  return (\n    <div className={cn(\"space-y-6\", className)}>\n      {(title || description) && (\n        <div className=\"glass-mb-6\">\n          {title && (\n            <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-2\">\n              {title}\n            </h3>\n          )}\n          {description && (\n            <p className=\"glass-text-primary-opacity-70\">{description}</p>\n          )}\n        </div>\n      )}\n      {children}\n    </div>\n  );\n};\n\nexport default GlassMultiStepForm;\n", "\"use client\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface AccordionItem {\n  /**\n   * Unique identifier for the item\n   */\n  id: string;\n  /**\n   * Title/header content\n   */\n  title: React.ReactNode;\n  /**\n   * Body content\n   */\n  content: React.ReactNode;\n  /**\n   * Whether this item is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Custom icon for this item\n   */\n  icon?: React.ReactNode;\n}\n\nexport interface GlassAccordionProps {\n  /**\n   * Accordion items\n   */\n  items: AccordionItem[];\n  /**\n   * Accordion variant\n   */\n  variant?: \"default\" | \"bordered\" | \"flush\";\n  /**\n   * Accordion size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether multiple items can be open at once\n   */\n  multiple?: boolean;\n  /**\n   * Initially open items (controlled)\n   */\n  value?: string | string[];\n  /**\n   * Default open items (uncontrolled)\n   */\n  defaultValue?: string | string[];\n  /**\n   * Callback when open items change\n   */\n  onValueChange?: (value: string | string[]) => void;\n  /**\n   * Whether to show expand/collapse icons\n   */\n  showIcons?: boolean;\n  /**\n   * Custom expand icon\n   */\n  expandIcon?: React.ReactNode;\n  /**\n   * Custom collapse icon\n   */\n  collapseIcon?: React.ReactNode;\n  /**\n   * Animation duration in milliseconds\n   */\n  animationDuration?: number;\n  /**\n   * Whether to animate content changes\n   */\n  animated?: boolean;\n  /**\n   * Collapsible behavior\n   */\n  collapsible?: boolean;\n  /**\n   * Respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Render a denser layout for previews, sidebars, and compact surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Bound the accordion inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained surfaces.\n   */\n  maxHeight?: number | string;\n  /**\n   * ARIA label for the accordion\n   */\n  \"aria-label\"?: string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * GlassAccordion component\n * Collapsible sections with smooth animations and glassmorphism styling\n */\nexport const GlassAccordion = forwardRef<HTMLDivElement, GlassAccordionProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      items = [],\n      variant = \"default\",\n      size = \"md\",\n      multiple = false,\n      value,\n      defaultValue,\n      onValueChange,\n      showIcons = true,\n      expandIcon,\n      collapseIcon,\n      animationDuration = 300,\n      animated = true,\n      collapsible = true,\n      respectMotionPreference = true,\n      compact = false,\n      contained = false,\n      maxHeight,\n      \"aria-label\": ariaLabel,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const accordionId = useA11yId(\"accordion\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldAnimate =\n      animated && (!respectMotionPreference || !prefersReducedMotion);\n\n    // Normalize value to array for consistent handling\n    const normalizeValue = (val: string | string[] | undefined): string[] => {\n      if (!val) return [];\n      return Array.isArray(val) ? val : [val];\n    };\n\n    // Internal state for uncontrolled mode\n    const [internalValue, setInternalValue] = useState<string[]>(\n      normalizeValue(defaultValue)\n    );\n\n    // Determine current open items\n    const openItems =\n      value !== undefined ? normalizeValue(value) : internalValue;\n\n    // Handle value changes\n    const handleValueChange = (newValue: string[]) => {\n      if (value === undefined) {\n        setInternalValue(newValue);\n      }\n\n      const result = multiple ? newValue : newValue?.[0] || \"\";\n      onValueChange?.(result);\n    };\n\n    // Toggle item open/closed\n    const toggleItem = (itemId: string) => {\n      const isOpen = (openItems || []).includes(itemId);\n\n      if (multiple) {\n        const newValue = isOpen\n          ? (openItems || []).filter((id: any) => id !== itemId)\n          : [...openItems, itemId];\n        handleValueChange(newValue);\n      } else {\n        const newValue = isOpen && collapsible ? [] : [itemId];\n        handleValueChange(newValue);\n      }\n    };\n\n    // Handle keyboard navigation\n    const handleKeyDown = (event: React.KeyboardEvent, itemId: string) => {\n      switch (event.key) {\n        case \"Enter\":\n        case \" \":\n          event.preventDefault();\n          toggleItem(itemId);\n          break;\n        case \"ArrowDown\":\n          event.preventDefault();\n          focusNextItem(itemId);\n          break;\n        case \"ArrowUp\":\n          event.preventDefault();\n          focusPreviousItem(itemId);\n          break;\n        case \"Home\":\n          event.preventDefault();\n          focusFirstItem();\n          break;\n        case \"End\":\n          event.preventDefault();\n          focusLastItem();\n          break;\n      }\n    };\n\n    // Focus management helpers\n    const focusNextItem = (currentId: string) => {\n      if (!items || !Array.isArray(items) || (items?.length || 0) === 0) return;\n      const currentIndex = (items || []).findIndex(\n        (item) => item?.id === currentId\n      );\n      if (currentIndex === -1) return;\n      const nextIndex = (currentIndex + 1) % (items?.length || 0);\n      const nextButton = document.querySelector(\n        `[data-accordion-trigger=\"${items[nextIndex].id}\"]`\n      ) as HTMLButtonElement;\n      nextButton?.focus();\n    };\n\n    const focusPreviousItem = (currentId: string) => {\n      if (!items || !Array.isArray(items) || (items?.length || 0) === 0) return;\n      const currentIndex = (items || []).findIndex(\n        (item) => item?.id === currentId\n      );\n      if (currentIndex === -1) return;\n      const prevIndex =\n        currentIndex === 0 ? (items?.length || 0) - 1 : currentIndex - 1;\n      const prevButton = document.querySelector(\n        `[data-accordion-trigger=\"${items[prevIndex].id}\"]`\n      ) as HTMLButtonElement;\n      prevButton?.focus();\n    };\n\n    const focusFirstItem = () => {\n      const firstButton = document.querySelector(\n        `[data-accordion-trigger=\"${items[0]?.id}\"]`\n      ) as HTMLButtonElement;\n      firstButton?.focus();\n    };\n\n    const focusLastItem = () => {\n      const lastButton = document.querySelector(\n        `[data-accordion-trigger=\"${items[(items?.length || 0) - 1]?.id}\"]`\n      ) as HTMLButtonElement;\n      lastButton?.focus();\n    };\n\n    const effectiveSize = compact ? \"sm\" : size;\n    const boundedHeight = maxHeight ?? (compact || contained ? 240 : undefined);\n\n    // Size classes\n    const sizeClasses = {\n      sm: {\n        trigger: \"glass-px-3 glass-py-2 glass-text-sm\",\n        content: \"glass-px-3 pb-2 glass-text-sm\",\n        icon: \"glass-w-4 glass-h-4\",\n      },\n      md: {\n        trigger: \"glass-px-4 glass-py-2 glass-text-sm\",\n        content: \"glass-px-4 glass-pb-3 glass-text-sm\",\n        icon: \"glass-w-5 glass-h-5\",\n      },\n      lg: {\n        trigger: \"glass-px-6 glass-py-4 glass-text-lg\",\n        content: \"glass-px-6 pb-4 glass-text-lg\",\n        icon: \"glass-w-6 glass-h-6\",\n      },\n    };\n\n    // Default icons\n    const defaultExpandIcon = (\n      <svg\n        className={cn(\n          \"transition-transform duration-200\",\n          sizeClasses[size].icon\n        )}\n        fill=\"none\"\n        stroke=\"currentColor\"\n        viewBox=\"0 0 24 24\"\n      >\n        <path\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth={2}\n          d=\"M19 9l-7 7-7-7\"\n        />\n      </svg>\n    );\n\n    const defaultCollapseIcon = (\n      <svg\n        className={cn(\n          \"transition-transform duration-200 rotate-180\",\n          sizeClasses[size].icon\n        )}\n        fill=\"none\"\n        stroke=\"currentColor\"\n        viewBox=\"0 0 24 24\"\n      >\n        <path\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          strokeWidth={2}\n          d=\"M19 9l-7 7-7-7\"\n        />\n      </svg>\n    );\n\n    return (\n      <div\n        ref={ref}\n        id={accordionId}\n        className={cn(\n          \"glass-accordion glass-w-full glass-min-w-0\",\n          (compact || contained) && \"glass-overflow-auto\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n              }\n            : null),\n          ...(style ?? {}),\n        }}\n        role=\"tablist\"\n        aria-label={ariaLabel || \"Accordion\"}\n        aria-multiselectable={multiple}\n        {...props}\n      >\n        {(items || []).map((item, index) => {\n          const isOpen = (openItems || []).includes(item?.id);\n          const isFirst = index === 0;\n          const isLast = index === (items?.length || 1) - 1;\n\n          return (\n            <OptimizedGlass\n              elevation={variant === \"flush\" ? undefined : \"level1\"}\n              intensity=\"medium\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              animation=\"none\"\n              performanceMode=\"medium\"\n              key={item?.id}\n              className={cn(\n                \"glass-overflow-hidden glass-transition glass-min-w-0\",\n                {\n                  \"glass-border-0\": variant === \"flush\",\n                  \"glass-border glass-border-glass-border/20\":\n                    variant === \"bordered\",\n                  \"glass-mb-2\": variant !== \"flush\" && !isLast,\n                  \"glass-border-t-0\": variant === \"flush\" && !isFirst,\n                }\n              )}\n            >\n              {/* Accordion Header/Trigger */}\n              <button\n                type=\"button\"\n                className={cn(\n                  \"glass-w-full glass-flex glass-items-center glass-justify-between glass-gap-3 glass-text-left glass-font-medium glass-min-w-0\",\n                  \"glass-transition glass-radius-md glass-border-0 glass-surface-transparent\",\n                  \"hover:glass-surface-subtle/10 focus:glass-surface-subtle/10\",\n                  \"glass-focus glass-contrast-guard glass-cursor-pointer\",\n                  sizeClasses[effectiveSize].trigger,\n                  {\n                    \"glass-surface-subtle/10\": isOpen,\n                    \"opacity-50 cursor-not-allowed\": item?.disabled,\n                    \"glass-border-b glass-border-glass-border/10\":\n                      variant === \"flush\" && isOpen,\n                  }\n                )}\n                onClick={(e) => !item?.disabled && toggleItem(item?.id)}\n                onKeyDown={(e) => !item?.disabled && handleKeyDown(e, item?.id)}\n                disabled={item?.disabled}\n                aria-expanded={isOpen}\n                aria-controls={`accordion-content-${item?.id}`}\n                data-accordion-trigger={item?.id}\n                role=\"tab\"\n              >\n                <div className=\"glass-flex glass-items-center glass-gap-3 glass-min-w-0\">\n                  {item?.icon && (\n                    <span className=\"glass-flex-shrink-0 glass-text-secondary\">\n                      {item?.icon}\n                    </span>\n                  )}\n                  <ContrastGuard>\n                    <span className=\"glass-min-w-0 glass-break-words\">\n                      {item?.title}\n                    </span>\n                  </ContrastGuard>\n                </div>\n\n                {showIcons && !item?.disabled && (\n                  <span\n                    className={cn(\n                      \"glass-flex-shrink-0 glass-text-secondary glass-transition\",\n                      isOpen && \"rotate-180\"\n                    )}\n                  >\n                    {isOpen\n                      ? collapseIcon || defaultCollapseIcon\n                      : expandIcon || defaultExpandIcon}\n                  </span>\n                )}\n              </button>\n\n              {/* Accordion Content */}\n              <AccordionContent\n                id={`accordion-content-${item?.id}`}\n                isOpen={isOpen}\n                animated={shouldAnimate}\n                duration={animationDuration}\n                className={sizeClasses[effectiveSize].content}\n                role=\"tabpanel\"\n                aria-labelledby={`accordion-trigger-${item?.id}`}\n              >\n                {item?.content}\n              </AccordionContent>\n            </OptimizedGlass>\n          );\n        })}\n      </div>\n    );\n  }\n);\n\nGlassAccordion.displayName = \"GlassAccordion\";\n\n// Accordion Content Component with smooth height animation\ninterface AccordionContentProps {\n  id: string;\n  isOpen: boolean;\n  animated: boolean;\n  duration: number;\n  className?: string;\n  children: React.ReactNode;\n  role?: string;\n  \"aria-labelledby\"?: string;\n}\n\nconst AccordionContent = forwardRef<HTMLDivElement, AccordionContentProps>(\n  ({ id, isOpen, animated, duration, className, children, ...props }, ref) => {\n    const contentRef = useRef<HTMLDivElement>(null);\n    const [height, setHeight] = useState<number | \"auto\">(isOpen ? \"auto\" : 0);\n\n    useEffect(() => {\n      if (!animated) {\n        setHeight(isOpen ? \"auto\" : 0);\n        return;\n      }\n\n      const content = contentRef.current;\n      if (!content) return;\n\n      if (isOpen) {\n        // Opening: measure content height and animate to it\n        const scrollHeight = content.scrollHeight;\n        setHeight(scrollHeight);\n\n        // After animation completes, set to auto for dynamic content\n        const timer = setTimeout(() => {\n          setHeight(\"auto\");\n        }, duration);\n\n        return () => clearTimeout(timer);\n      } else {\n        // Closing: set explicit height first, then animate to 0\n        setHeight(content.scrollHeight);\n\n        // Force reflow to ensure height is set before animating to 0\n        requestAnimationFrame(() => {\n          setHeight(0);\n        });\n      }\n    }, [isOpen, animated, duration]);\n\n    const contentStyle: React.CSSProperties = animated\n      ? {\n          height: height === \"auto\" ? \"auto\" : `${height}px`,\n          overflow: \"hidden\",\n          transition: `height ${duration}ms var(--glass-motion-easing-standard)`,\n        }\n      : {\n          height: isOpen ? \"auto\" : 0,\n          overflow: \"hidden\",\n        };\n\n    return (\n      <div ref={contentRef} id={id} style={{ ...contentStyle }} {...props}>\n        <div\n          className={cn(\n            \"glass-transition glass-min-w-0 glass-break-words\",\n            className,\n            {\n              \"opacity-0\": !isOpen && animated,\n              \"opacity-100\": isOpen || !animated,\n            }\n          )}\n        >\n          <ContrastGuard>{children}</ContrastGuard>\n        </div>\n      </div>\n    );\n  }\n);\n\nAccordionContent.displayName = \"AccordionContent\";\n\n// AccordionItem interface is already exported above\n", "\"use client\";\nimport React from \"react\";\n\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle, AlertTriangle, CheckCircle, Info, X } from \"@/icons\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n// Glass Alert text color variants\nconst alertTextVariants = {\n  default: \"glass-text-primary\",\n  success: \"glass-text-success\",\n  warning: \"glass-text-warning\",\n  error: \"glass-text-error\",\n  info: \"glass-text-primary\",\n};\n\n// Glass Alert Component\nexport interface GlassAlertProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Alert variant */\n  variant?:\n    | \"default\"\n    | \"success\"\n    | \"warning\"\n    | \"error\"\n    | \"info\"\n    | \"destructive\";\n  /** Alert size */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Glass elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n  /** Whether to show default icon */\n  showIcon?: boolean;\n  /** Custom icon to display */\n  icon?: React.ReactNode;\n  /** Whether the alert is dismissible */\n  dismissible?: boolean;\n  /** Callback when alert is dismissed */\n  onDismiss?: () => void;\n  /** Whether to animate entrance */\n  animate?: boolean;\n  /** Glass blur effect */\n  blur?: \"none\" | \"subtle\" | \"medium\" | \"strong\" | \"intense\";\n  /** Glass animation */\n  animation?:\n    | \"none\"\n    | \"float\"\n    | \"pulse\"\n    | \"shimmer\"\n    | \"breathe\"\n    | \"morph\"\n    | \"ripple\"\n    | \"wave\";\n  /** Glass border style */\n  border?:\n    | \"none\"\n    | \"subtle\"\n    | \"glow\"\n    | \"gradient\"\n    | \"neon\"\n    | \"dynamic\"\n    | \"particle\";\n  /** Glass lighting effect */\n  lighting?:\n    | \"ambient\"\n    | \"directional\"\n    | \"volumetric\"\n    | \"caustic\"\n    | \"iridescent\";\n  /** Glass intensity */\n  intensity?: \"subtle\" | \"medium\" | \"strong\" | \"extreme\" | \"ultra\";\n  /** Performance mode */\n  performanceMode?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA live region priority */\n  \"aria-live\"?: \"polite\" | \"assertive\" | \"off\";\n}\n\nconst GlassAlert = React.forwardRef<HTMLDivElement, GlassAlertProps>(\n  (\n    {\n      className,\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"level1\",\n      showIcon = true,\n      icon,\n      dismissible = false,\n      onDismiss,\n      animate = true,\n      blur = \"subtle\",\n      animation = \"none\",\n      border = \"subtle\",\n      lighting = \"ambient\",\n      intensity = \"medium\",\n      performanceMode = \"medium\",\n      respectMotionPreference = true,\n      \"aria-live\": ariaLive = \"polite\",\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const alertId = useA11yId(\"alert\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const [dismissed, setDismissed] = React.useState(false);\n    const shouldAnimate =\n      animate && (!respectMotionPreference || !prefersReducedMotion);\n\n    const sizeStyles = {\n      sm: \"glass-p-3 glass-text-sm\",\n      md: \"glass-p-4 glass-text-base\",\n      lg: \"glass-p-6 glass-text-lg\",\n    };\n\n    // Get OptimizedGlass intent\n    const getGlassIntent = ():\n      | \"neutral\"\n      | \"primary\"\n      | \"success\"\n      | \"warning\"\n      | \"danger\"\n      | \"info\" => {\n      switch (variant) {\n        case \"success\":\n          return \"success\";\n        case \"warning\":\n          return \"warning\";\n        case \"error\":\n        case \"destructive\":\n          return \"danger\";\n        default:\n          return \"neutral\";\n      }\n    };\n\n    // Get default icon based on variant\n    const getDefaultIcon = () => {\n      switch (variant) {\n        case \"success\":\n          return <CheckCircle className=\"glass-h-4 glass-w-4\" />;\n        case \"warning\":\n          return <AlertTriangle className=\"glass-h-4 glass-w-4\" />;\n        case \"error\":\n        case \"destructive\":\n          return <AlertCircle className=\"glass-h-4 glass-w-4\" />;\n        case \"info\":\n          return <Info className=\"glass-h-4 glass-w-4\" />;\n        default:\n          return <Info className=\"glass-h-4 glass-w-4\" />;\n      }\n    };\n\n    const handleDismiss = () => {\n      setDismissed(true);\n      onDismiss?.();\n    };\n\n    if (dismissed) {\n      return null;\n    }\n\n    const displayVariant = (\n      variant === \"destructive\" ? \"error\" : variant\n    ) as keyof typeof alertTextVariants;\n\n    const alertContent = (\n      <OptimizedGlass\n        intent={getGlassIntent()}\n        elevation={elevation}\n        intensity={intensity}\n        depth={2}\n        tint=\"neutral\"\n        border={border}\n        animation={animation}\n        performanceMode={performanceMode}\n        ref={ref}\n        className={cn(\n          \"glass-relative glass-w-full glass-flex glass-items-start glass-gap-3 glass-transition\",\n          sizeStyles[size],\n          alertTextVariants[displayVariant],\n          className\n        )}\n        role=\"alert\"\n        aria-live={ariaLive}\n        aria-atomic=\"true\"\n        id={alertId}\n        {...props}\n      >\n        {showIcon && (\n          <span className=\"glass-flex-shrink-0 glass-mt-0-5\" aria-hidden=\"true\">\n            {icon || getDefaultIcon()}\n          </span>\n        )}\n\n        {/* Content */}\n        <div className=\"glass-flex-1 glass-min-w-0\">{children}</div>\n\n        {/* Dismiss button */}\n        {dismissible && (\n          <GlassButton\n            onClick={handleDismiss}\n            className={cn(\n              \"glass-flex-shrink-0 glass-radius-md glass-p-1 glass-opacity-75\",\n              \"glass-transition glass-focus glass-touch-target glass-contrast-guard\"\n            )}\n            aria-label=\"Dismiss alert\"\n          >\n            <X className=\"glass-h-4 glass-w-4\" />\n          </GlassButton>\n        )}\n      </OptimizedGlass>\n    );\n\n    return shouldAnimate ? (\n      <Motion preset=\"slideUp\">{alertContent}</Motion>\n    ) : (\n      alertContent\n    );\n  }\n);\nGlassAlert.displayName = \"GlassAlert\";\n\n// Glass Alert Title\nexport interface GlassAlertTitleProps\n  extends React.HTMLAttributes<HTMLHeadingElement> {\n  /** Title size variant */\n  size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst GlassAlertTitle = React.forwardRef<\n  HTMLParagraphElement,\n  GlassAlertTitleProps\n>(({ className, size = \"md\", ...props }, ref) => {\n  const sizeConfig = {\n    sm: \"glass-text-sm\",\n    md: \"glass-text-base\",\n    lg: \"glass-text-lg\",\n  };\n\n  return (\n    <h5\n      ref={ref}\n      className={cn(\n        \"glass-alert-title glass-mb-1 glass-font-semibold leading-none tracking-tight\",\n        sizeConfig[size],\n        className\n      )}\n      {...props}\n    />\n  );\n});\nGlassAlertTitle.displayName = \"GlassAlertTitle\";\n\n// Glass Alert Description\nexport interface GlassAlertDescriptionProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Description size variant */\n  size?: \"xs\" | \"sm\" | \"md\";\n}\n\nconst GlassAlertDescription = React.forwardRef<\n  HTMLParagraphElement,\n  GlassAlertDescriptionProps\n>(({ className, size = \"sm\", ...props }, ref) => {\n  const sizeConfig = {\n    xs: \"glass-text-xs\",\n    sm: \"glass-text-sm\",\n    md: \"glass-text-base\",\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        \"glass-alert-description [&_p]:leading-relaxed opacity-90\",\n        sizeConfig[size],\n        className\n      )}\n      {...props}\n    />\n  );\n});\nGlassAlertDescription.displayName = \"GlassAlertDescription\";\n\n// Glass Alert Actions (for action buttons)\nexport interface GlassAlertActionsProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Actions alignment */\n  align?: \"left\" | \"right\" | \"center\";\n  /** Actions spacing */\n  spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst GlassAlertActions = React.forwardRef<\n  HTMLDivElement,\n  GlassAlertActionsProps\n>(({ className, align = \"right\", spacing = \"md\", ...props }, ref) => {\n  const alignConfig = {\n    left: \"glass-justify-start\",\n    right: \"glass-justify-end\",\n    center: \"glass-justify-center\",\n  };\n\n  const spacingConfig = {\n    sm: \"glass-gap-2 glass-mt-2\",\n    md: \"glass-gap-3 mt-3\",\n    lg: \"glass-gap-4 glass-mt-4\",\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        \"glass-alert-actions glass-flex glass-items-center\",\n        alignConfig[align],\n        spacingConfig[spacing],\n        className\n      )}\n      {...props}\n    />\n  );\n});\nGlassAlertActions.displayName = \"GlassAlertActions\";\n\n// Export components\nexport {\n  GlassAlert,\n  GlassAlertActions,\n  GlassAlertDescription,\n  GlassAlertTitle,\n};\n\n// Re-export with shorter names for easier usage\nexport {\n  GlassAlert as Alert,\n  GlassAlertActions as AlertActions,\n  GlassAlertDescription as AlertDescription,\n  GlassAlertTitle as AlertTitle,\n};\n\nexport default GlassAlert;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassAvatarProps\n  extends React.ImgHTMLAttributes<HTMLImageElement> {\n  /**\n   * Avatar variant\n   */\n  variant?: \"default\" | \"circle\" | \"square\" | \"glass-radius-md\";\n  /**\n   * Avatar size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n  /**\n   * Avatar status indicator\n   */\n  status?: \"online\" | \"offline\" | \"away\" | \"busy\";\n  /**\n   * Show status indicator\n   */\n  showStatus?: boolean;\n  /**\n   * Glass elevation\n   */\n  elevation?: 1 | 2 | 3;\n  /**\n   * Custom fallback content\n   */\n  fallback?: React.ReactNode;\n  /**\n   * Fallback text (will generate initials)\n   */\n  fallbackText?: string;\n  /**\n   * ARIA label for the avatar\n   */\n  \"aria-label\"?: string;\n}\n\nexport interface GlassAvatarGroupProps {\n  /**\n   * Maximum number of avatars to show\n   */\n  max?: number;\n  /**\n   * Spacing between avatars\n   */\n  spacing?: \"tight\" | \"normal\" | \"loose\";\n  /**\n   * Avatar size for group\n   */\n  size?: GlassAvatarProps[\"size\"];\n  /**\n   * Children (GlassAvatar components)\n   */\n  children: React.ReactNode;\n}\n\nexport interface GlassAvatarFallbackProps {\n  /**\n   * Delay before showing fallback (ms)\n   */\n  delayMs?: number;\n  /**\n   * Children content\n   */\n  children: React.ReactNode;\n}\n\n/**\n * GlassAvatar component\n * A glassmorphism avatar with status indicators and fallbacks\n */\nexport const GlassAvatar = forwardRef<HTMLImageElement, GlassAvatarProps>(\n  (\n    {\n      variant = \"circle\",\n      size = \"md\",\n      status,\n      showStatus = false,\n      elevation = \"level1\",\n      fallback,\n      fallbackText,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      className,\n      src,\n      alt,\n      onError,\n      ...props\n    },\n    ref\n  ) => {\n    const avatarId = useA11yId(\"avatar\");\n    const [hasError, setHasError] = React.useState(false);\n    const [isLoading, setIsLoading] = React.useState(!!src);\n\n    const sizeClasses = {\n      xs: \"glass-w-6 glass-h-6 glass-text-xs\",\n      sm: \"glass-w-8 glass-h-8 glass-text-sm\",\n      md: \"glass-w-10 glass-h-10 glass-text-base\",\n      lg: \"glass-w-12 glass-h-12 glass-text-lg\",\n      xl: \"glass-w-16 glass-h-16 glass-text-xl\",\n      \"2xl\": \"glass-w-20 glass-h-20 glass-text-2xl\",\n    };\n\n    const sizeStyles: Record<\n      NonNullable<GlassAvatarProps[\"size\"]>,\n      React.CSSProperties\n    > = {\n      xs: { width: 24, height: 24, fontSize: 12 },\n      sm: { width: 32, height: 32, fontSize: 14 },\n      md: { width: 40, height: 40, fontSize: 16 },\n      lg: { width: 48, height: 48, fontSize: 18 },\n      xl: { width: 64, height: 64, fontSize: 20 },\n      \"2xl\": { width: 80, height: 80, fontSize: 24 },\n    };\n\n    const variantClasses = {\n      default: \"glass-radius-md\",\n      circle: \"glass-radius-full\",\n      square: \"glass-radius-none\",\n      \"glass-radius-md\": \"glass-radius-lg\",\n    };\n\n    const variantStyles: Record<\n      NonNullable<GlassAvatarProps[\"variant\"]>,\n      React.CSSProperties\n    > = {\n      default: { borderRadius: 10 },\n      circle: { borderRadius: 9999 },\n      square: { borderRadius: 0 },\n      \"glass-radius-md\": { borderRadius: 12 },\n    };\n\n    const statusColors = {\n      online: \"glass-surface-success\",\n      offline: \"glass-surface-primary\",\n      away: \"glass-surface-warning\",\n      busy: \"glass-surface-danger\",\n    };\n\n    const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n      setHasError(true);\n      setIsLoading(false);\n      onError?.(e);\n    };\n\n    const handleLoad = () => {\n      setIsLoading(false);\n    };\n\n    // Generate initials from fallback text\n    const getInitials = (text: string) => {\n      return text\n        .split(\" \")\n        .map((word: any) => word[0])\n        .join(\"\")\n        .toUpperCase()\n        .slice(0, 2);\n    };\n\n    const showFallback = hasError || !src;\n    const fallbackContent =\n      fallback ||\n      (fallbackText ? (\n        <ContrastGuard>\n          <span className=\"glass-font-medium glass-text-primary-glass-opacity-80\">\n            {getInitials(fallbackText)}\n          </span>\n        </ContrastGuard>\n      ) : (\n        <div className=\"glass-w-4 glass-h-4 glass-surface-subtle/30 glass-radius-md\" />\n      ));\n\n    // Convert numeric elevation to level string\n    const getElevationLevel = (\n      elev?: 1 | 2 | 3\n    ): \"level1\" | \"level2\" | \"level3\" => {\n      if (elev === 1) return \"level1\";\n      if (elev === 2) return \"level2\";\n      if (elev === 3) return \"level3\";\n      return \"level1\"; // default\n    };\n\n    return (\n      <div\n        data-glass-component\n        className={cn(\"glass-relative glass-inline-block\", className)}\n        style={{\n          position: \"relative\",\n          display: \"inline-block\",\n          width: sizeStyles[size].width,\n          height: sizeStyles[size].height,\n          flex: \"0 0 auto\",\n        }}\n        data-testid={dataTestId || \"glassavatar\"}\n      >\n        <OptimizedGlass\n          elevation={\n            elevation === 1\n              ? \"level1\"\n              : elevation === 2\n                ? \"level2\"\n                : elevation === 3\n                  ? \"level3\"\n                  : \"level1\"\n          }\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          id={avatarId}\n          className={cn(\n            \"glass-relative glass-overflow-hidden glass-flex glass-items-center glass-justify-center\",\n            sizeClasses[size],\n            variantClasses[variant],\n            \"glass-backdrop-blur-md bg-white/10 glass-border glass-border-white/20\",\n            className\n          )}\n          style={{\n            ...sizeStyles[size],\n            ...variantStyles[variant],\n            position: \"relative\",\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n            overflow: \"hidden\",\n            boxSizing: \"border-box\",\n          }}\n          role=\"img\"\n          aria-label={\n            ariaLabel ||\n            alt ||\n            (fallbackText ? `Avatar for ${fallbackText}` : \"Avatar\")\n          }\n        >\n          {showFallback ? (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-w-full glass-h-full\">\n              {fallbackContent}\n            </div>\n          ) : (\n            <img\n              ref={ref}\n              src={src}\n              alt={alt || (ariaLabel ? \"\" : \"Avatar image\")}\n              onError={handleError}\n              onLoad={handleLoad}\n              className=\"glass-w-full glass-h-full glass-object-cover\"\n              {...props}\n            />\n          )}\n\n          {isLoading && !hasError && (\n            <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-surface-dark/20\">\n              <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-white/30 glass-border-t-white/60 glass-radius-full glass-animate-spin\" />\n            </div>\n          )}\n        </OptimizedGlass>\n\n        {showStatus && status && (\n          <div\n            className={cn(\n              \"glass-absolute bottom-0 right-0 glass-w-3 glass-h-3 glass-radius-full glass-border-2 glass-border-white\",\n              statusColors[status]\n            )}\n            style={{\n              position: \"absolute\",\n              right: 0,\n              bottom: 0,\n              width: 12,\n              height: 12,\n              borderRadius: 999,\n              border: \"2px solid rgba(15, 23, 42, 0.92)\",\n            }}\n            role=\"status\"\n            aria-label={`Status: ${status}`}\n          />\n        )}\n      </div>\n    );\n  }\n);\n\nGlassAvatar.displayName = \"GlassAvatar\";\n\n/**\n * GlassAvatarGroup component\n * Groups multiple avatars with overlap and max display\n */\nexport const GlassAvatarGroup: React.FC<GlassAvatarGroupProps> = ({\n  max = 5,\n  spacing = \"normal\",\n  size = \"md\",\n  children,\n}) => {\n  const childArray = React.Children.toArray(children);\n  const visibleCount = Math.min(childArray.length, max);\n  const hasOverflow = childArray.length > max;\n\n  const spacingClasses = {\n    tight: \"-glass-gap-1\",\n    normal: \"-glass-gap-2\",\n    loose: \"-glass-gap-3\",\n  };\n\n  return (\n    <div\n      className={cn(\"glass-flex glass-items-center\", spacingClasses[spacing])}\n      style={{\n        display: \"flex\",\n        alignItems: \"center\",\n      }}\n    >\n      {childArray.slice(0, visibleCount).map((child, index) => (\n        <div\n          key={index}\n          className=\"glass-relative\"\n          style={{\n            position: \"relative\",\n            marginLeft:\n              index === 0\n                ? 0\n                : spacing === \"tight\"\n                  ? -4\n                  : spacing === \"loose\"\n                    ? -12\n                    : -8,\n            zIndex: visibleCount - index,\n          }}\n        >\n          {React.cloneElement(child as React.ReactElement, {\n            size,\n            elevation: \"level2\",\n          })}\n        </div>\n      ))}\n\n      {hasOverflow && (\n        <div className=\"glass-relative\">\n          <GlassAvatar\n            size={size}\n            elevation={2}\n            fallback={\n              <ContrastGuard>\n                <span className=\"glass-font-medium glass-text-primary-glass-opacity-60 glass-text-xs\">\n                  +{childArray.length - max}\n                </span>\n              </ContrastGuard>\n            }\n          />\n        </div>\n      )}\n    </div>\n  );\n};\n\n/**\n * GlassAvatarFallback component\n * Shows fallback content with optional delay\n */\nexport const GlassAvatarFallback: React.FC<GlassAvatarFallbackProps> = ({\n  delayMs = 0,\n  children,\n}) => {\n  const [showFallback, setShowFallback] = React.useState(delayMs === 0);\n\n  React.useEffect(() => {\n    if (delayMs > 0) {\n      const timer = setTimeout(() => setShowFallback(true), delayMs);\n      return () => clearTimeout(timer);\n    }\n  }, [delayMs]);\n\n  if (!showFallback) {\n    return (\n      <div className=\"glass-w-full glass-h-full glass-flex glass-items-center glass-justify-center glass-surface-dark/10\">\n        <div className=\"glass-w-3 glass-h-3 glass-border glass-border-white/30 glass-border-t-white/60 glass-radius-full glass-animate-spin\" />\n      </div>\n    );\n  }\n\n  return <>{children}</>;\n};\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassBadgeLineProps extends React.HTMLAttributes<HTMLDivElement> {\n  items: {\n    label: string;\n    intent?: \"default\" | \"success\" | \"warning\" | \"danger\";\n  }[];\n  className?: string;\n  /** ARIA label for the badge line */\n  \"aria-label\"?: string;\n}\n\nexport const GlassBadgeLine = forwardRef<HTMLDivElement, GlassBadgeLineProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      items: incomingItems = [],\n      \"aria-label\": ariaLabel,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const badgeLineId = useA11yId(\"badge-line\");\n    const items = Array.isArray(incomingItems) ? incomingItems : [];\n\n    return (\n      <div\n        data-glass-component\n        ref={ref}\n        id={badgeLineId}\n        className={cn(\"glass-flex glass-flex-wrap glass-gap-1\", className)}\n        role=\"list\"\n        aria-label={ariaLabel || \"Badge list\"}\n        {...props}\n      >\n        {items.map((it, i) => (\n          <span\n            key={i}\n            className={cn(\n              \"glass-px-2 glass-py-1 glass-text-xs glass-radius-full glass-border\",\n              it.intent === \"success\"\n                ? \"bg-emerald-500/15 text-emerald-300 glass-border-emerald-400/30\"\n                : it.intent === \"warning\"\n                  ? \"bg-amber-500/15 text-amber-300 glass-border-amber-400/30\"\n                  : it.intent === \"danger\"\n                    ? \"bg-red-500/15 text-red-300 glass-border-red-400/30\"\n                    : \"bg-white/10 glass-text-primary/80 glass-border-white/20\"\n            )}\n            role=\"listitem\"\n            aria-label={`${it.intent || \"default\"} badge: ${it.label}`}\n          >\n            {it.label}\n          </span>\n        ))}\n      </div>\n    );\n  }\n);\n\nGlassBadgeLine.displayName = \"GlassBadgeLine\";\n\nexport default GlassBadgeLine;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useMemo,\n  createRef,\n  useCallback,\n  CSSProperties,\n} from \"react\";\nimport { GlassDataGridProps, SortState } from \"./types\";\n\n// Sortable data hook: tri-state column sorting (asc -> desc -> unsorted).\nconst compareValues = (a: unknown, b: unknown): number => {\n  if (a === b) return 0;\n  if (a === null || a === undefined) return -1;\n  if (b === null || b === undefined) return 1;\n  if (typeof a === \"number\" && typeof b === \"number\") {\n    return a - b;\n  }\n  const aStr = String(a);\n  const bStr = String(b);\n  return aStr.localeCompare(bStr, undefined, {\n    numeric: true,\n    sensitivity: \"base\",\n  });\n};\n\nconst useSortableData = (data: any[], initialSort: SortState | null) => {\n  const [sortConfig, setSortConfig] = useState<SortState | null>(\n    initialSort && initialSort.direction ? initialSort : null\n  );\n\n  const handleSort = useCallback((key: string) => {\n    setSortConfig((current) => {\n      // Cycle: not sorting this column -> asc; asc -> desc; desc -> cleared.\n      if (!current || current.key !== key) {\n        return { key, direction: \"asc\" };\n      }\n      if (current.direction === \"asc\") {\n        return { key, direction: \"desc\" };\n      }\n      return null;\n    });\n  }, []);\n\n  const sortedData = useMemo(() => {\n    if (!sortConfig || !sortConfig.direction) return data;\n    const { key, direction } = sortConfig;\n    const copy = [...data];\n    copy.sort((rowA, rowB) => {\n      const result = compareValues(rowA?.[key], rowB?.[key]);\n      return direction === \"asc\" ? result : -result;\n    });\n    return copy;\n  }, [data, sortConfig]);\n\n  return {\n    sortedData,\n    sortConfig,\n    handleSort,\n  };\n};\n\nconst useDraggableListPhysics = (options: any) => ({\n  styles: {} as Record<number, CSSProperties>,\n  getHandlers: () => ({}),\n  isDragging: false,\n  draggedIndex: -1,\n});\n\nconst useVectorSpring = (options: any) => ({\n  start: () => {},\n  value: options?.initialValue || { x: 0, y: 0, z: 0 },\n  setValue: () => {},\n});\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport styles from \"./GlassDataGrid.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\n// Define the component using forwardRef\nexport const GlassDataGrid = forwardRef<HTMLDivElement, GlassDataGridProps>(\n  (props, ref) => {\n    // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n    const {\n      data: initialData = [],\n      columns = [],\n      className,\n      style,\n      height,\n      compact = false,\n      contained = false,\n      maxHeight,\n      maxWidth,\n      initialSort,\n      enableRowDragging = false,\n      onRowOrderChange,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...restProps\n    } = props;\n    const safeInitialData = Array.isArray(initialData) ? initialData : [];\n    const safeColumns = Array.isArray(columns) ? columns : [];\n    const {\n      sortedData: unsortedData = safeInitialData,\n      sortConfig,\n      handleSort,\n    } = useSortableData(safeInitialData, initialSort as SortState);\n    const normalizedSortedData = Array.isArray(unsortedData)\n      ? unsortedData\n      : safeInitialData;\n\n    // Create refs for each row element for the physics hook\n    const rowRefs = useMemo(\n      () =>\n        Array.from({ length: normalizedSortedData?.length || 0 }, () =>\n          createRef<HTMLTableRowElement>()\n        ),\n      [normalizedSortedData?.length]\n    );\n\n    // Need state for the order controlled by the hook\n    const [renderOrder, setRenderOrder] = useState<number[]>(() =>\n      Array.from({ length: normalizedSortedData.length }, (_, i) => i)\n    );\n\n    useEffect(() => {\n      setRenderOrder((previous) => {\n        if (previous.length === normalizedSortedData.length) {\n          return previous;\n        }\n        return Array.from({ length: normalizedSortedData.length }, (_, i) => i);\n      });\n    }, [normalizedSortedData.length]);\n\n    // Display data based on renderOrder\n    const displayData = useMemo(\n      () =>\n        (renderOrder || [])\n          .map((index: any) => normalizedSortedData?.[index])\n          .filter((row) => row !== undefined),\n      [normalizedSortedData, renderOrder]\n    );\n\n    // Callback for the hook to update our renderOrder\n    const handleOrderUpdate = useCallback(\n      (newOrderIndices: number[]) => {\n        setRenderOrder(newOrderIndices);\n        if (onRowOrderChange) {\n          // Map original data based on the new order of *original* indices\n          const originalDataInNewOrder = newOrderIndices\n            .map((originalIndex: any) => safeInitialData?.[originalIndex])\n            .filter((row) => row !== undefined);\n          onRowOrderChange(originalDataInNewOrder);\n        }\n      },\n      [onRowOrderChange, safeInitialData]\n    );\n\n    const {\n      styles: rowStyles,\n      getHandlers,\n      isDragging: isAnyItemDragging,\n      draggedIndex: draggedOriginalItemIndex,\n    } = useDraggableListPhysics({\n      itemRefs: rowRefs,\n      onOrderChange: handleOrderUpdate,\n      spacing: 0,\n      direction: \"vertical\",\n    });\n\n    // --- Sort Indicator Animation using useVectorSpring ---\n    const sortIndicatorSpring = useVectorSpring({\n      config: {\n        tension: 350, // Use tension/friction for config\n        friction: 25,\n      },\n      // initialValue: { x: 0, y: 0, z: 0 } // Optional initial value\n    });\n    // Map sorting state to target value for animation hook\n    const sortTargetValue = useMemo(() => {\n      if (!sortConfig) return 0; // Target 0 when not sorted\n      return sortConfig.direction === \"asc\" ? 1 : -1; // Target 1 for asc -1 for desc\n    }, [sortConfig]);\n    // Trigger animation when target changes\n    useEffect(() => {\n      // Set the target Y value of the vector spring\n      sortIndicatorSpring.start();\n    }, [sortTargetValue, sortIndicatorSpring]);\n    // --- End Sort Indicator Animation ---\n\n    const handleHeaderKeyDown = (\n      event: React.KeyboardEvent<HTMLTableCellElement>,\n      columnKey: string\n    ) => {\n      if (event.key === \"Enter\" || event.key === \" \") {\n        event.preventDefault();\n        handleSort(columnKey);\n      }\n    };\n\n    const totalColumns = safeColumns.length + (enableRowDragging ? 1 : 0);\n    const hasData = displayData.length > 0;\n    const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n    if (!safeColumns.length) {\n      return (\n        <OptimizedGlass\n          data-glass-component\n          ref={ref}\n          intent=\"neutral\"\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          className={cn(\"glass-w-full glass-p-6 glass-text-center\", className)}\n          style={{ ...(style ?? {}) }}\n          role=\"region\"\n          aria-label={ariaLabel || \"Data Grid\"}\n          data-testid={dataTestId}\n          {...restProps}\n        >\n          <ContrastGuard>\n            <p className=\"glass-text-sm glass-text-secondary\">\n              No columns configured for this data grid.\n            </p>\n          </ContrastGuard>\n        </OptimizedGlass>\n      );\n    }\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        intent=\"neutral\"\n        elevation=\"level2\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"glass-w-full glass-overflow-x-auto\",\n          height && \"glass-overflow-y-auto\",\n          className\n        )}\n        style={{\n          ...style,\n          ...(height && { height: resolvedHeight }),\n          maxWidth:\n            resolvedMaxWidth ?? (compact || contained ? \"320px\" : undefined),\n          maxHeight:\n            resolvedMaxHeight ?? (compact || contained ? \"240px\" : undefined),\n          overflowY:\n            compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n          perspective: \"1000px\",\n        }}\n        data-testid={dataTestId}\n        {...restProps}\n      >\n        <table\n          className={cn(styles.table, compact && styles.compact)}\n          role=\"table\"\n          aria-label={ariaLabel || \"Data Grid\"}\n        >\n          <thead>\n            <tr className={styles.headerRow}>\n              {/* Add placeholder header for drag handle if enabled */}\n              {enableRowDragging && (\n                <th\n                  className={cn(styles.headerCell, styles.dragHandleCell)}\n                  aria-hidden=\"true\"\n                ></th>\n              )}\n              {safeColumns.map((col) => {\n                const columnId = col.id ?? col.key;\n                const columnHeader = col.header ?? col.label ?? col.key;\n                // Determine if this column is the one being sorted\n                const isSortingThisColumn = sortConfig?.key === col.key;\n                const currentSortDirection =\n                  sortConfig && isSortingThisColumn\n                    ? sortConfig.direction\n                    : null;\n                const isSortable = col.sortable;\n\n                // Calculate indicator style based on animation value (from spring.value.y)\n                const animValue = sortIndicatorSpring.value.y; // Get the animated value from the Y dimension\n                const indicatorOpacity = Math.min(1, Math.abs(animValue) * 1.5); // Fade in/out\n                const indicatorTranslateYPercent = -50 + animValue * -10; // Vertical movement\n                const indicatorScale = 0.8 + Math.abs(animValue) * 0.2; // Scale effect\n                const indicatorStyle: CSSProperties = {\n                  opacity: indicatorOpacity,\n                  transform: `translateY(${indicatorTranslateYPercent}%) scale(${indicatorScale})`,\n                };\n\n                const headerClassName = cn(\n                  styles.headerCell,\n                  isSortable && styles.headerSortable\n                );\n\n                return (\n                  <th\n                    key={columnId}\n                    className={headerClassName}\n                    onClick={() => isSortable && handleSort(col.key)}\n                    tabIndex={isSortable ? 0 : -1}\n                    onKeyDown={(e) =>\n                      isSortable && handleHeaderKeyDown(e, col.key)\n                    }\n                    role=\"columnheader\"\n                    aria-sort={\n                      isSortable\n                        ? currentSortDirection === \"asc\"\n                          ? \"ascending\"\n                          : currentSortDirection === \"desc\"\n                            ? \"descending\"\n                            : \"none\"\n                        : undefined\n                    }\n                    aria-label={\n                      columnHeader ? `Column ${columnHeader}` : undefined\n                    }\n                  >\n                    <ContrastGuard>{columnHeader}</ContrastGuard>\n                    <span\n                      className={styles.sortIndicator}\n                      style={{\n                        opacity: indicatorOpacity,\n                        transform: `translateY(${indicatorTranslateYPercent}%) scale(${indicatorScale})`,\n                      }}\n                      aria-hidden={!isSortingThisColumn}\n                    >\n                      {sortTargetValue > 0 ? \"\u25B2\" : \"\u25BC\"}\n                    </span>\n                  </th>\n                );\n              })}\n            </tr>\n          </thead>\n          {/* Use a glass-relative positioned div for tbody content if rows are glass-absolute */}\n          <tbody className={styles.body}>\n            {hasData ? (\n              displayData.map((row, displayIndex) => {\n                const originalIndex = renderOrder?.[displayIndex];\n                if (originalIndex === undefined) return null;\n\n                const rowStyle = rowStyles?.[originalIndex] || {};\n                const handlers = enableRowDragging\n                  ? getHandlers()\n                  : { onPointerDown: () => {}, onKeyDown: () => {} };\n\n                const isDraggingThisRow =\n                  isAnyItemDragging &&\n                  draggedOriginalItemIndex === originalIndex;\n\n                const rowClassName = cn(\n                  styles.row,\n                  isDraggingThisRow && styles.rowDragging\n                );\n\n                return (\n                  <tr\n                    key={`row-${row?.id ?? originalIndex}`}\n                    ref={rowRefs?.[originalIndex]}\n                    style={{ ...(rowStyle ?? {}) }}\n                    className={rowClassName}\n                  >\n                    {enableRowDragging && (\n                      <td className={cn(styles.cell, styles.dragHandleCell)}>\n                        <span\n                          {...handlers}\n                          tabIndex={0}\n                          role=\"button\"\n                          aria-label={`Drag row ${displayIndex + 1}`}\n                          aria-grabbed={isDraggingThisRow}\n                          data-drag-handle=\"true\"\n                          className={cn(\n                            styles.dragHandle,\n                            isDraggingThisRow && styles.dragHandleActive\n                          )}\n                        >\n                          \u283F\n                        </span>\n                      </td>\n                    )}\n                    {safeColumns.map((col) => {\n                      const columnId = col.id ?? col.key;\n                      const accessorKey = col.accessorKey ?? col.key;\n                      const cellValue =\n                        row?.[accessorKey as keyof typeof row] ??\n                        col.placeholder ??\n                        \"\u2014\";\n                      const renderedCell = col.cellRenderer\n                        ? col.cellRenderer(\n                            row?.[accessorKey as keyof typeof row],\n                            row\n                          )\n                        : col.render\n                          ? col.render(\n                              row?.[accessorKey as keyof typeof row],\n                              row\n                            )\n                          : cellValue;\n\n                      return (\n                        <td\n                          key={`${columnId}-${originalIndex}`}\n                          className={styles.cell}\n                        >\n                          <ContrastGuard>{renderedCell}</ContrastGuard>\n                        </td>\n                      );\n                    })}\n                  </tr>\n                );\n              })\n            ) : (\n              <tr>\n                <td className={styles.cell} colSpan={Math.max(1, totalColumns)}>\n                  <ContrastGuard>\n                    <div className=\"glass-text-sm glass-text-secondary glass-text-center\">\n                      No data available.\n                    </div>\n                  </ContrastGuard>\n                </td>\n              </tr>\n            )}\n          </tbody>\n        </table>\n      </OptimizedGlass>\n    );\n  }\n);\n\n// Add display name for better debugging\nGlassDataGrid.displayName = \"GlassDataGrid\";\n", ".table {\n  width: 100%;\n  min-width: var(--glass-datagrid-min-width, 100%);\n  border-collapse: separate;\n  border-spacing: 0;\n  font-family: var(--aura-font-sans);\n  color: var(--aura-color-global-text-primary);\n  table-layout: fixed;\n}\n\n.headerRow {\n  background: transparent;\n}\n\n.headerCell {\n  position: relative;\n  text-align: left;\n  padding: var(--glass-space-datagrid-header, 12px 32px 12px 16px);\n  font-weight: var(--aura-font-weight-semibold);\n  font-size: 0.875rem;\n  color: var(--aura-color-global-text-primary);\n  border-bottom: var(--glass-space-datagrid-header-border, 1px) solid\n    color-mix(in srgb, var(--aura-color-global-text-secondary) 12%, transparent);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 86%,\n    transparent\n  );\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n  overflow-wrap: anywhere;\n}\n\n.headerSortable {\n  cursor: pointer;\n  user-select: none;\n}\n\n.headerSortable:hover {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-global-text-primary) 14%,\n    var(--aura-color-glass-surface)\n  );\n  color: var(--aura-color-global-text-primary);\n}\n\n.compact .headerCell {\n  padding: var(--glass-space-datagrid-compact-header, 8px 28px 8px 12px);\n  font-size: 0.8125rem;\n}\n\n.compact .cell {\n  padding: var(--glass-space-datagrid-compact-cell, 8px 12px);\n  font-size: 0.875rem;\n}\n\n.compact .dragHandleCell {\n  width: 32px;\n  padding-inline: var(--glass-space-datagrid-compact-handle-cell, 6px);\n}\n\n.headerCell[aria-sort=\"ascending\"],\n.headerCell[aria-sort=\"descending\"] {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-highlight) 24%,\n    var(--aura-color-glass-surface)\n  );\n  color: var(--aura-color-global-text-primary);\n}\n\n.headerCell[aria-sort=\"ascending\"] .sortIndicator,\n.headerCell[aria-sort=\"descending\"] .sortIndicator {\n  color: var(--aura-color-global-text-primary);\n}\n\n.row:nth-child(even) {\n  background: var(\n    --glass-datagrid-row-even-bg,\n    color-mix(in srgb, var(--aura-color-global-text-primary) 7%, transparent)\n  );\n}\n\n.row:hover {\n  background: var(\n    --glass-datagrid-row-hover-bg,\n    color-mix(\n      in srgb,\n      var(--aura-color-global-text-primary) 12%,\n      var(--aura-color-glass-surface)\n    )\n  );\n}\n\n.row[aria-selected=\"true\"],\n.row[data-selected=\"true\"] {\n  background: var(\n    --glass-datagrid-row-selected-bg,\n    color-mix(\n      in srgb,\n      var(--aura-color-highlight) 28%,\n      var(--aura-color-glass-surface)\n    )\n  );\n}\n\n.row[aria-selected=\"true\"] .cell,\n.row[data-selected=\"true\"] .cell {\n  color: var(--aura-color-global-text-primary);\n  border-bottom-color: color-mix(\n    in srgb,\n    var(--aura-color-highlight) 34%,\n    transparent\n  );\n}\n\n.headerCell:focus-visible {\n  outline: none;\n  box-shadow: var(\n    --glass-elev-datagrid-header-focus,\n    0 0 0 2px hsl(var(--glass-color-primary) / 0.5)\n  );\n}\n\n.sortIndicator {\n  position: absolute;\n  right: var(--glass-space-datagrid-sort-right, 8px);\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 0.75rem;\n  color: var(--aura-color-global-text-secondary);\n  opacity: 0;\n  transform-origin: center center;\n  transition: opacity var(--aura-motion-duration-fast)\n    var(--aura-motion-easing-standard);\n}\n\n.cell {\n  padding: var(--glass-space-datagrid-cell, 12px 16px);\n  border-bottom: var(--glass-space-datagrid-cell-border, 1px) solid\n    color-mix(in srgb, var(--aura-color-global-text-secondary) 8%, transparent);\n  font-size: 0.95rem;\n  color: var(--aura-color-global-text-primary);\n  background: transparent;\n  overflow-wrap: anywhere;\n  word-break: break-word;\n}\n\n.row {\n  background: transparent;\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n}\n\n.rowDragging {\n  background: color-mix(in srgb, var(--aura-color-highlight) 40%, transparent);\n  box-shadow: var(\n    --glass-elev-datagrid-row-drag,\n    0 12px 32px rgba(15, 23, 42, 0.24)\n  );\n  position: relative;\n  z-index: 5;\n}\n\n.dragHandleCell {\n  text-align: center;\n  width: 40px;\n  padding: 0 var(--glass-space-datagrid-handle-cell, 8px);\n}\n\n.dragHandle {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  cursor: grab;\n  padding: 0 var(--glass-space-datagrid-handle, 8px);\n  line-height: 1;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 70%,\n    transparent\n  );\n  border-radius: var(--aura-radius-sm);\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.dragHandle:focus-visible {\n  outline: none;\n  box-shadow: var(\n    --glass-elev-datagrid-handle-focus,\n    0 0 0 2px hsl(var(--glass-color-primary) / 0.45)\n  );\n}\n\n.dragHandle:active {\n  cursor: grabbing;\n}\n\n.dragHandleActive {\n  background: color-mix(in srgb, var(--aura-color-highlight) 70%, transparent);\n  color: var(--aura-color-global-text-primary);\n}\n\n.body {\n  position: relative;\n}\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nimport React from \"react\";\nimport { ColumnDef, GlassDataTable, GlassDataTableRow } from \"./GlassDataTable\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GlassDataGridProColumn<\n  T extends GlassDataTableRow = GlassDataTableRow,\n> extends ColumnDef<T> {\n  key?: string;\n}\n\nexport interface GlassDataGridProProps<\n  T extends GlassDataTableRow = GlassDataTableRow,\n> extends React.HTMLAttributes<HTMLDivElement> {\n  columns?: GlassDataGridProColumn<T>[];\n  rows?: T[];\n  grouping?: string[];\n  density?: \"compact\" | \"normal\" | \"spacious\";\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n}\n\n// Lightweight wrapper around GlassDataTable; placeholder for advanced features\nexport const GlassDataGridPro = React.forwardRef<\n  HTMLDivElement,\n  GlassDataGridProProps\n>(\n  (\n    {\n      columns = [],\n      rows = [],\n      className,\n      density = \"normal\",\n      compact = false,\n      contained = false,\n      maxHeight,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n    const normalizedColumns = React.useMemo<ColumnDef<GlassDataTableRow>[]>(\n      () =>\n        columns.map(({ key, ...column }) => ({\n          ...column,\n          id: column.id ?? key,\n          accessorKey: column.accessorKey ?? key,\n        })),\n      [columns]\n    );\n\n    return (\n      <div\n        ref={ref}\n        className={cn(className)}\n        role=\"region\"\n        aria-label={ariaLabel || \"Data Grid Pro\"}\n        data-testid={dataTestId}\n        {...props}\n      >\n        <GlassDataTable\n          columns={normalizedColumns}\n          data={rows}\n          compact={compact || density === \"compact\"}\n          contained={contained}\n          maxHeight={maxHeight}\n        />\n      </div>\n    );\n  }\n);\n\nGlassDataGridPro.displayName = \"GlassDataGridPro\";\n\nexport default GlassDataGridPro;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useMemo,\n  useState,\n  useCallback,\n  useEffect,\n  useRef,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { IconButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\nimport { GlassSelect } from \"../input/GlassSelect\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { ContrastGuard } from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nexport type GlassDataTableRow = Record<string, unknown>;\nexport type GlassDataTableCellValue = unknown;\n\nexport interface ColumnDef<T extends GlassDataTableRow = GlassDataTableRow> {\n  id?: string;\n  header: string | ((props: { column: ColumnDef<T> }) => React.ReactNode);\n  accessorKey?: string;\n  accessorFn?: (row: T) => GlassDataTableCellValue;\n  cell?: (props: { row: T; value: GlassDataTableCellValue }) => React.ReactNode;\n  sortable?: boolean;\n  filterable?: boolean;\n  width?: string | number;\n  align?: \"left\" | \"center\" | \"right\";\n  enableSorting?: boolean;\n  enableHiding?: boolean;\n}\n\nexport interface SortState {\n  id: string;\n  desc: boolean;\n}\n\nexport type FilterState = Record<string, GlassDataTableCellValue>;\n\nexport interface GlassDataTableProps<\n  T extends GlassDataTableRow = GlassDataTableRow,\n> extends ConsciousnessFeatures {\n  /**\n   * Table data\n   */\n  data?: T[];\n  /**\n   * Column definitions\n   */\n  columns: ColumnDef<T>[];\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Table variant\n   */\n  variant?: \"default\" | \"striped\" | \"bordered\" | \"minimal\";\n  /**\n   * Table size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Enable sorting\n   */\n  sortable?: boolean;\n  /**\n   * Enable filtering\n   */\n  filterable?: boolean;\n  /**\n   * Enable search\n   */\n  searchable?: boolean;\n  /**\n   * Search placeholder\n   */\n  searchPlaceholder?: string;\n  /**\n   * Enable pagination\n   */\n  pagination?: boolean;\n  /**\n   * Page size options\n   */\n  pageSizeOptions?: number[];\n  /**\n   * Initial page size\n   */\n  initialPageSize?: number;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Contain the table in a bounded vertical viewport. */\n  contained?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Hide the search/actions header in compact mode if desired. */\n  showHeader?: boolean;\n  /** Hide pagination controls in compact mode if desired. */\n  showFooter?: boolean;\n  /**\n   * Enable row selection\n   */\n  selectable?: boolean;\n  /**\n   * Selection mode\n   */\n  selectionMode?: \"single\" | \"multiple\";\n  /**\n   * Selected rows\n   */\n  selectedRows?: string[];\n  /**\n   * Selection change handler\n   */\n  onSelectionChange?: (selectedRows: string[]) => void;\n  /**\n   * Row click handler\n   */\n  onRowClick?: (row: T) => void;\n  /**\n   * Get row ID\n   */\n  getRowId?: (row: T, index?: number) => string;\n  /**\n   * Custom row props\n   */\n  getRowProps?: (row: T) => React.HTMLAttributes<HTMLTableRowElement>;\n  /**\n   * Sticky header\n   */\n  stickyHeader?: boolean;\n  /**\n   * Table actions\n   */\n  actions?: React.ReactNode;\n  className?: string;\n  \"aria-label\"?: string;\n  \"data-testid\"?: string;\n  /**\n   * Optional per-column cell renderers by column id or accessorKey\n   */\n  cellRenderers?: Record<\n    string,\n    (value: GlassDataTableCellValue, row: T) => React.ReactNode\n  >;\n  /**\n   * Optional rich empty state\n   */\n  emptyState?: {\n    icon?: React.ReactNode;\n    message?: string;\n    description?: string;\n  };\n}\n\nconst getColumnValue = <T extends GlassDataTableRow>(\n  row: T,\n  column: ColumnDef<T>\n): GlassDataTableCellValue => {\n  if (column.accessorFn) {\n    return column.accessorFn(row);\n  }\n\n  if (column.accessorKey) {\n    return row[column.accessorKey];\n  }\n\n  return \"\";\n};\n\n/**\n * GlassDataTable component\n * A comprehensive data table with glassmorphism styling\n */\nexport const GlassDataTable = <T extends GlassDataTableRow = GlassDataTableRow>(\n  props: GlassDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => {\n  return <GlassDataTableInner {...props} />;\n};\n\nconst GlassDataTableInnerBase = <\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  {\n    data: incomingData = [],\n    columns: incomingColumns = [],\n    loading = false,\n    emptyMessage = \"No data available\",\n    variant = \"default\",\n    size = \"md\",\n    sortable = true,\n    filterable = false,\n    searchable = true,\n    searchPlaceholder = \"Search...\",\n    pagination = true,\n    pageSizeOptions: incomingPageSizeOptions = [10, 25, 50, 100],\n    initialPageSize = 10,\n    compact = false,\n    contained = false,\n    maxHeight,\n    maxWidth,\n    showHeader = true,\n    showFooter = true,\n    selectable = false,\n    selectionMode = \"multiple\",\n    selectedRows: incomingSelectedRows = [],\n    onSelectionChange,\n    onRowClick,\n    getRowId = (_row, index = 0) => index.toString(),\n    getRowProps,\n    stickyHeader = false,\n    actions,\n    cellRenderers,\n    emptyState,\n    className,\n    // Consciousness features\n    predictive = false,\n    preloadContent = false,\n    eyeTracking = false,\n    gazeResponsive = false,\n    adaptive = false,\n    biometricResponsive = false,\n    spatialAudio = false,\n    audioFeedback = false,\n    trackAchievements = false,\n    achievementId,\n    usageContext = \"main\",\n    \"aria-label\": ariaLabel,\n    ...restProps\n  }: GlassDataTableProps<T>,\n  ref: React.ForwardedRef<HTMLDivElement>\n) => {\n  const data = Array.isArray(incomingData) ? incomingData : [];\n  const columns = Array.isArray(incomingColumns) ? incomingColumns : [];\n  const effectiveInitialPageSize = compact\n    ? Math.min(initialPageSize, 4)\n    : initialPageSize;\n  const pageSizeOptions =\n    Array.isArray(incomingPageSizeOptions) && incomingPageSizeOptions.length\n      ? incomingPageSizeOptions\n      : [effectiveInitialPageSize];\n  const selectedRows = Array.isArray(incomingSelectedRows)\n    ? incomingSelectedRows\n    : [];\n  const tableRef = useRef<HTMLDivElement | null>(null);\n  const prefersReducedMotion = useReducedMotion();\n  const [columnUsage, setColumnUsage] = useState<Record<string, number>>({});\n  const [predictedSortColumn, setPredictedSortColumn] = useState<string | null>(\n    null\n  );\n  const [adaptivePageSize, setAdaptivePageSize] = useState(\n    effectiveInitialPageSize\n  );\n  const [interactionHeatmap, setInteractionHeatmap] = useState<\n    Record<string, number>\n  >({});\n\n  // Consciousness feature hooks - only initialize if features are enabled\n  const predictiveEngine = predictive ? usePredictiveEngine() : null;\n  const eyeTracker = eyeTracking ? useEyeTracking() : null;\n  const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n  const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n  const achievementTracker = trackAchievements ? useAchievements() : null;\n  const interactionRecorder =\n    predictive || trackAchievements\n      ? useInteractionRecorder(`glass-datatable-${usageContext}`)\n      : null;\n  const [sortState, setSortState] = useState<SortState | null>(null);\n  const [filterState, setFilterState] = useState<FilterState>({});\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  const [currentPage, setCurrentPage] = useState(1);\n  const [pageSize, setPageSize] = useState(effectiveInitialPageSize);\n  const activePageSize = Math.max(\n    1,\n    Number.isFinite(biometricResponsive ? adaptivePageSize : pageSize)\n      ? biometricResponsive\n        ? adaptivePageSize\n        : pageSize\n      : 10\n  );\n\n  const setContainerRef = useCallback(\n    (node: HTMLDivElement | null) => {\n      tableRef.current = node;\n      if (typeof ref === \"function\") {\n        ref(node);\n      } else if (ref) {\n        (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n      }\n    },\n    [ref]\n  );\n\n  // Ensure size is always valid\n  const validSize = compact\n    ? \"sm\"\n    : size && [\"sm\", \"md\", \"lg\"].includes(size)\n      ? size\n      : \"md\";\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const resolvedMaxWidth =\n    typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n  // Biometric adaptation for table density and pagination\n  useEffect(() => {\n    if (!biometricResponsive || !biometricAdapter) return;\n\n    const adaptTable = () => {\n      const stressLevel = biometricAdapter.currentStressLevel;\n\n      // Adapt page size based on stress level\n      if (stressLevel > 0.7) {\n        setAdaptivePageSize(Math.min(initialPageSize, 10)); // Smaller pages when stressed\n      } else if (stressLevel < 0.3) {\n        setAdaptivePageSize(Math.max(initialPageSize, 25)); // Larger pages when relaxed\n      } else {\n        setAdaptivePageSize(initialPageSize); // Use original page size\n      }\n    };\n\n    // Initial adaptation\n    adaptTable();\n\n    // Listen for biometric changes\n    const interval = setInterval(adaptTable, ANIMATION.DURATION.slower * 7);\n    return () => clearInterval(interval);\n  }, [biometricResponsive, biometricAdapter, initialPageSize]);\n\n  // Predictive sorting based on column usage patterns\n  useEffect(() => {\n    if (!predictive || !predictiveEngine) return;\n\n    const updatePredictions = () => {\n      const predictions = predictiveEngine.predictions;\n      const sortPrediction = predictions.find(\n        (p) => p.type === \"suggest\" && p.metadata?.tableContext === usageContext\n      );\n\n      if (sortPrediction && sortPrediction.confidence > 0.8) {\n        const columnId = sortPrediction.metadata.columnId;\n        setPredictedSortColumn(typeof columnId === \"string\" ? columnId : null);\n      } else {\n        setPredictedSortColumn(null);\n      }\n    };\n\n    const interval = setInterval(\n      updatePredictions,\n      ANIMATION.DURATION.slower * 4\n    );\n    updatePredictions(); // Initial update\n\n    return () => clearInterval(interval);\n  }, [predictive, predictiveEngine, usageContext]);\n\n  // Eye tracking for data attention analysis\n  useEffect(() => {\n    if (!gazeResponsive || !eyeTracker || !tableRef.current) return;\n\n    const handleCellGaze = (event: Event) => {\n      const target = event.target instanceof Element ? event.target : null;\n      const cellElement = target?.closest(\"td\");\n      if (!cellElement) return;\n      const rowElement = cellElement.parentElement;\n      const rowGroupElement = rowElement?.parentElement;\n      if (!rowElement || !rowGroupElement) return;\n\n      const rowIndex = Array.from(rowGroupElement.children).indexOf(rowElement);\n      const cellIndex = Array.from(rowElement.children).indexOf(cellElement);\n      const heatmapKey = `${rowIndex}-${cellIndex}`;\n\n      setInteractionHeatmap((prev) => ({\n        ...prev,\n        [heatmapKey]: (prev[heatmapKey] || 0) + 1,\n      }));\n\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"cell_attention\", {\n          x: cellElement.offsetLeft,\n          y: cellElement.offsetTop,\n          z: 0,\n        });\n      }\n    };\n\n    // Note: onGazeEnter/offGazeEnter not available on current eye tracker interface\n    // eyeTracker.onGazeEnter?.(tableRef.current, handleCellGaze);\n\n    return () => {\n      // if (tableRef.current) {\n      //   eyeTracker.offGazeEnter?.(tableRef.current, handleCellGaze);\n      // }\n    };\n  }, [gazeResponsive, eyeTracker, spatialAudioEngine, audioFeedback]);\n\n  const sizeClasses = {\n    sm: \"glass-text-xs\",\n    md: \"glass-text-sm\",\n    lg: \"glass-text-base\",\n  };\n\n  const cellPaddingClasses = {\n    sm: \"glass-px-3 glass-py-2\",\n    md: \"glass-px-4 glass-py-3\",\n    lg: \"glass-px-6 glass-py-4\",\n  };\n\n  // Filter and search data\n  const filteredData = useMemo(() => {\n    let result = [...(data || [])];\n\n    // Apply search\n    if (searchQuery) {\n      result = result.filter((row) =>\n        columns.some((column) => {\n          const value = getColumnValue(row, column);\n          return String(value)\n            .toLowerCase()\n            .includes(searchQuery.toLowerCase());\n        })\n      );\n    }\n\n    // Apply filters\n    Object.entries(filterState).forEach(([columnId, filterValue]) => {\n      if (filterValue) {\n        const column = columns.find((col) => col.id === columnId);\n        if (column) {\n          result = result.filter((row) => {\n            const value = getColumnValue(row, column);\n            return String(value)\n              .toLowerCase()\n              .includes(String(filterValue).toLowerCase());\n          });\n        }\n      }\n    });\n\n    return result;\n  }, [data, columns, searchQuery, filterState]);\n\n  // Sort data\n  const sortedData = useMemo(() => {\n    if (!sortState || !filteredData) return filteredData || [];\n\n    const column = columns.find(\n      (col) => (col.id || `col-${columns.indexOf(col)}`) === sortState.id\n    );\n    if (!column) return filteredData;\n\n    return [...filteredData].sort((a, b) => {\n      const aValue = getColumnValue(a, column);\n      const bValue = getColumnValue(b, column);\n      const aComparable =\n        typeof aValue === \"number\" || typeof aValue === \"string\"\n          ? aValue\n          : String(aValue);\n      const bComparable =\n        typeof bValue === \"number\" || typeof bValue === \"string\"\n          ? bValue\n          : String(bValue);\n\n      if (aComparable < bComparable) return sortState.desc ? 1 : -1;\n      if (aComparable > bComparable) return sortState.desc ? -1 : 1;\n      return 0;\n    });\n  }, [filteredData, sortState, columns]);\n\n  // Paginate data\n  const paginatedData = useMemo(() => {\n    if (!pagination || !sortedData) return sortedData || [];\n\n    const startIndex = (currentPage - 1) * activePageSize;\n    return sortedData.slice(startIndex, startIndex + activePageSize);\n  }, [sortedData, currentPage, activePageSize, pagination]);\n\n  const totalPages = Math.max(\n    1,\n    Math.ceil(((sortedData || [])?.length || 0) / activePageSize)\n  );\n\n  useEffect(() => {\n    if (currentPage > totalPages) {\n      setCurrentPage(totalPages);\n    }\n  }, [currentPage, totalPages]);\n\n  // Enhanced sorting with consciousness tracking\n  const handleSort = useCallback(\n    (columnId: string) => {\n      const column = columns.find(\n        (col) => (col.id || `col-${columns.indexOf(col)}`) === columnId\n      );\n      if (!column?.sortable && !sortable) return;\n\n      // Track column usage for predictive sorting\n      if (predictive) {\n        setColumnUsage((prev) => ({\n          ...prev,\n          [columnId]: (prev[columnId] || 0) + 1,\n        }));\n      }\n\n      // Record interaction for learning\n      if (interactionRecorder) {\n        interactionRecorder.recordClick({\n          target: { id: `column-sort-${columnId}` },\n          currentTarget: document.createElement(\"div\"),\n          clientX: 0,\n          clientY: 0,\n          pageX: 0,\n          pageY: 0,\n          screenX: 0,\n          screenY: 0,\n          movementX: 0,\n          movementY: 0,\n          button: 0,\n          buttons: 0,\n          altKey: false,\n          ctrlKey: false,\n          metaKey: false,\n          shiftKey: false,\n          getModifierState: () => false,\n          preventDefault: () => {},\n          stopPropagation: () => {},\n          isDefaultPrevented: () => false,\n          isPropagationStopped: () => false,\n          nativeEvent: new MouseEvent(\"click\"),\n          persist: () => {},\n        } as unknown as React.MouseEvent<Element>);\n      }\n\n      // Track achievements\n      if (achievementTracker && trackAchievements) {\n        achievementTracker.recordAction(\"table_sort\", {\n          columnId,\n          usage: (columnUsage[columnId] || 0) + 1,\n          context: usageContext,\n        });\n      }\n\n      // Play spatial audio feedback\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"sort_column\");\n      }\n\n      setSortState((prev) => {\n        if (prev?.id === columnId) {\n          return prev.desc ? null : { id: columnId, desc: true };\n        }\n        return { id: columnId, desc: false };\n      });\n    },\n    [\n      columns,\n      sortable,\n      predictive,\n      interactionRecorder,\n      achievementTracker,\n      trackAchievements,\n      spatialAudioEngine,\n      audioFeedback,\n      columnUsage,\n      usageContext,\n    ]\n  );\n\n  // Handle selection\n  const handleRowSelection = (rowId: string, selected: boolean) => {\n    if (!onSelectionChange) return;\n\n    if (selectionMode === \"single\") {\n      onSelectionChange(selected ? [rowId] : []);\n    } else {\n      const newSelection = selected\n        ? [...selectedRows, rowId]\n        : selectedRows.filter((id) => id !== rowId);\n      onSelectionChange(newSelection);\n    }\n  };\n\n  const handleSelectAll = (selected: boolean) => {\n    if (!onSelectionChange) return;\n\n    if (selected) {\n      const allIds = (paginatedData || []).map((row, index) =>\n        getRowId(row, index)\n      );\n      onSelectionChange(allIds);\n    } else {\n      onSelectionChange([]);\n    }\n  };\n\n  const isAllSelected =\n    (paginatedData || []).length > 0 &&\n    (paginatedData || []).every((row, index) =>\n      selectedRows.includes(getRowId(row, index))\n    );\n\n  return (\n    <div\n      data-glass-component\n      ref={setContainerRef}\n      className={cn(\"glass-w-full\", className)}\n      style={{\n        color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.92))\",\n      }}\n      aria-label={ariaLabel}\n      {...restProps}\n    >\n      {/* Table header with search and actions */}\n      {showHeader && (searchable || actions || filterable) && (\n        <div\n          className={cn(\n            \"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3\",\n            compact ? \"glass-mb-2\" : \"glass-mb-4\"\n          )}\n        >\n          <div className=\"glass-flex glass-min-w-0 glass-flex-1 glass-items-center glass-gap-3\">\n            {searchable && (\n              <GlassInput\n                placeholder={searchPlaceholder}\n                value={searchQuery}\n                onChange={(e) => setSearchQuery(e.target.value)}\n                leftIcon={\n                  <svg\n                    className=\"glass-w-4 glass-h-4\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    viewBox=\"0 0 24 24\"\n                  >\n                    <path\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                      strokeWidth={2}\n                      d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                    />\n                  </svg>\n                }\n                clearable\n                className={cn(\n                  \"glass-w-full\",\n                  compact ? \"sm:glass-w-48\" : \"sm:glass-w-64\"\n                )}\n              />\n            )}\n          </div>\n\n          {actions && (\n            <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-2\">\n              {actions}\n            </div>\n          )}\n        </div>\n      )}\n\n      {/* Table container */}\n      <OptimizedGlass\n        elevation={\"level2\"}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"glass-overflow-hidden glass-contrast-guard\",\n          !prefersReducedMotion &&\n            `transition-all duration-[${ANIMATION.DURATION.slow}ms]`,\n          variant === \"bordered\" && \"glass-border glass-border-glass-border/20\"\n        )}\n        style={{\n          ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n          borderColor: \"rgba(148, 163, 184, 0.24)\",\n          color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.92))\",\n          maxHeight:\n            resolvedMaxHeight ?? (compact || contained ? \"240px\" : undefined),\n          maxWidth:\n            resolvedMaxWidth ?? (compact || contained ? \"320px\" : undefined),\n          overflow:\n            compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n        }}\n      >\n        <div className=\"glass-w-full glass-overflow-x-auto\">\n          <table\n            className=\"glass-w-full glass-table-fixed\"\n            style={{\n              color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.92))\",\n              minWidth: compact\n                ? \"100%\"\n                : columns.length > 3\n                  ? `${Math.max(640, columns.length * 152)}px`\n                  : \"100%\",\n            }}\n          >\n            {/* Table header */}\n            <thead\n              className={cn(\n                \"glass-relative bg-muted/20 glass-border-b glass-border-glass-border/20\",\n                stickyHeader && \"sticky top-0 z-10\"\n              )}\n            >\n              <tr>\n                {selectable && (\n                  <th\n                    className={cn(\"glass-w-12\", cellPaddingClasses[validSize])}\n                  >\n                    <GlassInput\n                      type=\"checkbox\"\n                      checked={isAllSelected}\n                      onChange={(e) => handleSelectAll(e.target.checked)}\n                      className=\"glass-radius-md glass-border-glass-border glass-focus-ring-primary\"\n                    />\n                  </th>\n                )}\n\n                {(columns || []).map((column, index) => {\n                  const columnId = column.id || `col-${index}`;\n                  const canSort = column.sortable ?? sortable;\n                  const headerContent =\n                    typeof column.header === \"function\"\n                      ? column.header({ column })\n                      : column.header;\n\n                  return (\n                    <th\n                      key={columnId}\n                      scope=\"col\"\n                      aria-sort={\n                        sortState?.id === columnId\n                          ? sortState.desc\n                            ? \"descending\"\n                            : \"ascending\"\n                          : \"none\"\n                      }\n                      className={cn(\n                        \"glass-font-semibold glass-text-primary glass-border-b glass-border-glass-border/10\",\n                        !prefersReducedMotion &&\n                          `transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                        cellPaddingClasses[validSize],\n                        sizeClasses[validSize],\n                        {\n                          \"glass-text-center\": column.align === \"center\",\n                          \"glass-text-right\": column.align === \"right\",\n                          \"glass-cursor-pointer hover:bg-muted/10 hover:glass-text-primary\":\n                            canSort,\n                        }\n                      )}\n                      style={{\n                        width: column.width,\n                        color:\n                          \"var(--glass-text-primary, rgba(248, 250, 252, 0.92))\",\n                      }}\n                      onClick={() => canSort && handleSort(columnId)}\n                    >\n                      <div className=\"glass-flex glass-items-center glass-gap-2 glass-min-w-0\">\n                        <ContrastGuard>\n                          <span className=\"glass-min-w-0 glass-break-words\">\n                            {headerContent}\n                          </span>\n                        </ContrastGuard>\n\n                        {canSort && (\n                          <div className=\"glass-flex glass-flex-col\">\n                            <svg\n                              className={cn(\n                                \"glass-w-3 glass-h-3 -glass-mb-1\",\n                                !prefersReducedMotion && \"transition-colors\",\n                                sortState?.id === columnId && !sortState.desc\n                                  ? \"glass-text-primary\"\n                                  : \"glass-text-secondary hover:glass-text-primary\"\n                              )}\n                              fill=\"currentColor\"\n                              viewBox=\"0 0 20 20\"\n                            >\n                              <path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\" />\n                            </svg>\n                            <svg\n                              className={cn(\n                                \"glass-w-3 glass-h-3 rotate-180\",\n                                !prefersReducedMotion && \"transition-colors\",\n                                sortState?.id === columnId && sortState.desc\n                                  ? \"glass-text-primary\"\n                                  : \"glass-text-secondary hover:glass-text-primary\"\n                              )}\n                              fill=\"currentColor\"\n                              viewBox=\"0 0 20 20\"\n                            >\n                              <path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\" />\n                            </svg>\n                          </div>\n                        )}\n                      </div>\n                    </th>\n                  );\n                })}\n              </tr>\n            </thead>\n\n            {/* Table body */}\n            <tbody>\n              {loading ? (\n                <tr>\n                  <td\n                    colSpan={columns.length + (selectable ? 1 : 0)}\n                    className={cn(\n                      \"glass-text-center\",\n                      cellPaddingClasses[validSize]\n                    )}\n                  >\n                    <div\n                      className=\"glass-flex glass-items-center glass-justify-center glass-gap-2 glass-py-8\"\n                      role=\"status\"\n                      aria-live=\"polite\"\n                    >\n                      <div\n                        className={cn(\n                          \"glass-w-4 glass-h-4 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full\",\n                          !prefersReducedMotion && \"glass-animate-spin\"\n                        )}\n                      />\n                      <ContrastGuard>\n                        <span className=\"glass-text-secondary\">Loading...</span>\n                      </ContrastGuard>\n                    </div>\n                  </td>\n                </tr>\n              ) : paginatedData.length === 0 ? (\n                <tr>\n                  <td\n                    colSpan={columns.length + (selectable ? 1 : 0)}\n                    className={cn(\n                      \"glass-text-center glass-text-secondary py-8 glass-break-words\",\n                      cellPaddingClasses[validSize]\n                    )}\n                  >\n                    {emptyState ? (\n                      <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-2\">\n                        {emptyState.icon}\n                        <ContrastGuard>\n                          <div className=\"glass-font-medium\">\n                            {emptyState.message || emptyMessage}\n                          </div>\n                        </ContrastGuard>\n                        {emptyState.description && (\n                          <ContrastGuard>\n                            <div className=\"glass-text-sm glass-text-secondary\">\n                              {emptyState.description}\n                            </div>\n                          </ContrastGuard>\n                        )}\n                      </div>\n                    ) : (\n                      <ContrastGuard>{emptyMessage}</ContrastGuard>\n                    )}\n                  </td>\n                </tr>\n              ) : (\n                (paginatedData || []).map((row, index) => {\n                  const rowId = getRowId(row, index);\n                  const isSelected = selectedRows.includes(rowId);\n                  const rowProps = getRowProps?.(row) || {};\n\n                  return (\n                    <tr\n                      key={rowId}\n                      className={cn(\n                        \"group glass-radius-md\",\n                        !prefersReducedMotion &&\n                          `transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                        {\n                          \"bg-muted/5\":\n                            variant === \"striped\" && index % 2 === 1,\n                          \"bg-primary/10 shadow-md shadow-primary/20 ring-1 ring-primary/20\":\n                            isSelected,\n                          \"hover:bg-muted/10 glass-cursor-pointer hover:shadow-lg hover:shadow-primary/10 glass-hover--translate-y-0-5 hover:ring-1 hover:ring-white/10\":\n                            onRowClick && !prefersReducedMotion,\n                          \"hover:bg-muted/10 glass-cursor-pointer hover:ring-1 hover:ring-white/10\":\n                            onRowClick && prefersReducedMotion,\n                          // Consciousness feature styles\n                          \"ring-1 ring-blue-400/20 bg-blue-400/5\":\n                            gazeResponsive &&\n                            interactionHeatmap[`${index}-0`] > 5,\n                          \"animate-pulse\":\n                            predictedSortColumn &&\n                            columns.some(\n                              (col) =>\n                                (col.id || `col-${columns.indexOf(col)}`) ===\n                                predictedSortColumn\n                            ),\n                          \"transform-gpu\":\n                            gazeResponsive || biometricResponsive,\n                        }\n                      )}\n                      onClick={(e) => onRowClick?.(row)}\n                      {...rowProps}\n                    >\n                      {selectable && (\n                        <td className={cellPaddingClasses[validSize]}>\n                          <GlassInput\n                            type=\"checkbox\"\n                            checked={isSelected}\n                            onChange={(e) =>\n                              handleRowSelection(rowId, e.target.checked)\n                            }\n                            className=\"glass-radius-md glass-border-glass-border glass-focus-ring-primary\"\n                            onClick={(e) => e.stopPropagation()}\n                          />\n                        </td>\n                      )}\n\n                      {(columns || []).map((column, colIndex) => {\n                        const columnId = column.id || `col-${colIndex}`;\n                        const value = getColumnValue(row, column);\n\n                        return (\n                          <td\n                            key={columnId}\n                            className={cn(\n                              \"glass-border-b glass-border-glass-border/5 glass-text-primary/80 glass-align-top glass-break-words group-hover:glass-text-primary\",\n                              !prefersReducedMotion && \"transition-colors\",\n                              cellPaddingClasses[validSize],\n                              sizeClasses[validSize],\n                              {\n                                \"glass-text-center\": column.align === \"center\",\n                                \"glass-text-right\": column.align === \"right\",\n                              }\n                            )}\n                            style={{\n                              color:\n                                \"var(--glass-text-primary, rgba(248, 250, 252, 0.86))\",\n                            }}\n                          >\n                            <div className=\"glass-min-w-0 glass-max-w-full glass-break-words\">\n                              <ContrastGuard>\n                                {column.cell\n                                  ? column.cell({ row, value })\n                                  : (() => {\n                                      const rendererKey =\n                                        column.id ||\n                                        (column.accessorKey as string) ||\n                                        \"\";\n                                      const renderer =\n                                        cellRenderers?.[rendererKey];\n                                      return renderer\n                                        ? renderer(value, row)\n                                        : String(value ?? \"\");\n                                    })()}\n                              </ContrastGuard>\n                            </div>\n                          </td>\n                        );\n                      })}\n                    </tr>\n                  );\n                })\n              )}\n            </tbody>\n          </table>\n        </div>\n\n        {/* Pagination */}\n        {showFooter &&\n          pagination &&\n          !loading &&\n          (paginatedData || []).length > 0 && (\n            <div\n              className={cn(\n                \"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3 glass-border-t glass-border-glass-border/10 glass-surface-subtle\",\n                compact ? \"glass-px-2 glass-py-2\" : \"glass-px-4 glass-py-3\"\n              )}\n            >\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <span\n                  className=\"glass-text-sm glass-text-secondary\"\n                  role=\"status\"\n                >\n                  Showing {(currentPage - 1) * activePageSize + 1} to{\" \"}\n                  {Math.min(\n                    currentPage * activePageSize,\n                    (sortedData || []).length\n                  )}{\" \"}\n                  of {(sortedData || []).length} results\n                </span>\n              </div>\n\n              <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-4\">\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-text-secondary\">\n                      Rows per page:\n                    </span>\n                  </ContrastGuard>\n                  <GlassSelect\n                    value={pageSize}\n                    onChange={(e) => {\n                      setPageSize(Number(e.target.value));\n                      setCurrentPage(1);\n                    }}\n                    options={(pageSizeOptions || []).map((size) => ({\n                      value: size,\n                      label: size.toString(),\n                    }))}\n                    size=\"sm\"\n                  />\n                </div>\n\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <IconButton\n                    icon=\"\u2190\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    disabled={currentPage === 1}\n                    onClick={(e) => setCurrentPage(1)}\n                    aria-label=\"First page\"\n                  />\n                  <IconButton\n                    icon=\"\u2039\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    disabled={currentPage === 1}\n                    onClick={(e) => setCurrentPage((p) => p - 1)}\n                    aria-label=\"Previous page\"\n                  />\n\n                  <ContrastGuard>\n                    <span className=\"glass-px-3 glass-py-1 glass-text-sm\">\n                      {currentPage} of {totalPages}\n                    </span>\n                  </ContrastGuard>\n\n                  <IconButton\n                    icon=\"\u203A\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    disabled={currentPage === totalPages}\n                    onClick={(e) => setCurrentPage((p) => p + 1)}\n                    aria-label=\"Next page\"\n                  />\n                  <IconButton\n                    icon=\"\u2192\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    disabled={currentPage === totalPages}\n                    onClick={(e) => setCurrentPage(totalPages)}\n                    aria-label=\"Last page\"\n                  />\n                </div>\n              </div>\n            </div>\n          )}\n      </OptimizedGlass>\n    </div>\n  );\n};\n\nconst GlassDataTableInner = forwardRef(GlassDataTableInnerBase) as (<\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  props: GlassDataTableProps<T> & React.RefAttributes<HTMLDivElement>\n) => React.ReactElement | null) & { displayName?: string };\n\nGlassDataTableInner.displayName = \"GlassDataTable\";\n\n/**\n * Enhanced GlassDataTable with consciousness features enabled by default\n * Use this for tables that should be intelligent and adaptive\n */\nexport const ConsciousGlassDataTable = <\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  props: GlassDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => (\n  <GlassDataTable\n    predictive={true}\n    adaptive={true}\n    biometricResponsive={true}\n    trackAchievements={true}\n    achievementId=\"conscious_table_usage\"\n    usageContext=\"list\"\n    {...props}\n  />\n);\n\n/**\n * Predictive data table that learns user sorting and filtering patterns\n */\nexport const PredictiveDataTable = <\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  props: GlassDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => (\n  <GlassDataTable\n    predictive={true}\n    preloadContent={true}\n    trackAchievements={true}\n    achievementId=\"predictive_table_usage\"\n    usageContext=\"list\"\n    {...props}\n  />\n);\n\n/**\n * Gaze-responsive data table with eye tracking for enhanced data exploration\n */\nexport const GazeResponsiveDataTable = <\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  props: GlassDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => (\n  <GlassDataTable\n    eyeTracking={true}\n    gazeResponsive={true}\n    spatialAudio={true}\n    audioFeedback={true}\n    trackAchievements={true}\n    achievementId=\"gaze_table_interaction\"\n    usageContext=\"list\"\n    {...props}\n  />\n);\n\n/**\n * Accessibility-focused data table with biometric adaptation and spatial audio\n */\nexport const AccessibleDataTable = <\n  T extends GlassDataTableRow = GlassDataTableRow,\n>(\n  props: GlassDataTableProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => (\n  <GlassDataTable\n    adaptive={true}\n    biometricResponsive={true}\n    spatialAudio={true}\n    audioFeedback={true}\n    trackAchievements={true}\n    achievementId=\"accessible_table_usage\"\n    usageContext=\"list\"\n    {...props}\n  />\n);\n\n/**\n * Pre-configured consciousness data table presets\n */\nexport const DataTableConsciousnessPresets = {\n  /**\n   * Minimal consciousness features for performance-sensitive contexts\n   */\n  minimal: {\n    predictive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Balanced consciousness features for general use\n   */\n  balanced: {\n    predictive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Full consciousness features for immersive data exploration\n   */\n  immersive: {\n    predictive: true,\n    preloadContent: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Accessibility-focused consciousness features\n   */\n  accessible: {\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n} as const;\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"./GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  createComboboxA11y,\n  createListboxOptionA11y,\n  useA11yId,\n  announceToScreenReader,\n  keyboardHandlers,\n  focusUtils,\n} from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface SelectOption {\n  value: string | number;\n  label: string;\n  disabled?: boolean;\n  group?: string;\n}\n\nexport type SelectValue = SelectOption[\"value\"];\nexport type SelectValueChange = SelectValue | SelectValue[];\n\nexport interface GlassSelectProps\n  extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\"> {\n  /**\n   * Select variant\n   */\n  variant?: \"default\" | \"filled\" | \"outlined\" | \"minimal\";\n  /**\n   * Select size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Select state\n   */\n  state?: \"default\" | \"error\" | \"warning\" | \"success\";\n  /**\n   * Whether select is full width\n   */\n  fullWidth?: boolean;\n  /**\n   * Left icon\n   */\n  leftIcon?: React.ReactNode;\n  /**\n   * Helper text\n   */\n  helperText?: string;\n  /**\n   * Error text\n   */\n  errorText?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Select options\n   */\n  options?: SelectOption[];\n  /**\n   * Placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Whether select is searchable\n   */\n  searchable?: boolean;\n  /**\n   * Custom search function\n   */\n  onSearch?: (query: string) => void;\n  /**\n   * Multi-select mode\n   */\n  multiple?: boolean;\n  /**\n   * Max items for multi-select\n   */\n  maxItems?: number;\n  /**\n   * Custom option renderer\n   */\n  renderOption?: (option: SelectOption) => React.ReactNode;\n  /**\n   * Custom value renderer\n   */\n  renderValue?: (value: SelectValueChange) => React.ReactNode;\n  /**\n   * Value change callback (preferred over onChange)\n   */\n  onValueChange?: (value: SelectValueChange) => void;\n  /**\n   * Optional portal container for the custom dropdown.\n   */\n  portalContainer?: HTMLElement | null;\n  /**\n   * Whether to portal dropdown content. Defaults to true.\n   */\n  portalled?: boolean;\n  /**\n   * Overlay positioning strategy.\n   */\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n  /**\n   * Render dropdown content inside the local select boundary.\n   */\n  contained?: boolean;\n\n  // Accessibility props\n  /**\n   * Accessible label for the select\n   */\n  label?: string;\n  /**\n   * ID of element that labels the select\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element(s) that describe the select\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Whether the select is required\n   */\n  \"aria-required\"?: boolean;\n  /**\n   * Whether the select value is invalid\n   */\n  \"aria-invalid\"?: boolean;\n  /**\n   * ID of error message element\n   */\n  \"aria-errormessage\"?: string;\n}\n\n/**\n * GlassSelect component\n * A glassmorphism select field with advanced features\n * @deprecated Prefer the Radix-based compound Select exported from GlassSelectCompound\n */\nexport const GlassSelect = forwardRef<HTMLSelectElement, GlassSelectProps>(\n  (\n    {\n      variant = \"default\",\n      size = \"md\",\n      state = \"default\",\n      fullWidth = false,\n      leftIcon,\n      helperText,\n      errorText,\n      loading = false,\n      options = [],\n      placeholder = \"Select an option...\",\n      searchable = false,\n      onSearch,\n      multiple = false,\n      maxItems,\n      renderOption,\n      renderValue,\n      className,\n      disabled,\n      value,\n      onChange,\n      onValueChange,\n      portalContainer,\n      portalled = true,\n      positionStrategy = \"fixed\",\n      contained = false,\n      ...props\n    },\n    ref\n  ) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [searchQuery, setSearchQuery] = useState(\"\");\n    const [focusedIndex, setFocusedIndex] = useState(-1);\n    const triggerRef = useRef<HTMLButtonElement>(null);\n    const listRef = useRef<HTMLUListElement>(null);\n    const searchInputRef = useRef<HTMLInputElement>(null);\n    const [portalReady, setPortalReady] = useState(false);\n    const [dropdownPos, setDropdownPos] = useState<{\n      top: number;\n      left: number;\n      width: number;\n    }>({ top: 0, left: 0, width: 0 });\n\n    const sizeClasses = {\n      sm: \"h-8 glass-px-3 glass-text-sm\",\n      md: \"h-10 glass-px-4 glass-text-sm\",\n      lg: \"h-12 px-5 glass-text-base\",\n    };\n\n    const variantClasses = {\n      default: \"bg-background/50 border border-border/30\",\n      filled: \"bg-muted/50 border border-transparent\",\n      outlined: \"bg-transparent border-2 border-border\",\n      minimal: \"bg-transparent border-0 border-b border-border\",\n    };\n\n    const stateClasses = {\n      default: \"border-border/30 focus:border-primary/50\",\n      error: \"border-destructive/50 focus:border-destructive\",\n      warning: \"border-warning/50 focus:border-warning\",\n      success: \"border-success/50 focus:border-success\",\n    };\n\n    const iconSize = {\n      sm: \"w-4 h-4\",\n      md: \"w-4 h-4\",\n      lg: \"w-5 h-5\",\n    };\n\n    const currentState = errorText ? \"error\" : state;\n    const displayHelperText = errorText || helperText;\n    const isContainedOverlay =\n      contained || positionStrategy === \"contained\" || portalled === false;\n\n    // Filter options based on search query\n    const filteredOptions =\n      searchable && searchQuery\n        ? options.filter((option: any) =>\n            option.label.toLowerCase().includes(searchQuery.toLowerCase())\n          )\n        : options;\n\n    // Group options\n    const groupedOptions = filteredOptions.reduce(\n      (groups, option) => {\n        const group = option.group || \"\";\n        if (!groups[group]) groups[group] = [];\n        groups[group].push(option);\n        return groups;\n      },\n      {} as Record<string, SelectOption[]>\n    );\n\n    // Get selected options\n    const selectedOptions =\n      multiple && Array.isArray(value)\n        ? options.filter((opt: any) => value.includes(opt.value))\n        : value !== undefined\n          ? options.filter((opt: any) => opt.value === value)\n          : [];\n\n    // Handle option selection\n    const handleOptionSelect = (option: SelectOption) => {\n      if (option.disabled) return;\n\n      if (multiple) {\n        const currentValues = Array.isArray(value) ? value : [];\n        const newValues = currentValues.includes(option.value)\n          ? currentValues.filter((v: any) => v !== option.value)\n          : maxItems && currentValues.length >= maxItems\n            ? currentValues\n            : [...currentValues, option.value];\n\n        onValueChange?.(newValues);\n      } else {\n        onValueChange?.(option.value);\n        setIsOpen(false);\n      }\n    };\n\n    // Handle keyboard navigation\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n      switch (event.key) {\n        case \"ArrowDown\":\n          event.preventDefault();\n          if (!isOpen) {\n            setIsOpen(true);\n          } else {\n            setFocusedIndex((prev: any) =>\n              prev < filteredOptions.length - 1 ? prev + 1 : 0\n            );\n          }\n          break;\n        case \"ArrowUp\":\n          event.preventDefault();\n          if (isOpen) {\n            setFocusedIndex((prev: any) =>\n              prev > 0 ? prev - 1 : filteredOptions.length - 1\n            );\n          }\n          break;\n        case \"Enter\":\n          event.preventDefault();\n          if (isOpen && focusedIndex >= 0) {\n            handleOptionSelect(filteredOptions[focusedIndex]);\n          } else {\n            setIsOpen(!isOpen);\n          }\n          break;\n        case \"Escape\":\n          event.preventDefault();\n          setIsOpen(false);\n          break;\n        case \" \":\n          if (!searchable) {\n            event.preventDefault();\n            setIsOpen(!isOpen);\n          }\n          break;\n      }\n    };\n\n    // Close dropdown when clicking outside\n    useEffect(() => {\n      const handleClickOutside = (event: MouseEvent) => {\n        if (\n          triggerRef.current &&\n          !triggerRef.current.contains(event.target as Node)\n        ) {\n          setIsOpen(false);\n        }\n      };\n\n      document.addEventListener(\"mousedown\", handleClickOutside);\n      return () =>\n        document.removeEventListener(\"mousedown\", handleClickOutside);\n    }, []);\n\n    // Reset search when closed\n    useEffect(() => {\n      if (!isOpen) {\n        setSearchQuery(\"\");\n        setFocusedIndex(-1);\n      } else if (searchable && searchInputRef.current) {\n        searchInputRef.current.focus();\n      }\n    }, [isOpen, searchable]);\n\n    // Prepare portal and compute dropdown position to avoid clipping by overflow-hidden parents\n    useEffect(() => {\n      setPortalReady(true);\n    }, []);\n\n    const updateDropdownPosition = () => {\n      const el = triggerRef.current;\n      if (!el) return;\n      const rect = el.getBoundingClientRect();\n      // Add a small offset so the popup doesn't overlap the trigger border\n      setDropdownPos({\n        top: isContainedOverlay ? 0 : rect.bottom + 6,\n        left: isContainedOverlay ? 0 : rect.left,\n        width: rect.width,\n      });\n    };\n\n    useEffect(() => {\n      if (!isOpen) return;\n      updateDropdownPosition();\n      const onResize = () => updateDropdownPosition();\n      const onScroll = () => updateDropdownPosition();\n      window.addEventListener(\"resize\", onResize);\n      // Capture scroll from any scrollable ancestor\n      if (!isContainedOverlay) {\n        window.addEventListener(\"scroll\", onScroll, true);\n      }\n      return () => {\n        window.removeEventListener(\"resize\", onResize);\n        window.removeEventListener(\"scroll\", onScroll, true);\n      };\n    }, [isOpen, isContainedOverlay]);\n\n    // Render selected value\n    const renderSelectedValue = () => {\n      if (renderValue) {\n        return renderValue(\n          Array.isArray(value) ? (Array.from(value) as any) : value || \"\"\n        );\n      }\n\n      if (multiple && selectedOptions.length > 0) {\n        if (selectedOptions.length === 1) {\n          return selectedOptions[0].label;\n        }\n        return `${selectedOptions.length} items selected`;\n      }\n\n      if (!multiple && selectedOptions.length > 0) {\n        return selectedOptions[0].label;\n      }\n\n      return placeholder;\n    };\n\n    return (\n      <div\n        data-glass-component\n        data-testid={props[\"data-testid\"] || \"glassselect\"}\n        className={cn(\n          \"relative inline-block\",\n          { \"w-full\": fullWidth },\n          className\n        )}\n      >\n        {/* Hidden native select for form compatibility */}\n        <select\n          ref={ref}\n          value={value}\n          onChange={onChange}\n          multiple={multiple}\n          className=\"glass-sr-only glass-touch-target glass-contrast-guard\"\n          aria-label={\n            props.label || props[\"aria-label\"] || placeholder || \"Select option\"\n          }\n          {...props}\n        >\n          {options.map((option: any) => (\n            <option\n              key={option.value}\n              value={option.value}\n              disabled={option.disabled}\n            >\n              {option.label}\n            </option>\n          ))}\n        </select>\n\n        {/* Custom select trigger */}\n        {variant === \"default\" ? (\n          <div\n            className={cn(\n              \"relative inline-block\",\n              sizeClasses[size],\n              disabled && \"opacity-50\",\n              className\n            )}\n          >\n            <GlassButton\n              ref={triggerRef}\n              type=\"button\"\n              className=\"glass-w-full glass-flex glass-items-center glass-justify-between glass-surface-dark/20 hover:glass-surface-dark/30 glass-border glass-border-white/20 hover:glass-border-white/30 glass-radius-xl glass-outline-none glass-text-left glass-text-primary-glass-opacity-90 hover:glass-text-primary glass-backdrop-blur-sm glass-focus glass-touch-target glass-contrast-guard\"\n              disabled={disabled || loading}\n              onClick={(e) => setIsOpen(!isOpen)}\n              onKeyDown={handleKeyDown}\n              aria-haspopup=\"listbox\"\n              aria-expanded={isOpen}\n              aria-busy={loading || undefined}\n              aria-label={\n                props.label ||\n                props[\"aria-label\"] ||\n                placeholder ||\n                \"Select option\"\n              }\n            >\n              <div className=\"glass-flex glass-items-center glass-flex-1 glass-min-w-0\">\n                {leftIcon && (\n                  <div\n                    className={cn(\n                      \"flex items-center justify-center mr-3 glass-text-primary/70\",\n                      iconSize[size]\n                    )}\n                  >\n                    {leftIcon}\n                  </div>\n                )}\n\n                <span\n                  className={cn(\n                    \"flex-1 truncate\",\n                    selectedOptions.length === 0\n                      ? \"glass-text-primary/60\"\n                      : \"glass-text-primary/90\"\n                  )}\n                >\n                  {renderSelectedValue()}\n                </span>\n              </div>\n\n              <div className=\"glass-flex glass-items-center glass-gap-2 glass-ml-2\">\n                {loading && (\n                  <div\n                    className={cn(\n                      \"animate-spin glass-radius-full border-2 border-current border-t-transparent\",\n                      iconSize[size]\n                    )}\n                  />\n                )}\n\n                <div\n                  className={cn(\n                    \"transition-transform duration-200 glass-text-primary/70\",\n                    isOpen ? \"rotate-180\" : \"rotate-0\"\n                  )}\n                >\n                  \u25BC\n                </div>\n              </div>\n            </GlassButton>\n          </div>\n        ) : (\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation={isOpen ? \"level3\" : \"level2\"}\n            intensity={\"medium\"}\n            depth={2}\n            tint={\"neutral\"}\n            border={\"subtle\"}\n            animation=\"none\"\n            performanceMode=\"medium\"\n            className={cn(\n              \"relative transition-all duration-200\",\n              sizeClasses[size],\n              \"glass-backdrop-blur bg-glass-fill ring-1 ring-white/10 hover:bg-white/15 focus-within:bg-white/20 focus-within:ring-2 focus-within:ring-white/30 glass-contrast-guard\",\n              disabled && \"opacity-50\",\n              isOpen && \"bg-white/20 ring-2 ring-white/40 shadow-lg\",\n              className\n            )}\n          >\n            <GlassButton\n              ref={triggerRef}\n              type=\"button\"\n              className=\"glass-w-full glass-flex glass-items-center glass-justify-between glass-bg-transparent glass-border-0 glass-outline-none glass-text-left glass-text-primary-glass-opacity-90 hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              disabled={disabled || loading}\n              onClick={(e) => setIsOpen(!isOpen)}\n              onKeyDown={handleKeyDown}\n              aria-haspopup=\"listbox\"\n              aria-expanded={isOpen}\n              aria-busy={loading || undefined}\n              aria-label={\n                props.label ||\n                props[\"aria-label\"] ||\n                placeholder ||\n                \"Select option\"\n              }\n            >\n              <div className=\"glass-flex glass-items-center glass-flex-1 glass-min-w-0\">\n                {leftIcon && (\n                  <div\n                    className={cn(\n                      \"flex items-center justify-center mr-3 glass-text-primary/70\",\n                      iconSize[size]\n                    )}\n                  >\n                    {leftIcon}\n                  </div>\n                )}\n\n                <span\n                  className={cn(\n                    \"flex-1 truncate\",\n                    selectedOptions.length === 0\n                      ? \"glass-text-primary/60\"\n                      : \"glass-text-primary/90\"\n                  )}\n                >\n                  {renderSelectedValue()}\n                </span>\n              </div>\n\n              <div className=\"glass-ml-3 glass-flex glass-items-center\">\n                {loading && (\n                  <div\n                    className={cn(\n                      \"animate-spin glass-radius-full border-2 border-current border-t-transparent\",\n                      iconSize[size]\n                    )}\n                  />\n                )}\n\n                <div\n                  className={cn(\n                    \"transition-transform duration-200 glass-text-primary/70\",\n                    isOpen ? \"rotate-180\" : \"rotate-0\"\n                  )}\n                >\n                  \u25BC\n                </div>\n              </div>\n            </GlassButton>\n          </OptimizedGlass>\n        )}\n\n        {/* Dropdown */}\n        {isOpen &&\n          portalReady &&\n          (isContainedOverlay && !triggerRef.current?.parentElement\n            ? null\n            : createPortal(\n                <Motion\n                  preset=\"slideDown\"\n                  className=\"glass-pointer-events-auto\"\n                >\n                  <div\n                    style={{\n                      position: isContainedOverlay ? \"absolute\" : \"fixed\",\n                      top: isContainedOverlay\n                        ? \"calc(100% + 6px)\"\n                        : dropdownPos.top,\n                      left: isContainedOverlay ? 0 : dropdownPos.left,\n                      width: isContainedOverlay ? \"100%\" : dropdownPos.width,\n                      zIndex: isContainedOverlay ? 50 : 10000,\n                    }}\n                    data-position-strategy={\n                      isContainedOverlay ? \"contained\" : positionStrategy\n                    }\n                  >\n                    <OptimizedGlass\n                      intent=\"neutral\"\n                      elevation={\"level3\"}\n                      intensity=\"strong\"\n                      depth={2}\n                      tint=\"neutral\"\n                      border=\"subtle\"\n                      animation=\"none\"\n                      performanceMode=\"medium\"\n                      className={cn(\n                        \"max-h-60 overflow-hidden\",\n                        \"glass-backdrop-blur glass-surface-dark/30 glass-border glass-border-white/20 glass-contrast-guard\",\n                        \"shadow-2xl shadow-black/50\",\n                        \"ring-1 ring-white/10\"\n                      )}\n                    >\n                      <FocusTrap active={isOpen}>\n                        {searchable && (\n                          <div className=\"glass-p-2 glass-border-b glass-border-white/20\">\n                            <GlassInput\n                              ref={searchInputRef}\n                              type=\"text\"\n                              placeholder=\"Search options...\"\n                              value={searchQuery}\n                              onChange={(e) => {\n                                setSearchQuery(e.target.value);\n                                onSearch?.(e.target.value);\n                              }}\n                              className={cn(\n                                \"w-full glass-px-3 glass-py-2 glass-radius-md outline-none\",\n                                \"glass-backdrop-blur bg-glass-fill ring-1 ring-white/10\",\n                                \"glass-text-primary/90 placeholder-white/50\",\n                                \"focus:ring-2 glass-focus-ring-white-opacity-30 focus:bg-white/15\",\n                                \"transition-all duration-200\"\n                              )}\n                            />\n                          </div>\n                        )}\n\n                        <ul\n                          ref={listRef}\n                          className=\"glass-max-h-48 glass-overflow-y-auto\"\n                          role=\"listbox\"\n                          aria-multiselectable={multiple}\n                        >\n                          {Object.entries(groupedOptions).map(\n                            ([group, groupOptions]) => (\n                              <React.Fragment key={group}>\n                                {group && (\n                                  <li className=\"glass-px-3 glass-py-2 glass-text-xs glass-font-medium glass-text-primary-glass-opacity-60 glass-surface-subtle/5 glass-border-b glass-border-white/10\">\n                                    {group}\n                                  </li>\n                                )}\n\n                                {groupOptions.map((option, index) => {\n                                  const isSelected = multiple\n                                    ? Array.isArray(value) &&\n                                      value.includes(option.value)\n                                    : value === option.value;\n                                  const isFocused =\n                                    filteredOptions.indexOf(option) ===\n                                    focusedIndex;\n\n                                  return (\n                                    <li\n                                      key={option.value}\n                                      className={cn(\n                                        \"glass-px-3 glass-py-2 cursor-pointer transition-all duration-200\",\n                                        \"hover:bg-white/10 hover:glass-backdrop-blur glass-contrast-guard\",\n                                        \"glass-text-primary/90\",\n                                        \"glass-focus glass-touch-target\",\n                                        {\n                                          \"bg-white/20 glass-text-primary shadow-md\":\n                                            isSelected,\n                                          \"bg-white/5 ring-1 ring-white/20\":\n                                            isFocused,\n                                          \"opacity-50 cursor-not-allowed hover:bg-transparent\":\n                                            option.disabled,\n                                        }\n                                      )}\n                                      onClick={(e) =>\n                                        handleOptionSelect(option)\n                                      }\n                                      onKeyDown={(e) => {\n                                        if (\n                                          e.key === \"Enter\" ||\n                                          e.key === \" \"\n                                        ) {\n                                          e.preventDefault();\n                                          handleOptionSelect(option);\n                                        }\n                                      }}\n                                      role=\"option\"\n                                      aria-selected={isSelected}\n                                    >\n                                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                                        {renderOption ? (\n                                          renderOption(option)\n                                        ) : (\n                                          <span className=\"glass-flex-1\">\n                                            {option.label}\n                                          </span>\n                                        )}\n\n                                        {multiple && isSelected && (\n                                          <span className=\"glass-ml-2 glass-text-primary\">\n                                            \u2713\n                                          </span>\n                                        )}\n                                      </div>\n                                    </li>\n                                  );\n                                })}\n                              </React.Fragment>\n                            )\n                          )}\n\n                          {filteredOptions.length === 0 && (\n                            <li className=\"glass-px-3 glass-py-4 glass-text-primary-glass-opacity-50 glass-text-center glass-text-sm\">\n                              No options found\n                            </li>\n                          )}\n                        </ul>\n                      </FocusTrap>\n                    </OptimizedGlass>\n                  </div>\n                </Motion>,\n                isContainedOverlay\n                  ? triggerRef.current!.parentElement!\n                  : (portalContainer ?? document.body)\n              ))}\n\n        {displayHelperText && (\n          <p\n            className={cn(\n              \"glass-mt-1 glass-text-xs\",\n              currentState === \"error\"\n                ? \"text-destructive\"\n                : currentState === \"warning\"\n                  ? \"text-warning\"\n                  : currentState === \"success\"\n                    ? \"text-success\"\n                    : \"glass-text-secondary\"\n            )}\n          >\n            {displayHelperText}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassSelect.displayName = \"GlassSelect\";\n", "\"use client\";\n\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\ntype DiffKind = \"unchanged\" | \"added\" | \"removed\";\n\ninterface DiffRow {\n  kind: DiffKind;\n  oldLine?: number;\n  newLine?: number;\n  text: string;\n}\n\nexport interface GlassDiffViewerProps {\n  left?: string;\n  right?: string;\n  sideBySide?: boolean;\n  mode?: \"split\" | \"unified\";\n  language?: string;\n  compact?: boolean;\n  maxHeight?: number | string;\n  showLineNumbers?: boolean;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\nconst DEFAULT_LEFT = 'export const greet = () => \"hello\";\\n';\nconst DEFAULT_RIGHT =\n  \"export const greet = (name: string) => `hello, ${name}`;\\n\";\n\nfunction toCssSize(value: number | string | undefined): string | undefined {\n  return typeof value === \"number\" ? `${value}px` : value;\n}\n\nfunction splitLines(value: string): string[] {\n  const lines = value.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n  if (lines[lines.length - 1] === \"\") lines.pop();\n  return lines.length ? lines : [\"\"];\n}\n\nfunction buildUnifiedRows(left: string, right: string): DiffRow[] {\n  const leftLines = splitLines(left);\n  const rightLines = splitLines(right);\n  const max = Math.max(leftLines.length, rightLines.length);\n  const rows: DiffRow[] = [];\n\n  for (let i = 0; i < max; i += 1) {\n    const oldText = leftLines[i];\n    const newText = rightLines[i];\n    const hasOld = oldText !== undefined;\n    const hasNew = newText !== undefined;\n\n    if (hasOld && hasNew && oldText === newText) {\n      rows.push({\n        kind: \"unchanged\",\n        oldLine: i + 1,\n        newLine: i + 1,\n        text: oldText,\n      });\n      continue;\n    }\n\n    if (hasOld) {\n      rows.push({\n        kind: \"removed\",\n        oldLine: i + 1,\n        text: oldText,\n      });\n    }\n\n    if (hasNew) {\n      rows.push({\n        kind: \"added\",\n        newLine: i + 1,\n        text: newText,\n      });\n    }\n  }\n\n  return rows;\n}\n\nfunction rowStyle(kind: DiffKind): React.CSSProperties {\n  if (kind === \"added\") {\n    return {\n      background:\n        \"color-mix(in srgb, var(--glass-color-success, #22c55e) 16%, transparent)\",\n    };\n  }\n\n  if (kind === \"removed\") {\n    return {\n      background:\n        \"color-mix(in srgb, var(--glass-color-danger, #ef4444) 16%, transparent)\",\n    };\n  }\n\n  return {};\n}\n\nfunction signFor(kind: DiffKind): string {\n  if (kind === \"added\") return \"+\";\n  if (kind === \"removed\") return \"-\";\n  return \" \";\n}\n\nfunction labelFor(kind: DiffKind): string {\n  if (kind === \"added\") return \"Added line\";\n  if (kind === \"removed\") return \"Removed line\";\n  return \"Unchanged line\";\n}\n\nfunction DiffTable({\n  rows,\n  compact,\n  showLineNumbers,\n}: {\n  rows: DiffRow[];\n  compact: boolean;\n  showLineNumbers: boolean;\n}) {\n  return (\n    <table\n      role=\"table\"\n      aria-label=\"Code diff\"\n      style={{\n        width: \"100%\",\n        borderCollapse: \"collapse\",\n        tableLayout: \"fixed\",\n        fontSize: compact ? \"0.72rem\" : \"0.78rem\",\n        lineHeight: compact ? 1.35 : 1.5,\n      }}\n    >\n      <tbody>\n        {rows.map((row, index) => (\n          <tr\n            key={`${row.kind}-${row.oldLine ?? \"x\"}-${row.newLine ?? \"x\"}-${index}`}\n            data-diff-kind={row.kind}\n            aria-label={labelFor(row.kind)}\n            style={rowStyle(row.kind)}\n          >\n            <td\n              aria-hidden\n              style={{\n                width: compact ? 22 : 26,\n                padding: compact ? \"1px 4px\" : \"2px 6px\",\n                textAlign: \"center\",\n                color:\n                  row.kind === \"added\"\n                    ? \"var(--glass-color-success, #22c55e)\"\n                    : row.kind === \"removed\"\n                      ? \"var(--glass-color-danger, #ef4444)\"\n                      : \"color-mix(in srgb, currentColor 45%, transparent)\",\n                userSelect: \"none\",\n              }}\n            >\n              {signFor(row.kind)}\n            </td>\n            {showLineNumbers && (\n              <td\n                aria-hidden\n                style={{\n                  width: compact ? 44 : 56,\n                  padding: compact ? \"1px 4px\" : \"2px 6px\",\n                  color: \"color-mix(in srgb, currentColor 45%, transparent)\",\n                  userSelect: \"none\",\n                  whiteSpace: \"nowrap\",\n                }}\n              >\n                {row.oldLine ?? \"\"} {row.newLine ?? \"\"}\n              </td>\n            )}\n            <td style={{ padding: compact ? \"1px 6px\" : \"2px 8px\" }}>\n              <pre\n                style={{\n                  margin: 0,\n                  whiteSpace: \"pre-wrap\",\n                  overflowWrap: \"anywhere\",\n                }}\n              >\n                <code>{row.text || \" \"}</code>\n              </pre>\n            </td>\n          </tr>\n        ))}\n      </tbody>\n    </table>\n  );\n}\n\nfunction CodePanel({\n  label,\n  code,\n  compact,\n}: {\n  label: string;\n  code: string;\n  compact: boolean;\n}) {\n  return (\n    <OptimizedGlass\n      elevation={\"level1\"}\n      className=\"glass-radius-lg glass-border glass-border-white/15 glass-overflow-auto\"\n      style={{ padding: compact ? \"0.5rem\" : \"0.75rem\" }}\n    >\n      <div\n        style={{\n          marginBottom: compact ? 4 : 6,\n          fontSize: compact ? \"0.62rem\" : \"0.68rem\",\n          letterSpacing: \"0.08em\",\n          textTransform: \"uppercase\",\n          color: \"var(--glass-text-muted, rgba(255,255,255,0.56))\",\n        }}\n      >\n        {label}\n      </div>\n      <pre\n        className=\"glass-text-primary-glass-opacity-80\"\n        style={{\n          margin: 0,\n          fontSize: compact ? \"0.72rem\" : \"0.78rem\",\n          lineHeight: compact ? 1.35 : 1.5,\n          whiteSpace: \"pre-wrap\",\n          overflowWrap: \"anywhere\",\n        }}\n      >\n        <code>{code}</code>\n      </pre>\n    </OptimizedGlass>\n  );\n}\n\nexport function GlassDiffViewer({\n  left = DEFAULT_LEFT,\n  right = DEFAULT_RIGHT,\n  sideBySide = false,\n  mode,\n  language,\n  compact = false,\n  maxHeight,\n  showLineNumbers = true,\n  className,\n  \"data-testid\": dataTestId,\n}: GlassDiffViewerProps) {\n  const resolvedMode = mode ?? (sideBySide ? \"split\" : \"unified\");\n  const rows = React.useMemo(\n    () => buildUnifiedRows(left, right),\n    [left, right]\n  );\n\n  return (\n    <div\n      data-glass-component\n      data-language={language}\n      data-testid={dataTestId}\n      className={cn(\"glass-w-full\", className)}\n      style={{\n        maxHeight: toCssSize(maxHeight),\n        overflow: maxHeight ? \"auto\" : undefined,\n      }}\n    >\n      {resolvedMode === \"split\" ? (\n        <div\n          className=\"glass-grid glass-gap-3\"\n          style={{\n            gridTemplateColumns: compact ? \"1fr\" : \"repeat(2, minmax(0, 1fr))\",\n          }}\n        >\n          <CodePanel label=\"Before\" code={left} compact={compact} />\n          <CodePanel label=\"After\" code={right} compact={compact} />\n        </div>\n      ) : (\n        <OptimizedGlass\n          elevation={\"level1\"}\n          className=\"glass-radius-lg glass-border glass-border-white/15 glass-overflow-hidden\"\n          style={{ padding: compact ? \"0.35rem\" : \"0.5rem\" }}\n        >\n          <DiffTable\n            rows={rows}\n            compact={compact}\n            showLineNumbers={showLineNumbers}\n          />\n        </OptimizedGlass>\n      )}\n    </div>\n  );\n}\n\nexport default GlassDiffViewer;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Archive, Search, Sparkles } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface GlassEmptyStateAction {\n  label: string;\n  onClick?: () => void;\n  href?: string;\n}\n\nexport interface GlassEmptyStateProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  title?: string;\n  description?: string;\n  icon?: React.ReactNode;\n  variant?: \"default\" | \"search\" | \"success\" | \"compact\";\n  primaryAction?: GlassEmptyStateAction;\n  secondaryAction?: GlassEmptyStateAction;\n}\n\nconst variantIcon = {\n  default: Archive,\n  search: Search,\n  success: Sparkles,\n  compact: Archive,\n};\n\nconst EmptyAction = ({ action }: { action: GlassEmptyStateAction }) => {\n  if (action.href) {\n    return (\n      <GlassButton asChild size=\"sm\">\n        <a href={action.href}>{action.label}</a>\n      </GlassButton>\n    );\n  }\n  return (\n    <GlassButton type=\"button\" size=\"sm\" onClick={action.onClick}>\n      {action.label}\n    </GlassButton>\n  );\n};\n\nexport const GlassEmptyState = forwardRef<HTMLDivElement, GlassEmptyStateProps>(\n  (\n    {\n      title = \"Nothing here yet\",\n      description = \"Create a record or adjust the current filters to populate this surface.\",\n      icon,\n      variant = \"default\",\n      primaryAction,\n      secondaryAction,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const Icon = variantIcon[variant];\n    const compact = variant === \"compact\";\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        data-glass-component\n        role=\"status\"\n        aria-live=\"polite\"\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        className={cn(\n          \"glass-flex glass-flex-col glass-items-center glass-justify-center glass-gap-3 glass-text-center\",\n          compact ? \"glass-p-4\" : \"glass-min-h-[220px] glass-p-8\",\n          className\n        )}\n        {...props}\n      >\n        <div\n          aria-hidden=\"true\"\n          className=\"glass-flex glass-h-12 glass-w-12 glass-items-center glass-justify-center glass-rounded-full glass-border glass-border-white/15 glass-bg-white/8 glass-text-primary\"\n        >\n          {icon ?? <Icon size={22} />}\n        </div>\n        <div className=\"glass-space-y-1\">\n          <h3 className=\"glass-text-base glass-font-semibold glass-text-primary\">\n            {title}\n          </h3>\n          {description ? (\n            <p className=\"glass-mx-auto glass-max-w-md glass-text-sm glass-text-secondary\">\n              {description}\n            </p>\n          ) : null}\n        </div>\n        {(primaryAction || secondaryAction) && (\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-center glass-gap-2\">\n            {primaryAction ? <EmptyAction action={primaryAction} /> : null}\n            {secondaryAction ? <EmptyAction action={secondaryAction} /> : null}\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassEmptyState.displayName = \"GlassEmptyState\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { AlertCircle, RefreshCw } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface GlassErrorStateProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  title?: string;\n  description?: string;\n  retryLabel?: string;\n  onRetry?: () => void;\n  details?: React.ReactNode;\n  severity?: \"error\" | \"warning\";\n}\n\nexport const GlassErrorState = forwardRef<HTMLDivElement, GlassErrorStateProps>(\n  (\n    {\n      title = \"Something went wrong\",\n      description = \"The surface could not load. Try again or review the error details.\",\n      retryLabel = \"Retry\",\n      onRetry,\n      details,\n      severity = \"error\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <OptimizedGlass\n        ref={ref}\n        data-glass-component\n        role=\"alert\"\n        aria-live={severity === \"error\" ? \"assertive\" : \"polite\"}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint={severity === \"error\" ? \"danger\" : \"warning\"}\n        border=\"visible\"\n        animation=\"none\"\n        className={cn(\"glass-space-y-4 glass-p-5\", className)}\n        {...props}\n      >\n        <div className=\"glass-flex glass-items-start glass-gap-3\">\n          <AlertCircle\n            aria-hidden=\"true\"\n            className=\"glass-mt-0.5 glass-h-5 glass-w-5 glass-text-primary\"\n          />\n          <div className=\"glass-min-w-0 glass-flex-1 glass-space-y-1\">\n            <h3 className=\"glass-text-base glass-font-semibold glass-text-primary\">\n              {title}\n            </h3>\n            {description ? (\n              <p className=\"glass-text-sm glass-text-secondary\">\n                {description}\n              </p>\n            ) : null}\n          </div>\n        </div>\n        {details ? (\n          <div className=\"glass-rounded-md glass-border glass-border-white/12 glass-bg-white/5 glass-p-3 glass-text-xs glass-text-secondary\">\n            {details}\n          </div>\n        ) : null}\n        {onRetry ? (\n          <GlassButton type=\"button\" size=\"sm\" onClick={onRetry}>\n            <RefreshCw aria-hidden=\"true\" className=\"glass-h-4 glass-w-4\" />\n            {retryLabel}\n          </GlassButton>\n        ) : null}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassErrorState.displayName = \"GlassErrorState\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nexport interface HeatmapDataPoint {\n  x: number;\n  y: number;\n  value: number;\n  label?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface HeatmapCell {\n  row: number;\n  col: number;\n  value: number;\n  normalizedValue: number;\n  label?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface HeatmapColorScale {\n  min: string;\n  mid?: string;\n  max: string;\n  steps?: number;\n}\n\nexport interface HeatmapAxis {\n  labels: string[];\n  title?: string;\n  tickCount?: number;\n  format?: (value: unknown) => string;\n}\n\ntype PreventableEvent = Pick<React.SyntheticEvent, \"preventDefault\">;\n\nexport interface GlassHeatmapProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Heatmap data */\n  data: HeatmapDataPoint[] | number[][];\n  /** X-axis configuration */\n  xAxis?: HeatmapAxis;\n  /** Y-axis configuration */\n  yAxis?: HeatmapAxis;\n  /** Color scale configuration */\n  colorScale?: HeatmapColorScale;\n  /** Cell size in pixels */\n  cellSize?: number;\n  /** Gap between cells */\n  cellGap?: number;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Contain the visualization in a bounded vertical viewport. */\n  contained?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Whether to show cell values */\n  showValues?: boolean;\n  /** Whether to show grid lines */\n  showGrid?: boolean;\n  /** Whether to show tooltips */\n  showTooltips?: boolean;\n  /** Whether to enable cell selection */\n  selectable?: boolean;\n  /** Selected cells */\n  selectedCells?: Array<{ row: number; col: number }>;\n  /** Selection change handler */\n  onSelectionChange?: (cells: Array<{ row: number; col: number }>) => void;\n  /** Cell click handler */\n  onCellClick?: (cell: HeatmapCell) => void;\n  /** Cell hover handler */\n  onCellHover?: (cell: HeatmapCell | null) => void;\n  /** Custom cell renderer */\n  renderCell?: (cell: HeatmapCell) => React.ReactNode;\n  /** Custom tooltip renderer */\n  renderTooltip?: (cell: HeatmapCell) => React.ReactNode;\n  /** Whether to enable zoom */\n  zoomable?: boolean;\n  /** Zoom level */\n  zoomLevel?: number;\n  /** Zoom change handler */\n  onZoomChange?: (level: number) => void;\n  /** Whether to show legend */\n  showLegend?: boolean;\n  /** Legend position */\n  legendPosition?: \"top\" | \"bottom\" | \"left\" | \"right\";\n  /** Whether to enable animation */\n  animated?: boolean;\n  /** Animation duration in milliseconds */\n  animationDuration?: number;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nconst heatmapSurfaceStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  border: \"1px solid rgba(148, 163, 184, 0.22)\",\n  boxShadow:\n    \"0 12px 30px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.07)\",\n  color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.92))\",\n};\n\nconst heatmapInsetStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"neutral\", elevation: \"level1\" }),\n  border: \"1px solid rgba(148, 163, 184, 0.14)\",\n  boxShadow: \"inset 0 1px 0 rgba(255, 255, 255, 0.05)\",\n};\n\nconst heatmapLegendStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"neutral\", elevation: \"level3\" }),\n  border: \"1px solid rgba(124, 211, 255, 0.14)\",\n  boxShadow:\n    \"0 10px 24px rgba(2, 6, 23, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n  color: \"rgba(248, 250, 252, 0.9)\",\n  maxWidth: \"100%\",\n  minWidth: 0,\n};\n\nexport const GlassHeatmap = forwardRef<HTMLDivElement, GlassHeatmapProps>(\n  (\n    {\n      data: incomingData = [],\n      xAxis,\n      yAxis,\n      colorScale = {\n        min: \"#38bdf8\",\n        max: \"#f43f5e\",\n      },\n      cellSize: incomingCellSize = 12,\n      cellGap: incomingCellGap = 1,\n      compact = false,\n      contained = false,\n      maxHeight,\n      showValues = false,\n      showGrid = true,\n      showTooltips = true,\n      selectable = false,\n      selectedCells: incomingSelectedCells = [],\n      onSelectionChange,\n      onCellClick,\n      onCellHover,\n      renderCell,\n      renderTooltip,\n      zoomable = false,\n      zoomLevel = 1,\n      onZoomChange,\n      showLegend = true,\n      legendPosition = \"bottom\",\n      animated = true,\n      animationDuration = ANIMATION.DURATION.slow,\n      respectMotionPreference = true,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const data = Array.isArray(incomingData) ? incomingData : [];\n    const selectedCells = Array.isArray(incomingSelectedCells)\n      ? incomingSelectedCells\n      : [];\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const heatmapId = useA11yId(\"glass-heatmap\");\n    const cellSize = compact ? Math.min(incomingCellSize, 8) : incomingCellSize;\n    const cellGap = compact ? Math.min(incomingCellGap, 1) : incomingCellGap;\n    const effectiveShowValues = compact ? false : showValues;\n    const effectiveShowLegend =\n      compact && (legendPosition === \"left\" || legendPosition === \"right\")\n        ? false\n        : showLegend;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n    const [hoveredCell, setHoveredCell] = useState<HeatmapCell | null>(null);\n    const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });\n    const [internalZoomLevel, setInternalZoomLevel] = useState(zoomLevel);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const heatmapRef = useRef<HTMLDivElement>(null);\n\n    // Process data into normalized format\n    const processedData = useMemo(() => {\n      let cells: HeatmapCell[] = [];\n      let minValue = Infinity;\n      let maxValue = -Infinity;\n\n      if (!Array.isArray(data) || data.length === 0) {\n        return { cells: [], minValue: 0, maxValue: 0, range: 1 };\n      }\n\n      const firstEntry = data[0];\n\n      if (Array.isArray(firstEntry)) {\n        // Handle 2D array format\n        const matrix = data as number[][];\n        matrix.forEach((row, rowIndex) => {\n          (Array.isArray(row) ? row : []).forEach((value, colIndex) => {\n            minValue = Math.min(minValue, value);\n            maxValue = Math.max(maxValue, value);\n            cells.push({\n              row: rowIndex,\n              col: colIndex,\n              value,\n              normalizedValue: 0, // Will be calculated after we know min/max\n            });\n          });\n        });\n      } else {\n        // Handle data points format\n        const points = data as HeatmapDataPoint[];\n        points.forEach((point) => {\n          if (typeof point?.value !== \"number\") return;\n          minValue = Math.min(minValue, point.value);\n          maxValue = Math.max(maxValue, point.value);\n          cells.push({\n            row: point.y ?? 0,\n            col: point.x ?? 0,\n            value: point.value,\n            normalizedValue: 0, // Will be calculated after we know min/max\n            label: point.label,\n            metadata: point.metadata,\n          });\n        });\n      }\n\n      if (cells.length === 0) {\n        return { cells: [], minValue: 0, maxValue: 0, range: 1 };\n      }\n\n      // Normalize values\n      const range = maxValue - minValue || 1;\n      cells = cells.map((cell) => ({\n        ...cell,\n        normalizedValue: (cell.value - minValue) / range,\n      }));\n\n      return { cells, minValue, maxValue, range };\n    }, [data]);\n\n    const hasCells = processedData.cells.length > 0;\n\n    // Get grid dimensions\n    const gridDimensions = useMemo(() => {\n      if (!processedData.cells.length) {\n        return { rows: 0, cols: 0 };\n      }\n      const maxRow = Math.max(...processedData.cells.map((c) => c.row)) + 1;\n      const maxCol = Math.max(...processedData.cells.map((c) => c.col)) + 1;\n      return { rows: maxRow, cols: maxCol };\n    }, [processedData.cells]);\n\n    // Generate color from normalized value\n    const getColor = useCallback(\n      (normalizedValue: number) => {\n        const { min, mid, max, steps = 100 } = colorScale;\n\n        if (mid) {\n          // Three-color gradient\n          if (normalizedValue <= 0.5) {\n            return interpolateColor(min, mid, normalizedValue * 2);\n          } else {\n            return interpolateColor(mid, max, (normalizedValue - 0.5) * 2);\n          }\n        } else {\n          // Two-color gradient\n          return interpolateColor(min, max, normalizedValue);\n        }\n      },\n      [colorScale]\n    );\n\n    // Color interpolation utility\n    const interpolateColor = useCallback(\n      (color1: string, color2: string, factor: number) => {\n        const resolveColor = (color: string, fallback: string) => {\n          const trimmed = color.trim();\n          if (/^#[0-9a-f]{6}$/i.test(trimmed)) return trimmed;\n          if (/^#[0-9a-f]{3}$/i.test(trimmed)) {\n            return `#${trimmed\n              .slice(1)\n              .split(\"\")\n              .map((part) => `${part}${part}`)\n              .join(\"\")}`;\n          }\n          if (trimmed.includes(\"--glass-color-primary\")) return \"#38bdf8\";\n          if (trimmed.includes(\"--glass-color-success\")) return \"#22c55e\";\n          if (trimmed.includes(\"--glass-color-warning\")) return \"#f59e0b\";\n          if (trimmed.includes(\"--glass-color-danger\")) return \"#f43f5e\";\n          if (trimmed.includes(\"--glass-gray-500\")) return \"#64748b\";\n          const rgbMatch = trimmed.match(\n            /rgba?\\(\\s*(\\d+)[,\\s]+(\\d+)[,\\s]+(\\d+)/\n          );\n          if (rgbMatch) {\n            return `#${[rgbMatch[1], rgbMatch[2], rgbMatch[3]]\n              .map((value) => Number(value).toString(16).padStart(2, \"0\"))\n              .join(\"\")}`;\n          }\n          return fallback;\n        };\n\n        const hex1 = resolveColor(color1, \"#38bdf8\").replace(\"#\", \"\");\n        const hex2 = resolveColor(color2, \"#f43f5e\").replace(\"#\", \"\");\n\n        const r1 = parseInt(hex1.substr(0, 2), 16);\n        const g1 = parseInt(hex1.substr(2, 2), 16);\n        const b1 = parseInt(hex1.substr(4, 2), 16);\n\n        const r2 = parseInt(hex2.substr(0, 2), 16);\n        const g2 = parseInt(hex2.substr(2, 2), 16);\n        const b2 = parseInt(hex2.substr(4, 2), 16);\n\n        const r = Math.round(r1 + factor * (r2 - r1));\n        const g = Math.round(g1 + factor * (g2 - g1));\n        const b = Math.round(b1 + factor * (b2 - b1));\n\n        return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n      },\n      []\n    );\n\n    // Handle cell interactions\n    const handleCellClick = useCallback(\n      (cell: HeatmapCell, event: React.MouseEvent) => {\n        if (selectable) {\n          const cellId = { row: cell.row, col: cell.col };\n          const isSelected = selectedCells.some(\n            (c) => c.row === cell.row && c.col === cell.col\n          );\n\n          let newSelection: Array<{ row: number; col: number }>;\n          if (event.ctrlKey || event.metaKey) {\n            // Multi-select\n            newSelection = isSelected\n              ? selectedCells.filter(\n                  (c) => !(c.row === cell.row && c.col === cell.col)\n                )\n              : [...selectedCells, cellId];\n          } else {\n            // Single select\n            newSelection = isSelected ? [] : [cellId];\n          }\n\n          onSelectionChange?.(newSelection);\n        }\n\n        onCellClick?.(cell);\n      },\n      [selectable, selectedCells, onSelectionChange, onCellClick]\n    );\n\n    const handleCellHover = useCallback(\n      (cell: HeatmapCell | null, event?: React.MouseEvent) => {\n        setHoveredCell(cell);\n        onCellHover?.(cell);\n\n        if (cell && event && showTooltips) {\n          const rect = containerRef.current?.getBoundingClientRect();\n          if (rect) {\n            setTooltipPosition({\n              x: event.clientX - rect.left,\n              y: event.clientY - rect.top,\n            });\n          }\n        }\n      },\n      [onCellHover, showTooltips]\n    );\n\n    // Handle zoom\n    const handleZoom = useCallback(\n      (delta: number, event?: PreventableEvent) => {\n        if (!zoomable) return;\n\n        event?.preventDefault();\n        const newZoom = Math.max(0.5, Math.min(3, internalZoomLevel + delta));\n        setInternalZoomLevel(newZoom);\n        onZoomChange?.(newZoom);\n      },\n      [zoomable, internalZoomLevel, onZoomChange]\n    );\n\n    // Check if cell is selected\n    const isCellSelected = useCallback(\n      (row: number, col: number) => {\n        return selectedCells.some((c) => c.row === row && c.col === col);\n      },\n      [selectedCells]\n    );\n\n    // Default cell renderer\n    const defaultRenderCell = useCallback(\n      (cell: HeatmapCell) => {\n        const isSelected = isCellSelected(cell.row, cell.col);\n        const isHovered =\n          hoveredCell?.row === cell.row && hoveredCell?.col === cell.col;\n        const cellColor = getColor(cell.normalizedValue);\n\n        return (\n          <button\n            type=\"button\"\n            className={cn(\n              \"glass-heatmap-cell glass-flex glass-items-center glass-justify-center glass-text-xs glass-font-medium\",\n              \"glass-cursor-pointer glass-border-0 glass-p-0\"\n            )}\n            style={{\n              backgroundColor: cellColor,\n              color:\n                cell.normalizedValue > 0.5\n                  ? \"var(--glass-white)\"\n                  : \"var(--glass-black)\",\n              width: cellSize * internalZoomLevel,\n              height: cellSize * internalZoomLevel,\n              fontSize: `${Math.max(8, cellSize * internalZoomLevel * 0.4)}px`,\n              borderRadius: Math.max(4, cellSize * internalZoomLevel * 0.22),\n              border: showGrid\n                ? \"1px solid rgba(15, 23, 42, 0.26)\"\n                : \"1px solid transparent\",\n              boxShadow: isSelected\n                ? \"0 0 0 2px rgba(124, 211, 255, 0.75), 0 8px 18px rgba(2, 6, 23, 0.2)\"\n                : \"inset 0 1px 0 rgba(255, 255, 255, 0.16)\",\n              transform: isHovered ? \"scale(1.08)\" : \"scale(1)\",\n              zIndex: isHovered ? 2 : 1,\n              transition:\n                \"transform var(--glass-motion-duration-fast, 120ms) ease, box-shadow var(--glass-motion-duration-fast, 120ms) ease\",\n            }}\n            onClick={(e: React.MouseEvent) => handleCellClick(cell, e)}\n            onMouseEnter={(e: React.MouseEvent) => handleCellHover(cell, e)}\n            onMouseLeave={() => handleCellHover(null)}\n          >\n            {effectiveShowValues && (\n              <span className=\"glass-select-none\">\n                {typeof cell.value === \"number\"\n                  ? cell.value.toFixed(1)\n                  : cell.value}\n              </span>\n            )}\n          </button>\n        );\n      },\n      [\n        isCellSelected,\n        hoveredCell,\n        getColor,\n        cellSize,\n        internalZoomLevel,\n        showGrid,\n        effectiveShowValues,\n        handleCellClick,\n        handleCellHover,\n      ]\n    );\n\n    // Default tooltip renderer\n    const defaultRenderTooltip = useCallback(\n      (cell: HeatmapCell) => {\n        return (\n          <OptimizedGlass\n            elevation=\"level3\"\n            intensity=\"strong\"\n            depth={3}\n            tint=\"neutral\"\n            border=\"strong\"\n            className=\"glass-heatmap-tooltip glass-p-3 glass-radius-lg glass-shadow-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n            style={heatmapSurfaceStyle}\n          >\n            <div className=\"glass-text-sm glass-gap-1\">\n              <ContrastGuard>\n                <div className=\"glass-font-semibold\">\n                  {cell.label || `Cell (${cell.col}, ${cell.row})`}\n                </div>\n                <div>Value: {cell.value}</div>\n                {xAxis?.labels?.[cell.col] && (\n                  <div>X: {xAxis.labels[cell.col]}</div>\n                )}\n                {yAxis?.labels?.[cell.row] && (\n                  <div>Y: {yAxis.labels[cell.row]}</div>\n                )}\n                {cell.metadata &&\n                  Object.entries(cell.metadata).map(([key, value]) => (\n                    <div key={key}>\n                      {key}: {String(value)}\n                    </div>\n                  ))}\n              </ContrastGuard>\n            </div>\n          </OptimizedGlass>\n        );\n      },\n      [xAxis, yAxis]\n    );\n\n    // Render legend\n    const renderLegend = useCallback(() => {\n      if (!effectiveShowLegend) return null;\n\n      const legendSteps = compact ? 10 : 20;\n      const isHorizontal =\n        legendPosition === \"top\" || legendPosition === \"bottom\";\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className={cn(\n            \"glass-heatmap-legend glass-p-3 glass-radius-lg glass-backdrop-blur-md glass-border\",\n            isHorizontal\n              ? \"glass-flex glass-flex-col glass-gap-2\"\n              : \"glass-flex glass-flex-col glass-gap-3\"\n          )}\n          style={heatmapLegendStyle}\n        >\n          {isHorizontal && (\n            <div\n              className=\"glass-flex glass-items-center glass-justify-between glass-gap-2\"\n              style={{ minWidth: 0 }}\n            >\n              <ContrastGuard>\n                <div\n                  className=\"glass-text-xs glass-font-medium\"\n                  style={{\n                    color: \"rgba(248, 250, 252, 0.82)\",\n                    letterSpacing: \"0.02em\",\n                  }}\n                >\n                  Legend\n                </div>\n              </ContrastGuard>\n              <ContrastGuard>\n                <div\n                  className=\"glass-text-xs\"\n                  style={{\n                    color: \"rgba(203, 213, 225, 0.72)\",\n                    whiteSpace: \"nowrap\",\n                  }}\n                >\n                  {processedData.minValue.toFixed(1)} -{\" \"}\n                  {processedData.maxValue.toFixed(1)}\n                </div>\n              </ContrastGuard>\n            </div>\n          )}\n\n          <div\n            className={cn(\n              \"glass-flex\",\n              isHorizontal\n                ? \"glass-flex-row glass-items-center glass-gap-2\"\n                : \"glass-flex-col glass-gap-1\"\n            )}\n          >\n            {!isHorizontal && (\n              <ContrastGuard>\n                <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                  Legend\n                </div>\n              </ContrastGuard>\n            )}\n\n            <ContrastGuard>\n              <div\n                className=\"glass-text-xs\"\n                style={{\n                  color: \"rgba(203, 213, 225, 0.72)\",\n                  minWidth: isHorizontal ? 28 : undefined,\n                  textAlign: isHorizontal ? \"right\" : undefined,\n                  whiteSpace: \"nowrap\",\n                }}\n              >\n                {processedData.minValue.toFixed(1)}\n              </div>\n            </ContrastGuard>\n\n            <div\n              className={cn(\n                \"glass-flex\",\n                isHorizontal ? \"glass-flex-row\" : \"glass-flex-col\"\n              )}\n              style={{\n                flex: isHorizontal ? \"1 1 auto\" : undefined,\n                minWidth: 0,\n                overflow: \"hidden\",\n                borderRadius: 999,\n                border: \"1px solid rgba(255, 255, 255, 0.08)\",\n              }}\n            >\n              {Array.from({ length: legendSteps }, (_, i) => (\n                <div\n                  key={i}\n                  className={cn(\n                    \"glass-flex-1\",\n                    isHorizontal ? \"glass-h-4\" : \"glass-w-6 glass-h-3\"\n                  )}\n                  style={{\n                    backgroundColor: getColor(i / (legendSteps - 1)),\n                  }}\n                />\n              ))}\n            </div>\n\n            <ContrastGuard>\n              <div\n                className=\"glass-text-xs\"\n                style={{\n                  color: \"rgba(203, 213, 225, 0.72)\",\n                  minWidth: isHorizontal ? 32 : undefined,\n                  whiteSpace: \"nowrap\",\n                }}\n              >\n                {processedData.maxValue.toFixed(1)}\n              </div>\n            </ContrastGuard>\n          </div>\n        </OptimizedGlass>\n      );\n    }, [effectiveShowLegend, legendPosition, processedData, getColor, compact]);\n\n    // Create grid matrix for rendering\n    const gridMatrix = useMemo(() => {\n      const matrix: Array<Array<HeatmapCell | null>> = Array(\n        gridDimensions.rows\n      )\n        .fill(null)\n        .map(() => Array(gridDimensions.cols).fill(null));\n\n      processedData.cells.forEach((cell) => {\n        if (cell.row < gridDimensions.rows && cell.col < gridDimensions.cols) {\n          matrix[cell.row][cell.col] = cell;\n        }\n      });\n\n      return matrix;\n    }, [processedData.cells, gridDimensions]);\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={heatmapId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-heatmap glass-radius-lg glass-backdrop-blur-md glass-border glass-border-white/10 glass-overflow-hidden glass-w-full glass-min-w-0 glass-surface-dark/40\",\n          className\n        )}\n        style={{\n          ...heatmapSurfaceStyle,\n          ...style,\n          maxHeight:\n            resolvedMaxHeight ?? (compact || contained ? \"240px\" : undefined),\n          overflow:\n            compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n        }}\n        {...props}\n      >\n        <Motion\n          preset={\n            !prefersReducedMotion && respectMotionPreference && animated\n              ? \"fadeIn\"\n              : \"none\"\n          }\n          className=\"glass-relative glass-w-full glass-min-w-0\"\n        >\n          <div\n            ref={containerRef}\n            className={cn(\n              \"glass-flex\",\n              legendPosition === \"left\" && \"glass-flex-row-reverse\",\n              legendPosition === \"right\" && \"glass-flex-row\",\n              legendPosition === \"top\" && \"glass-flex-col-reverse\",\n              legendPosition === \"bottom\" && \"glass-flex-col\"\n            )}\n            style={{ minWidth: 0 }}\n          >\n            {/* Legend */}\n            {effectiveShowLegend && (\n              <div\n                className={cn(\n                  \"glass-flex-shrink-0\",\n                  compact ? \"glass-p-2\" : \"glass-p-3\"\n                )}\n                style={{ minWidth: 0, maxWidth: \"100%\" }}\n              >\n                {renderLegend()}\n              </div>\n            )}\n\n            {/* Main Content */}\n            <div\n              className={cn(\n                \"glass-flex-1 glass-overflow-auto glass-min-w-0 glass-radius-lg\",\n                compact ? \"glass-p-2\" : \"glass-p-3\"\n              )}\n              style={{\n                ...heatmapInsetStyle,\n                maxWidth: \"100%\",\n              }}\n            >\n              {!hasCells ? (\n                <ContrastGuard>\n                  <div className=\"glass-text-sm glass-text-secondary glass-text-center glass-p-10\">\n                    No heatmap data available.\n                  </div>\n                </ContrastGuard>\n              ) : (\n                <div className=\"glass-flex glass-min-w-0\">\n                  {yAxis && (\n                    <div className=\"glass-flex glass-flex-col glass-justify-between glass-mr-2\">\n                      {yAxis.title && (\n                        <ContrastGuard>\n                          <div className=\"glass-text-sm glass-font-medium glass-text-primary glass-mb-2 glass-writing-mode-vertical-lr glass-transform glass-rotate-180\">\n                            {yAxis.title}\n                          </div>\n                        </ContrastGuard>\n                      )}\n                      <div className=\"glass-flex glass-flex-col glass-justify-between glass-h-full\">\n                        {yAxis.labels?.map((label, index) => (\n                          <div\n                            key={index}\n                            className=\"glass-text-xs glass-text-secondary glass-text-right glass-pr-2\"\n                          >\n                            <ContrastGuard>{label}</ContrastGuard>\n                          </div>\n                        ))}\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Heatmap Grid */}\n                  <div\n                    ref={heatmapRef}\n                    className=\"glass-relative\"\n                    onWheel={(e: React.WheelEvent) =>\n                      handleZoom(e.deltaY > 0 ? -0.1 : 0.1, e)\n                    }\n                  >\n                    {/* X-Axis */}\n                    {xAxis && (\n                      <div className=\"glass-mb-2\">\n                        {xAxis.title && (\n                          <div className=\"glass-text-sm glass-font-medium glass-text-primary glass-text-center glass-mb-2\">\n                            {xAxis.title}\n                          </div>\n                        )}\n                        <div\n                          className=\"glass-flex glass-justify-between\"\n                          style={{\n                            width:\n                              (cellSize * internalZoomLevel + cellGap) *\n                                gridDimensions.cols -\n                              cellGap,\n                          }}\n                        >\n                          {xAxis.labels?.map((label, index) => (\n                            <div\n                              key={index}\n                              className=\"glass-text-xs glass-text-secondary glass-text-center\"\n                            >\n                              <ContrastGuard>{label}</ContrastGuard>\n                            </div>\n                          ))}\n                        </div>\n                      </div>\n                    )}\n\n                    {/* Grid */}\n                    <div\n                      className=\"glass-grid glass-gap-px\"\n                      style={{\n                        gridTemplateColumns: `repeat(${gridDimensions.cols}, ${cellSize * internalZoomLevel}px)`,\n                        gridTemplateRows: `repeat(${gridDimensions.rows}, ${cellSize * internalZoomLevel}px)`,\n                        gap: `${cellGap}px`,\n                      }}\n                    >\n                      {gridMatrix.map((row, rowIndex) =>\n                        row.map((cell, colIndex) => (\n                          <Motion\n                            key={`${rowIndex}-${colIndex}`}\n                            preset={\n                              !prefersReducedMotion &&\n                              respectMotionPreference &&\n                              animated\n                                ? \"scaleIn\"\n                                : \"none\"\n                            }\n                            delay={\n                              animated\n                                ? (rowIndex * gridDimensions.cols + colIndex) *\n                                  10\n                                : 0\n                            }\n                          >\n                            {cell ? (\n                              renderCell ? (\n                                renderCell(cell)\n                              ) : (\n                                defaultRenderCell(cell)\n                              )\n                            ) : (\n                              <div\n                                className=\"glass-surface-overlay glass-border glass-border-dashed glass-border-glass-border/30\"\n                                style={{\n                                  width: cellSize * internalZoomLevel,\n                                  height: cellSize * internalZoomLevel,\n                                }}\n                              />\n                            )}\n                          </Motion>\n                        ))\n                      )}\n                    </div>\n                  </div>\n                </div>\n              )}\n            </div>\n          </div>\n\n          {/* Tooltip */}\n          {showTooltips && hoveredCell && (\n            <div\n              className=\"glass-absolute glass-pointer-events-none glass-z-50\"\n              style={{\n                left: tooltipPosition.x + 10,\n                top: tooltipPosition.y - 10,\n                transform: \"translateY(-100%)\",\n              }}\n            >\n              {renderTooltip\n                ? renderTooltip(hoveredCell)\n                : defaultRenderTooltip(hoveredCell)}\n            </div>\n          )}\n\n          {/* Zoom Controls */}\n          {zoomable && (\n            <div className=\"glass-absolute glass-top-4 glass-right-4 glass-flex glass-flex-col glass-gap-1\">\n              <button\n                onClick={() => handleZoom(0.1)}\n                className=\"glass-w-8 glass-h-8 glass-flex glass-items-center glass-justify-center glass-radius-md glass-text-sm glass-font-bold glass-transition-all glass-hover-scale-105 glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                +\n              </button>\n              <button\n                onClick={() => handleZoom(-0.1)}\n                className=\"glass-w-8 glass-h-8 glass-flex glass-items-center glass-justify-center glass-radius-md glass-text-sm glass-font-bold glass-transition-all glass-hover-scale-105 glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                \u2212\n              </button>\n            </div>\n          )}\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassHeatmap.displayName = \"GlassHeatmap\";\n\nexport default GlassHeatmap;\n", "\"use client\";\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nconst codeSurfaceStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  border: \"1px solid rgba(124, 211, 255, 0.18)\",\n  boxShadow:\n    \"0 12px 28px rgba(2, 6, 23, 0.22), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n  color: \"rgba(248, 250, 252, 0.92)\",\n  maxWidth: \"100%\",\n  minWidth: 0,\n};\n\nexport interface GlassJSONViewerProps {\n  value: unknown;\n  className?: string;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n}\n\nexport function GlassJSONViewer({\n  value,\n  className,\n  compact = false,\n  contained = false,\n  maxHeight,\n}: GlassJSONViewerProps) {\n  const boundedHeight = maxHeight ?? (compact || contained ? 220 : undefined);\n\n  return (\n    <OptimizedGlass\n      data-glass-component\n      elevation={\"level1\"}\n      className={cn(\n        \"glass-json-viewer glass-radius-lg glass-overflow-auto glass-border\",\n        compact ? \"glass-p-2\" : \"glass-p-3\",\n        className\n      )}\n      style={{\n        ...codeSurfaceStyle,\n        ...(boundedHeight !== undefined\n          ? {\n              maxHeight:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n            }\n          : null),\n      }}\n    >\n      <ContrastGuard>\n        <pre\n          className={cn(\n            compact ? \"glass-text-[11px]\" : \"glass-text-xs\",\n            \"glass-whitespace-pre-wrap\"\n          )}\n          style={{\n            margin: 0,\n            color: \"rgba(248, 250, 252, 0.9)\",\n            whiteSpace: \"pre-wrap\",\n            overflowWrap: \"break-word\",\n            wordBreak: \"normal\",\n            lineHeight: 1.55,\n            fontFamily:\n              \"var(--glass-font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)\",\n          }}\n        >\n          {JSON.stringify(value, null, 2)}\n        </pre>\n      </ContrastGuard>\n    </OptimizedGlass>\n  );\n}\n\nexport default GlassJSONViewer;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Loader2 } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\n\nexport interface GlassLoadingStateProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  label?: string;\n  description?: string;\n  variant?: \"spinner\" | \"skeleton\" | \"progress\";\n  progress?: number;\n  rows?: number;\n}\n\nexport const GlassLoadingState = forwardRef<\n  HTMLDivElement,\n  GlassLoadingStateProps\n>(\n  (\n    {\n      label = \"Loading\",\n      description,\n      variant = \"spinner\",\n      progress,\n      rows = 3,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const clampedProgress =\n      typeof progress === \"number\" ? Math.min(100, Math.max(0, progress)) : 0;\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        data-glass-component\n        role=\"status\"\n        aria-live=\"polite\"\n        aria-busy=\"true\"\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        className={cn(\"glass-space-y-4 glass-p-5\", className)}\n        {...props}\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-3\">\n          <Loader2\n            aria-hidden=\"true\"\n            className={cn(\n              \"glass-h-5 glass-w-5 glass-text-primary\",\n              variant === \"spinner\" && \"glass-animate-spin\"\n            )}\n          />\n          <div className=\"glass-space-y-0.5\">\n            <p className=\"glass-text-sm glass-font-medium glass-text-primary\">\n              {label}\n            </p>\n            {description ? (\n              <p className=\"glass-text-xs glass-text-secondary\">\n                {description}\n              </p>\n            ) : null}\n          </div>\n        </div>\n        {variant === \"skeleton\" ? (\n          <div className=\"glass-space-y-2\" aria-hidden=\"true\">\n            {Array.from({ length: rows }).map((_, index) => (\n              <div\n                key={index}\n                className=\"glass-h-3 glass-rounded-full glass-bg-white/12\"\n                style={{ width: `${96 - index * 14}%` }}\n              />\n            ))}\n          </div>\n        ) : null}\n        {variant === \"progress\" ? (\n          <div\n            className=\"glass-h-2 glass-overflow-hidden glass-rounded-full glass-bg-white/10\"\n            role=\"progressbar\"\n            aria-valuemin={0}\n            aria-valuemax={100}\n            aria-valuenow={clampedProgress}\n          >\n            <div\n              className=\"glass-h-full glass-rounded-full glass-bg-primary\"\n              style={{ width: `${clampedProgress}%` }}\n            />\n          </div>\n        ) : null}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassLoadingState.displayName = \"GlassLoadingState\";\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassLoadingSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Number of skeleton rows to display */\n  rows?: number;\n  /** Height of each row */\n  height?: string | number;\n  /** Width of the skeleton */\n  width?: string | number;\n  /** Whether to show avatar skeleton */\n  avatar?: boolean;\n  /** Avatar size */\n  avatarSize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Whether to animate the skeleton */\n  animate?: boolean;\n  /** Layout variant */\n  variant?: \"default\" | \"card\" | \"list\" | \"table\" | \"form\" | \"dashboard\";\n  /** Show shimmer effect */\n  shimmer?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA label for the loading skeleton */\n  \"aria-label\"?: string;\n}\n\nexport const GlassLoadingSkeleton = forwardRef<\n  HTMLDivElement,\n  GlassLoadingSkeletonProps\n>(\n  (\n    {\n      rows = 3,\n      height = \"1rem\",\n      width = \"100%\",\n      avatar = false,\n      avatarSize = \"md\",\n      animate = true,\n      variant = \"default\",\n      shimmer = true,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      className,\n      children,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const skeletonId = useA11yId(\"skeleton\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldAnimate =\n      animate && (!respectMotionPreference || !prefersReducedMotion);\n    const shouldShimmer =\n      shimmer && (!respectMotionPreference || !prefersReducedMotion);\n\n    const avatarSizes = {\n      sm: \"glass-w-8 glass-h-8\",\n      md: \"glass-w-12 glass-h-12\",\n      lg: \"glass-w-16 glass-h-16\",\n      xl: \"glass-w-20 glass-h-20\",\n    };\n\n    const baseClasses = cn(\n      \"glass-skeleton\",\n      \"glass-radius-md\",\n      shouldShimmer && shouldAnimate && \"glass-animate-pulse\",\n      \"glass-backdrop-blur-md\"\n    );\n\n    // Consistent glassmorphism styling for all skeleton elements\n    const getSkeletonStyle = () => ({\n      background: `\n        linear-gradient(135deg, rgba(71, 85, 105, 0.58) 0%, rgba(30, 41, 59, 0.48) 50%, rgba(71, 85, 105, 0.52) 100%),\n        linear-gradient(135deg, rgba(15, 23, 42, 0.72) 0%, rgba(8, 13, 25, 0.68) 100%)\n      `,\n      border: \"1px solid rgba(148, 163, 184, 0.18)\",\n      boxShadow:\n        \"0 8px 20px rgba(2, 6, 23, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n    });\n\n    const renderBasicSkeleton = () => (\n      <div className=\"glass-auto-gap glass-auto-gap-md\">\n        {avatar && (\n          <div\n            className={cn(\n              \"glass-radius-full\",\n              baseClasses,\n              avatarSizes[avatarSize]\n            )}\n            style={{ ...getSkeletonStyle() }}\n          />\n        )}\n\n        {Array.from({ length: rows }, (_, index) => {\n          const isLast = index === rows - 1;\n          const rowWidth = isLast && rows > 1 ? \"80%\" : width;\n\n          return (\n            <div\n              key={index}\n              className={baseClasses}\n              style={{\n                height: typeof height === \"number\" ? `${height}px` : height,\n                width:\n                  typeof rowWidth === \"number\" ? `${rowWidth}px` : rowWidth,\n                ...getSkeletonStyle(),\n              }}\n            />\n          );\n        })}\n      </div>\n    );\n\n    const renderCardSkeleton = () => (\n      <OptimizedGlass\n        elevation={\"level1\"}\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className=\"glass-p-6\"\n        style={{\n          background:\n            \"var(--glass-primary-level3-surface)\",\n          border: \"1px solid rgba(148, 163, 184, 0.18)\",\n          boxShadow:\n            \"0 12px 28px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n        }}\n      >\n        <div className=\"glass-auto-gap glass-auto-gap-lg\">\n          {/* Header */}\n          <div className=\"glass-flex glass-items-center glass-gap-4\">\n            {avatar && (\n              <div\n                className={cn(\n                  \"glass-radius-full\",\n                  baseClasses,\n                  avatarSizes[avatarSize]\n                )}\n                style={{ ...getSkeletonStyle() }}\n              />\n            )}\n            <div className=\"glass-auto-gap glass-auto-gap-sm glass-flex-1\">\n              <div\n                className={cn(baseClasses, \"glass-h-5 glass-w-3/4\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n              <div\n                className={cn(baseClasses, \"glass-h-4 glass-w-1/2\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n            </div>\n          </div>\n\n          {/* Content */}\n          <div className=\"glass-auto-gap glass-auto-gap-sm\">\n            {Array.from({ length: rows }, (_, index) => (\n              <div\n                key={index}\n                className={cn(baseClasses, \"glass-h-4\")}\n                style={{\n                  width: index === rows - 1 ? \"60%\" : \"100%\",\n                  ...getSkeletonStyle(),\n                }}\n              />\n            ))}\n          </div>\n\n          {/* Actions */}\n          <div className=\"glass-flex glass-gap-3 glass-pt-2\">\n            <div\n              className={cn(baseClasses, \"glass-w-20 glass-radius-lg\")}\n              style={{ height: 36, ...getSkeletonStyle() }}\n            />\n            <div\n              className={cn(baseClasses, \"glass-w-16 glass-radius-lg\")}\n              style={{ height: 36, ...getSkeletonStyle() }}\n            />\n          </div>\n        </div>\n      </OptimizedGlass>\n    );\n\n    const renderListSkeleton = () => (\n      <div className=\"glass-auto-gap glass-auto-gap-md\">\n        {Array.from({ length: rows }, (_, index) => (\n          <div\n            key={index}\n            className=\"glass-flex glass-items-center glass-gap-4 glass-p-3\"\n          >\n            <div\n              className={cn(\n                \"glass-radius-full\",\n                baseClasses,\n                \"glass-w-10 glass-h-10\"\n              )}\n              style={{ ...getSkeletonStyle() }}\n            />\n            <div className=\"glass-auto-gap glass-auto-gap-sm glass-flex-1\">\n              <div\n                className={cn(baseClasses, \"glass-h-4 glass-w-3/4\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n              <div\n                className={cn(baseClasses, \"glass-h-3 glass-w-1/2\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n            </div>\n            <div\n              className={cn(\n                baseClasses,\n                \"glass-h-6 glass-w-16 glass-radius-md\"\n              )}\n              style={{ ...getSkeletonStyle() }}\n            />\n          </div>\n        ))}\n      </div>\n    );\n\n    const renderTableSkeleton = () => (\n      <div className=\"glass-auto-gap glass-auto-gap-sm\">\n        {/* Header */}\n        <div className=\"glass-grid glass-grid-cols-4 glass-gap-4 glass-p-4 glass-border-b glass-border-white/10\">\n          {Array.from({ length: 4 }, (_, index) => (\n            <div\n              key={index}\n              className={cn(baseClasses, \"glass-h-4 glass-w-16\")}\n              style={{ ...getSkeletonStyle() }}\n            />\n          ))}\n        </div>\n\n        {/* Rows */}\n        {Array.from({ length: rows }, (_, rowIndex) => (\n          <div\n            key={rowIndex}\n            className=\"glass-grid glass-grid-cols-4 glass-gap-4 glass-p-4\"\n          >\n            {Array.from({ length: 4 }, (_, colIndex) => (\n              <div\n                key={colIndex}\n                className={cn(baseClasses, \"glass-h-4\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n            ))}\n          </div>\n        ))}\n      </div>\n    );\n\n    const renderFormSkeleton = () => (\n      <div className=\"glass-auto-gap glass-auto-gap-2xl\">\n        {Array.from({ length: rows }, (_, index) => (\n          <div key={index} className=\"glass-auto-gap glass-auto-gap-sm\">\n            <div\n              className={cn(baseClasses, \"glass-h-4 glass-w-24\")}\n              style={{ ...getSkeletonStyle() }}\n            />\n            <div\n              className={cn(\n                baseClasses,\n                \"glass-h-10 glass-w-full glass-radius-lg\"\n              )}\n              style={{ ...getSkeletonStyle() }}\n            />\n          </div>\n        ))}\n\n        <div className=\"glass-flex glass-gap-3 glass-pt-4\">\n          <div\n            className={cn(baseClasses, \"glass-h-10 glass-w-24 glass-radius-lg\")}\n            style={{ ...getSkeletonStyle() }}\n          />\n          <div\n            className={cn(baseClasses, \"glass-h-10 glass-w-20 glass-radius-lg\")}\n            style={{ ...getSkeletonStyle() }}\n          />\n        </div>\n      </div>\n    );\n\n    const renderDashboardSkeleton = () => (\n      <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6\">\n        {Array.from({ length: rows }, (_, index) => (\n          <OptimizedGlass\n            elevation={\"level1\"}\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            key={index}\n            className=\"glass-p-6\"\n            style={{\n              background:\n                \"var(--glass-primary-level3-surface)\",\n              border: \"1px solid rgba(148, 163, 184, 0.18)\",\n              boxShadow:\n                \"0 12px 28px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n            }}\n          >\n            <div className=\"glass-auto-gap glass-auto-gap-lg\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <div\n                  className={cn(baseClasses, \"glass-h-5 glass-w-24\")}\n                  style={{ ...getSkeletonStyle() }}\n                />\n                <div\n                  className={cn(\n                    baseClasses,\n                    \"glass-h-6 glass-w-6 glass-radius-md\"\n                  )}\n                  style={{ ...getSkeletonStyle() }}\n                />\n              </div>\n\n              <div\n                className={cn(baseClasses, \"glass-h-8 glass-w-16\")}\n                style={{ ...getSkeletonStyle() }}\n              />\n\n              <div className=\"glass-auto-gap glass-auto-gap-sm\">\n                <div\n                  className={cn(baseClasses, \"glass-h-3 glass-w-full\")}\n                  style={{ ...getSkeletonStyle() }}\n                />\n                <div\n                  className={cn(baseClasses, \"glass-h-3 glass-w-3/4\")}\n                  style={{ ...getSkeletonStyle() }}\n                />\n              </div>\n            </div>\n          </OptimizedGlass>\n        ))}\n      </div>\n    );\n\n    const renderSkeleton = () => {\n      if (children) {\n        return children;\n      }\n\n      switch (variant) {\n        case \"card\":\n          return renderCardSkeleton();\n        case \"list\":\n          return renderListSkeleton();\n        case \"table\":\n          return renderTableSkeleton();\n        case \"form\":\n          return renderFormSkeleton();\n        case \"dashboard\":\n          return renderDashboardSkeleton();\n        default:\n          return renderBasicSkeleton();\n      }\n    };\n\n    return (\n      <Motion\n        preset={shouldAnimate ? \"fadeIn\" : undefined}\n        className={cn(\"glass-loading-skeleton\", className)}\n      >\n        <div\n          ref={ref}\n          id={skeletonId}\n          role=\"status\"\n          aria-label={ariaLabel || \"Loading content\"}\n          aria-busy=\"true\"\n          aria-live=\"polite\"\n          className=\"glass-relative glass-overflow-hidden glass-radius-md\"\n          data-testid={dataTestId}\n          {...props}\n        >\n          {renderSkeleton()}\n\n          {/* Premium Shimmer overlay */}\n          {shouldShimmer && (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-animate-glass-shimmer\"\n              style={{\n                transform: \"skewX(-12deg)\",\n                background:\n                  \"linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--glass-white) 16%, transparent) 45%, transparent 100%)\",\n              }}\n            />\n          )}\n        </div>\n      </Motion>\n    );\n  }\n);\n\nGlassLoadingSkeleton.displayName = \"GlassLoadingSkeleton\";\n\n// Utility components for common patterns\nexport const GlassSkeletonText = forwardRef<\n  HTMLDivElement,\n  Omit<GlassLoadingSkeletonProps, \"variant\">\n>((props, ref) => (\n  <GlassLoadingSkeleton ref={ref} variant=\"default\" {...props} />\n));\n\nexport const GlassSkeletonCard = forwardRef<\n  HTMLDivElement,\n  Omit<GlassLoadingSkeletonProps, \"variant\">\n>((props, ref) => <GlassLoadingSkeleton ref={ref} variant=\"card\" {...props} />);\n\nexport const GlassSkeletonList = forwardRef<\n  HTMLDivElement,\n  Omit<GlassLoadingSkeletonProps, \"variant\">\n>((props, ref) => <GlassLoadingSkeleton ref={ref} variant=\"list\" {...props} />);\n\nexport const GlassSkeletonTable = forwardRef<\n  HTMLDivElement,\n  Omit<GlassLoadingSkeletonProps, \"variant\">\n>((props, ref) => (\n  <GlassLoadingSkeleton ref={ref} variant=\"table\" {...props} />\n));\n\nGlassSkeletonText.displayName = \"GlassSkeletonText\";\nGlassSkeletonCard.displayName = \"GlassSkeletonCard\";\nGlassSkeletonList.displayName = \"GlassSkeletonList\";\nGlassSkeletonTable.displayName = \"GlassSkeletonTable\";\n\n// CSS for shimmer animation (should be added to globals.css)\nexport const skeletonAnimationCSS = `\n@keyframes shimmer {\n  0% {\n    transform: translateX(-100%) skewX(-12deg);\n  }\n  100% {\n    transform: translateX(200%) skewX(-12deg);\n  }\n}\n\n.animate-shimmer {\n  animation: shimmer 2s infinite;\n}\n`;\n\nexport default GlassLoadingSkeleton;\n", "\"use client\";\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nconst metricChipSurfaceStyle: React.CSSProperties = {\n  background:\n    \"var(--glass-primary-level3-surface)\",\n  border: \"1px solid rgba(148, 163, 184, 0.22)\",\n  boxShadow:\n    \"0 8px 20px rgba(2, 6, 23, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.07)\",\n};\n\nexport interface GlassMetricChipProps {\n  label: string;\n  value: string | number;\n  delta?: string;\n  intent?: \"default\" | \"success\" | \"warning\" | \"danger\";\n  icon?: React.ReactNode;\n  className?: string;\n}\n\nexport function GlassMetricChip({\n  label = \"Metric\",\n  value = \"--\",\n  delta,\n  intent = \"default\",\n  icon,\n  className,\n}: GlassMetricChipProps) {\n  const intentColor =\n    intent === \"success\"\n      ? \"text-emerald-300\"\n      : intent === \"warning\"\n        ? \"text-amber-300\"\n        : intent === \"danger\"\n          ? \"text-red-300\"\n          : \"glass-text-primary\";\n  return (\n    <OptimizedGlass\n      data-glass-component\n      elevation={\"level1\"}\n      className={cn(\n        \"glass-inline-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2 glass-radius-xl glass-border glass-border-white/10 glass-surface-dark/40\",\n        className\n      )}\n      style={metricChipSurfaceStyle}\n    >\n      {icon && <span className=\"glass-opacity-80\">{icon}</span>}\n      <ContrastGuard>\n        <span className=\"glass-text-xs glass-text-primary-opacity-70\">\n          {label}\n        </span>\n      </ContrastGuard>\n      <ContrastGuard>\n        <span className={cn(\"glass-font-semibold\", intentColor)}>{value}</span>\n      </ContrastGuard>\n      {delta && (\n        <ContrastGuard>\n          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n            {delta}\n          </span>\n        </ContrastGuard>\n      )}\n    </OptimizedGlass>\n  );\n}\n\nexport default GlassMetricChip;\n", "\"use client\";\nimport React, { forwardRef, useEffect, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface GlassProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Progress value (0-100)\n   */\n  value?: number;\n  /**\n   * Maximum value\n   */\n  max?: number;\n  /**\n   * Progress variant\n   */\n  variant?:\n    | \"default\"\n    | \"success\"\n    | \"warning\"\n    | \"error\"\n    | \"gradient\"\n    | \"primary\";\n  /**\n   * Progress size\n   */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Progress shape\n   */\n  shape?: \"glass-radius-md\" | \"pill\" | \"square\";\n  /**\n   * Whether to show value text\n   */\n  showValue?: boolean;\n  /**\n   * Custom value formatter\n   */\n  formatValue?: (value: number, max: number) => string;\n  /**\n   * Whether progress is indeterminate\n   */\n  indeterminate?: boolean;\n  /**\n   * Animation on value change\n   */\n  animated?: boolean;\n  /**\n   * Animation duration in ms\n   */\n  animationDuration?: number;\n  /**\n   * Whether to show stripes\n   */\n  striped?: boolean;\n  /**\n   * Custom label\n   */\n  label?: string;\n  /**\n   * Label position\n   */\n  labelPosition?: \"top\" | \"bottom\" | \"inline\";\n  /**\n   * Respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Optional camelCase test id for testing utilities\n   */\n  dataTestId?: string;\n}\n\n/**\n * GlassProgress component\n * A glassmorphism progress bar with various styles and animations\n */\nexport const GlassProgress = forwardRef<HTMLDivElement, GlassProgressProps>(\n  (\n    {\n      value = 0,\n      max = 100,\n      variant = \"default\",\n      size = \"md\",\n      shape = \"glass-radius-md\",\n      showValue = false,\n      formatValue,\n      indeterminate = false,\n      animated = true,\n      animationDuration = 500,\n      striped = false,\n      label,\n      labelPosition = \"top\",\n      respectMotionPreference = true,\n      className,\n      \"data-testid\": dataTestIdAttr,\n      dataTestId: dataTestIdProp,\n      ...props\n    },\n    ref\n  ) => {\n    const progressId = useA11yId(\"progress\");\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const [animatedValue, setAnimatedValue] = useState(0);\n    const [mounted, setMounted] = useState(false);\n    const shouldAnimate =\n      animated && (!respectMotionPreference || !prefersReducedMotion);\n\n    useEffect(() => {\n      setMounted(true);\n    }, []);\n\n    useEffect(() => {\n      if (!mounted || indeterminate) return;\n\n      if (shouldAnimate) {\n        const timer = setTimeout(() => {\n          setAnimatedValue(value);\n        }, ANIMATION.DURATION.fast / 3);\n        return () => clearTimeout(timer);\n      } else {\n        setAnimatedValue(value);\n      }\n    }, [value, animated, mounted, indeterminate]);\n\n    const percentage = indeterminate\n      ? 0\n      : Math.min(Math.max((animatedValue / max) * 100, 0), 100);\n\n    const sizeClasses = {\n      xs: \"glass-h-1\",\n      sm: \"glass-h-2\",\n      md: \"glass-h-3\",\n      lg: \"glass-h-4\",\n      xl: \"glass-h-6\",\n    };\n\n    const shapeClasses = {\n      \"glass-radius-md\": \"glass-radius-md\",\n      pill: \"glass-radius-full\",\n      square: \"glass-radius-none\",\n    };\n\n    const variantClasses = {\n      default: \"glass-surface-primary\",\n      success: \"glass-surface-success\",\n      warning: \"glass-surface-warning\",\n      error: \"glass-surface-danger\",\n      gradient: \"bg-gradient-to-r from-primary via-secondary to-accent\",\n      primary: \"glass-surface-primary\",\n    };\n\n    const trackClasses = cn(\n      \"glass-relative glass-w-full glass-overflow-hidden\",\n      \"bg-muted/30 glass-backdrop-blur-md\",\n      sizeClasses[size],\n      shapeClasses[shape]\n    );\n\n    const fillClasses = cn(\n      \"glass-h-full transition-all ease-out glass-relative\",\n      variantClasses[variant],\n      {\n        \"bg-stripes\": striped,\n        \"animate-pulse\": indeterminate,\n        \"animate-progress-indeterminate\": indeterminate,\n      }\n    );\n\n    const formatDisplayValue = () => {\n      if (formatValue) {\n        return formatValue(value, max);\n      }\n      return `${Math.round(percentage)}%`;\n    };\n\n    const getLabelContent = () => {\n      if (label) return label;\n      if (showValue) return formatDisplayValue();\n      return null;\n    };\n\n    const labelContent = getLabelContent();\n    const resolvedDataTestId =\n      dataTestIdAttr ?? dataTestIdProp ?? \"glassprogress\";\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"glass-w-full\", className)}\n        data-testid={resolvedDataTestId}\n        {...props}\n      >\n        {/* Top label */}\n        {labelContent && labelPosition === \"top\" && (\n          <div\n            id={`${progressId}-label`}\n            className=\"glass-flex glass-justify-between glass-items-center glass-mb-2\"\n          >\n            <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n              {label}\n            </span>\n            {showValue && (\n              <span className=\"glass-text-sm glass-text-secondary\">\n                {formatDisplayValue()}\n              </span>\n            )}\n          </div>\n        )}\n\n        {/* Progress track */}\n        <OptimizedGlass\n          elevation={undefined}\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          id={progressId}\n          className={trackClasses}\n          role=\"progressbar\"\n          aria-valuenow={indeterminate ? undefined : value}\n          aria-valuemin={0}\n          aria-valuemax={max}\n          aria-label={label || \"Progress\"}\n          aria-describedby={labelContent ? `${progressId}-label` : undefined}\n        >\n          {/* Progress fill */}\n          <div\n            className={fillClasses}\n            style={{\n              width: indeterminate ? \"100%\" : `${percentage}%`,\n              transitionDuration: shouldAnimate\n                ? `${animationDuration}ms`\n                : \"0ms\",\n            }}\n          >\n            {/* Sheen sweep on fill */}\n            <div className=\"glass-pointer-events-none glass-absolute glass-inset-0 glass-sheen\" />\n            {/* Inline label */}\n            {labelContent && labelPosition === \"inline\" && (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full glass-px-2\">\n                <ContrastGuard>\n                  <span className=\"glass-text-xs glass-font-medium glass-text-primary glass-mix-blend-difference\">\n                    {showValue ? formatDisplayValue() : label}\n                  </span>\n                </ContrastGuard>\n              </div>\n            )}\n\n            {/* Stripes overlay */}\n            {striped && (\n              <div className=\"glass-absolute glass-inset-0 glass-bg-stripes glass-opacity-20\" />\n            )}\n          </div>\n        </OptimizedGlass>\n\n        {/* Bottom label */}\n        {labelContent && labelPosition === \"bottom\" && (\n          <div\n            id={`${progressId}-label`}\n            className=\"glass-flex glass-justify-between glass-items-center glass-mt-2\"\n          >\n            <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n              {label}\n            </span>\n            {showValue && (\n              <span className=\"glass-text-sm glass-text-secondary\">\n                {formatDisplayValue()}\n              </span>\n            )}\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassProgress.displayName = \"GlassProgress\";\n\n/**\n * CircularProgress component\n */\nexport interface CircularProgressProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"size\"\n> {\n  /**\n   * Progress value (0-100)\n   */\n  value?: number;\n  /**\n   * Maximum value\n   */\n  max?: number;\n  /**\n   * Progress variant\n   */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\";\n  /**\n   * Circle size\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Stroke width\n   */\n  strokeWidth?: number;\n  /**\n   * Whether progress is indeterminate\n   */\n  indeterminate?: boolean;\n  /**\n   * Whether to show value text\n   */\n  showValue?: boolean;\n  /**\n   * Custom content in center\n   */\n  children?: React.ReactNode;\n}\n\nexport const CircularProgress = forwardRef<\n  HTMLDivElement,\n  CircularProgressProps\n>(\n  (\n    {\n      value = 0,\n      max = 100,\n      variant = \"default\",\n      size = \"md\",\n      strokeWidth,\n      indeterminate = false,\n      showValue = false,\n      children,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [animatedValue, setAnimatedValue] = useState(0);\n\n    useEffect(() => {\n      if (indeterminate) return;\n\n      const timer = setTimeout(() => {\n        setAnimatedValue(value);\n      }, ANIMATION.DURATION.fast / 3);\n      return () => clearTimeout(timer);\n    }, [value, indeterminate]);\n\n    const sizeConfig = {\n      sm: { size: 40, stroke: strokeWidth || 3 },\n      md: { size: 60, stroke: strokeWidth || 4 },\n      lg: { size: 80, stroke: strokeWidth || 5 },\n      xl: { size: 120, stroke: strokeWidth || 6 },\n    };\n\n    const config = sizeConfig[size];\n    const radius = (config.size - config.stroke) / 2;\n    const circumference = radius * 2 * Math.PI;\n    const percentage = Math.min(Math.max((animatedValue / max) * 100, 0), 100);\n    const strokeDashoffset = circumference - (percentage / 100) * circumference;\n\n    const variantColors = {\n      default: \"stroke-primary\",\n      success: \"stroke-success\",\n      warning: \"stroke-warning\",\n      error: \"stroke-destructive\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-relative glass-inline-flex glass-items-center glass-justify-center\",\n          className\n        )}\n        style={{ width: config.size, height: config.size }}\n        {...props}\n      >\n        <svg\n          className=\"glass-transform glass---rotate-90\"\n          width={config.size}\n          height={config.size}\n        >\n          {/* Background circle */}\n          <circle\n            cx={config.size / 2}\n            cy={config.size / 2}\n            r={radius}\n            stroke=\"currentColor\"\n            strokeWidth={config.stroke}\n            fill=\"transparent\"\n            className=\"glass-text-secondary\"\n          />\n\n          {/* Progress circle */}\n          <circle\n            cx={config.size / 2}\n            cy={config.size / 2}\n            r={radius}\n            stroke=\"currentColor\"\n            strokeWidth={config.stroke}\n            fill=\"transparent\"\n            strokeDasharray={circumference}\n            strokeDashoffset={\n              indeterminate ? circumference * 0.25 : strokeDashoffset\n            }\n            strokeLinecap=\"round\"\n            className={cn(\n              `transition-all var(--glass-motion-duration-normal) var(--glass-motion-easing-standard)`,\n              variantColors[variant],\n              {\n                \"animate-spin\": indeterminate,\n              }\n            )}\n            style={{\n              ...{\n                transformOrigin: \"50% 50%\",\n              },\n            }}\n          />\n          {/* Subtle glow overlay for finished arc */}\n          {!indeterminate && (\n            <circle\n              cx={config.size / 2}\n              cy={config.size / 2}\n              r={radius}\n              strokeWidth={config.stroke}\n              fill=\"transparent\"\n              strokeDasharray={circumference}\n              strokeDashoffset={strokeDashoffset}\n              className=\"glass-stroke-white-opacity-10\"\n            />\n          )}\n        </svg>\n\n        {/* Center content */}\n        <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n          {children ||\n            (showValue && (\n              <ContrastGuard>\n                <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                  {Math.round(percentage)}%\n                </span>\n              </ContrastGuard>\n            ))}\n        </div>\n      </div>\n    );\n  }\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n\n/**\n * StepProgress component\n */\nexport interface StepProgressProps {\n  /**\n   * Current step (0-based)\n   */\n  currentStep: number;\n  /**\n   * Total steps\n   */\n  totalSteps: number;\n  /**\n   * Step labels\n   */\n  steps?: string[];\n  /**\n   * Progress variant\n   */\n  variant?: \"default\" | \"numbered\" | \"minimal\";\n  /**\n   * Orientation\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether completed steps are clickable\n   */\n  clickable?: boolean;\n  /**\n   * Step click handler\n   */\n  onStepClick?: (step: number) => void;\n  className?: string;\n}\n\nexport function StepProgress({\n  currentStep,\n  totalSteps,\n  steps,\n  variant = \"default\",\n  orientation = \"horizontal\",\n  size = \"md\",\n  clickable = false,\n  onStepClick,\n  className,\n}: StepProgressProps) {\n  const sizeClasses = {\n    sm: {\n      indicator: \"glass-w-6 glass-h-6 glass-text-xs\",\n      line: orientation === \"horizontal\" ? \"h-0.5\" : \"w-0.5\",\n      label: \"glass-text-xs\",\n    },\n    md: {\n      indicator: \"glass-w-8 glass-h-8 glass-text-sm\",\n      line: orientation === \"horizontal\" ? \"glass-h-1\" : \"glass-w-1\",\n      label: \"glass-text-sm\",\n    },\n    lg: {\n      indicator: \"glass-w-10 glass-h-10 glass-text-base\",\n      line: orientation === \"horizontal\" ? \"glass-h-2\" : \"glass-w-2\",\n      label: \"glass-text-base\",\n    },\n  };\n\n  const config = sizeClasses[size];\n\n  const getStepStatus = (stepIndex: number) => {\n    if (stepIndex < currentStep) return \"completed\";\n    if (stepIndex === currentStep) return \"current\";\n    return \"pending\";\n  };\n\n  const handleStepClick = (stepIndex: number) => {\n    if (clickable && stepIndex <= currentStep && onStepClick) {\n      onStepClick(stepIndex);\n    }\n  };\n\n  return (\n    <div\n      className={cn(\n        \"glass-flex\",\n        orientation === \"horizontal\" ? \"glass-items-center\" : \"glass-flex-col\",\n        className\n      )}\n    >\n      {Array.from({ length: totalSteps }, (_, index) => {\n        const status = getStepStatus(index);\n        const isLast = index === totalSteps - 1;\n        const stepLabel = steps?.[index];\n\n        return (\n          <div\n            key={index}\n            className={cn(\n              \"glass-flex glass-items-center\",\n              orientation === \"vertical\" && \"glass-flex-col\",\n              !isLast && orientation === \"horizontal\" && \"glass-flex-1\"\n            )}\n          >\n            {/* Step indicator */}\n            <div\n              className={cn(\n                \"glass-flex glass-items-center glass-justify-center glass-radius-full glass-font-medium\",\n                `glass-border-2 transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                config.indicator,\n                {\n                  \"bg-primary glass-border-primary glass-text-primary\":\n                    status === \"completed\",\n                  \"bg-primary glass-border-primary glass-text-primary ring-2 ring-primary/20\":\n                    status === \"current\",\n                  \"bg-background glass-border-muted glass-text-secondary\":\n                    status === \"pending\",\n                  \"glass-cursor-pointer hover:glass-border-primary\":\n                    clickable && index <= currentStep,\n                }\n              )}\n              onClick={(e) => handleStepClick(index)}\n            >\n              {variant === \"numbered\" || !steps ? (\n                status === \"completed\" ? (\n                  <svg\n                    className=\"glass-w-4 glass-h-4\"\n                    fill=\"currentColor\"\n                    viewBox=\"0 0 20 20\"\n                  >\n                    <path\n                      fillRule=\"evenodd\"\n                      d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n                      clipRule=\"evenodd\"\n                    />\n                  </svg>\n                ) : (\n                  index + 1\n                )\n              ) : (\n                <div\n                  className={cn(\n                    \"glass-w-2 glass-h-2 glass-radius-full\",\n                    status === \"completed\"\n                      ? \"bg-primary-foreground\"\n                      : status === \"current\"\n                        ? \"bg-primary-foreground\"\n                        : \"bg-muted-foreground\"\n                  )}\n                />\n              )}\n            </div>\n\n            {/* Step label */}\n            {stepLabel && orientation === \"horizontal\" && (\n              <span\n                className={cn(\n                  \"glass-ml-2 glass-font-medium\",\n                  config.label,\n                  status === \"current\" || status === \"completed\"\n                    ? \"glass-text-primary\"\n                    : \"glass-text-secondary\"\n                )}\n              >\n                {stepLabel}\n              </span>\n            )}\n\n            {/* Connecting line */}\n            {!isLast && (\n              <div\n                className={cn(\n                  \"glass-flex-1 bg-muted\",\n                  config.line,\n                  orientation === \"horizontal\" ? \"glass-mx-4\" : \"glass-my-4\",\n                  {\n                    \"bg-primary\": index < currentStep,\n                  }\n                )}\n              />\n            )}\n\n            {/* Vertical label */}\n            {stepLabel && orientation === \"vertical\" && (\n              <span\n                className={cn(\n                  \"glass-mt-2 glass-text-center glass-font-medium\",\n                  config.label,\n                  status === \"current\" || status === \"completed\"\n                    ? \"glass-text-primary\"\n                    : \"glass-text-secondary\"\n                )}\n              >\n                {stepLabel}\n              </span>\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassJSONViewer } from \"./GlassJSONViewer\";\n\nexport interface GlassSchemaViewerProps {\n  schema: unknown;\n  className?: string;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n}\n\nexport function GlassSchemaViewer({\n  schema,\n  className,\n  compact,\n  contained,\n  maxHeight,\n}: GlassSchemaViewerProps) {\n  return (\n    <GlassJSONViewer\n      value={schema}\n      className={cn(\"glass-schema-viewer\", className)}\n      compact={compact}\n      contained={contained}\n      maxHeight={maxHeight}\n    />\n  );\n}\n\nexport default GlassSchemaViewer;\n", "\"use client\";\nimport React, { SVGAttributes } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nconst DEFAULT_DATA = [0, 0];\n\nexport interface GlassSparklineProps extends SVGAttributes<SVGSVGElement> {\n  data?: number[];\n  width?: number | string;\n  height?: number;\n  /**\n   * Fill the available inline space and use a preview-safe height.\n   * Default rendering remains the existing fixed 120x32 sparkline.\n   */\n  compact?: boolean;\n  /**\n   * Alias for compact sizing when the sparkline is rendered inside a bounded\n   * card, widget, or preview surface.\n   */\n  contained?: boolean;\n  /**\n   * Optional rendered max-height. The SVG viewBox remains numeric so the path\n   * math stays deterministic while the rendered box can be constrained.\n   */\n  maxHeight?: number | string;\n  stroke?: string;\n  fill?: string;\n  className?: string;\n}\n\nexport function GlassSparkline({\n  data,\n  width = 120,\n  height = 32,\n  compact = false,\n  contained = false,\n  maxHeight,\n  stroke = \"#70d6ff\",\n  fill = \"none\",\n  className,\n  style,\n  preserveAspectRatio,\n  ...rest\n}: GlassSparklineProps) {\n  const isCompact = compact || contained;\n  const numericMaxHeight =\n    typeof maxHeight === \"number\"\n      ? maxHeight\n      : typeof maxHeight === \"string\"\n        ? Number.parseFloat(maxHeight)\n        : undefined;\n  const viewBoxWidth = typeof width === \"number\" ? width : 120;\n  const renderedWidth = isCompact ? \"100%\" : width;\n  const renderedHeight = isCompact\n    ? Math.min(\n        height,\n        Number.isFinite(numericMaxHeight) ? numericMaxHeight! : 28\n      )\n    : height;\n  const renderedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const sparklineData =\n    Array.isArray(data) && data.length ? data : DEFAULT_DATA;\n  const max = Math.max(...sparklineData);\n  const min = Math.min(...sparklineData);\n  const norm = (v: number) =>\n    height - 2 - ((v - min) / (max - min || 1)) * (height - 4);\n  const step =\n    sparklineData.length > 1\n      ? (viewBoxWidth - 4) / (sparklineData.length - 1)\n      : 0;\n  const d = sparklineData\n    .map((v, i) => `${i === 0 ? \"M\" : \"L\"} ${2 + i * step} ${norm(v)}`)\n    .join(\" \");\n\n  return (\n    <svg\n      data-glass-component\n      data-compact={isCompact || undefined}\n      viewBox={`0 0 ${viewBoxWidth} ${height}`}\n      width={renderedWidth}\n      height={renderedHeight}\n      preserveAspectRatio={isCompact ? \"none\" : preserveAspectRatio}\n      className={cn(\"glass-text-primary\", className)}\n      style={{\n        display: isCompact ? \"block\" : undefined,\n        minWidth: isCompact ? 0 : undefined,\n        maxWidth: \"100%\",\n        height: isCompact ? renderedHeight : \"auto\",\n        maxHeight: renderedMaxHeight,\n        flex: isCompact ? \"1 1 auto\" : undefined,\n        ...style,\n      }}\n      {...rest}\n    >\n      <path\n        d={d}\n        fill={fill}\n        stroke={stroke}\n        strokeWidth={2}\n        strokeLinejoin=\"round\"\n        strokeLinecap=\"round\"\n      />\n    </svg>\n  );\n}\n\nexport default GlassSparkline;\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassStatusDotProps {\n  status?: \"ok\" | \"warn\" | \"error\" | \"busy\" | \"offline\";\n  size?: number;\n  className?: string;\n}\n\nexport function GlassStatusDot({\n  status = \"ok\",\n  size = 8,\n  className,\n}: GlassStatusDotProps) {\n  const color =\n    status === \"ok\"\n      ? \"bg-emerald-400\"\n      : status === \"warn\"\n        ? \"bg-amber-400\"\n        : status === \"error\"\n          ? \"bg-red-400\"\n          : status === \"busy\"\n            ? \"bg-blue-400\"\n            : \"bg-slate-400\";\n  return (\n    <span\n      className={cn(\"glass-inline-block glass-radius-full\", color, className)}\n      style={{ width: size, height: size }}\n    />\n  );\n}\n\nexport default GlassStatusDot;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface TimelineItem {\n  /**\n   * Unique identifier for the timeline item\n   */\n  id: string;\n  /**\n   * Primary title/content\n   */\n  title: string;\n  /**\n   * Secondary description or subtitle\n   */\n  subtitle?: string;\n  /**\n   * Timestamp or time label\n   */\n  time?: string;\n  /**\n   * Optional icon to display\n   */\n  icon?: React.ReactNode;\n  /**\n   * Additional metadata\n   */\n  metadata?: Record<string, unknown>;\n  /**\n   * Custom styling for this item\n   */\n  className?: string;\n  /**\n   * Whether this item is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Click handler for interactive timelines\n   */\n  onClick?: () => void;\n}\n\nexport interface GlassTimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Timeline items to display\n   */\n  items: TimelineItem[];\n  /**\n   * Timeline variant\n   */\n  variant?: \"default\" | \"bordered\" | \"compact\";\n  /**\n   * Timeline size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Timeline orientation\n   */\n  orientation?: \"vertical\" | \"horizontal\";\n  /**\n   * Whether to show connecting line\n   */\n  showLine?: boolean;\n  /**\n   * Position of time labels\n   */\n  timePosition?: \"left\" | \"right\" | \"inline\";\n  /**\n   * Custom connector line color\n   */\n  lineColor?: string;\n  /**\n   * Custom dot color\n   */\n  dotColor?: string;\n  /**\n   * ARIA label for the timeline\n   */\n  \"aria-label\"?: string;\n}\n\n/**\n * GlassTimeline component\n * A timeline component with glassmorphism styling for displaying chronological events\n */\nexport const GlassTimeline = forwardRef<HTMLDivElement, GlassTimelineProps>(\n  (\n    {\n      items,\n      variant = \"default\",\n      size = \"md\",\n      orientation = \"vertical\",\n      showLine = true,\n      timePosition = \"right\",\n      lineColor,\n      dotColor,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const timelineId = useA11yId(\"timeline\");\n    const sizeClasses = {\n      sm: {\n        container: \"pl-4\",\n        dot: \"glass-w-2 glass-h-2 -glass-ml-1\",\n        line: \"left-1.5 w-px\",\n        content: \"glass-p-2 glass-text-sm\",\n        title: \"glass-text-sm\",\n        subtitle: \"glass-text-xs\",\n        time: \"glass-text-xs\",\n        gap: \"glass-gap-3\",\n      },\n      md: {\n        container: \"pl-6\",\n        dot: \"glass-w-3 glass-h-3 -glass-ml-1.5\",\n        line: \"left-2 w-px\",\n        content: \"glass-p-3 glass-text-base\",\n        title: \"glass-text-base\",\n        subtitle: \"glass-text-sm\",\n        time: \"glass-text-xs\",\n        gap: \"glass-gap-4\",\n      },\n      lg: {\n        container: \"pl-8\",\n        dot: \"glass-w-4 glass-h-4 -glass-ml-2\",\n        line: \"left-3 w-px\",\n        content: \"glass-p-4 glass-text-lg\",\n        title: \"glass-text-lg\",\n        subtitle: \"glass-text-base\",\n        time: \"glass-text-sm\",\n        gap: \"space-y-6\",\n      },\n    };\n\n    const variantClasses = {\n      default: \"glass-border-0\",\n      bordered: \"glass-border glass-border-glass-border/20\",\n      compact: \"glass-border-0\",\n    };\n\n    const config = sizeClasses[size];\n\n    if (orientation === \"horizontal\") {\n      return (\n        <div\n          data-glass-component\n          ref={ref}\n          id={timelineId}\n          className={cn(\n            \"glass-flex glass-items-start glass-gap-4 glass-overflow-x-auto\",\n            className\n          )}\n          role=\"list\"\n          aria-label={ariaLabel || \"Timeline\"}\n          {...props}\n        >\n          {showLine && (\n            <div\n              className=\"glass-absolute glass-top-8 glass-left-0 glass-right-0 glass-h-px glass-bg-glass-border-glass-opacity-20\"\n              style={{ backgroundColor: lineColor }}\n            />\n          )}\n          {items.map((item, index) => (\n            <div\n              key={item.id}\n              className=\"glass-relative glass-flex-shrink-0 glass-min-w-0\"\n              role=\"listitem\"\n            >\n              {/* Dot */}\n              <div\n                className={cn(\n                  \"glass-absolute top-6 left-1/2 -translate-x-1/2 glass-radius-full bg-primary shadow-lg\",\n                  config.dot\n                )}\n                style={{ backgroundColor: dotColor }}\n              />\n\n              {/* Content */}\n              <div className=\"glass-pt-12\">\n                <OptimizedGlass\n                  elevation=\"level1\"\n                  intensity=\"medium\"\n                  depth={2}\n                  tint=\"neutral\"\n                  border=\"subtle\"\n                  animation=\"none\"\n                  performanceMode=\"medium\"\n                  className={cn(\n                    \"glass-radius-lg max-w-xs\",\n                    config.content,\n                    variantClasses[variant]\n                  )}\n                >\n                  <div className=\"glass-min-w-0\">\n                    <div\n                      className={cn(\n                        \"glass-font-medium glass-text-primary glass-truncate\",\n                        config.title\n                      )}\n                    >\n                      <ContrastGuard>{item.title}</ContrastGuard>\n                    </div>\n                    {item.subtitle && (\n                      <ContrastGuard>\n                        <div\n                          className={cn(\n                            \"glass-text-secondary glass-truncate glass-mt-1\",\n                            config.subtitle\n                          )}\n                        >\n                          {item.subtitle}\n                        </div>\n                      </ContrastGuard>\n                    )}\n                    {item.time && (\n                      <ContrastGuard>\n                        <div\n                          className={cn(\n                            \"glass-text-secondary glass-mt-2\",\n                            config.time\n                          )}\n                        >\n                          {item.time}\n                        </div>\n                      </ContrastGuard>\n                    )}\n                  </div>\n                </OptimizedGlass>\n              </div>\n            </div>\n          ))}\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={ref}\n        id={timelineId}\n        data-testid={dataTestId || \"glasstimeline\"}\n        className={cn(\"glass-relative\", config.container, className)}\n        aria-label={ariaLabel || \"Timeline\"}\n        {...props}\n      >\n        {/* Connecting line */}\n        {showLine && (\n          <div\n            className={cn(\n              \"glass-absolute top-0 bottom-0\",\n              config.line,\n              \"bg-glass-border/20\"\n            )}\n            style={{ backgroundColor: lineColor }}\n          />\n        )}\n\n        {/* Timeline items */}\n        <ul className={cn(\"glass-relative\", config.gap)} role=\"list\">\n          {items.map((item, index) => {\n            const isLast = index === items.length - 1;\n\n            return (\n              <li key={item.id} className=\"glass-relative\" role=\"listitem\">\n                {/* Dot */}\n                <span\n                  className={cn(\n                    \"glass-absolute top-2 glass-radius-full bg-primary shadow-lg\",\n                    config.dot\n                  )}\n                  style={{ backgroundColor: dotColor }}\n                />\n\n                {/* Content */}\n                <OptimizedGlass\n                  elevation=\"level1\"\n                  intensity=\"medium\"\n                  depth={2}\n                  tint=\"neutral\"\n                  border=\"subtle\"\n                  animation=\"none\"\n                  performanceMode=\"medium\"\n                  className={cn(\n                    \"glass-radius-lg\",\n                    config.content,\n                    variantClasses[variant]\n                  )}\n                >\n                  <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-4\">\n                    <div className=\"glass-flex glass-items-start glass-gap-3 glass-min-w-0 glass-flex-1\">\n                      {item.icon && (\n                        <div className=\"glass-flex-shrink-0 glass-text-secondary glass-mt-0-5\">\n                          {item.icon}\n                        </div>\n                      )}\n                      <div className=\"glass-min-w-0 glass-flex-1\">\n                        <div\n                          className={cn(\n                            \"glass-font-medium glass-text-primary\",\n                            config.title\n                          )}\n                        >\n                          <ContrastGuard>{item.title}</ContrastGuard>\n                        </div>\n                        {item.subtitle && (\n                          <ContrastGuard>\n                            <div\n                              className={cn(\n                                \"glass-text-secondary glass-mt-1\",\n                                config.subtitle\n                              )}\n                            >\n                              {item.subtitle}\n                            </div>\n                          </ContrastGuard>\n                        )}\n                      </div>\n                    </div>\n\n                    {/* Time */}\n                    {item.time && timePosition === \"right\" && (\n                      <div\n                        className={cn(\n                          \"glass-text-secondary glass-whitespace-nowrap\",\n                          config.time\n                        )}\n                      >\n                        <ContrastGuard>{item.time}</ContrastGuard>\n                      </div>\n                    )}\n                  </div>\n\n                  {/* Inline time */}\n                  {item.time && timePosition === \"inline\" && (\n                    <ContrastGuard>\n                      <div\n                        className={cn(\n                          \"glass-text-secondary glass-mt-2\",\n                          config.time\n                        )}\n                      >\n                        {item.time}\n                      </div>\n                    </ContrastGuard>\n                  )}\n                </OptimizedGlass>\n              </li>\n            );\n          })}\n        </ul>\n      </div>\n    );\n  }\n);\n\nGlassTimeline.displayName = \"GlassTimeline\";\n\nexport default GlassTimeline;\n\n/**\n * TimelineItem utility component for building timeline structures\n */\nexport interface TimelineItemComponentProps extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Timeline item data\n   */\n  item: TimelineItem;\n  /**\n   * Whether this is the last item\n   */\n  isLast?: boolean;\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n}\n\nexport const TimelineItemComponent = forwardRef<\n  HTMLDivElement,\n  TimelineItemComponentProps\n>(({ item, isLast = false, size = \"md\", className, ...props }, ref) => {\n  return (\n    <div ref={ref} className={cn(\"timeline-item\", className)} {...props}>\n      {/* Implementation would mirror the individual item logic from above */}\n      <OptimizedGlass\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className=\"glass-radius-lg glass-p-3\"\n      >\n        <ContrastGuard>\n          <div className=\"glass-font-medium glass-text-primary\">\n            {item.title}\n          </div>\n        </ContrastGuard>\n        {item.subtitle && (\n          <ContrastGuard>\n            <div className=\"glass-text-sm glass-text-secondary glass-mt-1\">\n              {item.subtitle}\n            </div>\n          </ContrastGuard>\n        )}\n        {item.time && (\n          <ContrastGuard>\n            <div className=\"glass-text-xs glass-text-secondary glass-mt-2\">\n              {item.time}\n            </div>\n          </ContrastGuard>\n        )}\n      </OptimizedGlass>\n    </div>\n  );\n});\n\nTimelineItemComponent.displayName = \"TimelineItemComponent\";\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle, AlertTriangle, CheckCircle, Info, X } from \"@/icons\";\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useState,\n  forwardRef,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface ToastData {\n  id: string;\n  title?: string;\n  description?: string;\n  type?: \"success\" | \"error\" | \"warning\" | \"info\";\n  duration?: number;\n  action?: {\n    label: string;\n    onClick: () => void;\n  };\n  onClose?: () => void;\n}\n\nexport interface GlassToastProps\n  extends ToastData,\n    Omit<React.HTMLAttributes<HTMLDivElement>, keyof ToastData> {\n  /**\n   * Callback when toast is dismissed\n   */\n  onDismiss?: (id: string) => void;\n}\n\nexport interface GlassToastProviderProps {\n  /**\n   * Children\n   */\n  children: React.ReactNode;\n  /**\n   * Default toast duration (ms)\n   */\n  duration?: number;\n  /**\n   * Maximum number of toasts to show\n   */\n  maxToasts?: number;\n  /**\n   * Toast position\n   */\n  position?:\n    | \"top-left\"\n    | \"top-right\"\n    | \"bottom-left\"\n    | \"bottom-right\"\n    | \"top-center\"\n    | \"bottom-center\";\n}\n\nexport interface GlassToastViewportProps {\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Hotkey to focus viewport\n   */\n  hotkey?: string[];\n}\n\nexport interface GlassToastActionProps {\n  /**\n   * Action content\n   */\n  children: React.ReactNode;\n  /**\n   * Action className\n   */\n  className?: string;\n}\n\n// Toast context\nconst ToastContext = createContext<{\n  toasts: ToastData[];\n  addToast: (toast: Omit<ToastData, \"id\">) => string;\n  removeToast: (id: string) => void;\n  updateToast: (id: string, updates: Partial<ToastData>) => void;\n} | null>(null);\n\nconst defaultToastContext = {\n  toasts: [],\n  addToast: () => \"\",\n  removeToast: () => {},\n  updateToast: () => {},\n};\n\nexport const useToast = () => {\n  const context = useContext(ToastContext);\n  return context ?? defaultToastContext;\n};\n\n/**\n * GlassToast component\n * Individual toast notification\n */\nexport const GlassToast: React.FC<GlassToastProps> = ({\n  id,\n  title,\n  description,\n  type = \"info\",\n  duration = 0,\n  action,\n  onClose,\n  onDismiss,\n  className,\n  ...props\n}) => {\n  // Separate HTML attributes that should go to the glass container\n  const {\n    \"aria-label\": ariaLabel,\n    \"aria-describedby\": ariaDescribedBy,\n    \"aria-expanded\": ariaExpanded,\n    \"data-testid\": dataTestId,\n    ...motionProps\n  } = props;\n  const [isVisible, setIsVisible] = useState(true);\n  const [progress, setProgress] = useState(100);\n  const [paused, setPaused] = useState(false);\n\n  // Auto-dismiss timer\n  useEffect(() => {\n    if (duration <= 0) return;\n\n    const interval = setInterval(() => {\n      if (paused) return;\n      setProgress((prev) => {\n        if (prev <= 0) {\n          handleDismiss();\n          return 0;\n        }\n        return prev - 100 / (duration / 100);\n      });\n    }, ANIMATION.DURATION.fast / 3);\n\n    return () => clearInterval(interval);\n  }, [duration, paused]);\n\n  const handleDismiss = () => {\n    setIsVisible(false);\n    setTimeout(() => {\n      onDismiss?.(id);\n      onClose?.();\n    }, ANIMATION.DURATION.normal); // Wait for exit animation\n  };\n\n  const getTypeStyles = () => {\n    switch (type) {\n      case \"success\":\n        return {\n          icon: (\n            <CheckCircle className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n          ),\n          borderColor: \"glass-border-green-400/30\",\n          bgColor: \"bg-green-500/10\",\n        };\n      case \"error\":\n        return {\n          icon: (\n            <AlertCircle className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n          ),\n          borderColor: \"glass-border-red-400/30\",\n          bgColor: \"bg-red-500/10\",\n        };\n      case \"warning\":\n        return {\n          icon: (\n            <AlertTriangle className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n          ),\n          borderColor: \"glass-border-yellow-400/30\",\n          bgColor: \"bg-yellow-500/10\",\n        };\n      default:\n        return {\n          icon: <Info className=\"glass-w-5 glass-h-5 glass-text-primary\" />,\n          borderColor: \"glass-border-blue-400/30\",\n          bgColor: \"bg-blue-500/10\",\n        };\n    }\n  };\n\n  const { icon, borderColor, bgColor } = getTypeStyles();\n\n  if (!isVisible) return null;\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"slideRight\"\n      duration={ANIMATION.DURATION.normal}\n      {...motionProps}\n    >\n      <OptimizedGlass\n        elevation={\"level4\"}\n        intensity=\"strong\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        liftOnHover\n        className={cn(\n          \"glass-relative glass-w-full glass-max-w-full glass-p-4 glass-backdrop-blur-md\",\n          \"glass-border glass-border-white/20 shadow-2xl\",\n          bgColor,\n          className\n        )}\n        aria-label={ariaLabel}\n        aria-describedby={ariaDescribedBy}\n        aria-expanded={ariaExpanded}\n        data-testid={dataTestId}\n        onMouseEnter={() => setPaused(true)}\n        onMouseLeave={() => setPaused(false)}\n      >\n        {/* Progress bar */}\n        {duration > 0 && (\n          <div className=\"glass-absolute glass-top-0 glass-left-0 glass-right-0 glass-h-1 glass-surface-subtle/20 glass-radius-t-lg glass-overflow-hidden\">\n            <div\n              className={cn(\n                `glass-h-full transition-all var(--glass-motion-duration-fast) var(--glass-motion-easing-linear)`,\n                borderColor.replace(\"glass-border-\", \"bg-\")\n              )}\n              style={{ width: `${progress}%` }}\n            />\n          </div>\n        )}\n\n        <div className=\"glass-flex glass-items-start glass-gap-3 glass-min-w-0\">\n          {/* Icon */}\n          <div className=\"glass-flex-shrink-0 glass-mt-0-5\">{icon}</div>\n\n          {/* Content */}\n          <div className=\"glass-flex-1 glass-min-w-0\">\n            {title && (\n              <ContrastGuard>\n                <h4 className=\"glass-text-primary glass-font-medium glass-text-sm glass-leading-tight glass-mb-1\">\n                  {title}\n                </h4>\n              </ContrastGuard>\n            )}\n\n            {description && (\n              <ContrastGuard>\n                <p className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-leading-relaxed\">\n                  {description}\n                </p>\n              </ContrastGuard>\n            )}\n\n            {/* Action */}\n            {action && (\n              <GlassToastAction onClick={action.onClick} className=\"glass-mt-3\">\n                {action.label}\n              </GlassToastAction>\n            )}\n          </div>\n\n          {/* Close button */}\n          <GlassButton\n            onClick={handleDismiss}\n            className={`glass-flex-shrink-0 glass-p-1 glass-radius-md hover:glass-surface-subtle/10 glass-transition-colors glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n            aria-label=\"Close toast\"\n          >\n            <X className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-60 hover:glass-text-primary\" />\n          </GlassButton>\n        </div>\n      </OptimizedGlass>\n    </Motion>\n  );\n};\n\n/**\n * GlassToastProvider component\n * Provides toast context and manages toast state\n */\nexport const GlassToastProvider: React.FC<GlassToastProviderProps> = ({\n  children,\n  duration = 5000,\n  maxToasts = 5,\n  position = \"bottom-right\",\n}) => {\n  const [toasts, setToasts] = useState<ToastData[]>([]);\n\n  const addToast = (toast: Omit<ToastData, \"id\">): string => {\n    const id = `toast-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n    const newToast: ToastData = {\n      ...toast,\n      id,\n      duration: toast.duration ?? duration,\n    };\n\n    setToasts((prev) => {\n      const updated = [newToast, ...prev];\n      return updated.slice(0, maxToasts);\n    });\n\n    // Auto-remove after duration\n    if (newToast.duration && newToast.duration > 0) {\n      setTimeout(() => {\n        removeToast(id);\n      }, newToast.duration);\n    }\n\n    return id;\n  };\n\n  const removeToast = (id: string) => {\n    setToasts((prev) => prev.filter((toast) => toast.id !== id));\n  };\n\n  const updateToast = (id: string, updates: Partial<ToastData>) => {\n    setToasts((prev) =>\n      prev.map((toast) => (toast.id === id ? { ...toast, ...updates } : toast))\n    );\n  };\n\n  const contextValue = {\n    toasts,\n    addToast,\n    removeToast,\n    updateToast,\n  };\n\n  return (\n    <ToastContext.Provider value={contextValue}>\n      {children}\n      <GlassToastViewport position={position} />\n    </ToastContext.Provider>\n  );\n};\n\n/**\n * GlassToastViewport component\n * Container for displaying toasts\n */\nexport const GlassToastViewport: React.FC<\n  GlassToastViewportProps & {\n    position?: GlassToastProviderProps[\"position\"];\n  }\n> = ({ className, hotkey = [\"altKey\", \"KeyT\"], position = \"bottom-right\" }) => {\n  const { toasts, removeToast } = useToast();\n\n  // Keyboard shortcut to focus viewport\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      const shouldFocus = hotkey.every((key) => {\n        if (key === \"altKey\") return e.altKey;\n        if (key === \"ctrlKey\") return e.ctrlKey;\n        if (key === \"shiftKey\") return e.shiftKey;\n        if (key === \"metaKey\") return e.metaKey;\n        return e.key === key;\n      });\n\n      if (shouldFocus) {\n        // Focus first toast\n        const firstToast = document.querySelector(\"[data-toast-id]\");\n        if (firstToast instanceof HTMLElement) {\n          firstToast.focus();\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleKeyDown);\n  }, [hotkey]);\n\n  const positionClasses = {\n    \"top-left\": \"top-4 left-4\",\n    \"top-right\": \"top-4 right-4\",\n    \"bottom-left\": \"bottom-4 left-4\",\n    \"bottom-right\": \"bottom-4 right-4\",\n    \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n    \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"fixed glass-z-9999 glass-flex glass-flex-col glass-gap-3 pointer-events-none\",\n        positionClasses[position],\n        className\n      )}\n    >\n      {toasts.map((toast) => (\n        <div\n          key={toast.id}\n          data-toast-id={toast.id}\n          className=\"glass-pointer-events-auto\"\n        >\n          <GlassToast {...toast} onDismiss={removeToast} />\n        </div>\n      ))}\n    </div>\n  );\n};\n\n/**\n * GlassToastAction component\n * Action button for toast\n */\nexport const GlassToastAction: React.FC<\n  GlassToastActionProps & {\n    onClick?: () => void;\n  }\n> = ({ children, className, onClick }) => {\n  return (\n    <GlassButton\n      onClick={onClick}\n      className={cn(\n        \"glass-inline-flex glass-items-center glass-justify-center glass-px-3 glass-py-2\",\n        \"glass-text-xs glass-font-medium glass-text-primary/90\",\n        \"bg-white/10 hover:bg-white/15 glass-border glass-border-white/30 hover:glass-border-white/40\",\n        `glass-radius-md transition-all var(--glass-motion-duration-fast)`,\n        \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30\",\n        className\n      )}\n    >\n      {children}\n    </GlassButton>\n  );\n};\n\n/**\n * Hook for creating different types of toasts\n */\nexport const useToastActions = () => {\n  const { addToast } = useToast();\n\n  return {\n    success: (\n      title: string,\n      description?: string,\n      options?: Partial<ToastData>\n    ) => addToast({ ...options, title, description, type: \"success\" }),\n\n    error: (\n      title: string,\n      description?: string,\n      options?: Partial<ToastData>\n    ) => addToast({ ...options, title, description, type: \"error\" }),\n\n    warning: (\n      title: string,\n      description?: string,\n      options?: Partial<ToastData>\n    ) => addToast({ ...options, title, description, type: \"warning\" }),\n\n    info: (title: string, description?: string, options?: Partial<ToastData>) =>\n      addToast({ ...options, title, description, type: \"info\" }),\n\n    custom: (toast: Omit<ToastData, \"id\">) => addToast(toast),\n  };\n};\n", "\"use client\";\nimport React from \"react\";\nimport {\n  ColumnDef,\n  GlassDataTable,\n  GlassDataTableProps,\n  GlassDataTableRow,\n} from \"./GlassDataTable\";\n\nexport interface GlassVirtualTableProps<\n  T extends GlassDataTableRow = GlassDataTableRow,\n> extends Omit<GlassDataTableProps<T>, \"columns\" | \"data\"> {\n  columns?: ColumnDef<T>[];\n  rows?: T[];\n  children?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport function GlassVirtualTable<\n  T extends GlassDataTableRow = GlassDataTableRow,\n>({ columns, rows, ...rest }: GlassVirtualTableProps<T>) {\n  // In a future iteration this can swap to an actual virtualized list implementation.\n  // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n  return <GlassDataTable columns={columns ?? []} data={rows ?? []} {...rest} />;\n}\n\nexport default GlassVirtualTable;\n", "\"use client\";\n\nimport React, { forwardRef, type CSSProperties } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassEffectGroup } from \"../../primitives/LiquidGlassEffectGroup\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassBadgeClusterItem {\n  id: string;\n  label: string;\n  selected?: boolean;\n  disabled?: boolean;\n}\n\nexport interface LiquidGlassBadgeClusterProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  items: LiquidGlassBadgeClusterItem[];\n  expanded?: boolean;\n  onExpandedChange?: (expanded: boolean) => void;\n  maxCollapsed?: number;\n  selectionMode?: \"none\" | \"single\" | \"multiple\";\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nconst badgeClusterButtonStyle: CSSProperties = {\n  border: 0,\n  background: \"transparent\",\n  color: \"inherit\",\n  cursor: \"pointer\",\n  font: \"inherit\",\n};\n\nexport const LiquidGlassBadgeCluster = forwardRef<\n  HTMLDivElement,\n  LiquidGlassBadgeClusterProps\n>(\n  (\n    {\n      items,\n      expanded = false,\n      onExpandedChange,\n      maxCollapsed = 3,\n      selectionMode = \"none\",\n      materialVariant = \"regular\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const visible = expanded ? items : items.slice(0, maxCollapsed);\n    const hiddenCount = Math.max(items.length - visible.length, 0);\n    return (\n      <LiquidGlassMaterial\n        ref={ref}\n        material=\"liquid\"\n        variant={materialVariant}\n        radius=\"full\"\n        className={cn(\n          \"liquid-glass-badge-cluster glass-inline-flex\",\n          className\n        )}\n        data-selection-mode={selectionMode}\n        {...props}\n      >\n        <LiquidGlassEffectGroup className=\"glass-flex glass-items-center glass-gap-1 glass-p-1\">\n          {visible.map((item) => (\n            <span\n              key={item.id}\n              aria-pressed={item.selected}\n              className={cn(\n                \"glass-radius-full glass-px-2 glass-py-1 glass-text-xs\",\n                item.selected && \"glass-surface-primary\"\n              )}\n            >\n              {item.label}\n            </span>\n          ))}\n          {hiddenCount > 0 && (\n            <button\n              type=\"button\"\n              className=\"glass-radius-full glass-px-2 glass-py-1 glass-text-xs\"\n              style={badgeClusterButtonStyle}\n              onClick={() => onExpandedChange?.(!expanded)}\n            >\n              +{hiddenCount}\n            </button>\n          )}\n        </LiquidGlassEffectGroup>\n      </LiquidGlassMaterial>\n    );\n  }\n);\n\nLiquidGlassBadgeCluster.displayName = \"LiquidGlassBadgeCluster\";\n", "\"use client\";\n\nimport React, { forwardRef, useRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassCarouselRailProps extends React.HTMLAttributes<HTMLDivElement> {\n  items?: React.ReactNode[];\n  showScrollButtons?: boolean;\n}\n\nexport const LiquidGlassCarouselRail = forwardRef<HTMLDivElement, LiquidGlassCarouselRailProps>(\n  ({ items, showScrollButtons = true, className, children, ...props }, ref) => {\n    const scrollerRef = useRef<HTMLDivElement>(null);\n    const scrollBy = (delta: number) => scrollerRef.current?.scrollBy({ left: delta, behavior: \"smooth\" });\n    return (\n      <div ref={ref} className={cn(\"liquid-glass-carousel-rail glass-relative\", className)} data-liquid-glass-carousel-rail=\"true\" {...props}>\n        <LiquidGlassScrollEdge edge=\"left\" styleMode=\"soft\" targetRef={scrollerRef} />\n        <div ref={scrollerRef} className=\"glass-flex glass-gap-3 glass-overflow-x-auto glass-px-8 glass-py-2\" data-liquid-glass-scroll-target>\n          {items?.map((item, index) => <div key={index} className=\"glass-shrink-0\">{item}</div>)}\n          {children}\n        </div>\n        <LiquidGlassScrollEdge edge=\"right\" styleMode=\"soft\" targetRef={scrollerRef} />\n        {showScrollButtons && (\n          <>\n            <button type=\"button\" aria-label=\"Scroll left\" className=\"glass-absolute glass-left-0 glass-top-1/2\" onClick={() => scrollBy(-240)}>\u2039</button>\n            <button type=\"button\" aria-label=\"Scroll right\" className=\"glass-absolute glass-right-0 glass-top-1/2\" onClick={() => scrollBy(240)}>\u203A</button>\n          </>\n        )}\n      </div>\n    );\n  }\n);\n\nLiquidGlassCarouselRail.displayName = \"LiquidGlassCarouselRail\";\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\nimport React, { memo, useCallback, useEffect, useState } from \"react\";\nimport { useAccessibleAnimation } from \"../../hooks/useAccessibilitySettings\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassComponentErrorBoundary } from \"../../utils/errorBoundary\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassSkeletonLoaderProps {\n  /** Whether the loader is active */\n  loading?: boolean;\n  /** Custom loading text */\n  text?: string;\n  /** Size of the loader */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Animation variant */\n  variant?: \"pulse\" | \"wave\" | \"shimmer\" | \"sheen\";\n  /** Custom className */\n  className?: string;\n  /** Testing identifier */\n  \"data-testid\"?: string;\n  /** Children to show when not loading */\n  children?: React.ReactNode;\n  /** ARIA label for accessibility */\n  \"aria-label\"?: string;\n}\n\n/** Animation keyframes for different variants */\nconst pulseKeyframes = `\n  @keyframes glass-pulse {\n    0%, 100% {\n      opacity: 1;\n      transform: scale(1);\n    }\n    50% {\n      opacity: 0.7;\n      transform: scale(1.02);\n    }\n  }\n`;\n\nconst waveKeyframes = `\n  @keyframes glass-wave {\n    0% {\n      transform: translateX(-100%);\n    }\n    100% {\n      transform: translateX(100%);\n    }\n  }\n`;\n\nconst shimmerKeyframes = `\n  @keyframes glass-shimmer {\n    0% {\n      background-position: -200px 0;\n    }\n    100% {\n      background-position: calc(200px + 100%) 0;\n    }\n  }\n`;\n\nconst sheenKeyframes = `\n  @keyframes glass-sheen-move {\n    0% { transform: translateX(-150%) rotate(15deg); }\n    100% { transform: translateX(150%) rotate(15deg); }\n  }\n  @keyframes glass-depth-pulse {\n    0%, 100% { box-shadow: var(--glass-elev-2); }\n    50% { box-shadow: var(--glass-elev-2); }\n  }\n`;\n\nexport const GlassSkeletonLoader: React.FC<GlassSkeletonLoaderProps> = memo(\n  ({\n    // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n    loading = true,\n    text = \"Loading...\",\n    size = \"md\",\n    variant = \"pulse\",\n    className = \"\",\n    children,\n    \"aria-label\": ariaLabel,\n    \"data-testid\": dataTestId,\n  }) => {\n    const [mounted, setMounted] = useState(false);\n    const { shouldAnimate, animationDuration } = useAccessibleAnimation();\n\n    useEffect(() => {\n      setMounted(true);\n    }, []);\n\n    const renderContent = useCallback(() => {\n      if (!loading && mounted) {\n        return <>{children}</>;\n      }\n\n      const sizeClasses = {\n        sm: \"glass-w-6 glass-h-6\",\n        md: \"glass-w-8 glass-h-8\",\n        lg: \"glass-w-12 glass-h-12\",\n        xl: \"glass-w-16 glass-h-16\",\n      };\n\n      const getAnimationStyle = (): React.CSSProperties => {\n        if (!shouldAnimate) return {};\n\n        switch (variant) {\n          case \"wave\":\n            return {\n              position: \"relative\" as const,\n              overflow: \"hidden\",\n              background:\n                \"var(--glass-neutral-level2-surface)\",\n              backgroundSize: \"200px 100%\",\n              animation: `glass-wave ${animationDuration * 5}ms infinite`,\n            };\n          case \"shimmer\":\n            return {\n              position: \"relative\" as const,\n              overflow: \"hidden\",\n              background:\n                \"var(--glass-neutral-level2-surface)\",\n              backgroundSize: \"200px 100%\",\n              animation: `glass-shimmer ${animationDuration * 7}ms infinite, glass-depth-pulse ${animationDuration * 14}ms ease-in-out infinite`,\n            };\n          case \"sheen\":\n            return {\n              position: \"relative\" as const,\n              overflow: \"hidden\",\n              background:\n                \"var(--glass-neutral-level2-surface)\",\n              // sheen drawn by a before-like overlay via extra element below\n            };\n          case \"pulse\":\n          default:\n            return {\n              animation: `glass-pulse ${animationDuration * 7}ms ease-in-out infinite`,\n            };\n        }\n      };\n\n      return (\n        <div\n          data-glass-component\n          data-testid={dataTestId || \"glassskeletonloader\"}\n          className={cn(\n            \"glass-flex glass-flex-col glass-items-center glass-justify-center glass-gap-4\",\n            className\n          )}\n          aria-label={ariaLabel}\n        >\n          <div style={{ position: \"relative\" }}>\n            <OptimizedGlass\n              className={cn(\"glass-radius-full\", sizeClasses[size])}\n              style={{ ...getAnimationStyle() }}\n              intensity=\"medium\"\n              elevation=\"level1\"\n              interactive={false}\n            />\n            {shouldAnimate && variant === \"sheen\" && (\n              <span\n                aria-hidden\n                style={{\n                  position: \"absolute\",\n                  inset: 0,\n                  borderRadius: \"9999px\",\n                  background:\n                    \"var(--glass-neutral-level2-surface)\",\n                  filter: \"blur(6px) saturate(120%)\",\n                  transform: \"translateX(-150%) rotate(15deg)\",\n                  animation: `glass-sheen-move ${animationDuration * 6}ms ease-in-out infinite`,\n                  pointerEvents: \"none\",\n                }}\n              />\n            )}\n          </div>\n\n          {text && (\n            <OptimizedGlass\n              className=\"glass-px-4 glass-py-2 glass-radius-lg\"\n              intensity=\"subtle\"\n              elevation=\"level1\"\n            >\n              <span\n                className={cn(\n                  \"glass-text-sm glass-text-primary-70 glass-font-medium\"\n                )}\n              >\n                {text}\n              </span>\n            </OptimizedGlass>\n          )}\n        </div>\n      );\n    }, [\n      loading,\n      mounted,\n      children,\n      size,\n      variant,\n      className,\n      text,\n      shouldAnimate,\n      animationDuration,\n    ]);\n\n    return (\n      <GlassComponentErrorBoundary componentName=\"GlassSkeletonLoader\">\n        <>\n          <style>\n            {pulseKeyframes}\n            {waveKeyframes}\n            {shimmerKeyframes}\n            {sheenKeyframes}\n          </style>\n          {renderContent()}\n        </>\n      </GlassComponentErrorBoundary>\n    );\n  }\n);\n\n// Compound component for skeleton text\ninterface GlassSkeletonTextProps {\n  lines?: number;\n  width?: string | string[];\n  className?: string;\n}\n\nexport const GlassSkeletonText: React.FC<GlassSkeletonTextProps> = ({\n  lines = 1,\n  width = \"100%\",\n  className = \"\",\n}) => {\n  const { shouldAnimate } = useAccessibleAnimation();\n  const widths = Array.isArray(width) ? width : [width];\n\n  const getAnimationStyle = (): React.CSSProperties => {\n    return {\n      animation: \"glass-pulse 2s ease-in-out infinite\",\n    };\n  };\n\n  return (\n    <div className={cn(\"glass-gap-2\", className)}>\n      {Array.from({ length: lines }, (_, i) => (\n        <OptimizedGlass\n          key={i}\n          className={cn(\"glass-h-4 glass-radius-md\")}\n          style={{\n            width: widths[i % widths.length],\n            animation: \"glass-pulse 2s ease-in-out infinite\",\n            animationDelay: `${i * 0.1}s`,\n          }}\n          intensity=\"subtle\"\n          elevation=\"level1\"\n          interactive={false}\n        />\n      ))}\n    </div>\n  );\n};\n\n// Compound component for skeleton card\nexport const GlassSkeletonCard: React.FC<{\n  className?: string;\n}> = ({ className = \"\" }) => {\n  const basePulseStyle = { animation: \"glass-pulse 2s ease-in-out infinite\" };\n\n  return (\n    <OptimizedGlass\n      className={cn(\"glass-p-6 glass-gap-4\", className)}\n      intensity=\"medium\"\n      elevation=\"level1\"\n    >\n      <GlassSkeletonText lines={1} width=\"60%\" />\n      <GlassSkeletonText lines={2} width={[\"100%\", \"80%\"]} />\n      <div className={cn(\"glass-flex glass-gap-2\")}>\n        <OptimizedGlass\n          className={cn(\"glass-h-8 glass-w-16 glass-radius-md\")}\n          style={{ ...basePulseStyle }}\n          intensity=\"subtle\"\n          elevation=\"level1\"\n        />\n        <OptimizedGlass\n          className={cn(\"glass-h-8 glass-w-16 glass-radius-md\")}\n          style={{ ...basePulseStyle, animationDelay: \"0.2s\" }}\n          intensity=\"subtle\"\n          elevation=\"level1\"\n        />\n      </div>\n    </OptimizedGlass>\n  );\n};\n", "import React, {\n  Component,\n  ErrorInfo,\n  ReactNode,\n  useState,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlassCore as OptimizedGlass } from \"../primitives\";\nimport { getSafeNavigator, getSafeWindow, isBrowser } from \"./env\";\n\nexport interface ErrorBoundaryState {\n  hasError: boolean;\n  error: Error | null;\n  errorInfo: ErrorInfo | null;\n  errorId: string;\n  retryCount: number;\n}\n\nexport interface ErrorBoundaryProps {\n  /** Children to render */\n  children: ReactNode;\n  /** Custom fallback component */\n  fallback?: React.ComponentType<{\n    error: Error;\n    errorInfo: ErrorInfo;\n    retry: () => void;\n    errorId: string;\n  }>;\n  /** Maximum number of retries */\n  maxRetries?: number;\n  /** Whether to reset error state on props change */\n  resetOnPropsChange?: boolean;\n  /** Error reporting callback */\n  onError?: (error: Error, errorInfo: ErrorInfo, errorId: string) => void;\n  /** Reset callback */\n  onReset?: () => void;\n  /** Component name for debugging */\n  componentName?: string;\n}\n\n/**\n * Production-ready error boundary with glassmorphism styling\n */\nexport class GlassErrorBoundary extends Component<\n  ErrorBoundaryProps,\n  ErrorBoundaryState\n> {\n  private resetTimeoutId: NodeJS.Timeout | null = null;\n\n  constructor(props: ErrorBoundaryProps) {\n    super(props);\n\n    this.state = {\n      hasError: false,\n      error: null,\n      errorInfo: null,\n      errorId: \"\",\n      retryCount: 0,\n    };\n  }\n\n  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n    const errorId = `error-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n    return {\n      hasError: true,\n      error,\n      errorId,\n    };\n  }\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n    const { onError, componentName = \"Unknown\" } = this.props;\n    const { errorId } = this.state;\n\n    // Enhanced error info\n    const nav = getSafeNavigator();\n    const win = getSafeWindow();\n\n    const enhancedErrorInfo = {\n      ...errorInfo,\n      componentName,\n      timestamp: new Date().toISOString(),\n      userAgent: nav?.userAgent,\n      url: win?.location.href,\n    };\n\n    this.setState({ errorInfo });\n\n    // Report error\n    onError?.(error, errorInfo, errorId);\n\n    // Development logging\n    if (process.env.NODE_ENV === \"development\") {\n      // Use structured logging in development\n      const errorLog = {\n        type: \"ERROR_BOUNDARY\",\n        componentName,\n        errorId,\n        error: error.message,\n        stack: error.stack,\n        componentStack: errorInfo.componentStack,\n        timestamp: enhancedErrorInfo.timestamp,\n      };\n      console.group(`\uD83D\uDEA8 Error Boundary: ${componentName} (${errorId})`);\n      console.table(errorLog);\n      console.groupEnd();\n    }\n\n    // Production error reporting (you would integrate with your error service)\n    if (process.env.NODE_ENV === \"production\") {\n      this.reportErrorToService(error, enhancedErrorInfo, errorId);\n    }\n  }\n\n  componentDidUpdate(prevProps: ErrorBoundaryProps) {\n    const { resetOnPropsChange, children } = this.props;\n    const { hasError } = this.state;\n\n    // Reset error state if props changed and resetOnPropsChange is enabled\n    if (hasError && resetOnPropsChange && prevProps.children !== children) {\n      this.resetErrorBoundary();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.resetTimeoutId) {\n      clearTimeout(this.resetTimeoutId);\n    }\n  }\n\n  private async reportErrorToService(\n    error: Error,\n    errorInfo: any,\n    errorId: string\n  ) {\n    try {\n      // Example error reporting - replace with your actual service\n      const errorReport = {\n        errorId,\n        message: error.message,\n        stack: error.stack,\n        componentStack: errorInfo.componentStack,\n        timestamp: errorInfo.timestamp,\n        userAgent: errorInfo.userAgent,\n        url: errorInfo.url,\n        componentName: errorInfo.componentName,\n      };\n\n      // Production error reporting would be handled here\n      // Example: await errorTrackingService.report(errorReport);\n\n      // Example: Send to error tracking service\n      // await fetch('/api/errors', {\n      //   method: 'POST',\n      //   headers: { 'Content-Type': 'application/json' },\n      //   body: JSON.stringify(errorReport),\n      // });\n    } catch {\n      // Reporting failures should not cascade back into the UI.\n    }\n  }\n\n  private resetErrorBoundary = () => {\n    const { onReset } = this.props;\n\n    this.setState({\n      hasError: false,\n      error: null,\n      errorInfo: null,\n      errorId: \"\",\n      retryCount: 0,\n    });\n\n    if (this.resetTimeoutId) {\n      clearTimeout(this.resetTimeoutId);\n      this.resetTimeoutId = null;\n    }\n\n    onReset?.();\n  };\n\n  private handleRetry = () => {\n    const { maxRetries = 3 } = this.props;\n    const { retryCount } = this.state;\n\n    if (retryCount >= maxRetries) {\n      return;\n    }\n\n    this.setState((prevState) => ({\n      ...prevState,\n      hasError: false,\n      error: null,\n      errorInfo: null,\n      retryCount: prevState.retryCount + 1,\n    }));\n\n    this.props.onReset?.();\n  };\n\n  render() {\n    const { hasError, error, errorInfo, errorId, retryCount } = this.state;\n    const { children, fallback: CustomFallback, maxRetries = 3 } = this.props;\n\n    if (hasError && error && errorInfo) {\n      // Use custom fallback if provided\n      if (CustomFallback) {\n        return (\n          <CustomFallback\n            error={error}\n            errorInfo={errorInfo}\n            retry={this.handleRetry}\n            errorId={errorId}\n          />\n        );\n      }\n\n      // Default glassmorphism error UI\n      return (\n        <OptimizedGlass\n          className=\"glass-p-8 glass-m-4 glass-max-w-md glass-mx-auto glass-text-center\"\n          intensity=\"medium\"\n          elevation=\"level2\"\n        >\n          <div className=\"glass-auto-gap glass-auto-gap-lg\">\n            {/* Error Icon */}\n            <div className=\"glass-w-16 glass-h-16 glass-mx-auto glass-surface-danger/20 glass-radius-full glass-flex glass-items-center glass-justify-center\">\n              <svg\n                className=\"glass-w-8 glass-h-8 glass-text-primary\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                viewBox=\"0 0 24 24\"\n              >\n                <path\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                  strokeWidth={2}\n                  d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n                />\n              </svg>\n            </div>\n\n            {/* Error Message */}\n            <div>\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-2\">\n                Oops! Something went wrong\n              </h3>\n              <p className=\"glass-text-primary-opacity-70 glass-text-sm\">\n                {error.message || \"An unexpected error occurred\"}\n              </p>\n            </div>\n\n            {/* Error ID */}\n            <p className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-font-mono\">\n              Error ID: {errorId}\n            </p>\n\n            {/* Action Buttons */}\n            <div className=\"glass-flex glass-flex-col glass-auto-gap glass-auto-gap-sm\">\n              {retryCount < maxRetries && (\n                <button\n                  onClick={this.handleRetry}\n                  className=\"glass-px-4 glass-py-2 glass-surface-primary/20 glass-text-secondary glass-radius hover:glass-surface-blue/30 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  Try Again ({maxRetries - retryCount} attempts left)\n                </button>\n              )}\n\n              <button\n                onClick={() => getSafeWindow()?.location.reload?.()}\n                className=\"glass-px-4 glass-py-2 glass-surface-subtle/10 glass-text-primary-opacity-70 glass-radius hover:glass-surface-subtle/20 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Reload Page\n              </button>\n\n              {/* Development only: Show error details */}\n              {process.env.NODE_ENV === \"development\" && (\n                <details className=\"glass-mt-4 glass-text-left\">\n                  <summary className=\"glass-cursor-pointer glass-text-primary-glass-opacity-50 glass-text-xs\">\n                    Show Error Details\n                  </summary>\n                  <pre className=\"glass-mt-2 glass-p-3 glass-surface-dark/20 glass-radius glass-text-xs glass-text-primary-opacity-70 glass-overflow-auto glass-max-h-32\">\n                    {error.stack}\n                  </pre>\n                  <pre className=\"glass-mt-2 glass-p-3 glass-surface-dark/20 glass-radius glass-text-xs glass-text-primary-opacity-70 glass-overflow-auto glass-max-h-32\">\n                    {errorInfo.componentStack}\n                  </pre>\n                </details>\n              )}\n            </div>\n          </div>\n        </OptimizedGlass>\n      );\n    }\n\n    return children;\n  }\n}\n\n/**\n * HOC for wrapping components with error boundary\n */\nexport function withGlassErrorBoundary<P extends object>(\n  Component: React.ComponentType<P>,\n  errorBoundaryProps?: Omit<ErrorBoundaryProps, \"children\">\n) {\n  const ComponentWithRef = Component as React.ComponentType<\n    P & React.RefAttributes<unknown>\n  >;\n\n  const WrappedComponent = React.forwardRef<unknown, P>((props, ref) => {\n    const componentProps = {\n      ...(props as P),\n      ref,\n    } as P & React.RefAttributes<unknown>;\n\n    return (\n      <GlassErrorBoundary {...errorBoundaryProps}>\n        <ComponentWithRef {...componentProps} />\n      </GlassErrorBoundary>\n    );\n  });\n\n  WrappedComponent.displayName = `withGlassErrorBoundary(${Component.displayName || Component.name})`;\n\n  return WrappedComponent;\n}\n\n/**\n * Error boundary specifically for async operations\n */\nexport class GlassAsyncErrorBoundary extends Component<\n  ErrorBoundaryProps & { timeout?: number },\n  ErrorBoundaryState & { isTimeout: boolean }\n> {\n  private timeoutId: NodeJS.Timeout | null = null;\n\n  constructor(props: ErrorBoundaryProps & { timeout?: number }) {\n    super(props);\n\n    this.state = {\n      hasError: false,\n      error: null,\n      errorInfo: null,\n      errorId: \"\",\n      retryCount: 0,\n      isTimeout: false,\n    };\n  }\n\n  componentDidMount() {\n    const { timeout = 30000 } = this.props;\n\n    if (timeout > 0) {\n      this.timeoutId = setTimeout(() => {\n        this.setState({\n          hasError: true,\n          error: new Error(\"Operation timed out\"),\n          errorInfo: {\n            componentStack: \"Async operation timeout\",\n          } as ErrorInfo,\n          errorId: `timeout-${Date.now()}`,\n          isTimeout: true,\n        });\n      }, timeout);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n    }\n  }\n\n  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n    return {\n      hasError: true,\n      error,\n      errorId: `async-error-${Date.now()}`,\n    };\n  }\n\n  componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n    const { onError } = this.props;\n    const { errorId } = this.state;\n\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n    }\n\n    this.setState({ errorInfo });\n    onError?.(error, errorInfo, errorId);\n  }\n\n  render() {\n    const { hasError, error, isTimeout } = this.state;\n    const { children } = this.props;\n\n    if (hasError && error) {\n      return (\n        <OptimizedGlass\n          className=\"glass-p-6 glass-m-4 glass-text-center\"\n          intensity=\"medium\"\n          elevation=\"level1\"\n        >\n          <div className=\"glass-auto-gap glass-auto-gap-lg\">\n            <div className=\"glass-w-12 glass-h-12 glass-mx-auto glass-surface-warning/20 glass-radius-full glass-flex glass-items-center glass-justify-center\">\n              {isTimeout ? (\n                <svg\n                  className=\"glass-w-6 glass-h-6 glass-text-primary\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  viewBox=\"0 0 24 24\"\n                >\n                  <path\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                    strokeWidth={2}\n                    d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"\n                  />\n                </svg>\n              ) : (\n                <svg\n                  className=\"glass-w-6 glass-h-6 glass-text-primary\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  viewBox=\"0 0 24 24\"\n                >\n                  <path\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                    strokeWidth={2}\n                    d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\"\n                  />\n                </svg>\n              )}\n            </div>\n\n            <div>\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-2\">\n                {isTimeout ? \"Request Timed Out\" : \"Loading Failed\"}\n              </h3>\n              <p className=\"glass-text-primary-opacity-70 glass-text-sm\">\n                {isTimeout\n                  ? \"The operation took too long to complete\"\n                  : error.message || \"Failed to load content\"}\n              </p>\n            </div>\n\n            <button\n              onClick={() => getSafeWindow()?.location.reload?.()}\n              className=\"glass-px-4 glass-py-2 glass-surface-warning/20 glass-text-secondary glass-radius hover:glass-surface-yellow/30 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              Reload Page\n            </button>\n          </div>\n        </OptimizedGlass>\n      );\n    }\n\n    return children;\n  }\n}\n\n/**\n * Lightweight error boundary for non-critical components\n */\nexport const GlassLightErrorBoundary: React.FC<{\n  children: ReactNode;\n  fallback?: ReactNode;\n  onError?: (error: Error) => void;\n}> = ({ children, fallback, onError }) => {\n  const [hasError, setHasError] = useState(false);\n\n  useEffect(() => {\n    const handleError = (event: ErrorEvent) => {\n      setHasError(true);\n      onError?.(event.error);\n    };\n\n    const handleUnhandledRejection = (event: PromiseRejectionEvent) => {\n      setHasError(true);\n      onError?.(new Error(event.reason));\n    };\n\n    if (!isBrowser()) return;\n\n    const win = getSafeWindow();\n    if (!win) return;\n\n    win.addEventListener(\"error\", handleError);\n    win.addEventListener(\"unhandledrejection\", handleUnhandledRejection);\n    return () => {\n      win.removeEventListener(\"error\", handleError);\n      win.removeEventListener(\"unhandledrejection\", handleUnhandledRejection);\n    };\n  }, [onError]);\n\n  if (hasError) {\n    return (\n      <div className=\"glass-p-4 glass-surface-danger/10 glass-border glass-border-red/20 glass-radius glass-text-center\">\n        {fallback || (\n          <p className=\"glass-text-primary glass-text-sm\">\n            This component failed to load\n          </p>\n        )}\n      </div>\n    );\n  }\n\n  return <>{children}</>;\n};\n\n/**\n * Error boundary specifically for glass components\n */\nexport const GlassComponentErrorBoundary: React.FC<{\n  children: ReactNode;\n  componentName?: string;\n}> = ({ children, componentName = \"GlassComponent\" }) => {\n  return (\n    <GlassErrorBoundary\n      componentName={componentName}\n      fallback={({ error, retry, errorId }) => (\n        <OptimizedGlass\n          className=\"glass-p-4 glass-text-center glass-border glass-border-red/20\"\n          intensity=\"subtle\"\n          elevation=\"level1\"\n        >\n          <div className=\"glass-auto-gap glass-auto-gap-md\">\n            <div className=\"glass-w-10 glass-h-10 glass-mx-auto glass-surface-danger/20 glass-radius-full glass-flex glass-items-center glass-justify-center\">\n              <span className=\"glass-text-primary glass-text-sm\">\u26A0</span>\n            </div>\n\n            <div>\n              <h4 className=\"glass-text-primary glass-font-medium glass-text-sm\">\n                {componentName} Error\n              </h4>\n              <p className=\"glass-text-secondary/70 glass-text-xs glass-mt-1\">\n                {error.message}\n              </p>\n            </div>\n\n            <button\n              onClick={retry}\n              className=\"glass-px-3 glass-py-1 glass-surface-danger/20 glass-text-secondary glass-radius glass-text-xs hover:glass-surface-red/30 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              Retry\n            </button>\n\n            {process.env.NODE_ENV === \"development\" && (\n              <p className=\"glass-text-primary/50 glass-text-xs glass-font-mono\">\n                ID: {errorId}\n              </p>\n            )}\n          </div>\n        </OptimizedGlass>\n      )}\n    >\n      {children}\n    </GlassErrorBoundary>\n  );\n};\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport type SkeletonVariant =\n  | \"text\"\n  | \"rectangular\"\n  | \"circular\"\n  | \"glass-radius-md\";\n\nexport interface GlassSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Shape variant of the skeleton */\n  variant?: SkeletonVariant;\n  /** Width of the skeleton */\n  width?: string | number;\n  /** Height of the skeleton */\n  height?: string | number;\n  /** Animation variant */\n  animation?: \"pulse\" | \"wave\" | \"none\";\n  /** Number of skeleton lines (for text variant) */\n  lines?: number;\n  /** Spacing between lines (for text variant) */\n  spacing?: string;\n}\n\n// Animation keyframes\nconst skeletonKeyframes = `\n  @keyframes skeleton-pulse {\n    0%, 100% {\n      opacity: 1;\n    }\n    50% {\n      opacity: var(--glass-opacity-60);\n    }\n  }\n\n  @keyframes skeleton-wave {\n    0% {\n      transform: translateX(-100%);\n    }\n    100% {\n      transform: translateX(100%);\n    }\n  }\n`;\n\nconst skeletonSurfaceStyle: React.CSSProperties = {\n  background:\n    \"var(--glass-primary-level3-surface)\",\n  border: \"1px solid rgba(148, 163, 184, 0.18)\",\n  boxShadow:\n    \"0 8px 20px rgba(2, 6, 23, 0.14), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n};\n\nconst skeletonContainerStyle: React.CSSProperties = {\n  background:\n    \"var(--glass-primary-level3-surface)\",\n  border: \"1px solid rgba(148, 163, 184, 0.18)\",\n  boxShadow:\n    \"0 12px 28px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.06)\",\n};\n\n/**\n * GlassSkeleton component\n * A skeleton loader with glassmorphism styling for loading states\n */\nexport const GlassSkeleton = forwardRef<HTMLDivElement, GlassSkeletonProps>(\n  (\n    {\n      variant = \"text\",\n      width,\n      height,\n      animation = \"pulse\",\n      className,\n      lines = 1,\n      spacing = \"0.5rem\",\n      ...props\n    },\n    ref\n  ) => {\n    const getBaseStyles = (): React.CSSProperties => {\n      const baseWidth =\n        typeof width === \"number\" ? `${width}px` : width || \"100%\";\n      const baseHeight = typeof height === \"number\" ? `${height}px` : height;\n\n      switch (variant) {\n        case \"circular\":\n          const size = baseHeight || baseWidth || \"2rem\";\n          return {\n            width: size,\n            height: size,\n            borderRadius: \"50%\",\n          };\n        case \"glass-radius-md\":\n          return {\n            width: baseWidth,\n            height: baseHeight || \"1rem\",\n            borderRadius: \"var(--glass-radius-md)\",\n          };\n        case \"rectangular\":\n          return {\n            width: baseWidth,\n            height: baseHeight || \"1rem\",\n            borderRadius: \"var(--glass-radius-sm)\",\n          };\n        case \"text\":\n        default:\n          return {\n            width: baseWidth,\n            height: baseHeight || \"1rem\",\n            borderRadius: \"var(--glass-radius-xs)\",\n          };\n      }\n    };\n\n    const getAnimationStyles = (): React.CSSProperties => {\n      switch (animation) {\n        case \"pulse\":\n          return {\n            animation: `skeleton-pulse ${ANIMATION.DURATION.slower * 2}ms ${ANIMATION.EASING.easeInOut} infinite`,\n          };\n        case \"wave\":\n          return {\n            position: \"relative\",\n            overflow: \"hidden\",\n            background:\n              \"var(--glass-primary-level3-surface)\",\n            backgroundSize: \"200% 100%\",\n            animation: `skeleton-wave ${ANIMATION.DURATION.slower * 2}ms infinite`,\n          };\n        case \"none\":\n        default:\n          return {};\n      }\n    };\n\n    if (variant === \"text\" && lines > 1) {\n      return (\n        <>\n          <style>{skeletonKeyframes}</style>\n          <div ref={ref} className={cn(\"glass-gap-2\", className)} {...props}>\n            {Array.from({ length: lines }, (_, index) => {\n              const lineWidth = Array.isArray(width)\n                ? width[index % width.length]\n                : typeof width === \"string\" && width.includes(\",\")\n                  ? width.split(\",\")[index % width.split(\",\").length].trim()\n                  : index === lines - 1\n                    ? \"60%\"\n                    : \"100%\";\n\n              return (\n                <OptimizedGlass\n                  data-glass-component\n                  key={index}\n                  elevation=\"level1\"\n                  intensity=\"subtle\"\n                  depth={1}\n                  tint=\"neutral\"\n                  border=\"subtle\"\n                  animation=\"none\"\n                  performanceMode=\"low\"\n                  data-glass-skeleton=\"true\"\n                  data-skeleton-variant={variant}\n                  className={cn(\n                    \"block glass-skeleton\",\n                    animation === \"pulse\" && \"animate-pulse\"\n                  )}\n                  style={{\n                    ...skeletonSurfaceStyle,\n                    ...getBaseStyles(),\n                    width: lineWidth,\n                    ...getAnimationStyles(),\n                    animationDelay: `${index * 0.1}s`,\n                  }}\n                />\n              );\n            })}\n          </div>\n        </>\n      );\n    }\n\n    return (\n      <>\n        <style>{skeletonKeyframes}</style>\n        <OptimizedGlass\n          ref={ref}\n          elevation=\"level1\"\n          intensity=\"subtle\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"low\"\n          data-glass-skeleton=\"true\"\n          data-skeleton-variant={variant}\n          data-skeleton-animation={animation}\n          className={cn(\n            \"block glass-skeleton\",\n            animation === \"pulse\" && \"animate-pulse\",\n            className\n          )}\n          style={{\n            ...skeletonSurfaceStyle,\n            ...getBaseStyles(),\n            ...getAnimationStyles(),\n          }}\n          {...props}\n        />\n      </>\n    );\n  }\n);\n\nGlassSkeleton.displayName = \"GlassSkeleton\";\n\n// Pre-built skeleton components for common use cases\n\nexport const GlassSkeletonAvatar: React.FC<{\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  className?: string;\n}> = ({ size = \"md\", className = \"\" }) => {\n  const sizeClasses = {\n    sm: \"glass-w-8 glass-h-8\",\n    md: \"glass-w-10 glass-h-10\",\n    lg: \"glass-w-12 glass-h-12\",\n    xl: \"glass-w-16 glass-h-16\",\n  };\n\n  return (\n    <GlassSkeleton\n      variant=\"circular\"\n      className={`${sizeClasses[size]} ${className}`}\n      animation=\"pulse\"\n    />\n  );\n};\n\nexport const GlassSkeletonButton: React.FC<{\n  width?: string;\n  className?: string;\n}> = ({ width = \"80px\", className = \"\" }) => {\n  return (\n    <GlassSkeleton\n      variant=\"glass-radius-md\"\n      width={width}\n      height=\"2.5rem\"\n      className={className}\n      animation=\"pulse\"\n    />\n  );\n};\n\nexport const GlassSkeletonCard: React.FC<{\n  className?: string;\n}> = ({ className = \"\" }) => {\n  return (\n    <OptimizedGlass\n      elevation=\"level1\"\n      intensity=\"medium\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation=\"none\"\n      performanceMode=\"medium\"\n      className={cn(\"glass-p-6 glass-gap-4\", className)}\n      style={skeletonContainerStyle}\n    >\n      {/* Header skeleton */}\n      <div className=\"glass-flex glass-items-center glass-gap-4\">\n        <GlassSkeletonAvatar size=\"md\" />\n        <div className=\"glass-gap-2 glass-flex-1\">\n          <GlassSkeleton width=\"60%\" height=\"1rem\" />\n          <GlassSkeleton width=\"40%\" height=\"0.75rem\" />\n        </div>\n      </div>\n\n      {/* Content skeleton */}\n      <div className=\"glass-gap-3\">\n        <GlassSkeleton height=\"1rem\" />\n        <GlassSkeleton height=\"1rem\" width=\"80%\" />\n        <GlassSkeleton height=\"1rem\" width=\"60%\" />\n      </div>\n\n      {/* Actions skeleton */}\n      <div className=\"glass-flex glass-gap-2 glass-pt-2\">\n        <GlassSkeleton width=\"60px\" height=\"2rem\" variant=\"glass-radius-md\" />\n        <GlassSkeleton width=\"60px\" height=\"2rem\" variant=\"glass-radius-md\" />\n      </div>\n    </OptimizedGlass>\n  );\n};\n\nexport const GlassSkeletonTable: React.FC<{\n  rows?: number;\n  columns?: number;\n  className?: string;\n}> = ({ rows = 5, columns = 4, className = \"\" }) => {\n  return (\n    <OptimizedGlass\n      elevation=\"level1\"\n      intensity=\"medium\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation=\"none\"\n      performanceMode=\"medium\"\n      className={cn(\"glass-overflow-hidden\", className)}\n      style={skeletonContainerStyle}\n    >\n      {/* Table header */}\n      <div className=\"glass-p-4 glass-border-b glass-border-white/10\">\n        <div\n          className=\"glass-grid glass-gap-4\"\n          style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n        >\n          {Array.from({ length: columns }, (_, i) => (\n            <GlassSkeleton key={`header-${i}`} height=\"1rem\" width=\"80%\" />\n          ))}\n        </div>\n      </div>\n\n      {/* Table rows */}\n      <div className=\"glass-divide-y glass-divide-white-opacity-5\">\n        {Array.from({ length: rows }, (_, rowIndex) => (\n          <div key={`row-${rowIndex}`} className=\"glass-p-4\">\n            <div\n              className=\"glass-grid glass-gap-4\"\n              style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n            >\n              {Array.from({ length: columns }, (_, colIndex) => (\n                <GlassSkeleton\n                  key={`cell-${rowIndex}-${colIndex}`}\n                  height=\"1rem\"\n                  width={colIndex === columns - 1 ? \"60%\" : \"100%\"}\n                />\n              ))}\n            </div>\n          </div>\n        ))}\n      </div>\n    </OptimizedGlass>\n  );\n};\n\nexport const GlassSkeletonList: React.FC<{\n  items?: number;\n  className?: string;\n}> = ({ items = 3, className = \"\" }) => {\n  return (\n    <div className={`glass-gap-4 ${className}`}>\n      {Array.from({ length: items }, (_, index) => (\n        <div key={index} className=\"glass-flex glass-items-center glass-gap-4\">\n          <GlassSkeletonAvatar size=\"sm\" />\n          <div className=\"glass-flex-1 glass-gap-2\">\n            <GlassSkeleton height=\"1rem\" width=\"70%\" />\n            <GlassSkeleton height=\"0.75rem\" width=\"50%\" />\n          </div>\n          <GlassSkeleton\n            width=\"60px\"\n            height=\"1.5rem\"\n            variant=\"glass-radius-md\"\n          />\n        </div>\n      ))}\n    </div>\n  );\n};\n", "\"use client\";\nimport React, {\n  useState,\n  useEffect,\n  createContext,\n  useContext,\n  forwardRef,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport type NotificationType = \"success\" | \"error\" | \"warning\" | \"info\";\n\nexport interface GlassNotification {\n  id: string;\n  type: NotificationType;\n  title: string;\n  message?: string;\n  duration?: number;\n  action?: {\n    label: string;\n    onClick: () => void;\n  };\n  persistent?: boolean;\n}\n\nexport interface GlassNotificationCenterProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Position of the notification center */\n  position?:\n    | \"top-right\"\n    | \"top-left\"\n    | \"bottom-right\"\n    | \"bottom-left\"\n    | \"top-center\"\n    | \"bottom-center\";\n  /** Maximum number of notifications to show */\n  maxNotifications?: number;\n  /** Auto-hide delay for non-persistent notifications (ms) */\n  autoHideDelay?: number;\n  /** Animation preset for notifications */\n  animation?: \"slide\" | \"fade\" | \"scale\" | \"bounce\";\n  /** Whether to show clear all button */\n  showClearAll?: boolean;\n}\n\ninterface NotificationContextType {\n  notifications: GlassNotification[];\n  addNotification: (notification: Omit<GlassNotification, \"id\">) => void;\n  removeNotification: (id: string) => void;\n  clearAll: () => void;\n}\n\nconst NotificationContext = createContext<NotificationContextType | undefined>(\n  undefined\n);\n\nexport const useNotifications = () => {\n  const context = useContext(NotificationContext);\n  if (!context) {\n    return {\n      notifications: [],\n      addNotification: () => {},\n      removeNotification: () => {},\n      clearAll: () => {},\n    };\n  }\n  return context;\n};\n\nexport const GlassNotificationProvider: React.FC<{\n  children: React.ReactNode;\n}> = ({ children }) => {\n  const [notifications, setNotifications] = useState<GlassNotification[]>([]);\n\n  const addNotification = (notification: Omit<GlassNotification, \"id\">) => {\n    const id = Date.now().toString() + Math.random().toString(36).substr(2, 9);\n    const newNotification: GlassNotification = {\n      ...notification,\n      id,\n    };\n\n    setNotifications((prev: any) => [newNotification, ...prev]);\n\n    // Auto-remove non-persistent notifications\n    if (!newNotification.persistent) {\n      const duration =\n        newNotification.duration || ANIMATION.DURATION.slower * 5;\n      setTimeout(() => {\n        removeNotification(id);\n      }, duration);\n    }\n  };\n\n  const removeNotification = (id: string) => {\n    setNotifications((prev: any) =>\n      prev.filter((notification: any) => notification.id !== id)\n    );\n  };\n\n  const clearAll = () => {\n    setNotifications([]);\n  };\n\n  return (\n    <NotificationContext.Provider\n      data-glass-component\n      value={{\n        notifications,\n        addNotification,\n        removeNotification,\n        clearAll,\n      }}\n    >\n      {children}\n    </NotificationContext.Provider>\n  );\n};\n\n/**\n * GlassNotificationCenter component\n * A notification center with glassmorphism styling for managing toast notifications\n */\nexport const GlassNotificationCenter = forwardRef<\n  HTMLDivElement,\n  GlassNotificationCenterProps\n>(\n  (\n    {\n      position = \"top-right\",\n      maxNotifications = 5,\n      autoHideDelay = ANIMATION.DURATION.slower * 5,\n      animation = \"slide\",\n      showClearAll = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { notifications, removeNotification, clearAll } = useNotifications();\n\n    const positionClasses = {\n      \"top-right\": \"top-4 right-4\",\n      \"top-left\": \"top-4 left-4\",\n      \"bottom-right\": \"bottom-4 right-4\",\n      \"bottom-left\": \"bottom-4 left-4\",\n      \"top-center\": \"top-4 left-1/2 transform -translate-x-1/2\",\n      \"bottom-center\": \"bottom-4 left-1/2 transform -translate-x-1/2\",\n    };\n\n    const displayedNotifications = notifications.slice(0, maxNotifications);\n\n    const getTypeStyles = (type: NotificationType) => {\n      switch (type) {\n        case \"success\":\n          return {\n            icon: \"\u2713\",\n            bgClass: \"glass-border-green-500/20 bg-green-500/10\",\n            iconClass: \"text-green-400\",\n          };\n        case \"error\":\n          return {\n            icon: \"\u2715\",\n            bgClass: \"glass-border-red-500/20 bg-red-500/10\",\n            iconClass: \"text-red-400\",\n          };\n        case \"warning\":\n          return {\n            icon: \"\u26A0\",\n            bgClass: \"glass-border-yellow-500/20 bg-yellow-500/10\",\n            iconClass: \"text-yellow-400\",\n          };\n        case \"info\":\n        default:\n          return {\n            icon: \"\u2139\",\n            bgClass: \"glass-border-blue-500/20 bg-blue-500/10\",\n            iconClass: \"text-blue-400\",\n          };\n      }\n    };\n\n    const containerClassName = cn(\n      \"fixed z-50 glass-gap-2\",\n      positionClasses[position],\n      className\n    );\n\n    if (displayedNotifications.length === 0) {\n      return (\n        <div\n          ref={ref}\n          className={containerClassName}\n          aria-live=\"polite\"\n          data-empty\n          {...props}\n        >\n          <span className=\"glass-sr-only\">No notifications</span>\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={containerClassName}\n        aria-live=\"polite\"\n        {...props}\n      >\n        {/* Clear All Button */}\n        {showClearAll && notifications.length > 1 && (\n          <OptimizedGlass\n            elevation=\"level1\"\n            intensity=\"medium\"\n            depth={1}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"low\"\n            className=\"glass-px-3 glass-py-1 glass-radius-full glass-text-xs glass-cursor-pointer hover:glass-surface-subtle/10 glass-transition-colors\"\n            onClick={clearAll}\n          >\n            <ContrastGuard>Clear All ({notifications.length})</ContrastGuard>\n          </OptimizedGlass>\n        )}\n\n        {/* Notifications */}\n        {displayedNotifications.map((notification, index) => {\n          const typeStyles = getTypeStyles(notification.type);\n\n          const getMotionPreset = () => {\n            switch (animation) {\n              case \"fade\":\n                return \"fadeIn\";\n              case \"scale\":\n                return \"scaleIn\";\n              case \"bounce\":\n                return \"bounceIn\";\n              case \"slide\":\n              default:\n                return position.includes(\"right\")\n                  ? \"slideInRight\"\n                  : \"slideInLeft\";\n            }\n          };\n\n          return (\n            <Motion key={notification.id} delay={index * 100}>\n              <OptimizedGlass\n                elevation=\"level2\"\n                intensity=\"medium\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                animation=\"none\"\n                performanceMode=\"medium\"\n                className={cn(\n                  \"min-w-80 max-w-sm glass-p-4 glass-radius-lg glass-border glass-backdrop-blur-md\",\n                  typeStyles.bgClass\n                )}\n              >\n                <div className=\"glass-flex glass-items-start glass-gap-3\">\n                  {/* Icon */}\n                  <div\n                    className={`glass-flex-shrink-0 glass-w-6 glass-h-6 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-sm glass-font-bold ${typeStyles.iconClass}`}\n                  >\n                    {typeStyles.icon}\n                  </div>\n\n                  {/* Content */}\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    <ContrastGuard>\n                      <h4 className=\"glass-text-sm glass-font-semibold glass-text-primary\">\n                        {notification.title}\n                      </h4>\n                    </ContrastGuard>\n                    {notification.message && (\n                      <ContrastGuard>\n                        <p className=\"glass-mt-1 glass-text-sm glass-text-primary-glass-opacity-80\">\n                          {notification.message}\n                        </p>\n                      </ContrastGuard>\n                    )}\n\n                    {/* Action Button */}\n                    {notification.action && (\n                      <ContrastGuard>\n                        <button\n                          onClick={notification.action.onClick}\n                          className=\"glass-mt-2 glass-text-sm glass-font-medium glass-text-primary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                        >\n                          {notification.action.label}\n                        </button>\n                      </ContrastGuard>\n                    )}\n                  </div>\n\n                  {/* Close Button */}\n                  <button\n                    onClick={(e) => removeNotification(notification.id)}\n                    className=\"glass-flex-shrink-0 glass-w-5 glass-h-5 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary-glass-opacity-60 hover:glass-text-primary-glass-opacity-90 hover:glass-surface-subtle/10 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    \u2715\n                  </button>\n                </div>\n\n                {/* Progress Bar for Auto-hide */}\n                {!notification.persistent && notification.duration && (\n                  <div className=\"glass-mt-3 glass-h-1 glass-surface-subtle/20 glass-radius-full glass-overflow-hidden\">\n                    <div\n                      className={`glass-h-full glass-surface-subtle/40 glass-radius-full glass-transition-all glass-duration-[${ANIMATION.DURATION.fast / 6}ms] glass-ease-linear`}\n                      style={{\n                        animation: `shrink ${notification.duration}ms linear forwards`,\n                      }}\n                    />\n                  </div>\n                )}\n              </OptimizedGlass>\n            </Motion>\n          );\n        })}\n      </div>\n    );\n  }\n);\n\nGlassNotificationCenter.displayName = \"GlassNotificationCenter\";\n\n/**\n * Helper component for creating individual notifications\n */\nexport interface GlassNotificationItemProps extends React.HTMLAttributes<HTMLDivElement> {\n  notification: GlassNotification;\n  onClose: () => void;\n}\n\nexport const GlassNotificationItem = forwardRef<\n  HTMLDivElement,\n  GlassNotificationItemProps\n>(({ notification, onClose, className, ...props }, ref) => {\n  const typeStyles = getTypeStyles(notification.type);\n\n  return (\n    <OptimizedGlass\n      ref={ref}\n      elevation=\"level1\"\n      intensity=\"medium\"\n      depth={2}\n      tint=\"neutral\"\n      border=\"subtle\"\n      animation=\"none\"\n      performanceMode=\"medium\"\n      className={cn(\n        \"glass-p-4 glass-radius-lg glass-border\",\n        typeStyles.bgClass,\n        className\n      )}\n      {...props}\n    >\n      <div className=\"glass-flex glass-items-start glass-gap-3\">\n        <div\n          className={`glass-w-6 glass-h-6 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-sm ${typeStyles.iconClass}`}\n        >\n          {typeStyles.icon}\n        </div>\n        <div className=\"glass-flex-1\">\n          <ContrastGuard>\n            <h4 className=\"glass-font-semibold\">{notification.title}</h4>\n          </ContrastGuard>\n          {notification.message && (\n            <ContrastGuard>\n              <p className=\"glass-text-sm glass-opacity-80\">\n                {notification.message}\n              </p>\n            </ContrastGuard>\n          )}\n        </div>\n        <button\n          onClick={onClose}\n          className=\"glass-contrast-guard glass-focus glass-touch-target hover:glass-text-primary glass-text-primary-glass-opacity-60\"\n        >\n          \u2715\n        </button>\n      </div>\n    </OptimizedGlass>\n  );\n});\n\nGlassNotificationItem.displayName = \"GlassNotificationItem\";\n\n// Helper function for notification styles\nconst getTypeStyles = (type: NotificationType) => {\n  switch (type) {\n    case \"success\":\n      return {\n        icon: \"\u2713\",\n        bgClass: \"glass-border-green-500/20 bg-green-500/10\",\n        iconClass: \"text-green-400\",\n      };\n    case \"error\":\n      return {\n        icon: \"\u2715\",\n        bgClass: \"glass-border-red-500/20 bg-red-500/10\",\n        iconClass: \"text-red-400\",\n      };\n    case \"warning\":\n      return {\n        icon: \"\u26A0\",\n        bgClass: \"glass-border-yellow-500/20 bg-yellow-500/10\",\n        iconClass: \"text-yellow-400\",\n      };\n    case \"info\":\n    default:\n      return {\n        icon: \"\u2139\",\n        bgClass: \"glass-border-blue-500/20 bg-blue-500/10\",\n        iconClass: \"text-blue-400\",\n      };\n  }\n};\n\n// Add shrink animation for progress bar\nconst shrinkKeyframes = `\n  @keyframes shrink {\n    from { width: 100%; }\n    to { width: 0%; }\n  }\n`;\n\n// Inject keyframes safely with SSR check\nif (typeof document !== \"undefined\" && typeof window !== \"undefined\") {\n  const existingStyle = document.querySelector(\"#glass-notification-styles\");\n  if (!existingStyle) {\n    const style = document.createElement(\"style\");\n    style.id = \"glass-notification-styles\";\n    style.textContent = shrinkKeyframes;\n    document.head.appendChild(style);\n  }\n}\n\n/**\n * Utility hooks and helpers for notifications\n */\nexport const useNotificationCenter = () => {\n  const { addNotification, removeNotification, clearAll } = useNotifications();\n\n  const notify = {\n    success: (\n      title: string,\n      message?: string,\n      options?: Partial<GlassNotification>\n    ) => {\n      addNotification({ type: \"success\", title, message, ...options });\n    },\n    error: (\n      title: string,\n      message?: string,\n      options?: Partial<GlassNotification>\n    ) => {\n      addNotification({ type: \"error\", title, message, ...options });\n    },\n    warning: (\n      title: string,\n      message?: string,\n      options?: Partial<GlassNotification>\n    ) => {\n      addNotification({ type: \"warning\", title, message, ...options });\n    },\n    info: (\n      title: string,\n      message?: string,\n      options?: Partial<GlassNotification>\n    ) => {\n      addNotification({ type: \"info\", title, message, ...options });\n    },\n  };\n\n  return {\n    notify,\n    removeNotification,\n    clearAll,\n  };\n};\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\nimport React, {\n  forwardRef,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassAnimatedNumberProps {\n  /** The target number to animate to */\n  value: number;\n  /** Starting value for animation */\n  from?: number;\n  /** Animation duration in milliseconds */\n  duration?: number;\n  /** Animation easing function */\n  easing?: \"linear\" | \"easeIn\" | \"easeOut\" | \"easeInOut\";\n  /** Number of decimal places to show */\n  decimals?: number;\n  /** Whether to use comma separators */\n  separator?: boolean;\n  /** Prefix to show before the number */\n  prefix?: string;\n  /** Suffix to show after the number */\n  suffix?: string;\n  /** Custom formatter function */\n  formatter?: (value: number) => string;\n  /** Whether to animate on value change */\n  animateOnChange?: boolean;\n  /** Custom className */\n  className?: string;\n  /** Font size */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Animation variant */\n  variant?: \"count\" | \"scale\" | \"glow\";\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA label for the animated number */\n  \"aria-label\"?: string;\n}\n\n// Easing functions\nconst easingFunctions = {\n  linear: (t: number) => t,\n  easeIn: (t: number) => t * t,\n  easeOut: (t: number) => t * (2 - t),\n  easeInOut: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n};\n\nexport const GlassAnimatedNumber = forwardRef<\n  HTMLDivElement,\n  GlassAnimatedNumberProps\n>(\n  (\n    {\n      value = 0,\n      from = 0,\n      duration = ANIMATION.DURATION.normal,\n      easing = \"easeOut\",\n      decimals = 0,\n      separator = false,\n      prefix = \"\",\n      suffix = \"\",\n      formatter,\n      animateOnChange = true,\n      className = \"\",\n      size = \"md\",\n      variant = \"count\",\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [displayValue, setDisplayValue] = useState(from);\n    const [isAnimating, setIsAnimating] = useState(false);\n    const animationRef = useRef<number>();\n    const startTimeRef = useRef<number>();\n    const startValueRef = useRef<number>(from);\n    const elementRef = useRef<HTMLDivElement>(null);\n\n    // Forward ref\n    useImperativeHandle(ref, () => elementRef.current as HTMLDivElement);\n\n    const sizeClasses = {\n      sm: \"glass-text-lg\",\n      md: \"glass-text-2xl\",\n      lg: \"glass-text-4xl\",\n      xl: \"glass-text-6xl\",\n    };\n    const sizeClassName = sizeClasses[size] ?? sizeClasses.md;\n\n    // Format number with separators and decimals\n    const formatNumber = (num: number): string => {\n      if (formatter) {\n        return formatter(num);\n      }\n\n      let formatted = num.toFixed(decimals);\n\n      if (separator) {\n        // Add comma separators for thousands\n        formatted = formatted.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n      }\n\n      return `${prefix}${formatted}${suffix}`;\n    };\n\n    // Animation loop\n    const animate = (timestamp: number) => {\n      if (!startTimeRef.current) {\n        startTimeRef.current = timestamp;\n      }\n\n      const elapsed = timestamp - startTimeRef.current;\n      const progress = Math.min(elapsed / duration, 1);\n\n      const easedProgress = easingFunctions[easing](progress);\n      const currentValue =\n        startValueRef.current + (value - startValueRef.current) * easedProgress;\n\n      setDisplayValue(currentValue);\n\n      if (progress < 1) {\n        animationRef.current = requestAnimationFrame(animate);\n      } else {\n        setDisplayValue(value);\n        setIsAnimating(false);\n      }\n    };\n\n    // Start animation when value changes\n    useEffect(() => {\n      if (!animateOnChange || value === startValueRef.current) {\n        setDisplayValue(value);\n        return;\n      }\n\n      setIsAnimating(true);\n      startValueRef.current = displayValue;\n      startTimeRef.current = undefined;\n\n      // Cancel any existing animation\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n\n      // Start new animation\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [value, animateOnChange]);\n\n    // Cleanup on unmount\n    useEffect(() => {\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, []);\n\n    const getVariantStyles = (): React.CSSProperties => {\n      switch (variant) {\n        case \"scale\":\n          return {\n            transform: isAnimating ? \"scale(1.1)\" : \"scale(1)\",\n            transition: `transform var(--glass-motion-duration-fast) var(--glass-motion-easing-standard)`,\n          };\n        case \"glow\":\n          return {\n            textShadow: isAnimating\n              ? '0 0 20px var(--glass-border-hover), 0 0 40px ${glassStyles.borderColor || \"var(--glass-bg-hover)\"}'\n              : \"none\",\n            transition: `text-shadow var(--glass-motion-duration-normal) var(--glass-motion-easing-standard)`,\n          };\n        case \"count\":\n        default:\n          return {};\n      }\n    };\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={elementRef}\n        className={cn(\n          \"glass-inline-flex glass-items-center glass-justify-center glass-font-mono glass-font-bold glass-text-primary\",\n          sizeClassName,\n          className\n        )}\n        style={{ ...getVariantStyles() }}\n        elevation=\"level1\"\n        interactive={false}\n        aria-label={ariaLabel}\n        {...props}\n      >\n        <ContrastGuard>\n          <span className={cn(\"glass-tabular-nums\")}>\n            {formatNumber(displayValue)}\n          </span>\n        </ContrastGuard>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassAnimatedNumber.displayName = \"GlassAnimatedNumber\";\n\n// Compound component for animated counter with label\nexport const GlassAnimatedCounter: React.FC<{\n  value: number;\n  label?: string;\n  from?: number;\n  duration?: number;\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  className?: string;\n}> = ({\n  value,\n  label,\n  from = 0,\n  duration = ANIMATION.DURATION.slow,\n  size = \"lg\",\n  className = \"\",\n}) => {\n  return (\n    <div\n      className={cn(\n        \"glass-flex glass-flex-col glass-items-center glass-gap-2\",\n        className\n      )}\n    >\n      <GlassAnimatedNumber\n        value={value}\n        from={from}\n        duration={duration}\n        size={size}\n        variant=\"scale\"\n        separator={true}\n      />\n      {label && (\n        <OptimizedGlass\n          className={cn(\n            \"glass-text-sm glass-text-primary-70 glass-font-medium\"\n          )}\n          elevation=\"level1\"\n        >\n          {label}\n        </OptimizedGlass>\n      )}\n    </div>\n  );\n};\n\n// Compound component for animated progress/stat\nexport const GlassAnimatedStat: React.FC<{\n  value: number;\n  total?: number;\n  label?: string;\n  showPercentage?: boolean;\n  duration?: number;\n  className?: string;\n}> = ({\n  value,\n  total,\n  label,\n  showPercentage = false,\n  duration = ANIMATION.DURATION.normal,\n  className = \"\",\n}) => {\n  const percentage = total ? (value / total) * 100 : value;\n\n  return (\n    <div className={cn(\"glass-flex glass-flex-col glass-gap-2\", className)}>\n      <div className={cn(\"glass-flex glass-items-baseline glass-gap-2\")}>\n        <GlassAnimatedNumber\n          value={value}\n          duration={duration}\n          size=\"lg\"\n          separator={true}\n        />\n        {showPercentage && total && (\n          <GlassAnimatedNumber\n            value={percentage}\n            duration={duration}\n            decimals={1}\n            suffix=\"%\"\n            size=\"md\"\n            className={cn(\"glass-text-primary-80\")}\n          />\n        )}\n      </div>\n\n      {label && (\n        <OptimizedGlass\n          className={cn(\"glass-text-sm glass-text-primary-70\")}\n          elevation=\"level1\"\n        >\n          <ContrastGuard>{label}</ContrastGuard>\n        </OptimizedGlass>\n      )}\n\n      {/* Progress bar */}\n      {total && (\n        <OptimizedGlass\n          className={cn(\n            \"glass-h-2 glass-w-full glass-radius-full glass-overflow-hidden\"\n          )}\n          elevation=\"level1\"\n        >\n          <div\n            className={cn(\n              \"glass-h-full glass-bg-gradient-to-r glass-from-blue-500 glass-to-purple-500 glass-radius-full glass-transition-all\"\n            )}\n            style={{\n              transitionDuration: `${ANIMATION.DURATION.normal}ms`,\n              transitionTimingFunction: ANIMATION.EASING.easeOut,\n              width: `${percentage}%`,\n            }}\n          />\n        </OptimizedGlass>\n      )}\n    </div>\n  );\n};\n\n// Utility hook for managing animated numbers\nexport const useAnimatedNumber = (\n  targetValue: number,\n  options: {\n    duration?: number;\n    easing?: \"linear\" | \"easeIn\" | \"easeOut\" | \"easeInOut\";\n    decimals?: number;\n  } = {}\n) => {\n  const [currentValue, setCurrentValue] = useState(targetValue);\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const animateTo = (newValue: number) => {\n    if (newValue === currentValue) return;\n\n    setIsAnimating(true);\n    const startValue = currentValue;\n    const startTime = Date.now();\n    const duration = options.duration || ANIMATION.DURATION.normal;\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const progress = Math.min(elapsed / duration, 1);\n\n      const easedProgress =\n        easingFunctions[options.easing || \"easeOut\"](progress);\n      const current = startValue + (newValue - startValue) * easedProgress;\n\n      setCurrentValue(current);\n\n      if (progress < 1) {\n        requestAnimationFrame(animate);\n      } else {\n        setCurrentValue(newValue);\n        setIsAnimating(false);\n      }\n    };\n\n    requestAnimationFrame(animate);\n  };\n\n  return {\n    value: currentValue,\n    isAnimating,\n    animateTo,\n  };\n};\n", "\"use client\";\nimport { GlassInput } from \"./GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { createContext, useContext, useState, forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport {\n  createFormFieldA11y,\n  useA11yId,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\n\nexport interface RadioOption {\n  value: string | number;\n  label: string;\n  description?: string;\n  disabled?: boolean;\n  icon?: React.ReactNode;\n}\n\nexport interface GlassRadioGroupProps {\n  /**\n   * Radio options\n   */\n  options?: RadioOption[];\n  /**\n   * Selected value\n   */\n  value?: string | number;\n  /**\n   * Default selected value\n   */\n  defaultValue?: string | number;\n  /**\n   * Callback when value changes\n   */\n  onValueChange?: (value: string | number) => void;\n  /**\n   * Group name (for form compatibility)\n   */\n  name?: string;\n  /**\n   * Whether radio group is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Radio group orientation\n   */\n  orientation?: \"vertical\" | \"horizontal\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Whether to show as card-style radios\n   */\n  variant?: \"default\" | \"card\";\n  /**\n   * Custom render function for options\n   */\n  renderOption?: (option: RadioOption, isSelected: boolean) => React.ReactNode;\n  /**\n   * Label for the radio group\n   */\n  label?: string;\n  /**\n   * Description text for the radio group\n   */\n  description?: string;\n  /**\n   * Error message\n   */\n  error?: string;\n  /**\n   * Whether the radio group is required\n   */\n  required?: boolean;\n  /**\n   * Respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * ID of element that labels the radio group\n   */\n  \"aria-labelledby\"?: string;\n  /**\n   * ID of element(s) that describe the radio group\n   */\n  \"aria-describedby\"?: string;\n  /**\n   * Additional aria attributes\n   */\n  \"aria-label\"?: string;\n  /**\n   * Test ID for testing\n   */\n  \"data-testid\"?: string;\n}\n\nexport interface GlassRadioGroupItemProps {\n  /**\n   * Radio option\n   */\n  option: RadioOption;\n  /**\n   * Whether this item is selected\n   */\n  isSelected: boolean;\n  /**\n   * Whether this item is disabled\n   */\n  isDisabled: boolean;\n  /**\n   * Callback when item is selected\n   */\n  onSelect: (value: string | number) => void;\n  /**\n   * Item size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Item variant\n   */\n  variant?: \"default\" | \"card\";\n  /**\n   * Group name\n   */\n  name?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Respect motion preferences\n   */\n  respectMotionPreference?: boolean;\n}\n\n// Context for radio group state\nconst RadioGroupContext = createContext<{\n  value?: string | number;\n  onValueChange?: (value: string | number) => void;\n  name?: string;\n  disabled?: boolean;\n  size?: \"sm\" | \"md\" | \"lg\";\n  variant?: \"default\" | \"card\";\n  respectMotionPreference?: boolean;\n} | null>(null);\n\nconst useRadioGroupContext = () => {\n  const context = useContext(RadioGroupContext);\n  if (!context) {\n    throw new Error(\"RadioGroupItem must be used within a RadioGroup\");\n  }\n  return context;\n};\n\n/**\n * GlassRadioGroup component\n * A glassmorphism radio button group\n */\nexport const GlassRadioGroup = forwardRef<HTMLDivElement, GlassRadioGroupProps>(\n  (\n    {\n      options = [],\n      value: controlledValue,\n      defaultValue,\n      onValueChange,\n      name,\n      disabled = false,\n      orientation = \"vertical\",\n      size = \"md\",\n      variant = \"default\",\n      className,\n      renderOption,\n      label,\n      description,\n      error,\n      required = false,\n      respectMotionPreference = true,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n\n    // Generate unique IDs for accessibility\n    const groupId = useA11yId(\"glass-radio-group\");\n    const labelId = label ? useA11yId(\"glass-radio-group-label\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-radio-group-description\")\n      : undefined;\n    const errorId = error ? useA11yId(\"glass-radio-group-error\") : undefined;\n\n    const [internalValue, setInternalValue] = useState<string | number>(\n      defaultValue || \"\"\n    );\n    const value =\n      controlledValue !== undefined ? controlledValue : internalValue;\n\n    const isInvalid = !!error;\n\n    // Create accessibility attributes\n    const a11yProps = {\n      role: \"radiogroup\",\n      \"aria-labelledby\": ariaLabelledBy || labelId || undefined,\n      \"aria-label\":\n        !ariaLabelledBy && !labelId ? ariaLabel || label : undefined,\n      \"aria-describedby\":\n        ariaDescribedBy ||\n        descriptionId ||\n        (description && `${groupId}-description`) ||\n        undefined,\n      \"aria-invalid\": isInvalid || undefined,\n      \"aria-required\": required || undefined,\n      \"aria-disabled\": disabled || undefined,\n    };\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (error) {\n        announceToScreenReader(`Radio group error: ${error}`, \"assertive\");\n      }\n    }, [error]);\n\n    const handleValueChange = (newValue: string | number) => {\n      if (controlledValue === undefined) {\n        setInternalValue(newValue);\n      }\n      onValueChange?.(newValue);\n\n      // Announce selection change\n      const selectedOption = options.find((opt) => opt.value === newValue);\n      if (selectedOption) {\n        announceToScreenReader(`Selected ${selectedOption.label}`, \"polite\");\n      }\n    };\n\n    const contextValue = {\n      value,\n      onValueChange: handleValueChange,\n      name,\n      disabled,\n      size,\n      variant,\n      respectMotionPreference,\n    };\n\n    return (\n      <div\n        data-glass-component\n        className=\"glass-relative glass-w-full glass-min-w-0 glass-max-h-full glass-overflow-auto\"\n        style={{ minWidth: 0, maxHeight: \"100%\" }}\n      >\n        {/* Label */}\n        {label && (\n          <label\n            id={labelId}\n            className={cn(\n              \"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\",\n              required &&\n                'after:content-[\"*\"] after:glass-ml-1 after:text-destructive'\n            )}\n          >\n            {label}\n          </label>\n        )}\n\n        {/* Description */}\n        {description && (\n          <p\n            id={descriptionId}\n            className=\"glass-text-sm glass-text-secondary glass-mb-3\"\n          >\n            {description}\n          </p>\n        )}\n\n        <RadioGroupContext.Provider value={contextValue}>\n          <div\n            ref={ref}\n            {...a11yProps}\n            data-testid={dataTestId || \"glassradiogroup\"}\n            className={cn(\n              \"glass-flex glass-gap-2 glass-w-full glass-min-w-0 glass-max-h-full\",\n              {\n                \"glass-flex-col\": orientation === \"vertical\",\n                \"glass-flex-row glass-flex-wrap\": orientation === \"horizontal\",\n              },\n              error && \"ring-2 ring-destructive/50 glass-radius-lg glass-p-2\",\n              className\n            )}\n            style={{ minWidth: 0, maxHeight: \"100%\", overflowY: \"auto\" }}\n            role=\"radiogroup\"\n            aria-invalid={isInvalid || undefined}\n            aria-required={required || undefined}\n          >\n            {options.map((option) => (\n              <GlassRadioGroupItem\n                key={option.value}\n                option={option}\n                isSelected={value === option.value}\n                isDisabled={disabled || option.disabled || false}\n                onSelect={handleValueChange}\n                size={size}\n                variant={variant}\n                name={name}\n                renderOption={renderOption}\n                respectMotionPreference={respectMotionPreference}\n              />\n            ))}\n          </div>\n        </RadioGroupContext.Provider>\n\n        {/* Error message */}\n        {error && (\n          <p\n            id={errorId}\n            className=\"glass-mt-2 glass-text-sm glass-text-danger\"\n            role=\"alert\"\n            aria-live=\"polite\"\n          >\n            {error}\n          </p>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassRadioGroup.displayName = \"GlassRadioGroup\";\n\n/**\n * GlassRadioGroupItem component\n * Individual radio button item\n */\ntype GlassRadioGroupItemPropsWithRender = GlassRadioGroupItemProps & {\n  renderOption?: GlassRadioGroupProps[\"renderOption\"];\n};\n\nexport const GlassRadioGroupItem = forwardRef<\n  HTMLDivElement,\n  GlassRadioGroupItemPropsWithRender\n>(\n  (\n    {\n      option,\n      isSelected,\n      isDisabled,\n      onSelect,\n      size = \"md\",\n      variant = \"default\",\n      name,\n      className,\n      renderOption,\n      respectMotionPreference = true,\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const itemId = useA11yId(\"glass-radio-item\");\n    const sizeClasses = {\n      sm: \"glass-w-4 glass-h-4\",\n      md: \"glass-w-5 glass-h-5\",\n      lg: \"glass-w-6 glass-h-6\",\n    };\n\n    const textSizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    // Create accessibility attributes for the radio item\n    const itemA11yProps = createFormFieldA11y({\n      id: itemId,\n      label: option.label,\n      description: option.description,\n      disabled: isDisabled,\n    });\n\n    const handleClick = () => {\n      if (!isDisabled) {\n        onSelect(option.value);\n      }\n    };\n\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        handleClick();\n      }\n    };\n\n    if (renderOption) {\n      return (\n        <div\n          ref={ref}\n          onClick={handleClick}\n          onKeyDown={handleKeyDown}\n          tabIndex={isDisabled ? -1 : 0}\n          role=\"radio\"\n          aria-checked={isSelected}\n          aria-disabled={isDisabled}\n          {...itemA11yProps}\n        >\n          {renderOption(option, isSelected)}\n        </div>\n      );\n    }\n\n    if (variant === \"card\") {\n      return (\n        <Motion\n          preset={\n            shouldAnimate && respectMotionPreference\n              ? isSelected\n                ? \"scaleIn\"\n                : \"fadeIn\"\n              : \"none\"\n          }\n          animateOnHover={\n            !isDisabled && shouldAnimate && respectMotionPreference\n          }\n          duration={200}\n        >\n          <OptimizedGlass\n            elevation={isSelected ? \"level2\" : \"level1\"}\n            intensity=\"subtle\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            liftOnHover\n            press\n            className={cn(\n              \"glass-radio-card glass-relative glass-w-full glass-min-w-0 glass-cursor-pointer glass-transition glass-p-2 glass-radius-lg\",\n              {\n                \"opacity-50 cursor-not-allowed\": isDisabled,\n              },\n              className\n            )}\n            style={{\n              boxSizing: \"border-box\",\n              background: isSelected\n                ? \"rgba(56, 189, 248, 0.12)\"\n                : \"rgba(5, 11, 24, 0.22)\",\n            }}\n            ref={ref}\n            onClick={handleClick}\n            onKeyDown={handleKeyDown}\n            tabIndex={isDisabled ? -1 : 0}\n            role=\"radio\"\n            aria-checked={isSelected}\n            aria-disabled={isDisabled}\n            {...itemA11yProps}\n          >\n            <div className=\"glass-flex glass-items-start glass-gap-3 glass-min-w-0\">\n              {/* Custom radio indicator */}\n              <div\n                className={cn(\n                  \"glass-relative glass-flex glass-items-center glass-justify-center glass-radius-full glass-border\",\n                  \"glass-transition glass-mt-0-5\",\n                  sizeClasses[size],\n                  {\n                    \"glass-border-white/20 glass-surface-subtle/5\": !isSelected,\n                    \"glass-border-white/30 glass-surface-subtle/20\":\n                      isSelected && !isDisabled,\n                    \"glass-border-white/10 glass-surface-subtle/5\": isDisabled,\n                  }\n                )}\n              >\n                {isSelected && (\n                  <Motion\n                    preset={\n                      shouldAnimate && respectMotionPreference\n                        ? \"scaleIn\"\n                        : \"none\"\n                    }\n                    duration={200}\n                    className=\"glass-w-2 glass-h-2 glass-radius-full glass-surface-subtle\"\n                  />\n                )}\n              </div>\n\n              {/* Content */}\n              <div className=\"glass-flex-1 glass-min-w-0\">\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  {option.icon && (\n                    <div className=\"glass-flex glass-items-center glass-justify-center glass-text-primary-opacity-70\">\n                      {option.icon}\n                    </div>\n                  )}\n                  <span\n                    className={cn(\n                      \"glass-font-medium glass-text-primary\",\n                      textSizeClasses[size]\n                    )}\n                  >\n                    {option.label}\n                  </span>\n                </div>\n\n                {option.description && (\n                  <p className=\"glass-text-secondary glass-text-xs glass-mt-1 glass-leading-snug\">\n                    {option.description}\n                  </p>\n                )}\n              </div>\n            </div>\n          </OptimizedGlass>\n        </Motion>\n      );\n    }\n\n    // Default variant\n    return (\n      <OptimizedGlass\n        ref={ref}\n        elevation={isSelected ? \"level2\" : \"level1\"}\n        intensity=\"subtle\"\n        depth={1}\n        tint={isSelected ? \"primary\" : \"neutral\"}\n        border=\"subtle\"\n        animation={\n          shouldAnimate && respectMotionPreference ? \"shimmer\" : \"none\"\n        }\n        performanceMode=\"medium\"\n        liftOnHover={!isDisabled}\n        press\n        className={cn(\n          \"glass-flex glass-items-center glass-gap-2 glass-w-full glass-min-w-0 glass-cursor-pointer glass-group\",\n          \"glass-transition glass-p-2 glass-radius-lg\",\n          {\n            \"opacity-50 cursor-not-allowed\": isDisabled,\n          },\n          className\n        )}\n        style={{\n          boxSizing: \"border-box\",\n          background: isSelected\n            ? \"rgba(56, 189, 248, 0.12)\"\n            : \"rgba(5, 11, 24, 0.18)\",\n        }}\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        tabIndex={isDisabled ? -1 : 0}\n        role=\"radio\"\n        aria-checked={isSelected}\n        aria-disabled={isDisabled}\n        {...itemA11yProps}\n      >\n        {/* Custom radio indicator */}\n        <div\n          className={cn(\n            \"glass-relative glass-flex glass-items-center glass-justify-center glass-radius-full glass-border\",\n            \"glass-transition\",\n            sizeClasses[size],\n            {\n              \"glass-border-white/20 glass-surface-subtle/5\": !isSelected,\n              \"glass-border-white/30 glass-surface-subtle/20\":\n                isSelected && !isDisabled,\n              \"glass-border-white/10 glass-surface-subtle/5\": isDisabled,\n            }\n          )}\n        >\n          {isSelected && (\n            <Motion\n              preset={\n                shouldAnimate && respectMotionPreference ? \"scaleIn\" : \"none\"\n              }\n              duration={200}\n              className=\"glass-w-2 glass-h-2 glass-radius-full glass-surface-subtle\"\n            />\n          )}\n        </div>\n\n        {/* Content */}\n        <div className=\"glass-flex-1 glass-min-w-0\">\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            {option.icon && (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-text-primary-opacity-70\">\n                {option.icon}\n              </div>\n            )}\n            <span\n              className={cn(\n                \"glass-text-primary-opacity-90\",\n                textSizeClasses[size],\n                {\n                  \"glass-font-medium\": isSelected,\n                }\n              )}\n            >\n              {option.label}\n            </span>\n          </div>\n\n          {option.description && (\n            <p className=\"glass-text-secondary glass-text-xs glass-mt-1\">\n              {option.description}\n            </p>\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassRadioGroupItem.displayName = \"GlassRadioGroupItem\";\n\n/**\n * Hook for managing radio group state\n */\nexport const useRadioGroup = (initialValue?: string | number) => {\n  const [value, setValue] = useState<string | number>(initialValue || \"\");\n\n  return {\n    value,\n    setValue,\n    onValueChange: setValue,\n  };\n};\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Search, X } from \"../../icons\";\nimport { GlassInput, type GlassInputProps } from \"./GlassInput\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface GlassSearchFieldProps\n  extends Omit<GlassInputProps, \"type\" | \"leftIcon\" | \"rightIcon\"> {\n  onClear?: () => void;\n  clearLabel?: string;\n}\n\nexport const GlassSearchField = forwardRef<\n  HTMLInputElement,\n  GlassSearchFieldProps\n>(\n  (\n    {\n      placeholder = \"Search\",\n      label = \"Search\",\n      clearable = true,\n      onClear,\n      clearLabel = \"Clear search\",\n      value,\n      ...props\n    },\n    ref\n  ) => {\n    const hasValue =\n      typeof value === \"string\" ? value.length > 0 : value !== undefined;\n\n    return (\n      <GlassInput\n        ref={ref}\n        type=\"search\"\n        role=\"searchbox\"\n        placeholder={placeholder}\n        label={label}\n        value={value}\n        leftIcon={<Search aria-hidden=\"true\" />}\n        rightIcon={\n          clearable && hasValue && onClear ? (\n            <GlassButton\n              type=\"button\"\n              size=\"sm\"\n              variant=\"ghost\"\n              onClick={onClear}\n              aria-label={clearLabel}\n            >\n              <X aria-hidden=\"true\" className=\"glass-h-4 glass-w-4\" />\n            </GlassButton>\n          ) : undefined\n        }\n        {...props}\n      />\n    );\n  }\n);\n\nGlassSearchField.displayName = \"GlassSearchField\";\n", "\"use client\";\n\nimport React from \"react\";\nimport { Check, ChevronDown, ChevronUp } from \"../../icons\";\nimport { DismissableLayer, Motion, Portal, Positioner } from \"../../primitives\";\nimport { cn } from \"@/lib/utils\";\n\ntype SelectContextValue = {\n  value?: string;\n  selectedLabel?: React.ReactNode;\n  open: boolean;\n  disabled?: boolean;\n  triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n  contentId: string;\n  setOpen: (open: boolean) => void;\n  setValue: (value: string, label: React.ReactNode) => void;\n  registerItem: (value: string, label: React.ReactNode) => void;\n  selectByTextPrefix: (prefix: string) => boolean;\n};\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nconst useSelectContext = () => {\n  const context = React.useContext(SelectContext);\n  if (!context) {\n    throw new Error(\"GlassSelect components must be used within GlassSelect\");\n  }\n  return context;\n};\n\nconst useControllableState = <T,>({\n  prop,\n  defaultProp,\n  onChange,\n}: {\n  prop?: T;\n  defaultProp?: T;\n  onChange?: (value: T) => void;\n}) => {\n  const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultProp);\n  const isControlled = prop !== undefined;\n  const value = isControlled ? prop : uncontrolledValue;\n\n  const setValue = React.useCallback(\n    (nextValue: T) => {\n      if (!isControlled) {\n        setUncontrolledValue(nextValue);\n      }\n      onChange?.(nextValue);\n    },\n    [isControlled, onChange]\n  );\n\n  return [value, setValue] as const;\n};\n\nconst getTextFromNode = (node: React.ReactNode): string => {\n  if (typeof node === \"string\" || typeof node === \"number\") {\n    return String(node);\n  }\n  if (Array.isArray(node)) {\n    return node.map(getTextFromNode).join(\"\");\n  }\n  if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n    return getTextFromNode(node.props.children);\n  }\n  return \"\";\n};\n\n// Main Select Root\nexport interface GlassSelectProps {\n  children?: React.ReactNode;\n  value?: string;\n  defaultValue?: string;\n  onValueChange?: (value: string) => void;\n  open?: boolean;\n  defaultOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  disabled?: boolean;\n  required?: boolean;\n  name?: string;\n  \"data-testid\"?: string;\n}\n\nconst GlassSelect = ({\n  children,\n  value,\n  defaultValue,\n  onValueChange,\n  open,\n  defaultOpen,\n  onOpenChange,\n  disabled,\n  required,\n  name,\n  \"data-testid\": dataTestId,\n}: GlassSelectProps) => {\n  const [resolvedValue, setResolvedValue] = useControllableState<string>({\n    prop: value,\n    defaultProp: defaultValue,\n    onChange: onValueChange,\n  });\n  const [resolvedOpen = false, setResolvedOpen] = useControllableState<boolean>(\n    {\n      prop: open,\n      defaultProp: defaultOpen ?? false,\n      onChange: onOpenChange,\n    }\n  );\n  const [selectedLabel, setSelectedLabel] = React.useState<React.ReactNode>();\n  const triggerRef = React.useRef<HTMLButtonElement>(null);\n  const contentId = React.useId();\n  const labelsRef = React.useRef<Map<string, React.ReactNode>>(new Map());\n\n  const setValue = React.useCallback(\n    (nextValue: string, label: React.ReactNode) => {\n      setSelectedLabel(label);\n      setResolvedValue(nextValue);\n    },\n    [setResolvedValue]\n  );\n\n  const registerItem = React.useCallback(\n    (itemValue: string, label: React.ReactNode) => {\n      labelsRef.current.set(itemValue, label);\n      if (itemValue === resolvedValue) {\n        setSelectedLabel(label);\n      }\n    },\n    [resolvedValue]\n  );\n\n  const selectByTextPrefix = React.useCallback(\n    (prefix: string) => {\n      const normalizedPrefix = prefix.trim().toLowerCase();\n      if (!normalizedPrefix) return false;\n\n      for (const [itemValue, itemLabel] of labelsRef.current.entries()) {\n        const label = getTextFromNode(itemLabel).toLowerCase();\n        if (label.startsWith(normalizedPrefix)) {\n          setValue(itemValue, itemLabel);\n          return true;\n        }\n      }\n\n      return false;\n    },\n    [setValue]\n  );\n\n  const context = React.useMemo(\n    () => ({\n      value: resolvedValue,\n      selectedLabel:\n        selectedLabel ?? labelsRef.current.get(resolvedValue ?? \"\"),\n      open: resolvedOpen,\n      disabled,\n      triggerRef,\n      contentId,\n      setOpen: setResolvedOpen,\n      setValue,\n      registerItem,\n      selectByTextPrefix,\n    }),\n    [\n      contentId,\n      disabled,\n      registerItem,\n      resolvedOpen,\n      resolvedValue,\n      selectedLabel,\n      setResolvedOpen,\n      setValue,\n      selectByTextPrefix,\n    ]\n  );\n\n  return (\n    <SelectContext.Provider value={context}>\n      <>\n        {name && (\n          <input\n            type=\"hidden\"\n            name={name}\n            value={resolvedValue ?? \"\"}\n            required={required}\n            disabled={disabled}\n          />\n        )}\n        {children}\n      </>\n    </SelectContext.Provider>\n  );\n};\n\n// Select Group\nconst GlassSelectGroup = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>((props, ref) => <div ref={ref} role=\"group\" {...props} />);\nGlassSelectGroup.displayName = \"GlassSelectGroup\";\n\n// Select Value\nexport interface GlassSelectValueProps\n  extends React.HTMLAttributes<HTMLSpanElement> {\n  placeholder?: React.ReactNode;\n}\n\nconst GlassSelectValue = React.forwardRef<\n  HTMLSpanElement,\n  GlassSelectValueProps\n>(({ placeholder, children, style, ...props }, ref) => {\n  const { selectedLabel, value } = useSelectContext();\n  const body = children ?? selectedLabel ?? value ?? placeholder;\n\n  return (\n    <span ref={ref} style={{ pointerEvents: \"none\", ...style }} {...props}>\n      {body}\n    </span>\n  );\n});\nGlassSelectValue.displayName = \"GlassSelectValue\";\n\n// Glass Select Trigger\nexport interface GlassSelectTriggerProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  /** Size variant */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"filled\" | \"outlined\" | \"minimal\";\n  /** Error state */\n  error?: boolean;\n}\n\nconst GlassSelectTrigger = React.forwardRef<\n  HTMLButtonElement,\n  GlassSelectTriggerProps\n>(\n  (\n    {\n      className,\n      children,\n      size = \"md\",\n      variant = \"default\",\n      error = false,\n      onClick,\n      onKeyDown,\n      disabled,\n      ...props\n    },\n    ref\n  ) => {\n    const context = useSelectContext();\n\n    const setRef = React.useCallback(\n      (node: HTMLButtonElement | null) => {\n        context.triggerRef.current = node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref) {\n          (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n            node;\n        }\n      },\n      [context.triggerRef, ref]\n    );\n\n    const sizeConfig = {\n      sm: \"h-8 glass-px-2 glass-py-1 glass-text-xs\",\n      md: \"h-10 glass-px-3 glass-py-2 glass-text-sm\",\n      lg: \"h-12 glass-px-4 glass-py-3 glass-text-base\",\n    };\n\n    const variantConfig = {\n      default: cn(\n        \"bg-background/50 border border-border/20\",\n        \"focus:border-primary focus:ring-1 focus:ring-primary\"\n      ),\n      filled: cn(\n        \"bg-muted/50 border border-transparent\",\n        \"focus:bg-background/50 focus:border-primary\"\n      ),\n      outlined: cn(\n        \"bg-transparent border-2 border-border/20\",\n        \"focus:border-primary\"\n      ),\n      minimal: cn(\n        \"bg-transparent border-0 border-b border-border/20 rounded-none\",\n        \"focus:border-primary\"\n      ),\n    };\n\n    const isDisabled = disabled || context.disabled;\n\n    return (\n      <button\n        data-glass-component\n        ref={setRef}\n        type=\"button\"\n        className={cn(\n          \"glass-select-trigger group flex w-full items-center justify-between\",\n          \"glass-radius-lg glass-backdrop-blur-md transition-all duration-200\",\n          \"text-foreground placeholder:glass-text-secondary\",\n          \"focus:outline-none focus:ring-offset-2 focus:ring-offset-background\",\n          \"glass-disabled-cursor-not-allowed disabled:opacity-50\",\n          \"[&>span]:line-clamp-1\",\n          sizeConfig[size],\n          variantConfig[variant],\n          error && \"border-red-400 focus:border-red-400 focus:ring-red-400\",\n          className\n        )}\n        aria-label=\"Select option\"\n        aria-autocomplete=\"none\"\n        aria-expanded={context.open}\n        aria-controls={context.contentId}\n        role=\"combobox\"\n        data-state={context.open ? \"open\" : \"closed\"}\n        data-placeholder={context.value ? undefined : \"\"}\n        dir=\"ltr\"\n        disabled={isDisabled}\n        onClick={(event) => {\n          onClick?.(event);\n          if (!event.defaultPrevented && !isDisabled) {\n            context.setOpen(!context.open);\n          }\n        }}\n        onKeyDown={(event) => {\n          onKeyDown?.(event);\n          if (event.defaultPrevented || isDisabled) return;\n\n          if (\n            event.key === \"Enter\" ||\n            event.key === \" \" ||\n            event.key === \"ArrowDown\"\n          ) {\n            event.preventDefault();\n            context.setOpen(true);\n          } else if (\n            event.key.length === 1 &&\n            !event.metaKey &&\n            !event.ctrlKey\n          ) {\n            if (context.selectByTextPrefix(event.key)) {\n              event.preventDefault();\n            }\n          }\n        }}\n        {...props}\n      >\n        {children}\n        <ChevronDown className=\"glass-h-4 glass-w-4 glass-opacity-50 glass-transition-transform glass-group-data-[state=open]:rotate-180\" />\n      </button>\n    );\n  }\n);\nGlassSelectTrigger.displayName = \"GlassSelectTrigger\";\n\n// Glass Select Content\nexport interface GlassSelectContentProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Content variant */\n  variant?: \"default\" | \"minimal\";\n  /** Optional portal container. */\n  portalContainer?: HTMLElement | null;\n  /** Whether to portal content. Defaults to true. */\n  portalled?: boolean;\n  /** Overlay positioning strategy. */\n  positionStrategy?: \"fixed\" | \"absolute\" | \"contained\";\n  /** Render content without a portal for constrained surfaces. */\n  contained?: boolean;\n  position?: \"popper\" | \"item-aligned\";\n  sideOffset?: number;\n}\n\nconst GlassSelectContent = React.forwardRef<\n  HTMLDivElement,\n  GlassSelectContentProps\n>(\n  (\n    {\n      className,\n      children,\n      position = \"popper\",\n      variant: _variant = \"default\",\n      portalContainer,\n      portalled = true,\n      positionStrategy = \"fixed\",\n      contained = false,\n      sideOffset = 4,\n      ...props\n    },\n    ref\n  ) => {\n    const context = useSelectContext();\n    const isContained =\n      contained || portalled === false || positionStrategy === \"contained\";\n\n    if (!context.open) return null;\n\n    const content = (\n      <Motion preset=\"scaleIn\">\n        <Positioner\n          anchorRef={context.triggerRef}\n          side=\"bottom\"\n          align=\"start\"\n          sideOffset={isContained ? 0 : sideOffset}\n          contained={isContained}\n          strategy={positionStrategy === \"absolute\" ? \"absolute\" : \"fixed\"}\n        >\n          <DismissableLayer\n            ref={ref}\n            id={context.contentId}\n            role=\"listbox\"\n            onDismiss={() => context.setOpen(false)}\n            className={cn(\n              \"glass-select-content relative z-50 max-h-96 min-w-[8rem] overflow-hidden\",\n              \"glass-backdrop-blur-lg bg-white/10 ring-1 ring-white/15\",\n              \"glass-radius-xl shadow-2xl shadow-black/40\",\n              \"text-foreground\",\n              \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n              \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n              \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n              \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n              \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n              position === \"popper\" && [\n                \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1\",\n                \"data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n              ],\n              className\n            )}\n            data-state=\"open\"\n            data-side=\"bottom\"\n            data-position-strategy={\n              isContained ? \"contained\" : positionStrategy\n            }\n            {...props}\n          >\n            <GlassSelectScrollUpButton />\n            <div\n              className={cn(\n                \"glass-p-1\",\n                position === \"popper\" && [\n                  \"h-[var(--radix-select-trigger-height)] w-full\",\n                  \"min-w-[var(--radix-select-trigger-width)]\",\n                ]\n              )}\n            >\n              {children}\n            </div>\n            <GlassSelectScrollDownButton />\n          </DismissableLayer>\n        </Positioner>\n      </Motion>\n    );\n\n    if (isContained) return content;\n    return <Portal container={portalContainer}>{content}</Portal>;\n  }\n);\nGlassSelectContent.displayName = \"GlassSelectContent\";\n\n// Glass Select Item\nexport interface GlassSelectItemProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Item variant */\n  variant?: \"default\" | \"ghost\";\n  value: string;\n  disabled?: boolean;\n  textValue?: string;\n}\n\nconst GlassSelectItem = React.forwardRef<HTMLDivElement, GlassSelectItemProps>(\n  (\n    {\n      className,\n      children,\n      variant = \"default\",\n      value,\n      disabled = false,\n      textValue,\n      onClick,\n      ...props\n    },\n    ref\n  ) => {\n    const context = useSelectContext();\n    const selected = context.value === value;\n    const label = textValue ?? getTextFromNode(children) ?? value;\n\n    React.useEffect(() => {\n      context.registerItem(value, label);\n    }, [context, label, value]);\n\n    const variantStyles = {\n      default: cn(\n        \"focus:bg-muted/50 focus:text-foreground\",\n        \"data-[highlighted]:bg-muted/50 data-[highlighted]:text-foreground\"\n      ),\n      ghost: cn(\n        \"focus:bg-primary/10 focus:text-primary\",\n        \"data-[highlighted]:bg-primary/10 data-[highlighted]:text-primary\"\n      ),\n    };\n\n    return (\n      <div\n        ref={ref}\n        role=\"option\"\n        aria-selected={selected}\n        aria-disabled={disabled || undefined}\n        data-state={selected ? \"checked\" : \"unchecked\"}\n        data-disabled={disabled ? \"\" : undefined}\n        tabIndex={disabled ? undefined : -1}\n        className={cn(\n          \"glass-select-item relative flex w-full cursor-pointer select-none items-center\",\n          \"glass-radius-lg glass-py-2 pl-8 pr-2 glass-text-sm outline-none transition-all duration-150\",\n          \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n          variantStyles[variant],\n          className\n        )}\n        onClick={(event) => {\n          onClick?.(event);\n          if (event.defaultPrevented || disabled) return;\n          context.setValue(value, label);\n          context.setOpen(false);\n          context.triggerRef.current?.focus();\n        }}\n        {...props}\n      >\n        <span className=\"glass-absolute glass-left-2 glass-flex glass-h-3-5 glass-w-3-5 glass-items-center glass-justify-center\">\n          {selected && <Check className=\"glass-h-4 glass-w-4\" />}\n        </span>\n\n        <span>{children}</span>\n      </div>\n    );\n  }\n);\nGlassSelectItem.displayName = \"GlassSelectItem\";\n\n// Glass Select Label\nconst GlassSelectLabel = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\n      \"glass-select-label glass-py-1.5 pl-8 pr-2 glass-text-sm font-semibold glass-text-secondary\",\n      className\n    )}\n    {...props}\n  />\n));\nGlassSelectLabel.displayName = \"GlassSelectLabel\";\n\n// Glass Select Separator\nconst GlassSelectSeparator = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    role=\"separator\"\n    className={cn(\n      \"glass-select-separator -glass-mx-1 glass-my-1 h-px bg-border/20\",\n      className\n    )}\n    {...props}\n  />\n));\nGlassSelectSeparator.displayName = \"GlassSelectSeparator\";\n\n// Glass Select Scroll Buttons\nconst GlassSelectScrollUpButton = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    aria-hidden=\"true\"\n    className={cn(\n      \"glass-select-scroll-up flex cursor-default items-center justify-center glass-py-1\",\n      \"glass-text-secondary hover:text-foreground transition-colors\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronUp className=\"glass-h-4 glass-w-4\" />\n  </div>\n));\nGlassSelectScrollUpButton.displayName = \"GlassSelectScrollUpButton\";\n\nconst GlassSelectScrollDownButton = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    aria-hidden=\"true\"\n    className={cn(\n      \"glass-select-scroll-down flex cursor-default items-center justify-center glass-py-1\",\n      \"glass-text-secondary hover:text-foreground transition-colors\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronDown className=\"glass-h-4 glass-w-4\" />\n  </div>\n));\nGlassSelectScrollDownButton.displayName = \"GlassSelectScrollDownButton\";\n\n// Export all components\nexport {\n  GlassSelect,\n  GlassSelectGroup,\n  GlassSelectValue,\n  GlassSelectTrigger,\n  GlassSelectContent,\n  GlassSelectLabel,\n  GlassSelectItem,\n  GlassSelectSeparator,\n  GlassSelectScrollUpButton,\n  GlassSelectScrollDownButton,\n};\n\n// Re-export as compound component for easier usage\nexport {\n  GlassSelect as Select,\n  GlassSelectGroup as SelectGroup,\n  GlassSelectValue as SelectValue,\n  GlassSelectTrigger as SelectTrigger,\n  GlassSelectContent as SelectContent,\n  GlassSelectLabel as SelectLabel,\n  GlassSelectItem as SelectItem,\n  GlassSelectSeparator as SelectSeparator,\n  GlassSelectScrollUpButton as SelectScrollUpButton,\n  GlassSelectScrollDownButton as SelectScrollDownButton,\n};\n\ntype GlassSelectCompoundType = typeof GlassSelect & {\n  Trigger: typeof GlassSelectTrigger;\n  Content: typeof GlassSelectContent;\n  Item: typeof GlassSelectItem;\n  Label: typeof GlassSelectLabel;\n  Separator: typeof GlassSelectSeparator;\n  ScrollUpButton: typeof GlassSelectScrollUpButton;\n  ScrollDownButton: typeof GlassSelectScrollDownButton;\n  Group: typeof GlassSelectGroup;\n  Value: typeof GlassSelectValue;\n};\n\nconst GlassSelectCompound = GlassSelect as GlassSelectCompoundType;\nGlassSelectCompound.Trigger = GlassSelectTrigger;\nGlassSelectCompound.Content = GlassSelectContent;\nGlassSelectCompound.Item = GlassSelectItem;\nGlassSelectCompound.Label = GlassSelectLabel;\nGlassSelectCompound.Separator = GlassSelectSeparator;\nGlassSelectCompound.ScrollUpButton = GlassSelectScrollUpButton;\nGlassSelectCompound.ScrollDownButton = GlassSelectScrollDownButton;\nGlassSelectCompound.Group = GlassSelectGroup;\nGlassSelectCompound.Value = GlassSelectValue;\n\nexport { GlassSelectCompound };\n\nexport default GlassSelectCompound;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  announceToScreenReader,\n  createFormFieldA11y,\n  useA11yId,\n} from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassSliderProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onChange\" | \"defaultValue\"\n> {\n  /** Current value(s) of the slider */\n  value?: number | number[];\n  /** Default value(s) (uncontrolled) */\n  defaultValue?: number | number[];\n  /** Callback when value changes */\n  onChange?: (value: number | number[]) => void;\n  /** Callback when value changes during drag */\n  onValueChange?: (value: number | number[]) => void;\n  /** Callback when drag starts */\n  onValueCommit?: (value: number | number[]) => void;\n  /** Minimum value */\n  min?: number;\n  /** Maximum value */\n  max?: number;\n  /** Step increment */\n  step?: number;\n  /** Whether the slider is disabled */\n  disabled?: boolean;\n  /** Orientation of the slider */\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Size of the slider */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n  /** Whether to show value labels */\n  showValue?: boolean;\n  /** Whether to show tick marks */\n  showTicks?: boolean;\n  /** Number of tick marks or array of tick values */\n  ticks?: number | number[];\n  /** Label for the slider */\n  label?: string;\n  /** Description text */\n  description?: string;\n  /** Custom thumb content */\n  thumbContent?: React.ReactNode;\n  /** Whether to invert the slider direction */\n  inverted?: boolean;\n  /** Format function for displayed values */\n  formatValue?: (value: number) => string;\n  /** Range mode (multiple thumbs) */\n  range?: boolean;\n  /** Error message */\n  error?: string;\n  /** Whether the slider is required */\n  required?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  material?: \"glass\" | \"liquid\";\n  neutralValue?: number;\n  showTickLabels?: boolean;\n  interactionGlass?: boolean;\n  /** Accessible label for the slider */\n  \"aria-label\"?: string;\n  /** ID of element that labels the slider */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the slider */\n  \"aria-describedby\"?: string;\n}\n\nexport const GlassSlider = forwardRef<HTMLDivElement, GlassSliderProps>(\n  (\n    {\n      value,\n      defaultValue,\n      onChange,\n      onValueChange,\n      onValueCommit,\n      min = 0,\n      max = 100,\n      step = 1,\n      disabled = false,\n      orientation = \"horizontal\",\n      size = \"md\",\n      variant = \"default\",\n      showValue = false,\n      showTicks = false,\n      ticks,\n      label,\n      description,\n      thumbContent,\n      inverted = false,\n      formatValue = (val) => val.toString(),\n      range = false,\n      error,\n      required = false,\n      respectMotionPreference = true,\n      material = \"glass\",\n      neutralValue,\n      showTickLabels = false,\n      interactionGlass = false,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"data-testid\": dataTestId,\n      className,\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const shouldAnimate = isMotionSafe && !prefersReducedMotion;\n\n    // Generate unique IDs for accessibility\n    const sliderId = useA11yId(\"glass-slider\");\n    const finalId = id || sliderId;\n    const labelId = label ? useA11yId(\"glass-slider-label\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-slider-description\")\n      : undefined;\n    const errorId = error ? useA11yId(\"glass-slider-error\") : undefined;\n    const trackRef = useRef<HTMLDivElement>(null);\n    const [isDragging, setIsDragging] = useState(false);\n    const [dragIndex, setDragIndex] = useState(0);\n\n    const isInvalid = !!error;\n\n    // Create accessibility attributes\n    const a11yProps = createFormFieldA11y({\n      id: finalId,\n      label: !ariaLabelledBy && !labelId ? ariaLabel || label : undefined,\n      description: description,\n      error: error,\n      required: required,\n      invalid: isInvalid,\n      disabled: disabled,\n      labelId: ariaLabelledBy || labelId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      errorId: errorId,\n    });\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (error) {\n        announceToScreenReader(`Slider error: ${error}`, \"assertive\");\n      }\n    }, [error]);\n\n    // Initialize internal value\n    const getInitialValue = () => {\n      if (value !== undefined) return value;\n      if (defaultValue !== undefined) return defaultValue;\n      return range ? [min, max] : min;\n    };\n\n    const [internalValue, setInternalValue] = useState(getInitialValue);\n    const currentValue = value !== undefined ? value : internalValue;\n\n    // Ensure value is always an array for consistent handling\n    const valueArray = Array.isArray(currentValue)\n      ? currentValue\n      : [currentValue];\n    const isRange = range || valueArray.length > 1;\n\n    const sizeConfig = {\n      sm: {\n        track: orientation === \"horizontal\" ? \"glass-h-1\" : \"glass-w-1\",\n        thumb: \"glass-h-4 glass-w-4\",\n        label: \"glass-text-xs\",\n        tick: \"glass-h-1 glass-w-px\",\n      },\n      md: {\n        track: orientation === \"horizontal\" ? \"glass-h-2\" : \"glass-w-2\",\n        thumb: \"glass-h-5 glass-w-5\",\n        label: \"glass-text-sm\",\n        tick: \"glass-h-1 glass-w-px\",\n      },\n      lg: {\n        track: orientation === \"horizontal\" ? \"glass-h-3\" : \"glass-w-3\",\n        thumb: \"glass-h-6 glass-w-6\",\n        label: \"glass-text-base\",\n        tick: \"glass-h-2 glass-w-px\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        track: \"glass-surface-subtle\",\n        fill: \"glass-surface-primary\",\n        thumb: \"glass-border-primary glass-shadow-lg\",\n      },\n      success: {\n        track: \"glass-surface-subtle\",\n        fill: \"glass-surface-success\",\n        thumb: \"glass-border-success glass-shadow-lg\",\n      },\n      warning: {\n        track: \"glass-surface-subtle\",\n        fill: \"glass-surface-warning\",\n        thumb: \"glass-border-primary glass-shadow-lg\",\n      },\n      error: {\n        track: \"glass-surface-subtle\",\n        fill: \"glass-surface-danger\",\n        thumb: \"glass-border-danger glass-shadow-lg\",\n      },\n      info: {\n        track: \"glass-surface-subtle\",\n        fill: \"glass-surface-primary\",\n        thumb: \"glass-border-primary glass-shadow-lg\",\n      },\n    };\n\n    const config = sizeConfig[size];\n    const colors = variantConfig[variant];\n\n    // Utility functions\n    const clampValue = (val: number) => Math.max(min, Math.min(max, val));\n\n    const snapToStep = (val: number) => {\n      const snapped = Math.round((val - min) / step) * step + min;\n      return clampValue(snapped);\n    };\n\n    const getPercentage = (val: number) => {\n      return ((val - min) / (max - min)) * 100;\n    };\n\n    const getValueFromPercentage = (percentage: number) => {\n      const val = (percentage / 100) * (max - min) + min;\n      return snapToStep(val);\n    };\n\n    // Generate tick marks\n    const generateTicks = () => {\n      if (!showTicks) return [];\n\n      if (Array.isArray(ticks)) {\n        return ticks.filter((tick: any) => tick >= min && tick <= max);\n      }\n\n      const tickCount =\n        typeof ticks === \"number\"\n          ? ticks\n          : Math.max(2, Math.min(10, (max - min) / step + 1));\n      const tickStep = (max - min) / (tickCount - 1);\n\n      return Array.from({ length: tickCount }, (_, i) => min + i * tickStep);\n    };\n\n    const tickMarks = generateTicks();\n\n    // Handle pointer events\n    const getPointerPosition = (event: PointerEvent | React.PointerEvent) => {\n      if (!trackRef.current) return 0;\n\n      const rect = trackRef.current.getBoundingClientRect();\n      const isHorizontal = orientation === \"horizontal\";\n\n      let position;\n      if (isHorizontal) {\n        position = ((event.clientX - rect.left) / rect.width) * 100;\n      } else {\n        position = ((rect.bottom - event.clientY) / rect.height) * 100;\n      }\n\n      return inverted ? 100 - position : position;\n    };\n\n    const updateValue = useCallback(\n      (newValueArray: number[]) => {\n        const clampedValues = newValueArray.map(clampValue);\n        const finalValue = isRange ? clampedValues : clampedValues[0];\n\n        if (value === undefined) {\n          setInternalValue(finalValue);\n        }\n\n        onChange?.(finalValue);\n        onValueChange?.(finalValue);\n\n        // Announce value changes for screen readers\n        const valueText = isRange\n          ? `Range from ${formatValue(clampedValues[0])} to ${formatValue(clampedValues[1])}`\n          : `Value ${formatValue(clampedValues[0])}`;\n        announceToScreenReader(valueText, \"polite\");\n      },\n      [value, onChange, onValueChange, isRange, formatValue]\n    );\n\n    const handlePointerDown = (\n      event: React.PointerEvent,\n      thumbIndex: number\n    ) => {\n      if (disabled) return;\n\n      event.preventDefault();\n      setIsDragging(true);\n      setDragIndex(thumbIndex);\n\n      const handlePointerMove = (e: PointerEvent) => {\n        const percentage = getPointerPosition(e);\n        const newValue = getValueFromPercentage(percentage);\n\n        const newValues = [...valueArray];\n        newValues[thumbIndex] = newValue;\n\n        // Ensure range values don't cross\n        if (isRange && newValues.length === 2) {\n          if (thumbIndex === 0 && newValue > newValues[1]) {\n            newValues[0] = newValues[1];\n          } else if (thumbIndex === 1 && newValue < newValues[0]) {\n            newValues[1] = newValues[0];\n          }\n        }\n\n        updateValue(newValues);\n      };\n\n      const handlePointerUp = () => {\n        setIsDragging(false);\n        setDragIndex(0);\n        onValueCommit?.(isRange ? valueArray : valueArray[0]);\n        document.removeEventListener(\"pointermove\", handlePointerMove);\n        document.removeEventListener(\"pointerup\", handlePointerUp);\n      };\n\n      document.addEventListener(\"pointermove\", handlePointerMove);\n      document.addEventListener(\"pointerup\", handlePointerUp);\n    };\n\n    const handleTrackClick = (event: React.PointerEvent) => {\n      if (disabled || isDragging) return;\n\n      const percentage = getPointerPosition(event);\n      const newValue = getValueFromPercentage(percentage);\n\n      if (isRange) {\n        // Find closest thumb\n        const distances = valueArray.map((val: any) =>\n          Math.abs(val - newValue)\n        );\n        const closestIndex = distances.indexOf(Math.min(...distances));\n\n        const newValues = [...valueArray];\n        newValues[closestIndex] = newValue;\n        updateValue(newValues);\n      } else {\n        updateValue([newValue]);\n      }\n    };\n\n    // Calculate fill styles\n    const getFillStyle = () => {\n      if (isRange && valueArray.length === 2) {\n        const start = getPercentage(Math.min(...valueArray));\n        const end = getPercentage(Math.max(...valueArray));\n\n        if (orientation === \"horizontal\") {\n          return {\n            left: `${start}%`,\n            width: `${end - start}%`,\n          };\n        } else {\n          return {\n            bottom: `${start}%`,\n            height: `${end - start}%`,\n          };\n        }\n      } else {\n        const percentage = getPercentage(valueArray[0]);\n\n        if (orientation === \"horizontal\") {\n          return {\n            width: `${percentage}%`,\n          };\n        } else {\n          return {\n            height: `${percentage}%`,\n          };\n        }\n      }\n    };\n\n    // Render thumbs\n    const renderThumbs = () => {\n      return valueArray.map((val, index) => {\n        const percentage = getPercentage(val);\n        const position =\n          orientation === \"horizontal\"\n            ? { left: `${percentage}%` }\n            : { bottom: `${percentage}%` };\n\n        return (\n          <OptimizedGlass\n            key={index}\n            elevation=\"level3\"\n            intensity=\"strong\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"glow\"\n            animation={\n              shouldAnimate && respectMotionPreference ? \"float\" : \"none\"\n            }\n            performanceMode=\"high\"\n            liftOnHover={!disabled}\n            press\n            className={cn(\n              \"glass-slider-thumb glass-absolute glass-flex glass-items-center glass-justify-center\",\n              \"glass-radius-full glass-cursor-pointer glass-transition-all glass-duration-200 glass-focus\",\n              colors.thumb,\n\n              // Size\n              config.thumb,\n\n              // States\n              disabled && \"glass-opacity-50\",\n              isDragging &&\n                dragIndex === index &&\n                (shouldAnimate && respectMotionPreference\n                  ? \"glass-scale-110\"\n                  : \"\"),\n\n              // Position\n              orientation === \"horizontal\" ? \"glass-top-1-2\" : \"glass-left-1-2\"\n            )}\n            style={{\n              ...position,\n              transform: \"translate(-50%, -50%)\",\n              background:\n                \"var(--glass-neutral-level3-surface)\",\n            }}\n            onPointerDown={(e: React.PointerEvent) =>\n              handlePointerDown(e, index)\n            }\n            role=\"slider\"\n            aria-valuemin={min}\n            aria-valuemax={max}\n            aria-valuenow={val}\n            aria-valuetext={formatValue(val)}\n            aria-invalid={isInvalid || undefined}\n            aria-label={\n              ariaLabel ||\n              label ||\n              (isRange\n                ? `Range slider ${index === 0 ? \"minimum\" : \"maximum\"}`\n                : \"Slider\")\n            }\n            aria-labelledby={ariaLabelledBy || (label ? labelId : undefined)}\n            aria-describedby={\n              ariaDescribedBy ||\n              (description ? descriptionId : undefined) ||\n              (error ? errorId : undefined)\n            }\n            tabIndex={disabled ? -1 : 0}\n          >\n            {thumbContent}\n\n            {showValue && (\n              <div\n                className={cn(\n                  \"glass-absolute glass-whitespace-nowrap glass-px-2 glass-py-1 glass-radius-md\",\n                  \"glass-surface-subtle glass-border glass-border-white/20\",\n                  \"glass-text-primary glass-font-medium glass-backdrop-blur-md\",\n                  config.label,\n                  orientation === \"horizontal\"\n                    ? \"glass-slider-value-top\"\n                    : \"glass-slider-value-left\"\n                )}\n              >\n                {formatValue(val)}\n              </div>\n            )}\n          </OptimizedGlass>\n        );\n      });\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"glass-slider-container\", className)}\n        data-liquid-glass-slider={material === \"liquid\" ? \"true\" : \"false\"}\n        data-neutral-value={neutralValue}\n        data-show-tick-labels={showTickLabels ? \"true\" : \"false\"}\n        data-interaction-glass={interactionGlass ? \"true\" : \"false\"}\n        data-testid={dataTestId || \"glassslider\"}\n        {...props}\n      >\n        {/* Label */}\n        {label && (\n          <label\n            id={labelId}\n            htmlFor={finalId}\n            className={cn(\n              \"glass-slider-label glass-block glass-font-medium glass-text-primary glass-mb-2\",\n              config.label,\n              required &&\n                'after:content-[\"*\"] after:glass-ml-1 after:glass-text-danger'\n            )}\n          >\n            {label}\n          </label>\n        )}\n\n        {/* Slider */}\n        <div\n          id={finalId}\n          className={cn(\n            \"glass-slider glass-relative glass-flex glass-items-center\",\n            orientation === \"horizontal\"\n              ? \"glass-w-full glass-h-6\"\n              : \"glass-h-32 glass-w-6\",\n            disabled && \"glass-opacity-50\",\n            error && \"glass-ring-2 glass-ring-danger glass-radius-lg\"\n          )}\n          {...a11yProps}\n          role={isRange ? undefined : \"group\"}\n        >\n          {/* Track */}\n          <div\n            ref={trackRef}\n            className={cn(\n              \"glass-slider-track glass-relative glass-backdrop-blur-md glass-radius-full glass-border glass-border-white/20\",\n              orientation === \"horizontal\" ? \"glass-w-full\" : \"glass-h-full\",\n              config.track,\n              colors.track,\n              \"glass-cursor-pointer\"\n            )}\n            onPointerDown={handleTrackClick}\n          >\n            {/* Tick marks */}\n            {showTicks && (\n              <div className=\"glass-absolute glass-inset-0\">\n                {tickMarks.map((tick, index) => {\n                  const percentage = getPercentage(tick);\n                  const position =\n                    orientation === \"horizontal\"\n                      ? { left: `${percentage}%` }\n                      : { bottom: `${percentage}%` };\n\n                  return (\n                    <div\n                      key={index}\n                      className={cn(\n                        \"glass-absolute glass-surface-subtle\",\n                        orientation === \"horizontal\"\n                          ? cn(config.tick, \"glass-top-1-2\")\n                          : cn(\n                              config.tick\n                                .replace(\"glass-h-\", \"glass-w-\")\n                                .replace(\"glass-w-px\", \"glass-h-px\"),\n                              \"glass-left-1-2\"\n                            )\n                      )}\n                      style={{\n                        ...position,\n                        transform: \"translate(-50%, -50%)\",\n                      }}\n                    />\n                  );\n                })}\n              </div>\n            )}\n\n            {/* Fill */}\n            <div\n              className={cn(\n                \"glass-slider-fill glass-absolute glass-radius-full\",\n                orientation === \"horizontal\"\n                  ? \"glass-h-full glass-top-0\"\n                  : \"glass-w-full glass-left-0\",\n                colors.fill\n              )}\n              style={{ ...getFillStyle(), transition: \"all 150ms ease\" }}\n            >\n              {/* Sheen sweep */}\n              <div className=\"glass-absolute glass-inset-0 glass-sheen\" />\n            </div>\n\n            {/* Background gradient */}\n            <div className=\"glass-absolute glass-inset-0 glass-radius-full glass-gradient-primary glass-gradient-primary glass-via-white-opacity-5 glass-gradient-primary\" />\n          </div>\n\n          {/* Thumbs */}\n          {renderThumbs()}\n        </div>\n\n        {/* Description */}\n        {description && (\n          <p\n            id={descriptionId}\n            className={cn(\n              \"glass-slider-description glass-text-secondary glass-mt-1\",\n              size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n            )}\n          >\n            {description}\n          </p>\n        )}\n\n        {/* Error message */}\n        {error && (\n          <p\n            id={errorId}\n            className={cn(\n              \"glass-slider-error text-destructive glass-mt-1\",\n              size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n            )}\n            role=\"alert\"\n            aria-live=\"polite\"\n          >\n            {error}\n          </p>\n        )}\n\n        {/* Min/Max labels */}\n        {showValue && (\n          <div\n            className={cn(\n              \"glass-flex glass-justify-between glass-mt-2\",\n              config.label,\n              \"glass-text-secondary\"\n            )}\n          >\n            <span>{formatValue(min)}</span>\n            <span>{formatValue(max)}</span>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassSlider.displayName = \"GlassSlider\";\n\nexport default GlassSlider;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { GlassStepInternalProps, Step } from \"./types\";\n// Import the new sub-components\nimport { GlassStepIcon } from \"./GlassStepIcon\";\nimport { GlassStepLabel } from \"./GlassStepLabel\";\n\n// Props for the internal GlassStep\ninterface GlassStepProps {\n  step: Step;\n  index: number;\n  active: boolean;\n  completed: boolean;\n  orientation: \"horizontal\" | \"vertical\";\n  isLast?: boolean;\n  onClick?: () => void;\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n  /** Glass surface elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n  /** Additional CSS classes */\n  className?: string;\n  /** Inline styles */\n  style?: React.CSSProperties;\n}\n\n// Get step state classes\nconst getStepStateClasses = (\n  active: boolean,\n  completed: boolean,\n  disabled: boolean,\n  clickable: boolean\n) => {\n  const baseClasses = [\n    \"flex items-center relative flex-1 glass-p-2 transition-all duration-300 ease-in-out\",\n    clickable && !disabled\n      ? \"cursor-pointer hover:bg-glass-light-primary/5 glass-hover-scale-1-01\"\n      : \"cursor-default\",\n  ];\n\n  if (disabled) {\n    baseClasses.push(\"opacity-50 pointer-events-none\");\n  }\n\n  return baseClasses.filter(Boolean).join(\" \");\n};\n\n// Get orientation classes\nconst getOrientationClasses = (orientation: \"horizontal\" | \"vertical\") => {\n  return orientation === \"vertical\"\n    ? \"flex-col text-center\"\n    : \"flex-row text-left\";\n};\n\n// Use the specific internal props type\nexport const GlassStep = forwardRef<HTMLDivElement, GlassStepInternalProps>(\n  (\n    {\n      step,\n      index,\n      active,\n      completed,\n      orientation,\n      onClick,\n      intent = \"neutral\",\n      elevation = \"level1\",\n      tier = \"medium\",\n      className,\n      style,\n    },\n    ref // Receive the forwarded ref\n  ) => {\n    const isClickable = !!onClick;\n    const finalOrientation = orientation || \"horizontal\";\n\n    const fallbackStep: Step = {\n      id: `step-${index}`,\n      title: `Step ${index + 1}`,\n      label: `Step ${index + 1}`,\n      disabled: true,\n    };\n    const safeStep = step ?? fallbackStep;\n    const isDisabled = safeStep.disabled ?? false;\n    const safeLabelText = safeStep.label || safeStep.title;\n\n    const handleClick = () => {\n      if (onClick && !isDisabled) {\n        onClick(safeStep);\n      }\n    };\n\n    const stepStateClasses = getStepStateClasses(\n      active,\n      completed,\n      isDisabled,\n      isClickable\n    );\n    const orientationClasses = getOrientationClasses(finalOrientation);\n\n    return (\n      <Motion data-glass-component>\n        <OptimizedGlass\n          ref={ref}\n          intent={intent}\n          elevation={elevation}\n          tier={tier}\n          className={cn(stepStateClasses, orientationClasses, className)}\n          style={{ ...(style || {}) }}\n          onClick={handleClick}\n          role={isClickable ? \"button\" : \"listitem\"}\n          aria-label={`Step ${index + 1}: ${safeLabelText}${active ? \" (current)\" : \"\"}${completed ? \" (completed)\" : \"\"}${isDisabled ? \" (disabled)\" : \"\"}`}\n          aria-current={active ? \"step\" : undefined}\n          aria-disabled={isDisabled}\n          tabIndex={isClickable && !isDisabled ? 0 : -1}\n          onKeyDown={\n            isClickable && !isDisabled\n              ? (e: React.KeyboardEvent) => {\n                  if (e.key === \"Enter\" || e.key === \" \") {\n                    e.preventDefault();\n                    handleClick();\n                  }\n                }\n              : undefined\n          }\n        >\n          {/* Use GlassStepIcon component */}\n          <GlassStepIcon\n            index={index}\n            active={active}\n            completed={completed}\n            icon={safeStep.icon}\n            intent={intent}\n            elevation={elevation}\n            tier={tier}\n          />\n          {/* Use GlassStepLabel component */}\n          <GlassStepLabel\n            label={safeLabelText}\n            active={active}\n            completed={completed}\n            orientation={finalOrientation}\n            intent={intent}\n            elevation={elevation}\n            tier={tier}\n          />\n        </OptimizedGlass>\n      </Motion>\n    );\n  }\n);\n\nGlassStep.displayName = \"GlassStep\";\n", "\"use client\";\nimport React from \"react\";\nimport { Check } from \"@/icons\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\ninterface GlassStepIconProps {\n  index: number;\n  active: boolean;\n  completed: boolean;\n  icon?: React.ReactNode | string;\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n  /** Glass surface elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n  /** Additional CSS classes */\n  className?: string;\n  /** Inline styles */\n  style?: React.CSSProperties;\n  /** Data test id */\n  \"data-testid\"?: string;\n}\n\n// Get icon state classes\nconst getIconStateClasses = (active: boolean, completed: boolean) => {\n  if (active) {\n    return \"bg-primary-500 glass-text-primary border-primary-300 shadow-[0_0_12px_3px_hsl(var(--glass-color-primary)/0.5)]\";\n  }\n  if (completed) {\n    return \"bg-success-500 glass-text-primary border-success-300\";\n  }\n  return \"bg-white/10 glass-text-secondary border-white/20\";\n};\n\nexport const GlassStepIcon: React.FC<GlassStepIconProps> = ({\n  index,\n  active,\n  completed,\n  icon,\n  intent = \"neutral\",\n  elevation = \"level2\",\n  tier = \"medium\",\n  className,\n  style,\n  \"data-testid\": dataTestId,\n}) => {\n  const getIconContent = () => {\n    if (icon) {\n      // If icon is a React element, render it directly\n      return typeof icon === \"string\" ? icon : icon;\n    }\n    if (completed) {\n      return <Check size={16} />;\n    }\n    return index + 1; // Display step number\n  };\n\n  const iconStateClasses = getIconStateClasses(active, completed);\n\n  return (\n    <Motion\n      data-glass-component\n      className={cn(\"inline-block\", className)}\n      data-testid={dataTestId}\n    >\n      <OptimizedGlass\n        intent={intent}\n        elevation={elevation}\n        tier={tier}\n        aria-hidden=\"true\"\n        className={cn(\n          // Base styles\n          \"w-6 h-6 min-w-6 glass-radius-full\",\n          \"flex items-center justify-center\",\n          \"relative z-[1] flex-shrink-0\",\n          \"glass-text-xs font-semibold\",\n          \"transition-all duration-300 ease-in-out\",\n          \"border\",\n          // State-based styles\n          iconStateClasses\n        )}\n        style={{ ...(style || {}) }}\n      >\n        {getIconContent()}\n      </OptimizedGlass>\n    </Motion>\n  );\n};\n\nGlassStepIcon.displayName = \"GlassStepIcon\";\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\ninterface GlassStepLabelProps {\n  label?: string;\n  active: boolean;\n  completed: boolean;\n  orientation: \"horizontal\" | \"vertical\";\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n  /** Glass surface elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n  /** Additional CSS classes */\n  className?: string;\n  /** Inline styles */\n  style?: React.CSSProperties;\n  /** Test id attr */\n  \"data-testid\"?: string;\n}\n\n// Get label state classes\nconst getLabelStateClasses = (active: boolean, completed: boolean) => {\n  if (active) {\n    return \"text-primary-600 font-semibold dark:text-primary-400\";\n  }\n  if (completed) {\n    return \"glass-text-secondary font-normal dark:glass-text-secondary\";\n  }\n  return \"glass-text-secondary font-normal dark:glass-text-secondary\";\n};\n\n// Get orientation classes\nconst getOrientationClasses = (orientation: \"horizontal\" | \"vertical\") => {\n  return orientation === \"horizontal\" ? \"glass-ml-2\" : \"glass-mt-1\";\n};\n\nexport const GlassStepLabel: React.FC<GlassStepLabelProps> = ({\n  label,\n  active,\n  completed,\n  orientation,\n  intent = \"neutral\",\n  elevation = \"level1\",\n  tier = \"low\",\n  className,\n  style,\n  \"data-testid\": dataTestId,\n}) => {\n  if (!label) {\n    return null;\n  }\n\n  const labelStateClasses = getLabelStateClasses(active, completed);\n  const orientationClasses = getOrientationClasses(orientation);\n\n  return (\n    <Motion\n      data-glass-component\n      className={cn(\n        orientationClasses,\n        \"transition-all duration-300 ease-in-out\"\n      )}\n    >\n      <span\n        className={cn(\n          // Base styles\n          \"glass-text-sm leading-tight\",\n          \"transition-all duration-300 ease-in-out\",\n          // State-based styles\n          labelStateClasses,\n          className\n        )}\n        style={{ ...(style || {}) }}\n        data-testid={dataTestId}\n      >\n        {label}\n      </span>\n    </Motion>\n  );\n};\n\nGlassStepLabel.displayName = \"GlassStepLabel\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  announceToScreenReader,\n  createFormFieldA11y,\n  useA11yId,\n} from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassSwitchProps\n  extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\"> {\n  /** Whether the switch is checked */\n  checked?: boolean;\n  /** Whether the switch is checked by default (uncontrolled) */\n  defaultChecked?: boolean;\n  /** Callback when the switch state changes */\n  onChange?: (checked: boolean) => void;\n  /** Alias for onChange for compatibility */\n  onCheckedChange?: (checked: boolean) => void;\n  /** Size of the switch */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n  /** Label text */\n  label?: string;\n  /** Description text */\n  description?: string;\n  /** Position of label relative to switch */\n  labelPosition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n  /** Whether the switch is disabled */\n  disabled?: boolean;\n  /** Loading state */\n  loading?: boolean;\n  /** Icons for on/off states */\n  icons?: {\n    checked?: React.ReactNode;\n    unchecked?: React.ReactNode;\n  };\n  /** Whether to show focus ring */\n  focusRing?: boolean;\n  /** Custom thumb content */\n  thumbContent?: React.ReactNode;\n  /** Error message */\n  error?: string;\n  /** Whether the switch is required */\n  required?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  material?: \"glass\" | \"liquid\";\n  /** Accessible label for the switch */\n  \"aria-label\"?: string;\n  /** ID of element that labels the switch */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the switch */\n  \"aria-describedby\"?: string;\n}\n\nexport const GlassSwitch = forwardRef<HTMLButtonElement, GlassSwitchProps>(\n  (\n    {\n      checked,\n      defaultChecked = false,\n      onChange,\n      onCheckedChange,\n      size = \"md\",\n      variant = \"default\",\n      label,\n      description,\n      labelPosition = \"right\",\n      disabled = false,\n      loading = false,\n      icons,\n      focusRing = true,\n      thumbContent,\n      error,\n      required = false,\n      respectMotionPreference = true,\n      material = \"glass\",\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-describedby\": ariaDescribedBy,\n      className,\n      id,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n\n    // Generate unique IDs for accessibility\n    const switchId = useA11yId(\"glass-switch\");\n    const finalId = id || switchId;\n    const labelId = label ? useA11yId(\"glass-switch-label\") : undefined;\n    const descriptionId = description\n      ? useA11yId(\"glass-switch-description\")\n      : undefined;\n    const errorId = error ? useA11yId(\"glass-switch-error\") : undefined;\n\n    const [internalChecked, setInternalChecked] =\n      React.useState(defaultChecked);\n    const isChecked = checked !== undefined ? checked : internalChecked;\n\n    const isInvalid = !!error;\n\n    // Create accessibility attributes\n    // If no label or aria-label provided, use default for accessibility\n    const defaultAriaLabel =\n      !label && !ariaLabel && !ariaLabelledBy ? \"Toggle switch\" : undefined;\n    const a11yProps = createFormFieldA11y({\n      id: finalId,\n      label:\n        !ariaLabelledBy && !labelId\n          ? ariaLabel || label || defaultAriaLabel\n          : undefined,\n      description: description,\n      error: error,\n      required: required,\n      invalid: isInvalid,\n      disabled: disabled || loading,\n      labelId: ariaLabelledBy || labelId,\n      descriptionId: ariaDescribedBy || descriptionId,\n      errorId: errorId,\n    });\n\n    // Announce error state changes\n    React.useEffect(() => {\n      if (error) {\n        announceToScreenReader(`Switch error: ${error}`, \"assertive\");\n      }\n    }, [error]);\n\n    const handleToggle = (event: React.MouseEvent) => {\n      if (disabled || loading) return;\n\n      const newChecked = !isChecked;\n\n      if (checked === undefined) {\n        setInternalChecked(newChecked);\n      }\n\n      onChange?.(newChecked);\n      onCheckedChange?.(newChecked);\n      props?.onClick?.(event as any);\n\n      // Announce state change\n      announceToScreenReader(`Switch ${newChecked ? \"on\" : \"off\"}`, \"polite\");\n    };\n\n    const sizeConfig = {\n      sm: {\n        track: { width: 36, height: 20 },\n        thumb: { width: 16, height: 16 },\n        translateX: 16,\n        text: \"glass-text-xs\",\n        gap: \"glass-gap-2\",\n      },\n      md: {\n        track: { width: 44, height: 24 },\n        thumb: { width: 20, height: 20 },\n        translateX: 20,\n        text: \"glass-text-sm\",\n        gap: \"glass-gap-3\",\n      },\n      lg: {\n        track: { width: 56, height: 28 },\n        thumb: { width: 24, height: 24 },\n        translateX: 28,\n        text: \"glass-text-base\",\n        gap: \"glass-gap-4\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        track: {\n          checked: \"bg-primary border-primary/20\",\n          unchecked: \"bg-muted/50 border border-border/20\",\n        },\n        thumb: {\n          checked: \"bg-white shadow-lg\",\n          unchecked: \"bg-foreground/80 shadow-md\",\n        },\n      },\n      success: {\n        track: {\n          checked: \"bg-green-500 border-green-400/20\",\n          unchecked: \"bg-muted/50 border border-border/20\",\n        },\n        thumb: {\n          checked: \"bg-white shadow-lg\",\n          unchecked: \"bg-foreground/80 shadow-md\",\n        },\n      },\n      warning: {\n        track: {\n          checked: \"bg-amber-500 border-amber-400/20\",\n          unchecked: \"bg-muted/50 border border-border/20\",\n        },\n        thumb: {\n          checked: \"bg-white shadow-lg\",\n          unchecked: \"bg-foreground/80 shadow-md\",\n        },\n      },\n      error: {\n        track: {\n          checked: \"bg-red-500 border-red-400/20\",\n          unchecked: \"bg-muted/50 border border-border/20\",\n        },\n        thumb: {\n          checked: \"bg-white shadow-lg\",\n          unchecked: \"bg-foreground/80 shadow-md\",\n        },\n      },\n      info: {\n        track: {\n          checked: \"bg-blue-500 border-blue-400/20\",\n          unchecked: \"bg-muted/50 border border-border/20\",\n        },\n        thumb: {\n          checked: \"bg-white shadow-lg\",\n          unchecked: \"bg-foreground/80 shadow-md\",\n        },\n      },\n    };\n\n    const config = sizeConfig?.[size];\n    const colors = variantConfig?.[variant];\n\n    const switchElement = (\n      <OptimizedGlass\n        as=\"button\"\n        ref={ref as any}\n        role=\"switch\"\n        data-liquid-glass-switch={material === \"liquid\" ? \"true\" : \"false\"}\n        type=\"button\"\n        elevation={isChecked ? \"level2\" : \"level1\"}\n        intensity={isChecked ? \"medium\" : \"subtle\"}\n        depth={2}\n        tint={isChecked ? \"primary\" : \"neutral\"}\n        border=\"subtle\"\n        animation={isMotionSafe && respectMotionPreference ? \"shimmer\" : \"none\"}\n        performanceMode=\"medium\"\n        liftOnHover={!disabled}\n        press\n        className={cn(\n          \"glass-switch relative inline-flex shrink-0 cursor-pointer glass-radius-full transition-all duration-200 glass-overflow-hidden\",\n          disabled && \"opacity-50 cursor-not-allowed\",\n          loading && \"cursor-wait\",\n          focusRing && \"glass-focus\",\n          error && \"ring-2 ring-destructive/50\",\n          className\n        )}\n        {...props}\n        onClick={handleToggle}\n        style={{ ...config.track, ...style }}\n        aria-checked={!!isChecked}\n        aria-invalid={isInvalid || undefined}\n        aria-required={required || undefined}\n        disabled={disabled || loading}\n        id={finalId}\n        {...a11yProps}\n      >\n        <div\n          className={cn(\n            \"pointer-events-none relative flex items-center justify-center glass-radius-full transition-all duration-200 shadow-lg\",\n            isChecked ? colors.thumb.checked : colors.thumb.unchecked\n          )}\n          style={{\n            ...config.thumb,\n            transform: `translateX(${isChecked ? config.translateX : 2}px)`,\n          }}\n        >\n          {thumbContent ?? (isChecked ? icons?.checked : icons?.unchecked)}\n        </div>\n      </OptimizedGlass>\n    );\n\n    const labelElement = label && (\n      <label\n        htmlFor={finalId}\n        id={labelId}\n        className={cn(\n          \"glass-switch-label cursor-pointer font-medium text-foreground\",\n          config.text,\n          disabled && \"cursor-not-allowed opacity-70\",\n          required &&\n            'after:content-[\"*\"] after:glass-ml-1 after:text-destructive'\n        )}\n      >\n        {label}\n      </label>\n    );\n\n    const descriptionElement = description && (\n      <p\n        id={descriptionId}\n        className={cn(\n          \"glass-switch-description glass-text-secondary\",\n          size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\",\n          disabled && \"opacity-70\"\n        )}\n      >\n        {description}\n      </p>\n    );\n\n    const errorElement = error && (\n      <p\n        id={errorId}\n        className={cn(\n          \"glass-switch-error text-destructive glass-mt-1\",\n          size === \"sm\" ? \"glass-text-xs\" : \"glass-text-sm\"\n        )}\n        role=\"alert\"\n        aria-live=\"polite\"\n      >\n        {error}\n      </p>\n    );\n\n    // Render based on label position\n    if (!label && !description && !error) {\n      return switchElement;\n    }\n\n    const containerClass = cn(\n      \"glass-switch-container flex items-start\",\n      config.gap,\n      labelPosition === \"left\" && \"flex-row-reverse\",\n      labelPosition === \"right\" && \"flex-row\",\n      labelPosition === \"top\" && \"flex-col\",\n      labelPosition === \"bottom\" && \"flex-col-reverse\"\n    );\n\n    return (\n      <div className={containerClass}>\n        {(labelPosition === \"left\" || labelPosition === \"right\") && (\n          <div className=\"glass-flex glass-items-center\">{switchElement}</div>\n        )}\n\n        {(labelPosition === \"top\" || labelPosition === \"bottom\") &&\n          switchElement}\n\n        <div className=\"glass-gap-1\">\n          {labelElement}\n          {descriptionElement}\n          {errorElement}\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassSwitch.displayName = \"GlassSwitch\";\n\nexport default GlassSwitch;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Clock } from \"../../icons\";\nimport { GlassInput, type GlassInputProps } from \"./GlassInput\";\n\nexport interface GlassTimeFieldProps\n  extends Omit<GlassInputProps, \"type\" | \"leftIcon\"> {}\n\nexport const GlassTimeField = forwardRef<HTMLInputElement, GlassTimeFieldProps>(\n  ({ label = \"Time\", ...props }, ref) => (\n    <GlassInput\n      ref={ref}\n      type=\"time\"\n      label={label}\n      leftIcon={<Clock aria-hidden=\"true\" />}\n      {...props}\n    />\n  )\n);\n\nGlassTimeField.displayName = \"GlassTimeField\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { createContext, useContext, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassToggleProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n  /**\n   * Whether toggle is pressed/active\n   */\n  pressed?: boolean;\n  /**\n   * Default pressed state\n   */\n  defaultPressed?: boolean;\n  /**\n   * Callback when pressed state changes\n   */\n  onPressedChange?: (pressed: boolean) => void;\n  /**\n   * Toggle size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Toggle variant\n   */\n  variant?: \"default\" | \"outline\" | \"ghost\";\n  /**\n   * Whether toggle is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Toggle content\n   */\n  children?: React.ReactNode;\n  /**\n   * Left icon\n   */\n  leftIcon?: React.ReactNode;\n  /**\n   * Right icon\n   */\n  rightIcon?: React.ReactNode;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Toggle shape\n   */\n  shape?: \"glass-radius-md\" | \"square\" | \"circle\";\n  /**\n   * Animation type\n   */\n  animation?: \"none\" | \"scale\" | \"slide\";\n  material?: \"glass\" | \"liquid\";\n}\n\nexport interface GlassToggleGroupProps {\n  /**\n   * Selected toggle values\n   */\n  value?: string[];\n  /**\n   * Default selected values\n   */\n  defaultValue?: string[];\n  /**\n   * Callback when selection changes\n   */\n  onValueChange?: (value: string[]) => void;\n  /**\n   * Toggle group type\n   */\n  type?: \"single\" | \"multiple\";\n  /**\n   * Whether group is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Toggle group orientation\n   */\n  orientation?: \"horizontal\" | \"vertical\";\n  /**\n   * Group size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Group variant\n   */\n  variant?: \"default\" | \"outline\" | \"ghost\";\n  /**\n   * Children (GlassToggle components)\n   */\n  children: React.ReactNode;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nexport interface GlassToggleGroupItemProps\n  extends Omit<GlassToggleProps, \"pressed\" | \"onPressedChange\"> {\n  /**\n   * Toggle value\n   */\n  value: string;\n}\n\n// Context for toggle group\nconst ToggleGroupContext = createContext<{\n  value?: string[];\n  onValueChange?: (value: string[]) => void;\n  type?: \"single\" | \"multiple\";\n  disabled?: boolean;\n  size?: \"sm\" | \"md\" | \"lg\";\n  variant?: \"default\" | \"outline\" | \"ghost\";\n} | null>(null);\n\nconst useToggleGroupContext = () => {\n  return useContext(ToggleGroupContext);\n};\n\n/**\n * GlassToggle component\n * A glassmorphism toggle button\n */\nexport const GlassToggle = React.forwardRef<\n  HTMLButtonElement,\n  GlassToggleProps\n>(\n  (\n    {\n      pressed: controlledPressed,\n      defaultPressed = false,\n      onPressedChange,\n      size = \"md\",\n      variant = \"default\",\n      disabled = false,\n      children,\n      leftIcon,\n      rightIcon,\n      className,\n      shape = \"glass-radius-md\",\n      animation = \"scale\",\n      material = \"glass\",\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalPressed, setInternalPressed] = useState(defaultPressed);\n    const pressed =\n      controlledPressed !== undefined ? controlledPressed : internalPressed;\n\n    // Check if this toggle is part of a group\n    const groupContext = useToggleGroupContext();\n    const isInGroup = !!groupContext;\n\n    const handleClick = () => {\n      if (disabled) return;\n\n      if (isInGroup && \"value\" in props) {\n        // Handle as group item\n        const itemValue = (props as GlassToggleGroupItemProps).value;\n        const currentValues = groupContext.value || [];\n\n        if (groupContext.type === \"single\") {\n          const newValues = currentValues.includes(itemValue)\n            ? []\n            : [itemValue];\n          groupContext.onValueChange?.(newValues);\n        } else {\n          const newValues = currentValues.includes(itemValue)\n            ? currentValues.filter((v: any) => v !== itemValue)\n            : [...currentValues, itemValue];\n          groupContext.onValueChange?.(newValues);\n        }\n      } else {\n        // Handle as standalone toggle\n        const newPressed = !pressed;\n        if (controlledPressed === undefined) {\n          setInternalPressed(newPressed);\n        }\n        onPressedChange?.(newPressed);\n      }\n    };\n\n    const sizeClasses = {\n      sm: \"h-8 glass-px-3 glass-text-sm\",\n      md: \"h-10 glass-px-4 glass-text-base\",\n      lg: \"h-12 glass-px-6 glass-text-lg\",\n    };\n\n    const shapeClasses = {\n      \"glass-radius-md\": \"glass-radius-lg\",\n      square: \"rounded-none\",\n      circle: \"glass-radius-full\",\n    };\n\n    const getVariantClasses = () => {\n      const baseClasses = `glass-backdrop-blur-md border border-white/20 transition-all duration-[${ANIMATION.DURATION.normal}ms]`;\n\n      switch (variant) {\n        case \"outline\":\n          return cn(\n            baseClasses,\n            pressed\n              ? \"bg-white/15 border-white/40 glass-text-primary shadow-lg\"\n              : \"bg-white/8 hover:bg-white/12 glass-text-primary/80 hover:glass-text-primary hover:border-white/30\"\n          );\n        case \"ghost\":\n          return cn(\n            pressed\n              ? \"bg-white/12 glass-text-primary shadow-md\"\n              : \"hover:bg-white/10 glass-text-primary/70 hover:glass-text-primary\",\n            `transition-all duration-[${ANIMATION.DURATION.normal}ms]`\n          );\n        default:\n          return cn(\n            baseClasses,\n            pressed\n              ? \"bg-white/15 border-white/40 glass-text-primary shadow-lg scale-105\"\n              : \"bg-white/8 hover:bg-white/12 glass-text-primary/80 hover:glass-text-primary hover:border-white/30 glass-hover-scale-105\"\n          );\n      }\n    };\n\n    const getAnimationProps = () => {\n      if (animation === \"none\") return {};\n\n      switch (animation) {\n        case \"scale\":\n          return {\n            whileHover: { scale: disabled ? 1 : 1.05 },\n            whileTap: { scale: disabled ? 1 : 0.95 },\n          };\n        case \"slide\":\n          return {\n            initial: { x: pressed ? 2 : 0 },\n            animate: { x: pressed ? 2 : 0 },\n            whileHover: { x: pressed ? 4 : 2 },\n          };\n        default:\n          return {};\n      }\n    };\n\n    return (\n      <Motion\n        data-glass-component\n        {...getAnimationProps()}\n        className=\"glass-inline-glass-block\"\n      >\n        <OptimizedGlass\n          intent=\"neutral\"\n          elevation={pressed ? \"level3\" : \"level1\"}\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          ref={ref as any}\n          data-liquid-glass-toggle={material === \"liquid\" ? \"true\" : \"false\"}\n          data-testid={dataTestId || \"glasstoggle\"}\n          className={cn(\n            \"relative flex items-center justify-center glass-gap-2 font-medium\",\n            \"focus:outline-none focus:ring-2 glass-focus-ring-white-opacity-30 focus:ring-offset-2 focus:ring-offset-transparent\",\n            \"disabled:opacity-50 glass-disabled-cursor-not-allowed disabled:hover:transform-none\",\n            sizeClasses[size],\n            shapeClasses[shape],\n            getVariantClasses(),\n            className\n          )}\n          onClick={handleClick}\n          role=\"button\"\n          aria-pressed={pressed}\n          aria-label={ariaLabel || (children ? undefined : \"Toggle\")}\n          {...props}\n        >\n          {/* Content */}\n          {leftIcon && (\n            <span className=\"glass-flex glass-items-center glass-justify-center\">\n              {leftIcon}\n            </span>\n          )}\n\n          {children && (\n            <span className=\"glass-flex glass-items-center glass-justify-center\">\n              {children}\n            </span>\n          )}\n\n          {rightIcon && (\n            <span className=\"glass-flex glass-items-center glass-justify-center\">\n              {rightIcon}\n            </span>\n          )}\n\n          {/* Active indicator for ghost variant */}\n          {variant === \"ghost\" && pressed && (\n            <div className=\"glass-absolute glass-inset-0 glass-surface-subtle/10 glass-radius-lg glass-animate-pulse\" />\n          )}\n        </OptimizedGlass>\n      </Motion>\n    );\n  }\n);\n\nGlassToggle.displayName = \"GlassToggle\";\n\n/**\n * GlassToggleGroup component\n * A group of toggle buttons\n */\nexport const GlassToggleGroup: React.FC<GlassToggleGroupProps> = ({\n  value: controlledValue,\n  defaultValue = [],\n  onValueChange,\n  type = \"multiple\",\n  disabled = false,\n  orientation = \"horizontal\",\n  size = \"md\",\n  variant = \"default\",\n  children,\n  className,\n}) => {\n  const [internalValue, setInternalValue] = useState<string[]>(defaultValue);\n  const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n  const handleValueChange = (newValue: string[]) => {\n    if (controlledValue === undefined) {\n      setInternalValue(newValue);\n    }\n    onValueChange?.(newValue);\n  };\n\n  const contextValue = {\n    value,\n    onValueChange: handleValueChange,\n    type,\n    disabled,\n    size,\n    variant,\n  };\n\n  return (\n    <ToggleGroupContext.Provider value={contextValue}>\n      <div\n        className={cn(\n          \"flex glass-gap-2 glass-p-1 glass-backdrop-blur-md bg-white/5 border border-white/10 glass-radius-lg\",\n          {\n            \"flex-row\": orientation === \"horizontal\",\n            \"flex-col\": orientation === \"vertical\",\n          },\n          className\n        )}\n        role=\"group\"\n      >\n        {children}\n      </div>\n    </ToggleGroupContext.Provider>\n  );\n};\n\n/**\n * GlassToggleGroupItem component\n * Individual toggle item within a group\n */\nexport const GlassToggleGroupItem: React.FC<GlassToggleGroupItemProps> = ({\n  value,\n  children,\n  ...props\n}) => {\n  const groupContext = useToggleGroupContext();\n  if (!groupContext) {\n    throw new Error(\n      \"GlassToggleGroupItem must be used within a GlassToggleGroup\"\n    );\n  }\n\n  const isPressed = groupContext.value?.includes(value) || false;\n\n  return (\n    <GlassToggle\n      pressed={isPressed}\n      size={groupContext.size}\n      variant={groupContext.variant}\n      disabled={groupContext.disabled}\n      {...props}\n    >\n      {children}\n    </GlassToggle>\n  );\n};\n\n/**\n * Hook for managing toggle state\n */\nexport const useToggle = (initialPressed = false) => {\n  const [pressed, setPressed] = useState(initialPressed);\n\n  return {\n    pressed,\n    setPressed,\n    toggle: () => setPressed(!pressed),\n    onPressedChange: setPressed,\n  };\n};\n\n/**\n * Hook for managing toggle group state\n */\nexport const useToggleGroup = (initialValue: string[] = []) => {\n  const [value, setValue] = useState<string[]>(initialValue);\n\n  return {\n    value,\n    setValue,\n    onValueChange: setValue,\n    toggle: (itemValue: string) => {\n      setValue((prev: any) =>\n        prev.includes(itemValue)\n          ? prev.filter((v: any) => v !== itemValue)\n          : [...prev, itemValue]\n      );\n    },\n  };\n};\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  AlertCircle,\n  Check,\n  ChevronLeft,\n  ChevronRight,\n  Loader2,\n} from \"@/icons\";\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassProgress } from \"../data-display\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface WizardStep {\n  id: string;\n  title: string;\n  description?: string;\n  icon?: React.ReactNode;\n  content: React.ReactNode;\n  validation?: () => boolean | Promise<boolean>;\n  optional?: boolean;\n  disabled?: boolean;\n}\n\nexport type WizardData = Record<string, unknown>;\n\nexport interface GlassWizardProps {\n  /**\n   * Wizard steps\n   */\n  steps?: WizardStep[];\n  /**\n   * Current step index\n   */\n  currentStep?: number;\n  /**\n   * Callback when step changes\n   */\n  onStepChange?: (stepIndex: number) => void;\n  /**\n   * Callback when wizard completes\n   */\n  onComplete?: (data?: WizardData) => void;\n  /**\n   * Callback when wizard is cancelled\n   */\n  onCancel?: () => void;\n  /**\n   * Wizard title\n   */\n  title?: string;\n  /**\n   * Wizard description\n   */\n  description?: string;\n  /**\n   * Show step navigation\n   */\n  showStepNavigation?: boolean;\n  /**\n   * Show step progress\n   */\n  showProgress?: boolean;\n  /**\n   * Allow step skipping\n   */\n  allowSkip?: boolean;\n  /**\n   * Custom next button text\n   */\n  nextButtonText?: string;\n  /**\n   * Custom previous button text\n   */\n  previousButtonText?: string;\n  /**\n   * Custom complete button text\n   */\n  completeButtonText?: string;\n  /**\n   * Custom cancel button text\n   */\n  cancelButtonText?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom style\n   */\n  style?: React.CSSProperties;\n  /**\n   * Step validation mode\n   */\n  validationMode?: \"onChange\" | \"onNext\";\n  /**\n   * Reduces spacing and minimum heights for card previews and dense panels.\n   */\n  compact?: boolean;\n}\n\n// Wizard Context\ninterface WizardContextValue {\n  currentStep: number;\n  steps: WizardStep[];\n  goToStep: (stepIndex: number) => void;\n  goToNext: () => void;\n  goToPrevious: () => void;\n  isStepValid: (stepIndex: number) => boolean;\n  isStepCompleted: (stepIndex: number) => boolean;\n  completeWizard: () => void;\n  cancelWizard: () => void;\n  data: WizardData;\n  setData: (data: WizardData) => void;\n}\n\nconst WizardContext = createContext<WizardContextValue | null>(null);\n\nexport const useWizard = () => {\n  const context = useContext(WizardContext);\n  if (!context) {\n    return {\n      currentStep: 0,\n      totalSteps: 1,\n      nextStep: () => {},\n      previousStep: () => {},\n      goToStep: () => {},\n      isFirstStep: true,\n      isLastStep: true,\n      data: {},\n      setData: () => {},\n    };\n  }\n  return context;\n};\n\n/**\n * GlassWizard component\n * A multi-step form wizard with glassmorphism styling and comprehensive features\n */\nexport const GlassWizard: React.FC<GlassWizardProps> = ({\n  steps = [],\n  currentStep: controlledCurrentStep,\n  onStepChange,\n  onComplete,\n  onCancel,\n  title,\n  description,\n  showStepNavigation = true,\n  showProgress = true,\n  allowSkip = false,\n  nextButtonText = \"Next\",\n  previousButtonText = \"Previous\",\n  completeButtonText = \"Complete\",\n  cancelButtonText = \"Cancel\",\n  loading = false,\n  validationMode = \"onNext\",\n  compact = false,\n  className,\n  style,\n  ...props\n}) => {\n  const [internalCurrentStep, setInternalCurrentStep] = useState(0);\n  const [completedSteps, setCompletedSteps] = useState<Set<number>>(new Set());\n  const [wizardData, setWizardData] = useState<WizardData>({});\n  const [validatingStep, setValidatingStep] = useState<number | null>(null);\n  const [stepErrors, setStepErrors] = useState<Record<number, string>>({});\n\n  const currentStep = controlledCurrentStep ?? internalCurrentStep;\n  const currentStepData = steps.length > 0 ? steps[currentStep] : undefined;\n  const isFirstStep = currentStep === 0;\n  const isLastStep = steps.length > 0 ? currentStep === steps.length - 1 : true;\n  const progress =\n    steps.length > 0 ? ((currentStep + 1) / steps.length) * 100 : 0;\n\n  // Update internal step when controlled step changes\n  useEffect(() => {\n    if (controlledCurrentStep !== undefined) {\n      setInternalCurrentStep(controlledCurrentStep);\n    }\n  }, [controlledCurrentStep]);\n\n  // Validate step\n  const validateStep = async (stepIndex: number): Promise<boolean> => {\n    if (stepIndex < 0 || stepIndex >= steps.length) return true;\n    const step = steps[stepIndex];\n    if (!step?.validation) return true;\n\n    try {\n      setValidatingStep(stepIndex);\n      const isValid = await step.validation();\n      setValidatingStep(null);\n\n      if (!isValid) {\n        setStepErrors((prev) => ({\n          ...prev,\n          [stepIndex]: \"Please complete all required fields\",\n        }));\n      } else {\n        setStepErrors((prev) => {\n          const newErrors = { ...prev };\n          delete newErrors[stepIndex];\n          return newErrors;\n        });\n      }\n\n      return isValid;\n    } catch {\n      setValidatingStep(null);\n      setStepErrors((prev) => ({\n        ...prev,\n        [stepIndex]: \"Validation failed\",\n      }));\n      return false;\n    }\n  };\n\n  // Check if step is valid\n  const isStepValid = (stepIndex: number): boolean => {\n    return !stepErrors[stepIndex];\n  };\n\n  // Check if step is completed\n  const isStepCompleted = (stepIndex: number): boolean => {\n    return completedSteps.has(stepIndex);\n  };\n\n  // Navigate to step\n  const goToStep = async (stepIndex: number) => {\n    if (stepIndex < 0 || stepIndex >= steps.length) return;\n\n    // Validate current step if validation mode is onChange\n    if (validationMode === \"onChange\" && !isStepValid(currentStep)) {\n      return;\n    }\n\n    // Validate current step before moving to next\n    if (stepIndex > currentStep) {\n      const isValid = await validateStep(currentStep);\n      if (!isValid) return;\n\n      // Mark current step as completed\n      setCompletedSteps((prev) => new Set([...prev, currentStep]));\n    }\n\n    if (controlledCurrentStep === undefined) {\n      setInternalCurrentStep(stepIndex);\n    }\n    onStepChange?.(stepIndex);\n  };\n\n  // Go to next step\n  const goToNext = async () => {\n    if (isLastStep) {\n      await completeWizard();\n    } else {\n      await goToStep(currentStep + 1);\n    }\n  };\n\n  // Go to previous step\n  const goToPrevious = () => {\n    if (!isFirstStep) {\n      goToStep(currentStep - 1);\n    }\n  };\n\n  // Complete wizard\n  const completeWizard = async () => {\n    // Validate final step\n    const isValid = await validateStep(currentStep);\n    if (!isValid) return;\n\n    // Mark final step as completed\n    setCompletedSteps((prev) => new Set([...prev, currentStep]));\n\n    onComplete?.(wizardData);\n  };\n\n  // Cancel wizard\n  const cancelWizard = () => {\n    onCancel?.();\n  };\n\n  // Set wizard data\n  const setData = (data: WizardData) => {\n    setWizardData((prev) => ({ ...prev, ...data }));\n  };\n\n  const contextValue: WizardContextValue = {\n    currentStep,\n    steps,\n    goToStep,\n    goToNext,\n    goToPrevious,\n    isStepValid,\n    isStepCompleted,\n    completeWizard,\n    cancelWizard,\n    data: wizardData,\n    setData,\n  };\n\n  return (\n    <WizardContext.Provider data-glass-component value={contextValue}>\n      <Motion\n        preset=\"fadeIn\"\n        className=\"glass-w-full glass-max-w-4xl glass-mx-auto glass-min-w-0\"\n      >\n        <GlassCard\n          size=\"sm\"\n          className={cn(\"glass-overflow-hidden glass-min-w-0\", className)}\n          style={{\n            width: \"100%\",\n            maxWidth: \"100%\",\n            boxSizing: \"border-box\",\n            ...style,\n          }}\n          {...props}\n        >\n          {/* Header */}\n          <CardHeader\n            className=\"glass-border-b glass-border-white/10 glass-p-4\"\n            style={{\n              padding: compact ? \"12px\" : undefined,\n            }}\n          >\n            <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3 glass-min-w-0\">\n              <div className=\"glass-min-w-0\">\n                {title && (\n                  <CardTitle className=\"glass-text-xl glass-font-semibold glass-text-primary glass-mb-1\">\n                    {title}\n                  </CardTitle>\n                )}\n                {description && (\n                  <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    {description}\n                  </p>\n                )}\n              </div>\n\n              {showProgress && (\n                <div className=\"glass-flex glass-items-center glass-gap-2 glass-min-w-0\">\n                  <span className=\"glass-text-sm glass-text-secondary glass-whitespace-nowrap\">\n                    Step {currentStep + 1} of {steps.length}\n                  </span>\n                  <div className=\"glass-w-20 glass-max-w-full\">\n                    <GlassProgress value={progress} size=\"sm\" />\n                  </div>\n                </div>\n              )}\n            </div>\n\n            {/* Step Navigation */}\n            {showStepNavigation && (\n              <nav\n                aria-label=\"Wizard steps\"\n                className=\"glass-flex glass-items-center glass-gap-1 glass-mt-4 glass-overflow-x-auto glass-pb-1 glass-min-w-0\"\n                style={{\n                  gap: compact ? 6 : undefined,\n                  marginTop: compact ? 10 : undefined,\n                  overflowX: \"auto\",\n                  scrollbarWidth: \"none\",\n                }}\n              >\n                {steps.map((step, index) => {\n                  const isActive = index === currentStep;\n                  const isCompleted = completedSteps.has(index);\n                  const isValid = isStepValid(index);\n                  const isDisabled = step.disabled;\n\n                  return (\n                    <button\n                      key={step.id}\n                      onClick={(e) => !isDisabled && goToStep(index)}\n                      onKeyDown={(e) => {\n                        if (e.key === \"Enter\" || e.key === \" \") {\n                          e.preventDefault();\n                          if (!isDisabled) goToStep(index);\n                        }\n                      }}\n                      disabled={isDisabled}\n                      aria-label={`${step.title}${isActive ? \" (current step)\" : \"\"}${isCompleted ? \" (completed)\" : \"\"}`}\n                      aria-current={isActive ? \"step\" : undefined}\n                      aria-disabled={isDisabled}\n                      className={cn(\n                        `glass-flex glass-items-center glass-gap-1 glass-px-2 glass-py-2 glass-radius-lg glass-text-sm glass-font-medium glass-transition glass-whitespace-nowrap glass-min-w-0`,\n                        \"glass-border glass-border-white/20\",\n                        \"glass-focus glass-touch-target glass-contrast-guard\",\n                        {\n                          \"bg-primary/20 text-primary-foreground border-primary/40\":\n                            isActive,\n                          \"bg-green-500/20 text-green-400 border-green-500/40\":\n                            isCompleted && !isActive,\n                          \"bg-white/5 glass-text-primary/60\":\n                            !isActive && !isCompleted,\n                          \"opacity-50 cursor-not-allowed\": isDisabled,\n                          \"hover:bg-white/10\": !isDisabled && !isActive,\n                        }\n                      )}\n                      style={{\n                        minWidth: compact ? 0 : undefined,\n                        padding: compact ? \"6px 8px\" : undefined,\n                      }}\n                    >\n                      <div className=\"glass-flex glass-items-center glass-justify-center glass-w-6 glass-h-6 glass-radius-full glass-text-xs glass-flex-shrink-0\">\n                        {isCompleted ? (\n                          <Check className=\"glass-w-3 glass-h-3\" />\n                        ) : isActive && validatingStep === index ? (\n                          <Loader2 className=\"glass-w-3 glass-h-3 glass-animate-spin\" />\n                        ) : (\n                          <span>{index + 1}</span>\n                        )}\n                      </div>\n                      <span\n                        className=\"glass-hidden sm:glass-inline glass-truncate\"\n                        style={{ display: compact ? \"none\" : undefined }}\n                      >\n                        {step.title}\n                      </span>\n                    </button>\n                  );\n                })}\n              </nav>\n            )}\n          </CardHeader>\n\n          {/* Step Content */}\n          <CardContent\n            className=\"glass-p-4\"\n            style={{ padding: compact ? \"12px\" : undefined }}\n          >\n            <Motion\n              key={currentStep}\n              preset=\"slideIn\"\n              className=\"glass-min-h-160px glass-min-w-0\"\n              style={{ minHeight: compact ? 64 : undefined }}\n            >\n              {currentStepData ? (\n                <>\n                  {/* Step Header */}\n                  <div\n                    className=\"glass-flex glass-items-start glass-gap-4 glass-mb-4 glass-min-w-0\"\n                    style={{\n                      gap: compact ? 10 : undefined,\n                      marginBottom: compact ? 10 : undefined,\n                    }}\n                  >\n                    {currentStepData.icon && (\n                      <div className=\"glass-flex glass-items-center glass-justify-center glass-w-12 glass-h-12 glass-radius-lg glass-surface-subtle/10\">\n                        {currentStepData.icon}\n                      </div>\n                    )}\n\n                    <div className=\"glass-flex-1 glass-min-w-0\">\n                      <h2 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\">\n                        {currentStepData.title}\n                      </h2>\n                      {currentStepData.description && (\n                        <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n                          {currentStepData.description}\n                        </p>\n                      )}\n                    </div>\n\n                    {/* Error indicator */}\n                    {stepErrors[currentStep] && (\n                      <div\n                        role=\"alert\"\n                        aria-live=\"assertive\"\n                        className=\"glass-flex glass-items-center glass-gap-2 glass-text-primary\"\n                      >\n                        <AlertCircle\n                          className=\"glass-w-4 glass-h-4\"\n                          aria-hidden=\"true\"\n                        />\n                        <span className=\"glass-text-sm\">\n                          {stepErrors[currentStep]}\n                        </span>\n                      </div>\n                    )}\n                  </div>\n\n                  {/* Step Content */}\n                  <div className=\"glass-flex-1 glass-min-w-0 glass-break-words\">\n                    {currentStepData.content}\n                  </div>\n                </>\n              ) : (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-p-8\">\n                  <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                    No steps configured\n                  </p>\n                </div>\n              )}\n            </Motion>\n          </CardContent>\n\n          {/* Footer Actions */}\n          <div\n            className=\"glass-border-t glass-border-white/10 glass-p-4\"\n            style={{ padding: compact ? \"12px\" : undefined }}\n          >\n            <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3\">\n              <div className=\"glass-flex glass-gap-2\">\n                {!isFirstStep && (\n                  <GlassButton\n                    variant=\"outline\"\n                    onClick={goToPrevious}\n                    disabled={loading}\n                    className=\"glass-flex glass-items-center glass-gap-2\"\n                  >\n                    <ChevronLeft className=\"glass-w-4 glass-h-4\" />\n                    {previousButtonText}\n                  </GlassButton>\n                )}\n\n                {allowSkip && !isLastStep && (\n                  <GlassButton\n                    variant=\"ghost\"\n                    onClick={(e) => goToStep(currentStep + 1)}\n                    disabled={loading}\n                  >\n                    Skip\n                  </GlassButton>\n                )}\n              </div>\n\n              <div className=\"glass-flex glass-gap-2\">\n                <GlassButton\n                  variant=\"ghost\"\n                  onClick={cancelWizard}\n                  disabled={loading}\n                >\n                  {cancelButtonText}\n                </GlassButton>\n\n                <GlassButton\n                  variant=\"primary\"\n                  onClick={goToNext}\n                  disabled={loading || validatingStep === currentStep}\n                  className=\"glass-flex glass-items-center glass-gap-2\"\n                >\n                  {validatingStep === currentStep ? (\n                    <Loader2 className=\"glass-w-4 glass-h-4 glass-animate-spin\" />\n                  ) : isLastStep ? (\n                    <Check className=\"glass-w-4 glass-h-4\" />\n                  ) : (\n                    <ChevronRight className=\"glass-w-4 glass-h-4\" />\n                  )}\n                  {isLastStep ? completeButtonText : nextButtonText}\n                </GlassButton>\n              </div>\n            </div>\n          </div>\n        </GlassCard>\n      </Motion>\n    </WizardContext.Provider>\n  );\n};\n\n// Wizard Step Component\nexport interface GlassWizardStepProps {\n  step: WizardStep;\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const GlassWizardStep: React.FC<GlassWizardStepProps> = ({\n  step,\n  children,\n  className,\n}) => {\n  return <div className={cn(\"glass-gap-4\", className)}>{children}</div>;\n};\n\n// Wizard Stepper Component (Progress Indicator)\nexport interface GlassWizardStepperProps {\n  steps: WizardStep[];\n  currentStep: number;\n  completedSteps?: Set<number>;\n  className?: string;\n}\n\nexport const GlassWizardStepper: React.FC<GlassWizardStepperProps> = ({\n  steps,\n  currentStep,\n  completedSteps = new Set(),\n  className,\n}) => {\n  return (\n    <div\n      className={cn(\"flex items-center justify-center glass-gap-4\", className)}\n    >\n      {steps.map((step, index) => {\n        const isCompleted = completedSteps.has(index);\n        const isActive = index === currentStep;\n        const isPast = index < currentStep;\n\n        return (\n          <div\n            key={step.id}\n            className=\"glass-flex glass-items-center glass-gap-4\"\n          >\n            <div className=\"glass-flex glass-flex-col glass-items-center\">\n              <div\n                className={cn(\n                  `flex items-center justify-center w-10 h-10 glass-radius-full border-2 transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                  {\n                    \"bg-primary border-primary text-primary-foreground\":\n                      isActive,\n                    \"bg-green-500 border-green-500 glass-text-primary\":\n                      isCompleted,\n                    \"border-white/30 glass-text-primary/60\":\n                      !isActive && !isCompleted,\n                    \"bg-white/10 border-white/50\": isPast && !isCompleted,\n                  }\n                )}\n              >\n                {isCompleted ? (\n                  <Check className=\"glass-w-5 glass-h-5\" />\n                ) : (\n                  <span className=\"glass-text-sm glass-font-medium\">\n                    {index + 1}\n                  </span>\n                )}\n              </div>\n\n              <span\n                className={cn(\n                  \"glass-text-xs glass-mt-2 text-center max-w-20 truncate\",\n                  isActive\n                    ? \"glass-text-primary font-medium\"\n                    : \"glass-text-primary/60\"\n                )}\n              >\n                {step.title}\n              </span>\n            </div>\n\n            {index < steps.length - 1 && (\n              <div\n                className={cn(\n                  `w-12 h-0.5 transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                  isCompleted || isPast ? \"bg-green-500\" : \"bg-white/20\"\n                )}\n              />\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default GlassWizard;\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassEffectGroup } from \"../../primitives/LiquidGlassEffectGroup\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassControlGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n  orientation?: \"horizontal\" | \"vertical\";\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  selectionMode?: \"none\" | \"single\" | \"multiple\";\n  rovingFocus?: boolean;\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nexport const LiquidGlassControlGroup = forwardRef<HTMLDivElement, LiquidGlassControlGroupProps>(\n  (\n    {\n      orientation = \"horizontal\",\n      density = \"comfortable\",\n      selectionMode = \"none\",\n      rovingFocus = true,\n      materialVariant = \"regular\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => (\n    <LiquidGlassMaterial\n      ref={ref}\n      material=\"liquid\"\n      variant={materialVariant}\n      radius=\"full\"\n      className={cn(\"liquid-glass-control-group glass-inline-flex\", className)}\n      data-selection-mode={selectionMode}\n      data-roving-focus={rovingFocus ? \"true\" : \"false\"}\n      data-density={density}\n      {...props}\n    >\n      <LiquidGlassEffectGroup\n        className={cn(\"glass-flex glass-gap-1 glass-p-1\", orientation === \"vertical\" && \"glass-flex-col\")}\n      >\n        {children}\n      </LiquidGlassEffectGroup>\n    </LiquidGlassMaterial>\n  )\n);\n\nLiquidGlassControlGroup.displayName = \"LiquidGlassControlGroup\";\n", "'use client';\nimport React, { useRef } from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { Motion } from \"../../primitives\";\n\ninterface GlassCardLinkProps\n  extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> {\n  href: string;\n  children: React.ReactNode;\n}\n\nexport const GlassCardLink: React.FC<GlassCardLinkProps> = ({\n  href,\n  children,\n  className,\n  ...props\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  return (\n    <Motion data-glass-component className='glass-inline-glass-block'>\n      <a\n        href={href}\n        className={cn(\n          \"relative inline-block overflow-hidden glass-radius-xl\",\n          \"transition-all duration-300 ease-in-out\",\n          \"focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2\",\n          \"glass-focus glass-touch-target glass-contrast-guard\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </a>\n    </Motion>\n  );\n};\n\nexport default GlassCardLink;", "\"use client\";\n/**\n * Glowing Card Component\n * A glassmorphic card with animated glowing edges and hover effects\n */\n\nimport React, { CSSProperties, forwardRef, ReactNode } from \"react\";\nimport { GlassCard } from \"./GlassCard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n/**\n * Glowing Card Props\n */\nexport interface GlowingCardProps {\n  children?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  \"data-testid\"?: string;\n  glowColor?: string;\n  glowIntensity?: number; // 0-1\n  animationDuration?: number; // milliseconds\n  variant?: \"default\" | \"neon\" | \"subtle\" | \"rainbow\";\n  onClick?: () => void;\n  interactive?: boolean;\n  disabled?: boolean;\n  \"aria-label\"?: string; // Add aria-label to props\n}\n\n/**\n * Glowing Card Component\n */\nexport const GlowingCard = forwardRef<HTMLDivElement, GlowingCardProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      children,\n      className = \"\",\n      style = {},\n      glowColor = \"#00d4ff\",\n      glowIntensity = 0.8,\n      animationDuration = 3000,\n      variant = \"default\",\n      onClick,\n      interactive = true,\n      disabled = false,\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel, // Destructure aria-label\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n\n    /**\n     * Get glow styles based on variant\n     */\n    const getGlowStyles = (): CSSProperties => {\n      const baseGlow = {\n        \"--glow-color\": glowColor,\n        \"--glow-intensity\": glowIntensity,\n        \"--animation-duration\": `${animationDuration}ms`,\n      } as CSSProperties;\n\n      switch (variant) {\n        case \"neon\":\n          return {\n            ...baseGlow,\n            \"--glow-color\": glowColor,\n            \"--glow-spread\": \"8px\",\n            \"--glow-blur\": \"20px\",\n          } as CSSProperties;\n\n        case \"subtle\":\n          return {\n            ...baseGlow,\n            \"--glow-spread\": \"2px\",\n            \"--glow-blur\": \"10px\",\n            \"--glow-intensity\": glowIntensity * 0.5,\n          } as CSSProperties;\n\n        case \"rainbow\":\n          return {\n            ...baseGlow,\n            \"--glow-color-1\": \"#ff006e\",\n            \"--glow-color-2\": \"#00d4ff\",\n            \"--glow-color-3\": \"#00ff88\",\n            \"--glow-spread\": \"4px\",\n            \"--glow-blur\": \"16px\",\n          } as CSSProperties;\n\n        default:\n          return {\n            ...baseGlow,\n            \"--glow-spread\": \"4px\",\n            \"--glow-blur\": \"16px\",\n          } as CSSProperties;\n      }\n    };\n\n    /**\n     * Get animation classes\n     */\n    const getAnimationClass = (): string => {\n      if (prefersReducedMotion || disabled) {\n        return \"\";\n      }\n\n      return \"glowing-card-animated\";\n    };\n\n    const containerStyles: CSSProperties = {\n      ...getGlowStyles(),\n      ...style,\n      position: \"relative\",\n      overflow: \"hidden\",\n      cursor: interactive && !disabled ? \"pointer\" : \"default\",\n      transition: prefersReducedMotion\n        ? \"none\"\n        : \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n      opacity: disabled ? 0.6 : 1,\n      pointerEvents: disabled ? \"none\" : \"auto\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-testid={dataTestId || \"glowingcard\"}\n        className={`glowing-card ${variant} ${getAnimationClass()} ${className}`}\n        style={{ ...containerStyles }}\n        onClick={!disabled ? onClick : undefined}\n        role={onClick ? \"button\" : undefined}\n        tabIndex={onClick && !disabled ? 0 : undefined}\n        onKeyDown={\n          onClick && !disabled\n            ? (e) => {\n                if (e.key === \"Enter\" || e.key === \" \") {\n                  e.preventDefault();\n                  onClick();\n                }\n              }\n            : undefined\n        }\n        aria-label={ariaLabel} // Pass aria-label here\n      >\n        {/* Glow Layer */}\n        {!prefersReducedMotion && (\n          <div className=\"glowing-card-glow\" aria-hidden=\"true\" />\n        )}\n\n        {/* Content */}\n        <GlassCard\n          className=\"glowing-card-content\"\n          style={{ ...{ position: \"relative\", zIndex: 1 } }}\n        >\n          {children}\n        </GlassCard>\n\n        <style>{`\n          .glowing-card {\n            border-radius: 12px;\n          }\n\n          .glowing-card-glow {\n            position: absolute;\n            inset: -2px;\n            border-radius: inherit;\n            background: linear-gradient(\n              90deg,\n              var(--glow-color, #00d4ff),\n              var(--glow-color, #00d4ff)\n            );\n            opacity: var(--glow-intensity, 0.8);\n            filter: blur(var(--glow-blur, 16px));\n            z-index: 0;\n            pointer-events: none;\n          }\n\n          .glowing-card.rainbow .glowing-card-glow {\n            background: linear-gradient(\n              90deg,\n              var(--glow-color-1, #ff006e),\n              var(--glow-color-2, #00d4ff),\n              var(--glow-color-3, #00ff88),\n              var(--glow-color-1, #ff006e)\n            );\n            background-size: 200% 100%;\n          }\n\n          .glowing-card-animated .glowing-card-glow {\n            animation: glowPulse var(--animation-duration, 3000ms) ease-in-out\n              infinite;\n          }\n\n          .glowing-card-animated.rainbow .glowing-card-glow {\n            animation: glowPulse var(--animation-duration, 3000ms) ease-in-out\n                infinite,\n              rainbowShift calc(var(--animation-duration, 3000ms) * 2) linear\n                infinite;\n          }\n\n          .glowing-card.neon .glowing-card-glow {\n            box-shadow: 0 0 var(--glow-spread, 8px) var(--glow-blur, 20px)\n              var(--glow-color, #00d4ff);\n          }\n\n          .glowing-card:hover .glowing-card-glow {\n            opacity: calc(var(--glow-intensity, 0.8) * 1.3);\n            filter: blur(calc(var(--glow-blur, 16px) * 1.2));\n          }\n\n          .glowing-card-content {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            background: inherit;\n          }\n\n          @keyframes glowPulse {\n            0%,\n            100% {\n              opacity: var(--glow-intensity, 0.8);\n            }\n            50% {\n              opacity: calc(var(--glow-intensity, 0.8) * 1.5);\n            }\n          }\n\n          @keyframes rainbowShift {\n            0% {\n              background-position: 0% 50%;\n            }\n            100% {\n              background-position: 200% 50%;\n            }\n          }\n\n          @media (prefers-reduced-motion: reduce) {\n            .glowing-card-glow {\n              animation: none !important;\n            }\n            .glowing-card {\n              transition: none !important;\n            }\n          }\n        `}</style>\n      </div>\n    );\n  }\n);\n\nGlowingCard.displayName = \"GlowingCard\";\n", "\"use client\";\n\nimport React, { forwardRef, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MarketingPalette } from \"./types\";\nimport \"./marketing.css\";\n\nexport interface AuroraBackgroundProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  palette?: MarketingPalette;\n  intensity?: \"subtle\" | \"medium\" | \"strong\";\n  motion?: \"none\" | \"subtle\" | \"full\";\n  particles?: boolean | number;\n  grain?: boolean;\n  vignette?: boolean;\n  fixed?: boolean;\n  reducedMotion?: boolean;\n  seed?: string | number;\n}\n\ninterface Particle {\n  id: string;\n  x: string;\n  y: string;\n  size: string;\n  alpha: string;\n  duration: string;\n  delay: string;\n}\n\nconst DEFAULT_SEED = \"auraglass-marketing\";\n\nfunction hashSeed(seed: string | number): number {\n  const input = String(seed);\n  let hash = 2166136261;\n\n  for (let index = 0; index < input.length; index += 1) {\n    hash ^= input.charCodeAt(index);\n    hash = Math.imul(hash, 16777619);\n  }\n\n  return hash >>> 0;\n}\n\nfunction seededRandom(seed: string | number) {\n  let state = hashSeed(seed) || 1;\n\n  return () => {\n    state = Math.imul(1664525, state) + 1013904223;\n    return (state >>> 0) / 4294967296;\n  };\n}\n\nfunction createParticles(count: number, seed: string | number): Particle[] {\n  const random = seededRandom(seed);\n\n  return Array.from({ length: count }, (_, index) => ({\n    id: `ag-particle-${index}`,\n    x: `${(random() * 100).toFixed(3)}%`,\n    y: `${(random() * 100).toFixed(3)}%`,\n    size: `${(1.5 + random() * 3.5).toFixed(2)}px`,\n    alpha: `${(0.26 + random() * 0.42).toFixed(2)}`,\n    duration: `${(8 + random() * 12).toFixed(2)}s`,\n    delay: `${(-1 * random() * 12).toFixed(2)}s`,\n  }));\n}\n\nfunction particleCount(particles: AuroraBackgroundProps[\"particles\"]): number {\n  if (typeof particles === \"number\") {\n    return Math.max(0, Math.min(80, Math.floor(particles)));\n  }\n\n  return particles ? 24 : 0;\n}\n\nexport const AuroraBackground = forwardRef<\n  HTMLDivElement,\n  AuroraBackgroundProps\n>(\n  (\n    {\n      palette = \"aurora\",\n      intensity = \"medium\",\n      motion = \"subtle\",\n      particles = false,\n      grain = false,\n      vignette = false,\n      fixed = false,\n      reducedMotion = false,\n      seed = DEFAULT_SEED,\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const count = particleCount(particles);\n    const generatedParticles = useMemo(\n      () => createParticles(count, seed),\n      [count, seed]\n    );\n    const motionMode = reducedMotion ? \"none\" : motion;\n\n    return (\n      <div\n        ref={ref}\n        aria-hidden={\n          children ? props[\"aria-hidden\"] : (props[\"aria-hidden\"] ?? true)\n        }\n        data-ag-palette={palette}\n        data-ag-reduced-motion={reducedMotion || motion === \"none\" || undefined}\n        data-fixed={fixed || undefined}\n        data-intensity={intensity}\n        data-motion={motionMode}\n        className={cn(\"ag-marketing-scope ag-aurora-background\", className)}\n        {...props}\n      >\n        <span className=\"ag-aurora-background__blob\" />\n        <span className=\"ag-aurora-background__blob\" />\n        <span className=\"ag-aurora-background__blob\" />\n        {generatedParticles.map((particle) => (\n          <span\n            key={particle.id}\n            className=\"ag-aurora-background__particle\"\n            data-testid=\"aurora-particle\"\n            style={\n              {\n                \"--ag-particle-x\": particle.x,\n                \"--ag-particle-y\": particle.y,\n                \"--ag-particle-size\": particle.size,\n                \"--ag-particle-alpha\": particle.alpha,\n                \"--ag-particle-duration\": particle.duration,\n                \"--ag-particle-delay\": particle.delay,\n              } as React.CSSProperties\n            }\n          />\n        ))}\n        {grain && <span className=\"ag-aurora-background__grain\" />}\n        {vignette && <span className=\"ag-aurora-background__vignette\" />}\n        {children}\n      </div>\n    );\n  }\n);\n\nAuroraBackground.displayName = \"AuroraBackground\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MarketingPalette } from \"./types\";\nimport \"./marketing.css\";\n\nexport interface AuroraOrbProps extends React.HTMLAttributes<HTMLDivElement> {\n  size?: number | string;\n  palette?: MarketingPalette;\n  pulse?: boolean;\n  glow?: \"none\" | \"subtle\" | \"medium\" | \"strong\";\n  interactive?: boolean;\n  tiltX?: number;\n  tiltY?: number;\n}\n\nfunction toCssSize(size: number | string): string {\n  return typeof size === \"number\" ? `${size}px` : size;\n}\n\nexport const AuroraOrb = forwardRef<HTMLDivElement, AuroraOrbProps>(\n  (\n    {\n      size = \"18rem\",\n      palette = \"aurora\",\n      pulse = true,\n      glow = \"medium\",\n      interactive = false,\n      tiltX = 0,\n      tiltY = 0,\n      className,\n      style,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const handlePointerMove: React.PointerEventHandler<HTMLDivElement> = (\n      event\n    ) => {\n      if (interactive) {\n        const rect = event.currentTarget.getBoundingClientRect();\n        if (rect.width <= 0 || rect.height <= 0) {\n          props.onPointerMove?.(event);\n          return;\n        }\n        const x = ((event.clientX - rect.left) / rect.width - 0.5) * 12;\n        const y = ((event.clientY - rect.top) / rect.height - 0.5) * -12;\n        event.currentTarget.style.setProperty(\n          \"--ag-tilt-y\",\n          `${x.toFixed(2)}deg`\n        );\n        event.currentTarget.style.setProperty(\n          \"--ag-tilt-x\",\n          `${y.toFixed(2)}deg`\n        );\n      }\n\n      props.onPointerMove?.(event);\n    };\n\n    const handlePointerLeave: React.PointerEventHandler<HTMLDivElement> = (\n      event\n    ) => {\n      if (interactive) {\n        event.currentTarget.style.setProperty(\"--ag-tilt-x\", `${tiltX}deg`);\n        event.currentTarget.style.setProperty(\"--ag-tilt-y\", `${tiltY}deg`);\n      }\n\n      props.onPointerLeave?.(event);\n    };\n\n    return (\n      <div\n        ref={ref}\n        aria-hidden={props[\"aria-hidden\"] ?? true}\n        data-ag-palette={palette}\n        data-glow={glow}\n        data-interactive={interactive || undefined}\n        data-pulse={pulse || undefined}\n        className={cn(\"ag-marketing-scope ag-aurora-orb\", className)}\n        style={\n          {\n            \"--ag-orb-size\": toCssSize(size),\n            \"--ag-tilt-x\": `${tiltX}deg`,\n            \"--ag-tilt-y\": `${tiltY}deg`,\n            ...style,\n          } as React.CSSProperties\n        }\n        {...props}\n        onPointerMove={handlePointerMove}\n        onPointerLeave={handlePointerLeave}\n      >\n        <span className=\"ag-aurora-orb__core\" />\n        <span className=\"ag-aurora-orb__shine\" />\n        {children}\n      </div>\n    );\n  }\n);\n\nAuroraOrb.displayName = \"AuroraOrb\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport \"./marketing.css\";\n\nexport interface DisplayTextProps extends React.HTMLAttributes<HTMLElement> {\n  as?: \"h1\" | \"h2\" | \"h3\" | \"p\" | \"span\";\n  size?: \"hero\" | \"section\" | \"title\" | \"label\";\n  gradient?: boolean | \"aurora\" | \"prism\" | \"ocean\" | \"ember\";\n  italic?: boolean;\n  balance?: boolean;\n}\n\nexport const DisplayText = forwardRef<HTMLElement, DisplayTextProps>(\n  (\n    {\n      as: Component = \"h2\",\n      size = \"section\",\n      gradient = false,\n      italic = false,\n      balance = false,\n      className,\n      ...props\n    },\n    ref\n  ) =>\n    React.createElement(Component, {\n      ref,\n      \"data-ag-palette\": typeof gradient === \"string\" ? gradient : undefined,\n      \"data-balance\": balance || undefined,\n      \"data-gradient\": Boolean(gradient) || undefined,\n      \"data-italic\": italic || undefined,\n      \"data-size\": size,\n      className: cn(\"ag-marketing-scope ag-display-text\", className),\n      ...props,\n    })\n);\n\nDisplayText.displayName = \"DisplayText\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ShowcaseCard, type ShowcaseCardProps } from \"./ShowcaseCard\";\nimport \"./marketing.css\";\n\nexport interface FeatureTileProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n  index?: string | number;\n  title: React.ReactNode;\n  description?: React.ReactNode;\n  visual?: React.ReactNode;\n  size?: \"sm\" | \"md\" | \"lg\";\n  tone?: \"neutral\" | \"aurora\" | \"success\" | \"info\" | \"warning\";\n}\n\nconst toneGlow: Record<\n  NonNullable<FeatureTileProps[\"tone\"]>,\n  ShowcaseCardProps[\"glow\"]\n> = {\n  neutral: \"subtle\",\n  aurora: \"aurora\",\n  success: \"subtle\",\n  info: \"subtle\",\n  warning: \"subtle\",\n};\n\nexport const FeatureTile = forwardRef<HTMLDivElement, FeatureTileProps>(\n  (\n    {\n      index,\n      title,\n      description,\n      visual,\n      size = \"md\",\n      tone = \"neutral\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => (\n    <ShowcaseCard\n      ref={ref}\n      data-size={size}\n      data-tone={tone}\n      glow={toneGlow[tone]}\n      padding={size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"md\"}\n      className={cn(\"ag-feature-tile\", className)}\n      {...props}\n    >\n      <div className=\"ag-feature-tile__header\">\n        {index !== undefined && (\n          <span className=\"ag-feature-tile__index\">{index}</span>\n        )}\n        <h3 className=\"ag-feature-tile__title\">{title}</h3>\n      </div>\n      {description && (\n        <p className=\"ag-feature-tile__description\">{description}</p>\n      )}\n      {visual && <div className=\"ag-feature-tile__visual\">{visual}</div>}\n      {children}\n    </ShowcaseCard>\n  )\n);\n\nFeatureTile.displayName = \"FeatureTile\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport \"./marketing.css\";\n\nexport interface ShowcaseCardProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  intensity?: \"subtle\" | \"medium\" | \"strong\";\n  glow?: \"none\" | \"subtle\" | \"aurora\";\n  floating?: boolean;\n  interactive?: boolean;\n  radius?: \"md\" | \"lg\" | \"xl\";\n  padding?: \"sm\" | \"md\" | \"lg\";\n  highlight?: boolean;\n}\n\nexport const ShowcaseCard = forwardRef<HTMLDivElement, ShowcaseCardProps>(\n  (\n    {\n      intensity = \"medium\",\n      glow = \"none\",\n      floating = false,\n      interactive = false,\n      radius = \"xl\",\n      padding = \"md\",\n      highlight = true,\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => (\n    <div\n      ref={ref}\n      data-glow={glow}\n      data-floating={floating || undefined}\n      data-highlight={highlight || undefined}\n      data-intensity={intensity}\n      data-interactive={interactive || undefined}\n      data-padding={padding}\n      data-radius={radius}\n      className={cn(\"ag-marketing-scope ag-showcase-card\", className)}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n);\n\nShowcaseCard.displayName = \"ShowcaseCard\";\n", "\"use client\";\n\nimport React, { forwardRef, useMemo, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport \"./marketing.css\";\n\nexport interface InstallCommandProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  command?: string;\n  packageManager?: \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\n  copyable?: boolean;\n  copiedLabel?: string;\n}\n\nconst packageCommands: Record<\n  NonNullable<InstallCommandProps[\"packageManager\"]>,\n  string\n> = {\n  npm: \"npm install aura-glass\",\n  pnpm: \"pnpm add aura-glass\",\n  yarn: \"yarn add aura-glass\",\n  bun: \"bun add aura-glass\",\n};\n\nexport const InstallCommand = forwardRef<HTMLDivElement, InstallCommandProps>(\n  (\n    {\n      command,\n      packageManager = \"npm\",\n      copyable = true,\n      copiedLabel = \"Copied\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [copied, setCopied] = useState(false);\n    const resolvedCommand = useMemo(\n      () => command ?? packageCommands[packageManager],\n      [command, packageManager]\n    );\n\n    const handleCopy = async () => {\n      if (\n        !copyable ||\n        typeof navigator === \"undefined\" ||\n        !navigator.clipboard?.writeText\n      ) {\n        return;\n      }\n\n      await navigator.clipboard.writeText(resolvedCommand);\n      setCopied(true);\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"ag-marketing-scope ag-showcase-card ag-install-command\",\n          className\n        )}\n        data-highlight=\"true\"\n        data-intensity=\"medium\"\n        data-padding=\"sm\"\n        data-radius=\"lg\"\n        {...props}\n      >\n        <code className=\"ag-install-command__code\">{resolvedCommand}</code>\n        {copyable && (\n          <button\n            type=\"button\"\n            className=\"ag-install-command__button\"\n            aria-label={copied ? copiedLabel : \"Copy install command\"}\n            onClick={handleCopy}\n          >\n            {copied ? copiedLabel : \"Copy\"}\n          </button>\n        )}\n        <span\n          className=\"ag-install-command__status\"\n          role=\"status\"\n          aria-live=\"polite\"\n        >\n          {copied ? copiedLabel : \"\"}\n        </span>\n      </div>\n    );\n  }\n);\n\nInstallCommand.displayName = \"InstallCommand\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MarketingPalette } from \"./types\";\nimport \"./marketing.css\";\n\nexport interface LogoMarkProps extends React.HTMLAttributes<HTMLDivElement> {\n  size?: number | string;\n  palette?: MarketingPalette;\n  label?: string;\n  animated?: boolean;\n}\n\nfunction toCssSize(size: number | string): string {\n  return typeof size === \"number\" ? `${size}px` : size;\n}\n\nexport const LogoMark = forwardRef<HTMLDivElement, LogoMarkProps>(\n  (\n    {\n      size = \"2.5rem\",\n      palette = \"aurora\",\n      label,\n      animated = false,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => (\n    <div\n      ref={ref}\n      aria-hidden={label ? undefined : true}\n      aria-label={label}\n      role={label ? \"img\" : undefined}\n      data-ag-palette={palette}\n      data-animated={animated || undefined}\n      className={cn(\"ag-marketing-scope ag-logo-mark\", className)}\n      style={\n        {\n          \"--ag-logo-size\": toCssSize(size),\n          ...style,\n        } as React.CSSProperties\n      }\n      {...props}\n    >\n      <span className=\"ag-logo-mark__core\" />\n    </div>\n  )\n);\n\nLogoMark.displayName = \"LogoMark\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { useMemo, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nconst DEFAULT_CHART_COLORS = [\n  \"#70d6ff\",\n  \"#a78bfa\",\n  \"#34d399\",\n  \"#fbbf24\",\n  \"#f87171\",\n  \"#22d3ee\",\n  \"#fb7185\",\n  \"#c084fc\",\n  \"#60a5fa\",\n  \"#94a3b8\",\n];\n\nconst AXIS_TEXT_FILL = \"rgba(226, 232, 240, 0.78)\";\nconst AXIS_TITLE_FILL = \"rgba(226, 232, 240, 0.88)\";\nconst CROSSHAIR_STROKE = \"rgba(255, 255, 255, 0.28)\";\n\nexport interface AreaDataPoint {\n  x: number | string;\n  y: number;\n  label?: string;\n}\n\nexport interface AreaSeries {\n  id: string;\n  name: string;\n  data: AreaDataPoint[];\n  color?: string;\n  strokeWidth?: number;\n  fillOpacity?: number;\n}\n\nexport interface GlassAreaChartProps {\n  /**\n   * Chart title\n   */\n  title?: string;\n  /**\n   * Chart data series\n   */\n  series: AreaSeries[];\n  /**\n   * Chart width\n   */\n  width?: number;\n  /**\n   * Chart height\n   */\n  height?: number;\n  /**\n   * Show grid lines\n   */\n  showGrid?: boolean;\n  /**\n   * Show data points\n   */\n  showPoints?: boolean;\n  /**\n   * Show legend\n   */\n  showLegend?: boolean;\n  /**\n   * X-axis label\n   */\n  xAxisLabel?: string;\n  /**\n   * Y-axis label\n   */\n  yAxisLabel?: string;\n  /**\n   * Custom colors for series\n   */\n  colors?: string[];\n  /**\n   * Animation duration\n   */\n  animationDuration?: number;\n  /**\n   * Show tooltips on hover\n   */\n  showTooltips?: boolean;\n  /**\n   * Format function for Y-axis values\n   */\n  formatYValue?: (value: number) => string;\n  /**\n   * Format function for X-axis values\n   */\n  formatXValue?: (value: number | string) => string;\n  /**\n   * Fill opacity for areas\n   */\n  fillOpacity?: number;\n  /**\n   * Show stacked areas\n   */\n  stacked?: boolean;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n}\n\n/**\n * GlassAreaChart component\n * A glassmorphism area chart with multiple series support and smooth area fills\n */\nexport const GlassAreaChart: React.FC<GlassAreaChartProps> = ({\n  title,\n  series = [],\n  width = 600,\n  height = 300,\n  showGrid = true,\n  showPoints = false,\n  showLegend = true,\n  xAxisLabel,\n  yAxisLabel,\n  colors = DEFAULT_CHART_COLORS,\n  animationDuration = ANIMATION.DURATION.slow,\n  showTooltips = true,\n  formatYValue = (value) => value.toString(),\n  formatXValue = (value) => value.toString(),\n  fillOpacity = 0.6,\n  stacked = false,\n  className,\n  loading = false,\n  ...props\n}) => {\n  const [hoveredPoint, setHoveredPoint] = useState<{\n    seriesId: string;\n    index: number;\n    x: number;\n    y: number;\n    values: number[];\n  } | null>(null);\n\n  const [hoveredSeriesId, setHoveredSeriesId] = useState<string | null>(null);\n\n  // Chart dimensions with padding\n  const padding = { top: 20, right: 60, bottom: 60, left: 60 };\n  const chartWidth = width - padding.left - padding.right;\n  const chartHeight = height - padding.top - padding.bottom;\n\n  // Process data for chart\n  const processedData = useMemo(() => {\n    if (!series || !Array.isArray(series) || series.length === 0) {\n      return { scaledSeries: [], xLabels: [], yLabels: [] };\n    }\n\n    // Find min/max values across all series\n    const allPoints = series.flatMap((s) => s.data);\n    const allXAreNumeric = allPoints.every((p) => typeof p.x === \"number\");\n    const xValues = allPoints.map((p: any) =>\n      typeof p.x === \"number\" ? p.x : 0\n    );\n    const yValues = allPoints.map((p: any) => p.y);\n\n    const xMin = Math.min(...xValues);\n    const xMax = Math.max(...xValues);\n    let yMin = Math.min(...yValues);\n    let yMax = Math.max(...yValues);\n\n    // For stacked charts, calculate cumulative values\n    let stackedSeries = series;\n    let stackedData:\n      | Array<\n          Array<{\n            seriesId: string;\n            x: number | string;\n            y: number;\n            originalY: number;\n          }>\n        >\n      | undefined;\n\n    if (stacked && series.length > 1) {\n      // Create stacked data by accumulating values at each x point\n      const xPoints = new Set(allPoints.map((p: any) => p.x));\n      stackedData = Array.from(xPoints).map((x: any) => {\n        let cumulativeY = 0;\n        return series.map((s: any) => {\n          const point = s.data?.find((p: any) => p.x === x);\n          const y = point ? point.y : 0;\n          cumulativeY += y;\n          return {\n            seriesId: s.id,\n            x,\n            y: cumulativeY,\n            originalY: y,\n          };\n        });\n      });\n\n      // Calculate new min/max for stacked chart\n      yMin = 0;\n      yMax = Math.max(...stackedData!.flat().map((p: any) => p.y));\n\n      // Transform series data for stacked display\n      stackedSeries = series.map((s, index) => ({\n        ...s,\n        data: stackedData!.map((stackPoint: any) => ({\n          x: stackPoint[index].x,\n          y: stackPoint[index].y,\n          label: s.data?.find((p: any) => p.x === stackPoint[index].x)?.label,\n        })),\n      }));\n    }\n\n    // Add some padding to Y axis\n    const yRange = yMax - yMin;\n    const yPadding =\n      yRange === 0 ? (yMax === 0 ? 1 : Math.abs(yMax) * 0.1) : yRange * 0.1;\n    const yMinPadded = Math.max(0, yMin - yPadding);\n    const yMaxPadded = yMax + yPadding;\n\n    // Scale functions with guards against divide-by-zero/NaN\n    const maxPoints = Math.max(\n      ...series.map((s: any) => s.data?.length || 0),\n      1\n    );\n    const useOrdinalX = !allXAreNumeric || xMax === xMin;\n    const scaleXBy = (x: number, idx: number) => {\n      if (chartWidth <= 0) return 0;\n      if (useOrdinalX) {\n        return maxPoints <= 1 ? 0 : (idx / (maxPoints - 1)) * chartWidth;\n      }\n      const denom = xMax - xMin || 1;\n      return ((x - xMin) / denom) * chartWidth;\n    };\n    const scaleY = (y: number) => {\n      if (chartHeight <= 0) return 0;\n      const denom = yMaxPadded - yMinPadded || 1;\n      return chartHeight - ((y - yMinPadded) / denom) * chartHeight;\n    };\n\n    // Process each series\n    const scaledSeries = stackedSeries.map((s, seriesIndex) => {\n      const rawPoints = s.data || [];\n      const points = rawPoints\n        .map((point, pointIndex) => {\n          const sx =\n            padding.left +\n            scaleXBy(\n              typeof point.x === \"number\" ? (point.x as number) : 0,\n              pointIndex\n            );\n          const sy = padding.top + scaleY(point.y);\n          return {\n            ...point,\n            scaledX: Number.isFinite(sx) ? sx : padding.left,\n            scaledY: Number.isFinite(sy) ? sy : padding.top + chartHeight,\n            originalY:\n              stacked && stackedData\n                ? stackedData.find(\n                    (sd: any) => sd[seriesIndex].x === point.x\n                  )?.[seriesIndex].originalY || point.y\n                : point.y,\n          };\n        })\n        .filter(\n          (p: any) => Number.isFinite(p.scaledX) && Number.isFinite(p.scaledY)\n        );\n\n      // Generate area path\n      let areaPath = \"\";\n      if ((points?.length || 0) > 0) {\n        // Start from bottom-left\n        areaPath = `M ${points[0].scaledX} ${padding.top + chartHeight}`;\n\n        // Draw to first point\n        areaPath += ` L ${points[0].scaledX} ${points[0].scaledY}`;\n\n        // Draw through all points\n        for (let i = 1; i < (points?.length || 0); i++) {\n          areaPath += ` L ${points[i].scaledX} ${points[i].scaledY}`;\n        }\n\n        // Draw back to bottom-right and close\n        areaPath += ` L ${points[(points?.length || 0) - 1].scaledX} ${padding.top + chartHeight} Z`;\n      }\n\n      return {\n        ...s,\n        color: s.color || colors[seriesIndex % (colors?.length || 0)],\n        points,\n        areaPath,\n      };\n    });\n\n    // Generate axis labels\n    const xLabels = (scaledSeries[0]?.points || []).map((point) => ({\n      x: Number.isFinite(point.scaledX) ? point.scaledX : padding.left,\n      y: height - padding.bottom + 20,\n      label: formatXValue(point.x),\n    }));\n\n    const yLabels = [0, 0.25, 0.5, 0.75, 1].map((ratio: any) => {\n      const value = yMinPadded + (yMaxPadded - yMinPadded) * ratio;\n      return {\n        x: padding.left - 10,\n        y: padding.top + chartHeight - chartHeight * ratio + 4,\n        label: formatYValue(value),\n      };\n    });\n\n    return { scaledSeries, xLabels, yLabels };\n  }, [\n    series,\n    width,\n    height,\n    padding,\n    chartWidth,\n    chartHeight,\n    formatYValue,\n    formatXValue,\n    colors,\n    stacked,\n  ]);\n\n  // Generate path for line\n  const generatePath = (points: any[]) => {\n    const valid = (points || []).filter(\n      (p: any) => Number.isFinite(p?.scaledX) && Number.isFinite(p?.scaledY)\n    );\n    if (valid.length === 0) return \"\";\n    let path = `M ${valid[0].scaledX} ${valid[0].scaledY}`;\n    for (let i = 1; i < valid.length; i++) {\n      path += ` L ${valid[i].scaledX} ${valid[i].scaledY}`;\n    }\n    return path;\n  };\n\n  // Handle point hover\n  const handlePointHover = (\n    seriesId: string,\n    pointIndex: number,\n    x: number,\n    y: number,\n    _event: React.MouseEvent\n  ) => {\n    if (showTooltips) {\n      const values = processedData.scaledSeries.map(\n        (s: any) => s.points[pointIndex]?.originalY || 0\n      );\n      setHoveredPoint({ seriesId, index: pointIndex, x, y, values });\n    }\n  };\n\n  const handlePointLeave = () => {\n    setHoveredPoint(null);\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n        <div className=\"glass-animate-pulse glass-gap-4\">\n          <div className=\"glass-h-6 glass-surface-subtle/20 glass-radius-md glass-w-48\"></div>\n          <div className=\"glass-h-64 glass-surface-subtle/10 glass-radius-md\"></div>\n          <div className=\"glass-flex glass-justify-center glass-gap-4\">\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard className={cn(\"glass-overflow-hidden\", className)} {...props}>\n        {title && (\n          <CardHeader>\n            <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold\">\n              {title}\n            </CardTitle>\n          </CardHeader>\n        )}\n\n        <CardContent className=\"glass-p-4\">\n          <div className=\"glass-relative glass-w-full glass-overflow-hidden glass-chart\">\n            <svg\n              width=\"100%\"\n              height={height}\n              viewBox={`0 0 ${width} ${height}`}\n              preserveAspectRatio=\"none\"\n              className=\"glass-overflow-hidden\"\n              style={{\n                display: \"block\",\n                maxWidth: \"100%\",\n                minWidth: 0,\n                minHeight: height,\n              }}\n            >\n              {/* Grid lines */}\n              {showGrid && (\n                <g className=\"glass-opacity-20\">\n                  {/* Horizontal grid lines */}\n                  {processedData.yLabels.map((label, index) => (\n                    <line\n                      key={`h-grid-${index}`}\n                      x1={padding.left}\n                      y1={label.y - 4}\n                      x2={width - padding.right}\n                      y2={label.y - 4}\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1\"\n                      className=\"glass-text-primary-glass-opacity-30\"\n                    />\n                  ))}\n                  {/* Vertical grid lines */}\n                  {processedData.xLabels.map((label, index) => (\n                    <line\n                      key={`v-grid-${index}`}\n                      x1={label.x}\n                      y1={padding.top}\n                      x2={label.x}\n                      y2={height - padding.bottom}\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1\"\n                      className=\"glass-text-primary-glass-opacity-30\"\n                    />\n                  ))}\n                </g>\n              )}\n\n              {/* Area fills (drawn first, behind lines) */}\n              {processedData.scaledSeries.map((s, seriesIndex) => (\n                <g key={`${s.id}-area`}>\n                  <defs>\n                    <linearGradient\n                      id={`area-gradient-${s.id}`}\n                      x1=\"0%\"\n                      y1=\"0%\"\n                      x2=\"0%\"\n                      y2=\"100%\"\n                    >\n                      <stop\n                        offset=\"0%\"\n                        stopColor={s.color}\n                        stopOpacity={fillOpacity}\n                      />\n                      <stop\n                        offset=\"100%\"\n                        stopColor={s.color}\n                        stopOpacity={fillOpacity * 0.3}\n                      />\n                    </linearGradient>\n                  </defs>\n\n                  <path\n                    d={s.areaPath}\n                    fill={`url(#area-gradient-${s.id})`}\n                    className={`glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms] hover:glass-opacity-80`}\n                    style={{\n                      animation: `areaFill ${animationDuration}ms ease-out ${seriesIndex * 200}ms both`,\n                      opacity:\n                        hoveredSeriesId && hoveredSeriesId !== s.id ? 0.35 : 1,\n                    }}\n                  />\n                </g>\n              ))}\n\n              {/* Chart lines */}\n              {processedData.scaledSeries.map((s, seriesIndex) => (\n                <g key={`${s.id}-line`}>\n                  {/* Line */}\n                  <path\n                    d={generatePath(s.points)}\n                    fill=\"none\"\n                    stroke={s.color}\n                    strokeWidth={s.strokeWidth || 2}\n                    className=\"glass-drop-glass-shadow-sm\"\n                    style={{\n                      animation: `drawLine ${animationDuration}ms ease-out ${seriesIndex * 100 + 300}ms both`,\n                      opacity:\n                        hoveredSeriesId && hoveredSeriesId !== s.id ? 0.35 : 1,\n                    }}\n                  />\n\n                  {/* Data points */}\n                  {showPoints &&\n                    s.points.map((point, pointIndex) => (\n                      <circle\n                        key={`${s.id}-point-${pointIndex}`}\n                        cx={point.scaledX}\n                        cy={point.scaledY}\n                        r=\"4\"\n                        fill={s.color}\n                        stroke=\"color-mix(in srgb, var(--glass-white) 80%, transparent)\"\n                        strokeWidth=\"2\"\n                        className={`glass-cursor-pointer glass-hover-r-6 glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n                        role=\"button\"\n                        tabIndex={0}\n                        aria-label={`Data point ${pointIndex + 1} of ${s.name}: ${formatXValue(point.x)}, ${formatYValue(point.originalY || point.y)}`}\n                        onMouseEnter={(e) =>\n                          handlePointHover(\n                            s.id,\n                            pointIndex,\n                            point.scaledX,\n                            point.scaledY,\n                            e\n                          )\n                        }\n                        onMouseLeave={handlePointLeave}\n                        onKeyDown={(e) => {\n                          if (e.key === \"Enter\" || e.key === \" \") {\n                            e.preventDefault();\n                            handlePointHover(\n                              s.id,\n                              pointIndex,\n                              point.scaledX,\n                              point.scaledY,\n                              e as any\n                            );\n                          }\n                        }}\n                        style={{\n                          animation: `fadeInPoint 300ms ease-out ${animationDuration + seriesIndex * 100 + pointIndex * 50 + 300}ms both`,\n                          opacity:\n                            hoveredSeriesId && hoveredSeriesId !== s.id\n                              ? 0.35\n                              : 1,\n                        }}\n                      />\n                    ))}\n                </g>\n              ))}\n\n              {/* Crosshair */}\n              {hoveredPoint && (\n                <g className=\"glass-pointer-events-none\">\n                  <line\n                    x1={hoveredPoint.x}\n                    y1={padding.top}\n                    x2={hoveredPoint.x}\n                    y2={height - padding.bottom}\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.25}\n                    strokeDasharray=\"4 4\"\n                  />\n                  <line\n                    x1={padding.left}\n                    y1={hoveredPoint.y}\n                    x2={width - padding.right}\n                    y2={hoveredPoint.y}\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.25}\n                    strokeDasharray=\"4 4\"\n                  />\n                  <circle\n                    cx={hoveredPoint.x}\n                    cy={hoveredPoint.y}\n                    r=\"8\"\n                    fill=\"none\"\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.35}\n                  />\n                </g>\n              )}\n\n              {/* X-axis */}\n              <line\n                x1={padding.left}\n                y1={height - padding.bottom}\n                x2={width - padding.right}\n                y2={height - padding.bottom}\n                stroke=\"currentColor\"\n                strokeWidth=\"1\"\n                className=\"glass-text-primary-glass-opacity-50\"\n              />\n\n              {/* Y-axis */}\n              <line\n                x1={padding.left}\n                y1={padding.top}\n                x2={padding.left}\n                y2={height - padding.bottom}\n                stroke=\"currentColor\"\n                strokeWidth=\"1\"\n                className=\"glass-text-primary-glass-opacity-50\"\n              />\n\n              {/* Axis labels */}\n              {processedData.xLabels.map((label, index) => (\n                <text\n                  key={`x-label-${index}`}\n                  x={label.x}\n                  y={label.y}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {processedData.yLabels.map((label, index) => (\n                <text\n                  key={`y-label-${index}`}\n                  x={label.x}\n                  y={label.y}\n                  textAnchor=\"end\"\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {/* Axis titles */}\n              {xAxisLabel && (\n                <text\n                  x={width / 2}\n                  y={height - 10}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  <ContrastGuard>{xAxisLabel}</ContrastGuard>\n                </text>\n              )}\n\n              {yAxisLabel && (\n                <text\n                  x={15}\n                  y={height / 2}\n                  textAnchor=\"middle\"\n                  transform={`rotate(-90, 15, ${height / 2})`}\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  <ContrastGuard>{yAxisLabel}</ContrastGuard>\n                </text>\n              )}\n            </svg>\n\n            {/* Tooltip */}\n            {hoveredPoint && (\n              <Motion preset=\"fadeIn\" className=\"glass-absolute glass-z-10\">\n                <div\n                  role=\"tooltip\"\n                  aria-live=\"polite\"\n                  className={cn(\n                    \"glass-absolute glass-radius-xl glass-p-3 glass-shadow-xl\",\n                    \"glass-surface-overlay glass-backdrop-blur-md glass-border glass-border-subtle glass-radial-reveal glass-lift\"\n                  )}\n                  style={{\n                    left: hoveredPoint.x + 10,\n                    top: hoveredPoint.y - 10,\n                    transform:\n                      hoveredPoint.x > width / 2 ? \"translateX(-100%)\" : \"none\",\n                  }}\n                >\n                  <div className=\"glass-text-primary glass-text-sm glass-gap-2\">\n                    <ContrastGuard>\n                      <div className=\"glass-font-medium\">\n                        {processedData.scaledSeries[0]?.points[\n                          hoveredPoint.index\n                        ] &&\n                          formatXValue(\n                            processedData.scaledSeries[0].points[\n                              hoveredPoint.index\n                            ].x\n                          )}\n                      </div>\n                      {processedData.scaledSeries.map((s, index) => (\n                        <div\n                          key={s.id}\n                          className=\"glass-flex glass-items-center glass-gap-2\"\n                        >\n                          <div\n                            className=\"glass-w-3 glass-h-3 glass-radius-md\"\n                            style={{ backgroundColor: s.color }}\n                          />\n                          <span className=\"glass-text-primary-glass-opacity-80\">\n                            {s.name}:{\" \"}\n                            {formatYValue(hoveredPoint.values?.[index] || 0)}\n                          </span>\n                        </div>\n                      ))}\n                    </ContrastGuard>\n                  </div>\n                </div>\n              </Motion>\n            )}\n          </div>\n\n          {/* Legend */}\n          {showLegend && (processedData.scaledSeries?.length || 0) > 0 && (\n            <div className=\"glass-flex glass-flex-wrap glass-justify-center glass-gap-4 glass-mt-6\">\n              {processedData.scaledSeries.map((s) => (\n                <div\n                  key={s.id}\n                  className={cn(\n                    `glass-flex glass-items-center glass-gap-2 glass-px-2 glass-py-1 glass-radius-md glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] glass-hover--translate-y-0-5`,\n                    hoveredSeriesId && hoveredSeriesId !== s.id\n                      ? \"glass-opacity-50\"\n                      : \"glass-opacity-100\"\n                  )}\n                  onMouseEnter={() => setHoveredSeriesId(s.id)}\n                  onMouseLeave={() => setHoveredSeriesId(null)}\n                >\n                  <div\n                    className=\"glass-w-3 glass-h-3 glass-radius-md\"\n                    style={{ backgroundColor: s.color }}\n                  />\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                      {s.name}\n                    </span>\n                  </ContrastGuard>\n                </div>\n              ))}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassAreaChart;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { useMemo, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport {\n  CardContent,\n  CardHeader,\n  CardTitle,\n  GlassCard,\n} from \"../card/GlassCard\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  const numericValue =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim() !== \"\"\n        ? Number(value)\n        : fallback;\n  return Number.isFinite(numericValue) ? numericValue : fallback;\n};\n\nconst getSeriesColor = (\n  explicitColor: string | undefined,\n  colors: string[],\n  index: number\n) => explicitColor || colors[index % Math.max(1, colors.length)] || \"#70d6ff\";\n\nconst DEFAULT_CHART_COLORS = [\n  \"#70d6ff\",\n  \"#a78bfa\",\n  \"#34d399\",\n  \"#fbbf24\",\n  \"#f87171\",\n  \"#22d3ee\",\n  \"#fb7185\",\n  \"#c084fc\",\n  \"#60a5fa\",\n  \"#94a3b8\",\n];\n\nconst AXIS_TEXT_FILL = \"rgba(226, 232, 240, 0.78)\";\nconst AXIS_TITLE_FILL = \"rgba(226, 232, 240, 0.88)\";\nconst CROSSHAIR_STROKE = \"rgba(255, 255, 255, 0.28)\";\n\nexport interface BarDataPoint {\n  x: string | number;\n  y: number;\n  label?: string;\n  color?: string;\n}\n\nexport interface BarSeries {\n  id: string;\n  name: string;\n  data: BarDataPoint[];\n  color?: string;\n}\n\nexport interface GlassBarChartProps {\n  /**\n   * Chart title\n   */\n  title?: string;\n  /**\n   * Chart data series\n   */\n  series: BarSeries[];\n  /**\n   * Chart width\n   */\n  width?: number;\n  /**\n   * Chart height\n   */\n  height?: number;\n  /**\n   * Show grid lines\n   */\n  showGrid?: boolean;\n  /**\n   * Show data labels on bars\n   */\n  showDataLabels?: boolean;\n  /**\n   * Show legend\n   */\n  showLegend?: boolean;\n  /**\n   * X-axis label\n   */\n  xAxisLabel?: string;\n  /**\n   * Y-axis label\n   */\n  yAxisLabel?: string;\n  /**\n   * Custom colors for series\n   */\n  colors?: string[];\n  /**\n   * Animation duration\n   */\n  animationDuration?: number;\n  /**\n   * Show tooltips on hover\n   */\n  showTooltips?: boolean;\n  /**\n   * Format function for Y-axis values\n   */\n  formatYValue?: (value: number) => string;\n  /**\n   * Format function for X-axis values\n   */\n  formatXValue?: (value: string | number) => string;\n  /**\n   * Bar orientation (vertical or horizontal)\n   */\n  orientation?: \"vertical\" | \"horizontal\";\n  /**\n   * Bar padding between groups\n   */\n  barPadding?: number;\n  /**\n   * Bar width ratio\n   */\n  barWidthRatio?: number;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n}\n\n/**\n * GlassBarChart component\n * A glassmorphism bar chart with multiple series support and interactive features\n */\nexport const GlassBarChart: React.FC<GlassBarChartProps> = ({\n  title,\n  series = [],\n  width = 600,\n  height = 400,\n  showGrid = true,\n  showDataLabels = false,\n  showLegend = true,\n  xAxisLabel,\n  yAxisLabel,\n  colors = DEFAULT_CHART_COLORS,\n  animationDuration = ANIMATION.DURATION.normal,\n  showTooltips = true,\n  formatYValue = (value) => value.toString(),\n  formatXValue = (value) => value.toString(),\n  orientation = \"vertical\",\n  barPadding = 0.1,\n  barWidthRatio = 0.8,\n  className,\n  loading = false,\n  ...props\n}) => {\n  const [hoveredBar, setHoveredBar] = useState<{\n    seriesId: string;\n    dataIndex: number;\n    x: number;\n    y: number;\n    value: number;\n  } | null>(null);\n  const [hoveredSeriesId, setHoveredSeriesId] = useState<string | null>(null);\n\n  // Chart dimensions with padding\n  const padding = { top: 20, right: 60, bottom: 60, left: 60 };\n  const chartWidth = Math.max(1, width - padding.left - padding.right);\n  const chartHeight = Math.max(1, height - padding.top - padding.bottom);\n\n  // Process data for chart\n  const processedData = useMemo(() => {\n    if (!series || !Array.isArray(series) || series.length === 0) {\n      return { bars: [], xLabels: [], yLabels: [] };\n    }\n\n    const sanitizedSeries = series.map((s) => ({\n      ...s,\n      data: (Array.isArray(s.data) ? s.data : []).map((point, pointIndex) => ({\n        ...point,\n        x: point?.x ?? point?.label ?? pointIndex,\n        y: toFiniteNumber(point?.y),\n      })),\n    }));\n\n    // Combine all data points from all series\n    const allDataPoints: Array<{\n      seriesId: string;\n      seriesIndex: number;\n      data: BarDataPoint;\n      index: number;\n    }> = [];\n\n    sanitizedSeries.forEach((s, seriesIndex) => {\n      s.data?.forEach((dataPoint, dataIndex) => {\n        allDataPoints.push({\n          seriesId: s.id,\n          seriesIndex,\n          data: dataPoint,\n          index: dataIndex,\n        });\n      });\n    });\n\n    if (allDataPoints.length === 0) {\n      return { bars: [], xLabels: [], yLabels: [] };\n    }\n\n    // Group by X value (for grouped bars)\n    const groupedData = new Map<\n      string | number,\n      Array<{\n        seriesId: string;\n        seriesIndex: number;\n        data: BarDataPoint;\n        index: number;\n      }>\n    >();\n\n    allDataPoints.forEach((point: any) => {\n      const key = point.data?.x;\n      if (!groupedData.has(key)) {\n        groupedData.set(key, []);\n      }\n      groupedData.get(key)!.push(point);\n    });\n\n    // Find min/max values\n    const allYValues = allDataPoints.map((p: any) => p.data?.y);\n    const yMin = Math.min(...allYValues);\n    const yMax = Math.max(...allYValues);\n\n    // Add some padding to Y axis\n    const yRange = yMax - yMin;\n    const yPadding =\n      yRange === 0 ? (yMax === 0 ? 1 : Math.abs(yMax) * 0.1) : yRange * 0.1;\n    const yMinPadded = Math.max(0, yMin - yPadding);\n    const yMaxPadded = yMax + yPadding;\n\n    // Scale functions\n    const scaleY = (y: number) => {\n      if (orientation === \"vertical\") {\n        return (\n          chartHeight -\n          ((y - yMinPadded) / (yMaxPadded - yMinPadded || 1)) * chartHeight\n        );\n      } else {\n        return ((y - yMinPadded) / (yMaxPadded - yMinPadded || 1)) * chartWidth;\n      }\n    };\n\n    // Generate bars\n    const bars: Array<{\n      seriesId: string;\n      seriesIndex: number;\n      dataIndex: number;\n      x: number;\n      y: number;\n      width: number;\n      height: number;\n      value: number;\n      label: string;\n      color: string;\n    }> = [];\n\n    const xLabels: Array<{ x: number; y: number; label: string }> = [];\n    const numGroups = groupedData.size;\n    const groupWidth =\n      orientation === \"vertical\"\n        ? chartWidth / numGroups\n        : chartHeight / numGroups;\n\n    let groupIndex = 0;\n    groupedData.forEach((group, xValue) => {\n      const groupStart =\n        orientation === \"vertical\"\n          ? padding.left + groupIndex * groupWidth\n          : padding.top + groupIndex * groupWidth;\n\n      const barsInGroup = group?.length || 0;\n      const barWidth =\n        (groupWidth * barWidthRatio - (barsInGroup - 1) * barPadding) /\n        barsInGroup;\n\n      group.forEach((point, barIndex) => {\n        const currentSeries = sanitizedSeries?.[point.seriesIndex];\n        const color =\n          point.data?.color ||\n          getSeriesColor(currentSeries.color, colors, point.seriesIndex);\n\n        if (orientation === \"vertical\") {\n          const barX =\n            groupStart +\n            barIndex * (barWidth + barPadding) +\n            (groupWidth - groupWidth * barWidthRatio) / 2;\n          const barHeight = chartHeight - scaleY(point.data?.y);\n          const barY = padding.top + scaleY(point.data?.y);\n\n          const safeBarX = Number.isFinite(barX) ? barX : padding.left;\n          const safeBarY = Number.isFinite(barY)\n            ? barY\n            : padding.top + chartHeight;\n          const safeBarWidth = Number.isFinite(barWidth)\n            ? Math.max(0, barWidth)\n            : 0;\n          const safeBarHeight = Number.isFinite(barHeight)\n            ? Math.max(0, barHeight)\n            : 0;\n\n          bars.push({\n            seriesId: point.seriesId,\n            seriesIndex: point.seriesIndex,\n            dataIndex: point.index,\n            x: safeBarX,\n            y: safeBarY,\n            width: safeBarWidth,\n            height: safeBarHeight,\n            value: point.data?.y,\n            label: point.data?.label || formatXValue(point.data?.x),\n            color,\n          });\n        } else {\n          // Horizontal bars\n          const barY =\n            groupStart +\n            barIndex * (barWidth + barPadding) +\n            (groupWidth - groupWidth * barWidthRatio) / 2;\n          const barWidthH = scaleY(point.data?.y);\n          const barX = padding.left;\n\n          const safeBarWidthH = Number.isFinite(barWidthH)\n            ? Math.max(0, barWidthH)\n            : 0;\n          const safeBarY = Number.isFinite(barY) ? barY : padding.top;\n          const safeBarHeight = Number.isFinite(barWidth)\n            ? Math.max(0, barWidth)\n            : 0;\n\n          bars.push({\n            seriesId: point.seriesId,\n            seriesIndex: point.seriesIndex,\n            dataIndex: point.index,\n            x: barX,\n            y: safeBarY,\n            width: safeBarWidthH,\n            height: safeBarHeight,\n            value: point.data?.y,\n            label: point.data?.label || formatXValue(point.data?.x),\n            color,\n          });\n        }\n      });\n\n      // Add X label\n      if (orientation === \"vertical\") {\n        xLabels.push({\n          x: groupStart + groupWidth / 2,\n          y: height - padding.bottom + 20,\n          label: formatXValue(xValue),\n        });\n      } else {\n        xLabels.push({\n          x: groupStart + groupWidth / 2,\n          y: padding.left - 10,\n          label: formatXValue(xValue),\n        });\n      }\n\n      groupIndex++;\n    });\n\n    // Generate Y axis labels\n    const yLabels = [0, 0.25, 0.5, 0.75, 1].map((ratio: any) => {\n      const value = yMinPadded + (yMaxPadded - yMinPadded) * ratio;\n      if (orientation === \"vertical\") {\n        return {\n          x: padding.left - 10,\n          y: padding.top + chartHeight - chartHeight * ratio + 4,\n          label: formatYValue(value),\n        };\n      } else {\n        return {\n          x: padding.left + chartWidth * ratio,\n          y: height - padding.bottom + 20,\n          label: formatYValue(value),\n        };\n      }\n    });\n\n    return {\n      bars: bars.filter(\n        (bar) =>\n          Number.isFinite(bar.x) &&\n          Number.isFinite(bar.y) &&\n          Number.isFinite(bar.width) &&\n          Number.isFinite(bar.height)\n      ),\n      xLabels: xLabels.filter(\n        (label) => Number.isFinite(label.x) && Number.isFinite(label.y)\n      ),\n      yLabels: yLabels.filter(\n        (label) => Number.isFinite(label.x) && Number.isFinite(label.y)\n      ),\n    };\n  }, [\n    series,\n    width,\n    height,\n    orientation,\n    barPadding,\n    barWidthRatio,\n    formatYValue,\n    formatXValue,\n    colors,\n  ]);\n\n  // Handle bar hover\n  const handleBarHover = (\n    bar: (typeof processedData.bars)[0],\n    _event: React.MouseEvent\n  ) => {\n    if (showTooltips) {\n      const svgX =\n        orientation === \"vertical\" ? bar.x + bar.width / 2 : bar.x + bar.width;\n      const svgY = orientation === \"vertical\" ? bar.y : bar.y + bar.height / 2;\n      setHoveredBar({\n        seriesId: bar.seriesId,\n        dataIndex: bar.dataIndex,\n        x: svgX,\n        y: svgY,\n        value: bar.value,\n      });\n    }\n  };\n\n  const handleBarLeave = () => {\n    setHoveredBar(null);\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n        <div className=\"glass-animate-pulse glass-gap-4\">\n          <div className=\"glass-h-6 glass-surface-subtle/20 glass-radius-md glass-w-48\"></div>\n          <div className=\"glass-h-64 glass-surface-subtle/10 glass-radius-md glass-flex glass-items-end glass-justify-center glass-gap-2\">\n            {Array.from({ length: 8 }).map((_: any, i: any) => (\n              <div\n                key={i}\n                className=\"glass-surface-subtle/20 glass-radius-t\"\n                style={{\n                  width: \"20px\",\n                  height: `${Math.random() * 100}%`,\n                }}\n              />\n            ))}\n          </div>\n          <div className=\"glass-flex glass-justify-center glass-gap-4\">\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard className={cn(\"glass-overflow-hidden\", className)} {...props}>\n        {title && (\n          <CardHeader>\n            <ContrastGuard>\n              <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold\">\n                {title}\n              </CardTitle>\n            </ContrastGuard>\n          </CardHeader>\n        )}\n\n        <CardContent className=\"glass-p-4\">\n          <div className=\"glass-relative glass-w-full glass-overflow-hidden\">\n            <svg\n              width=\"100%\"\n              height={height}\n              viewBox={`0 0 ${width} ${height}`}\n              preserveAspectRatio=\"none\"\n              className=\"glass-overflow-hidden\"\n              style={{\n                display: \"block\",\n                maxWidth: \"100%\",\n                minWidth: 0,\n                minHeight: height,\n              }}\n            >\n              {/* Grid lines */}\n              {showGrid && (\n                <g className=\"glass-opacity-20\">\n                  {processedData.yLabels.map((label, index) => {\n                    if (orientation === \"vertical\") {\n                      return (\n                        <line\n                          key={`h-grid-${index}`}\n                          x1={padding.left}\n                          y1={label.y - 4}\n                          x2={width - padding.right}\n                          y2={label.y - 4}\n                          stroke=\"currentColor\"\n                          strokeWidth=\"1\"\n                          className=\"glass-text-primary-glass-opacity-30\"\n                        />\n                      );\n                    } else {\n                      return (\n                        <line\n                          key={`v-grid-${index}`}\n                          x1={label.x}\n                          y1={padding.top}\n                          x2={label.x}\n                          y2={height - padding.bottom}\n                          stroke=\"currentColor\"\n                          strokeWidth=\"1\"\n                          className=\"glass-text-primary-glass-opacity-30\"\n                        />\n                      );\n                    }\n                  })}\n                </g>\n              )}\n\n              {/* Bars */}\n              {processedData.bars.map((bar, index) => (\n                <g key={`${bar.seriesId}-${bar.dataIndex}`}>\n                  <rect\n                    x={bar.x}\n                    y={bar.y}\n                    width={bar.width}\n                    height={bar.height}\n                    fill={bar.color}\n                    className={`glass-cursor-pointer glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] hover:glass-opacity-80`}\n                    style={{\n                      animation: `barGrow ${animationDuration}ms ease-out ${index * 50}ms both`,\n                    }}\n                    onMouseEnter={(e) => handleBarHover(bar, e)}\n                    onMouseLeave={handleBarLeave}\n                    opacity={\n                      hoveredSeriesId && hoveredSeriesId !== bar.seriesId\n                        ? 0.35\n                        : 1\n                    }\n                  />\n\n                  {/* Data labels */}\n                  {showDataLabels && (\n                    <text\n                      x={bar.x + bar.width / 2}\n                      y={\n                        orientation === \"vertical\"\n                          ? bar.y - 5\n                          : bar.y + bar.height / 2 + 4\n                      }\n                      textAnchor=\"middle\"\n                      className=\"glass-text-xs glass-font-medium\"\n                      style={{ fill: AXIS_TITLE_FILL, fontSize: \"0.625rem\" }}\n                    >\n                      <ContrastGuard>{formatYValue(bar.value)}</ContrastGuard>\n                    </text>\n                  )}\n                </g>\n              ))}\n\n              {/* X-axis */}\n              {orientation === \"vertical\" ? (\n                <line\n                  x1={padding.left}\n                  y1={height - padding.bottom}\n                  x2={width - padding.right}\n                  y2={height - padding.bottom}\n                  stroke=\"currentColor\"\n                  strokeWidth=\"1\"\n                  className=\"glass-text-primary-glass-opacity-50\"\n                />\n              ) : (\n                <line\n                  x1={padding.left}\n                  y1={height - padding.bottom}\n                  x2={padding.left}\n                  y2={padding.top}\n                  stroke=\"currentColor\"\n                  strokeWidth=\"1\"\n                  className=\"glass-text-primary-glass-opacity-50\"\n                />\n              )}\n\n              {/* Y-axis */}\n              {orientation === \"vertical\" ? (\n                <line\n                  x1={padding.left}\n                  y1={padding.top}\n                  x2={padding.left}\n                  y2={height - padding.bottom}\n                  stroke=\"currentColor\"\n                  strokeWidth=\"1\"\n                  className=\"glass-text-primary-glass-opacity-50\"\n                />\n              ) : (\n                <line\n                  x1={padding.left}\n                  y1={padding.top}\n                  x2={width - padding.right}\n                  y2={padding.top}\n                  stroke=\"currentColor\"\n                  strokeWidth=\"1\"\n                  className=\"glass-text-primary-glass-opacity-50\"\n                />\n              )}\n\n              {/* Axis labels */}\n              {processedData.xLabels.map((label, index) => (\n                <text\n                  key={`x-label-${index}`}\n                  x={label.x}\n                  y={label.y}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {processedData.yLabels.map((label, index) => (\n                <text\n                  key={`y-label-${index}`}\n                  x={label.x}\n                  y={label.y}\n                  textAnchor={orientation === \"vertical\" ? \"end\" : \"middle\"}\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {/* Axis titles */}\n              {xAxisLabel && (\n                <text\n                  x={width / 2}\n                  y={height - 10}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  <ContrastGuard>{xAxisLabel}</ContrastGuard>\n                </text>\n              )}\n\n              {yAxisLabel && orientation === \"vertical\" && (\n                <text\n                  x={15}\n                  y={height / 2}\n                  textAnchor=\"middle\"\n                  transform={`rotate(-90, 15, ${height / 2})`}\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  {yAxisLabel}\n                </text>\n              )}\n\n              {yAxisLabel && orientation === \"horizontal\" && (\n                <text\n                  x={width / 2}\n                  y={15}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  {yAxisLabel}\n                </text>\n              )}\n            </svg>\n\n            {/* Crosshair and Tooltip */}\n            {hoveredBar && (\n              <>\n                <svg\n                  width={width}\n                  height={height}\n                  className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n                >\n                  {orientation === \"vertical\" ? (\n                    <line\n                      x1={hoveredBar.x}\n                      y1={padding.top}\n                      x2={hoveredBar.x}\n                      y2={height - padding.bottom}\n                      stroke={CROSSHAIR_STROKE}\n                      strokeOpacity={0.25}\n                      strokeDasharray=\"4 4\"\n                    />\n                  ) : (\n                    <line\n                      x1={padding.left}\n                      y1={hoveredBar.y}\n                      x2={width - padding.right}\n                      y2={hoveredBar.y}\n                      stroke={CROSSHAIR_STROKE}\n                      strokeOpacity={0.25}\n                      strokeDasharray=\"4 4\"\n                    />\n                  )}\n                </svg>\n                <Motion preset=\"fadeIn\" className=\"glass-absolute glass-z-10\">\n                  <div\n                    className={cn(\n                      \"glass-absolute glass-radius-xl glass-p-3 glass-shadow-xl\",\n                      \"glass-surface-overlay glass-backdrop-blur-md glass-border glass-border-subtle glass-radial-reveal glass-lift\"\n                    )}\n                    style={{\n                      left: hoveredBar.x + 10,\n                      top: hoveredBar.y - 10,\n                      transform:\n                        hoveredBar.x > width / 2 ? \"translateX(-100%)\" : \"none\",\n                    }}\n                  >\n                    <div className=\"glass-text-primary glass-text-sm\">\n                      <ContrastGuard>\n                        <div className=\"glass-font-medium\">\n                          {\n                            series.find((s) => s.id === hoveredBar.seriesId)\n                              ?.name\n                          }\n                        </div>\n                        <div className=\"glass-text-primary-glass-opacity-80\">\n                          Value: {formatYValue(hoveredBar.value)}\n                        </div>\n                      </ContrastGuard>\n                    </div>\n                  </div>\n                </Motion>\n              </>\n            )}\n          </div>\n\n          {/* Legend */}\n          {showLegend && series.length > 0 && (\n            <div\n              className=\"glass-flex glass-flex-wrap glass-justify-center glass-gap-4 glass-mt-6\"\n              role=\"list\"\n              aria-label=\"Chart legend\"\n            >\n              {series.map((s, idx) => (\n                <div\n                  key={s.id}\n                  className={cn(\n                    `glass-flex glass-items-center glass-gap-2 glass-px-2 glass-py-1 glass-radius-md glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] glass-hover--translate-y-0-5`,\n                    hoveredSeriesId && hoveredSeriesId !== s.id\n                      ? \"glass-opacity-50\"\n                      : \"glass-opacity-100\"\n                  )}\n                  role=\"listitem\"\n                  tabIndex={0}\n                  aria-label={`${s.name} data series`}\n                  onMouseEnter={() => setHoveredSeriesId(s.id)}\n                  onMouseLeave={() => setHoveredSeriesId(null)}\n                  onKeyDown={(e) => {\n                    if (e.key === \"Enter\" || e.key === \" \") {\n                      e.preventDefault();\n                      setHoveredSeriesId(\n                        hoveredSeriesId === s.id ? null : s.id\n                      );\n                    }\n                  }}\n                >\n                  <div\n                    className=\"glass-w-3 glass-h-3 glass-radius-md\"\n                    style={{\n                      backgroundColor: getSeriesColor(s.color, colors, idx),\n                    }}\n                    aria-hidden=\"true\"\n                  />\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                      {s.name}\n                    </span>\n                  </ContrastGuard>\n                </div>\n              ))}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassBarChart;\n", "\"use client\";\n/**\n * GlassChart Component\n *\n * A unified chart container with glass styling, physics-based interactions,\n * and Z-Space layering. Acts as a wrapper for all chart types.\n */\n// Typography tokens available via typography.css (imported in index.css)\nimport React, {\n  useMemo,\n  useState,\n  useRef,\n  useCallback,\n  useEffect,\n  forwardRef,\n  useImperativeHandle,\n  memo,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { usePhysicsInteraction } from \"../../hooks/usePhysicsInteraction\";\nimport { zSpaceLayers } from \"../../core/zspace\";\nimport { createThemeContext } from \"../../core/themeContext\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n// Consciousness interface imports\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\n\n// Consciousness interface features\nexport interface ConsciousnessFeatures {\n  /**\n   * Enable predictive chart insights and data analysis\n   */\n  predictive?: boolean;\n  /**\n   * Enable predictive data preloading for chart interactions\n   */\n  preloadData?: boolean;\n  /**\n   * Enable eye tracking for chart element focus\n   */\n  eyeTracking?: boolean;\n  /**\n   * Enable gaze-responsive chart highlighting\n   */\n  gazeResponsive?: boolean;\n  /**\n   * Enable biometric adaptation for chart complexity\n   */\n  adaptive?: boolean;\n  /**\n   * Enable biometric responsive chart scaling and timing\n   */\n  biometricResponsive?: boolean;\n  /**\n   * Enable spatial audio for chart interactions\n   */\n  spatialAudio?: boolean;\n  /**\n   * Enable audio feedback for chart data points\n   */\n  audioFeedback?: boolean;\n  /**\n   * Enable achievement tracking for chart interactions\n   */\n  trackAchievements?: boolean;\n  /**\n   * Achievement identifier for chart usage\n   */\n  achievementId?: string;\n  /**\n   * Chart usage context for consciousness features\n   */\n  usageContext?:\n    | \"dashboard\"\n    | \"analytics\"\n    | \"report\"\n    | \"presentation\"\n    | \"exploration\";\n}\n\n// Basic types\ninterface BaseChartProps {\n  width?: string | number;\n  height?: number;\n  /**\n   * Render a denser chart shell for cards, previews, and dashboard widgets.\n   * Default/full-size behavior is unchanged unless compact/contained is set.\n   */\n  compact?: boolean;\n  /**\n   * Bounded rendering mode for constrained surfaces.\n   */\n  contained?: boolean;\n  /**\n   * Maximum outer chart height when compact/contained.\n   */\n  maxHeight?: number | string;\n  glass?: boolean;\n  title?: string;\n  description?: string;\n  adaptToCapabilities?: boolean;\n  onError?: (error: Error) => void;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\n/**\n * GlassChart props interface\n */\nexport interface GlassChartProps extends BaseChartProps, ConsciousnessFeatures {\n  /**\n   * The type of chart to render\n   */\n  type: \"bar\" | \"line\" | \"area\" | \"pie\" | \"scatter\";\n\n  /**\n   * Data for the chart\n   */\n  data?: GlassChartData;\n\n  /**\n   * Force simplified mode (no advanced features)\n   */\n  forcedSimplified?: boolean;\n\n  /**\n   * Z-space elevation level\n   */\n  zElevation?: number;\n\n  /**\n   * Enable magnetic mouse effect\n   */\n  magneticEffect?: boolean;\n\n  /**\n   * Strength of magnetic effect\n   */\n  magneticStrength?: number;\n\n  /**\n   * Enable depth animation\n   */\n  depthAnimation?: boolean;\n\n  /**\n   * Tab configuration\n   */\n  tabs?: GlassChartTab[];\n\n  /**\n   * Active tab ID\n   */\n  activeTab?: string;\n\n  /**\n   * Tab change handler\n   */\n  onTabChange?: (tabId: string) => void;\n\n  /**\n   * Additional chart props\n   */\n  chartProps?: GlassChartCustomProps;\n\n  /**\n   * Custom toolbar items\n   */\n  toolbarItems?: GlassChartToolbarItems;\n\n  /**\n   * Accessible label for the chart container\n   */\n  \"aria-label\"?: string;\n\n  /**\n   * Allow switching chart types\n   */\n  allowTypeSwitch?: boolean;\n\n  /**\n   * Available chart types\n   */\n  availableTypes?: Array<GlassChartProps[\"type\"]>;\n\n  /**\n   * Focus mode\n   */\n  focusMode?: boolean;\n\n  /**\n   * Allow chart download\n   */\n  allowDownload?: boolean;\n\n  /**\n   * Download handler\n   */\n  onDownload?: () => void;\n\n  /**\n   * Theme override\n   */\n  theme?: Partial<AuraChartTheme> | Record<string, unknown>;\n}\n\nimport { GlassAreaChart as AreaChart } from \"./GlassAreaChart\";\nimport { GlassBarChart as BarChart } from \"./GlassBarChart\";\nimport { GlassLineChart as LineChart } from \"./GlassLineChart\";\nimport { GlassPieChart as PieChart, type PieDataPoint } from \"./GlassPieChart\";\nimport chartStyles from \"./GlassChart.module.css\";\n\nexport interface AuraChartTheme {\n  isDarkMode: boolean;\n  colorMode: \"light\" | \"dark\";\n  themeVariant: string;\n  colors: Record<string, unknown>;\n  zIndex: Record<string, number | string>;\n}\n\nexport type GlassChartValue = string | number | Date;\n\nexport interface GlassChartDataPoint {\n  x?: GlassChartValue;\n  y?: number;\n  value?: number;\n  label?: string;\n  color?: string;\n  [key: string]: unknown;\n}\n\nexport interface GlassChartSeries {\n  id: string;\n  name: string;\n  data: GlassChartDataPoint[];\n  color?: string;\n  [key: string]: unknown;\n}\n\nexport interface GlassChartJsDataset {\n  id?: string;\n  label?: string;\n  data?: Array<number | GlassChartDataPoint>;\n  backgroundColor?: string | string[];\n  borderColor?: string | string[];\n  [key: string]: unknown;\n}\n\nexport interface GlassChartJsData {\n  labels?: GlassChartValue[];\n  datasets?: GlassChartJsDataset[];\n  [key: string]: unknown;\n}\n\nexport type GlassChartData =\n  | GlassChartSeries[]\n  | GlassChartDataPoint[]\n  | GlassChartJsData;\n\nexport interface GlassChartTab {\n  id: string;\n  label?: React.ReactNode;\n  content?: React.ReactNode;\n  disabled?: boolean;\n  [key: string]: unknown;\n}\n\nexport type GlassChartToolbarItems = React.ReactNode | React.ReactNode[];\nexport type GlassChartCustomProps = Record<string, unknown>;\n\ninterface NormalizedChartPoint {\n  x: string | number;\n  y: number;\n  value?: number;\n  label?: string;\n  color?: string;\n  [key: string]: unknown;\n}\n\ninterface NormalizedChartSeries {\n  id: string;\n  name: string;\n  data: NormalizedChartPoint[];\n  color?: string;\n  [key: string]: unknown;\n}\n\ninterface ChartInsight {\n  title?: string;\n  message?: string;\n  insight?: string;\n  [key: string]: unknown;\n}\n\ninterface ChartDataPattern {\n  id?: string;\n  type?: string;\n  confidence?: number;\n  frequency?: number;\n  pattern?: Array<string | number>;\n  prediction?: string;\n  [key: string]: unknown;\n}\n\n// Ref interface\nexport interface GlassChartRef {\n  /** Gets the main chart container DOM element */\n  getContainerElement: () => HTMLDivElement | null;\n  /** Gets the currently rendered chart type */\n  getCurrentChartType: () => GlassChartProps[\"type\"];\n  /** Programmatically changes the rendered chart type */\n  setChartType: (type: GlassChartProps[\"type\"]) => void;\n  /** Programmatically sets the active tab (if tabs are used) */\n  setActiveTab: (tabId: string) => void;\n  /** Programmatically triggers the download function (if configured) */\n  downloadChart: () => void;\n  /** Toggles the focus mode (if enabled) */\n  toggleFocusMode: () => void;\n}\n\n/**\n * Styled container with glass effects\n */\nconst getElevationShadow = (level: number) => {\n  switch (level) {\n    case 0:\n      return \"none\";\n    case 1:\n      return \"var(--aura-shadow-elevation-1)\";\n    case 2:\n      return \"var(--aura-shadow-elevation-2)\";\n    case 3:\n      return \"var(--aura-shadow-elevation-3)\";\n    case 4:\n      return \"var(--aura-shadow-elevation-4)\";\n    default:\n      return \"var(--aura-shadow-elevation-2)\";\n  }\n};\n\nconst toCssSize = (value?: number | string): string | undefined =>\n  typeof value === \"number\" ? `${value}px` : value;\n\nconst toNumericSize = (value?: number | string): number | undefined => {\n  if (typeof value === \"number\") return value;\n  if (typeof value === \"string\") {\n    const parsed = Number.parseFloat(value);\n    return Number.isFinite(parsed) ? parsed : undefined;\n  }\n  return undefined;\n};\n\ninterface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n  zElevation: number;\n  height?: string | number;\n  width?: string | number;\n  focused: boolean;\n}\n\nconst ChartContainer = forwardRef<HTMLDivElement, ChartContainerProps>(\n  (\n    { zElevation, height, width, focused, className, style, children, ...rest },\n    ref\n  ) => {\n    const resolvedWidth =\n      typeof width === \"number\" ? `${width}px` : width || \"100%\";\n    const resolvedHeight =\n      typeof height === \"number\" ? `${height}px` : height || \"400px\";\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          chartStyles.container,\n          focused && chartStyles.containerFocused,\n          className\n        )}\n        style={{\n          width: resolvedWidth,\n          height: resolvedHeight,\n          boxShadow: getElevationShadow(zElevation),\n          ...style,\n        }}\n        {...rest}\n      >\n        {children}\n      </div>\n    );\n  }\n);\nChartContainer.displayName = \"ChartContainer\";\n\nconst ChartHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.header, className)} {...props} />;\n\nconst ChartTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n  className,\n  ...props\n}) => <h3 className={cn(chartStyles.title, className)} {...props} />;\n\nconst ChartDescription: React.FC<\n  React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => (\n  <p className={cn(chartStyles.description, className)} {...props} />\n);\n\nconst ChartControls: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.controls, className)} {...props} />;\n\nconst TabsContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.tabs, className)} {...props} />;\n\nconst ToolbarContainer: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.toolbar, className)} {...props} />;\n\ninterface ChartTypeButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  active?: boolean;\n}\n\nconst ChartTypeButton: React.FC<ChartTypeButtonProps> = ({\n  active,\n  className,\n  ...props\n}) => (\n  <button\n    className={cn(\n      chartStyles.typeButton,\n      active && chartStyles.typeButtonActive,\n      className\n    )}\n    {...props}\n  />\n);\n\ninterface ChartContentProps extends React.HTMLAttributes<HTMLDivElement> {\n  focused: boolean;\n}\n\nconst ChartContent: React.FC<ChartContentProps> = ({\n  focused,\n  className,\n  ...props\n}) => (\n  <div\n    className={cn(\n      chartStyles.content,\n      focused && chartStyles.contentFocused,\n      className\n    )}\n    {...props}\n  />\n);\n\nconst FooterContent: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.footer, className)} {...props} />;\n\ninterface SimplifiedChartViewProps {\n  type: GlassChartProps[\"type\"];\n  series: NormalizedChartSeries[];\n}\n\nconst SimplifiedChartView: React.FC<SimplifiedChartViewProps> = ({\n  type,\n  series,\n}) => {\n  const primarySeries = series[0];\n  const points = primarySeries?.data ?? [];\n  const values = points.map((point) => point.y).filter(Number.isFinite);\n\n  if (values.length === 0) {\n    return (\n      <div\n        aria-label={`${type} chart has no data`}\n        style={{\n          display: \"flex\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          width: \"100%\",\n          height: \"100%\",\n          minHeight: 120,\n          color: \"rgba(255,255,255,0.72)\",\n          fontSize: \"0.875rem\",\n        }}\n      >\n        No chart data\n      </div>\n    );\n  }\n\n  const min = Math.min(...values);\n  const max = Math.max(...values);\n  const range = max - min || 1;\n  const width = 320;\n  const height = 132;\n  const padX = 20;\n  const padY = 18;\n  const plotWidth = width - padX * 2;\n  const plotHeight = height - padY * 2;\n  const color = primarySeries?.color ?? \"rgba(124, 211, 255, 0.95)\";\n  const fillColor = \"rgba(124, 211, 255, 0.18)\";\n  const coords = values.map((value, index) => {\n    const x =\n      padX +\n      (values.length === 1\n        ? plotWidth / 2\n        : (index / (values.length - 1)) * plotWidth);\n    const y = padY + plotHeight - ((value - min) / range) * plotHeight;\n    return { x, y, value };\n  });\n  const linePath = coords\n    .map(\n      (point, index) =>\n        `${index === 0 ? \"M\" : \"L\"} ${point.x.toFixed(1)} ${point.y.toFixed(1)}`\n    )\n    .join(\" \");\n  const areaPath = `${linePath} L ${coords[coords.length - 1].x.toFixed(1)} ${(\n    height - padY\n  ).toFixed(1)} L ${coords[0].x.toFixed(1)} ${(height - padY).toFixed(1)} Z`;\n  const barWidth = Math.max(10, plotWidth / values.length - 8);\n  const gridLines = [0.25, 0.5, 0.75].map((ratio) => padY + plotHeight * ratio);\n\n  return (\n    <svg\n      role=\"img\"\n      aria-label={`${type} chart showing ${values.length} points from ${min} to ${max}`}\n      viewBox={`0 0 ${width} ${height}`}\n      preserveAspectRatio=\"none\"\n      style={{\n        width: \"100%\",\n        height: \"100%\",\n        minHeight: 120,\n        display: \"block\",\n      }}\n    >\n      <defs>\n        <linearGradient\n          id=\"glass-chart-simplified-fill\"\n          x1=\"0\"\n          y1=\"0\"\n          x2=\"0\"\n          y2=\"1\"\n        >\n          <stop offset=\"0%\" stopColor=\"rgba(124, 211, 255, 0.28)\" />\n          <stop offset=\"100%\" stopColor=\"rgba(124, 211, 255, 0.03)\" />\n        </linearGradient>\n      </defs>\n      {gridLines.map((y) => (\n        <line\n          key={y}\n          x1={padX}\n          x2={width - padX}\n          y1={y}\n          y2={y}\n          stroke=\"rgba(255,255,255,0.08)\"\n          strokeWidth=\"1\"\n        />\n      ))}\n      {type === \"bar\" ? (\n        coords.map((point, index) => {\n          const barHeight = height - padY - point.y;\n          return (\n            <rect\n              key={`${point.x}-${index}`}\n              x={point.x - barWidth / 2}\n              y={point.y}\n              width={barWidth}\n              height={Math.max(2, barHeight)}\n              rx=\"5\"\n              fill={color}\n              opacity={0.85}\n            />\n          );\n        })\n      ) : (\n        <>\n          {type === \"area\" ? (\n            <path d={areaPath} fill=\"url(#glass-chart-simplified-fill)\" />\n          ) : null}\n          <path\n            d={linePath}\n            fill=\"none\"\n            stroke={color}\n            strokeWidth=\"3\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          />\n          {type === \"scatter\"\n            ? coords.map((point, index) => (\n                <circle\n                  key={`${point.x}-${index}`}\n                  cx={point.x}\n                  cy={point.y}\n                  r=\"4\"\n                  fill={color}\n                  stroke=\"rgba(255,255,255,0.55)\"\n                  strokeWidth=\"1\"\n                />\n              ))\n            : null}\n        </>\n      )}\n      <text\n        x={padX}\n        y={height - 4}\n        fill=\"rgba(255,255,255,0.52)\"\n        fontSize=\"10\"\n        fontFamily=\"ui-monospace, SFMono-Regular, Menlo, monospace\"\n      >\n        {primarySeries?.name ?? \"Series\"}\n      </text>\n    </svg>\n  );\n};\n\n/**\n * Chart SVG icons for type switching\n */\nconst ChartTypeIcons = {\n  bar: (\n    <svg\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M8 18V7M12 18V11M16 18V15\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  ),\n  line: (\n    <svg\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M4 14L8 10L12 14L20 6M20 6V12M20 6H14\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  ),\n  area: (\n    <svg\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M4 14L8 10L12 14L20 6M20 6V12M20 6H14\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M4 14V20H20V6L12 14L8 10L4 14Z\"\n        fill=\"currentColor\"\n        fillOpacity=\"0.2\"\n      />\n    </svg>\n  ),\n  pie: (\n    <svg\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M12 12V2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2Z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M12 12L19 12\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <path\n        d=\"M12 12L8 8\"\n        stroke=\"currentColor\"\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </svg>\n  ),\n};\n\n// Memoized theme helper function with cached default theme\nconst defaultTheme: AuraChartTheme = {\n  isDarkMode: false,\n  colorMode: \"light\",\n  themeVariant: \"nebula\",\n  colors: {\n    nebula: {\n      accentPrimary: COLORS.semantic.secondary,\n      accentSecondary: COLORS.semantic.secondary,\n      accentTertiary: COLORS.semantic.error,\n      stateCritical: \"hsl(var(--glass-color-danger))\",\n      stateOptimal: \"hsl(var(--glass-color-success))\",\n      stateAttention: \"hsl(var(--glass-color-warning))\",\n      stateInformational: \"hsl(var(--glass-color-primary))\",\n      neutralBackground: \"var(--glass-gray-50)\",\n      neutralForeground: \"var(--glass-gray-800)\",\n      neutralBorder: \"var(--glass-gray-200)\",\n      neutralSurface: \"var(--glass-white)\",\n    },\n    glass: {\n      light: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n      dark: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n      tints: {\n        primary:\n          \"color-mix(in srgb, hsl(var(--glass-color-primary)) 10%, transparent)\",\n        secondary:\n          \"color-mix(in srgb, var(--glass-color-secondary) 10%, transparent)\",\n      },\n    },\n  },\n  zIndex: {\n    hide: -1,\n    auto: \"auto\",\n    base: 0,\n    docked: 10,\n    dropdown: 1000,\n    sticky: 1100,\n    banner: 1200,\n    overlay: 1300,\n    modal: 1400,\n    popover: 1500,\n    skipLink: 1600,\n    toast: 1700,\n    tooltip: 1800,\n    glacial: 9999,\n  },\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst toChartXValue = (value: unknown, fallback: number): string | number => {\n  if (typeof value === \"string\" || typeof value === \"number\") {\n    return value;\n  }\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  return fallback;\n};\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  if (typeof value === \"string\" && value.trim() !== \"\") {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : fallback;\n  }\n  return fallback;\n};\n\nconst toOptionalString = (value: unknown): string | undefined =>\n  typeof value === \"string\" ? value : undefined;\n\nconst getColorValue = (value: unknown, index = 0): string | undefined => {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (Array.isArray(value) && value.length > 0) {\n    const item = value[index % value.length];\n    return typeof item === \"string\" ? item : undefined;\n  }\n  return undefined;\n};\n\nconst isChartJsData = (input: unknown): input is GlassChartJsData =>\n  isRecord(input) &&\n  Array.isArray(input.datasets) &&\n  Array.isArray(input.labels);\n\nconst isAuraChartTheme = (input: unknown): input is AuraChartTheme =>\n  isRecord(input) &&\n  typeof input.isDarkMode === \"boolean\" &&\n  (input.colorMode === \"light\" || input.colorMode === \"dark\") &&\n  typeof input.themeVariant === \"string\" &&\n  isRecord(input.colors) &&\n  isRecord(input.zIndex);\n\nconst normalizePoint = (\n  point: unknown,\n  index: number\n): NormalizedChartPoint => {\n  if (isRecord(point)) {\n    const yValue = toFiniteNumber(point.y ?? point.value);\n    return {\n      ...point,\n      x: toChartXValue(point.x ?? point.label, index),\n      y: yValue,\n      value: toFiniteNumber(point.value ?? point.y, yValue),\n      label: toOptionalString(point.label) ?? String(point.x ?? index + 1),\n      color: toOptionalString(point.color),\n    };\n  }\n\n  const yValue = toFiniteNumber(point);\n  return {\n    x: index,\n    y: yValue,\n    value: yValue,\n    label: String(index + 1),\n  };\n};\n\nconst normalizeSeries = (\n  series: unknown,\n  index: number\n): NormalizedChartSeries => {\n  const seriesRecord = isRecord(series) ? series : {};\n  const rawData = Array.isArray(seriesRecord.data) ? seriesRecord.data : [];\n\n  return {\n    ...seriesRecord,\n    id: toOptionalString(seriesRecord.id) ?? `series-${index}`,\n    name: toOptionalString(seriesRecord.name) ?? `Series ${index + 1}`,\n    color: toOptionalString(seriesRecord.color),\n    data: rawData.map(normalizePoint),\n  };\n};\n\nconst toPieDataPoint = (point: unknown, index: number): PieDataPoint => {\n  const normalizedPoint = normalizePoint(point, index);\n  return {\n    label: normalizedPoint.label ?? String(normalizedPoint.x),\n    value: normalizedPoint.value ?? normalizedPoint.y,\n    color: normalizedPoint.color,\n  };\n};\n\n// Helper function to ensure we have a properly typed theme\nconst ensureValidTheme = (themeInput: unknown): AuraChartTheme => {\n  // If the theme is already a valid DefaultTheme return it\n  if (isAuraChartTheme(themeInput)) {\n    return themeInput;\n  }\n\n  // Return cached default theme instead of recreating\n  return defaultTheme;\n};\n\n/**\n * Memoized helper function to transform Chart.js data format to chart data\n */\nconst transformChartJsData = (\n  chartJsData: GlassChartJsData\n): NormalizedChartSeries[] => {\n  if (!isChartJsData(chartJsData)) {\n    // Return empty or handle error if format is unexpected\n    return [];\n  }\n\n  return (chartJsData.datasets ?? []).map((dataset, index) => ({\n    id: dataset.id ?? `dataset-${index}`,\n    name: dataset.label ?? `Dataset ${index + 1}`,\n    color:\n      getColorValue(dataset.borderColor, index) ??\n      getColorValue(dataset.backgroundColor, index),\n    data: (dataset.data ?? []).map((value, pointIndex) => {\n      const valueRecord = isRecord(value) ? value : {};\n      const yValue = toFiniteNumber(\n        isRecord(value) ? (value.y ?? value.value) : value\n      );\n      const label = chartJsData.labels?.[pointIndex];\n\n      return {\n        ...valueRecord,\n        x: toChartXValue(valueRecord.x ?? label, pointIndex),\n        y: yValue,\n        value: toFiniteNumber(\n          valueRecord.value ?? valueRecord.y ?? value,\n          yValue\n        ),\n        label:\n          toOptionalString(valueRecord.label) ??\n          String(label ?? `Point ${pointIndex + 1}`),\n        color: getColorValue(dataset.backgroundColor, pointIndex),\n      };\n    }),\n  }));\n};\n\nconst normalizeSeriesData = (input: unknown): NormalizedChartSeries[] => {\n  if (!Array.isArray(input)) return [];\n  if (input.length === 0) return [];\n\n  const first = input[0];\n  if (isRecord(first) && Array.isArray(first.data)) {\n    return input.map(normalizeSeries);\n  }\n\n  return [\n    {\n      id: \"series-1\",\n      name: \"Series 1\",\n      data: input.map(normalizePoint),\n    },\n  ];\n};\n\n// Memoized performance hook implementation with caching\nconst performanceCache = {\n  isPerformanceConstrained: false,\n  canUseBlur: true,\n  canUseGlassEffects: true,\n  canUseAdvancedAnimations: true,\n  isPoorPerformance: false,\n};\n\nconst useGlassPerformance = () => performanceCache;\n\n/**\n * Memoized GlassChart Component for better performance\n */\nconst GlassChartComponent = forwardRef<GlassChartRef, GlassChartProps>(\n  (\n    {\n      type = \"bar\",\n      data,\n      width = \"100%\",\n      height = 400,\n      compact = false,\n      contained = false,\n      maxHeight,\n      glass = true,\n      title,\n      description,\n      forcedSimplified = false,\n      zElevation = 2,\n      magneticEffect = false,\n      magneticStrength = 0.3,\n      depthAnimation = false,\n      adaptToCapabilities = true,\n      tabs,\n      activeTab,\n      onTabChange,\n      chartProps = {},\n      toolbarItems,\n      allowTypeSwitch = false,\n      availableTypes = [\"bar\", \"line\", \"area\", \"pie\"],\n      focusMode = false,\n      allowDownload = false,\n      onDownload,\n      onError,\n      style,\n      className,\n      theme: providedTheme,\n      // Consciousness features\n      predictive = false,\n      preloadData = false,\n      eyeTracking = false,\n      gazeResponsive = false,\n      adaptive = false,\n      biometricResponsive = false,\n      spatialAudio = false,\n      audioFeedback = false,\n      trackAchievements = false,\n      achievementId,\n      usageContext = \"dashboard\",\n      \"aria-label\": ariaLabel,\n      ...restProps\n    },\n    ref\n  ) => {\n    const isCompact = compact || contained;\n    const explicitMaxHeight = toNumericSize(maxHeight);\n    const outerHeight =\n      explicitMaxHeight ?? (isCompact ? Math.min(height, 220) : height);\n    const hasHeader = Boolean(title || description);\n    const hasControls = Boolean(\n      tabs?.length || allowTypeSwitch || toolbarItems\n    );\n    const verticalChrome =\n      (hasHeader ? (isCompact ? 34 : 56) : 0) +\n      (hasControls ? (isCompact ? 34 : 48) : 0) +\n      (isCompact ? 20 : 32);\n    const innerChartHeight = Math.max(\n      isCompact ? 96 : 160,\n      outerHeight - verticalChrome\n    );\n\n    // Get theme from context or use the provided theme, and ensure it's valid\n    const theme = ensureValidTheme(providedTheme);\n\n    // Check for reduced motion preference\n    const prefersReducedMotion = useReducedMotion();\n\n    // Get device performance capabilities\n    const performanceContext = useGlassPerformance();\n    const isLowPerformanceDevice =\n      performanceContext?.isPoorPerformance || false;\n\n    // Determine if simplified rendering should be used\n    const useSimplified = useMemo(() => {\n      return (\n        forcedSimplified || (adaptToCapabilities && isLowPerformanceDevice)\n      );\n    }, [forcedSimplified, adaptToCapabilities, isLowPerformanceDevice]);\n\n    // State for active tab\n    const [currentTab, setCurrentTab] = useState(\n      activeTab || (tabs?.length ? tabs[0].id : \"\")\n    );\n\n    // State for current chart type when switching is allowed\n    const [currentType, setCurrentType] = useState(type);\n\n    // State for focus mode\n    const [isFocused, setIsFocused] = useState(false);\n\n    // Refs for chart container\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    // Consciousness features state\n    const [chartInsights, setChartInsights] = useState<ChartInsight[]>([]);\n    const [dataPatterns, setDataPatterns] = useState<ChartDataPattern[]>([]);\n    const [isPreloading, setIsPreloading] = useState(false);\n    const [adaptiveComplexity, setAdaptiveComplexity] = useState<\n      \"low\" | \"medium\" | \"high\"\n    >(\"medium\");\n    const [currentDataFocus, setCurrentDataFocus] = useState<{\n      seriesIndex: number;\n      pointIndex: number;\n    } | null>(null);\n\n    // Consciousness feature hooks - only initialize if features are enabled\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n    const interactionRecorder =\n      predictive || trackAchievements\n        ? useInteractionRecorder(`glass-chart-${usageContext}`)\n        : null;\n\n    // Chart insights and pattern analysis\n    useEffect(() => {\n      if (!predictive || !predictiveEngine || !data) return;\n\n      const analyzeChartData = async () => {\n        try {\n          // Get patterns and insights from the predictive engine\n          const patterns = predictiveEngine.engine?.getPatterns() || [];\n          const insights = predictiveEngine.engine?.getInsights() || [];\n\n          setDataPatterns(\n            patterns.map((pattern) => ({\n              id: pattern.id,\n              type: pattern.type,\n              confidence: pattern.confidence,\n              frequency: pattern.frequency,\n              pattern: pattern.pattern,\n              prediction: pattern.prediction,\n            }))\n          );\n          setChartInsights(\n            insights.map((insight) => ({\n              title: insight.recommendation,\n              message: insight.insight,\n              insight: insight.insight,\n              category: insight.category,\n              confidence: insight.confidence,\n              impact: insight.impact,\n            }))\n          );\n\n          if (achievementTracker && trackAchievements) {\n            achievementTracker.recordAction(\"chart_insights_generated\", {\n              chartType: currentType,\n              insightsCount: insights?.length || 0,\n              patternsFound: patterns?.length || 0,\n              context: usageContext,\n            });\n          }\n        } catch {\n          setDataPatterns([]);\n          setChartInsights([]);\n        }\n      };\n\n      analyzeChartData();\n    }, [\n      predictive,\n      predictiveEngine,\n      data,\n      currentType,\n      usageContext,\n      achievementTracker,\n      trackAchievements,\n    ]);\n\n    // Biometric adaptation for chart complexity\n    useEffect(() => {\n      if (!biometricResponsive || !biometricAdapter) return;\n\n      const adaptChartComplexity = () => {\n        const stressLevel = biometricAdapter.currentStressLevel;\n        // For now, use a simple cognitive load estimation based on stress level\n        const cognitiveLoad = stressLevel;\n        // Assume desktop capabilities for now\n        const deviceCapabilities = { isDesktop: true };\n\n        // Adapt chart complexity based on biometric data\n        if (stressLevel > 0.7 || cognitiveLoad > 0.8) {\n          setAdaptiveComplexity(\"low\"); // Simplified chart when stressed\n        } else if (\n          stressLevel < 0.3 &&\n          cognitiveLoad < 0.4 &&\n          deviceCapabilities.isDesktop\n        ) {\n          setAdaptiveComplexity(\"high\"); // Full complexity when relaxed\n        } else {\n          setAdaptiveComplexity(\"medium\"); // Balanced complexity\n        }\n      };\n\n      // Initial adaptation\n      adaptChartComplexity();\n\n      // Listen for biometric changes\n      const interval = setInterval(\n        adaptChartComplexity,\n        ANIMATION.DURATION.slower * 4\n      );\n      return () => clearInterval(interval);\n    }, [biometricResponsive, biometricAdapter]);\n\n    // Eye tracking for chart element focus\n    useEffect(() => {\n      if (!gazeResponsive || !eyeTracker || !containerRef.current) return;\n\n      const handleGazeOnDataPoint = (element: HTMLElement) => {\n        // Extract data point information from element attributes\n        const seriesIndex = parseInt(\n          element.getAttribute(\"data-series-index\") || \"0\"\n        );\n        const pointIndex = parseInt(\n          element.getAttribute(\"data-point-index\") || \"0\"\n        );\n\n        setCurrentDataFocus({ seriesIndex, pointIndex });\n\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"data_focus\", {\n            x: element.offsetLeft,\n            y: element.offsetTop,\n            z: 0,\n          });\n        }\n\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\"chart_data_gaze_focus\", {\n            seriesIndex,\n            pointIndex,\n            chartType: currentType,\n            context: usageContext,\n          });\n        }\n      };\n\n      const handleGazeOffDataPoint = () => {\n        setCurrentDataFocus(null);\n\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"data_blur\");\n        }\n      };\n\n      // Note: onGazeEnter/onGazeExit not available on current eye tracker interface\n      // eyeTracker.onGazeEnter(containerRef.current, handleGazeOnDataPoint);\n      // eyeTracker.onGazeExit(containerRef.current, handleGazeOffDataPoint);\n\n      return () => {\n        if (containerRef.current) {\n          // eyeTracker.offGazeEnter(containerRef.current, handleGazeOnDataPoint);\n          // eyeTracker.offGazeExit(containerRef.current, handleGazeOffDataPoint);\n        }\n      };\n    }, [\n      gazeResponsive,\n      eyeTracker,\n      spatialAudioEngine,\n      audioFeedback,\n      achievementTracker,\n      trackAchievements,\n      currentType,\n      usageContext,\n    ]);\n\n    // Data preloading for chart interactions\n    useEffect(() => {\n      if (!preloadData || !predictiveEngine) return;\n\n      const preloadChartData = async () => {\n        setIsPreloading(true);\n        try {\n          // Note: preloadData not available on current predictive engine interface\n          // await predictiveEngine.preloadData({\n          //   chartType: currentType,\n          //   context: usageContext,\n          //   currentData: data,\n          //   patterns: dataPatterns\n          // });\n        } catch {\n          // Keep rendering with the current chart data.\n        } finally {\n          setIsPreloading(false);\n        }\n      };\n\n      preloadChartData();\n    }, [\n      preloadData,\n      predictiveEngine,\n      currentType,\n      usageContext,\n      data,\n      dataPatterns,\n    ]);\n\n    // Use depth animation if enabled\n    const zAnimationResult = {\n      style: {},\n      isAnimating: false,\n      setDepth: () => {},\n      resetDepth: () => {},\n      setCustomPosition: (x: number, y: number, z: number) => {},\n      reset: () => {},\n    };\n\n    // Store animation functions in a ref to avoid recreation\n    const animationFunctionsRef = useRef({\n      animate: () => {\n        // Set a custom position to create animation effect\n        zAnimationResult.setCustomPosition(0, 10, 20);\n        setTimeout(() => zAnimationResult.reset(), ANIMATION.DURATION.slow);\n      },\n    });\n\n    // Update the ref when zAnimationResult changes\n    useEffect(() => {\n      animationFunctionsRef.current.animate = () => {\n        zAnimationResult.setCustomPosition(0, 10, 20);\n        setTimeout(() => zAnimationResult.reset(), ANIMATION.DURATION.slow);\n      };\n    }, [zAnimationResult]);\n\n    const depthStyles = zAnimationResult.style;\n\n    // Flag to know if original data was Chart.js format\n    const isChartJsDataFormat = useMemo(() => isChartJsData(data), [data]);\n\n    // Prepare data for non-pie charts\n    const chartSeriesData = useMemo(() => {\n      if (isChartJsData(data)) {\n        return transformChartJsData(data);\n      }\n      return normalizeSeriesData(data);\n    }, [data, isChartJsDataFormat]);\n\n    // Memoized handler functions for better performance\n    // Handle tab change\n    const handleTabChange = useCallback(\n      (tabId: string) => {\n        setCurrentTab(tabId);\n        if (onTabChange) {\n          onTabChange(tabId);\n        }\n      },\n      [onTabChange]\n    );\n\n    // Handle chart type change\n    const handleTypeChange = useCallback(\n      (newType: GlassChartProps[\"type\"]) => {\n        const previousType = currentType;\n        setCurrentType(newType);\n\n        // Consciousness-enhanced type change tracking\n        if (interactionRecorder) {\n          // Create a synthetic mouse event for the type change\n          const syntheticEvent = {\n            currentTarget: { id: `chart-type-${newType}` },\n            clientX: 0,\n            clientY: 0,\n            button: 0,\n            ctrlKey: false,\n            altKey: false,\n            shiftKey: false,\n          } as React.MouseEvent<HTMLElement>;\n          interactionRecorder.recordClick(syntheticEvent);\n        }\n\n        // Spatial audio feedback for type changes\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"chart_type_change\", undefined, {\n            frequency: newType === \"pie\" ? 800 : newType === \"line\" ? 600 : 400,\n          });\n        }\n\n        // Achievement tracking for chart exploration\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\"chart_type_switch\", {\n            fromType: previousType,\n            toType: newType,\n            context: usageContext,\n            timestamp: Date.now(),\n          });\n        }\n      },\n      [\n        currentType,\n        interactionRecorder,\n        spatialAudioEngine,\n        audioFeedback,\n        achievementTracker,\n        trackAchievements,\n        usageContext,\n      ]\n    );\n\n    // Handle focus mode toggle\n    const handleFocusToggle = useCallback(() => {\n      if (focusMode) {\n        setIsFocused((prev) => {\n          const newFocused = !prev;\n\n          // Enhanced focus toggle with consciousness features\n          if (depthAnimation && !prev) {\n            animationFunctionsRef.current?.animate &&\n              animationFunctionsRef.current.animate();\n          }\n\n          // Spatial audio for focus state changes\n          if (spatialAudioEngine && audioFeedback) {\n            spatialAudioEngine.playGlassSound(\n              newFocused ? \"chart_focus_enter\" : \"chart_focus_exit\",\n              undefined,\n              {\n                intensity: newFocused ? 0.8 : 0.4,\n              }\n            );\n          }\n\n          // Track focus interactions\n          if (interactionRecorder) {\n            // Create a synthetic focus event\n            const syntheticEvent = {\n              currentTarget: { id: \"chart-container\" },\n              type: newFocused ? \"focus\" : \"blur\",\n            } as React.FocusEvent<HTMLElement>;\n            interactionRecorder.recordFocus(syntheticEvent);\n          }\n\n          // Achievement tracking for focused chart analysis\n          if (achievementTracker && trackAchievements && newFocused) {\n            achievementTracker.recordAction(\"chart_focus_mode_entered\", {\n              chartType: currentType,\n              context: usageContext,\n              hasInsights: chartInsights.length > 0,\n            });\n          }\n\n          return newFocused;\n        });\n      }\n    }, [\n      focusMode,\n      depthAnimation,\n      spatialAudioEngine,\n      audioFeedback,\n      interactionRecorder,\n      currentType,\n      usageContext,\n      achievementTracker,\n      trackAchievements,\n      chartInsights.length,\n    ]);\n\n    // Handle download with consciousness tracking\n    const handleDownload = useCallback(() => {\n      // Spatial audio feedback for download action\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"chart_download\", undefined, {\n          frequency: 500,\n          duration: ANIMATION.DURATION.normal,\n        });\n      }\n\n      // Track download interactions\n      if (interactionRecorder) {\n        // Create a synthetic mouse event for the download\n        const syntheticEvent = {\n          currentTarget: { id: \"chart-download\" },\n          clientX: 0,\n          clientY: 0,\n          button: 0,\n          ctrlKey: false,\n          altKey: false,\n          shiftKey: false,\n        } as React.MouseEvent<HTMLElement>;\n        interactionRecorder.recordClick(syntheticEvent);\n      }\n\n      // Achievement tracking for chart exports\n      if (achievementTracker && trackAchievements) {\n        achievementTracker.recordAction(\"chart_exported\", {\n          chartType: currentType,\n          context: usageContext,\n          insightsCount: chartInsights.length,\n          exportMethod: onDownload ? \"custom\" : \"default\",\n        });\n      }\n\n      if (onDownload) {\n        onDownload();\n      } else {\n        // Default download implementation would need canvas conversion.\n      }\n    }, [\n      onDownload,\n      spatialAudioEngine,\n      audioFeedback,\n      interactionRecorder,\n      currentType,\n      usageContext,\n      chartInsights.length,\n      adaptiveComplexity,\n      achievementTracker,\n      trackAchievements,\n    ]);\n\n    // --- Imperative Handle (Moved After Handlers) ---\n    useImperativeHandle(\n      ref,\n      () => ({\n        getContainerElement: () => containerRef.current,\n        getCurrentChartType: () => currentType,\n        setChartType: (newType) => {\n          if (availableTypes.includes(newType)) {\n            handleTypeChange(newType);\n          }\n        },\n        setActiveTab: (tabId: string) => {\n          if (tabs?.some((tab) => tab.id === tabId)) {\n            handleTabChange(tabId);\n          }\n        },\n        downloadChart: () => {\n          if (allowDownload) {\n            handleDownload();\n          }\n        },\n        toggleFocusMode: () => {\n          if (focusMode) {\n            handleFocusToggle();\n          }\n        },\n      }),\n      [\n        containerRef,\n        currentType,\n        availableTypes,\n        handleTypeChange, // Dependency\n        tabs,\n        handleTabChange, // Dependency\n        allowDownload,\n        handleDownload, // Dependency\n        focusMode,\n        handleFocusToggle, // Dependency\n      ]\n    );\n\n    // Call the magnetic effect hook directly at component level\n    const magneticEffectProps =\n      magneticEffect && !prefersReducedMotion\n        ? {\n            type: \"magnetic\" as const,\n            strength: magneticStrength,\n            radius: 200,\n            maxDisplacement: 10,\n            affectsRotation: false,\n            affectsScale: false,\n            smooth: true,\n          }\n        : null;\n\n    // Magnetic effect properties\n    const magneticProps = {\n      style: {},\n      onMouseEnter: () => {},\n      onMouseLeave: () => {},\n      onMouseMove: () => {},\n      ref: { current: null },\n    };\n\n    // Memoized chart props to prevent unnecessary re-renders\n    const commonProps = useMemo(() => {\n      const resolvedChartHeight = !isCompact\n        ? typeof height === \"number\"\n          ? height\n          : 320\n        : typeof chartProps.height === \"number\"\n          ? chartProps.height\n          : innerChartHeight;\n\n      return {\n        width: typeof width === \"number\" ? width : 640,\n        height: resolvedChartHeight,\n        title: undefined,\n        description: undefined,\n        ...chartProps,\n      };\n    }, [width, height, isCompact, innerChartHeight, chartProps]);\n\n    // Memoized pie data processing\n    const pieData = useMemo<PieDataPoint[]>(() => {\n      if (currentType !== \"pie\") return [];\n\n      let pieDataResult: PieDataPoint[] = [];\n\n      if (isChartJsDataFormat) {\n        const chartJsData = data as GlassChartJsData;\n        const firstDataset = chartJsData.datasets?.[0];\n        if (firstDataset && Array.isArray(firstDataset.data)) {\n          pieDataResult = firstDataset.data.map((value, index) => {\n            const pointRecord = isRecord(value) ? value : {};\n            const label = chartJsData.labels?.[index];\n            return {\n              label:\n                toOptionalString(pointRecord.label) ??\n                String(label ?? `Slice ${index + 1}`),\n              value: toFiniteNumber(\n                pointRecord.value ?? pointRecord.y ?? value\n              ),\n              color: getColorValue(firstDataset.backgroundColor, index),\n            };\n          });\n        }\n      } else if (\n        Array.isArray(data) &&\n        data?.length > 0 &&\n        isRecord(data[0]) &&\n        data[0].value !== undefined\n      ) {\n        // Data looks like the expected format\n        pieDataResult = data.map(toPieDataPoint);\n      } else if (Array.isArray(chartSeriesData) && chartSeriesData.length > 0) {\n        // Extract data from the first series\n        pieDataResult = chartSeriesData[0].data.map(toPieDataPoint);\n      }\n\n      return pieDataResult;\n    }, [currentType, isChartJsDataFormat, data, chartSeriesData]);\n\n    // Optimized chart rendering with better memoization\n    const renderChart = useCallback(() => {\n      // Handle Pie/Doughnut data preparation separately\n      if (currentType === \"pie\") {\n        const { width: _width, height: _height, ...pieProps } = commonProps;\n        return (\n          <PieChart\n            {...(pieProps as Partial<React.ComponentProps<typeof PieChart>>)}\n            data={pieData}\n          />\n        );\n      }\n\n      // Handle other chart types, passing chartSeriesData\n      const chartDataForOtherTypes = chartSeriesData;\n\n      if (useSimplified) {\n        return (\n          <SimplifiedChartView\n            type={currentType}\n            series={chartDataForOtherTypes}\n          />\n        );\n      }\n\n      switch (currentType) {\n        case \"bar\":\n          return (\n            <BarChart\n              {...(commonProps as Partial<\n                React.ComponentProps<typeof BarChart>\n              >)}\n              series={chartDataForOtherTypes}\n            />\n          );\n        case \"line\":\n          return (\n            <LineChart\n              {...(commonProps as Partial<\n                React.ComponentProps<typeof LineChart>\n              >)}\n              series={chartDataForOtherTypes}\n            />\n          );\n        case \"area\":\n          const { fillArea, ...otherAreaProps } = chartProps;\n          return (\n            <AreaChart\n              {...(commonProps as Partial<\n                React.ComponentProps<typeof AreaChart>\n              >)}\n              {...(otherAreaProps as Partial<\n                React.ComponentProps<typeof AreaChart>\n              >)}\n              series={chartDataForOtherTypes}\n            />\n          );\n        // Pie case handled above\n        default:\n          // Fallback or handle scatter etc.\n          return (\n            <BarChart\n              {...(commonProps as Partial<\n                React.ComponentProps<typeof BarChart>\n              >)}\n              series={chartDataForOtherTypes}\n            />\n          );\n      }\n      // Separate dependencies for chartSeriesData calculation from renderChart\n    }, [\n      currentType,\n      isChartJsDataFormat,\n      data,\n      chartSeriesData,\n      glass,\n      chartProps,\n      useSimplified,\n      adaptToCapabilities,\n      onError,\n    ]);\n\n    return (\n      <ChartContainer\n        ref={(element: HTMLDivElement | null) => {\n          // Assign to internal ref\n          if (containerRef.current !== element) {\n            (\n              containerRef as React.MutableRefObject<HTMLDivElement | null>\n            ).current = element;\n          }\n          // Assign to magnetic ref if it exists\n          if (magneticProps && magneticProps.ref) {\n            (\n              magneticProps.ref as React.MutableRefObject<HTMLDivElement | null>\n            ).current = element;\n          }\n        }}\n        zElevation={zElevation}\n        width={width}\n        height={isCompact ? outerHeight : height}\n        focused={isFocused}\n        style={{\n          maxHeight: toCssSize(maxHeight),\n          overflow: isCompact ? \"hidden\" : undefined,\n          ...style,\n          ...(magneticProps ? magneticProps.style : {}),\n          ...(isFocused && depthAnimation ? depthStyles : {}),\n        }}\n        className={cn(\n          className,\n          gazeResponsive && currentDataFocus && \"glass-chart-gaze-focused\",\n          isPreloading && \"glass-chart-preloading\",\n          adaptiveComplexity === \"low\" && \"glass-chart-simplified\",\n          adaptiveComplexity === \"high\" && \"glass-chart-enhanced\"\n        )}\n        onClick={handleFocusToggle}\n        data-chart-type={currentType}\n        data-usage-context={usageContext}\n        data-consciousness-level={`${[predictive, eyeTracking, adaptive, spatialAudio].filter(Boolean).length}`}\n        data-adaptive-complexity={adaptiveComplexity}\n        data-insights-count={chartInsights.length}\n        data-patterns-count={dataPatterns.length}\n        aria-label={\n          ariaLabel ||\n          `Interactive ${currentType} chart${title ? ` titled ${title}` : \"\"}${chartInsights.length > 0 ? ` with ${chartInsights.length} insights` : \"\"}`\n        }\n        role=\"img\"\n      >\n        <div\n          style={{\n            padding: isCompact ? \"10px\" : \"16px\",\n            gap: isCompact ? \"8px\" : undefined,\n            height: \"100%\",\n            display: \"flex\",\n            flexDirection: \"column\",\n            opacity: isPreloading ? 0.7 : 1,\n            transition: `opacity var(--glass-motion-duration-normal) var(--glass-motion-easing-standard)`,\n          }}\n        >\n          {/* Chart header with consciousness insights */}\n          {(title || description || chartInsights.length > 0) && (\n            <ChartHeader>\n              {title && (\n                <ContrastGuard>\n                  <ChartTitle>{title}</ChartTitle>\n                </ContrastGuard>\n              )}\n              {description && (\n                <ContrastGuard>\n                  <ChartDescription>{description}</ChartDescription>\n                </ContrastGuard>\n              )}\n\n              {/* Predictive insights display */}\n              {predictive && chartInsights.length > 0 && (\n                <div\n                  style={{\n                    marginTop: \"8px\",\n                    padding: \"8px 12px\",\n                    background: \"var(--glass-primary-level2-surface)\",\n                    borderRadius: \"var(--glass-radius-md)\",\n                    border: \"1px solid var(--glass-border-default)\",\n                    fontSize: \"12px\",\n                    color:\n                      \"color-mix(in srgb, rgb(99, 102, 241) 90%, transparent)\",\n                  }}\n                  data-insights-panel=\"true\"\n                >\n                  <ContrastGuard>\n                    <strong>\uD83D\uDCA1 Insights:</strong>{\" \"}\n                    {chartInsights\n                      .slice(0, 2)\n                      .map(\n                        (insight) =>\n                          insight.title || insight.message || insight.insight\n                      )\n                      .join(\", \")}\n                    {chartInsights.length > 2 &&\n                      ` (+${chartInsights.length - 2} more)`}\n                  </ContrastGuard>\n                </div>\n              )}\n\n              {/* Biometric adaptation indicator */}\n              {biometricResponsive && adaptiveComplexity !== \"medium\" && (\n                <div\n                  style={{\n                    marginTop: \"4px\",\n                    fontSize: \"10px\",\n                    color:\n                      \"color-mix(in srgb, var(--glass-white) 60%, transparent)\",\n                    fontStyle: \"italic\",\n                  }}\n                  data-adaptation-indicator=\"true\"\n                >\n                  <ContrastGuard>\n                    \uD83E\uDDE0 Adapted for {adaptiveComplexity} cognitive load\n                  </ContrastGuard>\n                </div>\n              )}\n            </ChartHeader>\n          )}\n\n          {/* Chart controls (tabs & toolbar) */}\n          {(tabs?.length || allowTypeSwitch || toolbarItems) && (\n            <ChartControls>\n              {/* Tabs for chart navigation */}\n              {tabs?.length ? (\n                <TabsContainer>\n                  <div>Tabs: {currentTab}</div>\n                </TabsContainer>\n              ) : null}\n\n              {/* Action buttons toolbar */}\n              <ToolbarContainer>\n                {allowTypeSwitch && (\n                  <>\n                    {availableTypes.includes(\"bar\") && (\n                      <ChartTypeButton\n                        active={currentType === \"bar\"}\n                        onClick={(e) => handleTypeChange(\"bar\")}\n                        title=\"Bar chart\"\n                      >\n                        {ChartTypeIcons.bar}\n                      </ChartTypeButton>\n                    )}\n                    {availableTypes.includes(\"line\") && (\n                      <ChartTypeButton\n                        active={currentType === \"line\"}\n                        onClick={(e) => handleTypeChange(\"line\")}\n                        title=\"Line chart\"\n                      >\n                        {ChartTypeIcons.line}\n                      </ChartTypeButton>\n                    )}\n                    {availableTypes.includes(\"area\") && (\n                      <ChartTypeButton\n                        active={currentType === \"area\"}\n                        onClick={(e) => handleTypeChange(\"area\")}\n                        title=\"Area chart\"\n                      >\n                        {ChartTypeIcons.area}\n                      </ChartTypeButton>\n                    )}\n                    {availableTypes.includes(\"pie\") && (\n                      <ChartTypeButton\n                        active={currentType === \"pie\"}\n                        onClick={(e) => handleTypeChange(\"pie\")}\n                        title=\"Pie chart\"\n                      >\n                        {ChartTypeIcons.pie}\n                      </ChartTypeButton>\n                    )}\n                  </>\n                )}\n\n                {allowDownload && (\n                  <ChartTypeButton\n                    active={false}\n                    onClick={handleDownload}\n                    title=\"Download chart\"\n                  >\n                    <svg\n                      width=\"16\"\n                      height=\"16\"\n                      viewBox=\"0 0 24 24\"\n                      fill=\"none\"\n                      xmlns=\"http://www.w3.org/2000/svg\"\n                    >\n                      <path\n                        d=\"M21 15V19C21 19.5304 20.7893 20.0391 20.4142 20.4142C20.0391 20.7893 19.5304 21 19 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V15\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      />\n                      <path\n                        d=\"M7 10L12 15L17 10\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      />\n                      <path\n                        d=\"M12 15V3\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"2\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      />\n                    </svg>\n                  </ChartTypeButton>\n                )}\n\n                {/* Custom toolbar items */}\n                {toolbarItems}\n              </ToolbarContainer>\n            </ChartControls>\n          )}\n\n          {/* Main chart content with consciousness enhancements */}\n          <ChartContent\n            focused={isFocused}\n            data-current-focus={\n              currentDataFocus\n                ? `${currentDataFocus.seriesIndex}-${currentDataFocus.pointIndex}`\n                : undefined\n            }\n            data-adaptive-complexity={adaptiveComplexity}\n            style={{\n              height: isCompact ? `${innerChartHeight}px` : undefined,\n              minHeight: isCompact ? 0 : undefined,\n              overflow: isCompact ? \"hidden\" : undefined,\n              filter:\n                currentDataFocus && gazeResponsive\n                  ? \"brightness(1.1) saturate(1.2)\"\n                  : undefined,\n              transition: `filter var(--glass-motion-duration-normal) var(--glass-motion-easing-standard)`,\n              position: \"relative\",\n            }}\n          >\n            {renderChart()}\n\n            {/* Eye tracking focus overlay */}\n            {currentDataFocus && gazeResponsive && (\n              <div\n                style={{\n                  position: \"absolute\",\n                  top: 0,\n                  left: 0,\n                  right: 0,\n                  bottom: 0,\n                  background: \"var(--glass-primary-level2-surface)\",\n                  pointerEvents: \"none\",\n                  zIndex: 1,\n                  animation: \"pulse 2s infinite\",\n                }}\n                data-gaze-overlay=\"true\"\n              />\n            )}\n\n            {/* Preloading indicator */}\n            {isPreloading && (\n              <div\n                style={{\n                  position: \"absolute\",\n                  top: \"50%\",\n                  left: \"50%\",\n                  transform: \"translate(-50%, -50%)\",\n                  background: \"var(--glass-primary-level2-surface)\",\n                  color: \"white\",\n                  padding: \"8px 12px\",\n                  borderRadius: \"var(--glass-radius-sm)\",\n                  fontSize: \"12px\",\n                  zIndex: 10,\n                }}\n              >\n                <ContrastGuard>\uD83D\uDD04 Analyzing data patterns...</ContrastGuard>\n              </div>\n            )}\n          </ChartContent>\n\n          {/* Enhanced footer content with consciousness features */}\n          {(isFocused || chartInsights.length > 0) && (\n            <FooterContent>\n              {isFocused && (\n                <ContrastGuard>Click to exit focused view</ContrastGuard>\n              )}\n              {chartInsights.length > 0 && (\n                <ContrastGuard>\n                  <div\n                    style={{\n                      marginTop: isFocused ? \"8px\" : \"0\",\n                      fontSize: \"11px\",\n                      opacity: 0.8,\n                    }}\n                  >\n                    \uD83D\uDCCA {chartInsights.length} insights available\n                    {currentDataFocus\n                      ? ` | Focus: Series ${currentDataFocus.seriesIndex + 1}, Point ${currentDataFocus.pointIndex + 1}`\n                      : \"\"}\n                  </div>\n                </ContrastGuard>\n              )}\n            </FooterContent>\n          )}\n        </div>\n      </ChartContainer>\n    );\n  }\n);\n\n// Export memoized component for better performance\nexport const GlassChart = memo(GlassChartComponent);\n\n// Add displayName\nGlassChart.displayName = \"GlassChart\";\n\n/**\n * Enhanced GlassChart with consciousness features enabled by default\n * Use this for charts that should be intelligent and adaptive\n */\nexport const ConsciousGlassChart = forwardRef<GlassChartRef, GlassChartProps>(\n  (props, ref) => (\n    <GlassChart\n      ref={ref}\n      predictive={true}\n      preloadData={true}\n      adaptive={true}\n      biometricResponsive={true}\n      trackAchievements={true}\n      achievementId=\"conscious_chart_usage\"\n      {...props}\n    />\n  )\n);\n\nConsciousGlassChart.displayName = \"ConsciousGlassChart\";\n\n/**\n * Predictive GlassChart optimized for data analysis and insights\n */\nexport const PredictiveGlassChart = forwardRef<GlassChartRef, GlassChartProps>(\n  (props, ref) => (\n    <GlassChart\n      ref={ref}\n      predictive={true}\n      preloadData={true}\n      eyeTracking={true}\n      gazeResponsive={true}\n      trackAchievements={true}\n      achievementId=\"predictive_chart_analysis\"\n      usageContext=\"analytics\"\n      {...props}\n    />\n  )\n);\n\nPredictiveGlassChart.displayName = \"PredictiveGlassChart\";\n\n/**\n * Adaptive GlassChart that responds to user stress and cognitive load\n */\nexport const AdaptiveGlassChart = forwardRef<GlassChartRef, GlassChartProps>(\n  (props, ref) => (\n    <GlassChart\n      ref={ref}\n      adaptive={true}\n      biometricResponsive={true}\n      spatialAudio={true}\n      audioFeedback={true}\n      trackAchievements={true}\n      achievementId=\"adaptive_chart_usage\"\n      {...props}\n    />\n  )\n);\n\nAdaptiveGlassChart.displayName = \"AdaptiveGlassChart\";\n\n/**\n * Immersive GlassChart with full consciousness features for presentations\n */\nexport const ImmersiveGlassChart = forwardRef<GlassChartRef, GlassChartProps>(\n  (props, ref) => (\n    <GlassChart\n      ref={ref}\n      predictive={true}\n      preloadData={true}\n      eyeTracking={true}\n      gazeResponsive={true}\n      adaptive={true}\n      biometricResponsive={true}\n      spatialAudio={true}\n      audioFeedback={true}\n      trackAchievements={true}\n      achievementId=\"immersive_chart_experience\"\n      usageContext=\"presentation\"\n      {...props}\n    />\n  )\n);\n\nImmersiveGlassChart.displayName = \"ImmersiveGlassChart\";\n\n/**\n * Utility function to create consciousness-enhanced chart variants\n */\nexport function withChartConsciousness<T extends GlassChartProps>(\n  defaultProps: Partial<ConsciousnessFeatures> = {}\n) {\n  return function EnhancedChart(props: T) {\n    return (\n      <GlassChart\n        predictive={true}\n        adaptive={true}\n        trackAchievements={true}\n        {...defaultProps}\n        {...props}\n      />\n    );\n  };\n}\n\n/**\n * Pre-configured consciousness chart presets\n */\nexport const ChartConsciousnessPresets = {\n  /**\n   * Minimal consciousness features for performance-sensitive charts\n   */\n  minimal: {\n    predictive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Balanced consciousness features for general chart usage\n   */\n  balanced: {\n    predictive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Full consciousness features for immersive chart experiences\n   */\n  immersive: {\n    predictive: true,\n    preloadData: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    adaptive: true,\n    biometricResponsive: true,\n    spatialAudio: true,\n    audioFeedback: true,\n    trackAchievements: true,\n  },\n\n  /**\n   * Analytics-focused consciousness features for data exploration\n   */\n  analytics: {\n    predictive: true,\n    preloadData: true,\n    eyeTracking: true,\n    gazeResponsive: true,\n    trackAchievements: true,\n    usageContext: \"analytics\" as const,\n  },\n} as const;\n\nexport default GlassChart;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { useMemo, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  const numericValue =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim() !== \"\"\n        ? Number(value)\n        : fallback;\n  return Number.isFinite(numericValue) ? numericValue : fallback;\n};\n\nconst getSeriesColor = (\n  explicitColor: string | undefined,\n  colors: string[],\n  index: number\n) => explicitColor || colors[index % Math.max(1, colors.length)] || \"#70d6ff\";\n\nconst DEFAULT_CHART_COLORS = [\n  \"#70d6ff\",\n  \"#a78bfa\",\n  \"#34d399\",\n  \"#fbbf24\",\n  \"#f87171\",\n  \"#22d3ee\",\n  \"#fb7185\",\n  \"#c084fc\",\n  \"#60a5fa\",\n  \"#94a3b8\",\n];\n\nconst AXIS_TEXT_FILL = \"rgba(226, 232, 240, 0.78)\";\nconst AXIS_TITLE_FILL = \"rgba(226, 232, 240, 0.88)\";\nconst CROSSHAIR_STROKE = \"rgba(255, 255, 255, 0.28)\";\n\nexport interface ChartDataPoint {\n  x: number | string;\n  y: number;\n  label?: string;\n}\n\nexport interface ChartSeries {\n  id: string;\n  name: string;\n  data: ChartDataPoint[];\n  color?: string;\n  strokeWidth?: number;\n}\n\nexport interface GlassLineChartProps {\n  /**\n   * Chart title\n   */\n  title?: string;\n  /**\n   * Chart data series\n   */\n  series: ChartSeries[];\n  /**\n   * Chart width\n   */\n  width?: number;\n  /**\n   * Chart height\n   */\n  height?: number;\n  /**\n   * Show grid lines\n   */\n  showGrid?: boolean;\n  /**\n   * Show data points\n   */\n  showPoints?: boolean;\n  /**\n   * Show legend\n   */\n  showLegend?: boolean;\n  /**\n   * X-axis label\n   */\n  xAxisLabel?: string;\n  /**\n   * Y-axis label\n   */\n  yAxisLabel?: string;\n  /**\n   * Custom colors for series\n   */\n  colors?: string[];\n  /**\n   * Animation duration\n   */\n  animationDuration?: number;\n  /**\n   * Show tooltips on hover\n   */\n  showTooltips?: boolean;\n  /**\n   * Format function for Y-axis values\n   */\n  formatYValue?: (value: number) => string;\n  /**\n   * Format function for X-axis values\n   */\n  formatXValue?: (value: number | string) => string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n}\n\n/**\n * GlassLineChart component\n * A glassmorphism line chart with multiple series support and interactive features\n */\nexport const GlassLineChart: React.FC<GlassLineChartProps> = ({\n  title,\n  series = [],\n  width = 600,\n  height = 300,\n  showGrid = true,\n  showPoints = true,\n  showLegend = true,\n  xAxisLabel,\n  yAxisLabel,\n  colors = DEFAULT_CHART_COLORS,\n  animationDuration = ANIMATION.DURATION.normal,\n  showTooltips = true,\n  formatYValue = (value) => value.toString(),\n  formatXValue = (value) => value.toString(),\n  className,\n  loading = false,\n  ...props\n}) => {\n  const [hoveredPoint, setHoveredPoint] = useState<{\n    seriesId: string;\n    index: number;\n    x: number;\n    y: number;\n  } | null>(null);\n  const [hoveredSeriesId, setHoveredSeriesId] = useState<string | null>(null);\n\n  // Chart dimensions with padding\n  const padding = { top: 20, right: 60, bottom: 60, left: 60 };\n  const chartWidth = Math.max(1, width - padding.left - padding.right);\n  const chartHeight = Math.max(1, height - padding.top - padding.bottom);\n\n  // Process data for chart\n  const processedData = useMemo(() => {\n    if (!series || !Array.isArray(series) || series.length === 0) {\n      return { scaledSeries: [], xLabels: [], yLabels: [] };\n    }\n\n    const sanitizedSeries = series.map((s) => ({\n      ...s,\n      data: (Array.isArray(s.data) ? s.data : [])\n        .map((point, pointIndex) => ({\n          ...point,\n          x: point?.x ?? pointIndex,\n          y: toFiniteNumber(point?.y),\n        }))\n        .filter((point) => Number.isFinite(point.y)),\n    }));\n\n    const allPoints = sanitizedSeries.flatMap((s) => s.data);\n    if (allPoints.length === 0) {\n      return { scaledSeries: [], xLabels: [], yLabels: [] };\n    }\n\n    const allXAreNumeric = allPoints.every((p) => typeof p.x === \"number\");\n    const xValues = allPoints.map((p: any) =>\n      typeof p.x === \"number\" && Number.isFinite(p.x) ? p.x : 0\n    );\n    const yValues = allPoints.map((p: any) => p.y);\n\n    const xMin = Math.min(...xValues);\n    const xMax = Math.max(...xValues);\n    const yMin = Math.min(...yValues);\n    const yMax = Math.max(...yValues);\n\n    // Add some padding to Y axis\n    const yRange = yMax - yMin;\n    const yPadding =\n      yRange === 0 ? (yMax === 0 ? 1 : Math.abs(yMax) * 0.1) : yRange * 0.1;\n    const yMinPadded = Math.max(0, yMin - yPadding);\n    const yMaxPadded = yMax + yPadding;\n\n    const maxPoints = Math.max(...sanitizedSeries.map((s) => s.data.length), 1);\n    const useOrdinalX = !allXAreNumeric || xMax === xMin;\n    const scaleX = (x: number, index: number) => {\n      if (useOrdinalX) {\n        return maxPoints <= 1\n          ? chartWidth / 2\n          : (index / (maxPoints - 1)) * chartWidth;\n      }\n      return ((x - xMin) / (xMax - xMin || 1)) * chartWidth;\n    };\n    const scaleY = (y: number) =>\n      chartHeight -\n      ((y - yMinPadded) / (yMaxPadded - yMinPadded || 1)) * chartHeight;\n\n    // Process each series\n    const scaledSeries = sanitizedSeries.map((s, seriesIndex) => ({\n      ...s,\n      color: getSeriesColor(s.color, colors, seriesIndex),\n      points: s.data\n        .map((point, pointIndex) => {\n          const scaledX =\n            padding.left +\n            scaleX(typeof point.x === \"number\" ? point.x : 0, pointIndex);\n          const scaledY = padding.top + scaleY(point.y);\n          return {\n            ...point,\n            scaledX: Number.isFinite(scaledX) ? scaledX : padding.left,\n            scaledY: Number.isFinite(scaledY)\n              ? scaledY\n              : padding.top + chartHeight,\n            originalIndex: pointIndex,\n          };\n        })\n        .filter(\n          (point) =>\n            Number.isFinite(point.scaledX) && Number.isFinite(point.scaledY)\n        ),\n    }));\n\n    // Generate axis labels\n    const xLabels =\n      scaledSeries[0]?.points.map((point, index) => ({\n        x: point.scaledX,\n        y: height - padding.bottom + 20,\n        label: formatXValue(point.x),\n      })) || [];\n\n    const yLabels = [0, 0.25, 0.5, 0.75, 1].map((ratio: any) => {\n      const value = yMinPadded + (yMaxPadded - yMinPadded) * ratio;\n      return {\n        x: padding.left - 10,\n        y: padding.top + chartHeight - chartHeight * ratio,\n        label: formatYValue(value),\n      };\n    });\n\n    return { scaledSeries, xLabels, yLabels };\n  }, [\n    series,\n    width,\n    height,\n    padding,\n    chartWidth,\n    chartHeight,\n    formatYValue,\n    formatXValue,\n    colors,\n  ]);\n\n  // Generate path for line\n  const generatePath = (points: any[]) => {\n    const validPoints = (points || []).filter(\n      (point) =>\n        Number.isFinite(point?.scaledX) && Number.isFinite(point?.scaledY)\n    );\n    if (validPoints.length === 0) return \"\";\n\n    let path = `M ${validPoints[0].scaledX} ${validPoints[0].scaledY}`;\n    for (let i = 1; i < validPoints.length; i++) {\n      path += ` L ${validPoints[i].scaledX} ${validPoints[i].scaledY}`;\n    }\n    return path;\n  };\n\n  // Handle point hover\n  const handlePointHover = (\n    seriesId: string,\n    pointIndex: number,\n    x: number,\n    y: number\n  ) => {\n    if (showTooltips) {\n      setHoveredPoint({ seriesId, index: pointIndex, x, y });\n    }\n  };\n\n  const handlePointLeave = () => {\n    setHoveredPoint(null);\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n        <div className=\"glass-animate-pulse glass-gap-4\">\n          <div className=\"glass-h-6 glass-surface-subtle/20 glass-radius-md glass-w-48\"></div>\n          <div className=\"glass-h-64 glass-surface-subtle/10 glass-radius-md\"></div>\n          <div className=\"glass-flex glass-justify-center glass-gap-4\">\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard className={cn(\"glass-overflow-hidden\", className)} {...props}>\n        {title && (\n          <CardHeader>\n            <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold\">\n              {title}\n            </CardTitle>\n          </CardHeader>\n        )}\n\n        <CardContent className=\"glass-p-4\">\n          <div className=\"glass-relative glass-w-full glass-overflow-hidden\">\n            <svg\n              width=\"100%\"\n              height={height}\n              viewBox={`0 0 ${width} ${height}`}\n              preserveAspectRatio=\"none\"\n              className=\"glass-overflow-hidden\"\n              style={{\n                display: \"block\",\n                maxWidth: \"100%\",\n                minWidth: 0,\n                minHeight: height,\n              }}\n            >\n              {/* Grid lines */}\n              {showGrid && (\n                <g className=\"glass-opacity-20\">\n                  {/* Horizontal grid lines */}\n                  {processedData.yLabels.map((label, index) => (\n                    <line\n                      key={`h-grid-${index}`}\n                      x1={padding.left}\n                      y1={label.y}\n                      x2={width - padding.right}\n                      y2={label.y}\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1\"\n                      className=\"glass-text-primary-glass-opacity-30\"\n                    />\n                  ))}\n                  {/* Vertical grid lines */}\n                  {processedData.xLabels.map((label, index) => (\n                    <line\n                      key={`v-grid-${index}`}\n                      x1={label.x}\n                      y1={padding.top}\n                      x2={label.x}\n                      y2={height - padding.bottom}\n                      stroke=\"currentColor\"\n                      strokeWidth=\"1\"\n                      className=\"glass-text-primary-glass-opacity-30\"\n                    />\n                  ))}\n                </g>\n              )}\n\n              {/* Chart lines */}\n              {processedData.scaledSeries.map((s, seriesIndex) => (\n                <g key={s.id}>\n                  {/* Line */}\n                  <path\n                    d={generatePath(s.points)}\n                    fill=\"none\"\n                    stroke={s.color}\n                    strokeWidth={s.strokeWidth || 2}\n                    className=\"glass-drop-glass-shadow-sm\"\n                    style={{\n                      animation: `drawLine ${animationDuration}ms ease-out ${seriesIndex * 100}ms both`,\n                      opacity:\n                        hoveredSeriesId && hoveredSeriesId !== s.id ? 0.35 : 1,\n                    }}\n                  />\n\n                  {/* Area fill (optional) */}\n                  <defs>\n                    <linearGradient\n                      id={`gradient-${s.id}`}\n                      x1=\"0%\"\n                      y1=\"0%\"\n                      x2=\"0%\"\n                      y2=\"100%\"\n                    >\n                      <stop offset=\"0%\" stopColor={s.color} stopOpacity=\"0.3\" />\n                      <stop offset=\"100%\" stopColor={s.color} stopOpacity=\"0\" />\n                    </linearGradient>\n                  </defs>\n\n                  {/* Data points */}\n                  {showPoints &&\n                    s.points.map((point, pointIndex) => (\n                      <circle\n                        key={`${s.id}-point-${pointIndex}`}\n                        cx={point.scaledX}\n                        cy={point.scaledY}\n                        r=\"4\"\n                        fill={s.color}\n                        stroke=\"color-mix(in srgb, var(--glass-white) 80%, transparent)\"\n                        strokeWidth=\"2\"\n                        className={`glass-cursor-pointer glass-hover-r-6 glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n                        onMouseEnter={() =>\n                          handlePointHover(\n                            s.id,\n                            pointIndex,\n                            point.scaledX,\n                            point.scaledY\n                          )\n                        }\n                        onMouseLeave={handlePointLeave}\n                        style={{\n                          animation: `fadeInPoint 300ms ease-out ${animationDuration + seriesIndex * 100 + pointIndex * 50}ms both`,\n                          opacity:\n                            hoveredSeriesId && hoveredSeriesId !== s.id\n                              ? 0.35\n                              : 1,\n                        }}\n                      />\n                    ))}\n                </g>\n              ))}\n\n              {/* Crosshair when hovering a point */}\n              {hoveredPoint && (\n                <g className=\"glass-pointer-events-none\">\n                  <line\n                    x1={hoveredPoint.x}\n                    y1={padding.top}\n                    x2={hoveredPoint.x}\n                    y2={height - padding.bottom}\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.25}\n                    strokeDasharray=\"4 4\"\n                  />\n                  <line\n                    x1={padding.left}\n                    y1={hoveredPoint.y}\n                    x2={width - padding.right}\n                    y2={hoveredPoint.y}\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.25}\n                    strokeDasharray=\"4 4\"\n                  />\n                  {/* Highlight ring around hovered point */}\n                  <circle\n                    cx={hoveredPoint.x}\n                    cy={hoveredPoint.y}\n                    r=\"8\"\n                    fill=\"none\"\n                    stroke={CROSSHAIR_STROKE}\n                    strokeOpacity={0.35}\n                  />\n                </g>\n              )}\n\n              {/* X-axis */}\n              <line\n                x1={padding.left}\n                y1={height - padding.bottom}\n                x2={width - padding.right}\n                y2={height - padding.bottom}\n                stroke=\"currentColor\"\n                strokeWidth=\"1\"\n                className=\"glass-text-primary-glass-opacity-50\"\n              />\n\n              {/* Y-axis */}\n              <line\n                x1={padding.left}\n                y1={padding.top}\n                x2={padding.left}\n                y2={height - padding.bottom}\n                stroke=\"currentColor\"\n                strokeWidth=\"1\"\n                className=\"glass-text-primary-glass-opacity-50\"\n              />\n\n              {/* Axis labels */}\n              {processedData.xLabels.map((label, index) => (\n                <text\n                  key={`x-label-${index}`}\n                  x={label.x}\n                  y={label.y}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {processedData.yLabels.map((label, index) => (\n                <text\n                  key={`y-label-${index}`}\n                  x={label.x}\n                  y={label.y + 4}\n                  textAnchor=\"end\"\n                  className=\"glass-text-xs\"\n                  style={{ fill: AXIS_TEXT_FILL, fontSize: \"0.625rem\" }}\n                >\n                  {label.label}\n                </text>\n              ))}\n\n              {/* Axis titles */}\n              {xAxisLabel && (\n                <text\n                  x={width / 2}\n                  y={height - 10}\n                  textAnchor=\"middle\"\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  <ContrastGuard>{xAxisLabel}</ContrastGuard>\n                </text>\n              )}\n\n              {yAxisLabel && (\n                <text\n                  x={15}\n                  y={height / 2}\n                  textAnchor=\"middle\"\n                  transform={`rotate(-90, 15, ${height / 2})`}\n                  className=\"glass-text-sm glass-font-medium\"\n                  style={{ fill: AXIS_TITLE_FILL }}\n                >\n                  <ContrastGuard>{yAxisLabel}</ContrastGuard>\n                </text>\n              )}\n            </svg>\n\n            {/* Tooltip */}\n            {hoveredPoint && (\n              <Motion preset=\"fadeIn\" className=\"glass-absolute glass-z-10\">\n                <div\n                  className={cn(\n                    \"glass-absolute glass-radius-xl glass-p-3 glass-shadow-xl\",\n                    \"glass-surface-overlay glass-backdrop-blur-md glass-border glass-border-subtle glass-radial-reveal glass-lift\"\n                  )}\n                  style={{\n                    left: hoveredPoint.x + 10,\n                    top: hoveredPoint.y - 10,\n                    transform:\n                      hoveredPoint.x > width / 2 ? \"translateX(-100%)\" : \"none\",\n                  }}\n                >\n                  <div className=\"glass-text-primary glass-text-sm\">\n                    <ContrastGuard>\n                      <div className=\"glass-font-medium\">\n                        {\n                          processedData.scaledSeries.find(\n                            (s) => s.id === hoveredPoint.seriesId\n                          )?.name\n                        }\n                      </div>\n                      <div className=\"glass-text-primary-glass-opacity-80\">\n                        {(() => {\n                          const series = processedData.scaledSeries.find(\n                            (s) => s.id === hoveredPoint.seriesId\n                          );\n                          const dataPoint = series?.data?.[hoveredPoint.index];\n                          if (dataPoint) {\n                            return `${formatXValue(dataPoint.x)}: ${formatYValue(dataPoint.y)}`;\n                          }\n                          return \"\";\n                        })()}\n                      </div>\n                    </ContrastGuard>\n                  </div>\n                </div>\n              </Motion>\n            )}\n          </div>\n\n          {/* Legend */}\n          {showLegend && (processedData.scaledSeries?.length || 0) > 0 && (\n            <div\n              className=\"glass-flex glass-flex-wrap glass-justify-center glass-gap-4 glass-mt-6\"\n              role=\"list\"\n              aria-label=\"Chart legend\"\n            >\n              {processedData.scaledSeries.map((s) => (\n                <div\n                  key={s.id}\n                  className={cn(\n                    `glass-flex glass-items-center glass-gap-2 glass-px-2 glass-py-1 glass-radius-md glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] glass-hover--translate-y-0-5`,\n                    hoveredSeriesId && hoveredSeriesId !== s.id\n                      ? \"glass-opacity-50\"\n                      : \"glass-opacity-100\"\n                  )}\n                  role=\"listitem\"\n                  tabIndex={0}\n                  aria-label={`${s.name} data series`}\n                  onMouseEnter={() => setHoveredSeriesId(s.id)}\n                  onMouseLeave={() => setHoveredSeriesId(null)}\n                  onKeyDown={(e) => {\n                    if (e.key === \"Enter\" || e.key === \" \") {\n                      e.preventDefault();\n                      setHoveredSeriesId(\n                        hoveredSeriesId === s.id ? null : s.id\n                      );\n                    }\n                  }}\n                >\n                  <div\n                    className=\"glass-w-3 glass-h-3 glass-radius-full\"\n                    style={{ backgroundColor: s.color }}\n                    aria-hidden=\"true\"\n                  />\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                      {s.name}\n                    </span>\n                  </ContrastGuard>\n                </div>\n              ))}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Chart container component\nexport interface GlassChartContainerProps {\n  title?: string;\n  subtitle?: string;\n  children: React.ReactNode;\n  className?: string;\n}\n\nexport const GlassChartContainer: React.FC<GlassChartContainerProps> = ({\n  title,\n  subtitle,\n  children,\n  className,\n}) => {\n  return (\n    <GlassCard className={cn(\"glass-p-6\", className)}>\n      {(title || subtitle) && (\n        <div className=\"glass-mb-6\">\n          {title && (\n            <ContrastGuard>\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\">\n                {title}\n              </h3>\n            </ContrastGuard>\n          )}\n          {subtitle && (\n            <ContrastGuard>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                {subtitle}\n              </p>\n            </ContrastGuard>\n          )}\n        </div>\n      )}\n      {children}\n    </GlassCard>\n  );\n};\n\nexport default GlassLineChart;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { useMemo, useState, forwardRef } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  const numericValue =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim() !== \"\"\n        ? Number(value)\n        : fallback;\n  return Number.isFinite(numericValue) ? numericValue : fallback;\n};\n\nconst getSegmentColor = (\n  explicitColor: string | undefined,\n  colors: string[],\n  index: number\n) => explicitColor || colors[index % Math.max(1, colors.length)] || \"#70d6ff\";\n\nconst DEFAULT_CHART_COLORS = [\n  \"#70d6ff\",\n  \"#a78bfa\",\n  \"#34d399\",\n  \"#fbbf24\",\n  \"#f87171\",\n  \"#22d3ee\",\n  \"#fb7185\",\n  \"#c084fc\",\n  \"#60a5fa\",\n  \"#94a3b8\",\n];\n\nconst LABEL_FILL = \"rgba(226, 232, 240, 0.86)\";\nconst LABEL_MUTED_FILL = \"rgba(203, 213, 225, 0.72)\";\nconst CENTER_FILL = \"rgba(248, 250, 252, 0.95)\";\n\nexport interface PieDataPoint {\n  label: string;\n  value: number;\n  color?: string;\n}\n\nexport interface GlassPieChartProps {\n  /**\n   * Chart title\n   */\n  title?: string;\n  /**\n   * Chart data\n   */\n  data: PieDataPoint[];\n  /**\n   * Chart width and height\n   */\n  size?: number;\n  /**\n   * Inner radius for donut chart (0 for pie chart)\n   */\n  innerRadius?: number;\n  /**\n   * Show legend\n   */\n  showLegend?: boolean;\n  /**\n   * Legend position\n   */\n  legendPosition?: \"right\" | \"bottom\" | \"top\";\n  /**\n   * Show data labels on segments\n   */\n  showLabels?: boolean;\n  /**\n   * Show percentage labels\n   */\n  showPercentages?: boolean;\n  /**\n   * Custom colors for segments\n   */\n  colors?: string[];\n  /**\n   * Animation duration\n   */\n  animationDuration?: number;\n  /**\n   * Show tooltips on hover\n   */\n  showTooltips?: boolean;\n  /**\n   * Format function for values\n   */\n  formatValue?: (value: number) => string;\n  /**\n   * Format function for percentages\n   */\n  formatPercentage?: (percentage: number) => string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n}\n\n/**\n * GlassPieChart component\n * A glassmorphism pie/donut chart with interactive segments and smooth animations\n */\nexport const GlassPieChart = forwardRef<HTMLDivElement, GlassPieChartProps>(\n  function GlassPieChartComponent(\n    {\n      title,\n      data = [],\n      size = 300,\n      innerRadius = 0,\n      showLegend = true,\n      legendPosition = \"right\",\n      showLabels = false,\n      showPercentages = true,\n      colors,\n      animationDuration = ANIMATION.DURATION.normal,\n      showTooltips = true,\n      formatValue,\n      formatPercentage,\n      loading = false,\n      className,\n      ...props\n    },\n    ref\n  ) {\n    const actualColors = colors || DEFAULT_CHART_COLORS;\n    const actualAnimationDuration = animationDuration;\n    const actualShowTooltips = showTooltips;\n    const actualFormatValue = formatValue || ((value) => value.toString());\n    const actualFormatPercentage =\n      formatPercentage || ((percentage) => `${Math.round(percentage)}%`);\n    const actualLoading = loading;\n    const [hoveredSegment, setHoveredSegment] = useState<{\n      index: number;\n      x: number;\n      y: number;\n      label: string;\n      value: number;\n      percentage: number;\n    } | null>(null);\n    const [hoveredLegendIndex, setHoveredLegendIndex] = useState<number | null>(\n      null\n    );\n\n    const centerX = size / 2;\n    const centerY = size / 2;\n    const radius = (size - 40) / 2; // Padding around the chart\n    const labelRadius = radius + 30; // Distance for labels\n\n    // Process data for chart\n    const processedData = useMemo(() => {\n      if (!data || !Array.isArray(data) || data?.length === 0) {\n        return { segments: [], total: 0 };\n      }\n\n      const sanitizedData = data\n        .map((item, index) => ({\n          ...item,\n          label: item?.label || `Segment ${index + 1}`,\n          value: Math.max(0, toFiniteNumber(item?.value)),\n        }))\n        .filter((item) => item.value > 0);\n\n      const total = sanitizedData.reduce((sum, item) => sum + item.value, 0);\n      if (!Number.isFinite(total) || total <= 0) {\n        return { segments: [], total: 0 };\n      }\n\n      let currentAngle = -Math.PI / 2; // Start from top\n\n      const segments = sanitizedData.map((item, index) => {\n        const percentage = (item.value / total) * 100;\n        const angle = (item.value / total) * 2 * Math.PI;\n        const startAngle = currentAngle;\n        const endAngle = currentAngle + angle;\n\n        // Calculate path for segment\n        const x1 = centerX + Math.cos(startAngle) * radius;\n        const y1 = centerY + Math.sin(startAngle) * radius;\n        const x2 = centerX + Math.cos(endAngle) * radius;\n        const y2 = centerY + Math.sin(endAngle) * radius;\n\n        const largeArcFlag = angle > Math.PI ? 1 : 0;\n\n        let path = \"\";\n        if (innerRadius > 0) {\n          // Donut chart\n          const innerX1 = centerX + Math.cos(startAngle) * innerRadius;\n          const innerY1 = centerY + Math.sin(startAngle) * innerRadius;\n          const innerX2 = centerX + Math.cos(endAngle) * innerRadius;\n          const innerY2 = centerY + Math.sin(endAngle) * innerRadius;\n\n          path = `M ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} L ${innerX2} ${innerY2} A ${innerRadius} ${innerRadius} 0 ${largeArcFlag} 0 ${innerX1} ${innerY1} Z`;\n        } else {\n          // Pie chart\n          path = `M ${centerX} ${centerY} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`;\n        }\n\n        // Calculate label position\n        const labelAngle = startAngle + angle / 2;\n        const labelX = centerX + Math.cos(labelAngle) * labelRadius;\n        const labelY = centerY + Math.sin(labelAngle) * labelRadius;\n\n        currentAngle = endAngle;\n\n        return {\n          ...item,\n          path,\n          percentage,\n          startAngle,\n          endAngle,\n          labelX,\n          labelY,\n          color: getSegmentColor(item?.color, actualColors, index),\n        };\n      });\n\n      return { segments, total };\n    }, [\n      data,\n      centerX,\n      centerY,\n      radius,\n      innerRadius,\n      labelRadius,\n      actualColors,\n    ]);\n\n    // Handle segment hover\n    const handleSegmentHover = (\n      segment: (typeof processedData.segments)[0],\n      event: React.MouseEvent\n    ) => {\n      if (actualShowTooltips) {\n        const rect = event.currentTarget.getBoundingClientRect();\n        setHoveredSegment({\n          index: processedData.segments.indexOf(segment),\n          x: rect.left + rect.width / 2,\n          y: rect.top,\n          label: segment.label,\n          value: segment.value,\n          percentage: segment.percentage,\n        });\n      }\n    };\n\n    const handleSegmentLeave = () => {\n      setHoveredSegment(null);\n    };\n\n    // Calculate legend layout\n    const legendItems = processedData.segments.map((segment, index) => ({\n      ...segment,\n      index,\n    }));\n\n    // Loading skeleton\n    if (actualLoading) {\n      return (\n        <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n          <div className=\"glass-animate-pulse glass-gap-4\">\n            <div className=\"glass-h-6 glass-surface-subtle/20 glass-radius-md glass-w-48\"></div>\n            <div className=\"glass-flex glass-items-center glass-justify-center\">\n              <div className=\"glass-w-64 glass-h-64 glass-surface-subtle/10 glass-radius-full\"></div>\n            </div>\n            {showLegend && (\n              <div className=\"glass-flex glass-justify-center glass-gap-4\">\n                <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n                <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n                <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n              </div>\n            )}\n          </div>\n        </GlassCard>\n      );\n    }\n\n    return (\n      <Motion ref={ref} preset=\"fadeIn\" className=\"glass-w-full\">\n        <GlassCard\n          className={cn(\"glass-overflow-hidden\", className)}\n          {...props}\n        >\n          {title && (\n            <CardHeader>\n              <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold\">\n                {title}\n              </CardTitle>\n            </CardHeader>\n          )}\n\n          <CardContent className=\"glass-p-4\">\n            <div\n              className={cn(\n                \"glass-flex\",\n                legendPosition === \"right\"\n                  ? \"glass-flex-row glass-flex-wrap\"\n                  : \"glass-flex-col\",\n                \"glass-items-center glass-justify-center glass-gap-6\"\n              )}\n            >\n              {/* Chart */}\n              <div className=\"glass-relative glass-w-full glass-flex-shrink-0 glass-overflow-hidden\">\n                <svg\n                  width=\"100%\"\n                  height={size}\n                  viewBox={`0 0 ${size} ${size}`}\n                  preserveAspectRatio=\"xMidYMid meet\"\n                  className=\"glass-overflow-hidden\"\n                  style={{ display: \"block\", maxWidth: size, margin: \"0 auto\" }}\n                >\n                  {/* Segments */}\n                  {processedData.segments.map((segment, index) => (\n                    <g\n                      key={`${segment.label}-${index}`}\n                      style={{\n                        animation: `pieSegment ${actualAnimationDuration}ms ease-out ${index * 100}ms both`,\n                      }}\n                    >\n                      <path\n                        d={segment.path}\n                        fill={segment.color}\n                        stroke=\"color-mix(in srgb, var(--glass-white) 20%, transparent)\"\n                        strokeWidth=\"1\"\n                        className={`glass-cursor-pointer glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] hover:glass-opacity-80`}\n                        onMouseEnter={(e) => handleSegmentHover(segment, e)}\n                        onMouseLeave={handleSegmentLeave}\n                        style={{\n                          animation: `pieSegment ${actualAnimationDuration}ms ease-out ${index * 100}ms both`,\n                          opacity:\n                            hoveredLegendIndex !== null &&\n                            hoveredLegendIndex !== index\n                              ? 0.35\n                              : 1,\n                        }}\n                      />\n\n                      {/* Segment labels */}\n                      {showLabels && (\n                        <text\n                          x={segment.labelX}\n                          y={segment.labelY}\n                          textAnchor={\n                            segment.labelX > centerX ? \"start\" : \"end\"\n                          }\n                          className=\"glass-text-xs glass-font-medium\"\n                          style={{\n                            fill: LABEL_FILL,\n                            fontSize: \"var(--typography-caption-size)\",\n                          }}\n                        >\n                          <ContrastGuard>{segment.label}</ContrastGuard>\n                          {showPercentages && (\n                            <tspan\n                              x={segment.labelX}\n                              dy=\"14\"\n                              className=\"glass-text-xs\"\n                              style={{ fill: LABEL_MUTED_FILL }}\n                            >\n                              <ContrastGuard>\n                                {actualFormatPercentage(segment.percentage)}\n                              </ContrastGuard>\n                            </tspan>\n                          )}\n                        </text>\n                      )}\n                    </g>\n                  ))}\n\n                  {/* Center text for donut chart */}\n                  {innerRadius > 0 && (\n                    <g>\n                      <circle\n                        cx={centerX}\n                        cy={centerY}\n                        r={innerRadius}\n                        fill=\"var(--glass-bg-default)\"\n                        stroke=\"color-mix(in srgb, var(--glass-white) 20%, transparent)\"\n                        strokeWidth=\"1\"\n                      />\n                      <text\n                        x={centerX}\n                        y={centerY - 5}\n                        textAnchor=\"middle\"\n                        className=\"glass-text-sm glass-font-medium\"\n                        style={{ fill: LABEL_FILL }}\n                      >\n                        <ContrastGuard>Total</ContrastGuard>\n                      </text>\n                      <text\n                        x={centerX}\n                        y={centerY + 15}\n                        textAnchor=\"middle\"\n                        className=\"glass-text-lg glass-font-semibold\"\n                        style={{ fill: CENTER_FILL }}\n                      >\n                        <ContrastGuard>\n                          {actualFormatValue(processedData.total)}\n                        </ContrastGuard>\n                      </text>\n                    </g>\n                  )}\n                </svg>\n\n                {/* Tooltip */}\n                {hoveredSegment && (\n                  <Motion preset=\"fadeIn\" className=\"glass-absolute glass-z-10\">\n                    <div\n                      className={cn(\n                        \"glass-absolute glass-radius-xl glass-p-3 glass-shadow-xl\",\n                        \"glass-surface-overlay glass-backdrop-blur-md glass-border glass-border-subtle glass-radial-reveal glass-lift\"\n                      )}\n                      style={{\n                        left: hoveredSegment.x + 10,\n                        top: hoveredSegment.y - 10,\n                        transform:\n                          hoveredSegment.x > size / 2\n                            ? \"translateX(-100%)\"\n                            : \"none\",\n                      }}\n                    >\n                      <div className=\"glass-text-primary glass-text-sm\">\n                        <ContrastGuard>\n                          <div className=\"glass-font-medium\">\n                            {hoveredSegment.label}\n                          </div>\n                          <div className=\"glass-text-primary-glass-opacity-80\">\n                            {actualFormatValue(hoveredSegment.value)} (\n                            {actualFormatPercentage(hoveredSegment.percentage)})\n                          </div>\n                        </ContrastGuard>\n                      </div>\n                    </div>\n                  </Motion>\n                )}\n              </div>\n\n              {/* Legend */}\n              {showLegend && (legendItems?.length || 0) > 0 && (\n                <div\n                  className={cn(\n                    \"glass-flex glass-flex-wrap glass-gap-3\",\n                    legendPosition === \"right\"\n                      ? \"glass-flex-col\"\n                      : \"glass-justify-center\"\n                  )}\n                >\n                  {legendItems.map((item) => (\n                    <Motion\n                      key={item?.label}\n                      preset=\"slideUp\"\n                      delay={item?.index * 50}\n                      className={cn(\n                        `glass-flex glass-items-center glass-gap-2 glass-px-2 glass-py-1 glass-radius-md glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] glass-hover--translate-y-0-5`,\n                        hoveredLegendIndex !== null &&\n                          hoveredLegendIndex !== item?.index\n                          ? \"glass-opacity-50\"\n                          : \"glass-opacity-100\"\n                      )}\n                      onMouseEnter={() => setHoveredLegendIndex(item?.index)}\n                      onMouseLeave={() => setHoveredLegendIndex(null)}\n                    >\n                      <div\n                        className=\"glass-w-3 glass-h-3 glass-radius-md\"\n                        style={{ backgroundColor: item?.color }}\n                      />\n                      <div className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                        <ContrastGuard>\n                          <span className=\"glass-font-medium\">\n                            {item?.label}\n                          </span>\n                          <span className=\"glass-ml-2 glass-text-primary-glass-opacity-60\">\n                            {actualFormatValue(item?.value)} (\n                            {actualFormatPercentage(item?.percentage)})\n                          </span>\n                        </ContrastGuard>\n                      </div>\n                    </Motion>\n                  ))}\n                </div>\n              )}\n            </div>\n          </CardContent>\n        </GlassCard>\n      </Motion>\n    );\n  }\n);\n\nGlassPieChart.displayName = \"GlassPieChart\";\n\n// Donut Chart variant\nexport interface GlassDonutChartProps\n  extends Omit<GlassPieChartProps, \"innerRadius\"> {\n  /**\n   * Inner radius as percentage of outer radius (0-1)\n   */\n  innerRadiusRatio?: number;\n}\n\nexport const GlassDonutChart = forwardRef<HTMLDivElement, GlassDonutChartProps>(\n  ({ size = 300, innerRadiusRatio = 0.6, ...props }, ref) => {\n    const innerRadius = ((size - 40) / 2) * innerRadiusRatio;\n\n    return (\n      <GlassPieChart\n        ref={ref}\n        {...props}\n        size={size}\n        innerRadius={innerRadius}\n      />\n    );\n  }\n);\n\nGlassDonutChart.displayName = \"GlassDonutChart\";\n\nexport default GlassPieChart;\n", ".container {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  border-radius: var(--aura-radius-2xl);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 92%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 85%, transparent);\n  box-shadow: var(\n    --glass-elev-chart-container,\n    0 18px 48px rgba(var(--glass-color-black) / var(--glass-opacity-25))\n  );\n  backdrop-filter: blur(var(--aura-glass-neutral-level3-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level3-backdrop-blur));\n  overflow: hidden;\n  transition:\n    transform var(--aura-motion-duration-medium)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-medium)\n      var(--aura-motion-easing-standard);\n}\n\n.containerFocused {\n  transform: scale(1.02);\n  box-shadow: var(\n    --glass-elev-chart-container-focused,\n    0 28px 72px rgba(var(--glass-color-black) / var(--glass-opacity-30))\n  );\n}\n\n.header {\n  display: flex;\n  flex-direction: column;\n  gap: var(--aura-space-2);\n  margin-bottom: var(--aura-space-4);\n}\n\n.title {\n  margin: 0;\n  font-size: var(--aura-font-size-xl);\n  font-weight: var(--aura-font-weight-semibold);\n  color: var(--aura-color-global-text-primary);\n}\n\n.description {\n  margin: 0;\n  font-size: var(--aura-font-size-base);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 85%,\n    transparent\n  );\n}\n\n.controls {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: var(--aura-space-4);\n  gap: var(--aura-space-3);\n}\n\n.tabs {\n  flex: 1;\n}\n\n.toolbar {\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n}\n\n.typeButton {\n  border: none;\n  border-radius: var(--aura-radius-lg);\n  padding: var(--aura-space-2) var(--aura-space-3);\n  background: transparent;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 75%,\n    transparent\n  );\n  font-size: var(--aura-font-size-sm);\n  font-weight: var(--aura-font-weight-medium);\n  cursor: pointer;\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.typeButton:not(:disabled):hover {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 12%,\n    transparent\n  );\n  color: var(--aura-color-global-text-primary);\n}\n\n.typeButtonActive {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-semantic-primary) 18%,\n    transparent\n  );\n  color: var(--aura-color-global-text-primary);\n  box-shadow: var(\n    --glass-elev-chart-type-active,\n    0 10px 28px rgba(76, 29, 149, 0.25)\n  );\n}\n\n.content {\n  position: relative;\n  width: 100%;\n  height: calc(100% - 80px);\n  min-height: 0;\n  overflow: auto;\n}\n\n.contentFocused {\n  height: calc(100% - 120px);\n}\n\n.footer {\n  padding: var(--aura-space-3) var(--aura-space-4);\n  font-size: var(--aura-font-size-sm);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 80%,\n    transparent\n  );\n  text-align: center;\n}\n", "\"use client\";\n/**\n * GlassDataChart Component\n *\n * An advanced glass-styled chart component with physics-based interactions,\n * smooth animations, and rich customization options.\n */\n// Typography tokens available via typography.css (imported in index.css)\nimport React, {\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n  memo,\n  forwardRef,\n} from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"@/lib/utils\";\n// Basic styled components replaced with CSS modules\nimport chartStyles from \"./GlassDataChart.module.css\";\nimport {\n  Chart as ChartJS,\n  CategoryScale,\n  LinearScale,\n  PointElement,\n  LineElement,\n  BarElement,\n  ArcElement,\n  RadialLinearScale,\n  Tooltip,\n  Legend,\n  ChartOptions,\n  ChartType,\n  Filler,\n  defaults,\n  Plugin,\n} from \"chart.js\";\nimport { Chart } from \"react-chartjs-2\";\nimport { useAccessibilitySettings } from \"../../hooks/useAccessibilitySettings\";\n// import { glassGlow } from '../../core/mixins/glowEffects'; // unused\n// import { createThemeContext } from '../../core/themeContext'; // unused\n// import { useGalileoStateSpring, GalileoStateSpringOptions } from '../../hooks/useGalileoStateSpring'; // unused\nimport { GlassTooltip } from \"../modal/GlassTooltip\";\n\nimport {\n  useQualityTier,\n  getQualityBasedPhysicsParams,\n  getQualityBasedGlassParams,\n} from \"../charts/hooks/useQualityTier\";\nimport { glassTokenUtils } from \"../../tokens/glass\";\nimport {\n  chartColorWithAlpha,\n  DEFAULT_CHART_COLORS,\n  resolveChartColor,\n  resolveChartPalette,\n} from \"./utils/chartColors\";\n\ntype QualityHookChartType = Parameters<typeof useQualityTier>[1];\n\ninterface PhysicsAnimationOptions {\n  type?: \"none\" | \"spring\";\n  stiffness?: number;\n  damping?: number;\n  mass?: number;\n  precision?: number;\n  adaptiveMotion?: boolean;\n  respectReducedMotion?: boolean;\n}\n\ninterface ElementAnimationTarget {\n  targetScale?: number;\n  targetOpacity?: number;\n}\n\nconst getQualityChartType = (type: ChartVariant): QualityHookChartType => {\n  switch (type) {\n    case \"doughnut\":\n      return \"pie\";\n    case \"polarArea\":\n      return \"radar\";\n    case \"kpi\":\n      return \"bar\";\n    default:\n      return type as QualityHookChartType;\n  }\n};\n\nconst usePhysicsAnimation = (_options: PhysicsAnimationOptions) => ({\n  value: 1,\n  applyOscillation: (_intensity?: number) => {},\n  applyPopIn: () => {},\n});\n\nconst useChartPhysicsInteraction = (\n  _chartRef: React.RefObject<ChartJS | null>,\n  _wrapperRef: React.RefObject<HTMLDivElement | null>,\n  _options: {\n    enabled?: boolean;\n    mode?: \"x\" | \"y\" | \"xy\";\n    physics?: {\n      tension: number;\n      friction: number;\n      mass: number;\n    };\n    minZoom?: number;\n    maxZoom?: number;\n    wheelSensitivity?: number;\n    inertiaDuration?: number;\n    respectReducedMotion?: boolean;\n  }\n) => ({\n  isPanning: false,\n  zoomLevel: 1,\n  applyZoom: (_level: number) => {},\n  resetZoom: () => {},\n});\n\nconst AuraElementInteractionPlugin = {\n  id: \"auraElementInteraction\",\n} satisfies Plugin<ChartType>;\n\n// Dataset conversion to prevent unnecessary recalculations\nconst convertToChartJsDatasetWithEffects = (\n  dataset: ChartDataset,\n  index: number,\n  chartType: ChartVariant,\n  palette: string[],\n  _animation: unknown\n) => {\n  const safePalette = palette.length > 0 ? palette : DEFAULT_CHART_COLORS;\n  const fallbackColor =\n    DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length];\n  const paletteColor = resolveChartColor(\n    safePalette[index % safePalette.length],\n    fallbackColor\n  );\n  const seriesColor = resolveChartColor(\n    dataset.style?.lineColor || dataset.style?.pointColor || paletteColor,\n    fallbackColor\n  );\n  const fillColor = dataset.style?.fillColor\n    ? resolveChartColor(dataset.style.fillColor, seriesColor)\n    : chartColorWithAlpha(seriesColor, chartType === \"area\" ? 0.24 : 0.72);\n  const normalizedPoints = Array.isArray(dataset.data) ? dataset.data : [];\n  const processedLabels = normalizedPoints.map(\n    (point, pointIndex) => point?.label ?? String(point?.x ?? pointIndex + 1)\n  );\n  const numericData = normalizedPoints.map((point) =>\n    Number.isFinite(Number(point?.y)) ? Number(point.y) : 0\n  );\n  return {\n    ...dataset,\n    data: numericData,\n    processedLabels,\n    backgroundColor: fillColor,\n    borderColor: seriesColor,\n    borderWidth: dataset.style?.borderWidth || 2,\n    pointBackgroundColor: resolveChartColor(\n      dataset.style?.pointColor,\n      seriesColor\n    ),\n    pointBorderColor: resolveChartColor(dataset.style?.pointColor, seriesColor),\n    pointRadius: dataset.style?.pointRadius || 4,\n    tension: dataset.style?.tension || 0.4,\n    fill: chartType === \"area\",\n  };\n};\n\nimport { ContrastGuard } from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { COLORS } from \"../../tokens/designConstants\";\n\n// Chart variant types\nexport type ChartVariant =\n  | \"line\"\n  | \"bar\"\n  | \"area\"\n  | \"pie\"\n  | \"doughnut\"\n  | \"polarArea\"\n  | \"kpi\";\n\n// Data point and dataset types\nexport interface DataPoint {\n  x: string | number;\n  y: number;\n  label?: string;\n  color?: string;\n  extra?: Record<string, unknown>;\n  formatType?: \"number\" | \"currency\" | \"percentage\" | \"units\";\n  formatOptions?: {\n    decimals?: number;\n    currencySymbol?: string;\n    locale?: string;\n    compact?: boolean;\n    showPlus?: boolean;\n    suffix?: string;\n    prefix?: string;\n  };\n}\n\nexport interface ChartDataset {\n  id?: string;\n  label: string;\n  data: DataPoint[];\n  style?: {\n    lineColor?: string;\n    fillColor?: string;\n    pointColor?: string;\n    borderWidth?: number;\n    pointRadius?: number;\n    tension?: number;\n  };\n  formatType?: \"number\" | \"currency\" | \"percentage\" | \"units\";\n  formatOptions?: {\n    decimals?: number;\n    currencySymbol?: string;\n    locale?: string;\n    compact?: boolean;\n    showPlus?: boolean;\n    suffix?: string;\n    prefix?: string;\n  };\n}\n\n// Quality tier types\nexport type QualityTier = \"low\" | \"medium\" | \"high\" | \"ultra\";\n\nexport interface PhysicsParams {\n  stiffness: number;\n  dampingRatio: number;\n  mass: number;\n  precision: number;\n}\n\n// Main component props\ninterface GlassDataChartProps {\n  data?: unknown;\n  datasets?: ChartDataset[];\n  width?: string | number;\n  height?: number;\n  title?: string;\n  subtitle?: string;\n  variant?: ChartVariant;\n  glassVariant?: \"clear\" | \"frosted\" | \"tinted\" | \"luminous\";\n  blurStrength?: \"low\" | \"medium\" | \"high\" | \"standard\";\n  color?: \"primary\" | \"secondary\" | \"tertiary\";\n  animation?: {\n    physicsEnabled: boolean;\n    duration: number;\n    tension: number;\n    friction: number;\n    mass: number;\n    easing: string;\n    staggerDelay: number;\n  };\n  interaction?: {\n    zoomPanEnabled: boolean;\n    zoomMode: \"x\" | \"y\" | \"xy\";\n    physicsHoverEffects: boolean;\n    hoverSpeed: number;\n    showTooltips: boolean;\n    tooltipStyle: \"frosted\" | \"dynamic\";\n    tooltipFollowCursor: boolean;\n    physics?: {\n      tension: number;\n      friction: number;\n      mass: number;\n      minZoom: number;\n      maxZoom: number;\n      wheelSensitivity: number;\n      inertiaDuration: number;\n    };\n  };\n  legend?: {\n    show: boolean;\n    position: \"top\" | \"bottom\";\n    align: \"start\" | \"center\" | \"end\";\n    style: \"default\" | \"compact\";\n    glassEffect: boolean;\n  };\n  axis?: {\n    showXGrid: boolean;\n    showYGrid: boolean;\n    showXLabels: boolean;\n    showYLabels: boolean;\n    axisColor: string;\n    gridColor: string;\n    gridStyle: \"solid\" | \"dashed\";\n  };\n  initialSelection?: number | number[];\n  showToolbar?: boolean;\n  allowDownload?: boolean;\n  palette?: string[];\n  allowTypeSwitch?: boolean;\n  borderRadius?: number;\n  borderColor?: string;\n  elevation?: number | \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n  className?: string;\n  style?: React.CSSProperties;\n  onDataPointClick?: (\n    datasetIndex: number,\n    dataIndex: number,\n    data: DataPoint\n  ) => void;\n  onSelectionChange?: (selection: number[]) => void;\n  onTypeChange?: (type: ChartVariant) => void;\n  onZoomPan?: (chart: ChartJS) => void;\n  exportOptions?: {\n    filename: string;\n    quality: number;\n    format: \"png\" | \"jpeg\";\n    backgroundColor: string;\n    includeTitle: boolean;\n    includeTimestamp: boolean;\n  };\n  renderExportButton?: () => React.ReactNode;\n  kpi?: {\n    value: number;\n    label: string;\n    format: \"number\" | \"currency\" | \"percentage\";\n  };\n  useAdaptiveQuality?: boolean;\n  getElementPhysicsOptions?: (\n    dataPoint: DataPoint,\n    datasetIndex: number,\n    dataIndex: number,\n    chartType: ChartVariant\n  ) => {\n    hoverEffect?: { scale: number; opacity: number };\n    clickEffect?: { scale: number; opacity: number };\n  } | null;\n  \"aria-label\"?: string;\n  \"data-testid\"?: string;\n}\n\ntype GlassDataChartRef = ChartJS;\n\n// Simple format function\nconst formatValue = (value: unknown) => String(value);\n\nconst getContainerBackground = (variant?: string, color?: string) => {\n  switch (variant) {\n    case \"clear\":\n      return \"transparent\";\n    case \"dynamic\":\n      return \"color-mix(in srgb, var(--aura-color-glass-overlay) 65%, color-mix(in srgb, rgb(12, 18, 32) 45%, transparent))\";\n    case \"tinted\":\n      return color\n        ? `color-mix(in srgb, ${color} 18%, color-mix(in srgb, rgb(12, 18, 32) 65%, transparent))`\n        : `color-mix(in srgb, ${COLORS.semantic.secondary} 14%, transparent)`;\n    case \"luminous\":\n      return \"color-mix(in srgb, var(--aura-color-semantic-primary) 12%, color-mix(in srgb, var(--glass-white) 8%, transparent))\";\n    default:\n      return \"color-mix(in srgb, var(--aura-color-glass-surface) 94%, color-mix(in srgb, rgb(12, 18, 32) 20%, transparent))\";\n  }\n};\n\nconst getBlurStrength = (value?: string) => {\n  switch (value) {\n    case \"none\":\n      return \"none\";\n    case \"light\":\n      return \"blur(var(--aura-glass-neutral-level1-backdrop-blur))\";\n    case \"heavy\":\n      return \"blur(var(--aura-glass-neutral-level3-backdrop-blur))\";\n    default:\n      return \"blur(var(--aura-glass-neutral-level2-backdrop-blur))\";\n  }\n};\n\nconst getElevationShadow = (level?: number) => {\n  switch (level) {\n    case 0:\n      return \"none\";\n    case 1:\n      return \"var(--aura-shadow-elevation-sm)\";\n    case 2:\n      return \"var(--aura-shadow-elevation-md)\";\n    case 3:\n      return \"var(--aura-shadow-elevation-lg)\";\n    case 4:\n      return \"var(--aura-shadow-elevation-xl)\";\n    default:\n      return \"var(--aura-shadow-elevation-md)\";\n  }\n};\n\ninterface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n  $glassVariant?: string;\n  $blurStrength?: string;\n  $color?: string;\n  $elevation?: number;\n  $borderRadius?: number | string;\n  $borderColor?: string;\n}\n\nconst ChartContainer = forwardRef<HTMLDivElement, ChartContainerProps>(\n  (props, ref) => {\n    const {\n      $glassVariant = \"frosted\",\n      $blurStrength = \"standard\",\n      $color,\n      $elevation = 2,\n      $borderRadius = 16,\n      $borderColor,\n      className,\n      style,\n      children,\n      ...rest\n    } = props;\n\n    const background = getContainerBackground($glassVariant, $color);\n    const blur = getBlurStrength($blurStrength);\n    const boxShadow = getElevationShadow($elevation);\n\n    return (\n      <div\n        ref={ref}\n        className={cn(chartStyles.container, className)}\n        style={\n          {\n            padding: \"var(--aura-space-5)\",\n            borderRadius:\n              typeof $borderRadius === \"number\"\n                ? `${$borderRadius}px`\n                : ($borderRadius ?? \"var(--glass-radius-md)\"),\n            background,\n            color: \"var(--aura-color-global-text-primary)\",\n            border: `1px solid ${$borderColor || \"color-mix(in srgb, var(--aura-color-global-border-soft) 75%, transparent)\"}`,\n            boxShadow,\n            \"--glass-data-chart-backdrop-filter\": blur,\n            ...style,\n          } as React.CSSProperties\n        }\n        {...rest}\n      >\n        {children}\n      </div>\n    );\n  }\n);\nChartContainer.displayName = \"ChartContainer\";\n\nconst ChartHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.header, className)} {...props} />;\n\nconst ChartTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n  className,\n  ...props\n}) => (\n  <ContrastGuard>\n    <h3 className={cn(chartStyles.title, className)} {...props} />\n  </ContrastGuard>\n);\n\nconst ChartSubtitle: React.FC<React.HTMLAttributes<HTMLParagraphElement>> = ({\n  className,\n  ...props\n}) => (\n  <ContrastGuard>\n    <p className={cn(chartStyles.subtitle, className)} {...props} />\n  </ContrastGuard>\n);\n\nconst ChartWrapper = forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div ref={ref} className={cn(chartStyles.wrapper, className)} {...props} />\n));\nChartWrapper.displayName = \"ChartWrapper\";\n\ninterface ChartLegendProps extends React.HTMLAttributes<HTMLDivElement> {\n  $position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n  $style?: string;\n  $glassEffect?: boolean;\n}\n\nconst ChartLegend = forwardRef<HTMLDivElement, ChartLegendProps>(\n  ({ $position, $glassEffect, className, style, ...props }, ref) => (\n    <div\n      ref={ref}\n      className={cn(\n        chartStyles.legend,\n        $position === \"top\" && chartStyles.legendTop,\n        $position === \"bottom\" && chartStyles.legendBottom,\n        $position === \"left\" && chartStyles.legendLeft,\n        $position === \"right\" && chartStyles.legendRight,\n        $glassEffect && chartStyles.legendGlass,\n        className\n      )}\n      style={{ ...(style ?? {}) }}\n      {...props}\n    />\n  )\n);\nChartLegend.displayName = \"ChartLegend\";\n\ninterface LegendItemProps extends React.HTMLAttributes<HTMLDivElement> {\n  $style?: string;\n  $active?: boolean;\n  $color?: string;\n}\n\nconst LegendItem: React.FC<LegendItemProps> = ({\n  $active = true,\n  className,\n  ...props\n}) => (\n  <div\n    className={cn(\n      chartStyles.legendItem,\n      !$active && chartStyles.legendItemInactive,\n      className\n    )}\n    {...props}\n  />\n);\n\ninterface LegendColorProps extends React.HTMLAttributes<HTMLDivElement> {\n  $color?: string;\n  $active?: boolean;\n}\n\nconst LegendColor: React.FC<LegendColorProps> = ({\n  $color,\n  $active = true,\n  className,\n  style,\n  ...props\n}) => (\n  <div\n    className={cn(chartStyles.legendColor, className)}\n    style={{\n      backgroundColor: $color || COLORS.semantic.secondary,\n      opacity: $active ? 1 : 0.3,\n      ...style,\n    }}\n    {...props}\n  />\n);\n\ninterface LegendLabelProps extends React.HTMLAttributes<HTMLSpanElement> {\n  $active?: boolean;\n}\n\nconst LegendLabel: React.FC<LegendLabelProps> = ({\n  $active = true,\n  className,\n  style,\n  ...props\n}) => (\n  <span\n    className={cn(chartStyles.legendLabel, className)}\n    style={{ opacity: $active ? 1 : 0.6, ...style }}\n    {...props}\n  />\n);\n\ninterface DynamicTooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n  $color?: string;\n  $quality?: QualityTier;\n}\n\nconst DynamicTooltip: React.FC<DynamicTooltipProps> = ({\n  $color,\n  className,\n  style,\n  ...props\n}) => (\n  <div\n    className={cn(chartStyles.tooltip, className)}\n    style={{\n      borderColor: $color || undefined,\n      boxShadow: $color\n        ? `0 20px 48px color-mix(in srgb, ${$color} 35%, color-mix(in srgb, rgb(15, 23, 42) 32%, transparent))`\n        : undefined,\n      ...style,\n    }}\n    {...props}\n  />\n);\n\ninterface TooltipHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n  $color?: string;\n}\n\nconst TooltipHeader: React.FC<TooltipHeaderProps> = ({\n  $color,\n  className,\n  style,\n  ...props\n}) => (\n  <div\n    className={cn(chartStyles.tooltipHeader, className)}\n    style={{ color: $color || undefined, ...style }}\n    {...props}\n  />\n);\n\nconst TooltipRow: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n  className,\n  ...props\n}) => <div className={cn(chartStyles.tooltipRow, className)} {...props} />;\n\nconst TooltipLabel: React.FC<React.HTMLAttributes<HTMLSpanElement>> = ({\n  className,\n  style,\n  ...props\n}) => (\n  <span\n    className={cn(chartStyles.tooltipLabel, className)}\n    style={{ ...(style ?? {}) }}\n    {...props}\n  />\n);\n\ninterface TooltipValueProps extends React.HTMLAttributes<HTMLSpanElement> {\n  $highlighted?: boolean;\n}\n\nconst TooltipValue: React.FC<TooltipValueProps> = ({\n  $highlighted,\n  className,\n  style,\n  ...props\n}) => (\n  <span\n    className={cn(chartStyles.tooltipValue, className)}\n    style={{\n      color: $highlighted\n        ? \"var(--aura-color-global-text-inverse)\"\n        : glassTokenUtils.getSurface(\"neutral\", \"level1\").text.primary,\n      ...style,\n    }}\n    {...props}\n  />\n);\n\n// Register required Chart.js components\nChartJS.register(\n  CategoryScale,\n  LinearScale,\n  PointElement,\n  LineElement,\n  BarElement,\n  ArcElement,\n  RadialLinearScale,\n  Tooltip,\n  Legend,\n  Filler\n);\n\n// Custom SVG path animation plugin\nconst pathAnimationPlugin: Plugin<ChartType> = {\n  id: \"pathAnimation\",\n  afterDraw: (chart) => {\n    chart.data?.datasets.forEach((dataset, datasetIndex) => {\n      const meta = chart.getDatasetMeta(datasetIndex);\n      if (meta.type === \"line\" && meta.dataset) {\n        const element = meta.dataset as any; // Keep 'as any': _path is likely internal/non-standard for path animation\n        if (element && element._path) {\n          const path = element._path;\n\n          // Check if we already processed this path\n          if (!path._animationApplied && path.getTotalLength) {\n            try {\n              // Mark as processed to avoid reapplying\n              path._animationApplied = true;\n\n              // Get path length for animation\n              const pathLength = path.getTotalLength();\n\n              // Apply stroke dash settings\n              path.style.strokeDasharray = `${pathLength} ${pathLength}`;\n              path.style.strokeDashoffset = `${pathLength}`;\n\n              // Create animation with WAAPI\n              path.animate &&\n                path.animate(\n                  [{ strokeDashoffset: pathLength }, { strokeDashoffset: 0 }],\n                  {\n                    duration: window.matchMedia?.(\n                      \"(prefers-reduced-motion: reduce)\"\n                    ).matches\n                      ? 1\n                      : ANIMATION.DURATION.slow,\n                    delay: datasetIndex * ANIMATION.DURATION.fast,\n                    fill: \"forwards\",\n                    easing: \"ease-out\",\n                  }\n                );\n            } catch {\n              // Fallback for browsers that don't support these features\n            }\n          }\n        }\n      }\n    });\n  },\n};\n\n// Register the custom plugin\nChartJS.register(pathAnimationPlugin);\n// Register our interaction plugin\nChartJS.register(AuraElementInteractionPlugin);\n\n// Adjust Chart.js defaults safely\nif (defaults?.plugins?.tooltip) {\n  defaults.plugins.tooltip.enabled = false; // Use custom tooltip\n}\nif (defaults?.font) {\n  defaults.font.family =\n    \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\";\n}\n// Set colors safely\ndefaults.color =\n  \"color-mix(in srgb, var(--aura-color-global-text-secondary) 85%, transparent)\";\ndefaults.borderColor =\n  \"color-mix(in srgb, var(--aura-color-global-border-soft) 70%, transparent)\";\n\n/**\n * Register required Chart.js components\n */\nChartJS.register(\n  CategoryScale,\n  LinearScale,\n  PointElement,\n  LineElement,\n  BarElement,\n  ArcElement,\n  RadialLinearScale,\n  Tooltip,\n  Legend,\n  Filler // Required for area charts\n);\n\n// Define a type for the hovered point value structure\ninterface HoveredPointValue {\n  dataset?: string | number | null;\n  label?: string | number | null;\n  value?: number | null;\n  color?: string | null;\n  extra?: Record<string, unknown> | null; // Use unknown for potentially varied extra data\n  formatType?: \"number\" | \"currency\" | \"percentage\" | \"units\";\n  formatOptions?: {\n    decimals?: number;\n    currencySymbol?: string;\n    locale?: string;\n    compact?: boolean;\n    showPlus?: boolean;\n    suffix?: string;\n    prefix?: string;\n  };\n}\n\n// Memoized icon components to prevent unnecessary re-renders\nconst ZoomInIcon = memo(({ size = 24 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n  </svg>\n));\n\nconst ZoomOutIcon = memo(({ size = 24 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M19 13H5v-2h14v2z\" />\n  </svg>\n));\n\nconst RefreshIcon = memo(({ size = 24 }: { size?: number }) => (\n  <svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"currentColor\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M17.65 6.35C16.2 4.9 14.2 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 10h7V3l-2.35 3.35z\" />\n  </svg>\n));\n\n// Memoized button component with stable styles\nconst buttonStyles = {\n  base: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  sm: { padding: \"4px\" },\n  default: { padding: \"8px\" },\n};\n\nconst GlassButton = memo(\n  ({\n    children,\n    variant,\n    size,\n    onClick,\n    glass,\n    \"aria-label\": ariaLabel,\n  }: {\n    children: React.ReactNode;\n    variant?: string;\n    size?: string;\n    onClick?: () => void;\n    glass?: string;\n    \"aria-label\"?: string;\n  }) => {\n    const combinedStyle = useMemo(\n      () => ({\n        ...buttonStyles.base,\n        ...(size === \"sm\" ? buttonStyles.sm : buttonStyles.default),\n      }),\n      [size]\n    );\n\n    return (\n      <button\n        onClick={onClick}\n        aria-label={ariaLabel}\n        style={{ ...combinedStyle }}\n        className=\"glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n      >\n        {children}\n      </button>\n    );\n  }\n);\n\n// Define a ZoomControls component for displaying zoom UI\ninterface ZoomControlsProps {\n  onZoomIn: () => void;\n  onZoomOut: () => void;\n  onReset: () => void;\n  zoomLevel: number;\n  $variant?: \"clear\" | \"frosted\" | \"tinted\" | \"luminous\";\n}\n\n// Stable styles for zoom controls container\nconst zoomControlsStyle = createGlassStyle({\n  intent: \"neutral\",\n  elevation: \"level2\",\n});\n\nconst zoomLevelStyle = {\n  color: \"var(--aura-color-global-text-primary)\",\n  fontSize: \"var(--typography-caption-size)\",\n  padding: \"0 8px\",\n  minWidth: \"40px\",\n  textAlign: \"center\" as const,\n};\n\nconst ZoomControls: React.FC<ZoomControlsProps> = memo(\n  ({ onZoomIn, onZoomOut, onReset, zoomLevel, $variant = \"frosted\" }) => {\n    const displayZoom = useMemo(() => Math.round(zoomLevel * 100), [zoomLevel]);\n\n    return (\n      <div style={{ ...zoomControlsStyle }}>\n        <GlassButton\n          variant=\"icon\"\n          size=\"sm\"\n          onClick={onZoomIn}\n          aria-label=\"Zoom in\"\n          glass={$variant}\n        >\n          <ZoomInIcon size={16} />\n        </GlassButton>\n\n        <ContrastGuard>\n          <span style={{ ...zoomLevelStyle }}>{displayZoom}%</span>\n        </ContrastGuard>\n\n        <GlassButton\n          variant=\"icon\"\n          size=\"sm\"\n          onClick={onZoomOut}\n          aria-label=\"Zoom out\"\n          glass={$variant}\n        >\n          <ZoomOutIcon size={16} />\n        </GlassButton>\n\n        <GlassButton\n          variant=\"icon\"\n          size=\"sm\"\n          onClick={onReset}\n          aria-label=\"Reset zoom\"\n          glass={$variant}\n        >\n          <RefreshIcon size={16} />\n        </GlassButton>\n      </div>\n    );\n  }\n);\n\n/**\n * GlassDataChart Component\n */\n// Memoized main component to prevent unnecessary re-renders\nconst GlassDataChartComponent = React.forwardRef<\n  GlassDataChartRef,\n  GlassDataChartProps\n>((props, ref) => {\n  const {\n    title,\n    subtitle,\n    variant = \"line\",\n    datasets,\n    width = \"100%\",\n    height = 400,\n    glassVariant = \"frosted\",\n    blurStrength = \"standard\",\n    color = \"primary\",\n    animation = {\n      physicsEnabled: true,\n      duration: ANIMATION.DURATION.normal / 1000,\n      tension: 300,\n      friction: 30,\n      mass: 1,\n      easing: \"easeOutQuart\",\n      staggerDelay: 100,\n    },\n    interaction = {\n      zoomPanEnabled: false,\n      zoomMode: \"xy\", // Ensure default matches type ('x' | 'y' | 'xy')\n      physicsHoverEffects: true,\n      hoverSpeed: 150,\n      showTooltips: true,\n      tooltipStyle: \"frosted\",\n      tooltipFollowCursor: false,\n      // Add the physics sub-object with defaults to match the updated type\n      physics: {\n        tension: 300, // Default tension for zoom/pan physics\n        friction: 30, // Default friction\n        mass: 1,\n        minZoom: 0.5,\n        maxZoom: 5,\n        wheelSensitivity: 0.1,\n        inertiaDuration: ANIMATION.DURATION.slow,\n      },\n    },\n    legend = {\n      show: true,\n      position: \"top\",\n      align: \"center\",\n      style: \"default\",\n      glassEffect: false,\n    },\n    axis = {\n      showXGrid: true,\n      showYGrid: true,\n      showXLabels: true,\n      showYLabels: true,\n      axisColor: \"rgba(226, 232, 240, 0.86)\",\n      gridColor: \"rgba(148, 163, 184, 0.2)\",\n      gridStyle: \"solid\",\n    },\n    initialSelection,\n    showToolbar = true,\n    allowDownload = true,\n    palette = DEFAULT_CHART_COLORS,\n    allowTypeSwitch = true,\n    borderRadius = \"var(--glass-radius-md)\",\n    borderColor,\n    elevation = \"level2\",\n    className,\n    style,\n    onDataPointClick,\n    onSelectionChange,\n    onTypeChange,\n    onZoomPan,\n    exportOptions = {\n      filename: \"chart\",\n      quality: 0.9,\n      format: \"png\",\n      backgroundColor: \"transparent\",\n      includeTitle: true,\n      includeTimestamp: true,\n    },\n    renderExportButton,\n    kpi,\n    useAdaptiveQuality = true,\n    getElementPhysicsOptions,\n    \"aria-label\": ariaLabel,\n    \"data-testid\": dataTestId,\n  } = props;\n\n  // Hooks\n  // const theme = useGlassTheme(); // unused\n  const { settings: accessibilitySettings } = useAccessibilitySettings();\n  const isReducedMotion = accessibilitySettings?.reducedMotion || false;\n  const chartRef = useRef<ChartJS | null>(null);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const chartWrapperRef = useRef<HTMLDivElement | null>(null);\n\n  // Quality tier system integration\n  const qualityTier = useQualityTier(\n    {\n      dataPointCount:\n        datasets?.reduce(\n          (sum, dataset) => sum + (dataset.data?.length || 0),\n          0\n        ) || 0,\n      seriesCount: datasets?.length || 0,\n      animationComplexity: \"medium\",\n      interactionComplexity: \"medium\",\n    },\n    getQualityChartType(variant),\n    useAdaptiveQuality ? undefined : \"high\"\n  );\n  const activeQualityTier = useAdaptiveQuality ? qualityTier.tier : \"high\";\n  const qualityParameterTier: QualityTier = useAdaptiveQuality\n    ? \"medium\"\n    : \"high\";\n\n  // Get physics parameters based on quality tier\n  const qualityPhysicsParams =\n    getQualityBasedPhysicsParams(qualityParameterTier);\n  const qualityGlassParams = getQualityBasedGlassParams(qualityParameterTier);\n\n  // Adapt quality based on user's settings\n  const adaptedBlurStrength =\n    (qualityGlassParams.blurStrength as \"low\" | \"medium\" | \"high\") ||\n    blurStrength;\n\n  // Physics animation for main chart\n  const {\n    value: springValue,\n    applyOscillation,\n    applyPopIn,\n  } = usePhysicsAnimation({\n    type: isReducedMotion\n      ? \"none\"\n      : animation.physicsEnabled\n        ? \"spring\"\n        : \"none\",\n    stiffness: qualityPhysicsParams.stiffness,\n    damping:\n      qualityPhysicsParams.dampingRatio *\n      2 *\n      Math.sqrt(qualityPhysicsParams.stiffness * qualityPhysicsParams.mass),\n    mass: qualityPhysicsParams.mass,\n    precision: qualityPhysicsParams.precision,\n    adaptiveMotion: true,\n    respectReducedMotion: true,\n  });\n\n  // Use our physics interaction hook for zoom/pan functionality\n  const { isPanning, zoomLevel, applyZoom, resetZoom } =\n    useChartPhysicsInteraction(chartRef, chartWrapperRef, {\n      enabled: interaction.zoomPanEnabled || false,\n      mode: interaction.zoomMode || \"xy\",\n      physics: {\n        tension: interaction.physics?.tension || qualityPhysicsParams.stiffness,\n        friction:\n          interaction.physics?.friction ||\n          qualityPhysicsParams.dampingRatio *\n            2 *\n            Math.sqrt(\n              qualityPhysicsParams.stiffness * qualityPhysicsParams.mass\n            ),\n        mass: interaction.physics?.mass || qualityPhysicsParams.mass,\n      },\n      minZoom: interaction.physics?.minZoom || 0.5,\n      maxZoom: interaction.physics?.maxZoom || 5,\n      wheelSensitivity: interaction.physics?.wheelSensitivity || 0.1,\n      inertiaDuration:\n        interaction.physics?.inertiaDuration || ANIMATION.DURATION.slow,\n      respectReducedMotion: true,\n    });\n\n  // State\n  const [chartType, setChartType] = useState<ChartVariant>(variant);\n  const [selectedDataset, setSelectedDataset] = useState<number | null>(\n    typeof initialSelection === \"number\" ? initialSelection : null\n  );\n  const [selectedDatasets, setSelectedDatasets] = useState<number[]>(\n    Array.isArray(initialSelection) ? initialSelection : []\n  );\n  const [hoveredPoint, setHoveredPoint] = useState<{\n    datasetIndex: number;\n    dataIndex: number;\n    x: number;\n    y: number;\n    value: HoveredPointValue | null;\n  } | null>(null);\n\n  // Internal element animation state (managed by React)\n  // The plugin will read targets from this or similar structure\n  const [elementAnimationTargets, setElementAnimationTargets] = useState<\n    Map<string, ElementAnimationTarget>\n  >(new Map());\n  // Key: `datasetIndex_dataIndex`, Value: { targetScale: 1, targetOpacity: 1, ... }\n\n  // Determine if we're using physics-based animations\n  const enablePhysicsAnimation = animation.physicsEnabled && !isReducedMotion;\n  const resolvedPalette = useMemo(\n    () => resolveChartPalette(palette),\n    [palette]\n  );\n\n  // Apply initial animations based on quality tier\n  useEffect(() => {\n    if (enablePhysicsAnimation) {\n      // Trigger a pop-in animation on mount for better visual impact\n      if (activeQualityTier !== \"low\") {\n        applyPopIn();\n      }\n    }\n  }, [enablePhysicsAnimation, activeQualityTier, applyPopIn]);\n\n  // Derive chartjs type from our variant\n  const getChartJsType = (): ChartType => {\n    // Special handling for KPI type (we'll render our own component)\n    if (chartType === \"kpi\") {\n      return \"bar\" as ChartType; // Just a placeholder, we won't render the chart\n    }\n\n    // Map area to line type since it's not a native Chart.js type\n    if (chartType === \"area\") {\n      // Use direct assignment for the most compatibility\n      return \"line\" as unknown as ChartType;\n    }\n\n    // For all other chart types\n    return chartType as unknown as ChartType;\n  };\n\n  // Memoized SVG Filter Definitions to prevent expensive re-renders\n  const svgFilters = useMemo(\n    () => (\n      <svg\n        width=\"0\"\n        height=\"0\"\n        style={{ position: \"absolute\", visibility: \"hidden\" }}\n      >\n        <defs>\n          {/* Gradient definitions */}\n          {resolvedPalette.map((color, i) => {\n            // Ensure color is a valid value to prevent SVG errors\n            const safeColor = resolveChartColor(\n              color,\n              DEFAULT_CHART_COLORS[i % DEFAULT_CHART_COLORS.length]\n            );\n\n            return (\n              <React.Fragment key={`gradient-${i}`}>\n                <linearGradient\n                  id={`areaGradient${i}`}\n                  x1=\"0%\"\n                  y1=\"0%\"\n                  x2=\"0%\"\n                  y2=\"100%\"\n                >\n                  <stop\n                    offset=\"0%\"\n                    stopColor={chartColorWithAlpha(safeColor, 0.8)}\n                  />\n                  <stop\n                    offset=\"100%\"\n                    stopColor={chartColorWithAlpha(safeColor, 0)}\n                  />\n                </linearGradient>\n\n                {/* Glow filter for lines */}\n                <filter\n                  id={`glow${i}`}\n                  x=\"-20%\"\n                  y=\"-20%\"\n                  width=\"140%\"\n                  height=\"140%\"\n                >\n                  <feGaussianBlur\n                    stdDeviation={activeQualityTier === \"low\" ? 1 : 2}\n                    result=\"blur\"\n                  />\n                  <feComposite in=\"SourceGraphic\" in2=\"blur\" operator=\"over\" />\n                </filter>\n\n                {/* Point highlight filter */}\n                <filter\n                  id={`pointGlow${i}`}\n                  x=\"-50%\"\n                  y=\"-50%\"\n                  width=\"200%\"\n                  height=\"200%\"\n                >\n                  <feGaussianBlur\n                    stdDeviation={activeQualityTier === \"low\" ? 2 : 3}\n                    result=\"blur\"\n                  />\n                  <feComposite in=\"SourceGraphic\" in2=\"blur\" operator=\"over\" />\n                </filter>\n              </React.Fragment>\n            );\n          })}\n        </defs>\n      </svg>\n    ),\n    [resolvedPalette, activeQualityTier]\n  );\n\n  // Memoize the converted datasets to prevent unnecessary recalculations\n  const convertedDatasets = useMemo<\n    Array<\n      ReturnType<typeof convertToChartJsDatasetWithEffects> & {\n        processedLabels?: string[];\n      }\n    >\n  >(() => {\n    if (!datasets) return [];\n    return datasets.map((dataset, i) => {\n      return convertToChartJsDatasetWithEffects(\n        dataset,\n        i,\n        chartType,\n        resolvedPalette,\n        animation\n      );\n    });\n  }, [datasets, chartType, resolvedPalette, animation]);\n\n  // Memoize chart labels preparation\n  const chartLabels = useMemo(() => {\n    let labels: string[] | undefined;\n    if (chartType === \"pie\" || chartType === \"doughnut\") {\n      // Access processedLabels from the *first* dataset's conversion result\n      const firstConvertedDataset = convertedDatasets?.[0];\n      if (\n        firstConvertedDataset?.processedLabels &&\n        (firstConvertedDataset.processedLabels?.length || 0) > 0\n      ) {\n        labels = firstConvertedDataset.processedLabels;\n      } else if (datasets && datasets[0]?.data) {\n        // Fallback to original data labels if processed labels aren't available\n        labels = datasets[0].data?.map(\n          (point) => point.label || String(point.x)\n        );\n      }\n    } else if (chartType === \"polarArea\" && datasets) {\n      // Use original labels for polarArea\n      labels =\n        datasets[0]?.data?.map((point) => point.label || String(point.x)) || [];\n    } else if (datasets && datasets[0]?.data) {\n      labels = datasets[0].data.map(\n        (point, pointIndex) => point.label || String(point.x ?? pointIndex + 1)\n      );\n    }\n    return labels;\n  }, [chartType, convertedDatasets, datasets]);\n\n  // Memoize chart data to prevent unnecessary Chart.js updates\n  const chartData = useMemo(\n    () => ({\n      // Map converted datasets, removing temporary properties like processedLabels.\n      datasets: convertedDatasets.map((ds) => {\n        const { processedLabels, ...rest } = ds;\n        return rest;\n      }),\n      labels: chartLabels, // Assign the prepared labels\n    }),\n    [convertedDatasets, chartLabels]\n  );\n\n  const hasChartData = useMemo(\n    () =>\n      convertedDatasets.some(\n        (dataset) => Array.isArray(dataset.data) && dataset.data.length > 0\n      ),\n    [convertedDatasets]\n  );\n\n  // Zoom in function\n  const handleZoomIn = useCallback(() => {\n    applyZoom(zoomLevel * 1.2);\n  }, [applyZoom, zoomLevel]);\n\n  // Zoom out function\n  const handleZoomOut = useCallback(() => {\n    applyZoom(zoomLevel * 0.8);\n  }, [applyZoom, zoomLevel]);\n\n  // Handle zoom changed callback\n  const handleZoomChanged = useCallback(() => {\n    if (onZoomPan && chartRef.current) {\n      onZoomPan(chartRef.current);\n    }\n  }, [onZoomPan]);\n\n  // Handle chart type change\n  const handleTypeChange = (type: ChartVariant) => {\n    setChartType(type);\n    onTypeChange?.(type);\n  };\n\n  // Memoized hex to RGB conversion function\n  const hexToRgb = useCallback((hex: string) => {\n    // Provide a default color if hex is undefined\n    const safeHex = resolveChartColor(hex, \"#ffffff\");\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(safeHex);\n    return result\n      ? `${parseInt(result?.[1], 16)}, ${parseInt(result?.[2], 16)}, ${parseInt(result?.[3], 16)}`\n      : \"255, 255, 255\";\n  }, []);\n\n  // Memoized legend items to prevent unnecessary re-renders\n  const legendItems = useMemo(() => {\n    if (!datasets) return [];\n    return datasets.map((dataset, index) => {\n      const color = resolveChartColor(\n        dataset.style?.lineColor ||\n          resolvedPalette[index % resolvedPalette.length],\n        DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length]\n      );\n      const rgbColor = hexToRgb(color);\n      const isActive = !selectedDatasets.includes(index);\n\n      return {\n        id: dataset.id,\n        label: dataset.label,\n        color,\n        rgbColor,\n        isActive,\n        index,\n      };\n    });\n  }, [datasets, resolvedPalette, selectedDatasets, hexToRgb]);\n\n  // Optimized legend item click handler\n  const handleLegendClick = useCallback(\n    (index: number) => {\n      if (\n        chartType === \"pie\" ||\n        chartType === \"doughnut\" ||\n        chartType === \"polarArea\"\n      ) {\n        // For pie charts, handle single selection\n        setSelectedDataset(selectedDataset === index ? null : index);\n\n        if (onSelectionChange) {\n          onSelectionChange(selectedDataset === index ? [] : [index]);\n        }\n      } else {\n        // For other charts, handle multi-selection\n        let newSelectedDatasets = [...selectedDatasets];\n\n        if (newSelectedDatasets.includes(index)) {\n          newSelectedDatasets = newSelectedDatasets.filter((i) => i !== index);\n        } else {\n          newSelectedDatasets.push(index);\n        }\n\n        setSelectedDatasets(newSelectedDatasets);\n\n        if (onSelectionChange) {\n          onSelectionChange(newSelectedDatasets);\n        }\n      }\n\n      // Update the visible datasets\n      if (chartRef.current) {\n        const chart = chartRef.current;\n\n        // Toggle dataset visibility\n        chart.setDatasetVisibility(index, !chart.isDatasetVisible(index));\n\n        chart.update();\n      }\n    },\n    [chartType, selectedDataset, selectedDatasets, onSelectionChange]\n  );\n\n  // Memoized legend renderer to avoid duplication\n  const renderLegend = useCallback(\n    () => (\n      <ChartLegend\n        $position={legend.position}\n        $style={legend.style || \"default\"}\n        $glassEffect={legend.glassEffect || false}\n      >\n        {legendItems.map((item) => (\n          <LegendItem\n            key={item.id}\n            $style={legend.style || \"default\"}\n            $active={item.isActive}\n            $color={item.rgbColor}\n            onClick={(e) => handleLegendClick(item.index)}\n          >\n            <LegendColor $color={item.color} $active={item.isActive} />\n            <ContrastGuard>\n              <LegendLabel $active={item.isActive}>{item.label}</LegendLabel>\n            </ContrastGuard>\n          </LegendItem>\n        ))}\n      </ChartLegend>\n    ),\n    [legend, legendItems, handleLegendClick]\n  );\n\n  // Handle chart data point click with formatted value feedback\n  const handleDataPointClick = (event: React.MouseEvent<HTMLCanvasElement>) => {\n    if (!chartRef.current) return;\n\n    const chart = chartRef.current;\n    const points = chart.getElementsAtEventForMode(\n      event.nativeEvent,\n      \"nearest\",\n      { intersect: true },\n      false\n    );\n\n    if ((points?.length || 0) > 0) {\n      const firstPoint = points[0];\n      const datasetIndex = firstPoint.datasetIndex;\n      const dataIndex = firstPoint.index;\n      const dataset = datasets ? datasets[datasetIndex] : null;\n      const dataPoint = dataset ? dataset.data[dataIndex] : null;\n\n      // --- Trigger Element Click Animation State Update ---\n      if (getElementPhysicsOptions && dataPoint) {\n        const physicsOptions = getElementPhysicsOptions(\n          dataPoint,\n          datasetIndex,\n          dataIndex,\n          chartType\n        );\n        if (physicsOptions?.clickEffect) {\n          const key = `${datasetIndex}_${dataIndex}`;\n          setElementAnimationTargets((prev) =>\n            new Map(prev).set(key, {\n              ...(prev.get(key) || {}),\n              targetScale: physicsOptions.clickEffect?.scale ?? 1,\n              targetOpacity: physicsOptions.clickEffect?.opacity ?? 1,\n              // Add other effects\n            })\n          );\n          // Click effect resets automatically via CSS transition\n        }\n      }\n      // --- End Trigger ---\n\n      // Apply oscillation if physics enabled (This is separate chart-wide effect)\n      if (interaction.physicsHoverEffects && !isReducedMotion) {\n        applyOscillation(0.5);\n      }\n\n      // Format the value for the click handler\n      if (!dataPoint || !dataset) return;\n\n      if (onDataPointClick) {\n        onDataPointClick(datasetIndex, dataIndex, dataPoint);\n      }\n    }\n  };\n\n  // Optimized chart hover handler with debouncing for better performance\n  const handleChartHover = useCallback(\n    (event: React.MouseEvent<HTMLCanvasElement>) => {\n      if (!chartRef.current) return;\n\n      // Exit early if BOTH interactions are disabled\n      if (!interaction.physicsHoverEffects && !interaction.showTooltips) {\n        setHoveredPoint(null); // Ensure tooltip state is cleared if disabled\n        return;\n      }\n\n      // Clear previous hover animation targets first\n      const previousHoveredKey = hoveredPoint\n        ? `${hoveredPoint.datasetIndex}_${hoveredPoint.dataIndex}`\n        : null;\n\n      const chart = chartRef.current;\n      const points = chart.getElementsAtEventForMode(\n        event.nativeEvent,\n        \"nearest\",\n        { intersect: false },\n        false\n      );\n\n      let currentHoveredKey: string | null = null;\n\n      if ((points?.length || 0) > 0) {\n        const firstPoint = points[0];\n        const datasetIndex = firstPoint.datasetIndex;\n        const dataIndex = firstPoint.index;\n        currentHoveredKey = `${datasetIndex}_${dataIndex}`;\n\n        // --- Trigger Element Hover Animation State Update ---\n        // Check if physicsHoverEffects is enabled BEFORE updating targets\n        if (\n          interaction.physicsHoverEffects &&\n          getElementPhysicsOptions &&\n          datasets\n        ) {\n          const dataset = datasets[datasetIndex];\n          if (!dataset) return;\n\n          const dataPoint = dataset.data[dataIndex];\n          if (!dataPoint) return;\n          const physicsOptions = getElementPhysicsOptions(\n            dataPoint,\n            datasetIndex,\n            dataIndex,\n            chartType\n          );\n          if (physicsOptions?.hoverEffect) {\n            setElementAnimationTargets((prev) =>\n              new Map(prev).set(currentHoveredKey!, {\n                // Use non-null assertion as key is set\n                ...(prev.get(currentHoveredKey!) || {}),\n                targetScale: physicsOptions.hoverEffect?.scale ?? 1,\n                targetOpacity: physicsOptions.hoverEffect?.opacity ?? 1,\n                // Add other effects\n              })\n            );\n          }\n        }\n        // --- End Trigger ---\n\n        // Update tooltip state only if enabled\n        if (interaction.showTooltips && datasets) {\n          const dataset = datasets[datasetIndex];\n          if (!dataset) return;\n\n          const dataPoint = dataset.data[dataIndex];\n          if (!dataPoint) return;\n          const rect = containerRef.current?.getBoundingClientRect();\n          const tooltipX = rect\n            ? Math.max(8, Math.min(event.clientX - rect.left, rect.width - 8))\n            : event.clientX;\n          const tooltipY = rect\n            ? Math.max(8, Math.min(event.clientY - rect.top, rect.height - 8))\n            : event.clientY;\n\n          setHoveredPoint({\n            datasetIndex,\n            dataIndex,\n            x: tooltipX,\n            y: tooltipY,\n            value: {\n              dataset: dataset.label,\n              label: dataPoint.label || dataPoint.x,\n              value: dataPoint.y,\n              color: resolveChartColor(\n                dataset.style?.lineColor ||\n                  resolvedPalette[datasetIndex % resolvedPalette.length],\n                DEFAULT_CHART_COLORS[datasetIndex % DEFAULT_CHART_COLORS.length]\n              ),\n              extra: dataPoint.extra,\n              formatType: dataPoint.formatType,\n              formatOptions: dataPoint.formatOptions,\n            },\n          });\n        }\n      } else {\n        // Clear tooltip state if enabled\n        if (interaction.showTooltips) {\n          setHoveredPoint(null);\n        }\n      }\n\n      // Reset animation targets for previously hovered element if it's different\n      // Only reset if physics hover effects are enabled\n      if (\n        interaction.physicsHoverEffects &&\n        previousHoveredKey &&\n        previousHoveredKey !== currentHoveredKey\n      ) {\n        setElementAnimationTargets((prev) =>\n          new Map(prev).set(previousHoveredKey, {\n            ...(prev.get(previousHoveredKey) || {}),\n            targetScale: 1,\n            targetOpacity: 1,\n            // Reset other effects\n          })\n        );\n      }\n    },\n    [\n      hoveredPoint,\n      interaction.physicsHoverEffects,\n      interaction.showTooltips,\n      getElementPhysicsOptions,\n      datasets,\n      chartType,\n      resolvedPalette,\n    ]\n  );\n\n  // Optimized chart hover leave handler\n  const handleChartLeave = useCallback(() => {\n    // Clear tooltip state if enabled\n    if (interaction.showTooltips) {\n      setHoveredPoint(null);\n    }\n    // Reset all hover targets on leave ONLY if physics effects are enabled\n    if (interaction.physicsHoverEffects) {\n      setElementAnimationTargets((prev) => {\n        const next = new Map(prev);\n        for (const key of next.keys()) {\n          const current = next.get(key);\n          if (current?.targetScale !== 1 || current?.targetOpacity !== 1) {\n            next.set(key, { ...current, targetScale: 1, targetOpacity: 1 });\n          }\n        }\n        return next;\n      });\n    }\n  }, [interaction.showTooltips, interaction.physicsHoverEffects]);\n\n  // Handle enhanced chart export\n  const handleExportChart = useCallback(() => {\n    if (!chartRef.current && chartType !== \"kpi\") return;\n\n    const chart = chartRef.current;\n\n    // For KPI display, use a different export method\n    if (chartType === \"kpi\" && containerRef.current) {\n      // Use html2canvas or another library to capture the KPI display\n      try {\n        // Simplified export - in a real implementation we'd use something like html2canvas\n        const link = document.createElement(\"a\");\n        link.download = `${exportOptions.filename || \"kpi\"}.png`;\n        link.href = \"#\";\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        return;\n      } catch {\n        return;\n      }\n    }\n\n    // Create a temporary canvas for the export\n    const exportCanvas = document.createElement(\"canvas\");\n    const exportContext = exportCanvas.getContext(\"2d\");\n\n    if (!exportContext || !chart) return;\n\n    // Determine dimensions and scaling\n    const sourceCanvas = chart.canvas;\n    const devicePixelRatio = window.devicePixelRatio || 1;\n\n    // Set the export canvas size with device pixel ratio for high-quality exports\n    exportCanvas.width = sourceCanvas.width * devicePixelRatio;\n    exportCanvas.height = sourceCanvas.height * devicePixelRatio;\n\n    // If title should be included, make room for it\n    let titleHeight = 0;\n    if (exportOptions.includeTitle && (title || subtitle)) {\n      titleHeight = title && subtitle ? 60 : 40;\n      exportCanvas.height += titleHeight * devicePixelRatio;\n    }\n\n    // Fill background if specified\n    if (\n      exportOptions.backgroundColor &&\n      exportOptions.backgroundColor !== \"transparent\"\n    ) {\n      exportContext.fillStyle = exportOptions.backgroundColor;\n      exportContext.fillRect(0, 0, exportCanvas.width, exportCanvas.height);\n    }\n\n    // Add title and subtitle if needed\n    if (exportOptions.includeTitle && (title || subtitle)) {\n      exportContext.textAlign = \"center\";\n      exportContext.textBaseline = \"middle\";\n\n      if (title) {\n        exportContext.font = `bold ${16 * devicePixelRatio}px Inter, sans-serif`;\n        exportContext.fillStyle = \"#ffffff\";\n        exportContext.fillText(\n          title,\n          exportCanvas.width / 2,\n          25 * devicePixelRatio\n        );\n      }\n\n      if (subtitle) {\n        exportContext.font = `${14 * devicePixelRatio}px Inter, sans-serif`;\n        exportContext.fillStyle = \"rgba(255, 255, 255, 0.76)\";\n        exportContext.fillText(\n          subtitle,\n          exportCanvas.width / 2,\n          title ? 45 * devicePixelRatio : 25 * devicePixelRatio\n        );\n      }\n    }\n\n    // Draw the chart onto the export canvas\n    exportContext.drawImage(\n      sourceCanvas,\n      0,\n      0,\n      sourceCanvas.width,\n      sourceCanvas.height,\n      0,\n      titleHeight * devicePixelRatio,\n      exportCanvas.width,\n      exportCanvas.height - titleHeight * devicePixelRatio\n    );\n\n    // Generate a filename with optional timestamp\n    let filename = exportOptions.filename || \"chart\";\n\n    if (exportOptions.includeTimestamp) {\n      const timestamp = new Date()\n        .toISOString()\n        .replace(/[:.]/g, \"-\")\n        .substring(0, 19);\n      filename += `_${timestamp}`;\n    }\n\n    // Determine format and quality\n    const format = exportOptions.format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\n    const quality =\n      exportOptions.format === \"jpeg\" ? exportOptions.quality : undefined;\n\n    // Create a data URL for the export\n    const dataUrl = exportCanvas.toDataURL(format, quality);\n\n    // Create a temporary link and trigger download\n    const link = document.createElement(\"a\");\n    link.download = `${filename}.${exportOptions.format}`;\n    link.href = dataUrl;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }, [chartRef, containerRef, chartType, title, subtitle, exportOptions, kpi]);\n\n  // Combined ref callback for ChartJS instance\n  const chartRefCallback = useCallback(\n    (instance: ChartJS | undefined | null) => {\n      chartRef.current = instance ?? null;\n      // Call the forwarded ref if it exists\n      if (typeof ref === \"function\") {\n        ref(instance ?? null);\n      } else if (ref && ref.current !== undefined) {\n        ref.current = instance ?? null;\n      }\n    },\n    [ref]\n  );\n\n  // Memoize chart options\n  const chartOptions = useMemo(\n    () => ({\n      responsive: true,\n      maintainAspectRatio: false,\n      plugins: {\n        legend: { display: false }, // Disable built-in legend\n        tooltip: { enabled: false }, // Disable built-in tooltip\n        // Configure our custom interaction plugin\n        [AuraElementInteractionPlugin.id]: {\n          elementAnimationTargets,\n          setElementAnimationTargets,\n          getElementPhysicsOptions,\n          isReducedMotion,\n        },\n      },\n      scales: axis\n        ? {\n            x: {\n              display: axis.showXLabels,\n              grid: {\n                display: axis.showXGrid,\n                color: axis.gridColor,\n              },\n              ticks: {\n                color: axis.axisColor,\n              },\n            },\n            y: {\n              display: axis.showYLabels,\n              grid: {\n                display: axis.showYGrid,\n                color: axis.gridColor,\n              },\n              ticks: {\n                color: axis.axisColor,\n              },\n            },\n          }\n        : undefined,\n      animation: (animation?.physicsEnabled && !isReducedMotion\n        ? {\n            duration: animation.duration || ANIMATION.DURATION.normal,\n            easing: (animation.easing || \"easeOutQuart\") as any,\n            delay: 0,\n            loop: false,\n            animateRotate: true,\n            animateScale: true,\n          }\n        : false) as any,\n    }),\n    [\n      axis,\n      animation,\n      elementAnimationTargets,\n      getElementPhysicsOptions,\n      isReducedMotion,\n    ]\n  ); // Dependencies\n\n  // Plugins to pass to the Chart component\n  // Ensure all used plugins are registered above\n  const chartPlugins: Plugin<ChartType>[] = useMemo(\n    () => [\n      pathAnimationPlugin,\n      AuraElementInteractionPlugin,\n      // Add other custom plugins if needed\n    ],\n    []\n  );\n\n  return (\n    <ChartContainer\n      ref={containerRef}\n      className={cn(\"glass-data-chart\", className)}\n      style={{\n        width,\n        height,\n        ...style,\n      }}\n      $glassVariant={glassVariant}\n      $blurStrength={adaptedBlurStrength}\n      $color={color}\n      $elevation={\n        typeof elevation === \"string\"\n          ? elevation === \"level1\"\n            ? 1\n            : elevation === \"level2\"\n              ? 2\n              : elevation === \"level3\"\n                ? 3\n                : elevation === \"level4\"\n                  ? 4\n                  : elevation === \"level5\"\n                    ? 5\n                    : 2\n          : elevation\n      }\n      $borderRadius={borderRadius}\n      $borderColor={borderColor}\n      data-testid={dataTestId}\n      role=\"group\"\n      aria-label={ariaLabel || (title ? `${title} chart` : \"Data chart\")}\n    >\n      {svgFilters}\n      <ChartHeader>\n        {title && <ChartTitle>{title}</ChartTitle>}\n        {subtitle && <ChartSubtitle>{subtitle}</ChartSubtitle>}\n      </ChartHeader>\n      <ChartWrapper ref={chartWrapperRef}>\n        {interaction.zoomPanEnabled && (\n          <ZoomControls\n            onZoomIn={handleZoomIn}\n            onZoomOut={handleZoomOut}\n            onReset={resetZoom}\n            zoomLevel={zoomLevel}\n            $variant={glassVariant}\n          />\n        )}\n        {hasChartData || chartType === \"kpi\" ? (\n          <Chart\n            key={chartType} // Ensures re-render on type change\n            type={getChartJsType()}\n            data={chartData as never}\n            options={chartOptions}\n            plugins={chartPlugins} // Pass the memoized plugins array\n            ref={chartRefCallback} // Use the combined ref callback\n            onClick={handleDataPointClick}\n            onMouseMove={handleChartHover}\n            onMouseLeave={handleChartLeave}\n            aria-label={ariaLabel || (title ? `${title} chart` : \"Data chart\")}\n          />\n        ) : (\n          <div\n            className={chartStyles.emptyState}\n            role=\"status\"\n            aria-live=\"polite\"\n          >\n            <ContrastGuard>\n              <div className={chartStyles.emptyStateTitle}>\n                No chart data available\n              </div>\n            </ContrastGuard>\n            <ContrastGuard>\n              <p className={chartStyles.emptyStateDescription}>\n                Add at least one dataset with points to render this chart.\n              </p>\n            </ContrastGuard>\n          </div>\n        )}\n      </ChartWrapper>\n\n      {/* Optimized Legend Rendering */}\n      {legend.show && hasChartData && renderLegend()}\n\n      {/* Custom SVG Tooltip (replacing the component tooltip) */}\n      {interaction.tooltipStyle === \"dynamic\"\n        ? hoveredPoint &&\n          interaction.showTooltips && (\n            <DynamicTooltip\n              $color={color}\n              $quality={activeQualityTier}\n              style={{\n                left: `${hoveredPoint.x ?? 0}px`,\n                top: `${hoveredPoint.y ?? 0}px`,\n              }}\n            >\n              <TooltipHeader $color={hoveredPoint.value?.color || \"#ffffff\"}>\n                {hoveredPoint.value?.dataset || \"Data\"}\n              </TooltipHeader>\n\n              <TooltipRow>\n                <TooltipLabel>\n                  {typeof hoveredPoint.value?.label === \"string\"\n                    ? hoveredPoint.value.label\n                    : \"Value\"}\n                  :{\" \"}\n                </TooltipLabel>\n                <TooltipValue $highlighted>\n                  {formatValue(hoveredPoint.value?.value ?? 0)}\n                </TooltipValue>\n              </TooltipRow>\n\n              {hoveredPoint.value?.extra &&\n                Object.entries(hoveredPoint.value.extra).map(([key, value]) => (\n                  <TooltipRow key={key}>\n                    <TooltipLabel>{key}:</TooltipLabel>\n                    <TooltipValue>{String(value)}</TooltipValue>\n                  </TooltipRow>\n                ))}\n            </DynamicTooltip>\n          )\n        : hoveredPoint &&\n          interaction.showTooltips && (\n            <GlassTooltip\n              position=\"top\"\n              showArrow={true}\n              content={\n                <div>\n                  <div\n                    style={{\n                      color: hoveredPoint.value?.color || \"#ffffff\",\n                    }}\n                  >\n                    {String(hoveredPoint.value?.dataset ?? \"Dataset\")}\n                  </div>\n                  <div>\n                    <strong>\n                      {typeof hoveredPoint.value?.label === \"string\"\n                        ? hoveredPoint.value.label\n                        : \"Value\"}\n                    </strong>\n                    : {hoveredPoint.value?.value ?? \"N/A\"}\n                  </div>\n                  {hoveredPoint.value?.extra &&\n                    Object.entries(hoveredPoint.value.extra).map(\n                      ([key, value]) => (\n                        <div key={key}>\n                          <strong>{key}</strong>:{\" \"}\n                          {typeof value === \"string\" ||\n                          typeof value === \"number\"\n                            ? value\n                            : String(value)}\n                        </div>\n                      )\n                    )}\n                </div>\n              }\n            >\n              <div\n                style={{\n                  position: \"absolute\",\n                  top: hoveredPoint.y,\n                  left: hoveredPoint.x,\n                  width: 1,\n                  height: 1,\n                  pointerEvents: \"none\",\n                  zIndex: 100,\n                }}\n              />\n            </GlassTooltip>\n          )}\n    </ChartContainer>\n  );\n});\n\n// Add displayName for better debugging\nGlassDataChartComponent.displayName = \"GlassDataChart\";\n\n// Export memoized component for better performance\nexport const GlassDataChart = memo(GlassDataChartComponent);\n\n// ESLint disable for TypeScript forwardRef type issues in some configurations\n// @ts-ignore - ForwardRef render functions are difficult to type correctly with generics in all TypeScript versions.\nexport default GlassDataChart;\n", ".container {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  height: 100%;\n  padding: var(--aura-space-4);\n  border-radius: var(--aura-radius-2xl);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 92%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 80%, transparent);\n  color: var(--aura-color-global-text-primary);\n  backdrop-filter: var(\n    --glass-data-chart-backdrop-filter,\n    blur(var(--aura-glass-neutral-level2-backdrop-blur))\n  );\n  -webkit-backdrop-filter: var(\n    --glass-data-chart-backdrop-filter,\n    blur(var(--aura-glass-neutral-level2-backdrop-blur))\n  );\n  box-shadow: var(\n    --glass-elev-chart-data-container,\n    0 18px 48px rgba(var(--glass-color-black) / var(--glass-opacity-25))\n  );\n  overflow: hidden;\n  isolation: isolate;\n  transition:\n    transform var(--aura-motion-duration-medium)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-medium)\n      var(--aura-motion-easing-standard);\n}\n\n.header {\n  display: flex;\n  flex-direction: column;\n  gap: var(--aura-space-2);\n  margin-bottom: var(--aura-space-4);\n}\n\n.title {\n  margin: 0;\n  font-size: var(--aura-font-size-xl);\n  font-weight: var(--aura-font-weight-semibold);\n  color: var(--aura-color-global-text-primary);\n  overflow-wrap: anywhere;\n}\n\n.subtitle {\n  margin: 0;\n  font-size: var(--aura-font-size-sm);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 80%,\n    transparent\n  );\n  overflow-wrap: anywhere;\n}\n\n.wrapper {\n  position: relative;\n  flex: 1;\n  width: 100%;\n  min-height: 0;\n  min-width: 0;\n}\n\n.legend {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--aura-space-3);\n  padding: var(--aura-space-3);\n  margin-top: var(--aura-space-4);\n  min-width: 0;\n}\n\n.legendTop {\n  margin-bottom: var(--aura-space-4);\n  margin-top: 0;\n}\n\n.legendBottom {\n  margin-top: var(--aura-space-4);\n}\n\n.legendLeft,\n.legendRight {\n  flex-direction: column;\n  align-items: flex-start;\n}\n\n.legendGlass {\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-overlay) 65%,\n    transparent\n  );\n  border-radius: var(--aura-radius-xl);\n}\n\n.legendItem {\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n  min-width: 0;\n  cursor: pointer;\n  transition: opacity var(--aura-motion-duration-fast)\n    var(--aura-motion-easing-standard);\n}\n\n.legendItemInactive {\n  opacity: 0.5;\n}\n\n.legendItem:hover {\n  opacity: 0.8;\n}\n\n.legendColor {\n  width: 12px;\n  height: 12px;\n  border-radius: var(--aura-radius-sm);\n  box-shadow: var(\n    --glass-elev-chart-legend-color,\n    0 6px 16px rgba(15, 23, 42, 0.16)\n  );\n}\n\n.legendLabel {\n  font-size: var(--aura-font-size-sm);\n  font-weight: var(--aura-font-weight-medium);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 85%,\n    transparent\n  );\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1000;\n  pointer-events: none;\n  font-family: var(--aura-font-family-sans);\n  font-size: var(--aura-font-size-xs);\n  border-radius: var(--aura-radius-lg);\n  box-shadow: var(\n    --glass-elev-chart-tooltip,\n    0 20px 48px rgba(15, 23, 42, 0.32)\n  );\n  backdrop-filter: blur(var(--aura-glass-neutral-level3-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level3-backdrop-blur));\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-overlay) 90%,\n    var(--glass-chart-tooltip-base, rgba(8, 16, 32, 0.72))\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 70%, transparent);\n  color: var(--aura-color-global-text-inverse);\n  padding: var(--aura-space-3) var(--aura-space-4);\n  min-width: 120px;\n  max-width: 280px;\n  white-space: normal;\n  overflow: hidden;\n  overflow-wrap: anywhere;\n  transition:\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.tooltipHeader {\n  font-size: var(--aura-font-size-sm);\n  font-weight: var(--aura-font-weight-semibold);\n  margin-bottom: var(--aura-space-2);\n  padding-bottom: var(--aura-space-2);\n  border-bottom: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 65%, transparent);\n}\n\n.tooltipRow {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: var(--aura-space-2);\n  margin-top: var(--aura-space-1);\n  min-width: 0;\n}\n\n.tooltipLabel {\n  font-size: var(--aura-font-size-xs);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 85%,\n    transparent\n  );\n  min-width: 0;\n  overflow-wrap: anywhere;\n}\n\n.tooltipValue {\n  font-size: var(--aura-font-size-sm);\n  font-weight: var(--aura-font-weight-semibold);\n  color: var(--aura-color-global-text-inverse);\n  overflow-wrap: anywhere;\n}\n\n.emptyState {\n  display: flex;\n  min-height: 220px;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  gap: var(--aura-space-2);\n  padding: var(--aura-space-6);\n  text-align: center;\n  border-radius: var(--aura-radius-xl);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-overlay) 72%,\n    rgba(var(--glass-color-black) / var(--glass-opacity-25))\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 68%, transparent);\n}\n\n.emptyStateTitle {\n  font-size: var(--aura-font-size-base);\n  font-weight: var(--aura-font-weight-semibold);\n  color: var(--aura-color-global-text-primary);\n}\n\n.emptyStateDescription {\n  max-width: 34rem;\n  margin: 0;\n  font-size: var(--aura-font-size-sm);\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-secondary) 88%,\n    transparent\n  );\n  overflow-wrap: anywhere;\n}\n\n@media (max-width: 640px) {\n  .container {\n    padding: var(--aura-space-4);\n  }\n\n  .legend {\n    gap: var(--aura-space-2);\n    padding-inline: 0;\n  }\n\n  .tooltip {\n    max-width: min(260px, calc(100vw - 32px));\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .container,\n  .legendItem,\n  .tooltip {\n    transition: none;\n  }\n}\n", "\"use client\";\nimport React, { useState, useRef, useEffect, forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId, announceToScreenReader } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport type TooltipPosition = \"top\" | \"bottom\" | \"left\" | \"right\" | \"auto\";\n\nexport interface GlassTooltipProps {\n  /** Content to show in the tooltip */\n  content: React.ReactNode;\n  /** Children element that triggers the tooltip */\n  children: React.ReactNode;\n  /** Position of the tooltip relative to trigger */\n  position?: TooltipPosition;\n  /** Delay before showing tooltip (ms) */\n  showDelay?: number;\n  /** Delay before hiding tooltip (ms) */\n  hideDelay?: number;\n  /** Whether tooltip is disabled */\n  disabled?: boolean;\n  /** Custom className for tooltip */\n  className?: string;\n  /** Custom className for trigger */\n  triggerClassName?: string;\n  /** Maximum width of tooltip */\n  maxWidth?: string;\n  /** Whether to show arrow pointer */\n  showArrow?: boolean;\n  /** Animation variant */\n  variant?: \"fade\" | \"scale\" | \"slide\";\n  /** Whether to respect motion preferences */\n  respectMotionPreference?: boolean;\n  /** Accessible label for the tooltip */\n  \"aria-label\"?: string;\n  /** ID of the tooltip for aria-describedby */\n  id?: string;\n}\n\nexport const GlassTooltip = forwardRef<HTMLDivElement, GlassTooltipProps>(\n  (\n    {\n      content,\n      children,\n      position = \"top\",\n      showDelay = 300,\n      hideDelay = 150,\n      disabled = false,\n      className = \"\",\n      triggerClassName = \"\",\n      maxWidth = \"200px\",\n      showArrow = true,\n      variant = \"fade\",\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      id,\n      ...props\n    },\n    ref\n  ) => {\n    const [isVisible, setIsVisible] = useState(false);\n    const [actualPosition, setActualPosition] =\n      useState<TooltipPosition>(position);\n    const triggerRef = useRef<HTMLDivElement>(null);\n    const tooltipRef = useRef<HTMLDivElement>(null);\n    const showTimeoutRef = useRef<NodeJS.Timeout>();\n    const hideTimeoutRef = useRef<NodeJS.Timeout>();\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n\n    // Generate unique ID for accessibility\n    const tooltipId = id || useA11yId(\"glass-tooltip\");\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n\n    const calculatePosition = () => {\n      if (!triggerRef.current || !tooltipRef.current) return position;\n\n      const triggerRect = triggerRef.current.getBoundingClientRect();\n      const tooltipRect = tooltipRef.current.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      const viewportHeight = window.innerHeight;\n\n      // Check if tooltip fits in preferred position\n      const fitsTop = triggerRect.top > tooltipRect.height + 8;\n      const fitsBottom =\n        triggerRect.bottom + tooltipRect.height + 8 < viewportHeight;\n      const fitsLeft = triggerRect.left > tooltipRect.width + 8;\n      const fitsRight =\n        triggerRect.right + tooltipRect.width + 8 < viewportWidth;\n\n      // Auto-positioning logic\n      if (position === \"auto\") {\n        if (fitsTop) return \"top\";\n        if (fitsBottom) return \"bottom\";\n        if (fitsRight) return \"right\";\n        if (fitsLeft) return \"left\";\n        return \"top\"; // fallback\n      }\n\n      return position;\n    };\n\n    const handleMouseEnter = () => {\n      if (disabled) return;\n\n      if (hideTimeoutRef.current) {\n        clearTimeout(hideTimeoutRef.current);\n      }\n\n      showTimeoutRef.current = setTimeout(() => {\n        setActualPosition(calculatePosition());\n        setIsVisible(true);\n\n        // Announce tooltip to screen readers\n        if (content && typeof content === \"string\") {\n          announceToScreenReader(content, \"polite\");\n        } else if (ariaLabel) {\n          announceToScreenReader(ariaLabel, \"polite\");\n        }\n      }, showDelay);\n    };\n\n    const handleMouseLeave = () => {\n      if (showTimeoutRef.current) {\n        clearTimeout(showTimeoutRef.current);\n      }\n\n      hideTimeoutRef.current = setTimeout(() => {\n        setIsVisible(false);\n      }, hideDelay);\n    };\n\n    // Cleanup timeouts on unmount\n    useEffect(() => {\n      return () => {\n        if (showTimeoutRef.current) clearTimeout(showTimeoutRef.current);\n        if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);\n      };\n    }, []);\n\n    const getAnimationPreset = () => {\n      if (!shouldAnimate) return \"none\";\n\n      switch (variant) {\n        case \"scale\":\n          return \"scaleIn\";\n        case \"slide\":\n          return getSlidePreset();\n        case \"fade\":\n        default:\n          return \"fadeIn\";\n      }\n    };\n\n    const getSlidePreset = () => {\n      switch (actualPosition) {\n        case \"top\":\n          return \"slideUp\";\n        case \"bottom\":\n          return \"slideDown\";\n        case \"left\":\n          return \"slideLeft\";\n        case \"right\":\n          return \"slideRight\";\n        default:\n          return \"fadeIn\";\n      }\n    };\n\n    const getPositionStyles = (): React.CSSProperties => {\n      if (!triggerRef.current || !tooltipRef.current) return {};\n\n      const triggerRect = triggerRef.current.getBoundingClientRect();\n      const tooltipRect = tooltipRef.current.getBoundingClientRect();\n\n      switch (actualPosition) {\n        case \"top\":\n          return {\n            top: triggerRect.top - tooltipRect.height - 8,\n            left:\n              triggerRect.left + (triggerRect.width - tooltipRect.width) / 2,\n          };\n        case \"bottom\":\n          return {\n            top: triggerRect.bottom + 8,\n            left:\n              triggerRect.left + (triggerRect.width - tooltipRect.width) / 2,\n          };\n        case \"left\":\n          return {\n            top:\n              triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,\n            left: triggerRect.left - tooltipRect.width - 8,\n          };\n        case \"right\":\n          return {\n            top:\n              triggerRect.top + (triggerRect.height - tooltipRect.height) / 2,\n            left: triggerRect.right + 8,\n          };\n        default:\n          return {};\n      }\n    };\n\n    const getArrowStyles = (): React.CSSProperties => {\n      switch (actualPosition) {\n        case \"top\":\n          return { bottom: \"-4px\", left: \"50%\", transform: \"translateX(-50%)\" };\n        case \"bottom\":\n          return {\n            top: \"-4px\",\n            left: \"50%\",\n            transform: \"translateX(-50%) rotate(180deg)\",\n          };\n        case \"left\":\n          return {\n            right: \"-4px\",\n            top: \"50%\",\n            transform: \"translateY(-50%) rotate(90deg)\",\n          };\n        case \"right\":\n          return {\n            left: \"-4px\",\n            top: \"50%\",\n            transform: \"translateY(-50%) rotate(-90deg)\",\n          };\n        default:\n          return {};\n      }\n    };\n\n    if (disabled) {\n      return <>{children}</>;\n    }\n\n    return (\n      <>\n        <div\n          ref={triggerRef}\n          className={cn(\"inline-block\", triggerClassName)}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n          aria-describedby={isVisible ? tooltipId : undefined}\n          {...props}\n        >\n          {children}\n        </div>\n\n        {isVisible && (\n          <Motion\n            preset={getAnimationPreset()}\n            duration={shouldAnimate ? 200 : 0}\n            className=\"glass-fixed glass-z-9999 glass-pointer-events-none\"\n            style={{\n              ...getPositionStyles(),\n              maxWidth,\n            }}\n          >\n            <div\n              ref={ref}\n              id={tooltipId}\n              role=\"tooltip\"\n              aria-label={ariaLabel}\n              className={cn(\"relative\", className)}\n            >\n              <OptimizedGlass\n                ref={tooltipRef}\n                intent=\"neutral\"\n                elevation=\"level4\"\n                intensity=\"medium\"\n                depth={1}\n                tint=\"neutral\"\n                border=\"subtle\"\n                animation=\"none\"\n                performanceMode=\"medium\"\n                className=\"glass-px-3 glass-py-2 glass-radius-lg glass-text-sm glass-text-primary glass-shadow-lg\"\n              >\n                {content}\n\n                {showArrow && (\n                  <div\n                    className=\"glass-absolute glass-w-0 glass-h-0 glass-border-l-4 glass-border-r-4 glass-border-b-4 glass-border-transparent glass-border-b-white/20\"\n                    style={getArrowStyles()}\n                    aria-hidden=\"true\"\n                  />\n                )}\n              </OptimizedGlass>\n            </div>\n          </Motion>\n        )}\n      </>\n    );\n  }\n);\n\nGlassTooltip.displayName = \"GlassTooltip\";\n\n// Compound component for tooltip with trigger\nexport const GlassTooltipTrigger: React.FC<{\n  asChild?: boolean;\n  children: React.ReactNode;\n}> = ({ asChild, children }) => {\n  return <>{children}</>;\n};\n\nexport const GlassTooltipContent: React.FC<{\n  children: React.ReactNode;\n}> = ({ children }) => {\n  return <>{children}</>;\n};\n", "import React from \"react\";\nimport { useMemo, useCallback, useState } from \"react\";\nimport { ChartQualityTier, ChartType, ChartPhysicsConfig } from \"../types\";\n\n// Re-export types for convenience\nexport type QualityTier = ChartQualityTier;\nexport type PhysicsParams = {\n  stiffness: number;\n  dampingRatio: number;\n  mass: number;\n  precision: number;\n  velocity: number;\n  friction: number;\n};\n\ninterface DeviceCapabilities {\n  isMobile: boolean;\n  isTablet: boolean;\n  isLowEndDevice: boolean;\n  hasTouch: boolean;\n  connectionSpeed: \"slow\" | \"fast\" | \"unknown\";\n  memory: number; // MB\n  cores: number;\n}\n\ninterface ChartPerformanceMetrics {\n  dataPointCount: number;\n  seriesCount: number;\n  animationComplexity: \"low\" | \"medium\" | \"high\";\n  interactionComplexity: \"low\" | \"medium\" | \"high\";\n}\n\nexport function useQualityTier(\n  metrics: ChartPerformanceMetrics,\n  chartType: ChartType,\n  customTier?: ChartQualityTier[\"tier\"]\n): ChartQualityTier {\n  // Detect device capabilities\n  const deviceCapabilities = useMemo((): DeviceCapabilities => {\n    const userAgent = navigator.userAgent;\n    const isMobile =\n      /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n        userAgent\n      );\n    const isTablet = /iPad|Android(?=.*\\bMobile\\b)|Tablet|PlayBook/i.test(\n      userAgent\n    );\n\n    // Estimate device performance\n    const isLowEndDevice = navigator.hardwareConcurrency\n      ? navigator.hardwareConcurrency <= 2\n      : isMobile && !isTablet;\n\n    const hasTouch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n\n    // Estimate connection speed (simplified)\n    const connection = (navigator as any).connection;\n    let connectionSpeed: \"slow\" | \"fast\" | \"unknown\" = \"unknown\";\n    if (connection) {\n      const effectiveType = connection.effectiveType;\n      connectionSpeed =\n        effectiveType === \"slow-2g\" || effectiveType === \"2g\" ? \"slow\" : \"fast\";\n    }\n\n    // Estimate memory (rough approximation)\n    const memory = (navigator as any).deviceMemory || (isLowEndDevice ? 2 : 8);\n    const cores = navigator.hardwareConcurrency || (isLowEndDevice ? 2 : 4);\n\n    return {\n      isMobile,\n      isTablet,\n      isLowEndDevice,\n      hasTouch,\n      connectionSpeed,\n      memory,\n      cores,\n    };\n  }, []);\n\n  // Calculate optimal quality tier\n  const qualityTier = useMemo((): ChartQualityTier => {\n    // If custom tier is specified, use it\n    if (customTier) {\n      return getTierConfig(customTier, deviceCapabilities, metrics);\n    }\n\n    // Auto-detect optimal tier based on device and data complexity\n    const {\n      dataPointCount,\n      seriesCount,\n      animationComplexity,\n      interactionComplexity,\n    } = metrics;\n    const { isLowEndDevice, isMobile, connectionSpeed, memory } =\n      deviceCapabilities;\n\n    // Calculate complexity score\n    const dataComplexity = Math.min(\n      dataPointCount / 1000 + seriesCount / 10,\n      10\n    );\n    const animationScore =\n      animationComplexity === \"high\"\n        ? 3\n        : animationComplexity === \"medium\"\n          ? 2\n          : 1;\n    const interactionScore =\n      interactionComplexity === \"high\"\n        ? 3\n        : interactionComplexity === \"medium\"\n          ? 2\n          : 1;\n\n    const totalComplexity = dataComplexity + animationScore + interactionScore;\n\n    // Determine tier based on complexity and device capabilities\n    let tier: ChartQualityTier[\"tier\"];\n\n    if (\n      totalComplexity <= 5 &&\n      !isLowEndDevice &&\n      connectionSpeed !== \"slow\" &&\n      memory >= 4\n    ) {\n      tier = \"ultra\";\n    } else if (totalComplexity <= 8 && (!isLowEndDevice || memory >= 4)) {\n      tier = \"high\";\n    } else if (totalComplexity <= 12 || (!isMobile && memory >= 2)) {\n      tier = \"medium\";\n    } else {\n      tier = \"low\";\n    }\n\n    return getTierConfig(tier, deviceCapabilities, metrics);\n  }, [customTier, deviceCapabilities, metrics]);\n\n  return qualityTier;\n}\n\nfunction getTierConfig(\n  tier: ChartQualityTier[\"tier\"],\n  device: DeviceCapabilities,\n  metrics: ChartPerformanceMetrics\n): ChartQualityTier {\n  const configs: Record<ChartQualityTier[\"tier\"], ChartQualityTier> = {\n    ultra: {\n      tier: \"ultra\",\n      maxDataPoints: 50000,\n      animationEnabled: true,\n      interactionEnabled: true,\n      quality: \"quality\",\n    },\n    high: {\n      tier: \"high\",\n      maxDataPoints: 25000,\n      animationEnabled: true,\n      interactionEnabled: true,\n      quality: \"quality\",\n    },\n    medium: {\n      tier: \"medium\",\n      maxDataPoints: 10000,\n      animationEnabled: device.connectionSpeed !== \"slow\",\n      interactionEnabled: true,\n      quality: \"balanced\",\n    },\n    low: {\n      tier: \"low\",\n      maxDataPoints: 5000,\n      animationEnabled: false,\n      interactionEnabled: device.hasTouch,\n      quality: \"fast\",\n    },\n  };\n\n  return configs[tier];\n}\n\n// Hook for monitoring chart performance\nexport function useChartPerformanceMonitoring(enabled: boolean = false) {\n  const startTimeRef = useMemo(() => ({ current: 0 }), []);\n\n  const startMeasurement = useCallback(() => {\n    if (enabled) {\n      startTimeRef.current = performance.now();\n    }\n  }, [enabled, startTimeRef]);\n\n  const endMeasurement = useCallback(\n    (label: string) => {\n      if (enabled && startTimeRef.current > 0) {\n        const duration = performance.now() - startTimeRef.current;\n        startTimeRef.current = 0;\n        return duration;\n      }\n      return 0;\n    },\n    [enabled, startTimeRef]\n  );\n\n  return {\n    startMeasurement,\n    endMeasurement,\n  };\n}\n\n// Hook for adaptive quality adjustment\nexport function useAdaptiveQuality(\n  initialTier: ChartQualityTier[\"tier\"] = \"medium\",\n  enabled: boolean = true\n) {\n  const [currentTier, setCurrentTier] =\n    useState<ChartQualityTier[\"tier\"]>(initialTier);\n  const performanceHistoryRef = useMemo(\n    () => ({ current: [] as number[] }),\n    []\n  );\n\n  const updateQualityBasedOnPerformance = useCallback(\n    (renderTime: number, targetFPS: number = 60) => {\n      if (!enabled) return;\n\n      const targetFrameTime = 1000 / targetFPS;\n      performanceHistoryRef.current.push(renderTime);\n\n      // Keep only last 10 measurements\n      if (performanceHistoryRef.current.length > 10) {\n        performanceHistoryRef.current.shift();\n      }\n\n      // Calculate average performance\n      const avgRenderTime =\n        performanceHistoryRef.current.reduce((a, b) => a + b, 0) /\n        performanceHistoryRef.current.length;\n\n      // Adjust quality based on performance\n      if (avgRenderTime > targetFrameTime * 2 && currentTier !== \"low\") {\n        setCurrentTier((prev: any) => {\n          const newTier =\n            prev === \"ultra\"\n              ? \"high\"\n              : prev === \"high\"\n                ? \"medium\"\n                : prev === \"medium\"\n                  ? \"low\"\n                  : \"low\";\n          return newTier;\n        });\n      } else if (\n        avgRenderTime < targetFrameTime * 0.8 &&\n        currentTier !== \"ultra\"\n      ) {\n        setCurrentTier((prev: any) => {\n          const newTier =\n            prev === \"low\"\n              ? \"medium\"\n              : prev === \"medium\"\n                ? \"high\"\n                : prev === \"high\"\n                  ? \"ultra\"\n                  : \"ultra\";\n          return newTier;\n        });\n      }\n    },\n    [enabled, currentTier, performanceHistoryRef]\n  );\n\n  return {\n    currentTier,\n    updateQualityBasedOnPerformance,\n  };\n}\n\n// Export utility functions for getting quality-based parameters\nexport function getQualityBasedPhysicsParams(\n  qualityTier: ChartQualityTier[\"tier\"]\n): PhysicsParams {\n  const configs: Record<ChartQualityTier[\"tier\"], PhysicsParams> = {\n    ultra: {\n      stiffness: 300,\n      dampingRatio: 0.8,\n      mass: 1,\n      precision: 0.001,\n      velocity: 0,\n      friction: 0.01,\n    },\n    high: {\n      stiffness: 250,\n      dampingRatio: 0.7,\n      mass: 1.2,\n      precision: 0.005,\n      velocity: 0,\n      friction: 0.02,\n    },\n    medium: {\n      stiffness: 200,\n      dampingRatio: 0.6,\n      mass: 1.5,\n      precision: 0.01,\n      velocity: 0,\n      friction: 0.05,\n    },\n    low: {\n      stiffness: 150,\n      dampingRatio: 0.5,\n      mass: 2,\n      precision: 0.02,\n      velocity: 0,\n      friction: 0.1,\n    },\n  };\n\n  return configs[qualityTier] || configs.medium;\n}\n\nexport function getQualityBasedGlassParams(\n  qualityTier: ChartQualityTier[\"tier\"]\n): {\n  blurStrength: \"none\" | \"light\" | \"standard\" | \"heavy\";\n  opacity: number;\n  borderRadius: number;\n  elevation: number;\n} {\n  const configs: Record<ChartQualityTier[\"tier\"], any> = {\n    ultra: {\n      blurStrength: \"heavy\" as const,\n      opacity: 0.9,\n      borderRadius: 16,\n      elevation: \"level4\",\n    },\n    high: {\n      blurStrength: \"standard\" as const,\n      opacity: 0.85,\n      borderRadius: 12,\n      elevation: \"level3\",\n    },\n    medium: {\n      blurStrength: \"light\" as const,\n      opacity: 0.8,\n      borderRadius: 8,\n      elevation: \"level2\",\n    },\n    low: {\n      blurStrength: \"none\" as const,\n      opacity: 0.7,\n      borderRadius: 4,\n      elevation: \"level1\",\n    },\n  };\n\n  return configs[qualityTier] || configs.medium;\n}\n", "export const DEFAULT_CHART_COLORS = [\n  \"#70d6ff\",\n  \"#a78bfa\",\n  \"#34d399\",\n  \"#fbbf24\",\n  \"#f87171\",\n  \"#22d3ee\",\n  \"#fb7185\",\n  \"#c084fc\",\n  \"#60a5fa\",\n  \"#94a3b8\",\n];\n\nconst CSS_TOKEN_PATTERN = /\\b(var|color-mix|hsl\\(var|rgb\\(var)\\(/;\nconst CSS_VAR_PATTERN = /var\\(\\s*(--[\\w-]+)\\s*(?:,\\s*([^)]+))?\\)/;\n\nconst clampAlpha = (alpha: number) => Math.max(0, Math.min(1, alpha));\n\nconst expandHex = (hex: string) => {\n  const normalized = hex.trim();\n  if (/^#[0-9a-f]{3}$/i.test(normalized)) {\n    return `#${normalized\n      .slice(1)\n      .split(\"\")\n      .map((part) => part + part)\n      .join(\"\")}`;\n  }\n  return normalized;\n};\n\nexport const resolveChartColor = (\n  color: string | undefined,\n  fallback = DEFAULT_CHART_COLORS[0]\n): string => {\n  const candidate = color?.trim();\n  if (!candidate || candidate === \"currentColor\") {\n    return fallback;\n  }\n\n  if (!CSS_TOKEN_PATTERN.test(candidate)) {\n    return candidate;\n  }\n\n  if (typeof window === \"undefined\") {\n    return fallback;\n  }\n\n  const variableMatch = candidate.match(CSS_VAR_PATTERN);\n  if (!variableMatch) {\n    return fallback;\n  }\n\n  const [, variableName, rawFallback] = variableMatch;\n  const root = document.documentElement;\n  const resolved = window\n    .getComputedStyle(root)\n    .getPropertyValue(variableName)\n    .trim();\n\n  if (resolved && !CSS_TOKEN_PATTERN.test(resolved)) {\n    return resolved;\n  }\n\n  if (rawFallback) {\n    return resolveChartColor(rawFallback.trim(), fallback);\n  }\n\n  return fallback;\n};\n\nexport const chartColorWithAlpha = (\n  color: string | undefined,\n  alpha: number,\n  fallback = DEFAULT_CHART_COLORS[0]\n): string => {\n  const resolved = expandHex(resolveChartColor(color, fallback));\n  const safeAlpha = clampAlpha(alpha);\n\n  const hexMatch = resolved.match(/^#([0-9a-f]{6})([0-9a-f]{2})?$/i);\n  if (hexMatch) {\n    const value = hexMatch[1];\n    const red = parseInt(value.slice(0, 2), 16);\n    const green = parseInt(value.slice(2, 4), 16);\n    const blue = parseInt(value.slice(4, 6), 16);\n    return `rgba(${red}, ${green}, ${blue}, ${safeAlpha})`;\n  }\n\n  const rgbMatch = resolved.match(\n    /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*[\\d.]+)?\\s*\\)$/i\n  );\n  if (rgbMatch) {\n    return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${safeAlpha})`;\n  }\n\n  return chartColorWithAlpha(fallback, safeAlpha, DEFAULT_CHART_COLORS[0]);\n};\n\nexport const resolveChartPalette = (palette?: string[]): string[] => {\n  const source = palette && palette.length > 0 ? palette : DEFAULT_CHART_COLORS;\n  return source.map((color, index) =>\n    resolveChartColor(\n      color,\n      DEFAULT_CHART_COLORS[index % DEFAULT_CHART_COLORS.length]\n    )\n  );\n};\n", "\"use client\";\nimport React, {\n  useState,\n  useEffect,\n  useRef,\n  createContext,\n  useContext,\n  forwardRef,\n  ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport {\n  useA11yId,\n  prefersReducedMotion,\n  announceToScreenReader,\n} from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport type AnimationType =\n  | \"fadeIn\"\n  | \"fadeOut\"\n  | \"slideIn\"\n  | \"slideOut\"\n  | \"scaleIn\"\n  | \"scaleOut\"\n  | \"bounce\"\n  | \"shake\"\n  | \"pulse\"\n  | \"rotate\"\n  | \"flip\";\n\nexport type AnimationDirection = \"up\" | \"down\" | \"left\" | \"right\" | \"center\";\n\nexport type EasingType =\n  | \"linear\"\n  | \"easeIn\"\n  | \"easeOut\"\n  | \"easeInOut\"\n  | \"bounce\"\n  | \"elastic\";\n\nexport interface AnimationConfig {\n  type: AnimationType;\n  direction?: AnimationDirection;\n  duration?: number;\n  delay?: number;\n  easing?: EasingType;\n  repeat?: number;\n  yoyo?: boolean; // Reverse animation on repeat\n  amplitude?: number; // For bounce/elastic effects\n  frequency?: number; // For oscillation effects\n}\n\nexport interface MotionControllerProps {\n  /** Whether animations are globally enabled */\n  enabled?: boolean;\n  /** Global animation duration multiplier */\n  speed?: number;\n  /** Whether to reduce motion for accessibility */\n  reduceMotion?: boolean;\n  /** Whether to respect motion preferences */\n  respectMotionPreference?: boolean;\n  /** Children to animate */\n  children: React.ReactNode;\n  /** Additional CSS class */\n  className?: string;\n  /** ARIA label for the motion controller */\n  \"aria-label\"?: string;\n}\n\ninterface MotionContextType {\n  enabled: boolean;\n  speed: number;\n  reduceMotion: boolean;\n  animate: (element: HTMLElement, config: AnimationConfig) => Promise<void>;\n  batchAnimate: (\n    animations: Array<{ element: HTMLElement; config: AnimationConfig }>\n  ) => Promise<void>;\n}\n\nconst MotionContext = createContext<MotionContextType | undefined>(undefined);\n\nconst defaultMotionContext: MotionContextType = {\n  enabled: false,\n  speed: 1,\n  reduceMotion: true,\n  animate: async () => {},\n  batchAnimate: async () => {},\n};\n\nexport const useMotionController = () => {\n  const context = useContext(MotionContext);\n  return context ?? defaultMotionContext;\n};\n\n// Easing functions\nconst easings = {\n  linear: (t: number) => t,\n  easeIn: (t: number) => t * t,\n  easeOut: (t: number) => t * (2 - t),\n  easeInOut: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n  bounce: (t: number) => {\n    if (t < 1 / 2.75) return 7.5625 * t * t;\n    if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n    if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n    return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n  },\n  elastic: (t: number) => {\n    if (t === 0) return 0;\n    if (t === 1) return 1;\n    return -Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n  },\n};\n\nexport const GlassMotionController = forwardRef<\n  HTMLDivElement,\n  MotionControllerProps\n>(\n  (\n    {\n      enabled = true,\n      speed = 1,\n      reduceMotion = false,\n      respectMotionPreference = true,\n      children,\n      className,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [isAnimating, setIsAnimating] = useState(false);\n    const motionPreference = useMotionPreferenceContext();\n    const controllerId = useA11yId(\"motion-controller\");\n\n    // Determine if motion should be reduced\n    const shouldReduceMotion = respectMotionPreference\n      ? reduceMotion || motionPreference.prefersReducedMotion\n      : reduceMotion;\n\n    const animate = async (\n      element: HTMLElement,\n      config: AnimationConfig\n    ): Promise<void> => {\n      if (!enabled || shouldReduceMotion) {\n        // Still apply end state for reduced motion\n        if (shouldReduceMotion) {\n          applyEndState(element, config.type, config.direction || \"center\");\n          announceToScreenReader(\n            `Animation ${config.type} applied instantly due to reduced motion preference`,\n            \"polite\"\n          );\n        }\n        return;\n      }\n\n      setIsAnimating(true);\n      announceToScreenReader(`Starting ${config.type} animation`, \"polite\");\n\n      return new Promise((resolve) => {\n        const {\n          type,\n          direction = \"center\",\n          duration = 1000,\n          delay = 0,\n          easing = \"easeOut\",\n          repeat = 0,\n          yoyo = false,\n          amplitude = 1,\n          frequency = 1,\n        } = config;\n\n        const actualDuration = duration * speed;\n        let startTime: number;\n        let animationFrame: number;\n        let repeatCount = 0;\n\n        const animateFrame = (timestamp: number) => {\n          if (!startTime) startTime = timestamp;\n          if (timestamp - startTime < delay) {\n            animationFrame = requestAnimationFrame(animateFrame);\n            return;\n          }\n\n          const elapsed = timestamp - startTime - delay;\n          const progress = Math.min(elapsed / actualDuration, 1);\n\n          const easedProgress = easings[easing](progress);\n\n          applyAnimation(\n            element,\n            type,\n            direction,\n            easedProgress,\n            amplitude,\n            frequency\n          );\n\n          if (progress < 1) {\n            animationFrame = requestAnimationFrame(animateFrame);\n          } else {\n            repeatCount++;\n            if (repeatCount <= repeat) {\n              startTime = timestamp;\n              if (yoyo) {\n                // For yoyo effect, we need to reverse the animation\n                const reverseAnimateFrame = createReverseAnimationFrame(\n                  element,\n                  type,\n                  direction,\n                  actualDuration,\n                  easing,\n                  amplitude,\n                  frequency\n                );\n                animationFrame = requestAnimationFrame(reverseAnimateFrame);\n                return;\n              }\n            } else {\n              setIsAnimating(false);\n              announceToScreenReader(\n                `Animation ${config.type} completed`,\n                \"polite\"\n              );\n              resolve();\n            }\n          }\n        };\n\n        animationFrame = requestAnimationFrame(animateFrame);\n      });\n    };\n\n    const batchAnimate = async (\n      animations: Array<{ element: HTMLElement; config: AnimationConfig }>\n    ) => {\n      if (!enabled || shouldReduceMotion) {\n        // Apply end states for reduced motion\n        if (shouldReduceMotion) {\n          animations.forEach(({ element, config }) => {\n            applyEndState(element, config.type, config.direction || \"center\");\n          });\n          announceToScreenReader(\n            `${animations.length} animations applied instantly due to reduced motion preference`,\n            \"polite\"\n          );\n        }\n        return;\n      }\n\n      setIsAnimating(true);\n      announceToScreenReader(\n        `Starting batch animation of ${animations.length} elements`,\n        \"polite\"\n      );\n      const promises = animations.map(({ element, config }) =>\n        animate(element, config)\n      );\n      await Promise.all(promises);\n      setIsAnimating(false);\n      announceToScreenReader(\"Batch animation completed\", \"polite\");\n    };\n\n    const createReverseAnimationFrame = (\n      element: HTMLElement,\n      type: AnimationType,\n      direction: AnimationDirection,\n      duration: number,\n      easing: EasingType,\n      amplitude: number,\n      frequency: number\n    ) => {\n      return (timestamp: number) => {\n        // Reverse animation logic would go here\n        // For simplicity, we'll just run the normal animation again\n      };\n    };\n\n    const applyAnimation = (\n      element: HTMLElement,\n      type: AnimationType,\n      direction: AnimationDirection,\n      progress: number,\n      amplitude: number,\n      frequency: number\n    ) => {\n      const styles: Partial<CSSStyleDeclaration> = {};\n\n      switch (type) {\n        case \"fadeIn\":\n        case \"fadeOut\":\n          styles.opacity =\n            type === \"fadeIn\" ? progress.toString() : (1 - progress).toString();\n          break;\n\n        case \"slideIn\":\n        case \"slideOut\":\n          const slideDistance = 100;\n          const slideProgress = type === \"slideIn\" ? 1 - progress : progress;\n          switch (direction) {\n            case \"up\":\n              styles.transform = `translateY(${slideDistance * slideProgress}px)`;\n              break;\n            case \"down\":\n              styles.transform = `translateY(-${slideDistance * slideProgress}px)`;\n              break;\n            case \"left\":\n              styles.transform = `translateX(${slideDistance * slideProgress}px)`;\n              break;\n            case \"right\":\n              styles.transform = `translateX(-${slideDistance * slideProgress}px)`;\n              break;\n          }\n          break;\n\n        case \"scaleIn\":\n        case \"scaleOut\":\n          const scaleStart = type === \"scaleIn\" ? 0 : 1;\n          const scaleEnd = type === \"scaleIn\" ? 1 : 0;\n          const scaleProgress = scaleStart + (scaleEnd - scaleStart) * progress;\n          styles.transform = `scale(${scaleProgress})`;\n          break;\n\n        case \"bounce\":\n          const bounceHeight = amplitude * 50;\n          const bounceProgress = easings.bounce(progress);\n          styles.transform = `translateY(${bounceHeight * (1 - bounceProgress)}px)`;\n          break;\n\n        case \"shake\":\n          const shakeIntensity = amplitude * 10;\n          const shakeOffset =\n            Math.sin(progress * frequency * Math.PI * 2) * shakeIntensity;\n          styles.transform = `translateX(${shakeOffset}px)`;\n          break;\n\n        case \"pulse\":\n          const pulseScale =\n            1 + Math.sin(progress * frequency * Math.PI * 2) * amplitude * 0.1;\n          styles.transform = `scale(${pulseScale})`;\n          break;\n\n        case \"rotate\":\n          const rotation = progress * 360 * frequency;\n          styles.transform = `rotate(${rotation}deg)`;\n          break;\n\n        case \"flip\":\n          const flipRotation = progress * 180;\n          styles.transform = `rotateY(${flipRotation}deg)`;\n          break;\n      }\n\n      // Apply styles\n      Object.assign(element.style, styles);\n    };\n\n    // Apply end state without animation for reduced motion\n    const applyEndState = (\n      element: HTMLElement,\n      type: AnimationType,\n      direction: AnimationDirection\n    ) => {\n      const styles: Partial<CSSStyleDeclaration> = {};\n\n      switch (type) {\n        case \"fadeIn\":\n          styles.opacity = \"1\";\n          break;\n        case \"fadeOut\":\n          styles.opacity = \"0\";\n          break;\n        case \"slideIn\":\n        case \"scaleIn\":\n          styles.transform = \"none\";\n          styles.opacity = \"1\";\n          break;\n        case \"slideOut\":\n        case \"scaleOut\":\n          styles.opacity = \"0\";\n          break;\n        default:\n          // For other animations, ensure element is visible\n          styles.opacity = \"1\";\n          styles.transform = \"none\";\n          break;\n      }\n\n      Object.assign(element.style, styles);\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={className}\n        id={controllerId}\n        aria-label={\n          ariaLabel ||\n          (isAnimating ? \"Animation in progress\" : \"Animation controller\")\n        }\n        aria-busy={isAnimating}\n        role=\"region\"\n        {...props}\n      >\n        <MotionContext.Provider\n          value={{\n            enabled: enabled && !shouldReduceMotion,\n            speed,\n            reduceMotion: shouldReduceMotion,\n            animate,\n            batchAnimate,\n          }}\n        >\n          {children}\n        </MotionContext.Provider>\n      </div>\n    );\n  }\n);\n\nGlassMotionController.displayName = \"GlassMotionController\";\n\n// Animated component wrapper\nexport interface GlassAnimatedProps {\n  animation?: AnimationConfig;\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n  trigger?: \"mount\" | \"hover\" | \"click\" | \"manual\";\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the animated surface inside a bounded local viewport. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Whether to respect motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA label for the animated element */\n  \"aria-label\"?: string;\n}\n\nexport const GlassAnimated = forwardRef<HTMLDivElement, GlassAnimatedProps>(\n  (\n    {\n      animation,\n      children,\n      className = \"\",\n      style,\n      trigger = \"mount\",\n      compact = false,\n      contained = false,\n      preview = false,\n      maxHeight,\n      maxWidth,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const { animate, enabled, reduceMotion } = useMotionController();\n    const elementRef = useRef<HTMLDivElement | null>(null);\n    const [hasAnimated, setHasAnimated] = useState(false);\n    const [isAnimating, setIsAnimating] = useState(false);\n    const motionPreference = useMotionPreferenceContext();\n    const animatedId = useA11yId(\"animated\");\n\n    // Combine refs\n    const combinedRef = (node: HTMLDivElement) => {\n      elementRef.current = node;\n      if (typeof ref === \"function\") {\n        ref(node);\n      } else if (ref) {\n        ref.current = node;\n      }\n    };\n\n    const shouldReduceMotion = respectMotionPreference\n      ? reduceMotion || motionPreference.prefersReducedMotion\n      : reduceMotion;\n    const continuousAnimation =\n      animation?.repeat === Infinity &&\n      trigger === \"mount\" &&\n      !shouldReduceMotion\n        ? animation\n        : undefined;\n    const continuousAnimationStyle: React.CSSProperties | undefined =\n      continuousAnimation?.type === \"pulse\"\n        ? {\n            animation: `ag-glass-animated-pulse ${continuousAnimation.duration ?? 1200}ms ease-in-out infinite`,\n          }\n        : continuousAnimation?.type === \"rotate\"\n          ? {\n              animation: `ag-glass-animated-rotate ${continuousAnimation.duration ?? 1200}ms linear infinite`,\n            }\n          : undefined;\n    const isCompact = compact || preview;\n    const bounded = contained || isCompact;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n    useEffect(() => {\n      if (!enabled || !animation || !elementRef.current || hasAnimated) return;\n\n      if (trigger === \"mount\") {\n        setIsAnimating(true);\n        animate(elementRef.current, animation)\n          .then(() => {\n            setHasAnimated(true);\n            setIsAnimating(false);\n          })\n          .catch(() => {\n            setIsAnimating(false);\n          });\n      }\n    }, [animate, animation, enabled, trigger, hasAnimated]);\n\n    const handleTrigger = async () => {\n      if (!enabled || !animation || !elementRef.current) return;\n\n      if (trigger === \"click\") {\n        setIsAnimating(true);\n        try {\n          await animate(elementRef.current, animation);\n        } finally {\n          setIsAnimating(false);\n        }\n      }\n    };\n\n    const handleHover = async () => {\n      if (!enabled || !animation || !elementRef.current || trigger !== \"hover\")\n        return;\n\n      setIsAnimating(true);\n      try {\n        await animate(elementRef.current, animation);\n      } finally {\n        setIsAnimating(false);\n      }\n    };\n\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n      if (trigger === \"click\" && (event.key === \"Enter\" || event.key === \" \")) {\n        event.preventDefault();\n        handleTrigger();\n      }\n    };\n\n    return (\n      <div\n        ref={combinedRef}\n        id={animatedId}\n        className={cn(\n          bounded && \"glass-overflow-hidden glass-w-full\",\n          className\n        )}\n        style={{\n          maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n          maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n          ...continuousAnimationStyle,\n          ...(style ?? {}),\n        }}\n        onClick={trigger === \"click\" ? handleTrigger : undefined}\n        onMouseEnter={trigger === \"hover\" ? handleHover : undefined}\n        onKeyDown={trigger === \"click\" ? handleKeyDown : undefined}\n        tabIndex={trigger === \"click\" ? 0 : undefined}\n        role={trigger === \"click\" ? \"button\" : undefined}\n        aria-label={\n          ariaLabel ||\n          (trigger === \"click\" ? \"Animated interactive element\" : undefined)\n        }\n        aria-busy={isAnimating}\n        aria-describedby={\n          shouldReduceMotion ? `${animatedId}-motion-notice` : undefined\n        }\n        {...props}\n      >\n        {children}\n        {shouldReduceMotion && (\n          <div\n            id={`${animatedId}-motion-notice`}\n            className={cn(\"glass-sr-only\")}\n          >\n            Motion animations are disabled due to accessibility preferences\n          </div>\n        )}\n        {continuousAnimationStyle ? (\n          <style>{`\n            @keyframes ag-glass-animated-pulse {\n              0%, 100% { transform: scale(1); filter: brightness(1); }\n              50% { transform: scale(${1 + (continuousAnimation?.amplitude ?? 1) * 0.05}); filter: brightness(1.18); }\n            }\n            @keyframes ag-glass-animated-rotate {\n              from { transform: rotate(0deg); }\n              to { transform: rotate(360deg); }\n            }\n          `}</style>\n        ) : null}\n      </div>\n    );\n  }\n);\n\nGlassAnimated.displayName = \"GlassAnimated\";\n\n// Sequence animation component\nexport interface GlassAnimationSequenceProps {\n  children: React.ReactNode;\n  staggerDelay?: number;\n  className?: string;\n  style?: React.CSSProperties;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the sequence inside a bounded local viewport. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Whether to respect motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA label for the sequence */\n  \"aria-label\"?: string;\n}\n\nexport const GlassAnimationSequence = forwardRef<\n  HTMLDivElement,\n  GlassAnimationSequenceProps\n>(\n  (\n    {\n      children,\n      staggerDelay = 100,\n      className = \"\",\n      style,\n      compact = false,\n      contained = false,\n      preview = false,\n      maxHeight,\n      maxWidth,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const { batchAnimate, enabled, reduceMotion } = useMotionController();\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const [isAnimating, setIsAnimating] = useState(false);\n    const motionPreference = useMotionPreferenceContext();\n    const sequenceId = useA11yId(\"animation-sequence\");\n\n    // Combine refs\n    const combinedRef = (node: HTMLDivElement) => {\n      containerRef.current = node;\n      if (typeof ref === \"function\") {\n        ref(node);\n      } else if (ref) {\n        ref.current = node;\n      }\n    };\n\n    const shouldReduceMotion = respectMotionPreference\n      ? reduceMotion || motionPreference.prefersReducedMotion\n      : reduceMotion;\n    const isCompact = compact || preview;\n    const bounded = contained || isCompact;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n    useEffect(() => {\n      if (!enabled || !containerRef.current) return;\n\n      const elements = containerRef.current.children;\n      const animations = Array.from(elements).map((element, index) => ({\n        element: element as HTMLElement,\n        config: {\n          type: \"fadeIn\" as AnimationType,\n          direction: \"up\" as AnimationDirection,\n          duration: 600,\n          delay: shouldReduceMotion ? 0 : index * staggerDelay,\n          easing: \"easeOut\" as EasingType,\n        },\n      }));\n\n      setIsAnimating(true);\n      batchAnimate(animations)\n        .then(() => setIsAnimating(false))\n        .catch(() => setIsAnimating(false));\n    }, [batchAnimate, enabled, staggerDelay, shouldReduceMotion]);\n\n    return (\n      <div\n        ref={combinedRef}\n        id={sequenceId}\n        className={cn(bounded && \"glass-overflow-auto glass-w-full\", className)}\n        style={{\n          maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n          maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n          ...(style ?? {}),\n        }}\n        role=\"region\"\n        aria-label={ariaLabel || \"Animation sequence\"}\n        aria-busy={isAnimating}\n        aria-describedby={\n          shouldReduceMotion ? `${sequenceId}-motion-notice` : undefined\n        }\n        {...props}\n      >\n        {children}\n        {shouldReduceMotion && (\n          <div\n            id={`${sequenceId}-motion-notice`}\n            className={cn(\"glass-sr-only\")}\n          >\n            Sequential animations are disabled due to accessibility preferences\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassAnimationSequence.displayName = \"GlassAnimationSequence\";\n\n// Preset animations\nexport const animationPresets = {\n  fadeInUp: {\n    type: \"fadeIn\" as AnimationType,\n    direction: \"up\" as AnimationDirection,\n    duration: 600,\n    easing: \"easeOut\" as EasingType,\n  },\n  fadeInDown: {\n    type: \"fadeIn\" as AnimationType,\n    direction: \"down\" as AnimationDirection,\n    duration: 600,\n    easing: \"easeOut\" as EasingType,\n  },\n  slideInLeft: {\n    type: \"slideIn\" as AnimationType,\n    direction: \"left\" as AnimationDirection,\n    duration: 500,\n    easing: \"easeOut\" as EasingType,\n  },\n  slideInRight: {\n    type: \"slideIn\" as AnimationType,\n    direction: \"right\" as AnimationDirection,\n    duration: 500,\n    easing: \"easeOut\" as EasingType,\n  },\n  scaleIn: {\n    type: \"scaleIn\" as AnimationType,\n    duration: 400,\n    easing: \"easeOut\" as EasingType,\n  },\n  bounceIn: {\n    type: \"bounce\" as AnimationType,\n    duration: 800,\n    easing: \"bounce\" as EasingType,\n  },\n  shake: {\n    type: \"shake\" as AnimationType,\n    duration: 500,\n    amplitude: 1,\n    frequency: 5,\n  },\n  pulse: {\n    type: \"pulse\" as AnimationType,\n    duration: 1000,\n    amplitude: 1,\n    frequency: 2,\n    repeat: Infinity,\n  },\n};\n\n// Animation timeline component for complex sequences\nexport interface GlassAnimationTimelineProps {\n  timeline: Array<{\n    selector: string;\n    animation: AnimationConfig;\n    startTime?: number;\n  }>;\n  children: React.ReactNode;\n  className?: string;\n  style?: React.CSSProperties;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the timeline inside a bounded local viewport. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Whether to respect motion preferences */\n  respectMotionPreference?: boolean;\n  /** ARIA label for the timeline */\n  \"aria-label\"?: string;\n}\n\nexport const GlassAnimationTimeline = forwardRef<\n  HTMLDivElement,\n  GlassAnimationTimelineProps\n>(\n  (\n    {\n      timeline,\n      children,\n      className = \"\",\n      style,\n      compact = false,\n      contained = false,\n      preview = false,\n      maxHeight,\n      maxWidth,\n      respectMotionPreference = true,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const { animate, enabled, reduceMotion } = useMotionController();\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const [isAnimating, setIsAnimating] = useState(false);\n    const motionPreference = useMotionPreferenceContext();\n    const timelineId = useA11yId(\"animation-timeline\");\n\n    // Combine refs\n    const combinedRef = (node: HTMLDivElement) => {\n      containerRef.current = node;\n      if (typeof ref === \"function\") {\n        ref(node);\n      } else if (ref) {\n        ref.current = node;\n      }\n    };\n\n    const shouldReduceMotion = respectMotionPreference\n      ? reduceMotion || motionPreference.prefersReducedMotion\n      : reduceMotion;\n    const isCompact = compact || preview;\n    const bounded = contained || isCompact;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n    useEffect(() => {\n      if (!enabled || !containerRef.current) return;\n\n      setIsAnimating(true);\n      let animationPromises: Promise<void>[] = [];\n\n      timeline.forEach(({ selector, animation, startTime = 0 }) => {\n        const element = containerRef.current?.querySelector(\n          selector\n        ) as HTMLElement;\n        if (element) {\n          const promise = new Promise<void>((resolve) => {\n            setTimeout(\n              () => {\n                animate(element, animation).then(resolve).catch(resolve);\n              },\n              shouldReduceMotion ? 0 : startTime\n            );\n          });\n          animationPromises.push(promise);\n        }\n      });\n\n      Promise.all(animationPromises)\n        .then(() => setIsAnimating(false))\n        .catch(() => setIsAnimating(false));\n    }, [animate, enabled, timeline, shouldReduceMotion]);\n\n    return (\n      <div\n        ref={combinedRef}\n        id={timelineId}\n        className={cn(bounded && \"glass-overflow-auto glass-w-full\", className)}\n        style={{\n          maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n          maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n          ...(style ?? {}),\n        }}\n        role=\"region\"\n        aria-label={ariaLabel || \"Animation timeline\"}\n        aria-busy={isAnimating}\n        aria-describedby={\n          shouldReduceMotion ? `${timelineId}-motion-notice` : undefined\n        }\n        {...props}\n      >\n        {children}\n        {shouldReduceMotion && (\n          <div\n            id={`${timelineId}-motion-notice`}\n            className={cn(\"glass-sr-only\")}\n          >\n            Timeline animations are disabled due to accessibility preferences\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassAnimationTimeline.displayName = \"GlassAnimationTimeline\";\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nexport type Language =\n  | \"javascript\"\n  | \"typescript\"\n  | \"python\"\n  | \"java\"\n  | \"cpp\"\n  | \"csharp\"\n  | \"go\"\n  | \"rust\"\n  | \"php\"\n  | \"ruby\"\n  | \"swift\"\n  | \"kotlin\"\n  | \"scala\"\n  | \"html\"\n  | \"css\"\n  | \"json\"\n  | \"xml\"\n  | \"yaml\"\n  | \"sql\"\n  | \"bash\"\n  | \"powershell\"\n  | \"dockerfile\"\n  | \"markdown\"\n  | \"plaintext\";\n\nexport interface GlassCodeEditorProps {\n  /** Code content */\n  value?: string;\n  /** Language for syntax highlighting */\n  language?: Language;\n  /** Whether the editor is read-only */\n  readOnly?: boolean;\n  /** Placeholder text when empty */\n  placeholder?: string;\n  /** Font size */\n  fontSize?: number;\n  /** Number of lines to show */\n  lineNumbers?: boolean;\n  /** Whether to show minimap */\n  minimap?: boolean;\n  /** Whether to enable word wrap */\n  wordWrap?: boolean;\n  /** Tab size */\n  tabSize?: number;\n  /** Whether to enable auto-completion */\n  autoComplete?: boolean;\n  /** Theme for syntax highlighting */\n  theme?: \"light\" | \"dark\" | \"auto\";\n  /** Maximum height */\n  maxHeight?: string;\n  /** Minimum height */\n  minHeight?: string;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Hide toolbar controls/language metadata in compact mode. */\n  showToolbar?: boolean;\n  /** Custom className */\n  className?: string;\n  /** Change handler */\n  onChange?: (value: string) => void;\n  /** Focus handler */\n  onFocus?: () => void;\n  /** Blur handler */\n  onBlur?: () => void;\n  /** Mount handler */\n  onMount?: (editor: HTMLTextAreaElement) => void;\n}\n\n// Simple syntax highlighting patterns for common languages\nconst syntaxPatterns = {\n  javascript: {\n    keywords:\n      /\\b(const|let|var|function|return|if|else|for|while|do|switch|case|default|try|catch|finally|throw|new|class|extends|super|import|export|from|async|await|yield|typeof|instanceof|in|of)\\b/g,\n    strings: /([\"'`])(.*?)\\1/g,\n    comments: /(\\/\\/.*$|\\/\\*[\\s\\S]*?\\*\\/)/gm,\n    numbers: /\\b\\d+(\\.\\d+)?\\b/g,\n    functions: /\\b\\w+(?=\\()/g,\n  },\n  typescript: {\n    keywords:\n      /\\b(const|let|var|function|return|if|else|for|while|do|switch|case|default|try|catch|finally|throw|new|class|extends|super|import|export|from|async|await|yield|typeof|instanceof|in|of|interface|type|enum|namespace|module)\\b/g,\n    strings: /([\"'`])(.*?)\\1/g,\n    comments: /(\\/\\/.*$|\\/\\*[\\s\\S]*?\\*\\/)/gm,\n    numbers: /\\b\\d+(\\.\\d+)?\\b/g,\n    types: /\\b[A-Z]\\w*\\b/g,\n  },\n  python: {\n    keywords:\n      /\\b(def|class|if|elif|else|for|while|try|except|finally|with|as|import|from|return|yield|lambda|and|or|not|in|is|None|True|False)\\b/g,\n    strings: /([\"'`])(.*?)\\1/g,\n    comments: /(#.*$)/gm,\n    numbers: /\\b\\d+(\\.\\d+)?\\b/g,\n    functions: /\\b\\w+(?=\\()/g,\n  },\n  css: {\n    properties: /([a-z-]+)(?=\\s*:)/g,\n    values: /:(.+?);/g,\n    selectors: /([.#]?[\\w-]+)(?=\\s*\\{)/g,\n    comments: /(\\/\\*[\\s\\S]*?\\*\\/)/g,\n  },\n  json: {\n    keys: /\"([^\"]+)\":/g,\n    strings: /\"([^\"]+)\"/g,\n    numbers: /\\b\\d+(\\.\\d+)?\\b/g,\n  },\n};\n\nconst escapeHtml = (code: string) =>\n  code\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#039;\");\n\nexport const GlassCodeEditor: React.FC<GlassCodeEditorProps> = ({\n  value,\n  language = \"plaintext\",\n  readOnly = false,\n  placeholder = \"Enter your code here...\",\n  fontSize = 14,\n  lineNumbers = true,\n  minimap = false,\n  wordWrap = true,\n  tabSize = 2,\n  autoComplete = false,\n  theme = \"dark\",\n  maxHeight = \"320px\",\n  minHeight = \"180px\",\n  compact = false,\n  showToolbar = true,\n  className = \"\",\n  onChange,\n  onFocus,\n  onBlur,\n  onMount,\n}) => {\n  const defaultValue =\n    value === undefined && !onChange\n      ? \"import { GlassCard } from 'aura-glass';\\n\\nexport function Preview() {\\n  return <GlassCard intensity=\\\"medium\\\">Live surface</GlassCard>;\\n}\"\n      : \"\";\n  const [internalValue, setInternalValue] = useState(value ?? defaultValue);\n  const [isFocused, setIsFocused] = useState(false);\n  const [cursorPosition, setCursorPosition] = useState({ line: 1, column: 1 });\n  const textareaRef = useRef<HTMLTextAreaElement>(null);\n  const preRef = useRef<HTMLPreElement>(null);\n\n  const currentValue = value !== undefined ? value : internalValue;\n  const effectiveFontSize = compact ? Math.min(fontSize, 11) : fontSize;\n  const effectiveLineNumbers = compact ? false : lineNumbers;\n  const effectiveMaxHeight = compact ? \"220px\" : maxHeight;\n  const effectiveMinHeight = compact ? \"120px\" : minHeight;\n  const lineHeight = `${Math.round(effectiveFontSize * 1.55)}px`;\n\n  // Handle value changes\n  const handleChange = useCallback(\n    (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n      const newValue = e.target.value;\n      setInternalValue(newValue);\n      onChange?.(newValue);\n    },\n    [onChange]\n  );\n\n  // Handle focus/blur\n  const handleFocus = useCallback(() => {\n    setIsFocused(true);\n    onFocus?.();\n  }, [onFocus]);\n\n  const handleBlur = useCallback(() => {\n    setIsFocused(false);\n    onBlur?.();\n  }, [onBlur]);\n\n  // Syntax highlighting function\n  const highlightCode = useCallback((code: string, lang: Language) => {\n    const escapedCode = escapeHtml(code);\n    if (lang === \"plaintext\") return escapedCode;\n\n    const patterns = syntaxPatterns[lang as keyof typeof syntaxPatterns];\n    if (!patterns) return escapedCode;\n\n    // The editor previously performed regex replacement directly into HTML.\n    // That caused later patterns to match inside generated class names and render\n    // fragments like \"400\" as code. Keep the preview readable until a tokenized\n    // highlighter is introduced.\n    return escapedCode;\n  }, []);\n\n  // Handle keyboard shortcuts\n  const handleKeyDown = useCallback(\n    (e: React.KeyboardEvent) => {\n      if (e.key === \"Tab\" && !readOnly) {\n        e.preventDefault();\n        const textarea = textareaRef.current;\n        if (!textarea) return;\n\n        const start = textarea.selectionStart;\n        const end = textarea.selectionEnd;\n        const spaces = \" \".repeat(tabSize);\n\n        const newValue =\n          currentValue.substring(0, start) +\n          spaces +\n          currentValue.substring(end);\n        setInternalValue(newValue);\n        onChange?.(newValue);\n\n        // Set cursor position after the inserted spaces\n        setTimeout(() => {\n          textarea.selectionStart = textarea.selectionEnd = start + tabSize;\n        }, 0);\n      }\n    },\n    [currentValue, tabSize, readOnly, onChange]\n  );\n\n  // Update cursor position\n  const updateCursorPosition = useCallback(() => {\n    const textarea = textareaRef.current;\n    if (!textarea) return;\n\n    const text = textarea.value;\n    const cursorPos = textarea.selectionStart;\n\n    let line = 1;\n    let column = 1;\n\n    for (let i = 0; i < cursorPos; i++) {\n      if (text[i] === \"\\n\") {\n        line++;\n        column = 1;\n      } else {\n        column++;\n      }\n    }\n\n    setCursorPosition({ line, column });\n  }, []);\n\n  // Sync scroll positions\n  useEffect(() => {\n    const textarea = textareaRef.current;\n    const pre = preRef.current;\n\n    if (!textarea || !pre) return;\n\n    const syncScroll = () => {\n      pre.scrollTop = textarea.scrollTop;\n      pre.scrollLeft = textarea.scrollLeft;\n    };\n\n    textarea.addEventListener(\"scroll\", syncScroll);\n    return () => textarea.removeEventListener(\"scroll\", syncScroll);\n  }, []);\n\n  // Handle mount\n  useEffect(() => {\n    if (textareaRef.current && onMount) {\n      onMount(textareaRef.current);\n    }\n  }, [onMount]);\n\n  const highlightedCode = highlightCode(currentValue, language);\n  const lines = currentValue.split(\"\\n\");\n\n  return (\n    <OptimizedGlass\n      data-glass-component\n      className={cn(\n        \"glass-code-editor glass-relative glass-overflow-hidden glass-max-w-full glass-surface-dark/30 glass-border glass-border-white/10\",\n        className\n      )}\n      style={{\n        ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n        maxHeight: effectiveMaxHeight,\n        minHeight: effectiveMinHeight,\n        minWidth: 0,\n        height: \"100%\",\n        display: \"flex\",\n        flexDirection: \"column\",\n      }}\n      blur=\"medium\"\n      elevation={\"level1\"}\n    >\n      {/* Toolbar */}\n      {showToolbar && !compact && (\n        <div\n          className={cn(\n            \"glass-flex glass-items-center glass-justify-between glass-px-3 glass-py-2 glass-border-b glass-border-white/10 glass-surface-dark/30\"\n          )}\n        >\n          <div className={cn(\"glass-flex glass-items-center glass-gap-4\")}>\n            <span\n              className={cn(\n                \"glass-text-sm glass-text-primary-opacity-70 glass-font-medium\"\n              )}\n            >\n              {language.toUpperCase()}\n            </span>\n            {effectiveLineNumbers && (\n              <span\n                className={cn(\"glass-text-xs glass-text-primary-opacity-50\")}\n              >\n                Ln {cursorPosition.line}, Col {cursorPosition.column}\n              </span>\n            )}\n          </div>\n\n          <div className={cn(\"glass-flex glass-items-center glass-gap-2\")}>\n            {!readOnly && (\n              <>\n                <button\n                  className={cn(\n                    \"glass-px-2 glass-py-1 glass-text-xs glass-text-primary-opacity-70 hover:glass-text-primary hover:glass-surface-subtle glass-radius-md glass-transition-colors\"\n                  )}\n                  onClick={(e) => {\n                    const textarea = textareaRef.current;\n                    if (textarea) {\n                      textarea.value = \"\";\n                      setInternalValue(\"\");\n                      onChange?.(\"\");\n                    }\n                  }}\n                >\n                  Clear\n                </button>\n                <button\n                  className={cn(\n                    \"glass-px-2 glass-py-1 glass-text-xs glass-text-primary-opacity-70 hover:glass-text-primary hover:glass-surface-subtle glass-radius-md glass-transition-colors\"\n                  )}\n                  onClick={(e) => {\n                    navigator.clipboard?.writeText(currentValue);\n                  }}\n                >\n                  Copy\n                </button>\n              </>\n            )}\n          </div>\n        </div>\n      )}\n\n      {/* Editor Container */}\n      <div\n        className={cn(\"glass-relative glass-min-h-0 glass-overflow-hidden\")}\n        style={{\n          ...createGlassStyle({ intent: \"neutral\", elevation: \"level1\" }),\n          minHeight: 0,\n          height: \"auto\",\n          flex: \"1 1 auto\",\n        }}\n      >\n        {/* Syntax Highlighted Background */}\n        <pre\n          ref={preRef}\n          className={cn(\n            \"glass-absolute glass-inset-0 glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-pointer-events-none glass-whitespace-pre-wrap glass-break-words\",\n            effectiveLineNumbers ? \"glass-pl-16\" : \"\",\n            wordWrap ? \"glass-break-words\" : \"glass-whitespace-pre\"\n          )}\n          style={{ fontSize: effectiveFontSize, lineHeight, tabSize }}\n        >\n          <code\n            dangerouslySetInnerHTML={{ __html: highlightedCode || placeholder }}\n            className={cn(currentValue ? \"\" : \"glass-text-primary-30\")}\n          />\n        </pre>\n\n        {/* Line Numbers */}\n        {effectiveLineNumbers && (\n          <div\n            className={cn(\n              \"glass-absolute glass-left-0 glass-top-0 glass-bottom-0 glass-w-12 glass-surface-dark/40 glass-border-r glass-border-white/10 glass-p-3 glass-text-right glass-text-secondary glass-text-sm glass-font-mono glass-select-none\"\n            )}\n            style={{ fontSize: effectiveFontSize, lineHeight }}\n          >\n            {lines.map((_, index) => (\n              <div key={index}>{index + 1}</div>\n            ))}\n          </div>\n        )}\n\n        {/* Textarea */}\n        <textarea\n          ref={textareaRef}\n          value={currentValue}\n          onChange={handleChange}\n          onFocus={handleFocus}\n          onBlur={handleBlur}\n          onKeyDown={handleKeyDown}\n          onSelect={updateCursorPosition}\n          onClick={updateCursorPosition}\n          readOnly={readOnly}\n          placeholder={placeholder}\n          className={cn(\n            \"glass-w-full glass-p-3 glass-font-mono glass-text-sm glass-bg-transparent glass-caret-white glass-outline-none glass-resize-none glass-overflow-auto\",\n            wordWrap ? \"glass-break-words\" : \"glass-whitespace-pre\",\n            effectiveLineNumbers ? \"glass-pl-16\" : \"\"\n          )}\n          style={{\n            color: \"transparent\",\n            WebkitTextFillColor: \"transparent\",\n            fontSize: effectiveFontSize,\n            lineHeight,\n            tabSize,\n            minHeight: \"100%\",\n            height: \"100%\",\n          }}\n          spellCheck={false}\n          autoComplete={autoComplete ? \"on\" : \"off\"}\n          autoCorrect=\"off\"\n          autoCapitalize=\"off\"\n        />\n      </div>\n    </OptimizedGlass>\n  );\n};\n\n// Compound component for code editor with file management\nexport const GlassCodeEditorWithFiles: React.FC<{\n  files: { name: string; content: string; language: Language }[];\n  onFileChange?: (filename: string, content: string) => void;\n  className?: string;\n}> = ({ files, onFileChange, className = \"\" }) => {\n  const [activeFile, setActiveFile] = useState(files[0]?.name || \"\");\n\n  const currentFile = files.find((f) => f.name === activeFile) || files[0];\n\n  return (\n    <div className={cn(\"glass-grid glass-grid-cols-4 glass-gap-4\", className)}>\n      {/* File Explorer */}\n      <OptimizedGlass\n        className={cn(\"glass-col-span-1 glass-p-4\")}\n        blur=\"medium\"\n        elevation={\"level1\"}\n      >\n        <h3\n          className={cn(\n            \"glass-text-sm glass-font-semibold glass-text-primary glass-mb-4\"\n          )}\n        >\n          Files\n        </h3>\n        <div className={cn(\"glass-gap-2\")}>\n          {files.map((file: any) => (\n            <button\n              key={file.name}\n              onClick={(e) => setActiveFile(file.name)}\n              className={cn(\n                \"glass-w-full glass-text-left glass-px-3 glass-py-2 glass-radius-md glass-text-sm glass-transition-colors\",\n                activeFile === file.name\n                  ? \"glass-surface-elevated glass-text-primary\"\n                  : \"glass-text-primary-70 glass-hover-text-primary glass-hover-surface-subtle\"\n              )}\n            >\n              {file.name}\n            </button>\n          ))}\n        </div>\n      </OptimizedGlass>\n\n      {/* Code Editor */}\n      <div className={cn(\"glass-col-span-3\")}>\n        {currentFile && (\n          <GlassCodeEditor\n            value={currentFile.content}\n            language={currentFile.language}\n            onChange={(content) => onFileChange?.(currentFile.name, content)}\n          />\n        )}\n      </div>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState, useCallback, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\nexport interface ColorScheme {\n  primary: string;\n  secondary: string;\n  accent: string;\n  neutral: string;\n  success: string;\n  warning: string;\n  error: string;\n  info: string;\n  background: string;\n  surface: string;\n  text: string;\n}\n\nexport interface GlassColorSchemeGeneratorProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Initial color scheme */\n  initialScheme?: Partial<ColorScheme>;\n  /** Whether to show advanced options */\n  advanced?: boolean;\n  /** Whether to generate CSS variables */\n  generateCSS?: boolean;\n  /** Whether to generate Tailwind config */\n  generateTailwind?: boolean;\n  /** Custom className */\n  className?: string;\n  /** Compact preview/card layout */\n  compact?: boolean;\n  /** Bound the generator inside its parent container */\n  contained?: boolean;\n  /** Maximum height for compact/contained generators */\n  maxHeight?: number | string;\n  /** Change handler */\n  onSchemeChange?: (scheme: ColorScheme) => void;\n  /** Export handler */\n  onExport?: (scheme: ColorScheme, format: \"css\" | \"json\" | \"tailwind\") => void;\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\n// Predefined color palettes\nconst predefinedPalettes = {\n  ocean: {\n    primary: \"#0066cc\",\n    secondary: \"#00a3cc\",\n    accent: \"#00ffcc\",\n  },\n  sunset: {\n    primary: \"#ff6b35\",\n    secondary: \"#f7931e\",\n    accent: \"#ffb627\",\n  },\n  forest: {\n    primary: \"#2d5a27\",\n    secondary: \"#4a7c59\",\n    accent: \"#7fb069\",\n  },\n  royal: {\n    primary: \"#4a0e4e\",\n    secondary: \"#7b2cbf\",\n    accent: \"#c77dff\",\n  },\n  minimal: {\n    primary: \"#2c3e50\",\n    secondary: \"#34495e\",\n    accent: \"#ecf0f1\",\n  },\n};\n\nconst GlassColorSchemeGenerator = React.forwardRef<\n  HTMLDivElement,\n  GlassColorSchemeGeneratorProps\n>(\n  (\n    {\n      initialScheme,\n      advanced = false,\n      generateCSS = true,\n      generateTailwind = false,\n      className = \"\",\n      compact = false,\n      contained = false,\n      maxHeight,\n      onSchemeChange,\n      onExport,\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [baseColor, setBaseColor] = useState(\n      initialScheme?.primary || \"#0066cc\"\n    );\n    const [palette, setPalette] =\n      useState<keyof typeof predefinedPalettes>(\"ocean\");\n    const [harmony, setHarmony] = useState<\n      \"analogous\" | \"complementary\" | \"triadic\" | \"monochromatic\"\n    >(\"analogous\");\n\n    // Generate color scheme based on base color and harmony\n    const generateScheme = useCallback(\n      (color: string, harmonyType: typeof harmony): ColorScheme => {\n        // Convert hex to HSL\n        const hexToHsl = (hex: string) => {\n          const r = parseInt(hex.slice(1, 3), 16) / 255;\n          const g = parseInt(hex.slice(3, 5), 16) / 255;\n          const b = parseInt(hex.slice(5, 7), 16) / 255;\n\n          const max = Math.max(r, g, b);\n          const min = Math.min(r, g, b);\n          let h = 0,\n            s = 0,\n            l = (max + min) / 2;\n\n          if (max !== min) {\n            const d = max - min;\n            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n            switch (max) {\n              case r:\n                h = (g - b) / d + (g < b ? 6 : 0);\n                break;\n              case g:\n                h = (b - r) / d + 2;\n                break;\n              case b:\n                h = (r - g) / d + 4;\n                break;\n            }\n            h /= 6;\n          }\n\n          return [h * 360, s * 100, l * 100];\n        };\n\n        // Convert HSL to hex\n        const hslToHex = (h: number, s: number, l: number) => {\n          h /= 360;\n          s /= 100;\n          l /= 100;\n\n          const hue2rgb = (p: number, q: number, t: number) => {\n            if (t < 0) t += 1;\n            if (t > 1) t -= 1;\n            if (t < 1 / 6) return p + (q - p) * 6 * t;\n            if (t < 1 / 2) return q;\n            if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n            return p;\n          };\n\n          let r, g, b;\n          if (s === 0) {\n            r = g = b = l;\n          } else {\n            const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n            const p = 2 * l - q;\n            r = hue2rgb(p, q, h + 1 / 3);\n            g = hue2rgb(p, q, h);\n            b = hue2rgb(p, q, h - 1 / 3);\n          }\n\n          const toHex = (c: number) => {\n            const hex = Math.round(c * 255).toString(16);\n            return hex.length === 1 ? \"0\" + hex : hex;\n          };\n\n          return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n        };\n\n        const [h, s, l] = hexToHsl(color);\n\n        let colors: { primary: string; secondary: string; accent: string };\n\n        switch (harmonyType) {\n          case \"analogous\":\n            colors = {\n              primary: hslToHex(h, s, l),\n              secondary: hslToHex((h + 30) % 360, s, l),\n              accent: hslToHex((h - 30 + 360) % 360, s, l),\n            };\n            break;\n          case \"complementary\":\n            colors = {\n              primary: hslToHex(h, s, l),\n              secondary: hslToHex((h + 180) % 360, s, l),\n              accent: hslToHex((h + 180) % 360, s * 0.8, l * 1.2),\n            };\n            break;\n          case \"triadic\":\n            colors = {\n              primary: hslToHex(h, s, l),\n              secondary: hslToHex((h + 120) % 360, s, l),\n              accent: hslToHex((h + 240) % 360, s, l),\n            };\n            break;\n          case \"monochromatic\":\n          default:\n            colors = {\n              primary: hslToHex(h, s, l),\n              secondary: hslToHex(h, s * 0.6, l * 1.1),\n              accent: hslToHex(h, s * 0.4, l * 1.3),\n            };\n            break;\n        }\n\n        return {\n          ...colors,\n          neutral: hslToHex(h, 10, 50),\n          success: \"hsl(var(--glass-color-success))\",\n          warning: \"hsl(var(--glass-color-warning))\",\n          error: \"hsl(var(--glass-color-danger))\",\n          info: \"hsl(var(--glass-color-primary))\",\n          background: hslToHex(h, 20, 5),\n          surface: hslToHex(h, 15, 10),\n          text: hslToHex(h, 10, 95),\n        };\n      },\n      []\n    );\n\n    const colorScheme = useMemo(\n      () => generateScheme(baseColor, harmony),\n      [baseColor, harmony, generateScheme]\n    );\n    const boundedHeight = maxHeight ?? (compact || contained ? 240 : undefined);\n\n    // Update parent when scheme changes\n    React.useEffect(() => {\n      onSchemeChange?.(colorScheme);\n    }, [colorScheme, onSchemeChange]);\n\n    const handlePredefinedPalette = (\n      paletteName: keyof typeof predefinedPalettes\n    ) => {\n      const paletteColors = predefinedPalettes[paletteName];\n      setPalette(paletteName);\n      setBaseColor(paletteColors.primary);\n    };\n\n    const generateCSSVariables = (scheme: ColorScheme) => {\n      return `:root {\\n${Object.entries(scheme)\n        .map(([key, value]) => `  --color-${key}: ${value};`)\n        .join(\"\\n\")}\\n}`;\n    };\n\n    const generateTailwindConfig = (scheme: ColorScheme) => {\n      return `module.exports = {\\n  theme: {\\n    extend: {\\n      colors: {\\n${Object.entries(\n        scheme\n      )\n        .map(([key, value]) => `        ${key}: '${value}',`)\n        .join(\"\\n\")}\\n      }\\n    }\\n  }\\n}`;\n    };\n\n    const exportScheme = (format: \"css\" | \"json\" | \"tailwind\") => {\n      let content = \"\";\n      let filename = \"\";\n\n      switch (format) {\n        case \"css\":\n          content = generateCSSVariables(colorScheme);\n          filename = \"color-scheme.css\";\n          break;\n        case \"json\":\n          content = JSON.stringify(colorScheme, null, 2);\n          filename = \"color-scheme.json\";\n          break;\n        case \"tailwind\":\n          content = generateTailwindConfig(colorScheme);\n          filename = \"tailwind.config.js\";\n          break;\n      }\n\n      // Create download\n      const blob = new Blob([content], { type: \"text/plain\" });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement(\"a\");\n      a.href = url;\n      a.download = filename;\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n      URL.revokeObjectURL(url);\n\n      onExport?.(colorScheme, format);\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          compact ? \"glass-space-y-3\" : \"space-y-6\",\n          (compact || contained) && \"glass-overflow-auto\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n              }\n            : null),\n          ...(props.style as React.CSSProperties | undefined),\n        }}\n        data-testid={dataTestId}\n        aria-label={ariaLabel || \"Color scheme generator\"}\n        role=\"region\"\n        {...props}\n      >\n        {/* Color Picker Section */}\n        <OptimizedGlass\n          className=\"glass-p-6\"\n          intensity=\"medium\"\n          elevation=\"level1\"\n        >\n          <h3\n            className={cn(\n              \"glass-font-semibold glass-text-primary glass-mb-4\",\n              compact ? \"glass-text-sm\" : \"glass-text-lg\"\n            )}\n          >\n            Base Color\n          </h3>\n\n          <div\n            className={cn(\n              \"glass-grid glass-grid-cols-1\",\n              compact ? \"glass-gap-3\" : \"md:glass-grid-cols-2 glass-gap-6\"\n            )}\n          >\n            {/* Color Input */}\n            <div className=\"glass-gap-4\">\n              <div className=\"glass-flex glass-items-center glass-gap-4\">\n                <input\n                  type=\"color\"\n                  value={normalizeColorInputValue(baseColor)}\n                  onChange={(e) => setBaseColor(e.target.value)}\n                  className={cn(\n                    \"glass-radius-lg glass-border-2 glass-border-white/20 glass-cursor-pointer\",\n                    compact ? \"glass-w-10 glass-h-10\" : \"glass-w-16 glass-h-16\"\n                  )}\n                  aria-label=\"Base color picker\"\n                />\n                <div>\n                  <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                    Hex Color\n                  </label>\n                  <input\n                    type=\"text\"\n                    value={baseColor}\n                    onChange={(e) => setBaseColor(e.target.value)}\n                    className=\"glass-px-3 glass-py-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-md glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none focus:glass-border-white/40\"\n                    placeholder=\"#0066cc\"\n                  />\n                </div>\n              </div>\n\n              {/* Predefined Palettes */}\n              {!compact && (\n                <div>\n                  <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-2\">\n                    Quick Palettes\n                  </label>\n                  <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n                    {Object.entries(predefinedPalettes).map(\n                      ([name, colors]) => (\n                        <button\n                          key={name}\n                          onClick={(e) =>\n                            handlePredefinedPalette(\n                              name as keyof typeof predefinedPalettes\n                            )\n                          }\n                          className={`glass-px-3 glass-py-2 glass-radius-md glass-text-sm font-medium transition-colors ${\n                            palette === name\n                              ? \"bg-white/20 glass-text-primary\"\n                              : \"bg-white/10 glass-text-primary/70 hover:bg-white/15\"\n                          }`}\n                        >\n                          {name.charAt(0).toUpperCase() + name.slice(1)}\n                        </button>\n                      )\n                    )}\n                  </div>\n                </div>\n              )}\n            </div>\n\n            {/* Harmony Selection */}\n            {!compact && (\n              <div className=\"glass-gap-4\">\n                <div>\n                  <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-2\">\n                    Color Harmony\n                  </label>\n                  <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n                    {[\n                      { value: \"analogous\", label: \"Analogous\" },\n                      { value: \"complementary\", label: \"Complementary\" },\n                      { value: \"triadic\", label: \"Triadic\" },\n                      { value: \"monochromatic\", label: \"Monochromatic\" },\n                    ].map(({ value, label }) => (\n                      <button\n                        key={value}\n                        onClick={(e) => setHarmony(value as typeof harmony)}\n                        className={`glass-px-3 glass-py-2 glass-radius-md glass-text-sm font-medium transition-colors ${\n                          harmony === value\n                            ? \"bg-white/20 glass-text-primary\"\n                            : \"bg-white/10 glass-text-primary/70 hover:bg-white/15\"\n                        }`}\n                      >\n                        {label}\n                      </button>\n                    ))}\n                  </div>\n                </div>\n              </div>\n            )}\n          </div>\n        </OptimizedGlass>\n\n        {/* Color Preview */}\n        {!compact && (\n          <OptimizedGlass\n            className=\"glass-p-6\"\n            intensity=\"medium\"\n            elevation=\"level1\"\n          >\n            <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">\n              Color Scheme Preview\n            </h3>\n\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4\">\n              {Object.entries(colorScheme).map(([key, color]) => (\n                <div key={key} className=\"glass-gap-2\">\n                  <div\n                    className=\"glass-w-full glass-h-16 glass-radius-lg glass-border glass-border-white/20\"\n                    style={{ backgroundColor: color }}\n                  />\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-capitalize\">\n                      {key}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-font-mono\">\n                      {color}\n                    </div>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </OptimizedGlass>\n        )}\n\n        {/* Export Options */}\n        {!compact && (\n          <OptimizedGlass\n            className=\"glass-p-6\"\n            intensity=\"medium\"\n            elevation=\"level1\"\n          >\n            <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">\n              Export Options\n            </h3>\n\n            <div className=\"glass-flex glass-flex-wrap glass-gap-3\">\n              {generateCSS && (\n                <button\n                  onClick={(e) => exportScheme(\"css\")}\n                  className=\"glass-px-4 glass-py-2 glass-surface-blue/20 glass-text-secondary glass-radius-md hover:glass-surface-blue/30 glass-transition-colors\"\n                >\n                  Export CSS Variables\n                </button>\n              )}\n              {generateTailwind && (\n                <button\n                  onClick={(e) => exportScheme(\"tailwind\")}\n                  className=\"glass-px-4 glass-py-2 glass-surface-green/20 glass-text-secondary glass-radius-md hover:glass-surface-green/30 glass-transition-colors\"\n                >\n                  Export Tailwind Config\n                </button>\n              )}\n              <button\n                onClick={(e) => exportScheme(\"json\")}\n                className=\"glass-px-4 glass-py-2 glass-surface-primary/20 glass-text-secondary glass-radius-md hover:glass-surface-primary/30 glass-transition-colors\"\n              >\n                Export JSON\n              </button>\n            </div>\n\n            {generateCSS && (\n              <div className=\"glass-mt-4\">\n                <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-2\">\n                  CSS Variables Preview\n                </label>\n                <pre className=\"glass-p-3 glass-surface-dark/20 glass-radius-md glass-text-xs glass-text-primary-glass-opacity-80 glass-overflow-x-auto\">\n                  <code>{generateCSSVariables(colorScheme)}</code>\n                </pre>\n              </div>\n            )}\n          </OptimizedGlass>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassColorSchemeGenerator.displayName = \"GlassColorSchemeGenerator\";\n\nexport { GlassColorSchemeGenerator };\n", "\"use client\";\nimport React, { useState, useEffect, useCallback, forwardRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface A11yIssue {\n  id: string;\n  type: \"error\" | \"warning\" | \"info\";\n  rule: string;\n  message: string;\n  element?: string;\n  line?: number;\n  column?: number;\n  code?: string;\n  suggestion?: string;\n  wcag?: string;\n}\n\nexport interface A11yAuditResult {\n  score: number;\n  issues: A11yIssue[];\n  summary: {\n    errors: number;\n    warnings: number;\n    info: number;\n  };\n  timestamp: number;\n}\n\nexport interface GlassA11yAuditorProps {\n  /** Content to audit */\n  children?: React.ReactNode;\n  /** Whether to show audit panel */\n  showPanel?: boolean;\n  /** Whether to run audit automatically */\n  autoAudit?: boolean;\n  /** Audit rules to check */\n  rules?: string[];\n  /** Custom className */\n  className?: string;\n  /** Audit complete handler */\n  onAuditComplete?: (result: A11yAuditResult) => void;\n  /** Issue click handler */\n  onIssueClick?: (issue: A11yIssue) => void;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  /** Custom ID */\n  id?: string;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the audit panel inside a bounded local surface. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  /** ARIA label */\n  \"aria-label\"?: string;\n  /** Test ID */\n  \"data-testid\"?: string;\n}\n\nconst defaultRules = [\n  \"img-alt\",\n  \"heading-order\",\n  \"color-contrast\",\n  \"aria-label\",\n  \"keyboard-navigation\",\n  \"focus-visible\",\n  \"semantic-html\",\n  \"lang-attribute\",\n  \"aria-describedby\",\n  \"aria-labelledby\",\n];\n\nexport const GlassA11yAuditor = forwardRef<\n  HTMLDivElement,\n  GlassA11yAuditorProps\n>(\n  (\n    {\n      children,\n      showPanel = true,\n      autoAudit = false,\n      rules = defaultRules,\n      className = \"\",\n      onAuditComplete,\n      onIssueClick,\n      respectMotionPreference = true,\n      id,\n      compact = false,\n      contained = false,\n      preview = false,\n      maxHeight,\n      maxWidth,\n      density = \"comfortable\",\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const [isAuditing, setIsAuditing] = useState(false);\n    const [auditResult, setAuditResult] = useState<A11yAuditResult | null>(\n      null\n    );\n    const [selectedIssue, setSelectedIssue] = useState<A11yIssue | null>(null);\n    const [filter, setFilter] = useState<\"all\" | \"error\" | \"warning\" | \"info\">(\n      \"all\"\n    );\n    const [highlightedElement, setHighlightedElement] =\n      useState<Element | null>(null);\n    const prefersReducedMotion = useReducedMotion();\n    const componentId = id || useA11yId(\"a11y-auditor\");\n    const isCompact = compact || preview || density === \"compact\";\n    const bounded = contained || isCompact;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n    // Run accessibility audit\n    const runAudit = useCallback(async () => {\n      setIsAuditing(true);\n\n      try {\n        const issues: A11yIssue[] = [];\n\n        // Check images for alt text\n        if (rules.includes(\"img-alt\")) {\n          const images = document.querySelectorAll(\"img\");\n          images.forEach((img, index) => {\n            if (!img.getAttribute(\"alt\") && !img.getAttribute(\"aria-label\")) {\n              issues.push({\n                id: `img-alt-${index}`,\n                type: \"error\",\n                rule: \"img-alt\",\n                message: \"Image missing alt text\",\n                element: \"img\",\n                code: img.outerHTML.substring(0, 100) + \"...\",\n                suggestion: \"Add alt attribute describing the image content\",\n                wcag: \"1.1.1 Non-text Content\",\n              });\n            }\n          });\n        }\n\n        // Check heading hierarchy\n        if (rules.includes(\"heading-order\")) {\n          const headings = document.querySelectorAll(\"h1, h2, h3, h4, h5, h6\");\n          let lastLevel = 0;\n\n          headings.forEach((heading, index) => {\n            const level = parseInt(heading.tagName.charAt(1));\n            if (level > lastLevel + 1 && lastLevel !== 0) {\n              issues.push({\n                id: `heading-order-${index}`,\n                type: \"warning\",\n                rule: \"heading-order\",\n                message: `Skipped heading level: went from H${lastLevel} to H${level}`,\n                element: heading.tagName.toLowerCase(),\n                code: heading.outerHTML,\n                suggestion: \"Ensure heading hierarchy is sequential\",\n                wcag: \"1.3.1 Info and Relationships\",\n              });\n            }\n            lastLevel = level;\n          });\n        }\n\n        // Check ARIA labels\n        if (rules.includes(\"aria-label\")) {\n          const interactiveElements = document.querySelectorAll(\n            \"button, input, select, textarea, [role]\"\n          );\n          interactiveElements.forEach((element, index) => {\n            const hasLabel =\n              element.getAttribute(\"aria-label\") ||\n              element.getAttribute(\"aria-labelledby\") ||\n              element.textContent?.trim() ||\n              element.getAttribute(\"placeholder\");\n\n            if (!hasLabel && !element.getAttribute(\"aria-hidden\")) {\n              issues.push({\n                id: `aria-label-${index}`,\n                type: \"error\",\n                rule: \"aria-label\",\n                message: \"Interactive element missing accessible label\",\n                element: element.tagName.toLowerCase(),\n                code: element.outerHTML.substring(0, 100) + \"...\",\n                suggestion: \"Add aria-label, aria-labelledby, or visible text\",\n                wcag: \"4.1.2 Name, Role, Value\",\n              });\n            }\n          });\n        }\n\n        // Check focus visibility\n        if (rules.includes(\"focus-visible\")) {\n          const focusableElements = document.querySelectorAll(\n            \"button, input, select, textarea, a, [tabindex]\"\n          );\n          focusableElements.forEach((element, index) => {\n            const computedStyle = window.getComputedStyle(element);\n            const hasVisibleFocus =\n              computedStyle.outline !== \"none\" ||\n              computedStyle.boxShadow !== \"none\" ||\n              element.classList.contains(\"focus-visible\");\n\n            if (!hasVisibleFocus) {\n              issues.push({\n                id: `focus-visible-${index}`,\n                type: \"warning\",\n                rule: \"focus-visible\",\n                message: \"Element may not have visible focus indicator\",\n                element: element.tagName.toLowerCase(),\n                code: element.outerHTML.substring(0, 100) + \"...\",\n                suggestion:\n                  \"Ensure focus is visible when navigating with keyboard\",\n                wcag: \"2.4.7 Focus Visible\",\n              });\n            }\n          });\n        }\n\n        // Check semantic HTML\n        if (rules.includes(\"semantic-html\")) {\n          const divs = document.querySelectorAll(\"div[role]\");\n          divs.forEach((div, index) => {\n            const role = div.getAttribute(\"role\");\n            const semanticAlternatives: Record<string, string> = {\n              button: \"button\",\n              heading: \"h1-h6\",\n              list: \"ul/ol\",\n              listitem: \"li\",\n              navigation: \"nav\",\n              main: \"main\",\n              article: \"article\",\n              section: \"section\",\n            };\n\n            if (role && semanticAlternatives[role]) {\n              issues.push({\n                id: `semantic-html-${index}`,\n                type: \"info\",\n                rule: \"semantic-html\",\n                message: `Consider using semantic ${semanticAlternatives[role]} instead of div[role=\"${role}\"]`,\n                element: \"div\",\n                code: div.outerHTML.substring(0, 100) + \"...\",\n                suggestion: `Replace with <${semanticAlternatives[role]}> element`,\n                wcag: \"1.3.1 Info and Relationships\",\n              });\n            }\n          });\n        }\n\n        // Check language attribute\n        if (rules.includes(\"lang-attribute\")) {\n          const html = document.documentElement;\n          if (!html.getAttribute(\"lang\")) {\n            issues.push({\n              id: \"lang-attribute\",\n              type: \"error\",\n              rule: \"lang-attribute\",\n              message: \"Missing lang attribute on html element\",\n              element: \"html\",\n              suggestion: \"Add lang attribute to specify document language\",\n              wcag: \"3.1.1 Language of Page\",\n            });\n          }\n        }\n\n        // Calculate score (0-100)\n        const errorWeight = 10;\n        const warningWeight = 5;\n        const infoWeight = 1;\n\n        const errors = issues.filter((i: any) => i.type === \"error\").length;\n        const warnings = issues.filter((i: any) => i.type === \"warning\").length;\n        const infos = issues.filter((i: any) => i.type === \"info\").length;\n\n        const totalWeight =\n          errors * errorWeight + warnings * warningWeight + infos * infoWeight;\n        const score = Math.max(0, 100 - totalWeight);\n\n        const result: A11yAuditResult = {\n          score,\n          issues,\n          summary: { errors, warnings, info: infos },\n          timestamp: Date.now(),\n        };\n\n        setAuditResult(result);\n        onAuditComplete?.(result);\n      } catch {\n        // Keep the previous audit result when a transient DOM audit fails.\n      } finally {\n        setIsAuditing(false);\n      }\n    }, [rules, onAuditComplete]);\n\n    // Auto-run audit\n    useEffect(() => {\n      if (autoAudit) {\n        runAudit();\n      }\n    }, [autoAudit, runAudit]);\n\n    // Filter issues\n    const filteredIssues =\n      auditResult?.issues.filter(\n        (issue: any) => filter === \"all\" || issue.type === filter\n      ) || [];\n\n    // Handle issue selection\n    const handleIssueClick = (issue: A11yIssue) => {\n      setSelectedIssue(issue);\n      onIssueClick?.(issue);\n\n      // Try to highlight the element\n      if (issue.element && issue.code) {\n        // Element highlighting with scroll-to-view functionality\n        const elements = document.querySelectorAll(issue.element);\n        if (elements.length > 0) {\n          setHighlightedElement(elements[0] as Element);\n          elements[0].scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n          // Add temporary highlight\n          elements[0].classList.add(\"a11y-highlight\");\n          setTimeout(() => {\n            elements[0].classList.remove(\"a11y-highlight\");\n            setHighlightedElement(null);\n          }, 3000);\n        }\n      }\n    };\n\n    // Get score color\n    const getScoreColor = (score: number) => {\n      if (score >= 90) return \"text-green-400\";\n      if (score >= 70) return \"text-yellow-400\";\n      return \"text-red-400\";\n    };\n\n    // Get issue type color\n    const getIssueTypeColor = (type: A11yIssue[\"type\"]) => {\n      switch (type) {\n        case \"error\":\n          return \"text-red-400 bg-red-500/10 border-red-500/20\";\n        case \"warning\":\n          return \"text-yellow-400 bg-yellow-500/10 border-yellow-500/20\";\n        case \"info\":\n          return \"text-blue-400 bg-blue-500/10 border-blue-500/20\";\n      }\n    };\n\n    if (!showPanel) {\n      return <>{children}</>;\n    }\n\n    return (\n      <Motion preset=\"fadeIn\" className={`flex flex-col h-full ${className}`}>\n        <div\n          ref={ref}\n          id={componentId}\n          className={cn(\n            \"glass-flex glass-flex-col glass-h-full\",\n            bounded && \"glass-overflow-hidden glass-w-full\",\n            isCompact && \"glass-text-sm\",\n            className\n          )}\n          style={{\n            maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n            maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n          }}\n          role=\"application\"\n          aria-label={ariaLabel || \"Accessibility auditing tool\"}\n          aria-describedby={`${componentId}-description`}\n          data-testid={dataTestId}\n          {...props}\n        >\n          <div id={`${componentId}-description`} className=\"glass-sr-only\">\n            Accessibility audit tool for analyzing and improving web\n            accessibility\n          </div>\n          {/* Audit Controls */}\n          <OptimizedGlass\n            className={cn(\n              isCompact ? \"glass-p-3 glass-mb-2\" : \"glass-p-4 glass-mb-4\"\n            )}\n            intensity=\"medium\"\n            elevation=\"level1\"\n          >\n            <div\n              className={cn(\n                \"glass-flex glass-items-center glass-justify-between\",\n                isCompact ? \"glass-mb-2 glass-gap-2\" : \"glass-mb-4\"\n              )}\n            >\n              <h3\n                className={cn(\n                  \"glass-font-semibold glass-text-primary\",\n                  isCompact ? \"glass-text-sm\" : \"glass-text-lg\"\n                )}\n              >\n                {isCompact ? \"A11y Audit\" : \"Accessibility Audit\"}\n              </h3>\n              <button\n                onClick={runAudit}\n                disabled={isAuditing}\n                className={cn(\n                  \"glass-surface-blue/20 glass-text-secondary glass-radius-md hover:glass-surface-blue/30 disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                  isCompact\n                    ? \"glass-px-2 glass-py-1 glass-text-xs\"\n                    : \"glass-px-4 glass-py-2\"\n                )}\n                aria-label={\n                  isAuditing\n                    ? \"Auditing accessibility issues\"\n                    : \"Run accessibility audit\"\n                }\n              >\n                {isAuditing ? \"Auditing...\" : \"Run Audit\"}\n              </button>\n            </div>\n\n            {/* Score Display */}\n            {auditResult && (\n              <div\n                className={cn(\n                  \"glass-grid glass-grid-cols-4\",\n                  isCompact ? \"glass-gap-2\" : \"glass-gap-4\"\n                )}\n              >\n                <div className=\"glass-text-center\">\n                  <div\n                    className={`glass-text-2xl font-bold ${getScoreColor(auditResult.score)}`}\n                  >\n                    {auditResult.score}\n                  </div>\n                  <div className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    Score\n                  </div>\n                </div>\n                <div className=\"glass-text-center\">\n                  <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                    {auditResult.summary.errors}\n                  </div>\n                  <div className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    Errors\n                  </div>\n                </div>\n                <div className=\"glass-text-center\">\n                  <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                    {auditResult.summary.warnings}\n                  </div>\n                  <div className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    Warnings\n                  </div>\n                </div>\n                <div className=\"glass-text-center\">\n                  <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                    {auditResult.summary.info}\n                  </div>\n                  <div className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    Info\n                  </div>\n                </div>\n              </div>\n            )}\n          </OptimizedGlass>\n\n          <div\n            className={cn(\n              \"glass-flex glass-flex-1\",\n              isCompact\n                ? \"glass-flex-col glass-gap-2 glass-min-h-0\"\n                : \"glass-gap-4\"\n            )}\n          >\n            {/* Issues List */}\n            <OptimizedGlass\n              className={cn(\n                \"glass-flex-1 glass-min-h-0\",\n                isCompact ? \"glass-p-3\" : \"glass-p-4\"\n              )}\n              blur=\"medium\"\n              elevation={\"level1\"}\n            >\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-between\",\n                  isCompact ? \"glass-mb-2 glass-gap-2\" : \"glass-mb-4\"\n                )}\n              >\n                <h4\n                  className={cn(\n                    \"glass-font-semibold glass-text-primary\",\n                    isCompact ? \"glass-text-sm\" : \"glass-text-md\"\n                  )}\n                >\n                  Issues\n                </h4>\n                <div\n                  className={cn(\n                    \"glass-flex\",\n                    isCompact ? \"glass-gap-1\" : \"glass-gap-2\"\n                  )}\n                >\n                  {([\"all\", \"error\", \"warning\", \"info\"] as const).map(\n                    (type: any) => (\n                      <button\n                        key={type}\n                        onClick={(e) => setFilter(type)}\n                        className={`${isCompact ? \"glass-px-2\" : \"glass-px-3\"} glass-py-1 glass-text-xs glass-radius-md capitalize transition-colors ${\n                          filter === type\n                            ? \"bg-white/20 glass-text-primary\"\n                            : \"glass-text-primary/70 hover:glass-text-primary hover:bg-white/10\"\n                        }`}\n                      >\n                        {type}\n                      </button>\n                    )\n                  )}\n                </div>\n              </div>\n\n              <div\n                className=\"glass-gap-2 glass-overflow-y-auto\"\n                style={{ maxHeight: isCompact ? 104 : \"24rem\" }}\n              >\n                {filteredIssues.map((issue: any) => (\n                  <button\n                    key={issue.id}\n                    onClick={(e) => handleIssueClick(issue)}\n                    className={`w-full text-left ${isCompact ? \"glass-p-2\" : \"glass-p-3\"} glass-radius-md border transition-colors ${getIssueTypeColor(\n                      issue.type\n                    )} ${selectedIssue?.id === issue.id ? \"ring-2 ring-white/50\" : \"\"}`}\n                  >\n                    <div className=\"glass-flex glass-items-start glass-justify-between\">\n                      <div className=\"glass-flex-1\">\n                        <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-1\">\n                          <span className=\"glass-text-sm glass-font-medium\">\n                            {issue.rule}\n                          </span>\n                          <span className=\"glass-text-xs glass-opacity-70\">\n                            WCAG {issue.wcag}\n                          </span>\n                        </div>\n                        <p className=\"glass-text-sm glass-opacity-90\">\n                          {issue.message}\n                        </p>\n                        {issue.element && (\n                          <code className=\"glass-text-xs glass-opacity-70 glass-surface-dark/20 glass-px-1 glass-py-0.5 glass-radius-md glass-mt-1 glass-inline-glass-block\">\n                            {issue.element}\n                          </code>\n                        )}\n                      </div>\n                    </div>\n                  </button>\n                ))}\n\n                {filteredIssues.length === 0 && (\n                  <div className=\"glass-text-center glass-py-8 glass-text-primary-glass-opacity-50\">\n                    {auditResult\n                      ? \"No issues found!\"\n                      : \"Run audit to check accessibility\"}\n                  </div>\n                )}\n              </div>\n            </OptimizedGlass>\n\n            {/* Issue Details */}\n            {selectedIssue && !isCompact && (\n              <OptimizedGlass\n                className=\"glass-w-80 glass-p-4\"\n                blur=\"medium\"\n                elevation={\"level1\"}\n              >\n                <h4 className=\"glass-text-md glass-font-semibold glass-text-primary glass-mb-4\">\n                  Issue Details\n                </h4>\n\n                <div className=\"glass-gap-4\">\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                      Rule\n                    </label>\n                    <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                      {selectedIssue.rule}\n                    </div>\n                  </div>\n\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                      Type\n                    </label>\n                    <span\n                      className={`glass-px-2 glass-py-1 glass-text-xs glass-radius-md capitalize ${getIssueTypeColor(selectedIssue.type)}`}\n                    >\n                      {selectedIssue.type}\n                    </span>\n                  </div>\n\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                      WCAG Guideline\n                    </label>\n                    <div className=\"glass-text-sm glass-text-primary\">\n                      {selectedIssue.wcag}\n                    </div>\n                  </div>\n\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                      Message\n                    </label>\n                    <p className=\"glass-text-sm glass-text-primary\">\n                      {selectedIssue.message}\n                    </p>\n                  </div>\n\n                  {selectedIssue.suggestion && (\n                    <div>\n                      <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                        Suggestion\n                      </label>\n                      <p className=\"glass-text-sm glass-text-secondary\">\n                        {selectedIssue.suggestion}\n                      </p>\n                    </div>\n                  )}\n\n                  {selectedIssue.code && (\n                    <div>\n                      <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70 glass-mb-1\">\n                        Element Code\n                      </label>\n                      <pre className=\"glass-text-xs glass-surface-dark/20 glass-p-2 glass-radius-md glass-overflow-x-auto\">\n                        <code>{selectedIssue.code}</code>\n                      </pre>\n                    </div>\n                  )}\n                </div>\n              </OptimizedGlass>\n            )}\n          </div>\n\n          {/* Add CSS for element highlighting */}\n          <style>\n            {`\n          .a11y-highlight {\n            outline: 2px solid #ff6b6b !important;\n            outline-offset: 2px !important;\n            animation: a11y-pulse 1s ease-in-out infinite alternate;\n          }\n\n          @keyframes a11y-pulse {\n            from { outline-color: #ff6b6b; }\n            to { outline-color: #ff4444; }\n          }\n        `}\n          </style>\n        </div>\n      </Motion>\n    );\n  }\n);\n\nGlassA11yAuditor.displayName = \"GlassA11yAuditor\";\n\n// Hook for programmatic audit\nexport const useA11yAudit = () => {\n  const [result, setResult] = useState<A11yAuditResult | null>(null);\n  const [isAuditing, setIsAuditing] = useState(false);\n\n  const audit = useCallback(async (rules = defaultRules) => {\n    setIsAuditing(true);\n\n    try {\n      // Simplified audit for programmatic use\n      const issues: A11yIssue[] = [];\n\n      // Programmatic accessibility checks\n      const images = document.querySelectorAll(\"img\");\n      images.forEach((img, index) => {\n        if (!img.getAttribute(\"alt\")) {\n          issues.push({\n            id: `img-${index}`,\n            type: \"error\",\n            rule: \"img-alt\",\n            message: \"Image missing alt text\",\n            element: \"img\",\n            wcag: \"1.1.1\",\n          });\n        }\n      });\n\n      const score = Math.max(0, 100 - issues.length * 10);\n\n      const auditResult: A11yAuditResult = {\n        score,\n        issues,\n        summary: {\n          errors: issues.filter((i: any) => i.type === \"error\").length,\n          warnings: issues.filter((i: any) => i.type === \"warning\").length,\n          info: issues.filter((i: any) => i.type === \"info\").length,\n        },\n        timestamp: Date.now(),\n      };\n\n      setResult(auditResult);\n      return auditResult;\n    } finally {\n      setIsAuditing(false);\n    }\n  }, []);\n\n  return { result, isAuditing, audit };\n};\n", "\"use client\";\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\n\ntype PlaygroundProps = Record<string, unknown> & {\n  children?: React.ReactNode;\n};\ntype PlaygroundComponent = React.ElementType<PlaygroundProps>;\n\nexport interface ComponentExample {\n  id: string;\n  name: string;\n  description?: string;\n  category: string;\n  component: PlaygroundComponent;\n  props?: PlaygroundProps;\n  code?: string;\n}\n\nexport interface PlaygroundTab {\n  id: string;\n  label: string;\n  content: React.ReactNode;\n}\n\nexport interface GlassComponentPlaygroundProps {\n  /** Available component examples */\n  examples: ComponentExample[];\n  /** Default selected example */\n  defaultExample?: string;\n  /** Whether to show code panel */\n  showCode?: boolean;\n  /** Whether to show props panel */\n  showProps?: boolean;\n  /** Custom tabs */\n  customTabs?: PlaygroundTab[];\n  /** Custom className */\n  className?: string;\n  /** Theme for the playground */\n  theme?: \"light\" | \"dark\" | \"auto\";\n  /** Code editor theme */\n  codeTheme?: \"light\" | \"dark\";\n}\n\nexport const GlassComponentPlayground: React.FC<\n  GlassComponentPlaygroundProps\n> = ({\n  examples: incomingExamples = [],\n  defaultExample,\n  showCode = true,\n  showProps = true,\n  customTabs: incomingCustomTabs = [],\n  className = \"\",\n  theme = \"dark\",\n  codeTheme = \"dark\",\n}) => {\n  const examples = Array.isArray(incomingExamples) ? incomingExamples : [];\n  const customTabs = Array.isArray(incomingCustomTabs)\n    ? incomingCustomTabs\n    : [];\n  const defaultExampleId =\n    defaultExample && examples.some((ex) => ex.id === defaultExample)\n      ? defaultExample\n      : examples[0]?.id || \"\";\n\n  const [selectedExample, setSelectedExample] =\n    useState<string>(defaultExampleId);\n  const [activeTab, setActiveTab] = useState<\n    \"preview\" | \"code\" | \"props\" | string\n  >(\"preview\");\n  const [componentProps, setComponentProps] = useState<PlaygroundProps>({});\n  const [componentCode, setComponentCode] = useState<string>(\"\");\n  const [categories, setCategories] = useState<string[]>([]);\n  const [selectedCategory, setSelectedCategory] = useState<string>(\"all\");\n\n  useEffect(() => {\n    if (!examples.some((ex) => ex.id === selectedExample)) {\n      setSelectedExample(examples[0]?.id || \"\");\n    }\n  }, [examples, selectedExample]);\n\n  // Group examples by category\n  useEffect(() => {\n    const uniqueCategories = Array.from(\n      new Set(examples.map((ex) => ex.category))\n    );\n    setCategories(uniqueCategories);\n  }, [examples]);\n\n  // Update component props and code when example changes\n  useEffect(() => {\n    const example = examples.find((ex) => ex.id === selectedExample);\n    if (example) {\n      setComponentProps(example.props || {});\n      setComponentCode(\n        example.code ||\n          generateCodeFromProps(example.component, example.props || {})\n      );\n    }\n  }, [selectedExample, examples]);\n\n  // Generate code from component and props\n  const generateCodeFromProps = useCallback(\n    (component: PlaygroundComponent, props: PlaygroundProps): string => {\n      const namedComponent =\n        typeof component === \"string\"\n          ? { displayName: component, name: component }\n          : (component as { displayName?: string; name?: string });\n      const componentName =\n        namedComponent.displayName || namedComponent.name || \"Component\";\n      const propsString = Object.entries(props)\n        .map(([key, value]) => {\n          if (typeof value === \"string\") {\n            return `${key}=\"${value}\"`;\n          } else if (typeof value === \"boolean\") {\n            return value ? key : `${key}={false}`;\n          } else if (typeof value === \"number\") {\n            return `${key}={${value}}`;\n          } else if (Array.isArray(value)) {\n            return `${key}={${JSON.stringify(value)}}`;\n          } else if (typeof value === \"object\") {\n            return `${key}={${JSON.stringify(value, null, 2)}}`;\n          }\n          return `${key}={${String(value)}}`;\n        })\n        .join(\"\\n  \");\n\n      return `<${componentName}${propsString ? `\\n  ${propsString}` : \"\"}\\n/>`;\n    },\n    []\n  );\n\n  // Handle prop change\n  const handlePropChange = useCallback(\n    (propName: string, value: unknown) => {\n      setComponentProps((prev) => ({\n        ...prev,\n        [propName]: value,\n      }));\n\n      const example = examples.find((ex) => ex.id === selectedExample);\n      if (example) {\n        const newCode = generateCodeFromProps(example.component, {\n          ...componentProps,\n          [propName]: value,\n        });\n        setComponentCode(newCode);\n      }\n    },\n    [componentProps, selectedExample, examples, generateCodeFromProps]\n  );\n\n  // Filter examples by category\n  const filteredExamples =\n    selectedCategory === \"all\"\n      ? examples\n      : examples.filter((ex) => ex.category === selectedCategory);\n\n  const currentExample = examples.find((ex) => ex.id === selectedExample);\n  const PreviewComponent = currentExample?.component;\n\n  // Render prop editor\n  const renderPropEditor = () => {\n    if (!showProps || !currentExample) return null;\n\n    const propKeys = Object.keys(componentProps);\n\n    return (\n      <div data-glass-component className=\"glass-gap-4\">\n        <h4 className=\"glass-text-sm glass-font-semibold glass-text-primary glass-mb-3\">\n          Component Props\n        </h4>\n\n        {propKeys.length === 0 ? (\n          <p className=\"glass-text-sm glass-text-primary-glass-opacity-50\">\n            No editable props available\n          </p>\n        ) : (\n          propKeys.map((propName) => {\n            const value = componentProps[propName];\n\n            return (\n              <div key={propName} className=\"glass-gap-2\">\n                <label className=\"glass-block glass-text-sm glass-text-primary-opacity-70\">\n                  {propName} ({typeof value})\n                </label>\n\n                {typeof value === \"string\" && (\n                  <input\n                    type=\"text\"\n                    value={value}\n                    onChange={(e) => handlePropChange(propName, e.target.value)}\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-md glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none focus:glass-border-white/40 glass-focus glass-touch-target glass-contrast-guard\"\n                  />\n                )}\n\n                {typeof value === \"number\" && (\n                  <input\n                    type=\"number\"\n                    value={value}\n                    onChange={(e) =>\n                      handlePropChange(propName, Number(e.target.value))\n                    }\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-md glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none focus:glass-border-white/40 glass-focus glass-touch-target glass-contrast-guard\"\n                  />\n                )}\n\n                {typeof value === \"boolean\" && (\n                  <label className=\"glass-flex glass-items-center glass-gap-2 glass-cursor-pointer\">\n                    <input\n                      type=\"checkbox\"\n                      checked={value}\n                      onChange={(e) =>\n                        handlePropChange(propName, e.target.checked)\n                      }\n                      className=\"glass-radius-md glass-border-white/20 glass-text-primary glass-focus-ring-blue-500 glass-focus glass-touch-target glass-contrast-guard\"\n                    />\n                    <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n                      {value ? \"True\" : \"False\"}\n                    </span>\n                  </label>\n                )}\n\n                {(typeof value === \"object\" || Array.isArray(value)) && (\n                  <textarea\n                    value={JSON.stringify(value, null, 2)}\n                    onChange={(e) => {\n                      try {\n                        const parsed = JSON.parse(e.target.value) as unknown;\n                        handlePropChange(propName, parsed);\n                      } catch (err) {\n                        // Invalid JSON, don't update\n                      }\n                    }}\n                    rows={4}\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-md glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none focus:glass-border-white/40 glass-font-mono glass-text-sm\"\n                  />\n                )}\n              </div>\n            );\n          })\n        )}\n      </div>\n    );\n  };\n\n  return (\n    <OptimizedGlass\n      className={`flex flex-col h-full min-w-0 min-h-0 ${className}`}\n      intent=\"neutral\"\n      elevation=\"level1\"\n    >\n      {/* Header */}\n      <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3 glass-p-4 glass-border-b glass-border-white/10\">\n        <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n          Component Playground\n        </h2>\n\n        <div className=\"glass-flex glass-items-center glass-gap-4\">\n          {/* Category Filter */}\n          <select\n            value={selectedCategory}\n            onChange={(e) => setSelectedCategory(e.target.value)}\n            className=\"glass-px-3 glass-py-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-md glass-text-primary glass-focus-outline-none focus:glass-border-white/40 glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <option value=\"all\">All Categories</option>\n            {categories.map((category) => (\n              <option key={category} value={category}>\n                {category.charAt(0).toUpperCase() + category.slice(1)}\n              </option>\n            ))}\n          </select>\n        </div>\n      </div>\n\n      <div className=\"glass-flex glass-flex-1 glass-min-h-0 glass-min-w-0 glass-flex-col md:flex-row\">\n        {/* Sidebar - Component List */}\n        <div className=\"glass-w-full md:glass-w-64 md:glass-flex-shrink-0 max-h-56 md:max-h-none glass-border-r glass-border-white/10 glass-p-4 glass-overflow-y-auto\">\n          <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary glass-mb-4\">\n            Components\n          </h3>\n\n          <div className=\"glass-gap-2\">\n            {filteredExamples.map((example) => (\n              <button\n                key={example.id}\n                onClick={() => setSelectedExample(example.id)}\n                className={`w-full text-left glass-p-3 glass-radius-md transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n                  selectedExample === example.id\n                    ? \"bg-white/20 glass-text-primary\"\n                    : \"glass-text-primary/70 hover:glass-text-primary hover:bg-white/10\"\n                }`}\n              >\n                <div className=\"glass-font-medium glass-text-sm\">\n                  {example.name}\n                </div>\n                {example.description && (\n                  <div className=\"glass-text-xs glass-opacity-70 glass-mt-1\">\n                    {example.description}\n                  </div>\n                )}\n                <div className=\"glass-text-xs glass-opacity-50 glass-mt-1 glass-capitalize\">\n                  {example.category}\n                </div>\n              </button>\n            ))}\n          </div>\n        </div>\n\n        {/* Main Content */}\n        <div className=\"glass-flex-1 glass-min-w-0 glass-min-h-0 glass-flex glass-flex-col\">\n          {/* Tabs */}\n          <div className=\"glass-flex glass-flex-wrap glass-border-b glass-border-white/10\">\n            <button\n              onClick={() => setActiveTab(\"preview\")}\n              className={`glass-px-4 glass-py-3 glass-text-sm font-medium transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n                activeTab === \"preview\"\n                  ? \"glass-text-primary border-b-2 border-blue-400\"\n                  : \"glass-text-primary/70 hover:glass-text-primary\"\n              }`}\n            >\n              Preview\n            </button>\n\n            {showCode && (\n              <button\n                onClick={() => setActiveTab(\"code\")}\n                className={`glass-px-4 glass-py-3 glass-text-sm font-medium transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n                  activeTab === \"code\"\n                    ? \"glass-text-primary border-b-2 border-blue-400\"\n                    : \"glass-text-primary/70 hover:glass-text-primary\"\n                }`}\n              >\n                Code\n              </button>\n            )}\n\n            {showProps && (\n              <button\n                onClick={() => setActiveTab(\"props\")}\n                className={`glass-px-4 glass-py-3 glass-text-sm font-medium transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n                  activeTab === \"props\"\n                    ? \"glass-text-primary border-b-2 border-blue-400\"\n                    : \"glass-text-primary/70 hover:glass-text-primary\"\n                }`}\n              >\n                Props\n              </button>\n            )}\n\n            {/* Custom Tabs */}\n            {customTabs.map((tab) => (\n              <button\n                key={tab.id}\n                onClick={() => setActiveTab(tab.id)}\n                className={`glass-px-4 glass-py-3 glass-text-sm font-medium transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n                  activeTab === tab.id\n                    ? \"glass-text-primary border-b-2 border-blue-400\"\n                    : \"glass-text-primary/70 hover:glass-text-primary\"\n                }`}\n              >\n                {tab.label}\n              </button>\n            ))}\n          </div>\n\n          {/* Tab Content */}\n          <div className=\"glass-flex-1 glass-min-h-0 glass-overflow-auto\">\n            {/* Preview Tab */}\n            {activeTab === \"preview\" && (\n              <div className=\"glass-min-h-full glass-p-6\">\n                <div className=\"glass-max-w-4xl glass-mx-auto\">\n                  {currentExample && PreviewComponent ? (\n                    <div className=\"glass-space-y-6\">\n                      <div>\n                        <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-2\">\n                          {currentExample.name}\n                        </h3>\n                        {currentExample.description && (\n                          <p className=\"glass-text-primary-opacity-70\">\n                            {currentExample.description}\n                          </p>\n                        )}\n                      </div>\n\n                      {/* Component Preview */}\n                      <OptimizedGlass\n                        className=\"glass-p-6 glass-min-glass-h-64 glass-flex glass-items-center glass-justify-center\"\n                        blur=\"subtle\"\n                        elevation=\"level1\"\n                      >\n                        <PreviewComponent {...componentProps} />\n                      </OptimizedGlass>\n                    </div>\n                  ) : (\n                    <div className=\"glass-flex glass-items-center glass-justify-center glass-h-64 glass-text-primary-glass-opacity-50\">\n                      Select a component to preview\n                    </div>\n                  )}\n                </div>\n              </div>\n            )}\n\n            {/* Code Tab */}\n            {activeTab === \"code\" && showCode && (\n              <div className=\"glass-min-h-full glass-p-6\">\n                <div className=\"glass-gap-4\">\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                      Generated Code\n                    </h3>\n                    <button\n                      onClick={() =>\n                        navigator.clipboard?.writeText(componentCode)\n                      }\n                      className=\"glass-px-3 glass-py-1 glass-text-sm glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      Copy\n                    </button>\n                  </div>\n\n                  <pre className=\"glass-p-4 glass-surface-dark/20 glass-radius-md glass-overflow-x-auto\">\n                    <code className=\"glass-text-sm glass-text-primary glass-font-mono glass-whitespace-pre-wrap\">\n                      {componentCode}\n                    </code>\n                  </pre>\n                </div>\n              </div>\n            )}\n\n            {/* Props Tab */}\n            {activeTab === \"props\" && showProps && (\n              <div className=\"glass-min-h-full glass-p-6\">\n                {renderPropEditor()}\n              </div>\n            )}\n\n            {/* Custom Tab Content */}\n            {customTabs.map((tab) =>\n              activeTab === tab.id ? (\n                <div key={tab.id} className=\"glass-min-h-full glass-p-6\">\n                  {tab.content}\n                </div>\n              ) : null\n            )}\n          </div>\n        </div>\n      </div>\n    </OptimizedGlass>\n  );\n};\n\n// Utility hook for creating playground examples\nexport const usePlaygroundExample = (\n  component: PlaygroundComponent,\n  defaultProps: PlaygroundProps = {}\n) => {\n  const [props, setProps] = useState<PlaygroundProps>(defaultProps);\n\n  const updateProp = useCallback((propName: string, value: unknown) => {\n    setProps((prev) => ({\n      ...prev,\n      [propName]: value,\n    }));\n  }, []);\n\n  const resetProps = useCallback(() => {\n    setProps(defaultProps);\n  }, [defaultProps]);\n\n  return {\n    props,\n    updateProp,\n    resetProps,\n    component,\n  };\n};\n\n// Example usage helper\nexport const createPlaygroundExample = (\n  id: string,\n  name: string,\n  component: PlaygroundComponent,\n  options: {\n    category?: string;\n    description?: string;\n    defaultProps?: PlaygroundProps;\n  } = {}\n): ComponentExample => {\n  const { category = \"general\", description, defaultProps = {} } = options;\n\n  return {\n    id,\n    name,\n    description,\n    category,\n    component,\n    props: defaultProps,\n  };\n};\n", "\"use client\";\nimport React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\n\nexport interface MindMapNode {\n  id: string;\n  label: string;\n  children?: MindMapNode[];\n  color?: string;\n  position?: { x: number; y: number };\n  size?: \"sm\" | \"md\" | \"lg\";\n  shape?: \"circle\" | \"rectangle\" | \"diamond\";\n  icon?: React.ReactNode;\n  data?: unknown;\n}\n\nexport interface MindMapConnection {\n  from: string;\n  to: string;\n  label?: string;\n  type?: \"solid\" | \"dashed\" | \"dotted\";\n  color?: string;\n}\n\nexport interface GlassMindMapProps {\n  /** Root node of the mind map */\n  data: MindMapNode;\n  /** Custom connections between nodes */\n  connections?: MindMapConnection[];\n  /** Whether nodes are editable */\n  editable?: boolean;\n  /** Whether to show mini-map */\n  showMinimap?: boolean;\n  /** Whether to enable zoom and pan */\n  zoomable?: boolean;\n  /** Layout direction */\n  direction?: \"horizontal\" | \"vertical\" | \"radial\";\n  /** Node spacing */\n  nodeSpacing?: number;\n  /** Custom className */\n  className?: string;\n  /** Node click handler */\n  onNodeClick?: (node: MindMapNode) => void;\n  /** Node double-click handler */\n  onNodeDoubleClick?: (node: MindMapNode) => void;\n  /** Node change handler (for editing) */\n  onNodeChange?: (nodeId: string, changes: Partial<MindMapNode>) => void;\n  /** Node add handler */\n  onNodeAdd?: (parentId: string, newNode: MindMapNode) => void;\n  /** Node delete handler */\n  onNodeDelete?: (nodeId: string) => void;\n}\n\ninterface PositionedNode extends MindMapNode {\n  position: { x: number; y: number };\n  level: number;\n  parentId?: string;\n}\n\nexport const GlassMindMap: React.FC<GlassMindMapProps> = ({\n  data,\n  connections = [],\n  editable = false,\n  showMinimap = false,\n  zoomable = true,\n  direction = \"horizontal\",\n  nodeSpacing = 120,\n  className = \"\",\n  onNodeClick,\n  onNodeDoubleClick,\n  onNodeChange,\n  onNodeAdd,\n  onNodeDelete,\n}) => {\n  const [selectedNode, setSelectedNode] = useState<string | null>(null);\n  const [draggedNode, setDraggedNode] = useState<string | null>(null);\n  const [zoom, setZoom] = useState(1);\n  const [pan, setPan] = useState({ x: 0, y: 0 });\n  const [isPanning, setIsPanning] = useState(false);\n  const [editingNode, setEditingNode] = useState<string | null>(null);\n  const [editValue, setEditValue] = useState(\"\");\n\n  const svgRef = useRef<SVGSVGElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const dragStartRef = useRef<{ x: number; y: number } | null>(null);\n\n  // Calculate positions for all nodes\n  const calculatePositions = useCallback(\n    (node: MindMapNode): PositionedNode[] => {\n      const positionedNodes: PositionedNode[] = [];\n      const spacing = Math.max(nodeSpacing, 150);\n      const rowSpacing = 88;\n      const root = { x: 80, y: 180 };\n\n      const visit = (\n        current: MindMapNode,\n        level: number,\n        siblingIndex: number,\n        siblingCount: number,\n        parentId: string | undefined,\n        parentPosition: { x: number; y: number }\n      ) => {\n        const offset = (siblingIndex - (siblingCount - 1) / 2) * rowSpacing;\n        let position = current.position;\n\n        if (!position) {\n          if (direction === \"vertical\") {\n            position = {\n              x: parentPosition.x + offset,\n              y: root.y + level * spacing,\n            };\n          } else if (direction === \"radial\" && level > 0) {\n            const angle = (siblingIndex / siblingCount) * Math.PI * 2;\n            const radius = spacing * level;\n            position = {\n              x: root.x + Math.cos(angle) * radius,\n              y: root.y + Math.sin(angle) * radius,\n            };\n          } else {\n            position = {\n              x: root.x + level * spacing,\n              y: parentPosition.y + offset,\n            };\n          }\n        }\n\n        const positionedNode: PositionedNode = {\n          ...current,\n          position,\n          level,\n          parentId,\n        };\n\n        positionedNodes.push(positionedNode);\n\n        current.children?.forEach((child, index) => {\n          visit(\n            child,\n            level + 1,\n            index,\n            current.children?.length || 1,\n            current.id,\n            position\n          );\n        });\n      };\n\n      visit(node, 0, 0, 1, undefined, root);\n      return positionedNodes;\n    },\n    [direction, nodeSpacing]\n  );\n\n  const positionedNodes = calculatePositions(data);\n  const svgViewBox = useMemo(() => {\n    if (positionedNodes.length === 0) return \"-40 0 760 320\";\n\n    const minX = Math.min(...positionedNodes.map((node) => node.position.x));\n    const minY = Math.min(...positionedNodes.map((node) => node.position.y));\n    const maxX = Math.max(\n      ...positionedNodes.map((node) => node.position.x + 140)\n    );\n    const maxY = Math.max(\n      ...positionedNodes.map((node) => node.position.y + 80)\n    );\n    const width = Math.max(360, maxX - minX + 160);\n    const height = Math.max(240, maxY - minY + 140);\n\n    return `${minX - 80} ${minY - 70} ${width} ${height}`;\n  }, [positionedNodes]);\n\n  // Handle node click\n  const handleNodeClick = (node: PositionedNode) => {\n    setSelectedNode(node.id);\n    onNodeClick?.(node);\n  };\n\n  // Handle node double click\n  const handleNodeDoubleClick = (node: PositionedNode) => {\n    if (editable) {\n      setEditingNode(node.id);\n      setEditValue(node.label);\n    }\n    onNodeDoubleClick?.(node);\n  };\n\n  // Handle editing\n  const handleEditSubmit = () => {\n    if (editingNode && editValue.trim()) {\n      onNodeChange?.(editingNode, { label: editValue.trim() });\n    }\n    setEditingNode(null);\n    setEditValue(\"\");\n  };\n\n  const handleEditCancel = () => {\n    setEditingNode(null);\n    setEditValue(\"\");\n  };\n\n  // Handle drag and drop\n  const handleMouseDown = (e: React.MouseEvent, nodeId: string) => {\n    if (!editable) return;\n    setDraggedNode(nodeId);\n    dragStartRef.current = { x: e.clientX, y: e.clientY };\n  };\n\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (!draggedNode || !dragStartRef.current) return;\n\n      const deltaX = e.clientX - dragStartRef.current.x;\n      const deltaY = e.clientY - dragStartRef.current.y;\n\n      const node = positionedNodes.find((n) => n.id === draggedNode);\n      if (node) {\n        onNodeChange?.(draggedNode, {\n          position: {\n            x: node.position.x + deltaX,\n            y: node.position.y + deltaY,\n          },\n        });\n      }\n    },\n    [draggedNode, positionedNodes, onNodeChange]\n  );\n\n  const handleMouseUp = useCallback(() => {\n    setDraggedNode(null);\n    dragStartRef.current = null;\n  }, []);\n\n  // Handle zoom and pan\n  const handleWheel = (e: React.WheelEvent) => {\n    if (!zoomable) return;\n\n    e.preventDefault();\n    const zoomFactor = e.deltaY > 0 ? 0.9 : 1.1;\n    const newZoom = Math.max(0.1, Math.min(3, zoom * zoomFactor));\n    setZoom(newZoom);\n  };\n\n  const handlePanStart = (e: React.MouseEvent) => {\n    if (!zoomable) return;\n    setIsPanning(true);\n    dragStartRef.current = { x: e.clientX - pan.x, y: e.clientY - pan.y };\n  };\n\n  const handlePanMove = useCallback(\n    (e: MouseEvent) => {\n      if (!isPanning || !dragStartRef.current) return;\n      setPan({\n        x: e.clientX - dragStartRef.current.x,\n        y: e.clientY - dragStartRef.current.y,\n      });\n    },\n    [isPanning]\n  );\n\n  const handlePanEnd = useCallback(() => {\n    setIsPanning(false);\n    dragStartRef.current = null;\n  }, []);\n\n  // Event listeners\n  useEffect(() => {\n    if (draggedNode) {\n      document.addEventListener(\"mousemove\", handleMouseMove);\n      document.addEventListener(\"mouseup\", handleMouseUp);\n    }\n\n    if (isPanning) {\n      document.addEventListener(\"mousemove\", handlePanMove);\n      document.addEventListener(\"mouseup\", handlePanEnd);\n    }\n\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.removeEventListener(\"mousemove\", handlePanMove);\n      document.removeEventListener(\"mouseup\", handlePanEnd);\n    };\n  }, [\n    draggedNode,\n    isPanning,\n    handleMouseMove,\n    handleMouseUp,\n    handlePanMove,\n    handlePanEnd,\n  ]);\n\n  // Render connection lines\n  const renderConnections = () => {\n    const lines: JSX.Element[] = [];\n\n    const addConnection = (\n      fromNode: PositionedNode,\n      toNode: PositionedNode\n    ) => {\n      const connection = connections.find(\n        (c) => c.from === fromNode.id && c.to === toNode.id\n      );\n      const color = connection?.color || \"rgba(255, 255, 255, 0.28)\";\n      const strokeDasharray =\n        connection?.type === \"dashed\"\n          ? \"5,5\"\n          : connection?.type === \"dotted\"\n            ? \"2,2\"\n            : \"none\";\n\n      lines.push(\n        <line\n          key={`${fromNode.id}-${toNode.id}`}\n          x1={fromNode.position.x + 50}\n          y1={fromNode.position.y + 25}\n          x2={toNode.position.x + 50}\n          y2={toNode.position.y + 25}\n          stroke={color}\n          strokeWidth=\"2\"\n          strokeDasharray={strokeDasharray}\n          markerEnd=\"url(#arrowhead)\"\n        />\n      );\n\n      if (connection?.label) {\n        const midX = (fromNode.position.x + toNode.position.x) / 2 + 50;\n        const midY = (fromNode.position.y + toNode.position.y) / 2 + 25;\n\n        lines.push(\n          <text\n            key={`${fromNode.id}-${toNode.id}-label`}\n            x={midX}\n            y={midY - 5}\n            textAnchor=\"middle\"\n            className=\"glass-text-xs glass-fill-white/70\"\n          >\n            {connection.label}\n          </text>\n        );\n      }\n    };\n\n    // Add connections from custom connections array\n    connections.forEach((conn: any) => {\n      const fromNode = positionedNodes.find((n) => n.id === conn.from);\n      const toNode = positionedNodes.find((n) => n.id === conn.to);\n      if (fromNode && toNode) {\n        addConnection(fromNode, toNode);\n      }\n    });\n\n    // Add default parent-child connections\n    const addParentChildConnections = (node: PositionedNode) => {\n      node.children?.forEach((child: any) => {\n        const childNode = positionedNodes.find((n) => n.id === child.id);\n        if (childNode) {\n          addConnection(node, childNode);\n          addParentChildConnections(childNode);\n        }\n      });\n    };\n    addParentChildConnections(positionedNodes[0]);\n\n    return lines;\n  };\n\n  // Render nodes\n  const renderNodes = () => {\n    return positionedNodes.map((node: any) => {\n      const isSelected = selectedNode === node.id;\n      const isEditing = editingNode === node.id;\n      const isDragged = draggedNode === node.id;\n\n      const nodeSize = node.size === \"lg\" ? 92 : node.size === \"sm\" ? 58 : 74;\n      const nodeHeight = nodeSize * 0.5;\n      const fill = node.color || \"rgba(14, 25, 46, 0.86)\";\n      const stroke = isSelected\n        ? \"rgba(109, 211, 255, 0.72)\"\n        : \"rgba(255, 255, 255, 0.22)\";\n\n      let nodeElement;\n\n      if (isEditing) {\n        nodeElement = (\n          <foreignObject\n            x={node.position.x}\n            y={node.position.y}\n            width={nodeSize}\n            height={nodeHeight}\n          >\n            <input\n              autoFocus\n              value={editValue}\n              onChange={(e) => setEditValue(e.target.value)}\n              onKeyDown={(e) => {\n                if (e.key === \"Enter\") handleEditSubmit();\n                if (e.key === \"Escape\") handleEditCancel();\n              }}\n              onBlur={handleEditSubmit}\n              className=\"glass-w-full glass-h-full glass-px-2 glass-py-1 glass-bg-transparent glass-border glass-border-white/30 glass-radius-md glass-text-primary glass-text-sm glass-focus-outline-none focus:glass-border-white/60 glass-focus glass-touch-target glass-contrast-guard\"\n            />\n          </foreignObject>\n        );\n      } else {\n        let shapeElement;\n        switch (node.shape) {\n          case \"rectangle\":\n            shapeElement = (\n              <rect\n                x={node.position.x}\n                y={node.position.y}\n                width={nodeSize}\n                height={nodeHeight}\n                rx=\"8\"\n                fill={fill}\n                stroke={stroke}\n                strokeWidth={isSelected ? \"2\" : \"1\"}\n              />\n            );\n            break;\n          case \"diamond\":\n            const centerX = node.position.x + nodeSize / 2;\n            const centerY = node.position.y + nodeHeight / 2;\n            shapeElement = (\n              <polygon\n                points={`${centerX},${centerY - nodeHeight / 2} ${centerX + nodeSize / 2},${centerY} ${centerX},${centerY + nodeHeight / 2} ${centerX - nodeSize / 2},${centerY}`}\n                fill={fill}\n                stroke={stroke}\n                strokeWidth={isSelected ? \"2\" : \"1\"}\n              />\n            );\n            break;\n          default: // circle\n            shapeElement = (\n              <circle\n                cx={node.position.x + nodeSize / 2}\n                cy={node.position.y + nodeHeight / 2}\n                r={Math.min(nodeSize, nodeHeight) / 2}\n                fill={fill}\n                stroke={stroke}\n                strokeWidth={isSelected ? \"2\" : \"1\"}\n              />\n            );\n        }\n\n        nodeElement = (\n          <g\n            className={cn(\n              \"glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\",\n              isDragged ? \"glass-cursor-grabbing\" : \"glass-cursor-grab\"\n            )}\n            onMouseDown={(e) => handleMouseDown(e, node.id)}\n            onClick={(e) => handleNodeClick(node)}\n            onDoubleClick={() => handleNodeDoubleClick(node)}\n          >\n            {shapeElement}\n            <text\n              x={node.position.x + nodeSize / 2}\n              y={node.position.y + nodeHeight / 2 + 4}\n              textAnchor=\"middle\"\n              className=\"glass-text-sm glass-fill-white glass-font-medium glass-pointer-events-none glass-select-none\"\n              fill=\"rgba(255, 255, 255, 0.94)\"\n            >\n              {node.icon && (\n                <tspan x={node.position.x + nodeSize / 2 - 15}>\n                  {node.icon}\n                </tspan>\n              )}\n              <tspan\n                x={\n                  node.icon\n                    ? node.position.x + nodeSize / 2 + 15\n                    : node.position.x + nodeSize / 2\n                }\n              >\n                {node.label}\n              </tspan>\n            </text>\n          </g>\n        );\n      }\n\n      return <g key={node.id}>{nodeElement}</g>;\n    });\n  };\n\n  return (\n    <OptimizedGlass\n      data-glass-component\n      className={cn(\n        \"glass-mind-map glass-relative glass-overflow-hidden glass-max-w-full glass-surface-dark/30 glass-border glass-border-white/10\",\n        className\n      )}\n      intensity=\"subtle\"\n      elevation=\"level1\"\n      style={{\n        width: \"100%\",\n        height: \"clamp(200px, 32vw, 300px)\",\n        maxWidth: \"100%\",\n        boxSizing: \"border-box\",\n        background:\n          \"var(--glass-primary-level3-surface)\",\n      }}\n    >\n      {/* Toolbar */}\n      <div className=\"glass-absolute glass-top-2 glass-left-2 glass-z-10 glass-flex glass-gap-2\">\n        <OptimizedGlass\n          className=\"glass-px-2 glass-py-1 glass-radius-md glass-text-xs glass-cursor-pointer glass-surface-dark/40 hover:glass-surface-subtle/10 glass-focus glass-touch-target glass-contrast-guard\"\n          intensity=\"subtle\"\n          onClick={(e: React.MouseEvent) => setZoom(1)}\n        >\n          Reset Zoom\n        </OptimizedGlass>\n        <OptimizedGlass\n          className=\"glass-px-2 glass-py-1 glass-radius-md glass-text-xs glass-surface-dark/40\"\n          intensity=\"subtle\"\n        >\n          Zoom: {(zoom * 100).toFixed(0)}%\n        </OptimizedGlass>\n      </div>\n\n      {/* Mini-map */}\n      {showMinimap && (\n        <div className=\"glass-absolute glass-bottom-4 glass-right-4 glass-z-10 glass-w-32 glass-h-24 glass-surface-dark/20 glass-radius-md glass-border glass-border-white/20\">\n          <svg className=\"glass-w-full glass-h-full\" viewBox=\"0 0 320 240\">\n            {positionedNodes.map((node: any) => (\n              <circle\n                key={`mini-${node.id}`}\n                cx={(node.position.x + 160) / 3}\n                cy={(node.position.y + 120) / 3}\n                r=\"2\"\n                fill=\"rgba(255, 255, 255, 0.48)\"\n              />\n            ))}\n          </svg>\n        </div>\n      )}\n\n      {/* Main SVG Canvas */}\n      <div\n        ref={containerRef}\n        className=\"glass-overflow-auto\"\n        onWheel={handleWheel}\n        onMouseDown={handlePanStart}\n        style={{\n          width: \"100%\",\n          height: \"100%\",\n          minWidth: 0,\n          minHeight: 0,\n          cursor: isPanning ? \"grabbing\" : \"grab\",\n          background:\n            \"var(--glass-neutral-level2-surface)\",\n        }}\n      >\n        <svg\n          ref={svgRef}\n          className=\"glass-w-full glass-h-full\"\n          viewBox={svgViewBox}\n          preserveAspectRatio=\"xMidYMid meet\"\n          style={{\n            transform: `scale(${zoom}) translate(${pan.x / zoom}px, ${pan.y / zoom}px)`,\n            transformOrigin: \"center\",\n            overflow: \"visible\",\n          }}\n        >\n          <defs>\n            <marker\n              id=\"arrowhead\"\n              markerWidth=\"10\"\n              markerHeight=\"7\"\n              refX=\"9\"\n              refY=\"3.5\"\n              orient=\"auto\"\n            >\n              <polygon\n                points=\"0 0, 10 3.5, 0 7\"\n                fill=\"rgba(255, 255, 255, 0.32)\"\n              />\n            </marker>\n          </defs>\n\n          {/* Render connections */}\n          {renderConnections()}\n\n          {/* Render nodes */}\n          {renderNodes()}\n        </svg>\n      </div>\n    </OptimizedGlass>\n  );\n};\n\n// Utility hook for mind map data management\nexport const useMindMap = (initialData: MindMapNode) => {\n  const [data, setData] = useState(initialData);\n\n  const addNode = (parentId: string, newNode: MindMapNode) => {\n    const updateNode = (node: MindMapNode): MindMapNode => {\n      if (node.id === parentId) {\n        return {\n          ...node,\n          children: [...(node.children || []), newNode],\n        };\n      }\n      return {\n        ...node,\n        children: node.children?.map(updateNode),\n      };\n    };\n\n    setData(updateNode);\n  };\n\n  const updateNode = (nodeId: string, changes: Partial<MindMapNode>) => {\n    const updateNodeRecursive = (node: MindMapNode): MindMapNode => {\n      if (node.id === nodeId) {\n        return { ...node, ...changes };\n      }\n      return {\n        ...node,\n        children: node.children?.map(updateNodeRecursive),\n      };\n    };\n\n    setData(updateNodeRecursive);\n  };\n\n  const deleteNode = (nodeId: string) => {\n    const deleteNodeRecursive = (node: MindMapNode): MindMapNode => {\n      return {\n        ...node,\n        children: node.children\n          ?.filter((child: any) => {\n            if (child.id === nodeId) return false;\n            return true;\n          })\n          .map(deleteNodeRecursive),\n      };\n    };\n\n    setData(deleteNodeRecursive);\n  };\n\n  return {\n    data,\n    addNode,\n    updateNode,\n    deleteNode,\n    setData,\n  };\n};\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { COLORS, ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport type DrawingTool =\n  | \"pen\"\n  | \"eraser\"\n  | \"rectangle\"\n  | \"circle\"\n  | \"line\"\n  | \"text\"\n  | \"select\";\n\nexport type DrawingColor =\n  | \"var(--glass-white)\"\n  | \"var(--glass-black)\"\n  | \"hsl(var(--glass-color-danger))\"\n  | \"hsl(var(--glass-color-success))\"\n  | \"hsl(var(--glass-color-primary))\"\n  | \"hsl(var(--glass-color-warning))\"\n  | \"var(--glass-color-accent)\"\n  | \"hsl(var(--glass-color-info))\";\n\nexport interface DrawingPath {\n  id: string;\n  tool: DrawingTool;\n  points: Array<{ x: number; y: number }>;\n  color: DrawingColor;\n  width: number;\n  opacity: number;\n  timestamp: number;\n}\n\nexport interface DrawingShape {\n  id: string;\n  type: \"rectangle\" | \"circle\" | \"line\" | \"text\";\n  startX: number;\n  startY: number;\n  endX: number;\n  endY: number;\n  color: DrawingColor;\n  width: number;\n  opacity: number;\n  text?: string;\n  timestamp: number;\n}\n\nexport interface GlassWhiteboardProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Initial drawing data */\n  initialData?: Array<DrawingPath | DrawingShape>;\n  /** Whether the whiteboard is collaborative */\n  collaborative?: boolean;\n  /** Current user's ID (for collaborative mode) */\n  userId?: string;\n  /** Drawing tools to enable */\n  enabledTools?: DrawingTool[];\n  /** Available colors */\n  availableColors?: DrawingColor[];\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Background pattern */\n  backgroundPattern?: \"none\" | \"grid\" | \"dots\" | \"lines\";\n  /** Whether to show toolbar */\n  showToolbar?: boolean;\n  /** Whether to show mini-map */\n  showMinimap?: boolean;\n  /** Custom className */\n  className?: string;\n  /** Drawing change handler */\n  onDrawingChange?: (data: Array<DrawingPath | DrawingShape>) => void;\n  /** Tool change handler */\n  onToolChange?: (tool: DrawingTool) => void;\n  /** Color change handler */\n  onColorChange?: (color: DrawingColor) => void;\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\nconst defaultColors: DrawingColor[] = [\n  \"var(--glass-white)\",\n  \"var(--glass-black)\",\n  \"hsl(var(--glass-color-danger))\",\n  \"hsl(var(--glass-color-success))\",\n  \"hsl(var(--glass-color-primary))\",\n  \"hsl(var(--glass-color-warning))\",\n  \"var(--glass-color-accent)\",\n  \"hsl(var(--glass-color-info))\",\n];\n\nconst defaultTools: DrawingTool[] = [\n  \"pen\",\n  \"eraser\",\n  \"rectangle\",\n  \"circle\",\n  \"line\",\n  \"text\",\n  \"select\",\n];\n\nconst GlassWhiteboard = React.forwardRef<HTMLDivElement, GlassWhiteboardProps>(\n  (\n    {\n      initialData = [],\n      collaborative = false,\n      userId = \"user\",\n      enabledTools = defaultTools.slice(0, 4),\n      availableColors = defaultColors,\n      width = 480,\n      height = 300,\n      backgroundPattern = \"grid\",\n      showToolbar = true,\n      showMinimap = false,\n      className = \"\",\n      onDrawingChange,\n      onToolChange,\n      onColorChange,\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [currentTool, setCurrentTool] = useState<DrawingTool>(\"pen\");\n    const [currentColor, setCurrentColor] =\n      useState<DrawingColor>(\"var(--glass-black)\");\n    const [brushSize, setBrushSize] = useState(2);\n    const [opacity, setOpacity] = useState(1);\n    const [isDrawing, setIsDrawing] = useState(false);\n    const [currentPath, setCurrentPath] = useState<DrawingPath | null>(null);\n    const [currentShape, setCurrentShape] = useState<DrawingShape | null>(null);\n    const [drawingData, setDrawingData] =\n      useState<Array<DrawingPath | DrawingShape>>(initialData);\n    const [selectedElements, setSelectedElements] = useState<Set<string>>(\n      new Set()\n    );\n    const [isSelecting, setIsSelecting] = useState(false);\n    const [selectionBox, setSelectionBox] = useState<{\n      x: number;\n      y: number;\n      width: number;\n      height: number;\n    } | null>(null);\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const overlayCanvasRef = useRef<HTMLCanvasElement>(null);\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    const resolveCanvasColor = useCallback((color: string) => {\n      if (!color.startsWith(\"var(\")) return color;\n      if (typeof window === \"undefined\") return color;\n\n      const tokenName = color.match(/var\\((--[^,\\s)]+)/)?.[1];\n      if (!tokenName) return color;\n\n      const host = containerRef.current ?? document.documentElement;\n      const resolved = getComputedStyle(host)\n        .getPropertyValue(tokenName)\n        .trim();\n      return resolved || color;\n    }, []);\n\n    // Update drawing data and notify parent\n    const updateDrawingData = useCallback(\n      (newData: Array<DrawingPath | DrawingShape>) => {\n        setDrawingData(newData);\n        onDrawingChange?.(newData);\n      },\n      [onDrawingChange]\n    );\n\n    // Handle tool change\n    const handleToolChange = (tool: DrawingTool) => {\n      setCurrentTool(tool);\n      setSelectedElements(new Set());\n      setIsSelecting(false);\n      onToolChange?.(tool);\n    };\n\n    // Handle color change\n    const handleColorChange = (color: DrawingColor) => {\n      setCurrentColor(color);\n      onColorChange?.(color);\n    };\n\n    // Get mouse/touch position relative to canvas\n    const getCanvasPosition = useCallback(\n      (e: React.MouseEvent | React.TouchEvent) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return { x: 0, y: 0 };\n\n        const rect = canvas.getBoundingClientRect();\n        const clientX = \"touches\" in e ? e.touches[0].clientX : e.clientX;\n        const clientY = \"touches\" in e ? e.touches[0].clientY : e.clientY;\n\n        return {\n          x: clientX - rect.left,\n          y: clientY - rect.top,\n        };\n      },\n      []\n    );\n\n    // Start drawing\n    const handleMouseDown = (e: React.MouseEvent) => {\n      const pos = getCanvasPosition(e);\n      setIsDrawing(true);\n\n      if (currentTool === \"select\") {\n        setIsSelecting(true);\n        setSelectionBox({ x: pos.x, y: pos.y, width: 0, height: 0 });\n        return;\n      }\n\n      if (currentTool === \"pen\" || currentTool === \"eraser\") {\n        const newPath: DrawingPath = {\n          id: `path-${Date.now()}-${Math.random()}`,\n          tool: currentTool,\n          points: [pos],\n          color: currentTool === \"eraser\" ? \"var(--glass-white)\" : currentColor,\n          width: brushSize,\n          opacity,\n          timestamp: Date.now(),\n        };\n        setCurrentPath(newPath);\n      } else if ([\"rectangle\", \"circle\", \"line\"].includes(currentTool)) {\n        const newShape: DrawingShape = {\n          id: `shape-${Date.now()}-${Math.random()}`,\n          type: currentTool as \"rectangle\" | \"circle\" | \"line\",\n          startX: pos.x,\n          startY: pos.y,\n          endX: pos.x,\n          endY: pos.y,\n          color: currentColor,\n          width: brushSize,\n          opacity,\n          timestamp: Date.now(),\n        };\n        setCurrentShape(newShape);\n      } else if (currentTool === \"text\") {\n        const newShape: DrawingShape = {\n          id: `text-${Date.now()}-${Math.random()}`,\n          type: \"text\",\n          startX: pos.x,\n          startY: pos.y,\n          endX: pos.x,\n          endY: pos.y,\n          color: currentColor,\n          width: brushSize,\n          opacity,\n          text: \"\",\n          timestamp: Date.now(),\n        };\n        setCurrentShape(newShape);\n      }\n    };\n\n    // Continue drawing\n    const handleMouseMove = useCallback(\n      (e: React.MouseEvent) => {\n        if (!isDrawing) return;\n\n        const pos = getCanvasPosition(e);\n\n        if (currentTool === \"select\" && isSelecting && selectionBox) {\n          setSelectionBox({\n            ...selectionBox,\n            width: pos.x - selectionBox.x,\n            height: pos.y - selectionBox.y,\n          });\n          return;\n        }\n\n        if (currentPath) {\n          setCurrentPath({\n            ...currentPath,\n            points: [...currentPath.points, pos],\n          });\n        } else if (currentShape) {\n          setCurrentShape({\n            ...currentShape,\n            endX: pos.x,\n            endY: pos.y,\n          });\n        }\n      },\n      [\n        isDrawing,\n        currentTool,\n        isSelecting,\n        selectionBox,\n        currentPath,\n        currentShape,\n        getCanvasPosition,\n      ]\n    );\n\n    // Finish drawing\n    const handleMouseUp = useCallback(() => {\n      if (!isDrawing) return;\n\n      setIsDrawing(false);\n\n      if (currentTool === \"select\" && selectionBox && isSelecting) {\n        // Find elements within selection box\n        const selected = new Set<string>();\n        const { x, y, width, height } = selectionBox;\n\n        drawingData.forEach((item: any) => {\n          if (\"points\" in item) {\n            // Check if path intersects with selection box\n            const intersects = item?.points.some(\n              (point: any) =>\n                point.x >= x &&\n                point.x <= x + width &&\n                point.y >= y &&\n                point.y <= y + height\n            );\n            if (intersects) selected.add(item?.id);\n          } else {\n            // Check if shape intersects with selection box\n            const intersects =\n              (item?.startX >= x &&\n                item?.startX <= x + width &&\n                item?.startY >= y &&\n                item?.startY <= y + height) ||\n              (item?.endX >= x &&\n                item?.endX <= x + width &&\n                item?.endY >= y &&\n                item?.endY <= y + height);\n            if (intersects) selected.add(item?.id);\n          }\n        });\n\n        setSelectedElements(selected);\n        setSelectionBox(null);\n        setIsSelecting(false);\n        return;\n      }\n\n      if (currentPath) {\n        updateDrawingData([...drawingData, currentPath]);\n        setCurrentPath(null);\n      } else if (currentShape) {\n        updateDrawingData([...drawingData, currentShape]);\n        setCurrentShape(null);\n      }\n    }, [\n      isDrawing,\n      currentTool,\n      selectionBox,\n      isSelecting,\n      currentPath,\n      currentShape,\n      drawingData,\n      updateDrawingData,\n    ]);\n\n    // Draw background pattern\n    const drawBackground = useCallback(\n      (ctx: CanvasRenderingContext2D) => {\n        ctx.clearRect(0, 0, width, height);\n\n        switch (backgroundPattern) {\n          case \"grid\":\n            ctx.strokeStyle = \"rgba(255, 255, 255, 0.10)\";\n            ctx.lineWidth = 1;\n            for (let x = 0; x < width; x += 20) {\n              ctx.beginPath();\n              ctx.moveTo(x, 0);\n              ctx.lineTo(x, height);\n              ctx.stroke();\n            }\n            for (let y = 0; y < height; y += 20) {\n              ctx.beginPath();\n              ctx.moveTo(0, y);\n              ctx.lineTo(width, y);\n              ctx.stroke();\n            }\n            break;\n          case \"dots\":\n            ctx.fillStyle = \"rgba(255, 255, 255, 0.20)\";\n            for (let x = 20; x < width; x += 20) {\n              for (let y = 20; y < height; y += 20) {\n                ctx.beginPath();\n                ctx.arc(x, y, 1, 0, Math.PI * 2);\n                ctx.fill();\n              }\n            }\n            break;\n          case \"lines\":\n            ctx.strokeStyle = \"rgba(255, 255, 255, 0.10)\";\n            ctx.lineWidth = 1;\n            for (let y = 0; y < height; y += 40) {\n              ctx.beginPath();\n              ctx.moveTo(0, y);\n              ctx.lineTo(width, y);\n              ctx.stroke();\n            }\n            break;\n        }\n      },\n      [width, height, backgroundPattern]\n    );\n\n    // Draw all elements\n    const drawElements = useCallback(\n      (\n        ctx: CanvasRenderingContext2D,\n        elements: Array<DrawingPath | DrawingShape>\n      ) => {\n        elements.forEach((element: any) => {\n          ctx.globalAlpha = element.opacity;\n\n          if (\"points\" in element) {\n            // Draw path\n            if ((element.points?.length || 0) > 1) {\n              ctx.strokeStyle = resolveCanvasColor(element.color);\n              ctx.lineWidth = element.width;\n              ctx.lineCap = \"round\";\n              ctx.lineJoin = \"round\";\n\n              ctx.beginPath();\n              ctx.moveTo(element.points[0].x, element.points[0].y);\n\n              for (let i = 1; i < (element.points?.length || 0); i++) {\n                ctx.lineTo(element.points[i].x, element.points[i].y);\n              }\n\n              ctx.stroke();\n            }\n          } else {\n            // Draw shape\n            const resolvedColor = resolveCanvasColor(element.color);\n            ctx.strokeStyle = resolvedColor;\n            ctx.lineWidth = element.width;\n            ctx.fillStyle = resolvedColor;\n\n            const width = Math.abs(element.endX - element.startX);\n            const height = Math.abs(element.endY - element.startY);\n            const x = Math.min(element.startX, element.endX);\n            const y = Math.min(element.startY, element.endY);\n\n            switch (element.type) {\n              case \"rectangle\":\n                ctx.strokeRect(x, y, width, height);\n                break;\n              case \"circle\":\n                const radius = Math.sqrt(width * width + height * height) / 2;\n                const centerX = x + width / 2;\n                const centerY = y + height / 2;\n                ctx.beginPath();\n                ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\n                ctx.stroke();\n                break;\n              case \"line\":\n                ctx.beginPath();\n                ctx.moveTo(element.startX, element.startY);\n                ctx.lineTo(element.endX, element.endY);\n                ctx.stroke();\n                break;\n              case \"text\":\n                if (element.text) {\n                  ctx.font = `${element.width * 10}px Arial`;\n                  ctx.fillStyle = element.color;\n                  ctx.fillText(element.text, element.startX, element.startY);\n                }\n                break;\n            }\n          }\n\n          ctx.globalAlpha = 1;\n        });\n      },\n      [resolveCanvasColor]\n    );\n\n    // Draw selection highlights\n    const drawSelection = useCallback(\n      (ctx: CanvasRenderingContext2D) => {\n        selectedElements.forEach((elementId: any) => {\n          const element = drawingData.find(\n            (item: any) => item?.id === elementId\n          );\n          if (!element) return;\n\n          ctx.strokeStyle = \"var(--glass-white)\";\n          ctx.lineWidth = 2;\n          ctx.setLineDash([5, 5]);\n\n          if (\"points\" in element && (element.points?.length || 0) > 0) {\n            const bounds = element.points.reduce(\n              (acc, point) => ({\n                minX: Math.min(acc.minX, point.x),\n                maxX: Math.max(acc.maxX, point.x),\n                minY: Math.min(acc.minY, point.y),\n                maxY: Math.max(acc.maxY, point.y),\n              }),\n              {\n                minX: Infinity,\n                maxX: -Infinity,\n                minY: Infinity,\n                maxY: -Infinity,\n              }\n            );\n\n            ctx.strokeRect(\n              bounds.minX - 10,\n              bounds.minY - 10,\n              bounds.maxX - bounds.minX + 20,\n              bounds.maxY - bounds.minY + 20\n            );\n          } else {\n            const bounds = {\n              minX: Math.min(\n                (element as DrawingShape).startX,\n                (element as DrawingShape).endX\n              ),\n              maxX: Math.max(\n                (element as DrawingShape).startX,\n                (element as DrawingShape).endX\n              ),\n              minY: Math.min(\n                (element as DrawingShape).startY,\n                (element as DrawingShape).endY\n              ),\n              maxY: Math.max(\n                (element as DrawingShape).startY,\n                (element as DrawingShape).endY\n              ),\n            };\n\n            ctx.strokeRect(\n              bounds.minX - 10,\n              bounds.minY - 10,\n              bounds.maxX - bounds.minX + 20,\n              bounds.maxY - bounds.minY + 20\n            );\n          }\n\n          ctx.setLineDash([]);\n        });\n      },\n      [selectedElements, drawingData]\n    );\n\n    // Main render loop\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      const overlayCanvas = overlayCanvasRef.current;\n      if (!canvas || !overlayCanvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      const overlayCtx = overlayCanvas.getContext(\"2d\");\n      if (!ctx || !overlayCtx) return;\n\n      // Clear canvases\n      ctx.clearRect(0, 0, width, height);\n      overlayCtx.clearRect(0, 0, width, height);\n\n      // Draw background\n      drawBackground(ctx);\n\n      // Draw all elements\n      drawElements(ctx, drawingData);\n\n      // Draw current path/shape being drawn\n      if (currentPath) {\n        drawElements(overlayCtx, [currentPath]);\n      }\n      if (currentShape) {\n        drawElements(overlayCtx, [currentShape]);\n      }\n\n      // Draw selection\n      drawSelection(ctx);\n\n      // Draw selection box\n      if (selectionBox && isSelecting) {\n        overlayCtx.strokeStyle = \"var(--glass-white)80\";\n        overlayCtx.lineWidth = 1;\n        overlayCtx.setLineDash([5, 5]);\n        overlayCtx.strokeRect(\n          selectionBox.x,\n          selectionBox.y,\n          selectionBox.width,\n          selectionBox.height\n        );\n        overlayCtx.setLineDash([]);\n      }\n    }, [\n      drawingData,\n      currentPath,\n      currentShape,\n      selectionBox,\n      isSelecting,\n      drawBackground,\n      drawElements,\n      drawSelection,\n      width,\n      height,\n    ]);\n\n    // Handle text input\n    const handleTextInput = useCallback(\n      (text: string) => {\n        if (currentShape && currentShape.type === \"text\") {\n          const updatedShape = { ...currentShape, text };\n          setCurrentShape(updatedShape);\n          updateDrawingData([...drawingData, updatedShape]);\n          setCurrentShape(null);\n        }\n      },\n      [currentShape, drawingData, updateDrawingData]\n    );\n\n    // Clear canvas\n    const clearCanvas = () => {\n      updateDrawingData([]);\n      setSelectedElements(new Set());\n    };\n\n    // Delete selected elements\n    const deleteSelected = () => {\n      const newData = drawingData.filter(\n        (item: any) => !selectedElements.has(item?.id)\n      );\n      updateDrawingData(newData);\n      setSelectedElements(new Set());\n    };\n\n    // Export canvas as image\n    const exportAsImage = () => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const link = document.createElement(\"a\");\n      link.download = `whiteboard-${Date.now()}.png`;\n      link.href = canvas.toDataURL();\n      link.click();\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-relative glass-max-w-full glass-overflow-hidden\",\n          className\n        )}\n        style={{ maxHeight: \"100%\", minWidth: 0 }}\n        intent=\"neutral\"\n        elevation=\"level1\"\n        data-testid={dataTestId}\n        aria-label={ariaLabel || \"Drawing whiteboard\"}\n        role=\"application\"\n        {...props}\n      >\n        {/* Toolbar */}\n        {showToolbar && (\n          <div\n            className={cn(\n              \"glass-flex glass-flex-wrap glass-items-center glass-gap-2 glass-p-3 glass-border-b glass-border-white/10\"\n            )}\n          >\n            {/* Tools */}\n            <div className={cn(\"glass-flex glass-gap-1\")}>\n              {enabledTools.map((tool: any) => (\n                <button\n                  key={tool}\n                  onClick={(e) => handleToolChange(tool)}\n                  className={cn(\n                    \"glass-px-2 glass-py-1.5 glass-radius-md glass-text-xs glass-font-medium glass-transition-colors\",\n                    \"glass-focus glass-touch-target glass-contrast-guard\",\n                    currentTool === tool\n                      ? \"glass-surface-subtle/20 glass-text-primary\"\n                      : \"glass-text-primary-opacity-70 hover:glass-text-primary hover:glass-surface-subtle/10\"\n                  )}\n                >\n                  {tool.charAt(0).toUpperCase() + tool.slice(1)}\n                </button>\n              ))}\n            </div>\n\n            {/* Colors */}\n            <div className={cn(\"glass-flex glass-gap-1\")}>\n              {availableColors.map((color, i) => (\n                <button\n                  key={`${color}-${i}`}\n                  onClick={(e) => handleColorChange(color)}\n                  className={cn(\n                    \"glass-w-7 glass-h-7 glass-radius-md glass-border glass-transition-all\",\n                    \"glass-focus glass-touch-target glass-contrast-guard\",\n                    currentColor === color\n                      ? \"glass-border-white\"\n                      : \"glass-border-white/20 hover:glass-border-white/30\"\n                  )}\n                  style={{ backgroundColor: color }}\n                  aria-label={`Select color ${color}`}\n                  aria-pressed={currentColor === color}\n                />\n              ))}\n            </div>\n\n            {/* Brush Size */}\n            <div className={cn(\"glass-flex glass-items-center glass-gap-2\")}>\n              <label\n                htmlFor=\"brush-size\"\n                className={cn(\"glass-text-sm glass-text-primary-70\")}\n              >\n                Size:\n              </label>\n              <input\n                id=\"brush-size\"\n                type=\"range\"\n                min=\"1\"\n                max=\"20\"\n                value={brushSize}\n                onChange={(e) => setBrushSize(Number(e.target.value))}\n                className={cn(\n                  \"glass-w-16 glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n                aria-label=\"Brush size\"\n              />\n              <span\n                className={cn(\"glass-text-sm glass-text-primary-70 glass-w-6\")}\n              >\n                {brushSize}\n              </span>\n            </div>\n\n            {/* Opacity */}\n            <div className={cn(\"glass-flex glass-items-center glass-gap-2\")}>\n              <label\n                htmlFor=\"brush-opacity\"\n                className={cn(\"glass-text-sm glass-text-primary-70\")}\n              >\n                Opacity:\n              </label>\n              <input\n                id=\"brush-opacity\"\n                type=\"range\"\n                min=\"0.1\"\n                max=\"1\"\n                step=\"0.1\"\n                value={opacity}\n                onChange={(e) => setOpacity(Number(e.target.value))}\n                className={cn(\n                  \"glass-w-16 glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n                aria-label=\"Brush opacity\"\n              />\n              <span\n                className={cn(\"glass-text-sm glass-text-primary-70 glass-w-8\")}\n              >\n                {(opacity * 100).toFixed(0)}%\n              </span>\n            </div>\n\n            {/* Actions */}\n            <div className={cn(\"glass-flex glass-gap-1\")}>\n              <button\n                onClick={clearCanvas}\n                className={cn(\n                  \"glass-px-2 glass-py-1.5 glass-text-xs glass-text-primary-opacity-70 hover:glass-text-primary hover:glass-surface-subtle/10 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n              >\n                Clear\n              </button>\n              {selectedElements.size > 0 && (\n                <button\n                  onClick={deleteSelected}\n                  className={cn(\n                    \"glass-px-3 glass-py-2 glass-text-sm glass-text-red-400 glass-hover-text-red-300 glass-hover-surface-red-10 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  )}\n                >\n                  Delete Selected\n                </button>\n              )}\n              <button\n                onClick={exportAsImage}\n                className={cn(\n                  \"glass-px-2 glass-py-1.5 glass-text-xs glass-text-primary-opacity-70 hover:glass-text-primary hover:glass-surface-subtle/10 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n              >\n                Export\n              </button>\n            </div>\n          </div>\n        )}\n\n        {/* Text Input Modal */}\n        {currentShape && currentShape.type === \"text\" && (\n          <div\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-surface-black-50 glass-flex glass-items-center glass-justify-center glass-z-20\"\n            )}\n          >\n            <OptimizedGlass\n              className={cn(\"glass-p-6 glass-max-w-sm glass-w-full glass-mx-4\")}\n              blur=\"medium\"\n              elevation={\"level2\"}\n            >\n              <input\n                autoFocus\n                placeholder=\"Enter text...\"\n                className={cn(\n                  \"glass-w-full glass-px-3 glass-py-2 glass-surface-white-10 glass-border glass-border-white-20 glass-radius-md glass-text-primary glass-placeholder-white-50 glass-focus-outline-none glass-focus-border-white-40 glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\") {\n                    handleTextInput((e.target as HTMLInputElement).value);\n                  } else if (e.key === \"Escape\") {\n                    setCurrentShape(null);\n                  }\n                }}\n              />\n            </OptimizedGlass>\n          </div>\n        )}\n\n        {/* Canvas Container */}\n        <div\n          ref={containerRef}\n          className={cn(\n            \"glass-relative glass-overflow-hidden glass-surface-dark/20\"\n          )}\n          style={{\n            width: \"100%\",\n            maxWidth: width,\n            height: \"clamp(180px, 32vw, 300px)\",\n          }}\n        >\n          <canvas\n            ref={canvasRef}\n            width={width}\n            height={height}\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-cursor-crosshair\"\n            )}\n            onMouseDown={handleMouseDown}\n            onMouseMove={handleMouseMove}\n            onMouseUp={handleMouseUp}\n            onMouseLeave={handleMouseUp}\n          />\n\n          <canvas\n            ref={overlayCanvasRef}\n            width={width}\n            height={height}\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-pointer-events-none\"\n            )}\n          />\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassWhiteboard.displayName = \"GlassWhiteboard\";\n\nexport { GlassWhiteboard };\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 CSS Houdini showcase.\n *\n * HoudiniGlassProvider showcases CSS Houdini Paint/Properties API glass effects.\n * It feature-detects Houdini support and falls back to standard CSS when the\n * Paint Worklet API is unavailable; the registered worklets are demonstrative.\n * Treat as a progressive-enhancement showcase, not a guaranteed-Houdini path.\n */\nimport React, {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n  forwardRef,\n} from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\ninterface HoudiniGlassContextType {\n  isSupported: boolean;\n  hasPropertyAPI: boolean;\n  hasPaintAPI: boolean;\n  globalPreset: keyof typeof glassPresets;\n  setGlobalPreset: (preset: keyof typeof glassPresets) => void;\n  globalProperties: Record<string, string>;\n  updateGlobalProperty: (property: string, value: string) => void;\n  enabledEffects: string[];\n  toggleEffect: (effect: string) => void;\n  performanceMode: boolean;\n  setPerformanceMode: (enabled: boolean) => void;\n  debugMode: boolean;\n  setDebugMode: (enabled: boolean) => void;\n}\n\nconst HoudiniGlassContext = createContext<HoudiniGlassContextType | null>(null);\n\nconst defaultHoudiniGlassContext: HoudiniGlassContextType = {\n  isSupported: false,\n  hasPropertyAPI: false,\n  hasPaintAPI: false,\n  globalPreset: \"standard\",\n  setGlobalPreset: () => {},\n  globalProperties: {},\n  updateGlobalProperty: () => {},\n  enabledEffects: [],\n  toggleEffect: () => {},\n  performanceMode: true,\n  setPerformanceMode: () => {},\n  debugMode: false,\n  setDebugMode: () => {},\n};\n\n// Glass presets with CSS custom properties\nexport const glassPresets = {\n  standard: {\n    \"--glass-background\": \"var(--glass-bg-default)\",\n    \"--glass-border\": \"var(--glass-border-default)\",\n    \"--glass-blur\": \"var(--glass-blur-lg)\",\n    \"--glass-shadow\": \"var(--glass-elev-2)\",\n    \"--glass-animation-speed\": \"1\",\n    \"--glass-blur-intensity\": \"10\",\n  },\n  frosted: {\n    \"--glass-background\": \"var(--glass-bg-hover)\",\n    \"--glass-border\": \"var(--glass-border-hover)\",\n    \"--glass-blur\": \"var(--glass-blur-xl)\",\n    \"--glass-shadow\": \"var(--glass-elev-3)\",\n    \"--glass-animation-speed\": \"1.2\",\n    \"--glass-blur-intensity\": \"15\",\n  },\n  minimal: {\n    \"--glass-background\": \"var(--glass-bg-active)\",\n    \"--glass-border\": \"var(--glass-border-disabled)\",\n    \"--glass-blur\": \"var(--glass-blur-sm)\",\n    \"--glass-shadow\": \"var(--glass-elev-1)\",\n    \"--glass-animation-speed\": \"0.8\",\n    \"--glass-blur-intensity\": \"5\",\n  },\n  heavy: {\n    \"--glass-background\": \"var(--glass-bg-strong)\",\n    \"--glass-border\": \"var(--glass-border-strong)\",\n    \"--glass-blur\": \"var(--glass-blur-2xl)\",\n    \"--glass-shadow\": \"var(--glass-elev-4)\",\n    \"--glass-animation-speed\": \"1.5\",\n    \"--glass-blur-intensity\": \"20\",\n  },\n  crystal: {\n    \"--glass-background\": \"var(--glass-bg-active)\",\n    \"--glass-border\": \"var(--glass-border-disabled)\",\n    \"--glass-blur\": \"var(--glass-blur-sm)\",\n    \"--glass-shadow\": \"var(--glass-elev-1)\",\n    \"--glass-animation-speed\": \"0.5\",\n    \"--glass-blur-intensity\": \"2\",\n  },\n} as const;\n\nexport interface HoudiniGlassProviderProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  children: React.ReactNode;\n  defaultPreset?: keyof typeof glassPresets;\n  defaultProperties?: Record<string, string>;\n  enabledEffects?: string[];\n  performanceMode?: boolean;\n  debugMode?: boolean;\n}\n\nexport const HoudiniGlassProvider = forwardRef<\n  HTMLDivElement,\n  HoudiniGlassProviderProps\n>(\n  (\n    {\n      children,\n      defaultPreset = \"standard\",\n      defaultProperties = {},\n      enabledEffects = [\"frost\", \"caustics\", \"border\"],\n      performanceMode = false,\n      debugMode = false,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [isSupported, setIsSupported] = useState(false);\n    const [hasPropertyAPI, setHasPropertyAPI] = useState(false);\n    const [hasPaintAPI, setHasPaintAPI] = useState(false);\n    const [globalPreset, setGlobalPreset] =\n      useState<keyof typeof glassPresets>(defaultPreset);\n    const [globalProperties, setGlobalProperties] =\n      useState<Record<string, string>>(defaultProperties);\n    const [enabledEffectsState, setEnabledEffectsState] =\n      useState<string[]>(enabledEffects);\n    const [performanceModeState, setPerformanceModeState] =\n      useState(performanceMode);\n    const [debugModeState, setDebugModeState] = useState(debugMode);\n    const [stylesInjected, setStylesInjected] = useState(false);\n\n    // Initialize Houdini support detection and registration\n    useEffect(() => {\n      const detectSupport = () => {\n        const propertyAPI =\n          typeof CSS !== \"undefined\" && \"registerProperty\" in CSS;\n        const paintAPI = typeof CSS !== \"undefined\" && \"paintWorklet\" in CSS;\n\n        setHasPropertyAPI(propertyAPI);\n        setHasPaintAPI(paintAPI);\n        setIsSupported(propertyAPI || paintAPI);\n\n        return { propertyAPI, paintAPI };\n      };\n\n      const { propertyAPI, paintAPI } = detectSupport();\n\n      // Register properties if supported\n      if (propertyAPI) {\n        try {\n          registerGlassProperties();\n        } catch {\n          // Ignore registration failures; CSS fallbacks remain active.\n        }\n      }\n\n      // Register worklets if supported and not in performance mode\n      if (paintAPI && !performanceModeState) {\n        try {\n          registerGlassWorklets();\n        } catch {\n          // Ignore registration failures; CSS fallbacks remain active.\n        }\n      }\n    }, [performanceModeState]);\n\n    // Inject global styles\n    useEffect(() => {\n      if (!stylesInjected) {\n        const styleElement = document.createElement(\"style\");\n        styleElement.textContent = houdiniGlassStyles;\n        document.head.appendChild(styleElement);\n        setStylesInjected(true);\n\n        return () => {\n          if (document.head.contains(styleElement)) {\n            document.head.removeChild(styleElement);\n          }\n        };\n      }\n    }, [stylesInjected]);\n\n    // Apply global preset to document root\n    useEffect(() => {\n      if (hasPropertyAPI && globalPreset) {\n        const preset = glassPresets[globalPreset];\n        Object.entries(preset).forEach(([property, value]) => {\n          document.documentElement.style.setProperty(property, value);\n        });\n      }\n    }, [globalPreset, hasPropertyAPI]);\n\n    // Apply global properties to document root\n    useEffect(() => {\n      if (hasPropertyAPI) {\n        Object.entries(globalProperties).forEach(([property, value]) => {\n          document.documentElement.style.setProperty(property, value);\n        });\n      }\n    }, [globalProperties, hasPropertyAPI]);\n\n    // Performance mode adjustments\n    useEffect(() => {\n      if (performanceModeState) {\n        // Disable expensive effects in performance mode\n        const reducedEffects = enabledEffectsState.filter(\n          (effect: any) => ![\"caustics\", \"refraction\"].includes(effect)\n        );\n        setEnabledEffectsState((prev: any) => {\n          const sameLength = prev.length === reducedEffects.length;\n          const sameOrder =\n            sameLength &&\n            prev.every((v: any, i: any) => v === reducedEffects[i]);\n          return sameOrder ? prev : reducedEffects;\n        });\n\n        // Reduce animation complexity\n        document.documentElement.style.setProperty(\n          \"--glass-animation-speed\",\n          \"0.5\"\n        );\n        document.documentElement.style.setProperty(\n          \"--glass-blur-intensity\",\n          \"5\"\n        );\n      } else {\n        // Restore full effects\n        setEnabledEffectsState((prev: any) => {\n          const next = enabledEffects;\n          const sameLength = prev.length === next.length;\n          const sameOrder =\n            sameLength && prev.every((v: any, i: any) => v === next[i]);\n          return sameOrder ? prev : next;\n        });\n        document.documentElement.style.setProperty(\n          \"--glass-animation-speed\",\n          \"1\"\n        );\n        document.documentElement.style.setProperty(\n          \"--glass-blur-intensity\",\n          \"10\"\n        );\n      }\n    }, [performanceModeState, enabledEffects]);\n\n    const updateGlobalProperty = useCallback(\n      (property: string, value: string) => {\n        setGlobalProperties((prev: any) => ({ ...prev, [property]: value }));\n\n        if (hasPropertyAPI) {\n          document.documentElement.style.setProperty(property, value);\n        }\n      },\n      [hasPropertyAPI]\n    );\n\n    const toggleEffect = useCallback((effect: string) => {\n      setEnabledEffectsState((prev: any) => {\n        const newEffects = prev.includes(effect)\n          ? prev.filter((e: any) => e !== effect)\n          : [...prev, effect];\n\n        return newEffects;\n      });\n    }, []);\n\n    const setPerformanceMode = useCallback((enabled: boolean) => {\n      setPerformanceModeState(enabled);\n    }, []);\n\n    const setDebugMode = useCallback((enabled: boolean) => {\n      setDebugModeState(enabled);\n    }, []);\n\n    const contextValue: HoudiniGlassContextType = {\n      isSupported,\n      hasPropertyAPI,\n      hasPaintAPI,\n      globalPreset,\n      setGlobalPreset,\n      globalProperties,\n      updateGlobalProperty,\n      enabledEffects: enabledEffectsState,\n      toggleEffect,\n      performanceMode: performanceModeState,\n      setPerformanceMode,\n      debugMode: debugModeState,\n      setDebugMode,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"houdini-glass-provider\", className)}\n        data-glass-component\n        {...props}\n      >\n        <HoudiniGlassContext.Provider value={contextValue}>\n          {children}\n\n          {debugModeState && (\n            <div\n              style={createGlassStyle({\n                intent: \"neutral\",\n                elevation: \"level2\",\n              })}\n              role=\"status\"\n              aria-label=\"Houdini Glass Debug Information\"\n            >\n              <ContrastGuard>\n                <div>\n                  <strong>Houdini Glass Debug</strong>\n                </div>\n                <div>Support: {isSupported ? \"\u2705\" : \"\u274C\"}</div>\n                <div>Property API: {hasPropertyAPI ? \"\u2705\" : \"\u274C\"}</div>\n                <div>Paint API: {hasPaintAPI ? \"\u2705\" : \"\u274C\"}</div>\n                <div>Preset: {globalPreset}</div>\n                <div>Effects: {enabledEffectsState.join(\", \")}</div>\n                <div>Performance: {performanceModeState ? \"\uD83D\uDE80\" : \"\uD83C\uDFA8\"}</div>\n                <div>Properties: {Object.keys(globalProperties).length}</div>\n              </ContrastGuard>\n            </div>\n          )}\n        </HoudiniGlassContext.Provider>\n      </div>\n    );\n  }\n);\n\nHoudiniGlassProvider.displayName = \"HoudiniGlassProvider\";\n\n// Hook to use Houdini Glass context\nexport function useHoudiniGlass() {\n  const context = useContext(HoudiniGlassContext);\n  return context ?? defaultHoudiniGlassContext;\n}\n\n// Hook for component-specific glass effects\nexport function useGlassEffect(\n  elementRef: React.RefObject<HTMLElement>,\n  effects: string[] = [],\n  options: {\n    preset?: keyof typeof glassPresets;\n    customProperties?: Record<string, string>;\n    enableWorklets?: boolean;\n  } = {}\n) {\n  const { isSupported, hasPropertyAPI, hasPaintAPI, performanceMode } =\n    useHoudiniGlass();\n  // Derive applied effects without causing re-render loops\n  const appliedEffects = useMemo(() => {\n    if (options.enableWorklets && hasPaintAPI && !performanceMode) {\n      return effects;\n    }\n    return [] as string[];\n  }, [effects, options.enableWorklets, hasPaintAPI, performanceMode]);\n\n  // Stabilize dependency keys to avoid reruns from referentially new objects/arrays\n  const effectsKey = useMemo(() => effects.join(\",\"), [effects]);\n  const customPropsKey = useMemo(\n    () => JSON.stringify(options.customProperties ?? {}),\n    [options.customProperties]\n  );\n\n  useEffect(() => {\n    const element = elementRef.current;\n    if (!element || !isSupported) return;\n\n    // Apply preset\n    if (options.preset && hasPropertyAPI) {\n      const preset = glassPresets[options.preset];\n      Object.entries(preset).forEach(([property, value]) => {\n        element.style.setProperty(property, value);\n      });\n    }\n\n    // Apply custom properties\n    if (options.customProperties && hasPropertyAPI) {\n      Object.entries(options.customProperties).forEach(([property, value]) => {\n        element.style.setProperty(property, value);\n      });\n    }\n\n    // Apply worklet effects\n    if (options.enableWorklets && hasPaintAPI && !performanceMode) {\n      const workletStyles: string[] = [];\n\n      if (effects.includes(\"frost\")) {\n        workletStyles.push(\"paint(glass-frost)\");\n      }\n      if (effects.includes(\"caustics\")) {\n        workletStyles.push(\"paint(glass-caustics)\");\n      }\n      if (effects.includes(\"refraction\")) {\n        element.style.borderImage = \"paint(glass-refraction) 1\";\n      }\n      if (effects.includes(\"border\")) {\n        element.style.borderImageSource = \"paint(glass-border)\";\n        element.style.borderImageSlice = \"1\";\n      }\n\n      if (workletStyles.length > 0) {\n        element.style.backgroundImage = workletStyles.join(\", \");\n      }\n    }\n  }, [\n    elementRef,\n    effectsKey,\n    options.preset,\n    customPropsKey,\n    options.enableWorklets,\n    isSupported,\n    hasPropertyAPI,\n    hasPaintAPI,\n    performanceMode,\n  ]);\n\n  return {\n    isSupported,\n    appliedEffects,\n    canUseWorklets: hasPaintAPI && !performanceMode,\n  };\n}\n\n// Mock functions for Houdini API registration - in real implementation these would register actual worklets\nfunction registerGlassProperties() {\n  // Register CSS custom properties for glass effects\n  if (typeof CSS !== \"undefined\" && CSS.registerProperty) {\n    try {\n      if (typeof window !== \"undefined\") {\n        if ((window as any).__AURAGLASS_PROPERTIES_REGISTERED__) {\n          return;\n        }\n        (window as any).__AURAGLASS_PROPERTIES_REGISTERED__ = true as any;\n      }\n      CSS.registerProperty({\n        name: \"--glass-background\",\n        syntax: \"<color>\",\n        inherits: false,\n        initialValue: \"var(--glass-bg-default)\",\n      });\n\n      CSS.registerProperty({\n        name: \"--glass-border\",\n        syntax: \"<color>\",\n        inherits: false,\n        initialValue: \"color-mix(in srgb, var(--glass-white) 20%, transparent)\",\n      });\n\n      CSS.registerProperty({\n        name: \"--glass-blur\",\n        syntax: \"<length>\",\n        inherits: false,\n        initialValue: \"20px\",\n      });\n\n      CSS.registerProperty({\n        name: \"--glass-shadow\",\n        syntax: \"<string>\",\n        inherits: false,\n        initialValue:\n          \"0 8px 32px color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n      });\n\n      CSS.registerProperty({\n        name: \"--glass-animation-speed\",\n        syntax: \"<number>\",\n        inherits: false,\n        initialValue: \"1\",\n      });\n\n      CSS.registerProperty({\n        name: \"--glass-blur-intensity\",\n        syntax: \"<number>\",\n        inherits: false,\n        initialValue: \"10\",\n      });\n    } catch {\n      // Ignore duplicate or unsupported registration details.\n    }\n  }\n}\n\n// Extend CSS interface for Houdini Paint Worklet API\ndeclare global {\n  interface CSS {\n    paintWorklet?: Worklet;\n  }\n  interface Window {\n    __AURAGLASS_WORKLETS_REGISTERED__?: boolean;\n    __AURAGLASS_PROPERTIES_REGISTERED__?: boolean;\n  }\n}\n\nfunction registerGlassWorklets() {\n  // Register paint worklets for advanced glass effects\n  if (typeof CSS !== \"undefined\" && (CSS as any).paintWorklet) {\n    try {\n      if (typeof window !== \"undefined\") {\n        if ((window as any).__AURAGLASS_WORKLETS_REGISTERED__) {\n          return;\n        }\n        (window as any).__AURAGLASS_WORKLETS_REGISTERED__ = true as any;\n      }\n      // In a real implementation, these would be actual worklet files\n      // CSS.paintWorklet.addModule('/worklets/glass-frost.js');\n      // CSS.paintWorklet.addModule('/worklets/glass-caustics.js');\n      // CSS.paintWorklet.addModule('/worklets/glass-border.js');\n      // CSS.paintWorklet.addModule('/worklets/glass-refraction.js');\n    } catch {\n      // Ignore duplicate or unsupported registration details.\n    }\n  }\n}\n\n// Global CSS styles for Houdini glass effects\nconst houdiniGlassStyles = `\n  .houdini-glass {\n    background: var(--glass-background, var(--glass-bg-default));\n    backdrop-filter: var(--glass-backdrop-blur);\n    border: 1px solid var(--glass-border, color-mix(in srgb, var(--glass-white) 20%, transparent));\n    box-shadow: var(--glass-elev-2);\n    transition: all calc(${ANIMATION.DURATION.normal}ms * var(--glass-animation-speed, 1));\n  }\n\n  .houdini-glass:hover {\n    background: var(--glass-bg-default);\n    border-color: var(--glass-bg-hover);\n    box-shadow: var(--glass-elev-2);\n  }\n\n  @supports (backdrop-filter: var(--glass-backdrop-blur)) {\n    .houdini-glass-fallback {\n      background: var(--glass-bg-default);\n      border: 1px solid var(--glass-border-default);\n    }\n  }\n\n  /* Performance mode styles */\n  .houdini-glass-performance {\n    --glass-blur: 10px;\n    --glass-animation-speed: 0.5;\n    backdrop-filter: var(--glass-backdrop-blur);\n    transition: all ${ANIMATION.DURATION.fast}ms;\n  }\n\n  /* Debug styles */\n  .houdini-glass-debug {\n    outline: 2px solid color-mix(in srgb, hsl(var(--glass-color-danger)) 50%, transparent);\n    outline-offset: -1px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .houdini-glass,\n    .houdini-glass-performance {\n      transition: none;\n    }\n  }\n`;\n\nexport default HoudiniGlassProvider;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { motion } from \"framer-motion\";\nimport {\n  Droplets,\n  Eye,\n  Gauge,\n  Layers,\n  Settings,\n  Sparkles,\n  Sun,\n  Zap,\n} from \"@/icons\";\nimport React, { useRef, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useGlassEffect, useHoudiniGlass } from \"./HoudiniGlassProvider\";\n\ninterface HoudiniGlassCardProps {\n  children: React.ReactNode;\n  className?: string;\n  preset?: \"standard\" | \"frosted\" | \"minimal\" | \"heavy\" | \"crystal\";\n  effects?: string[];\n  enableWorklets?: boolean;\n  customProperties?: Record<string, string>;\n  interactive?: boolean;\n  showControls?: boolean;\n  title?: string;\n  description?: string;\n  \"data-testid\"?: string;\n}\n\nexport function HoudiniGlassCard({\n  children,\n  className = \"\",\n  preset = \"standard\",\n  effects = [\"frost\"],\n  enableWorklets = true,\n  customProperties = {},\n  interactive = true,\n  showControls = false,\n  title,\n  description,\n  \"data-testid\": dataTestId,\n}: HoudiniGlassCardProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const cardRef = useRef<HTMLDivElement>(null);\n  const { isSupported, enabledEffects, toggleEffect, performanceMode } =\n    useHoudiniGlass();\n  const [isHovered, setIsHovered] = useState(false);\n  const [showEffectControls, setShowEffectControls] = useState(false);\n\n  // Apply glass effects using the Houdini hook\n  const { appliedEffects, canUseWorklets } = useGlassEffect(cardRef, effects, {\n    preset,\n    customProperties,\n    enableWorklets: enableWorklets,\n  });\n\n  const handleMouseEnter = () => {\n    if (interactive) {\n      setIsHovered(true);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (interactive) {\n      setIsHovered(false);\n    }\n  };\n\n  const getEffectIcon = (effect: string) => {\n    switch (effect) {\n      case \"frost\":\n        return <Sparkles className=\"glass-w-4 glass-h-4\" />;\n      case \"caustics\":\n        return <Sun className=\"glass-w-4 glass-h-4\" />;\n      case \"border\":\n        return <Layers className=\"glass-w-4 glass-h-4\" />;\n      case \"refraction\":\n        return <Droplets className=\"glass-w-4 glass-h-4\" />;\n      default:\n        return <Zap className=\"glass-w-4 glass-h-4\" />;\n    }\n  };\n\n  const getPerformanceIndicator = () => {\n    const prefersReducedMotion = useReducedMotion();\n    if (performanceMode) {\n      return (\n        <span title=\"Performance mode active\">\n          <Gauge className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n        </span>\n      );\n    }\n    return (\n      <span title=\"Full effects active\">\n        <Zap className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n      </span>\n    );\n  };\n\n  return (\n    <motion.div\n      ref={cardRef}\n      className={cn(\n        // Base glass foundation with design tokens\n        \"glass-foundation-complete glass-radius-xl glass-p-4\",\n        \"relative overflow-hidden glass-min-w-0 glass-max-w-full\",\n        // Houdini-specific classes\n        \"houdini-glass\",\n        {\n          \"houdini-glass-fallback\": !isSupported,\n          \"houdini-glass-performance\": performanceMode,\n          \"cursor-pointer glass-press glass-magnet\": interactive,\n        },\n        // Glass effects\n        \"glass-overlay-specular glass-parallax\",\n        \"glass-transition glass-focus\",\n        className\n      )}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      whileHover={interactive ? { scale: 1.02 } : {}}\n      whileTap={interactive ? { scale: 0.98 } : {}}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : {\n              duration: performanceMode ? 0.15 : 0.3,\n              ease: \"easeOut\",\n            }\n      }\n      data-testid={dataTestId}\n    >\n      {/* Header */}\n      {(title || description || showControls) && (\n        <div className=\"glass-relative glass-z-10 glass-mb-4 glass-min-w-0\">\n          <div className=\"glass-flex glass-items-start glass-justify-between\">\n            <div className=\"glass-flex-1 glass-min-w-0\">\n              {title && (\n                <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1 glass-break-words\">\n                  {title}\n                </h3>\n              )}\n              {description && (\n                <p className=\"glass-text-sm glass-text-secondary glass-leading-relaxed glass-break-words\">\n                  {description}\n                </p>\n              )}\n            </div>\n\n            {/* Controls */}\n            {showControls && (\n              <div className=\"glass-flex glass-items-center glass-gap-2 glass-ml-4\">\n                {/* Performance indicator */}\n                {getPerformanceIndicator()}\n\n                {/* Effect controls toggle */}\n                <button\n                  onClick={() => setShowEffectControls(!showEffectControls)}\n                  className=\"glass-p-2 glass-radius-lg hover:glass-surface-subtle/10 glass-transition-colors\"\n                  title=\"Toggle effect controls\"\n                >\n                  <Settings className=\"glass-w-4 glass-h-4 glass-text-secondary dark:glass-text-secondary\" />\n                </button>\n              </div>\n            )}\n          </div>\n        </div>\n      )}\n\n      {/* Effect Controls Panel */}\n      {showEffectControls && showControls && (\n        <motion.div\n          initial={{ opacity: 0, height: 0 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1, height: \"auto\" }}\n          exit={{ opacity: 0, height: 0 }}\n          className=\"glass-mb-4 glass-p-3 glass-radius-lg glass-surface-dark/5 dark:glass-surface-subtle/5\"\n        >\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n            <span className=\"glass-text-sm glass-font-medium glass-text-secondary dark:glass-text-secondary\">\n              Glass Effects\n            </span>\n            <span className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n              {appliedEffects.length} active\n            </span>\n          </div>\n\n          <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n            {[\"frost\", \"caustics\", \"border\", \"refraction\"].map(\n              (effect: any) => (\n                <button\n                  key={effect}\n                  onClick={() => toggleEffect(effect)}\n                  className={`\n                  flex items-center gap-2 p-2 rounded-lg text-sm transition-all\n                  ${\n                    enabledEffects.includes(effect)\n                      ? \"bg-blue-500/20 text-blue-200 border border-blue-500/30\"\n                      : \"bg-white/8 glass-text-secondary hover:bg-white/12\"\n                  }\n                `}\n                  title={`${enabledEffects.includes(effect) ? \"Disable\" : \"Enable\"} ${effect} effect`}\n                >\n                  {getEffectIcon(effect)}\n                  <span className=\"glass-capitalize\">{effect}</span>\n                  {enabledEffects.includes(effect) && (\n                    <Eye className=\"glass-w-3 glass-h-3 glass-ml-auto\" />\n                  )}\n                </button>\n              )\n            )}\n          </div>\n\n          {/* Worklet status */}\n          <div className=\"glass-mt-2 glass-text-xs glass-text-secondary dark:glass-text-secondary\">\n            Worklets: {canUseWorklets ? \"\u2705 Supported\" : \"\u274C Fallback\"}\n          </div>\n        </motion.div>\n      )}\n\n      {/* Main Content */}\n      <div className=\"glass-relative glass-z-10 glass-min-w-0 glass-break-words\">\n        {children}\n      </div>\n\n      {/* Hover effect overlay */}\n      {interactive && (\n        <motion.div\n          className=\"glass-absolute glass-inset-0 glass-z-0 glass-gradient-primary glass-pointer-events-none\"\n          initial={{ opacity: 0 }}\n          animate={prefersReducedMotion ? {} : { opacity: isHovered ? 1 : 0 }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: performanceMode ? 0.1 : 0.2 }\n          }\n        />\n      )}\n\n      {/* Status indicators */}\n      {showControls && (\n        <div className=\"glass-absolute glass-top-2 glass-right-2 glass-flex glass-gap-1\">\n          {appliedEffects.map((effect: any) => (\n            <div\n              key={effect}\n              className=\"glass-w-2 glass-h-2 glass-radius-full glass-surface-blue glass-opacity-60\"\n              title={`Active: ${effect}`}\n            />\n          ))}\n        </div>\n      )}\n\n      {/* Browser support indicator */}\n      {!isSupported && (\n        <div className=\"glass-absolute glass-bottom-2 glass-right-2\">\n          <div\n            className=\"glass-w-2 glass-h-2 glass-radius-full glass-surface-amber\"\n            title=\"Houdini not supported - using fallback styles\"\n          />\n        </div>\n      )}\n    </motion.div>\n  );\n}\n\n// Demo component showcasing different Houdini glass effects\nexport function HoudiniGlassShowcase() {\n  const [selectedPreset, setSelectedPreset] = useState<\n    \"standard\" | \"frosted\" | \"minimal\" | \"heavy\" | \"crystal\"\n  >(\"standard\");\n  const [selectedEffects, setSelectedEffects] = useState<string[]>([\"frost\"]);\n  const { isSupported, hasPaintAPI, hasPropertyAPI } = useHoudiniGlass();\n\n  const presets = [\n    { id: \"standard\", name: \"Standard\", description: \"Balanced glass effect\" },\n    {\n      id: \"frosted\",\n      name: \"Frosted\",\n      description: \"Enhanced blur and opacity\",\n    },\n    { id: \"minimal\", name: \"Minimal\", description: \"Subtle glass appearance\" },\n    { id: \"heavy\", name: \"Heavy\", description: \"Maximum glass intensity\" },\n    { id: \"crystal\", name: \"Crystal\", description: \"Ultra-clear glass effect\" },\n  ] as const;\n\n  const availableEffects = [\n    { id: \"frost\", name: \"Frost\", description: \"Icy glass texture\" },\n    {\n      id: \"caustics\",\n      name: \"Caustics\",\n      description: \"Light refraction patterns\",\n    },\n    { id: \"border\", name: \"Border\", description: \"Animated border effects\" },\n    {\n      id: \"refraction\",\n      name: \"Refraction\",\n      description: \"Light bending effects\",\n    },\n  ];\n\n  const toggleEffect = (effectId: string) => {\n    setSelectedEffects((prev: any) =>\n      prev.includes(effectId)\n        ? prev.filter((id: any) => id !== effectId)\n        : [...prev, effectId]\n    );\n  };\n\n  return (\n    <div className=\"glass-space-y-6\">\n      {/* Browser Support Status */}\n      <HoudiniGlassCard\n        title=\"Houdini Glass Support\"\n        description=\"Check browser compatibility for CSS Houdini features\"\n        showControls={true}\n      >\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-3 glass-gap-4\">\n          <div className=\"glass-text-center glass-p-3 glass-radius-lg glass-surface-subtle dark:glass-surface-primary\">\n            <div\n              className={`glass-text-2xl glass-mb-2 ${isSupported ? \"glass-text-success\" : \"glass-text-danger\"}`}\n            >\n              {isSupported ? \"\u2705\" : \"\u274C\"}\n            </div>\n            <div className=\"glass-font-medium\">Overall Support</div>\n            <div className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary\">\n              Houdini APIs available\n            </div>\n          </div>\n\n          <div className=\"glass-text-center glass-p-3 glass-radius-lg glass-surface-subtle dark:glass-surface-primary\">\n            <div\n              className={`glass-text-2xl glass-mb-2 ${hasPropertyAPI ? \"glass-text-success\" : \"glass-text-danger\"}`}\n            >\n              {hasPropertyAPI ? \"\u2705\" : \"\u274C\"}\n            </div>\n            <div className=\"glass-font-medium\">Properties API</div>\n            <div className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary\">\n              Custom properties support\n            </div>\n          </div>\n\n          <div className=\"glass-text-center glass-p-3 glass-radius-lg glass-surface-subtle dark:glass-surface-primary\">\n            <div\n              className={`glass-text-2xl glass-mb-2 ${hasPaintAPI ? \"glass-text-success\" : \"glass-text-danger\"}`}\n            >\n              {hasPaintAPI ? \"\u2705\" : \"\u274C\"}\n            </div>\n            <div className=\"glass-font-medium\">Paint API</div>\n            <div className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary\">\n              Paint worklets support\n            </div>\n          </div>\n        </div>\n      </HoudiniGlassCard>\n\n      {/* Preset Selection */}\n      <HoudiniGlassCard\n        title=\"Glass Presets\"\n        description=\"Choose from predefined glass effect configurations\"\n        showControls={true}\n      >\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-5 glass-gap-3\">\n          {presets.map((preset: any) => (\n            <button\n              key={preset.id}\n              onClick={() => setSelectedPreset(preset.id)}\n              className={`\n                glass-p-3 glass-radius-lg glass-text-left glass-transition-all\n                ${\n                  selectedPreset === preset.id\n                    ? \"glass-surface-blue/20 glass-border-2 glass-border-blue/50 glass-text-primary\"\n                    : \"glass-surface-subtle/5 hover:glass-surface-subtle/10 glass-border-2 glass-border-transparent\"\n                }\n              `}\n            >\n              <div className=\"glass-font-medium glass-text-sm\">\n                {preset.name}\n              </div>\n              <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary glass-mt-1\">\n                {preset.description}\n              </div>\n            </button>\n          ))}\n        </div>\n      </HoudiniGlassCard>\n\n      {/* Effect Selection */}\n      <HoudiniGlassCard\n        title=\"Glass Effects\"\n        description=\"Enable/disable individual glass effect layers\"\n        showControls={true}\n      >\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-4 glass-gap-3\">\n          {availableEffects.map((effect: any) => (\n            <button\n              key={effect.id}\n              onClick={() => toggleEffect(effect.id)}\n              className={`\n                p-3 rounded-lg text-left transition-all\n                ${\n                  selectedEffects.includes(effect.id)\n                    ? \"bg-green-500/20 border-2 border-green-500/50 text-green-200\"\n                    : \"bg-white/8 hover:bg-white/12 border-2 border-transparent\"\n                }\n              `}\n            >\n              <div className=\"glass-font-medium glass-text-sm glass-flex glass-items-center glass-gap-2\">\n                {getEffectIcon(effect.id)}\n                {effect.name}\n              </div>\n              <div className=\"glass-text-xs glass-text-secondary dark:glass-text-secondary glass-mt-1\">\n                {effect.description}\n              </div>\n            </button>\n          ))}\n        </div>\n      </HoudiniGlassCard>\n\n      {/* Live Preview */}\n      <HoudiniGlassCard\n        title=\"Live Preview\"\n        description={`Preset: ${selectedPreset} | Effects: ${selectedEffects.join(\", \")}`}\n        preset={selectedPreset}\n        effects={selectedEffects}\n        showControls={true}\n        interactive={true}\n      >\n        <div className=\"glass-space-y-4\">\n          <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n            <div className=\"glass-p-4 glass-radius-lg glass-gradient-primary glass-gradient-primary glass-gradient-primary dark:glass-gradient-primary dark:glass-gradient-primary\">\n              <h4 className=\"glass-font-medium glass-text-secondary dark:glass-text-primary glass-mb-2\">\n                Content Area 1\n              </h4>\n              <p className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary\">\n                This is a preview of how the selected glass effects appear with\n                your content. The effects are applied using CSS Houdini for\n                maximum performance.\n              </p>\n            </div>\n\n            <div className=\"glass-p-4 glass-radius-lg glass-gradient-primary glass-gradient-primary glass-gradient-primary dark:glass-gradient-primary dark:glass-gradient-primary\">\n              <h4 className=\"glass-font-medium glass-text-secondary dark:glass-text-primary glass-mb-2\">\n                Content Area 2\n              </h4>\n              <p className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary\">\n                Experiment with different presets and effects to find the\n                perfect glass aesthetic for your application.\n              </p>\n            </div>\n          </div>\n\n          <div className=\"glass-p-4 glass-radius-lg glass-gradient-primary glass-gradient-primary glass-gradient-primary dark:glass-gradient-primary dark:glass-gradient-primary\">\n            <h4 className=\"glass-font-medium glass-text-secondary dark:glass-text-primary glass-mb-2\">\n              Interactive Element\n            </h4>\n            <p className=\"glass-text-sm glass-text-secondary dark:glass-text-secondary glass-mb-3\">\n              Hover over this card to see the interactive effects in action.\n            </p>\n            <button className=\"glass-px-4 glass-py-2 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-transition-colors\">\n              Interactive Button\n            </button>\n          </div>\n        </div>\n      </HoudiniGlassCard>\n    </div>\n  );\n}\n\n// Helper function for effect icons (used in showcase)\nfunction getEffectIcon(effect: string) {\n  switch (effect) {\n    case \"frost\":\n      return <Sparkles className=\"glass-w-4 glass-h-4\" />;\n    case \"caustics\":\n      return <Sun className=\"glass-w-4 glass-h-4\" />;\n    case \"border\":\n      return <Layers className=\"glass-w-4 glass-h-4\" />;\n    case \"refraction\":\n      return <Droplets className=\"glass-w-4 glass-h-4\" />;\n    default:\n      return <Zap className=\"glass-w-4 glass-h-4\" />;\n  }\n}\n\nexport default HoudiniGlassCard;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Clock,\n  FileText,\n  Filter,\n  Grid3X3,\n  History,\n  Image as ImageIcon,\n  List,\n  MapPin,\n  Mic,\n  MoreHorizontal,\n  Save,\n  Search,\n  SortAsc,\n  SortDesc,\n  Star,\n  Tag,\n  Users,\n  Video,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useRef, useState, forwardRef } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\n\nexport type SearchFilterRangeValue = {\n  min?: string | number;\n  max?: string | number;\n  [key: string]: unknown;\n};\n\nexport type SearchFilterValue =\n  | string\n  | number\n  | boolean\n  | Date\n  | null\n  | undefined\n  | Array<string | number | boolean>\n  | SearchFilterRangeValue;\n\nexport interface SearchFilterOption {\n  label: string;\n  value: Exclude<SearchFilterValue, Date | SearchFilterRangeValue | undefined>;\n}\n\nexport type SearchFilterState = Record<string, SearchFilterValue>;\nexport type SearchResultMetadata = Record<string, unknown>;\ntype SearchSort = \"relevance\" | \"date\" | \"title\";\n\nexport interface SearchFilter {\n  id: string;\n  label: string;\n  type: \"text\" | \"select\" | \"multiselect\" | \"date\" | \"range\" | \"boolean\";\n  value?: SearchFilterValue;\n  options?: SearchFilterOption[];\n  placeholder?: string;\n}\n\nexport interface SearchSuggestion {\n  id: string;\n  text: string;\n  category?: string;\n  icon?: React.ReactNode;\n  count?: number;\n}\n\nexport interface SearchResult {\n  id: string;\n  title: string;\n  description?: string;\n  type: \"document\" | \"image\" | \"video\" | \"audio\" | \"user\" | \"location\" | \"tag\";\n  thumbnail?: string;\n  metadata: SearchResultMetadata;\n  relevance: number;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nconst isSearchSort = (value: string): value is SearchSort =>\n  value === \"relevance\" || value === \"date\" || value === \"title\";\n\nconst isRangeFilterValue = (value: unknown): value is SearchFilterRangeValue =>\n  typeof value === \"object\" &&\n  value !== null &&\n  !Array.isArray(value) &&\n  !(value instanceof Date);\n\nconst stringifyFilterValue = (value: SearchFilterValue): string => {\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  if (Array.isArray(value)) {\n    return value.map(String).join(\",\");\n  }\n  if (isRangeFilterValue(value)) {\n    return `${value.min ?? \"\"} - ${value.max ?? \"\"}`;\n  }\n  return value == null ? \"\" : String(value);\n};\n\nexport interface GlassAdvancedSearchProps {\n  /**\n   * Search placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Available search filters\n   */\n  filters?: SearchFilter[];\n  /**\n   * Search suggestions\n   */\n  suggestions?: SearchSuggestion[];\n  /**\n   * Search results\n   */\n  results?: SearchResult[];\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Enable search history\n   */\n  enableHistory?: boolean;\n  /**\n   * Enable saved searches\n   */\n  enableSavedSearches?: boolean;\n  /**\n   * Enable advanced filters\n   */\n  enableAdvancedFilters?: boolean;\n  /**\n   * Show result statistics\n   */\n  showStats?: boolean;\n  /**\n   * Search input handler\n   */\n  onSearch?: (query: string, filters: SearchFilterState) => void;\n  /**\n   * Filter change handler\n   */\n  onFilterChange?: (filters: SearchFilterState) => void;\n  /**\n   * Result click handler\n   */\n  onResultClick?: (result: SearchResult) => void;\n  /**\n   * Save search handler\n   */\n  onSaveSearch?: (\n    name: string,\n    query: string,\n    filters: SearchFilterState\n  ) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Respect user's motion preferences\n   */\n  respectMotionPreference?: boolean;\n  /**\n   * Custom ID\n   */\n  id?: string;\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n  /**\n   * ARIA label for accessibility\n   */\n  \"aria-label\"?: string;\n  /**\n   * Compact density for constrained previews and embedded panels.\n   */\n  compact?: boolean;\n  /**\n   * Keep the search panel visually bounded inside its parent.\n   */\n  contained?: boolean;\n  /**\n   * Maximum rendered height for contained/compact contexts.\n   */\n  maxHeight?: number | string;\n  /**\n   * Maximum rendered width for contained/compact contexts.\n   */\n  maxWidth?: number | string;\n}\n\n/**\n * GlassAdvancedSearch component\n * A comprehensive search interface with filters, suggestions, and advanced features\n */\nexport const GlassAdvancedSearch = forwardRef<\n  HTMLDivElement,\n  GlassAdvancedSearchProps\n>(\n  (\n    {\n      placeholder = \"Search...\",\n      filters = [],\n      suggestions = [],\n      results = [],\n      loading = false,\n      enableHistory = true,\n      enableSavedSearches = true,\n      enableAdvancedFilters = true,\n      showStats = true,\n      onSearch,\n      onFilterChange,\n      onResultClick,\n      onSaveSearch,\n      className,\n      respectMotionPreference = true,\n      id,\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      compact = false,\n      contained = false,\n      maxHeight,\n      maxWidth,\n      ...props\n    },\n    ref\n  ) => {\n    const [query, setQuery] = useState(\"\");\n    const [activeFilters, setActiveFilters] = useState<SearchFilterState>({});\n    const [showSuggestions, setShowSuggestions] = useState(false);\n    const [showFilters, setShowFilters] = useState(false);\n    const [sortBy, setSortBy] = useState<SearchSort>(\"relevance\");\n    const [sortOrder, setSortOrder] = useState<\"asc\" | \"desc\">(\"desc\");\n    const [viewMode, setViewMode] = useState<\"list\" | \"grid\">(\"list\");\n    const [searchHistory, setSearchHistory] = useState<string[]>([]);\n    const [savedSearches, setSavedSearches] = useState<\n      Array<{ name: string; query: string; filters: SearchFilterState }>\n    >([]);\n\n    const prefersReducedMotion = useReducedMotion();\n    const componentId = id || useA11yId(\"advanced-search\");\n    const inputRef = useRef<HTMLInputElement>(null);\n    const suggestionsRef = useRef<HTMLDivElement>(null);\n\n    // Handle search input\n    const handleSearchInput = useCallback(\n      (e: React.ChangeEvent<HTMLInputElement>) => {\n        const value = e.target.value;\n        setQuery(value);\n        setShowSuggestions(value.length > 0);\n\n        // Debounced search\n        const timeoutId = setTimeout(() => {\n          if (value.trim()) {\n            onSearch?.(value, activeFilters);\n            // Add to history\n            if (enableHistory && !searchHistory.includes(value)) {\n              setSearchHistory((prev) => [value, ...prev.slice(0, 9)]);\n            }\n          }\n        }, 300);\n\n        return () => clearTimeout(timeoutId);\n      },\n      [activeFilters, onSearch, enableHistory, searchHistory]\n    );\n\n    // Handle filter change\n    const handleFilterChange = useCallback(\n      (filterId: string, value: SearchFilterValue) => {\n        const newFilters = { ...activeFilters, [filterId]: value };\n        setActiveFilters(newFilters);\n        onFilterChange?.(newFilters);\n\n        // Auto-search when filters change\n        if (query.trim()) {\n          onSearch?.(query, newFilters);\n        }\n      },\n      [activeFilters, query, onFilterChange, onSearch]\n    );\n\n    // Handle suggestion click\n    const handleSuggestionClick = useCallback(\n      (suggestion: SearchSuggestion) => {\n        setQuery(suggestion.text);\n        setShowSuggestions(false);\n        onSearch?.(suggestion.text, activeFilters);\n      },\n      [activeFilters, onSearch]\n    );\n\n    // Handle result click\n    const handleResultClick = useCallback(\n      (result: SearchResult) => {\n        onResultClick?.(result);\n      },\n      [onResultClick]\n    );\n\n    // Handle save search\n    const handleSaveSearch = useCallback(() => {\n      const name = prompt(\"Enter a name for this search:\");\n      if (name && query.trim()) {\n        const search = { name, query, filters: activeFilters };\n        setSavedSearches((prev) => [search, ...prev]);\n        onSaveSearch?.(name, query, activeFilters);\n      }\n    }, [query, activeFilters, onSaveSearch]);\n\n    // Clear all filters\n    const handleClearFilters = useCallback(() => {\n      setActiveFilters({});\n      onFilterChange?.({});\n    }, [onFilterChange]);\n\n    // Get filter value display\n    const getFilterValueDisplay = useCallback(\n      (filter?: SearchFilter) => {\n        if (!filter) return null;\n\n        const value = activeFilters[filter.id];\n        if (!value) return null;\n\n        switch (filter.type) {\n          case \"select\":\n          case \"multiselect\":\n            if (Array.isArray(value)) {\n              return value\n                .map(\n                  (v) =>\n                    filter.options?.find((o) => String(o.value) === String(v))\n                      ?.label || String(v)\n                )\n                .join(\", \");\n            }\n            return (\n              filter.options?.find((o) => String(o.value) === String(value))\n                ?.label || stringifyFilterValue(value)\n            );\n          case \"date\":\n            return new Date(stringifyFilterValue(value)).toLocaleDateString();\n          case \"range\":\n            return isRangeFilterValue(value)\n              ? `${value.min ?? \"\"} - ${value.max ?? \"\"}`\n              : stringifyFilterValue(value);\n          case \"boolean\":\n            return value ? \"Yes\" : \"No\";\n          default:\n            return String(value);\n        }\n      },\n      [activeFilters]\n    );\n\n    // Get result type icon\n    const getResultTypeIcon = useCallback((type: SearchResult[\"type\"]) => {\n      switch (type) {\n        case \"document\":\n          return <FileText className=\"glass-w-4 glass-h-4\" />;\n        case \"image\":\n          return <ImageIcon className=\"glass-w-4 glass-h-4\" />;\n        case \"video\":\n          return <Video className=\"glass-w-4 glass-h-4\" />;\n        case \"audio\":\n          return <Mic className=\"glass-w-4 glass-h-4\" />;\n        case \"user\":\n          return <Users className=\"glass-w-4 glass-h-4\" />;\n        case \"location\":\n          return <MapPin className=\"glass-w-4 glass-h-4\" />;\n        case \"tag\":\n          return <Tag className=\"glass-w-4 glass-h-4\" />;\n        default:\n          return <FileText className=\"glass-w-4 glass-h-4\" />;\n      }\n    }, []);\n\n    // Format file size\n    const formatFileSize = useCallback((bytes: number) => {\n      if (bytes === 0) return \"0 B\";\n      const k = 1024;\n      const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n      const i = Math.floor(Math.log(bytes) / Math.log(k));\n      return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + \" \" + sizes[i];\n    }, []);\n\n    // Active filter count\n    const activeFilterCount = Object.values(activeFilters).filter(\n      (v) =>\n        v !== null &&\n        v !== undefined &&\n        v !== \"\" &&\n        (!Array.isArray(v) || v.length > 0)\n    ).length;\n\n    return (\n      <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n        <GlassCard\n          ref={ref}\n          id={componentId}\n          className={cn(\n            \"glass-overflow-hidden\",\n            compact && \"glass-text-sm\",\n            className\n          )}\n          style={{\n            maxHeight,\n            maxWidth,\n            overflow: contained || compact ? \"hidden\" : undefined,\n          }}\n          data-glass-component\n          role=\"search\"\n          aria-label={ariaLabel || \"Advanced search interface\"}\n          aria-describedby={`${componentId}-description`}\n          data-testid={dataTestId}\n          {...props}\n        >\n          <div id={`${componentId}-description`} className=\"glass-sr-only\">\n            Advanced search interface with filters, suggestions, and result\n            management\n          </div>\n          <CardHeader className={compact ? \"glass-pb-2\" : \"glass-pb-3\"}>\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <CardTitle\n                className={cn(\n                  \"glass-text-primary glass-font-semibold glass-flex glass-items-center glass-gap-2\",\n                  compact ? \"glass-text-sm\" : \"glass-text-lg\"\n                )}\n              >\n                <Search\n                  className={\n                    compact ? \"glass-w-4 glass-h-4\" : \"glass-w-5 glass-h-5\"\n                  }\n                />\n                {compact ? \"Search\" : \"Advanced Search\"}\n              </CardTitle>\n\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                {enableSavedSearches && (\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={handleSaveSearch}\n                    disabled={!query.trim()}\n                    className=\"glass-p-2\"\n                    aria-label=\"Save search\"\n                  >\n                    <Save className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                  </GlassButton>\n                )}\n\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setShowFilters(!showFilters)}\n                  className=\"glass-p-2 glass-relative\"\n                  aria-label={showFilters ? \"Hide filters\" : \"Show filters\"}\n                  aria-pressed={showFilters}\n                >\n                  <Filter className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                  {activeFilterCount > 0 && (\n                    <span\n                      className=\"glass-absolute glass-top-1 glass--right-1 glass-w-5 glass-h-5 glass-surface-primary glass-text-primary glass-text-xs glass-radius-full glass-flex glass-items-center glass-justify-center\"\n                      aria-label={`${activeFilterCount} active filters`}\n                    >\n                      {activeFilterCount}\n                    </span>\n                  )}\n                </GlassButton>\n              </div>\n            </div>\n          </CardHeader>\n\n          <CardContent\n            className={cn(\n              \"glass-pt-0 glass-auto-gap\",\n              compact ? \"glass-auto-gap-sm\" : \"glass-auto-gap-lg\"\n            )}\n          >\n            {/* Search Input */}\n            <div className=\"glass-relative\">\n              <div className=\"glass-relative\">\n                <Search className=\"glass-absolute glass-left-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-text-primary-glass-opacity-60 glass-w-4 glass-h-4\" />\n                <input\n                  ref={inputRef}\n                  type=\"text\"\n                  value={query}\n                  onChange={handleSearchInput}\n                  placeholder={placeholder}\n                  className={cn(\n                    \"glass-w-full glass-pl-10 glass-pr-4 glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-lg glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none glass-focus-ring-white-opacity-30 glass-touch-target glass-contrast-guard\",\n                    compact ? \"glass-py-2 glass-text-sm\" : \"glass-py-3\"\n                  )}\n                />\n                {query && (\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => {\n                      setQuery(\"\");\n                      setShowSuggestions(false);\n                    }}\n                    className=\"glass-absolute glass-right-2 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-p-1\"\n                  >\n                    <X className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                )}\n              </div>\n\n              {/* Search Suggestions */}\n              {showSuggestions && suggestions.length > 0 && (\n                <Motion\n                  preset=\"slideDown\"\n                  className=\"glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-2 glass-z-10\"\n                >\n                  <div\n                    ref={suggestionsRef}\n                    className=\"glass-surface-dark/80 glass-backdrop-blur-md glass-border glass-border-white/20 glass-radius-lg glass-shadow-xl glass-max-glass-h-64 glass-overflow-y-auto glass-contrast-guard\"\n                  >\n                    {suggestions.map((suggestion) => (\n                      <button\n                        key={suggestion.id}\n                        onClick={(e) => handleSuggestionClick(suggestion)}\n                        className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 hover:glass-surface-subtle/10 glass-transition-colors glass-flex glass-items-center glass-gap-3 first:glass-radius-t-lg last:glass-radius-b-lg\"\n                      >\n                        {suggestion.icon && (\n                          <span className=\"glass-text-primary-glass-opacity-60\">\n                            {suggestion.icon}\n                          </span>\n                        )}\n                        <div className=\"glass-flex-1\">\n                          <span className=\"glass-text-primary\">\n                            {suggestion.text}\n                          </span>\n                          {suggestion.category && (\n                            <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm glass-ml-2\">\n                              in {suggestion.category}\n                            </span>\n                          )}\n                        </div>\n                        {suggestion.count && (\n                          <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n                            {suggestion.count}\n                          </span>\n                        )}\n                      </button>\n                    ))}\n                  </div>\n                </Motion>\n              )}\n            </div>\n\n            {/* Active Filters */}\n            {activeFilterCount > 0 && (\n              <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n                {Object.entries(activeFilters).map(([filterId, value]) => {\n                  if (\n                    !value ||\n                    value === \"\" ||\n                    (Array.isArray(value) && value.length === 0)\n                  )\n                    return null;\n\n                  const filter = filters.find((f) => f.id === filterId);\n                  const displayValue = getFilterValueDisplay(filter!);\n\n                  return (\n                    <GlassBadge\n                      key={filterId}\n                      variant=\"secondary\"\n                      className=\"glass-flex glass-items-center glass-gap-2\"\n                    >\n                      <span className=\"glass-text-sm\">\n                        {filter?.label}: {displayValue}\n                      </span>\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={(e) => handleFilterChange(filterId, null)}\n                        className=\"glass-p-0 glass-h-auto\"\n                      >\n                        <X className=\"glass-w-3 glass-h-3\" />\n                      </GlassButton>\n                    </GlassBadge>\n                  );\n                })}\n\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={handleClearFilters}\n                  className=\"glass-text-sm\"\n                >\n                  Clear all\n                </GlassButton>\n              </div>\n            )}\n\n            {/* Advanced Filters Panel */}\n            {!compact && showFilters && enableAdvancedFilters && (\n              <Motion\n                preset=\"slideDown\"\n                className=\"glass-auto-gap glass-auto-gap-lg glass-p-4 glass-surface-subtle/5 glass-radius-lg\"\n              >\n                <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-4\">\n                  {filters.map((filter) => (\n                    <div\n                      key={filter.id}\n                      className=\"glass-auto-gap glass-auto-gap-sm\"\n                    >\n                      <label className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                        {filter.label}\n                      </label>\n\n                      {filter.type === \"text\" && (\n                        <input\n                          type=\"text\"\n                          value={stringifyFilterValue(activeFilters[filter.id])}\n                          onChange={(e) =>\n                            handleFilterChange(filter.id, e.target.value)\n                          }\n                          placeholder={filter.placeholder}\n                          className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none glass-focus-ring-white-opacity-30\"\n                        />\n                      )}\n\n                      {filter.type === \"select\" && (\n                        <select\n                          value={stringifyFilterValue(activeFilters[filter.id])}\n                          onChange={(e) =>\n                            handleFilterChange(filter.id, e.target.value)\n                          }\n                          className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-text-primary glass-focus-outline-none glass-focus-ring-white-opacity-30\"\n                        >\n                          <option value=\"\">All</option>\n                          {filter.options?.map((option) => (\n                            <option\n                              key={String(option.value)}\n                              value={String(option.value)}\n                            >\n                              {option.label}\n                            </option>\n                          ))}\n                        </select>\n                      )}\n\n                      {filter.type === \"date\" && (\n                        <input\n                          type=\"date\"\n                          value={stringifyFilterValue(activeFilters[filter.id])}\n                          onChange={(e) =>\n                            handleFilterChange(filter.id, e.target.value)\n                          }\n                          className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-text-primary glass-focus-outline-none glass-focus-ring-white-opacity-30\"\n                        />\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </Motion>\n            )}\n\n            {/* Search History */}\n            {!compact &&\n              enableHistory &&\n              searchHistory.length > 0 &&\n              !query && (\n                <div className=\"glass-auto-gap glass-auto-gap-sm\">\n                  <h4 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium glass-flex glass-items-center glass-gap-2\">\n                    <History className=\"glass-w-4 glass-h-4\" />\n                    Recent Searches\n                  </h4>\n                  <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n                    {searchHistory.slice(0, 5).map((search, index) => (\n                      <GlassButton\n                        key={index}\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={(e) => {\n                          setQuery(search);\n                          onSearch?.(search, activeFilters);\n                        }}\n                        className=\"glass-text-sm\"\n                      >\n                        {search}\n                      </GlassButton>\n                    ))}\n                  </div>\n                </div>\n              )}\n\n            {/* Results Header */}\n            {!compact && query && (\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <div className=\"glass-flex glass-items-center glass-gap-4\">\n                  {showStats && (\n                    <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm\">\n                      {loading ? \"Searching...\" : `${results.length} results`}\n                    </span>\n                  )}\n\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm\">\n                      Sort:\n                    </span>\n                    <select\n                      value={sortBy}\n                      onChange={(e) => {\n                        if (isSearchSort(e.target.value)) {\n                          setSortBy(e.target.value);\n                        }\n                      }}\n                      className=\"glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-px-2 glass-py-1 glass-text-sm glass-text-primary glass-focus-outline-none\"\n                    >\n                      <option value=\"relevance\">Relevance</option>\n                      <option value=\"date\">Date</option>\n                      <option value=\"title\">Title</option>\n                    </select>\n\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={(e) =>\n                        setSortOrder(sortOrder === \"asc\" ? \"desc\" : \"asc\")\n                      }\n                      className=\"glass-p-1\"\n                    >\n                      {sortOrder === \"asc\" ? (\n                        <SortAsc className=\"glass-w-4 glass-h-4\" />\n                      ) : (\n                        <SortDesc className=\"glass-w-4 glass-h-4\" />\n                      )}\n                    </GlassButton>\n                  </div>\n                </div>\n\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <GlassButton\n                    variant={viewMode === \"list\" ? \"primary\" : \"ghost\"}\n                    size=\"sm\"\n                    onClick={(e) => setViewMode(\"list\")}\n                    className=\"glass-p-2\"\n                  >\n                    <List className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n\n                  <GlassButton\n                    variant={viewMode === \"grid\" ? \"primary\" : \"ghost\"}\n                    size=\"sm\"\n                    onClick={(e) => setViewMode(\"grid\")}\n                    className=\"glass-p-2\"\n                  >\n                    <Grid3X3 className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                </div>\n              </div>\n            )}\n\n            {/* Search Results */}\n            {!compact && query && (\n              <div className=\"glass-auto-gap glass-auto-gap-md\">\n                {loading ? (\n                  <div className=\"glass-flex glass-items-center glass-justify-center glass-py-12\">\n                    <div className=\"glass-animate-spin glass-radius-full glass-h-8 glass-w-8 glass-border-2 glass-border-white/20 glass-border-t-white/60\"></div>\n                  </div>\n                ) : results.length === 0 ? (\n                  <div className=\"glass-text-center glass-py-12\">\n                    <Search className=\"glass-w-12 glass-h-12 glass-text-primary-glass-opacity-40 glass-mx-auto glass-mb-4\" />\n                    <p className=\"glass-text-primary-glass-opacity-60\">\n                      No results found for \"{query}\"\n                    </p>\n                  </div>\n                ) : (\n                  <div\n                    className={cn(\n                      viewMode === \"grid\"\n                        ? \"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-4\"\n                        : \"glass-auto-gap glass-auto-gap-md\"\n                    )}\n                  >\n                    {results.map((result) => (\n                      <Motion\n                        key={result.id}\n                        preset=\"fadeIn\"\n                        className={cn(\n                          \"glass-cursor-pointer glass-transition glass-hover-lift\",\n                          viewMode === \"list\" &&\n                            \"glass-p-4 glass-surface-subtle/10 glass-radius-lg\"\n                        )}\n                        onClick={(e) => handleResultClick(result)}\n                      >\n                        <div className=\"glass-flex glass-gap-3\">\n                          {/* Thumbnail */}\n                          {result.thumbnail && (\n                            <div className=\"glass-flex-shrink-0\">\n                              <img\n                                src={result.thumbnail}\n                                alt={result.title}\n                                className=\"glass-w-12 glass-h-12 glass-radius-md glass-object-cover\"\n                              />\n                            </div>\n                          )}\n\n                          {/* Content */}\n                          <div className=\"glass-flex-1 glass-min-w-0\">\n                            <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-2\">\n                              <div className=\"glass-flex-1\">\n                                <h3 className=\"glass-text-primary glass-font-medium glass-truncate\">\n                                  {result.title}\n                                </h3>\n                                {result.description && (\n                                  <p className=\"glass-text-primary-opacity-70 glass-text-sm glass-mt-1 glass-line-clamp-2\">\n                                    {result.description}\n                                  </p>\n                                )}\n\n                                {/* Metadata */}\n                                <div className=\"glass-flex glass-items-center glass-gap-3 glass-mt-2 glass-text-xs glass-text-primary-glass-opacity-60\">\n                                  <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                    {getResultTypeIcon(result.type)}\n                                    <span className=\"glass-capitalize\">\n                                      {result.type}\n                                    </span>\n                                  </div>\n\n                                  <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                    <Clock className=\"glass-w-3 glass-h-3\" />\n                                    {result.updatedAt.toLocaleDateString()}\n                                  </div>\n\n                                  {typeof result.metadata.size === \"number\" && (\n                                    <span>\n                                      {formatFileSize(result.metadata.size)}\n                                    </span>\n                                  )}\n                                </div>\n                              </div>\n\n                              {/* Actions */}\n                              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                <GlassButton\n                                  variant=\"ghost\"\n                                  size=\"sm\"\n                                  onClick={(e) => {\n                                    e.stopPropagation();\n                                    // Handle favorite\n                                  }}\n                                  className=\"glass-p-1\"\n                                >\n                                  <Star className=\"glass-w-3 glass-h-3\" />\n                                </GlassButton>\n\n                                <GlassButton\n                                  variant=\"ghost\"\n                                  size=\"sm\"\n                                  onClick={(e) => e.stopPropagation()}\n                                  className=\"glass-p-1\"\n                                >\n                                  <MoreHorizontal className=\"glass-w-3 glass-h-3\" />\n                                </GlassButton>\n                              </div>\n                            </div>\n                          </div>\n                        </div>\n                      </Motion>\n                    ))}\n                  </div>\n                )}\n              </div>\n            )}\n          </CardContent>\n        </GlassCard>\n      </Motion>\n    );\n  }\n);\n\nGlassAdvancedSearch.displayName = \"GlassAdvancedSearch\";\n\nexport default GlassAdvancedSearch;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nconst avatarFallbackStyle = createGlassStyle({\n  intent: \"neutral\",\n  elevation: \"level2\",\n});\n\nexport interface AvatarItem {\n  name: string;\n  avatar?: string;\n  status?: \"online\" | \"away\" | \"busy\" | \"offline\";\n}\n\nexport interface GlassAvatarGroupProps {\n  users?: AvatarItem[];\n  children?: React.ReactNode;\n  max?: number;\n  size?: \"sm\" | \"md\" | \"lg\";\n  className?: string;\n  /** Custom ID */\n  id?: string;\n  /** Custom ARIA label */\n  \"aria-label\"?: string;\n}\n\nexport const GlassAvatarGroup = forwardRef<\n  HTMLDivElement,\n  GlassAvatarGroupProps\n>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      users = [],\n      children,\n      max = 5,\n      size = \"md\",\n      className,\n      id,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const componentId = useA11yId(id || \"avatar-group\");\n    const s = size === \"sm\" ? 24 : size === \"lg\" ? 40 : 32;\n    const overlap = size === \"sm\" ? -8 : size === \"lg\" ? -12 : -10;\n    const childArray = React.Children.toArray(children);\n    const hasChildren = childArray.length > 0;\n    const shown = users.slice(0, max);\n    const visibleChildren = childArray.slice(0, max);\n    const rest = hasChildren\n      ? childArray.length - visibleChildren.length\n      : users.length - shown.length;\n\n    const total = hasChildren ? childArray.length : users.length;\n    const shownCount = hasChildren ? visibleChildren.length : shown.length;\n    const defaultAriaLabel = `Group of ${total} users${rest > 0 ? `, showing ${shownCount} of ${total}` : \"\"}`;\n    return (\n      <div\n        data-glass-component\n        ref={ref}\n        id={componentId}\n        className={cn(\n          \"glass-flex glass-items-center glass-justify-center glass-min-w-0\",\n          className\n        )}\n        role=\"group\"\n        aria-label={ariaLabel || defaultAriaLabel}\n        {...props}\n      >\n        {hasChildren\n          ? visibleChildren.map((child, i) => (\n              <div\n                key={i}\n                className=\"glass-relative\"\n                style={{\n                  marginLeft: i === 0 ? 0 : overlap,\n                  zIndex: shownCount - i,\n                }}\n              >\n                {child}\n              </div>\n            ))\n          : shown.map((u, i) => (\n              <div\n                key={u.name + i}\n                className=\"glass-relative\"\n                style={{\n                  marginLeft: i === 0 ? 0 : overlap,\n                  zIndex: shownCount - i,\n                }}\n                role=\"img\"\n                aria-label={`${u.name}${u.status ? ` (${u.status})` : \"\"}`}\n              >\n                {u.avatar ? (\n                  <img\n                    src={u.avatar}\n                    alt={u.name}\n                    width={s}\n                    height={s}\n                    className=\"glass-radius-full glass-object-cover glass-border glass-border-white/20\"\n                    style={{\n                      display: \"block\",\n                      width: s,\n                      height: s,\n                      borderRadius: 9999,\n                      objectFit: \"cover\",\n                    }}\n                  />\n                ) : (\n                  <div\n                    className=\"glass-radius-full glass-surface-subtle/10 glass-border glass-border-white/20 glass-flex glass-items-center glass-justify-center\"\n                    style={{\n                      ...avatarFallbackStyle,\n                      width: s,\n                      height: s,\n                      borderRadius: 9999,\n                      display: \"flex\",\n                      alignItems: \"center\",\n                      justifyContent: \"center\",\n                      border: \"1px solid rgba(255, 255, 255, 0.22)\",\n                    }}\n                  >\n                    <span\n                      className=\"glass-text-xs glass-text-primary\"\n                      style={{\n                        color: \"rgba(248, 250, 252, 0.92)\",\n                        fontSize: 12,\n                        fontWeight: 600,\n                      }}\n                      aria-hidden=\"true\"\n                    >\n                      {u.name.charAt(0)}\n                    </span>\n                  </div>\n                )}\n                {u.status && (\n                  <span\n                    className={cn(\n                      \"absolute -bottom-0.5 -right-0.5 w-3 h-3 glass-radius-full border-2 border-background\",\n                      u.status === \"online\"\n                        ? \"bg-green-500\"\n                        : u.status === \"away\"\n                          ? \"bg-yellow-500\"\n                          : u.status === \"busy\"\n                            ? \"bg-red-500\"\n                            : \"bg-slate-500\"\n                    )}\n                    style={{\n                      position: \"absolute\",\n                      right: -2,\n                      bottom: -2,\n                      width: 12,\n                      height: 12,\n                      borderRadius: 9999,\n                    }}\n                    aria-label={`Status: ${u.status}`}\n                    role=\"img\"\n                  />\n                )}\n              </div>\n            ))}\n        {rest > 0 && (\n          <div\n            className=\"glass-radius-full glass-surface-subtle/10 glass-border glass-border-white/20 glass-flex glass-items-center glass-justify-center glass-ml--10px\"\n            style={{\n              ...avatarFallbackStyle,\n              width: s,\n              height: s,\n              marginLeft: overlap,\n              borderRadius: 9999,\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              border: \"1px solid rgba(255, 255, 255, 0.22)\",\n            }}\n            role=\"img\"\n            aria-label={`${rest} more users`}\n          >\n            <span\n              className=\"glass-text-xs glass-text-primary\"\n              aria-hidden=\"true\"\n            >\n              +{rest}\n            </span>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassAvatarGroup.displayName = \"GlassAvatarGroup\";\n\nexport default GlassAvatarGroup;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ChevronLeft,\n  ChevronRight,\n  Maximize2,\n  Minimize2,\n  Pause,\n  Play,\n} from \"@/icons\";\nimport React, {\n  Children,\n  ReactNode,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  forwardRef,\n} from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\n\nexport interface CarouselItem {\n  id: string;\n  content: ReactNode;\n  title?: string;\n  description?: string;\n  image?: string;\n}\n\nexport interface GlassCarouselProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    ConsciousnessFeatures {\n  /**\n   * Carousel items or children\n   */\n  children?: ReactNode;\n  items?: CarouselItem[];\n  /**\n   * Initial active slide index\n   */\n  initialIndex?: number;\n  /**\n   * Number of slides to show at once\n   */\n  slidesToShow?: number;\n  /**\n   * Number of slides to scroll at once\n   */\n  slidesToScroll?: number;\n  /**\n   * Enable infinite loop\n   */\n  infinite?: boolean;\n  /**\n   * Enable auto-play\n   */\n  autoPlay?: boolean;\n  /**\n   * Auto-play interval in milliseconds\n   */\n  autoPlayInterval?: number;\n  /**\n   * Show navigation arrows\n   */\n  showArrows?: boolean;\n  /**\n   * Show navigation dots\n   */\n  showDots?: boolean;\n  /**\n   * Show slide indicators\n   */\n  showIndicators?: boolean;\n  /**\n   * Enable swipe gestures\n   */\n  enableSwipe?: boolean;\n  /**\n   * Enable keyboard navigation\n   */\n  enableKeyboard?: boolean;\n  /**\n   * Animation duration in milliseconds\n   */\n  animationDuration?: number;\n  /**\n   * Pause auto-play on hover\n   */\n  pauseOnHover?: boolean;\n  /**\n   * Carousel height\n   */\n  height?: string | number;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Contain carousel height in a bounded viewport. */\n  contained?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /**\n   * Gap between slides\n   */\n  gap?: string | number;\n  /**\n   * Show fullscreen toggle\n   */\n  showFullscreen?: boolean;\n  /**\n   * Slide change callback\n   */\n  onSlideChange?: (index: number) => void;\n  /**\n   * Custom arrow components\n   */\n  customPrevArrow?: ReactNode;\n  customNextArrow?: ReactNode;\n}\n\n/**\n * GlassCarousel component\n * A flexible carousel/slider with smooth animations and multiple display modes\n */\nexport const GlassCarousel = forwardRef<HTMLDivElement, GlassCarouselProps>(\n  (\n    {\n      children,\n      items = [],\n      initialIndex = 0,\n      slidesToShow = 1,\n      slidesToScroll = 1,\n      infinite = true,\n      autoPlay = false,\n      autoPlayInterval = 3000,\n      showArrows = true,\n      showDots = true,\n      showIndicators = false,\n      enableSwipe = true,\n      enableKeyboard = true,\n      animationDuration = 500,\n      pauseOnHover = true,\n      height = \"400px\",\n      compact = false,\n      contained = false,\n      maxHeight,\n      gap = \"1rem\",\n      showFullscreen = false,\n      className,\n      onSlideChange,\n      customPrevArrow,\n      customNextArrow,\n      // Consciousness features\n      predictive = false,\n      preloadContent = false,\n      eyeTracking = false,\n      gazeResponsive = false,\n      adaptive = false,\n      biometricResponsive = false,\n      spatialAudio = false,\n      audioFeedback = false,\n      trackAchievements = false,\n      achievementId,\n      usageContext = \"main\",\n      ...props\n    },\n    ref\n  ) => {\n    const carouselRef = useRef<HTMLDivElement>(null);\n    const autoPlayRef = useRef<NodeJS.Timeout>();\n    const transitionRef = useRef<NodeJS.Timeout>();\n\n    // Consciousness feature hooks - only initialize if features are enabled\n    const predictiveEngine = predictive ? usePredictiveEngine() : null;\n    const eyeTracker = eyeTracking ? useEyeTracking() : null;\n    const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n    const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n    const achievementTracker = trackAchievements ? useAchievements() : null;\n    const interactionRecorder =\n      predictive || trackAchievements\n        ? useInteractionRecorder(`glass-carousel-${usageContext}`)\n        : null;\n    const [currentIndex, setCurrentIndex] = useState(initialIndex);\n    const [isPlaying, setIsPlaying] = useState(autoPlay);\n    const [isFullscreen, setIsFullscreen] = useState(false);\n    const [isTransitioning, setIsTransitioning] = useState(false);\n    const [dragStart, setDragStart] = useState<number | null>(null);\n    const [dragEnd, setDragEnd] = useState<number | null>(null);\n\n    // Consciousness state\n    const [slideInteractionCounts, setSlideInteractionCounts] = useState<\n      Record<number, number>\n    >({});\n    const [predictedNextSlide, setPredictedNextSlide] = useState<number | null>(\n      null\n    );\n    const [adaptiveAutoPlayInterval, setAdaptiveAutoPlayInterval] =\n      useState(autoPlayInterval);\n    const [gazeFocusedSlide, setGazeFocusedSlide] = useState<number | null>(\n      null\n    );\n\n    // Determine if consciousness features are enabled\n    const consciousness =\n      predictive ||\n      adaptive ||\n      eyeTracking ||\n      spatialAudio ||\n      trackAchievements;\n\n    // Get carousel items\n    const carouselItems = children\n      ? Children.toArray(children).map((child, index) => ({\n          id: `item-${index}`,\n          content: child as ReactNode,\n        }))\n      : items;\n\n    const totalItems = carouselItems?.length || 0;\n    const maxIndex = Math.max(0, totalItems - slidesToShow);\n\n    // Handle slide change\n    const handleSlideChange = useCallback(\n      (newIndex: number) => {\n        if (isTransitioning) return;\n\n        let targetIndex = newIndex;\n\n        if (infinite) {\n          if (targetIndex < 0) {\n            targetIndex = maxIndex;\n          } else if (targetIndex > maxIndex) {\n            targetIndex = 0;\n          }\n        } else {\n          targetIndex = Math.max(0, Math.min(maxIndex, targetIndex));\n        }\n\n        if (targetIndex !== currentIndex) {\n          setIsTransitioning(true);\n          setCurrentIndex(targetIndex);\n          onSlideChange?.(targetIndex);\n\n          // Reset transition state after animation\n          if (transitionRef.current) {\n            clearTimeout(transitionRef.current);\n          }\n          transitionRef.current = setTimeout(() => {\n            setIsTransitioning(false);\n          }, animationDuration);\n        }\n      },\n      [\n        currentIndex,\n        maxIndex,\n        infinite,\n        isTransitioning,\n        animationDuration,\n        onSlideChange,\n      ]\n    );\n\n    // Enhanced slide change tracking (moved before navigation functions)\n    const enhancedHandleSlideChange = useCallback(\n      (newIndex: number) => {\n        // Track slide interaction\n        setSlideInteractionCounts((prev: any) => ({\n          ...prev,\n          [newIndex]: (prev[newIndex] || 0) + 1,\n        }));\n\n        // Record interaction for learning\n        if (interactionRecorder) {\n          interactionRecorder.recordClick({\n            target: { id: `carousel-slide-${newIndex}` },\n          } as any);\n        }\n\n        // Track achievements\n        if (achievementTracker && trackAchievements) {\n          achievementTracker.recordAction(\n            achievementId || \"carousel_navigation\",\n            {\n              slideIndex: newIndex,\n              interactionCount: (slideInteractionCounts[newIndex] || 0) + 1,\n              context: usageContext,\n            }\n          );\n        }\n\n        // Play spatial audio feedback\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"carousel_slide_change\");\n        }\n\n        // Call original handler\n        handleSlideChange(newIndex);\n      },\n      [\n        handleSlideChange,\n        interactionRecorder,\n        achievementTracker,\n        trackAchievements,\n        achievementId,\n        slideInteractionCounts,\n        usageContext,\n        spatialAudioEngine,\n        audioFeedback,\n      ]\n    );\n\n    // Navigation functions (updated to use enhanced handler)\n    const goToPrev = useCallback(() => {\n      enhancedHandleSlideChange(currentIndex - slidesToScroll);\n    }, [currentIndex, slidesToScroll, enhancedHandleSlideChange]);\n\n    const goToNext = useCallback(() => {\n      enhancedHandleSlideChange(currentIndex + slidesToScroll);\n    }, [currentIndex, slidesToScroll, enhancedHandleSlideChange]);\n\n    const goToSlide = useCallback(\n      (index: number) => {\n        enhancedHandleSlideChange(index);\n      },\n      [enhancedHandleSlideChange]\n    );\n\n    // Auto-play functionality (with consciousness adaptation)\n    useEffect(() => {\n      if (isPlaying && totalItems > slidesToShow) {\n        autoPlayRef.current = setInterval(() => {\n          goToNext();\n        }, adaptiveAutoPlayInterval);\n      } else {\n        if (autoPlayRef.current) {\n          clearInterval(autoPlayRef.current);\n        }\n      }\n\n      return () => {\n        if (autoPlayRef.current) {\n          clearInterval(autoPlayRef.current);\n        }\n      };\n    }, [\n      isPlaying,\n      totalItems,\n      slidesToShow,\n      adaptiveAutoPlayInterval,\n      goToNext,\n    ]);\n\n    // Handle keyboard navigation\n    useEffect(() => {\n      if (!enableKeyboard) return;\n\n      const handleKeyPress = (e: KeyboardEvent) => {\n        switch (e.key) {\n          case \"ArrowLeft\":\n            e.preventDefault();\n            goToPrev();\n            break;\n          case \"ArrowRight\":\n            e.preventDefault();\n            goToNext();\n            break;\n          case \" \":\n            e.preventDefault();\n            setIsPlaying(!isPlaying);\n            break;\n          case \"Escape\":\n            if (isFullscreen) {\n              setIsFullscreen(false);\n            }\n            break;\n        }\n      };\n\n      window.addEventListener(\"keydown\", handleKeyPress);\n      return () => window.removeEventListener(\"keydown\", handleKeyPress);\n    }, [enableKeyboard, goToPrev, goToNext, isPlaying, isFullscreen]);\n\n    // Consciousness effects\n\n    // Biometric adaptation for autoplay timing\n    useEffect(() => {\n      if (!biometricResponsive || !biometricAdapter) return;\n\n      const adaptCarousel = () => {\n        const deviceCapabilities = biometricAdapter.latestReading;\n        const stressLevel = biometricAdapter.currentStressLevel;\n\n        // Adapt autoplay speed based on stress level\n        if (stressLevel > 0.7) {\n          setAdaptiveAutoPlayInterval(Math.max(autoPlayInterval * 1.5, 5000)); // Slower when stressed\n        } else if (stressLevel < 0.3) {\n          setAdaptiveAutoPlayInterval(Math.max(autoPlayInterval * 0.8, 2000)); // Faster when relaxed\n        } else {\n          setAdaptiveAutoPlayInterval(autoPlayInterval);\n        }\n      };\n\n      adaptCarousel();\n      const interval = setInterval(adaptCarousel, 5000);\n      return () => clearInterval(interval);\n    }, [biometricResponsive, biometricAdapter, autoPlayInterval]);\n\n    // Eye tracking for slide attention\n    useEffect(() => {\n      if (!gazeResponsive || !eyeTracker || !carouselRef.current) return;\n\n      const handleSlideGaze = (event: any) => {\n        const slideElements =\n          carouselRef.current?.querySelectorAll(\"[data-slide-index]\");\n        if (!slideElements) return;\n\n        slideElements.forEach((element, index) => {\n          const rect = element.getBoundingClientRect();\n          const isInView =\n            event.clientX >= rect.left &&\n            event.clientX <= rect.right &&\n            event.clientY >= rect.top &&\n            event.clientY <= rect.bottom;\n\n          if (isInView) {\n            setGazeFocusedSlide(index);\n\n            if (spatialAudioEngine && audioFeedback) {\n              spatialAudioEngine.playGlassSound(\"slide_attention\", {\n                x: rect.left + rect.width / 2,\n                y: rect.top + rect.height / 2,\n                z: 0,\n              });\n            }\n          }\n        });\n      };\n\n      // Eye tracking integration - methods may need to be implemented\n      // eyeTracker.onGazeEnter(carouselRef.current, handleSlideGaze);\n\n      return () => {\n        if (carouselRef.current) {\n          // eyeTracker.offGazeEnter(carouselRef.current, handleSlideGaze);\n        }\n      };\n    }, [gazeResponsive, eyeTracker, spatialAudioEngine, audioFeedback]);\n\n    // Predictive slide navigation\n    useEffect(() => {\n      if (!predictive || !predictiveEngine) return;\n\n      const updatePredictions = () => {\n        const predictions = predictiveEngine.predictions;\n        const slidePrediction = predictions.find(\n          (p) =>\n            p.type === \"navigate\" &&\n            p.metadata?.carouselContext === usageContext\n        );\n\n        if (slidePrediction && slidePrediction.confidence > 0.8) {\n          const slideIndex = slidePrediction.metadata.slideIndex;\n          setPredictedNextSlide(\n            typeof slideIndex === \"number\" ? slideIndex : null\n          );\n\n          // Predicted slide content can be preloaded by consumers when available.\n        } else {\n          setPredictedNextSlide(null);\n        }\n      };\n\n      const interval = setInterval(updatePredictions, 2000);\n      updatePredictions();\n\n      return () => clearInterval(interval);\n    }, [predictive, predictiveEngine, usageContext, preloadContent]);\n\n    // Handle mouse/touch events for swipe\n    const handleMouseDown = useCallback(\n      (e: React.MouseEvent) => {\n        if (!enableSwipe) return;\n        setDragStart(e.clientX);\n      },\n      [enableSwipe]\n    );\n\n    const handleMouseMove = useCallback(\n      (e: React.MouseEvent) => {\n        if (!enableSwipe || dragStart === null) return;\n        setDragEnd(e.clientX);\n      },\n      [enableSwipe, dragStart]\n    );\n\n    const handleMouseUp = useCallback(() => {\n      if (!enableSwipe || dragStart === null || dragEnd === null) return;\n\n      const diff = dragStart - dragEnd;\n      const threshold = 50;\n\n      if (Math.abs(diff) > threshold) {\n        if (diff > 0) {\n          goToNext();\n        } else {\n          goToPrev();\n        }\n      }\n\n      setDragStart(null);\n      setDragEnd(null);\n    }, [enableSwipe, dragStart, dragEnd, goToNext, goToPrev]);\n\n    // Handle hover for pause on hover\n    const handleMouseEnter = useCallback(() => {\n      if (pauseOnHover && isPlaying) {\n        setIsPlaying(false);\n      }\n    }, [pauseOnHover, isPlaying]);\n\n    const handleMouseLeave = useCallback(() => {\n      if (pauseOnHover && autoPlay) {\n        setIsPlaying(true);\n      }\n    }, [pauseOnHover, autoPlay]);\n\n    // Calculate transform for slides\n    const getTransform = () => {\n      const slideWidth = 100 / slidesToShow;\n      return `translateX(-${currentIndex * slideWidth}%)`;\n    };\n\n    // Check if navigation is needed\n    const needsNavigation = totalItems > slidesToShow;\n    const effectiveHeight = compact ? \"180px\" : height;\n    const effectiveShowDots = compact ? false : showDots;\n    const effectiveShowIndicators = compact ? false : showIndicators;\n    const effectiveShowArrows = compact\n      ? showArrows && needsNavigation\n      : showArrows;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n    if (totalItems === 0) {\n      return (\n        <GlassCard data-glass-component className={cn(\"p-8\", className)}>\n          <div className=\"glass-text-center glass-text-primary-glass-opacity-60\">\n            No items to display\n          </div>\n        </GlassCard>\n      );\n    }\n\n    return (\n      <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n        <GlassCard\n          ref={ref}\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          className={cn(\n            \"overflow-hidden relative\",\n            isFullscreen && \"fixed inset-0 z-50 rounded-none\",\n            className\n          )}\n          {...props}\n        >\n          <CardContent className=\"glass-p-0\">\n            {/* Main Carousel Container */}\n            <div\n              ref={carouselRef}\n              className={cn(\n                \"relative overflow-hidden\",\n                eyeTracking && \"consciousness-eye-trackable\",\n                predictive && \"consciousness-predictive\",\n                adaptive && \"consciousness-adaptive\"\n              )}\n              style={{\n                height:\n                  typeof effectiveHeight === \"number\"\n                    ? `${effectiveHeight}px`\n                    : effectiveHeight,\n                maxHeight:\n                  resolvedMaxHeight ??\n                  (compact || contained ? \"240px\" : undefined),\n              }}\n              onMouseEnter={handleMouseEnter}\n              onMouseLeave={handleMouseLeave}\n              onMouseDown={handleMouseDown}\n              onMouseMove={handleMouseMove}\n              onMouseUp={handleMouseUp}\n              data-glass-carousel=\"true\"\n              data-carousel-autoplay={String(!!autoPlay)}\n              data-consciousness-component=\"carousel\"\n              data-consciousness-active={String(!!consciousness)}\n              data-eye-tracking={String(!!eyeTracking)}\n              data-predictive={String(!!predictive)}\n              data-adaptive={String(!!adaptive)}\n              data-spatial-audio={String(!!spatialAudio)}\n            >\n              {/* Slides Container */}\n              <div\n                className={cn(\n                  \"flex h-full transition-transform duration-500 ease-in-out\",\n                  adaptive &&\n                    adaptiveAutoPlayInterval !== autoPlayInterval &&\n                    \"consciousness-adaptive-timing\",\n                  predictive &&\n                    predictedNextSlide !== null &&\n                    \"consciousness-predictive-active\"\n                )}\n                style={{\n                  transform: getTransform(),\n                  gap: typeof gap === \"number\" ? `${gap}px` : gap,\n                  transitionDuration: adaptive\n                    ? `${Math.max(300, adaptiveAutoPlayInterval / 10)}ms`\n                    : \"500ms\",\n                }}\n                data-consciousness-slides-container=\"true\"\n                data-predicted-slide={predictedNextSlide}\n              >\n                {carouselItems.map((item, index) => (\n                  <div\n                    key={item?.id}\n                    className={cn(\n                      \"flex-shrink-0\",\n                      eyeTracking &&\n                        gazeFocusedSlide === index &&\n                        \"consciousness-gaze-focused\",\n                      predictive &&\n                        predictedNextSlide === index &&\n                        \"consciousness-predicted-next\",\n                      trackAchievements &&\n                        slideInteractionCounts[index] > 0 &&\n                        \"consciousness-interacted\"\n                    )}\n                    style={{\n                      width: `${100 / slidesToShow}%`,\n                      paddingLeft: index === 0 ? 0 : undefined,\n                      paddingRight:\n                        index === (carouselItems?.length || 0) - 1\n                          ? 0\n                          : undefined,\n                    }}\n                    data-slide-index={index}\n                    data-consciousness-slide=\"true\"\n                    data-interaction-count={slideInteractionCounts[index] || 0}\n                    data-gaze-focused={gazeFocusedSlide === index}\n                    data-predicted={predictedNextSlide === index}\n                  >\n                    <div className=\"glass-h-full glass-w-full glass-relative\">\n                      {item?.content}\n                    </div>\n                  </div>\n                ))}\n              </div>\n\n              {/* Navigation Arrows */}\n              {effectiveShowArrows && needsNavigation && (\n                <>\n                  {/* Previous Arrow */}\n                  <div className=\"glass-absolute glass-left-4 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-z-10\">\n                    {customPrevArrow ? (\n                      <div onClick={goToPrev}>{customPrevArrow}</div>\n                    ) : (\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"lg\"\n                        onClick={goToPrev}\n                        disabled={!infinite && currentIndex === 0}\n                        className={cn(\n                          \"glass-shadow-lg glass-hover--translate-y-0-5 glass-ripple\",\n                          compact ? \"glass-p-2\" : \"glass-p-3\"\n                        )}\n                        data-consciousness-nav=\"prev\"\n                      >\n                        <ChevronLeft\n                          className={\n                            compact\n                              ? \"glass-w-4 glass-h-4\"\n                              : \"glass-w-6 glass-h-6\"\n                          }\n                        />\n                      </GlassButton>\n                    )}\n                  </div>\n\n                  {/* Next Arrow */}\n                  <div className=\"glass-absolute glass-right-4 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-z-10\">\n                    {customNextArrow ? (\n                      <div onClick={goToNext}>{customNextArrow}</div>\n                    ) : (\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"lg\"\n                        onClick={goToNext}\n                        disabled={!infinite && currentIndex >= maxIndex}\n                        className={cn(\n                          \"glass-shadow-lg glass-hover--translate-y-0-5 glass-ripple\",\n                          compact ? \"glass-p-2\" : \"glass-p-3\"\n                        )}\n                        data-consciousness-nav=\"next\"\n                      >\n                        <ChevronRight\n                          className={\n                            compact\n                              ? \"glass-w-4 glass-h-4\"\n                              : \"glass-w-6 glass-h-6\"\n                          }\n                        />\n                      </GlassButton>\n                    )}\n                  </div>\n                </>\n              )}\n\n              {/* Play/Pause Controls */}\n              {autoPlay && needsNavigation && (\n                <div className=\"glass-absolute glass-top-4 glass-right-4 glass-z-10\">\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => setIsPlaying(!isPlaying)}\n                    className=\"glass-p-2\"\n                    data-consciousness-control=\"play-pause\"\n                    data-adaptive-interval={adaptiveAutoPlayInterval}\n                  >\n                    {isPlaying ? (\n                      <Pause className=\"glass-w-4 glass-h-4\" />\n                    ) : (\n                      <Play className=\"glass-w-4 glass-h-4\" />\n                    )}\n                  </GlassButton>\n                </div>\n              )}\n\n              {/* Fullscreen Toggle */}\n              {showFullscreen && (\n                <div className=\"glass-absolute glass-top-4 glass-left-4 glass-z-10\">\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => setIsFullscreen(!isFullscreen)}\n                    className=\"glass-p-2\"\n                    data-consciousness-control=\"fullscreen\"\n                  >\n                    {isFullscreen ? (\n                      <Minimize2 className=\"glass-w-4 glass-h-4\" />\n                    ) : (\n                      <Maximize2 className=\"glass-w-4 glass-h-4\" />\n                    )}\n                  </GlassButton>\n                </div>\n              )}\n            </div>\n\n            {/* Indicators */}\n            {effectiveShowIndicators && needsNavigation && (\n              <div\n                className=\"glass-px-6 glass-py-4\"\n                data-consciousness-indicators=\"true\"\n              >\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-text-sm glass-text-primary-glass-opacity-80\">\n                  <span>\n                    {currentIndex + 1} /{\" \"}\n                    {Math.ceil(totalItems / slidesToScroll)}\n                    {predictive && predictedNextSlide !== null && (\n                      <span className=\"glass-ml-2 glass-text-xs glass-text-primary-glass-opacity-80\">\n                        Next: {predictedNextSlide + 1}\n                      </span>\n                    )}\n                  </span>\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    <span>\n                      Slide {currentIndex + 1}\n                      {adaptive &&\n                        adaptiveAutoPlayInterval !== autoPlayInterval && (\n                          <span className=\"glass-ml-1 glass-text-xs glass-text-primary-glass-opacity-80\">\n                            ({Math.round(adaptiveAutoPlayInterval / 1000)}s)\n                          </span>\n                        )}\n                    </span>\n                    <div className=\"glass-w-32 glass-h-1 glass-surface-subtle/20 glass-radius-full glass-overflow-hidden\">\n                      <div\n                        className={cn(\n                          \"h-full bg-primary transition-all duration-300\",\n                          adaptive && \"consciousness-adaptive-progress\"\n                        )}\n                        style={{\n                          width: `${((currentIndex + 1) / Math.ceil(totalItems / slidesToScroll)) * 100}%`,\n                          transitionDuration: adaptive\n                            ? `${adaptiveAutoPlayInterval / 10}ms`\n                            : \"300ms\",\n                        }}\n                      />\n                    </div>\n                  </div>\n                </div>\n              </div>\n            )}\n\n            {/* Dots Navigation */}\n            {effectiveShowDots && needsNavigation && (\n              <div\n                className=\"glass-px-6 glass-py-4\"\n                data-consciousness-dots=\"true\"\n              >\n                <div className=\"glass-flex glass-justify-center glass-gap-2\">\n                  {Array.from({\n                    length: Math.ceil(totalItems / slidesToScroll),\n                  }).map((_, index) => {\n                    const slideIndex = index * slidesToScroll;\n                    const isActive =\n                      Math.floor(currentIndex / slidesToScroll) === index;\n                    const isPredicted =\n                      predictive && predictedNextSlide === slideIndex;\n                    const isInteracted =\n                      trackAchievements &&\n                      slideInteractionCounts[slideIndex] > 0;\n\n                    return (\n                      <button\n                        key={index}\n                        onClick={(e) => goToSlide(slideIndex)}\n                        className={cn(\n                          \"w-3 h-3 glass-radius-full transition-all duration-200\",\n                          isActive && \"bg-primary scale-125\",\n                          !isActive &&\n                            \"bg-white/15 hover:bg-white/25 border border-white/30 hover:border-white/50\",\n                          isPredicted && \"consciousness-predicted-dot\",\n                          isInteracted && \"consciousness-interacted-dot\",\n                          eyeTracking &&\n                            gazeFocusedSlide === slideIndex &&\n                            \"consciousness-gaze-focused-dot\"\n                        )}\n                        data-slide-index={slideIndex}\n                        data-consciousness-dot=\"true\"\n                        data-predicted={isPredicted}\n                        data-interacted={isInteracted}\n                        data-gaze-focused={gazeFocusedSlide === slideIndex}\n                      />\n                    );\n                  })}\n                </div>\n              </div>\n            )}\n\n            {/* Item Info */}\n            {(carouselItems[currentIndex] as any)?.title && (\n              <div className=\"glass-px-6 glass-py-4 glass-border-t glass-border-white/10\">\n                <div className=\"glass-text-center\">\n                  <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-1\">\n                    {(carouselItems[currentIndex] as any).title}\n                  </h3>\n                  {(carouselItems[currentIndex] as any)?.description && (\n                    <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n                      {(carouselItems[currentIndex] as any).description}\n                    </p>\n                  )}\n                </div>\n              </div>\n            )}\n          </CardContent>\n        </GlassCard>\n      </Motion>\n    );\n  }\n);\n\nGlassCarousel.displayName = \"GlassCarousel\";\n\n// Consciousness-Enhanced Carousel Variants\nexport const GlassPredictiveCarousel: React.FC<GlassCarouselProps> = (\n  props\n) => <GlassCarousel {...props} predictive={true} />;\n\nexport const GlassAdaptiveCarousel: React.FC<GlassCarouselProps> = (props) => (\n  <GlassCarousel {...props} adaptive={true} />\n);\n\nexport const GlassEyeTrackingCarousel: React.FC<GlassCarouselProps> = (\n  props\n) => <GlassCarousel {...props} eyeTracking={true} />;\n\nexport const GlassSpatialAudioCarousel: React.FC<GlassCarouselProps> = (\n  props\n) => <GlassCarousel {...props} spatialAudio={true} />;\n\nexport const GlassAchievementCarousel: React.FC<GlassCarouselProps> = (\n  props\n) => <GlassCarousel {...props} trackAchievements={true} />;\n\nexport const GlassConsciousnessCarousel: React.FC<GlassCarouselProps> = (\n  props\n) => (\n  <GlassCarousel\n    {...props}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\n// Thumbnail Carousel Variant\nexport interface GlassThumbnailCarouselProps\n  extends Omit<GlassCarouselProps, \"slidesToShow\"> {\n  /**\n   * Show thumbnails\n   */\n  showThumbnails?: boolean;\n  /**\n   * Thumbnail size\n   */\n  thumbnailSize?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Thumbnail position\n   */\n  thumbnailPosition?: \"bottom\" | \"left\" | \"right\";\n}\n\nexport const GlassThumbnailCarousel: React.FC<GlassThumbnailCarouselProps> = ({\n  showThumbnails = true,\n  thumbnailSize = \"sm\",\n  thumbnailPosition = \"bottom\",\n  items = [],\n  children,\n  ...props\n}) => {\n  const [selectedIndex, setSelectedIndex] = useState(0);\n\n  const thumbnailItems = children\n    ? Children.toArray(children).map((child, index) => ({\n        id: `thumb-${index}`,\n        content: child as ReactNode,\n      }))\n    : items;\n\n  const thumbnailSizeClasses = {\n    sm: \"w-16 h-16\",\n    md: \"w-20 h-20\",\n    lg: \"w-24 h-24\",\n  };\n\n  if (!showThumbnails) {\n    return <GlassCarousel {...props} />;\n  }\n\n  return (\n    <div\n      className={cn(\n        \"flex glass-gap-4\",\n        thumbnailPosition === \"bottom\" && \"flex-col\",\n        thumbnailPosition === \"left\" && \"flex-row-reverse\",\n        thumbnailPosition === \"right\" && \"flex-row\"\n      )}\n    >\n      {/* Main Carousel */}\n      <div className=\"glass-flex-1\">\n        <GlassCarousel\n          {...props}\n          items={thumbnailItems}\n          onSlideChange={setSelectedIndex}\n        />\n      </div>\n\n      {/* Thumbnails */}\n      <div\n        className={cn(\n          \"flex glass-gap-2 overflow-x-auto\",\n          thumbnailPosition === \"bottom\" && \"flex-row justify-center\",\n          thumbnailPosition === \"left\" && \"flex-col\",\n          thumbnailPosition === \"right\" && \"flex-col\"\n        )}\n      >\n        {thumbnailItems.map((item, index) => (\n          <button\n            key={item?.id}\n            onClick={(e) => setSelectedIndex(index)}\n            className={cn(\n              \"flex-shrink-0 glass-radius-lg overflow-hidden border-2 transition-all duration-200\",\n              thumbnailSizeClasses?.[thumbnailSize],\n              selectedIndex === index\n                ? \"border-primary scale-105 shadow-lg\"\n                : \"border-white/20 hover:border-white/40 hover:scale-102\"\n            )}\n          >\n            {(item as any).image ? (\n              <img\n                src={(item as any).image}\n                alt={(item as any).title || `Thumbnail ${index + 1}`}\n                className=\"glass-w-full glass-h-full glass-object-cover\"\n              />\n            ) : (\n              <div className=\"glass-w-full glass-h-full glass-surface-subtle/10 glass-flex glass-items-center glass-justify-center\">\n                <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                  {index + 1}\n                </span>\n              </div>\n            )}\n          </button>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default GlassCarousel;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  File,\n  Hash,\n  Image as ImageIcon,\n  Mic,\n  MicOff,\n  MoreVertical,\n  Paperclip,\n  Phone,\n  Search,\n  Send,\n  Smile,\n  Users,\n  Video,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\n\nexport interface ChatMessage {\n  id: string;\n  content: string;\n  sender: {\n    id: string;\n    name: string;\n    avatar?: string;\n    status?: \"online\" | \"offline\" | \"away\" | \"busy\";\n  };\n  timestamp: Date;\n  type: \"text\" | \"image\" | \"file\" | \"system\";\n  reactions?: Array<{\n    emoji: string;\n    count: number;\n    users: string[];\n  }>;\n  replyTo?: string;\n  edited?: boolean;\n  attachments?: Array<{\n    type: \"image\" | \"file\" | \"video\";\n    url: string;\n    name: string;\n    size?: number;\n  }>;\n}\n\nexport interface ChatParticipant {\n  id: string;\n  name: string;\n  avatar?: string;\n  status: \"online\" | \"offline\" | \"away\" | \"busy\";\n  role?: \"admin\" | \"moderator\" | \"member\";\n  lastSeen?: Date;\n}\n\nexport interface GlassChatProps extends ConsciousnessFeatures {\n  /**\n   * Chat messages\n   */\n  messages: ChatMessage[];\n  /**\n   * Chat participants\n   */\n  participants?: ChatParticipant[];\n  /**\n   * Current user\n   */\n  currentUser?: {\n    id: string;\n    name: string;\n    avatar?: string;\n  };\n  /**\n   * Chat title\n   */\n  title?: string;\n  /**\n   * Chat subtitle/description\n   */\n  subtitle?: string;\n  /**\n   * Enable message reactions\n   */\n  enableReactions?: boolean;\n  /**\n   * Enable file attachments\n   */\n  enableAttachments?: boolean;\n  /**\n   * Enable voice messages\n   */\n  enableVoice?: boolean;\n  /**\n   * Enable typing indicators\n   */\n  enableTyping?: boolean;\n  /**\n   * Show participant list\n   */\n  showParticipants?: boolean;\n  /**\n   * Show message timestamps\n   */\n  showTimestamps?: boolean;\n  /**\n   * Show user avatars\n   */\n  showAvatars?: boolean;\n  /**\n   * Message send handler\n   */\n  onSendMessage?: (content: string, attachments?: File[]) => void;\n  /**\n   * Message reaction handler\n   */\n  onMessageReaction?: (messageId: string, emoji: string) => void;\n  /**\n   * Typing handler\n   */\n  onTyping?: (isTyping: boolean) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassChat component\n * A comprehensive chat interface with messages, participants, and real-time features\n */\nexport const GlassChat: React.FC<GlassChatProps> = ({\n  messages = [],\n  participants = [],\n  currentUser,\n  title = \"Chat\",\n  subtitle,\n  enableReactions = true,\n  enableAttachments = true,\n  enableVoice = false,\n  enableTyping = true,\n  showParticipants = false,\n  showTimestamps = true,\n  showAvatars = true,\n  onSendMessage,\n  onMessageReaction,\n  onTyping,\n  className,\n  // Consciousness features\n  consciousness = false,\n  predictive = false,\n  adaptive = false,\n  eyeTracking = false,\n  spatialAudio = false,\n  trackAchievements = false,\n  ...props\n}) => {\n  const [newMessage, setNewMessage] = useState(\"\");\n  const [isTyping, setIsTyping] = useState(false);\n  const [attachments, setAttachments] = useState<File[]>([]);\n  const [showEmojiPicker, setShowEmojiPicker] = useState(false);\n  const [isRecording, setIsRecording] = useState(false);\n\n  // Consciousness state\n  const [messageInteractionCounts, setMessageInteractionCounts] = useState<\n    Record<string, number>\n  >({});\n  const [suggestedResponses, setSuggestedResponses] = useState<string[]>([]);\n  const [adaptiveInputHeight, setAdaptiveInputHeight] = useState(40);\n  const [focusedMessage, setFocusedMessage] = useState<string | null>(null);\n  const [conversationInsights, setConversationInsights] = useState<{\n    sentiment: \"positive\" | \"neutral\" | \"negative\";\n    urgency: \"low\" | \"medium\" | \"high\";\n    topics: string[];\n  } | null>(null);\n\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n  const inputRef = useRef<HTMLTextAreaElement>(null);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n\n  // Consciousness hooks\n  const predictiveEngine = predictive ? usePredictiveEngine() : null;\n  const eyeTracker = eyeTracking ? useEyeTracking() : null;\n  const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n  const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n  const interactionRecorder = consciousness ? useInteractionRecorder() : null;\n  const achievementTracker = trackAchievements ? useAchievements() : null;\n\n  // Auto-scroll to bottom when new messages arrive\n  useEffect(() => {\n    if (\n      messagesEndRef.current &&\n      typeof messagesEndRef.current.scrollIntoView === \"function\"\n    ) {\n      messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }, [messages]);\n\n  // Handle typing indicator\n  useEffect(() => {\n    if (!enableTyping) return;\n\n    const timeout = setTimeout(() => {\n      if (isTyping) {\n        setIsTyping(false);\n        onTyping?.(false);\n      }\n    }, 2000);\n\n    return () => clearTimeout(timeout);\n  }, [newMessage, isTyping, enableTyping, onTyping]);\n\n  // Consciousness effects\n  // Biometric adaptation for input height and response timing\n  useEffect(() => {\n    if (!adaptive || !biometricAdapter) return;\n\n    const updateAdaptiveFeatures = () => {\n      const stressLevel = biometricAdapter.currentStressLevel;\n\n      // Adjust input height based on stress levels\n      if (stressLevel > 0.7) {\n        setAdaptiveInputHeight(60); // Larger input for stressed users\n      } else if (stressLevel < 0.3) {\n        setAdaptiveInputHeight(32); // Compact for calm users\n      } else {\n        setAdaptiveInputHeight(40); // Default\n      }\n\n      // Record biometric adaptation for achievements\n      if (trackAchievements && achievementTracker) {\n        achievementTracker.recordAction(\"chat_adaptive_ui\", {\n          stressLevel: stressLevel,\n          inputHeight: adaptiveInputHeight,\n        });\n      }\n    };\n\n    const interval = setInterval(updateAdaptiveFeatures, 2000);\n    return () => clearInterval(interval);\n  }, [\n    adaptive,\n    biometricAdapter,\n    achievementTracker,\n    trackAchievements,\n    adaptiveInputHeight,\n  ]);\n\n  // Eye tracking for message focus\n  useEffect(() => {\n    if (!eyeTracking || !eyeTracker) return;\n\n    const handleGazeData = (gazeData: any) => {\n      // Find which message is being focused on\n      const messageElements = document.querySelectorAll(\n        '[data-consciousness-message=\"true\"]'\n      );\n      let focusedMessageId: string | null = null;\n\n      messageElements.forEach((element) => {\n        const rect = element.getBoundingClientRect();\n        if (\n          gazeData.x >= rect.left &&\n          gazeData.x <= rect.right &&\n          gazeData.y >= rect.top &&\n          gazeData.y <= rect.bottom\n        ) {\n          focusedMessageId = element.getAttribute(\"data-message-id\");\n        }\n      });\n\n      setFocusedMessage(focusedMessageId);\n\n      // Record achievement for eye tracking engagement\n      if (trackAchievements && achievementTracker && focusedMessageId) {\n        achievementTracker.recordAction(\"message_gaze_focus\", {\n          messageId: focusedMessageId,\n          gazeTime: Date.now(),\n        });\n      }\n    };\n\n    // Eye tracking methods not available in current implementation\n    // eyeTracker.startTracking(handleGazeData);\n    // return () => eyeTracker.stopTracking();\n  }, [eyeTracking, eyeTracker, achievementTracker, trackAchievements]);\n\n  // Predictive response suggestions\n  useEffect(() => {\n    if (!predictive || !predictiveEngine) return;\n\n    const generateSuggestions = async () => {\n      try {\n        const conversationContext = {\n          messages: messages.slice(-5).map((m: any) => ({\n            content: m.content,\n            sender: m.sender.name,\n            timestamp: m.timestamp,\n          })),\n          currentUser: currentUser?.name || \"User\",\n        };\n\n        // Use available predictive data\n        const predictions = predictiveEngine.predictions;\n        const insights = predictiveEngine.insights;\n\n        // Generate simple suggestions based on available data\n        const suggestions = predictions\n          .filter((p: any) => p.type === \"suggest\")\n          .map((p: any) => p.metadata?.text || \"\")\n          .filter((text: any) => text.length > 0)\n          .slice(0, 3);\n\n        setSuggestedResponses(suggestions);\n\n        // Transform insights array to expected object format\n        const transformedInsights =\n          insights && insights.length > 0\n            ? {\n                sentiment:\n                  (insights.find((i: any) => i.type === \"sentiment\")?.metadata\n                    ?.sentiment as \"positive\" | \"neutral\" | \"negative\") ||\n                  \"neutral\",\n                urgency:\n                  (insights.find((i: any) => i.type === \"urgency\")?.metadata\n                    ?.urgency as \"low\" | \"medium\" | \"high\") || \"medium\",\n                topics: insights\n                  .filter((i: any) => i.type === \"topic\")\n                  .map((i: any) => i.metadata?.topic || \"\")\n                  .filter((topic: any) => topic.length > 0),\n              }\n            : null;\n\n        setConversationInsights(transformedInsights);\n      } catch {\n        setConversationInsights(null);\n      }\n    };\n\n    if (messages.length > 0) {\n      const timeoutId = setTimeout(generateSuggestions, 500);\n      return () => clearTimeout(timeoutId);\n    }\n  }, [messages, predictive, predictiveEngine, currentUser]);\n\n  // Spatial audio for message notifications\n  useEffect(() => {\n    if (!spatialAudio || !spatialAudioEngine) return;\n\n    const latestMessage = messages[messages.length - 1];\n    if (!latestMessage || latestMessage.sender.id === currentUser?.id) return;\n\n    // Play spatial audio notification for new messages\n    spatialAudioEngine.playGlassSound(\"message-notification\", undefined, {\n      volume: 0.6,\n      reverb: 0.3,\n    });\n\n    // Record achievement for audio engagement\n    if (trackAchievements && achievementTracker) {\n      achievementTracker.recordAction(\"spatial_audio_notification\", {\n        messageId: latestMessage.id,\n        sender: latestMessage.sender.name,\n      });\n    }\n  }, [\n    messages,\n    spatialAudio,\n    spatialAudioEngine,\n    currentUser,\n    trackAchievements,\n    achievementTracker,\n  ]);\n\n  // Message interaction tracking\n  useEffect(() => {\n    if (!consciousness || !interactionRecorder) return;\n\n    const recordMessageInteraction = (\n      messageId: string,\n      interactionType: string\n    ) => {\n      setMessageInteractionCounts((prev: any) => ({\n        ...prev,\n        [messageId]: (prev[messageId] || 0) + 1,\n      }));\n\n      // Create synthetic event for interaction recording\n      const syntheticEvent = {\n        currentTarget: { id: `message-${messageId}` },\n        type:\n          interactionType === \"click\"\n            ? \"click\"\n            : interactionType === \"hover\"\n              ? \"mouseenter\"\n              : \"focus\",\n      } as any;\n\n      if (interactionType === \"click\") {\n        interactionRecorder.recordClick(syntheticEvent);\n      } else if (interactionType === \"hover\") {\n        interactionRecorder.recordHover(syntheticEvent);\n      } else {\n        interactionRecorder.recordFocus(syntheticEvent);\n      }\n    };\n\n    // Set up global interaction listeners for message elements\n    const handleMessageClick = (event: MouseEvent) => {\n      const messageElement = (event.target as Element).closest(\n        '[data-consciousness-message=\"true\"]'\n      );\n      if (messageElement) {\n        const messageId = messageElement.getAttribute(\"data-message-id\");\n        if (messageId) {\n          recordMessageInteraction(messageId, \"message_click\");\n        }\n      }\n    };\n\n    document.addEventListener(\"click\", handleMessageClick);\n    return () => document.removeEventListener(\"click\", handleMessageClick);\n  }, [consciousness, interactionRecorder, title]);\n\n  // Handle input change\n  const handleInputChange = useCallback(\n    (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n      setNewMessage(e.target.value);\n\n      if (enableTyping && !isTyping && e.target.value.length > 0) {\n        setIsTyping(true);\n        onTyping?.(true);\n      }\n    },\n    [enableTyping, isTyping, onTyping]\n  );\n\n  // Enhanced send message handler with consciousness tracking\n  const handleSendMessage = useCallback(() => {\n    if (!newMessage.trim() && attachments.length === 0) return;\n\n    // Record interaction for achievements and learning\n    if (consciousness && interactionRecorder) {\n      // Create synthetic event for message send interaction\n      const syntheticEvent = {\n        currentTarget: { id: \"chat-input\" },\n        type: \"click\",\n      } as any;\n      interactionRecorder.recordClick(syntheticEvent);\n    }\n\n    // Track achievement for message sending\n    if (trackAchievements && achievementTracker) {\n      achievementTracker.recordAction(\"chat_message_sent\", {\n        messageLength: newMessage.trim().length,\n        hasAttachments: attachments.length > 0,\n        timestamp: Date.now(),\n      });\n    }\n\n    // Play spatial audio feedback for message sent\n    if (spatialAudio && spatialAudioEngine) {\n      spatialAudioEngine.playGlassSound(\"message-sent\", undefined, {\n        volume: 0.4,\n        reverb: 0.2,\n      });\n    }\n\n    onSendMessage?.(newMessage.trim(), attachments);\n    setNewMessage(\"\");\n    setAttachments([]);\n    setIsTyping(false);\n    onTyping?.(false);\n    setSuggestedResponses([]); // Clear suggestions after sending\n\n    // Reset textarea height with adaptive sizing\n    if (inputRef.current) {\n      inputRef.current.style.height = \"auto\";\n      if (adaptive) {\n        inputRef.current.style.minHeight = `${adaptiveInputHeight}px`;\n      }\n    }\n  }, [\n    newMessage,\n    attachments,\n    onSendMessage,\n    onTyping,\n    consciousness,\n    interactionRecorder,\n    title,\n    trackAchievements,\n    achievementTracker,\n    spatialAudio,\n    spatialAudioEngine,\n    suggestedResponses,\n    adaptive,\n    adaptiveInputHeight,\n  ]);\n\n  // Handle key press\n  const handleKeyPress = useCallback(\n    (e: React.KeyboardEvent) => {\n      if (e.key === \"Enter\" && !e.shiftKey) {\n        e.preventDefault();\n        handleSendMessage();\n      }\n    },\n    [handleSendMessage]\n  );\n\n  // Handle file attachment\n  const handleFileAttachment = useCallback(() => {\n    fileInputRef.current?.click();\n  }, []);\n\n  const handleFileChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const files = Array.from(e.target.files || []);\n      setAttachments((prev: any) => [...prev, ...files]);\n      e.target.value = \"\";\n    },\n    []\n  );\n\n  // Remove attachment\n  const removeAttachment = useCallback((index: number) => {\n    setAttachments((prev: any) => prev.filter((_: any, i: any) => i !== index));\n  }, []);\n\n  // Handle voice recording\n  const handleVoiceToggle = useCallback(() => {\n    setIsRecording(!isRecording);\n    // Voice recording logic would go here\n  }, [isRecording]);\n\n  // Format timestamp\n  const formatTimestamp = useCallback((date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    if (days === 1) return \"Yesterday\";\n    if (days < 7) return `${days}d ago`;\n    return date.toLocaleDateString();\n  }, []);\n\n  // Group messages by date\n  const groupedMessages = messages.reduce(\n    (groups, message) => {\n      const date = message.timestamp.toDateString();\n      if (!groups[date]) {\n        groups[date] = [];\n      }\n      groups[date].push(message);\n      return groups;\n    },\n    {} as Record<string, ChatMessage[]>\n  );\n\n  // Auto-resize textarea\n  useEffect(() => {\n    if (inputRef.current) {\n      inputRef.current.style.height = \"auto\";\n      inputRef.current.style.height = `${Math.min(inputRef.current.scrollHeight, 120)}px`;\n    }\n  }, [newMessage]);\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"fadeIn\"\n      className=\"glass-w-full glass-h-full\"\n    >\n      <GlassCard\n        className={cn(\"flex flex-col h-full overflow-hidden\", className)}\n        {...props}\n      >\n        {/* Header */}\n        <CardHeader className=\"glass-pb-3 glass-border-b glass-border-white/10\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div>\n              <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold glass-flex glass-items-center glass-gap-2\">\n                <Hash className=\"glass-w-5 glass-h-5\" />\n                {title}\n              </CardTitle>\n              {subtitle && (\n                <p className=\"glass-text-primary-glass-opacity-60 glass-text-sm glass-mt-1\">\n                  {subtitle}\n                </p>\n              )}\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                className=\"glass-p-2\"\n                aria-label=\"Search messages\"\n              >\n                <Search className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                className=\"glass-p-2\"\n                aria-label=\"Start voice call\"\n              >\n                <Phone className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                className=\"glass-p-2\"\n                aria-label=\"Start video call\"\n              >\n                <Video className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                className=\"glass-p-2\"\n                aria-label=\"More options\"\n              >\n                <MoreVertical className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            </div>\n          </div>\n\n          {/* Participant count */}\n          {participants.length > 0 && (\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-mt-2\">\n              <Users className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-60\" />\n              <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n                {participants.filter((p: any) => p.status === \"online\").length}{\" \"}\n                online \u2022 {participants.length} total\n              </span>\n            </div>\n          )}\n        </CardHeader>\n\n        <div className=\"glass-flex glass-flex-1 glass-overflow-hidden\">\n          {/* Messages Area */}\n          <div className=\"glass-flex-1 glass-flex glass-min-w-0 glass-flex-col glass-overflow-hidden\">\n            {/* Messages */}\n            <CardContent className=\"glass-flex-1 glass-overflow-y-auto glass-p-4 glass-gap-4\">\n              {Object.entries(groupedMessages).map(([date, dateMessages]) => (\n                <div key={date}>\n                  {/* Date separator */}\n                  <div className=\"glass-flex glass-items-center glass-justify-center glass-my-6\">\n                    <div className=\"glass-px-3 glass-py-1 glass-surface-subtle/10 glass-radius-full\">\n                      <span className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                        {new Date(date).toLocaleDateString(undefined, {\n                          weekday: \"long\",\n                          year: \"numeric\",\n                          month: \"long\",\n                          day: \"numeric\",\n                        })}\n                      </span>\n                    </div>\n                  </div>\n\n                  {/* Messages for this date */}\n                  <div className=\"glass-gap-3\">\n                    {dateMessages.map((message, index) => {\n                      const isCurrentUser =\n                        message.sender.id === currentUser?.id;\n                      const prevMessage = dateMessages[index - 1];\n                      const showAvatar =\n                        showAvatars &&\n                        (!prevMessage ||\n                          prevMessage.sender.id !== message.sender.id);\n\n                      return (\n                        <div\n                          key={message.id}\n                          className={cn(\n                            \"flex glass-gap-3 group animate-slide-in-up\",\n                            isCurrentUser ? \"flex-row-reverse\" : \"flex-row\",\n                            eyeTracking &&\n                              focusedMessage === message.id &&\n                              \"consciousness-message-focused\",\n                            consciousness &&\n                              messageInteractionCounts[message.id] > 0 &&\n                              \"consciousness-message-interacted\",\n                            predictive &&\n                              conversationInsights?.sentiment === \"positive\" &&\n                              \"consciousness-positive-context\",\n                            predictive &&\n                              conversationInsights?.sentiment === \"negative\" &&\n                              \"consciousness-negative-context\",\n                            predictive &&\n                              conversationInsights?.urgency === \"high\" &&\n                              \"consciousness-urgent-context\"\n                          )}\n                          style={{\n                            animationDelay: `${Math.min(index, 20) * 20}ms`,\n                            animationFillMode: \"both\",\n                          }}\n                          data-consciousness-message=\"true\"\n                          data-message-id={message.id}\n                          data-message-sentiment={\n                            conversationInsights?.sentiment\n                          }\n                          data-message-urgency={conversationInsights?.urgency}\n                          data-interaction-count={\n                            messageInteractionCounts[message.id] || 0\n                          }\n                          data-gaze-focused={focusedMessage === message.id}\n                        >\n                          {/* Avatar */}\n                          {showAvatar && showAvatars && (\n                            <div className=\"glass-flex-shrink-0\">\n                              <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                                {message.sender.avatar ? (\n                                  <img\n                                    src={message.sender.avatar}\n                                    alt={message.sender.name}\n                                    className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                                  />\n                                ) : (\n                                  <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                                    {message.sender.name\n                                      .charAt(0)\n                                      .toUpperCase()}\n                                  </span>\n                                )}\n                              </div>\n                            </div>\n                          )}\n\n                          {/* Message Content */}\n                          <div\n                            className={cn(\n                              \"flex-1 max-w-[70%]\",\n                              isCurrentUser ? \"items-end\" : \"items-start\"\n                            )}\n                          >\n                            {/* Sender name */}\n                            {showAvatar && (\n                              <div\n                                className={cn(\n                                  \"flex items-center glass-gap-2 glass-mb-1\",\n                                  isCurrentUser\n                                    ? \"justify-end\"\n                                    : \"justify-start\"\n                                )}\n                              >\n                                <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                                  {message.sender.name}\n                                </span>\n                                {message.sender.status && (\n                                  <div\n                                    className={cn(\n                                      \"w-2 h-2 glass-radius-full\",\n                                      message.sender.status === \"online\"\n                                        ? \"bg-green-400\"\n                                        : message.sender.status === \"away\"\n                                          ? \"bg-yellow-400\"\n                                          : message.sender.status === \"busy\"\n                                            ? \"bg-red-400\"\n                                            : \"bg-gray-400\"\n                                    )}\n                                  />\n                                )}\n                              </div>\n                            )}\n\n                            {/* Message bubble */}\n                            <div\n                              className={cn(\n                                \"relative glass-px-4 glass-py-2 rounded-2xl max-w-full break-words\",\n                                isCurrentUser\n                                  ? \"bg-primary text-primary-foreground ml-auto\"\n                                  : \"bg-white/10 glass-text-primary\"\n                              )}\n                            >\n                              {/* Reply indicator */}\n                              {message.replyTo && (\n                                <div className=\"glass-text-xs glass-opacity-70 glass-mb-2 glass-pb-2 glass-border-b glass-border-current glass-border-glass-opacity-20\">\n                                  Replying to message\n                                </div>\n                              )}\n\n                              {/* Message content */}\n                              <div className=\"glass-text-sm\">\n                                {message.content}\n                              </div>\n\n                              {/* Attachments */}\n                              {message.attachments &&\n                                message.attachments.length > 0 && (\n                                  <div className=\"glass-mt-2 glass-gap-2\">\n                                    {message.attachments.map(\n                                      (attachment, attIndex) => (\n                                        <div\n                                          key={attIndex}\n                                          className=\"glass-flex glass-items-center glass-gap-2 glass-p-2 glass-surface-dark/20 glass-radius-md\"\n                                        >\n                                          {attachment.type === \"image\" && (\n                                            <ImageIcon className=\"glass-w-4 glass-h-4\" />\n                                          )}\n                                          {attachment.type === \"file\" && (\n                                            <File className=\"glass-w-4 glass-h-4\" />\n                                          )}\n                                          <span className=\"glass-text-xs glass-truncate\">\n                                            {attachment.name}\n                                          </span>\n                                        </div>\n                                      )\n                                    )}\n                                  </div>\n                                )}\n\n                              {/* Reactions */}\n                              {message.reactions &&\n                                message.reactions.length > 0 && (\n                                  <div className=\"glass-flex glass-gap-1 glass-mt-2\">\n                                    {message.reactions.map(\n                                      (reaction, reactionIndex) => (\n                                        <GlassButton\n                                          key={reactionIndex}\n                                          variant=\"ghost\"\n                                          size=\"sm\"\n                                          onClick={(e) =>\n                                            onMessageReaction?.(\n                                              message.id,\n                                              reaction.emoji\n                                            )\n                                          }\n                                          className=\"glass-h-6 glass-px-2 glass-text-xs\"\n                                        >\n                                          {reaction.emoji} {reaction.count}\n                                        </GlassButton>\n                                      )\n                                    )}\n                                  </div>\n                                )}\n                            </div>\n\n                            {/* Timestamp and status */}\n                            <div\n                              className={cn(\n                                \"flex items-center glass-gap-2 glass-mt-1 glass-text-xs glass-text-primary/50\",\n                                isCurrentUser ? \"justify-end\" : \"justify-start\"\n                              )}\n                            >\n                              {showTimestamps && (\n                                <span>\n                                  {formatTimestamp(message.timestamp)}\n                                </span>\n                              )}\n                              {message.edited && <span>(edited)</span>}\n                            </div>\n                          </div>\n\n                          {/* Message actions */}\n                          <div\n                            className={cn(\n                              \"opacity-0 group-hover:opacity-100 transition-opacity flex glass-gap-1\",\n                              isCurrentUser ? \"flex-row-reverse\" : \"flex-row\"\n                            )}\n                          >\n                            {enableReactions && (\n                              <GlassButton\n                                variant=\"ghost\"\n                                size=\"sm\"\n                                onClick={(e) =>\n                                  setShowEmojiPicker(!showEmojiPicker)\n                                }\n                                className=\"glass-p-1\"\n                                aria-label=\"Add reaction\"\n                              >\n                                <Smile className=\"glass-w-3 glass-h-3\" />\n                              </GlassButton>\n                            )}\n                          </div>\n                        </div>\n                      );\n                    })}\n                  </div>\n                </div>\n              ))}\n\n              <div ref={messagesEndRef} />\n            </CardContent>\n\n            {/* Message Input */}\n            <div\n              className={cn(\n                \"border-t border-white/10 glass-p-4\",\n                adaptive && \"consciousness-adaptive-input\",\n                predictive &&\n                  suggestedResponses.length > 0 &&\n                  \"consciousness-predictive-suggestions\",\n                consciousness && \"consciousness-enhanced-input\"\n              )}\n              data-consciousness-input-area=\"true\"\n              data-adaptive-height={adaptiveInputHeight}\n              data-has-suggestions={suggestedResponses.length > 0}\n              data-conversation-sentiment={conversationInsights?.sentiment}\n              data-conversation-urgency={conversationInsights?.urgency}\n            >\n              {/* Predictive Response Suggestions */}\n              {predictive && suggestedResponses.length > 0 && (\n                <div\n                  className=\"glass-mb-3\"\n                  data-consciousness-suggestions=\"true\"\n                >\n                  <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mb-2 glass-flex glass-items-center glass-gap-1\">\n                    <span>Suggested responses</span>\n                    {conversationInsights?.sentiment && (\n                      <span\n                        className={cn(\n                          \"glass-px-2 glass-py-0.5 glass-radius-md glass-text-xs\",\n                          conversationInsights.sentiment === \"positive\"\n                            ? \"bg-green-500/20 text-green-300\"\n                            : conversationInsights.sentiment === \"negative\"\n                              ? \"bg-red-500/20 text-red-300\"\n                              : \"bg-yellow-500/20 text-yellow-300\"\n                        )}\n                      >\n                        {conversationInsights.sentiment}\n                      </span>\n                    )}\n                    {conversationInsights?.urgency === \"high\" && (\n                      <span className=\"glass-px-2 glass-py-0.5 glass-radius-md glass-text-xs glass-surface-primary/20 glass-text-secondary\">\n                        urgent\n                      </span>\n                    )}\n                  </div>\n                  <div className=\"glass-flex glass-gap-2 glass-flex-wrap\">\n                    {suggestedResponses.map((suggestion, index) => (\n                      <GlassButton\n                        key={index}\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={() => setNewMessage(suggestion)}\n                        className=\"glass-text-xs glass-px-3 glass-py-1 glass-h-auto consciousness-suggestion-button\"\n                        data-suggestion-index={index}\n                      >\n                        {suggestion}\n                      </GlassButton>\n                    ))}\n                  </div>\n                </div>\n              )}\n\n              {/* Conversation Insights */}\n              {predictive &&\n                conversationInsights?.topics &&\n                conversationInsights.topics.length > 0 && (\n                  <div\n                    className=\"glass-mb-3\"\n                    data-consciousness-insights=\"true\"\n                  >\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mb-2\">\n                      Conversation topics:\n                    </div>\n                    <div className=\"glass-flex glass-gap-1 glass-flex-wrap\">\n                      {conversationInsights.topics.map((topic, index) => (\n                        <span\n                          key={index}\n                          className=\"glass-px-2 glass-py-0.5 glass-radius-md glass-text-xs glass-surface-primary/20 glass-text-primary\"\n                        >\n                          {topic}\n                        </span>\n                      ))}\n                    </div>\n                  </div>\n                )}\n\n              {/* Attachments preview */}\n              {attachments.length > 0 && (\n                <div className=\"glass-flex glass-gap-2 glass-mb-3 glass-overflow-x-auto\">\n                  {attachments.map((file, index) => (\n                    <div\n                      key={index}\n                      className=\"glass-flex glass-items-center glass-gap-2 glass-surface-subtle/10 glass-radius-md glass-px-3 glass-py-2\"\n                    >\n                      <File className=\"glass-w-4 glass-h-4\" />\n                      <span className=\"glass-text-sm glass-text-primary glass-truncate glass-max-w-32\">\n                        {file.name}\n                      </span>\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={(e) => removeAttachment(index)}\n                        className=\"glass-p-1 glass-h-auto\"\n                        aria-label={`Remove attachment ${file.name}`}\n                      >\n                        <X className=\"glass-w-3 glass-h-3\" />\n                      </GlassButton>\n                    </div>\n                  ))}\n                </div>\n              )}\n\n              {/* Input area */}\n              <div className=\"glass-flex glass-flex-wrap glass-items-end glass-gap-2\">\n                {/* File attachment */}\n                {enableAttachments && (\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={handleFileAttachment}\n                    className=\"glass-shrink-0 glass-p-2\"\n                    aria-label=\"Attach file\"\n                  >\n                    <Paperclip className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                )}\n\n                {/* Voice recording */}\n                {enableVoice && (\n                  <GlassButton\n                    variant={isRecording ? \"destructive\" : \"ghost\"}\n                    size=\"sm\"\n                    onClick={handleVoiceToggle}\n                    className=\"glass-shrink-0 glass-p-2\"\n                    aria-label={\n                      isRecording ? \"Stop recording\" : \"Start voice recording\"\n                    }\n                  >\n                    {isRecording ? (\n                      <MicOff className=\"glass-w-4 glass-h-4\" />\n                    ) : (\n                      <Mic className=\"glass-w-4 glass-h-4\" />\n                    )}\n                  </GlassButton>\n                )}\n\n                {/* Text input */}\n                <div className=\"glass-relative glass-min-w-0 glass-flex-1\">\n                  <textarea\n                    ref={inputRef}\n                    value={newMessage}\n                    onChange={handleInputChange}\n                    onKeyPress={handleKeyPress}\n                    placeholder={\n                      predictive && conversationInsights?.urgency === \"high\"\n                        ? \"Type urgent response...\"\n                        : adaptive\n                          ? \"Type a message (adaptive sizing enabled)...\"\n                          : \"Type a message...\"\n                    }\n                    className={cn(\n                      \"w-full bg-glass-fill ring-1 ring-white/10 glass-radius-lg glass-px-4 glass-py-2 glass-pr-12 glass-text-primary placeholder-white/50 focus:outline-none glass-focus-ring-white-opacity-30 resize-none max-h-[120px]\",\n                      adaptive && \"consciousness-adaptive-textarea\",\n                      predictive &&\n                        conversationInsights?.urgency === \"high\" &&\n                        \"consciousness-urgent-input\",\n                      eyeTracking && \"consciousness-eye-trackable\"\n                    )}\n                    style={{\n                      minHeight: adaptive ? `${adaptiveInputHeight}px` : \"40px\",\n                    }}\n                    rows={1}\n                    data-consciousness-input=\"true\"\n                    data-adaptive-height={adaptiveInputHeight}\n                    data-urgency={conversationInsights?.urgency}\n                    data-eye-tracking={String(!!eyeTracking)}\n                  />\n\n                  {/* Emoji button */}\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => setShowEmojiPicker(!showEmojiPicker)}\n                    className=\"glass-absolute glass-right-2 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-p-1\"\n                    aria-label=\"Open emoji picker\"\n                  >\n                    <Smile className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                </div>\n\n                {/* Send button */}\n                <GlassButton\n                  variant=\"primary\"\n                  size=\"sm\"\n                  onClick={handleSendMessage}\n                  disabled={!newMessage.trim() && attachments.length === 0}\n                  className={cn(\n                    \"glass-shrink-0 glass-p-2\",\n                    consciousness && \"consciousness-send-button\",\n                    predictive &&\n                      conversationInsights?.urgency === \"high\" &&\n                      \"consciousness-urgent-send\",\n                    adaptive && \"consciousness-adaptive-send\"\n                  )}\n                  consciousness={consciousness}\n                  predictive={predictive}\n                  adaptive={adaptive}\n                  spatialAudio={spatialAudio}\n                  trackAchievements={trackAchievements}\n                  data-consciousness-send=\"true\"\n                  data-urgency={conversationInsights?.urgency}\n                  data-has-attachments={attachments.length > 0}\n                  data-message-length={newMessage.trim().length}\n                  aria-label=\"Send message\"\n                >\n                  <Send className=\"glass-w-4 glass-h-4\" />\n                </GlassButton>\n              </div>\n\n              {/* Hidden file input */}\n              <input\n                ref={fileInputRef}\n                type=\"file\"\n                multiple\n                onChange={handleFileChange}\n                className=\"glass-hidden glass-touch-target glass-contrast-guard\"\n                accept=\"image/*,video/*,audio/*,.pdf,.doc,.docx,.txt\"\n                aria-label=\"Upload file attachment\"\n              />\n            </div>\n          </div>\n\n          {/* Participants sidebar */}\n          {showParticipants && participants.length > 0 && (\n            <div className=\"glass-w-64 glass-border-l glass-border-white/10 glass-flex glass-flex-col\">\n              <div className=\"glass-p-4 glass-border-b glass-border-white/10\">\n                <h3 className=\"glass-text-primary glass-font-medium glass-flex glass-items-center glass-gap-2\">\n                  <Users className=\"glass-w-4 glass-h-4\" />\n                  Participants ({participants.length})\n                </h3>\n              </div>\n\n              <div className=\"glass-flex-1 glass-overflow-y-auto glass-p-2\">\n                {participants.map((participant) => (\n                  <div\n                    key={participant.id}\n                    className=\"glass-flex glass-items-center glass-gap-3 glass-p-2 glass-radius-lg hover:glass-surface-subtle/5\"\n                  >\n                    <div className=\"glass-relative\">\n                      <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                        {participant.avatar ? (\n                          <img\n                            src={participant.avatar}\n                            alt={participant.name}\n                            className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                          />\n                        ) : (\n                          <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                            {participant.name.charAt(0).toUpperCase()}\n                          </span>\n                        )}\n                      </div>\n                      <div\n                        className={cn(\n                          \"absolute -bottom-1 -right-1 w-3 h-3 glass-radius-full border-2 border-black\",\n                          participant.status === \"online\"\n                            ? \"bg-green-400\"\n                            : participant.status === \"away\"\n                              ? \"bg-yellow-400\"\n                              : participant.status === \"busy\"\n                                ? \"bg-red-400\"\n                                : \"bg-gray-400\"\n                        )}\n                      />\n                    </div>\n\n                    <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                      <p className=\"glass-text-primary glass-text-sm glass-font-medium glass-truncate\">\n                        {participant.name}\n                      </p>\n                      <p className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                        {participant.status === \"online\"\n                          ? \"Online\"\n                          : participant.status === \"away\"\n                            ? \"Away\"\n                            : participant.status === \"busy\"\n                              ? \"Busy\"\n                              : participant.lastSeen\n                                ? `Last seen ${formatTimestamp(participant.lastSeen)}`\n                                : \"Offline\"}\n                      </p>\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n        </div>\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Consciousness-Enhanced Chat Variants\nexport const GlassPredictiveChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat {...props} consciousness={true} predictive={true} />\n);\n\nexport const GlassAdaptiveChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat {...props} consciousness={true} adaptive={true} />\n);\n\nexport const GlassEyeTrackingChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat {...props} consciousness={true} eyeTracking={true} />\n);\n\nexport const GlassSpatialAudioChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat {...props} consciousness={true} spatialAudio={true} />\n);\n\nexport const GlassAchievementChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat {...props} consciousness={true} trackAchievements={true} />\n);\n\nexport const GlassConsciousnessChat: React.FC<GlassChatProps> = (props) => (\n  <GlassChat\n    {...props}\n    consciousness={true}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\nexport default GlassChat;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Mic as AudioIcon,\n  Bold,\n  Code,\n  File,\n  Image as ImageIcon,\n  Italic,\n  Link,\n  Mic,\n  Paperclip,\n  Plus,\n  Send,\n  Smile,\n  Square,\n  Video,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\n\nexport interface ChatAttachment {\n  id: string;\n  file: File;\n  type: \"image\" | \"video\" | \"audio\" | \"file\";\n  preview?: string;\n  size: number;\n}\n\nexport interface GlassChatInputProps {\n  /**\n   * Placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Enable file attachments\n   */\n  enableAttachments?: boolean;\n  /**\n   * Enable voice messages\n   */\n  enableVoice?: boolean;\n  /**\n   * Enable emoji picker\n   */\n  enableEmoji?: boolean;\n  /**\n   * Enable rich text formatting\n   */\n  enableFormatting?: boolean;\n  /**\n   * Enable mentions\n   */\n  enableMentions?: boolean;\n  /**\n   * Maximum character count\n   */\n  maxLength?: number;\n  /**\n   * Maximum file size in bytes\n   */\n  maxFileSize?: number;\n  /**\n   * Accepted file types\n   */\n  acceptedFileTypes?: string;\n  /**\n   * Show character count\n   */\n  showCharCount?: boolean;\n  /**\n   * Auto-resize textarea\n   */\n  autoResize?: boolean;\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Send message handler\n   */\n  onSendMessage?: (content: string, attachments?: ChatAttachment[]) => void;\n  /**\n   * Typing handler\n   */\n  onTyping?: (isTyping: boolean) => void;\n  /**\n   * Attachment handler\n   */\n  onAttachmentAdd?: (attachment: ChatAttachment) => void;\n  /**\n   * Attachment remove handler\n   */\n  onAttachmentRemove?: (attachmentId: string) => void;\n  /**\n   * Voice recording handler\n   */\n  onVoiceRecording?: (blob: Blob) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassChatInput component\n * A rich chat input with attachments, voice recording, and formatting\n */\nexport const GlassChatInput: React.FC<GlassChatInputProps> = ({\n  placeholder = \"Type a message...\",\n  enableAttachments = true,\n  enableVoice = false,\n  enableEmoji = true,\n  enableFormatting = false,\n  enableMentions = false,\n  maxLength,\n  maxFileSize = 10 * 1024 * 1024, // 10MB\n  acceptedFileTypes = \"image/*,video/*,audio/*,.pdf,.doc,.docx,.txt\",\n  showCharCount = false,\n  autoResize = true,\n  disabled = false,\n  loading = false,\n  onSendMessage,\n  onTyping,\n  onAttachmentAdd,\n  onAttachmentRemove,\n  onVoiceRecording,\n  className,\n  \"data-testid\": dataTestId,\n  ...props\n}) => {\n  const [message, setMessage] = useState(\"\");\n  const [attachments, setAttachments] = useState<ChatAttachment[]>([]);\n  const [isRecording, setIsRecording] = useState(false);\n  const [recordingTime, setRecordingTime] = useState(0);\n  const [showEmojiPicker, setShowEmojiPicker] = useState(false);\n  const [showFormatting, setShowFormatting] = useState(false);\n  const [isTyping, setIsTyping] = useState(false);\n\n  const textareaRef = useRef<HTMLTextAreaElement>(null);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const recordingIntervalRef = useRef<NodeJS.Timeout>();\n  const typingTimeoutRef = useRef<NodeJS.Timeout>();\n\n  // Auto-resize textarea\n  useEffect(() => {\n    if (autoResize && textareaRef.current) {\n      textareaRef.current.style.height = \"auto\";\n      textareaRef.current.style.height = `${Math.min(textareaRef.current.scrollHeight, 120)}px`;\n    }\n  }, [message, autoResize]);\n\n  // Handle typing indicator\n  useEffect(() => {\n    if (!onTyping) return;\n\n    if (message.length > 0 && !isTyping) {\n      setIsTyping(true);\n      onTyping(true);\n    }\n\n    if (typingTimeoutRef.current) {\n      clearTimeout(typingTimeoutRef.current);\n    }\n\n    typingTimeoutRef.current = setTimeout(() => {\n      if (isTyping) {\n        setIsTyping(false);\n        onTyping(false);\n      }\n    }, 2000);\n\n    return () => {\n      if (typingTimeoutRef.current) {\n        clearTimeout(typingTimeoutRef.current);\n      }\n    };\n  }, [message, isTyping, onTyping]);\n\n  // Handle input change\n  const handleInputChange = useCallback(\n    (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n      let value = e.target.value;\n\n      if (maxLength && value.length > maxLength) {\n        value = value.substring(0, maxLength);\n      }\n\n      setMessage(value);\n    },\n    [maxLength]\n  );\n\n  // Handle key press\n  const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n    if (e.key === \"Enter\" && !e.shiftKey) {\n      e.preventDefault();\n      handleSendMessage();\n    }\n  }, []);\n\n  // Handle send message\n  const handleSendMessage = useCallback(() => {\n    if (!message.trim() && attachments.length === 0) return;\n    if (disabled || loading) return;\n\n    onSendMessage?.(message.trim(), attachments);\n\n    // Reset state\n    setMessage(\"\");\n    setAttachments([]);\n    setIsTyping(false);\n    onTyping?.(false);\n\n    // Reset textarea height\n    if (textareaRef.current) {\n      textareaRef.current.style.height = \"auto\";\n    }\n  }, [message, attachments, disabled, loading, onSendMessage, onTyping]);\n\n  // Handle file attachment\n  const handleFileSelect = useCallback(() => {\n    fileInputRef.current?.click();\n  }, []);\n\n  const handleFileChange = useCallback(\n    (e: React.ChangeEvent<HTMLInputElement>) => {\n      const files = Array.from(e.target.files || []);\n\n      files.forEach((file: any) => {\n        if (file.size > maxFileSize) {\n          return;\n        }\n\n        const attachment: ChatAttachment = {\n          id: `${Date.now()}-${Math.random()}`,\n          file,\n          type: file.type.startsWith(\"image/\")\n            ? \"image\"\n            : file.type.startsWith(\"video/\")\n              ? \"video\"\n              : file.type.startsWith(\"audio/\")\n                ? \"audio\"\n                : \"file\",\n          size: file.size,\n        };\n\n        // Create preview for images\n        if (attachment.type === \"image\") {\n          const reader = new FileReader();\n          reader.onload = () => {\n            attachment.preview = reader.result as string;\n            setAttachments((prev: any) => [...prev, attachment]);\n            onAttachmentAdd?.(attachment);\n          };\n          reader.readAsDataURL(file);\n        } else {\n          setAttachments((prev: any) => [...prev, attachment]);\n          onAttachmentAdd?.(attachment);\n        }\n      });\n\n      e.target.value = \"\";\n    },\n    [maxFileSize, onAttachmentAdd]\n  );\n\n  // Remove attachment\n  const handleRemoveAttachment = useCallback(\n    (attachmentId: string) => {\n      setAttachments((prev: any) =>\n        prev.filter((att: any) => att.id !== attachmentId)\n      );\n      onAttachmentRemove?.(attachmentId);\n    },\n    [onAttachmentRemove]\n  );\n\n  // Handle voice recording\n  const handleVoiceToggle = useCallback(() => {\n    if (isRecording) {\n      // Stop recording\n      setIsRecording(false);\n      setRecordingTime(0);\n\n      if (recordingIntervalRef.current) {\n        clearInterval(recordingIntervalRef.current);\n      }\n\n      // Here you would typically get the recorded blob and call onVoiceRecording\n      // For now, we'll just simulate it\n      const mockBlob = new Blob([\"mock audio data\"], { type: \"audio/wav\" });\n      onVoiceRecording?.(mockBlob);\n    } else {\n      // Start recording\n      setIsRecording(true);\n\n      recordingIntervalRef.current = setInterval(() => {\n        setRecordingTime((prev: any) => prev + 1);\n      }, 1000);\n    }\n  }, [isRecording, onVoiceRecording]);\n\n  // Format recording time\n  const formatRecordingTime = useCallback((seconds: number) => {\n    const mins = Math.floor(seconds / 60);\n    const secs = seconds % 60;\n    return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n  }, []);\n\n  // Handle emoji selection\n  const handleEmojiSelect = useCallback((emoji: string) => {\n    setMessage((prev: any) => prev + emoji);\n    setShowEmojiPicker(false);\n  }, []);\n\n  // Handle formatting\n  const handleFormatting = useCallback(\n    (format: string) => {\n      const textarea = textareaRef.current;\n      if (!textarea) return;\n\n      const start = textarea.selectionStart;\n      const end = textarea.selectionEnd;\n      const selectedText = message.substring(start, end);\n\n      let formattedText = \"\";\n      switch (format) {\n        case \"bold\":\n          formattedText = `**${selectedText}**`;\n          break;\n        case \"italic\":\n          formattedText = `*${selectedText}*`;\n          break;\n        case \"code\":\n          formattedText = `\\`${selectedText}\\``;\n          break;\n        case \"link\":\n          formattedText = `[${selectedText}](url)`;\n          break;\n        case \"quote\":\n          formattedText = `> ${selectedText}`;\n          break;\n        case \"list\":\n          formattedText = `- ${selectedText}`;\n          break;\n      }\n\n      const newMessage =\n        message.substring(0, start) + formattedText + message.substring(end);\n      setMessage(newMessage);\n\n      // Reset cursor position\n      setTimeout(() => {\n        textarea.focus();\n        textarea.setSelectionRange(\n          start + formattedText.length,\n          start + formattedText.length\n        );\n      }, 0);\n    },\n    [message]\n  );\n\n  // Get file type icon\n  const getFileIcon = useCallback((type: string) => {\n    if (type.startsWith(\"image/\"))\n      return <ImageIcon className=\"glass-w-4 glass-h-4\" />;\n    if (type.startsWith(\"video/\"))\n      return <Video className=\"glass-w-4 glass-h-4\" />;\n    if (type.startsWith(\"audio/\"))\n      return <AudioIcon className=\"glass-w-4 glass-h-4\" />;\n    return <File className=\"glass-w-4 glass-h-4\" />;\n  }, []);\n\n  // Format file size\n  const formatFileSize = useCallback((bytes: number) => {\n    if (bytes === 0) return \"0 B\";\n    const k = 1024;\n    const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + \" \" + sizes[i];\n  }, []);\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\"overflow-hidden\", className)}\n        data-testid={dataTestId}\n        {...props}\n      >\n        <CardContent className=\"glass-p-4\">\n          {/* Attachments preview */}\n          {attachments.length > 0 && (\n            <div\n              className=\"glass-mb-4 glass-gap-2\"\n              role=\"list\"\n              aria-label=\"Attached files\"\n            >\n              {attachments.map((attachment) => (\n                <div\n                  key={attachment.id}\n                  role=\"listitem\"\n                  className=\"glass-flex glass-items-center glass-gap-3 glass-p-3 glass-surface-subtle/10 glass-radius-lg\"\n                >\n                  {/* Preview */}\n                  <div className=\"glass-flex-shrink-0\">\n                    {attachment.preview ? (\n                      <img\n                        src={attachment.preview}\n                        alt={attachment.file.name}\n                        className=\"glass-w-10 glass-h-10 glass-radius-md glass-object-cover\"\n                      />\n                    ) : (\n                      <div className=\"glass-w-10 glass-h-10 glass-radius-md glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                        {getFileIcon(attachment.file.type)}\n                      </div>\n                    )}\n                  </div>\n\n                  {/* File info */}\n                  <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                    <p className=\"glass-text-primary glass-text-sm glass-truncate\">\n                      {attachment.file.name}\n                    </p>\n                    <p className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                      {formatFileSize(attachment.size)}\n                    </p>\n                  </div>\n\n                  {/* Remove button */}\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => handleRemoveAttachment(attachment.id)}\n                    className=\"glass-p-1\"\n                  >\n                    <X className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                </div>\n              ))}\n            </div>\n          )}\n\n          {/* Input area */}\n          <div className=\"glass-flex glass-flex-wrap glass-items-end glass-gap-3\">\n            {/* Attachment button */}\n            {enableAttachments && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleFileSelect}\n                disabled={disabled || loading}\n                aria-label=\"Attach file\"\n                className=\"glass-p-2 glass-flex-shrink-0\"\n                style={{ order: 2 }}\n              >\n                <Paperclip className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n              </GlassButton>\n            )}\n\n            {/* Voice recording button */}\n            {enableVoice && (\n              <GlassButton\n                variant={isRecording ? \"destructive\" : \"ghost\"}\n                size=\"sm\"\n                onClick={handleVoiceToggle}\n                disabled={disabled || loading}\n                aria-label={\n                  isRecording\n                    ? `Stop recording (${formatRecordingTime(recordingTime)})`\n                    : \"Start voice recording\"\n                }\n                aria-pressed={isRecording}\n                className=\"glass-p-2 glass-flex-shrink-0\"\n                style={{ order: 2 }}\n              >\n                {isRecording ? (\n                  <>\n                    <Square\n                      className=\"glass-w-4 glass-h-4 glass-mr-2\"\n                      aria-hidden=\"true\"\n                    />\n                    <span className=\"glass-text-xs\" aria-hidden=\"true\">\n                      {formatRecordingTime(recordingTime)}\n                    </span>\n                  </>\n                ) : (\n                  <Mic className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                )}\n              </GlassButton>\n            )}\n\n            {/* Formatting toolbar */}\n            {enableFormatting && showFormatting && (\n              <div\n                className=\"glass-flex glass-gap-1 glass-p-2 glass-surface-subtle/10 glass-radius-lg glass-mb-2\"\n                style={{ order: 2 }}\n              >\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => handleFormatting(\"bold\")}\n                  className=\"glass-p-1\"\n                >\n                  <Bold className=\"glass-w-3 glass-h-3\" />\n                </GlassButton>\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => handleFormatting(\"italic\")}\n                  className=\"glass-p-1\"\n                >\n                  <Italic className=\"glass-w-3 glass-h-3\" />\n                </GlassButton>\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => handleFormatting(\"code\")}\n                  className=\"glass-p-1\"\n                >\n                  <Code className=\"glass-w-3 glass-h-3\" />\n                </GlassButton>\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => handleFormatting(\"link\")}\n                  className=\"glass-p-1\"\n                >\n                  <Link className=\"glass-w-3 glass-h-3\" />\n                </GlassButton>\n              </div>\n            )}\n\n            {/* Main input */}\n            <div\n              className=\"glass-flex-1 glass-min-w-0 glass-relative\"\n              style={{ flex: \"1 0 100%\", minWidth: 0, order: 1 }}\n            >\n              <textarea\n                ref={textareaRef}\n                id=\"chat-message-input\"\n                value={message}\n                onChange={handleInputChange}\n                onKeyPress={handleKeyPress}\n                placeholder={isRecording ? \"Recording...\" : placeholder}\n                disabled={disabled || loading || isRecording}\n                aria-label=\"Chat message\"\n                aria-describedby={\n                  showCharCount && maxLength ? \"char-count\" : undefined\n                }\n                aria-multiline=\"true\"\n                className={cn(\n                  \"w-full bg-glass-fill ring-1 ring-white/10 glass-radius-lg glass-px-4 glass-py-3 glass-text-primary placeholder-white/50\",\n                  \"block box-border focus:outline-none glass-focus-ring-white-opacity-30 resize-none min-h-[44px] max-h-[120px]\",\n                  \"disabled:opacity-50 glass-disabled-cursor-not-allowed\"\n                )}\n                style={{ boxSizing: \"border-box\" }}\n                rows={1}\n              />\n\n              {/* Character count */}\n              {showCharCount && maxLength && (\n                <div\n                  id=\"char-count\"\n                  className=\"glass-absolute glass-bottom-2 glass-right-3 glass-text-xs glass-text-primary-glass-opacity-50\"\n                  aria-live=\"polite\"\n                >\n                  {message.length}/{maxLength}\n                </div>\n              )}\n            </div>\n\n            {/* Action buttons */}\n            <div\n              className=\"glass-flex glass-gap-1 glass-flex-shrink-0\"\n              style={{ marginLeft: \"auto\", order: 2 }}\n            >\n              {/* Emoji button */}\n              {enableEmoji && (\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setShowEmojiPicker(!showEmojiPicker)}\n                  disabled={disabled || loading}\n                  className=\"glass-p-2\"\n                  aria-label={\n                    showEmojiPicker ? \"Hide emoji picker\" : \"Show emoji picker\"\n                  }\n                  aria-pressed={showEmojiPicker}\n                >\n                  <Smile className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                </GlassButton>\n              )}\n\n              {/* Formatting toggle */}\n              {enableFormatting && (\n                <GlassButton\n                  variant={showFormatting ? \"primary\" : \"ghost\"}\n                  size=\"sm\"\n                  onClick={(e) => setShowFormatting(!showFormatting)}\n                  disabled={disabled || loading}\n                  className=\"glass-p-2\"\n                  aria-label={\n                    showFormatting\n                      ? \"Hide formatting options\"\n                      : \"Show formatting options\"\n                  }\n                  aria-pressed={showFormatting}\n                >\n                  <Plus className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                </GlassButton>\n              )}\n\n              {/* Send button */}\n              <GlassButton\n                variant=\"primary\"\n                size=\"sm\"\n                onClick={handleSendMessage}\n                disabled={\n                  (!message.trim() && attachments.length === 0) ||\n                  disabled ||\n                  loading ||\n                  isRecording\n                }\n                className=\"glass-p-2\"\n                aria-label={loading ? \"Sending message\" : \"Send message\"}\n              >\n                {loading ? (\n                  <div\n                    className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-white/20 glass-border-t-white glass-radius-full glass-animate-spin\"\n                    aria-hidden=\"true\"\n                  />\n                ) : (\n                  <Send className=\"glass-w-4 glass-h-4\" aria-hidden=\"true\" />\n                )}\n              </GlassButton>\n            </div>\n          </div>\n\n          {/* Emoji picker */}\n          {showEmojiPicker && (\n            <div className=\"glass-mt-3 glass-p-3 glass-surface-subtle/10 glass-radius-lg\">\n              <div className=\"glass-grid glass-grid-cols-8 glass-gap-2\">\n                {[\n                  \"\uD83D\uDE00\",\n                  \"\uD83D\uDE02\",\n                  \"\uD83D\uDE0A\",\n                  \"\uD83D\uDE0D\",\n                  \"\uD83E\uDD14\",\n                  \"\uD83D\uDE0E\",\n                  \"\uD83D\uDC4D\",\n                  \"\uD83D\uDC4E\",\n                  \"\u2764\uFE0F\",\n                  \"\uD83D\uDD25\",\n                  \"\u2B50\",\n                  \"\uD83C\uDF89\",\n                  \"\uD83D\uDE4C\",\n                  \"\u2728\",\n                  \"\uD83D\uDCAF\",\n                  \"\uD83D\uDE80\",\n                ].map((emoji) => (\n                  <button\n                    key={emoji}\n                    onClick={(e) => handleEmojiSelect(emoji)}\n                    className=\"glass-w-8 glass-h-8 hover:glass-surface-subtle/20 glass-radius-md glass-transition-colors glass-text-lg\"\n                    aria-label={`Insert ${emoji} emoji`}\n                  >\n                    {emoji}\n                  </button>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {/* Hidden file input */}\n          <input\n            ref={fileInputRef}\n            type=\"file\"\n            multiple\n            onChange={handleFileChange}\n            className=\"glass-hidden glass-touch-target glass-contrast-guard\"\n            accept={acceptedFileTypes}\n            aria-label=\"File upload input\"\n          />\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassChatInput;\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface CoachmarkStep {\n  id: string;\n  content: React.ReactNode;\n}\nexport interface GlassCoachmarksProps {\n  steps: CoachmarkStep[];\n  current: number;\n  onNext: () => void;\n  onPrev: () => void;\n  onClose: () => void;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\nexport function GlassCoachmarks({\n  steps: incomingSteps = [],\n  current = 0,\n  onNext = () => {},\n  onPrev = () => {},\n  onClose = () => {},\n  className,\n  \"data-testid\": dataTestId,\n  ...props\n}: GlassCoachmarksProps) {\n  const steps = Array.isArray(incomingSteps) ? incomingSteps : [];\n  const step = steps[current];\n  if (!step) {\n    return null;\n  }\n  return (\n    <div\n      data-glass-component\n      className={cn(\"fixed inset-0 z-[2000]\", className)}\n      data-testid={dataTestId}\n      {...props}\n    >\n      <div\n        className=\"glass-absolute glass-inset-0 glass-surface-dark/45\"\n        onClick={onClose}\n      />\n      <div className=\"glass-absolute glass-inset-x-0 glass-bottom-10 glass-mx-auto glass-w-full glass-max-w-xl\">\n        <div className=\"glass-radius-2xl glass-surface-overlay glass-border glass-border-subtle glass-p-4 glass-mx-4 glass-text-primary glass-contrast-guard\">\n          <div className=\"glass-mb-3\">{step.content}</div>\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-2\">\n            <button\n              type=\"button\"\n              className=\"glass-px-3 glass-py-1 glass-radius-md glass-surface-subtle/10 glass-focus glass-touch-target glass-contrast-guard\"\n              onClick={onPrev}\n              disabled={current === 0}\n            >\n              Back\n            </button>\n            <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n              <button\n                type=\"button\"\n                className=\"glass-px-3 glass-py-1 glass-radius-md glass-surface-subtle/10 glass-focus glass-touch-target glass-contrast-guard\"\n                onClick={onClose}\n              >\n                Close\n              </button>\n              <button\n                type=\"button\"\n                className=\"glass-px-3 glass-py-1 glass-radius-md glass-surface-blue glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n                onClick={onNext}\n              >\n                Next\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default GlassCoachmarks;\n", "\"use client\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { Search } from \"@/icons\";\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\n\nexport interface CommandItem {\n  id: string;\n  label: string;\n  description?: string;\n  icon?: React.ReactNode;\n  keywords?: string[];\n  action: () => void;\n  group?: string;\n  disabled?: boolean;\n}\n\nexport interface GlassCommandProps {\n  /**\n   * Command items to display\n   */\n  items?: CommandItem[];\n  /**\n   * Placeholder text for search input\n   */\n  placeholder?: string;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Maximum height of the command list\n   */\n  maxHeight?: string;\n  /**\n   * Custom filter function\n   */\n  filterItems?: (items: CommandItem[], query: string) => CommandItem[];\n  /**\n   * Group items by category\n   */\n  groupBy?: (item: CommandItem) => string;\n  /**\n   * Custom render function for items\n   */\n  renderItem?: (item: CommandItem, isSelected: boolean) => React.ReactNode;\n  /**\n   * Custom render function for empty state\n   */\n  renderEmpty?: () => React.ReactNode;\n  /**\n   * Callback when command is selected\n   */\n  onSelect?: (item: CommandItem) => void;\n  /**\n   * Callback when search query changes\n   */\n  onSearchChange?: (query: string) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Accessible label for the command palette\n   */\n  \"aria-label\"?: string;\n  /**\n   * Custom data-testid\n   */\n  \"data-testid\"?: string;\n}\n\nexport interface GlassCommandDialogProps extends GlassCommandProps {\n  /**\n   * Whether dialog is open\n   */\n  open: boolean;\n  /**\n   * Callback when dialog closes\n   */\n  onOpenChange: (open: boolean) => void;\n  /**\n   * Dialog title\n   */\n  title?: string;\n  /**\n   * Dialog description\n   */\n  description?: string;\n}\n\nexport interface GlassCommandInputProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nexport interface GlassCommandListProps {\n  /**\n   * Command items to display\n   */\n  children: React.ReactNode;\n  /**\n   * Maximum height\n   */\n  maxHeight?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nconst DEFAULT_COMMAND_ITEMS: CommandItem[] = [\n  {\n    id: \"open-file\",\n    label: \"Open file\",\n    description: \"Open a workspace file\",\n    keywords: [\"open\", \"file\"],\n    group: \"Quick actions\",\n    action: () => {},\n  },\n  {\n    id: \"save\",\n    label: \"Save\",\n    description: \"Persist current changes\",\n    keywords: [\"save\", \"write\"],\n    group: \"Quick actions\",\n    action: () => {},\n  },\n  {\n    id: \"find\",\n    label: \"Find\",\n    description: \"Search the current view\",\n    keywords: [\"search\", \"find\"],\n    group: \"Navigation\",\n    action: () => {},\n  },\n];\n\n// Context for command state\nconst CommandContext = createContext<{\n  selectedIndex: number;\n  setSelectedIndex: (index: number) => void;\n  query: string;\n  setQuery: (query: string) => void;\n} | null>(null);\n\nconst useCommandContext = () => {\n  const context = useContext(CommandContext);\n  if (!context) {\n    throw new Error(\n      \"Command components must be used within a Command provider\"\n    );\n  }\n  return context;\n};\n\n/**\n * GlassCommand component\n * A glassmorphism command palette with search functionality\n */\nexport const GlassCommand: React.FC<GlassCommandProps> = ({\n  items = DEFAULT_COMMAND_ITEMS,\n  placeholder = \"Search commands...\",\n  emptyMessage = \"No commands found\",\n  loading = false,\n  maxHeight = \"300px\",\n  filterItems,\n  groupBy,\n  renderItem,\n  renderEmpty,\n  onSelect,\n  onSearchChange,\n  className,\n  \"aria-label\": ariaLabel,\n  \"data-testid\": dataTestId,\n}) => {\n  const [query, setQuery] = useState(\"\");\n  const [selectedIndex, setSelectedIndex] = useState(0);\n  const [filteredItems, setFilteredItems] = useState(items);\n  const listRef = useRef<HTMLDivElement>(null);\n\n  // Default filter function\n  const defaultFilter = (\n    items: CommandItem[],\n    query: string\n  ): CommandItem[] => {\n    if (!query) return items;\n\n    const lowerQuery = query.toLowerCase();\n    return items.filter((item: any) => {\n      const searchableText = [\n        item?.label,\n        item?.description,\n        ...(item?.keywords || []),\n      ]\n        .join(\" \")\n        .toLowerCase();\n\n      return searchableText.includes(lowerQuery);\n    });\n  };\n\n  // Filter items when query changes\n  useEffect(() => {\n    const filtered = filterItems\n      ? filterItems(items, query)\n      : defaultFilter(items, query);\n    setFilteredItems(filtered);\n    setSelectedIndex(0);\n    onSearchChange?.(query);\n  }, [query, items, filterItems, onSearchChange]);\n\n  // Group items if groupBy is provided\n  const groupedItems = React.useMemo(() => {\n    if (!groupBy) return { \"\": filteredItems };\n\n    const groups: Record<string, CommandItem[]> = {};\n    filteredItems.forEach((item: any) => {\n      const group = groupBy(item);\n      if (!groups[group]) groups[group] = [];\n      groups[group].push(item);\n    });\n\n    return groups;\n  }, [filteredItems, groupBy]);\n\n  // Handle keyboard navigation\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    const totalItems = filteredItems?.length || 0;\n\n    switch (e.key) {\n      case \"ArrowDown\":\n        e.preventDefault();\n        if (totalItems === 0) break;\n        setSelectedIndex((prev: any) => (prev + 1) % totalItems);\n        break;\n      case \"ArrowUp\":\n        e.preventDefault();\n        if (totalItems === 0) break;\n        setSelectedIndex((prev: any) => (prev - 1 + totalItems) % totalItems);\n        break;\n      case \"Enter\":\n        e.preventDefault();\n        if (filteredItems[selectedIndex]) {\n          handleSelect(filteredItems[selectedIndex]);\n        }\n        break;\n      case \"Escape\":\n        e.preventDefault();\n        setQuery(\"\");\n        setSelectedIndex(0);\n        break;\n    }\n  };\n\n  const handleSelect = (item: CommandItem) => {\n    if (item?.disabled) return;\n    item?.action();\n    onSelect?.(item);\n  };\n\n  return (\n    <CommandContext.Provider\n      data-glass-component\n      value={{ selectedIndex, setSelectedIndex, query, setQuery }}\n    >\n      <OptimizedGlass\n        intent=\"neutral\"\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        className={cn(\n          \"glass-radius-lg glass-surface-dark/30 glass-border glass-border-white/10 glass-overflow-hidden\",\n          className\n        )}\n        style={{\n          background:\n            \"var(--glass-primary-level2-surface)\",\n          border: \"1px solid rgba(148, 163, 184, 0.18)\",\n          boxShadow:\n            \"0 18px 44px rgba(2, 6, 23, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n        }}\n        aria-label={ariaLabel}\n        data-testid={dataTestId}\n      >\n        <div className=\"glass-p-3\">\n          {/* Search Input */}\n          <GlassCommandInput\n            placeholder={placeholder}\n            value={query}\n            onChange={(e) => setQuery(e.target.value)}\n            onKeyDown={handleKeyDown}\n            autoFocus\n          />\n\n          {/* Command List */}\n          <GlassCommandList maxHeight={maxHeight}>\n            {loading ? (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-py-8\">\n                <div className=\"glass-w-6 glass-h-6 glass-border-2 glass-border-white/30 glass-border-t-white/60 glass-radius-full glass-animate-spin\" />\n              </div>\n            ) : (filteredItems?.length || 0) === 0 ? (\n              renderEmpty ? (\n                renderEmpty()\n              ) : (\n                <div className=\"glass-text-center glass-py-6 glass-text-secondary\">\n                  {emptyMessage}\n                </div>\n              )\n            ) : (\n              Object.entries(groupedItems).map(([groupName, groupItems]) => (\n                <div key={groupName}>\n                  {groupName && (\n                    <div className=\"glass-px-3 glass-py-2 glass-text-xs glass-font-medium glass-text-secondary glass-border-b glass-border-white/10\">\n                      {groupName}\n                    </div>\n                  )}\n                  {groupItems.map((item, itemIndex) => {\n                    const globalIndex = filteredItems.indexOf(item);\n                    const isSelected = globalIndex === selectedIndex;\n\n                    return (\n                      <div\n                        key={item?.id}\n                        className={cn(\n                          \"glass-flex glass-items-center glass-px-3 glass-py-2 glass-cursor-pointer glass-transition-all glass-duration-200 glass-radius-md\",\n                          \"hover:glass-surface-subtle/10 glass-hover--translate-y-0-5\",\n                          {\n                            \"glass-surface-primary/20 glass-text-primary glass-ring-1 glass-ring-primary\":\n                              isSelected,\n                            \"glass-opacity-50 glass-cursor-not-allowed\":\n                              item?.disabled,\n                          }\n                        )}\n                        onClick={(e) => handleSelect(item)}\n                      >\n                        {renderItem ? (\n                          renderItem(item, isSelected)\n                        ) : (\n                          <>\n                            {item?.icon && (\n                              <div className=\"glass-flex glass-items-center glass-justify-center glass-w-5 glass-h-5 glass-mr-3 glass-text-secondary\">\n                                {item?.icon}\n                              </div>\n                            )}\n                            <div className=\"glass-flex-1 glass-min-w-0\">\n                              <div className=\"glass-text-primary glass-font-medium glass-truncate\">\n                                {item?.label}\n                              </div>\n                              {item?.description && (\n                                <div className=\"glass-text-secondary glass-text-sm glass-truncate\">\n                                  {item?.description}\n                                </div>\n                              )}\n                            </div>\n                          </>\n                        )}\n                      </div>\n                    );\n                  })}\n                </div>\n              ))\n            )}\n          </GlassCommandList>\n        </div>\n      </OptimizedGlass>\n    </CommandContext.Provider>\n  );\n};\n\n/**\n * GlassCommandDialog component\n * A modal dialog containing the command palette\n */\nexport const GlassCommandDialog: React.FC<GlassCommandDialogProps> = ({\n  open,\n  onOpenChange,\n  title = \"Command Palette\",\n  description = \"Search for commands...\",\n  ...commandProps\n}) => {\n  const dialogRef = useRef<HTMLDivElement>(null);\n\n  // Handle escape key\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\" && open) {\n        onOpenChange(false);\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleEscape);\n    return () => document.removeEventListener(\"keydown\", handleEscape);\n  }, [open, onOpenChange]);\n\n  // Handle outside click\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      if (\n        dialogRef.current &&\n        !dialogRef.current.contains(e.target as Node) &&\n        open\n      ) {\n        onOpenChange(false);\n      }\n    };\n\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, [open, onOpenChange]);\n\n  if (!open) return null;\n\n  return (\n    <div className=\"glass-fixed glass-inset-0 glass-z-9999 glass-flex glass-items-center glass-justify-center glass-p-4 glass-surface-dark/50 glass-backdrop-blur-md glass-contrast-guard\">\n      <Motion\n        preset=\"scaleIn\"\n        className=\"glass-w-full glass-max-w-lg\"\n        onAnimationEnd={() => {\n          // Focus first input when animation completes\n          const input = dialogRef.current?.querySelector(\"input\");\n          input?.focus();\n        }}\n      >\n        <div ref={dialogRef}>\n          <GlassCommand {...commandProps} />\n        </div>\n      </Motion>\n    </div>\n  );\n};\n\n/**\n * GlassCommandInput component\n * Search input for the command palette\n */\nexport const GlassCommandInput: React.FC<GlassCommandInputProps> = ({\n  className,\n  ...props\n}) => {\n  // Convert Booleanish ARIA attributes to boolean\n  const inputProps = {\n    ...props,\n    \"aria-required\":\n      props[\"aria-required\"] === \"true\"\n        ? true\n        : props[\"aria-required\"] === \"false\"\n          ? false\n          : props[\"aria-required\"],\n    \"aria-invalid\":\n      typeof props[\"aria-invalid\"] === \"boolean\"\n        ? props[\"aria-invalid\"]\n        : props[\"aria-invalid\"] === \"true\"\n          ? true\n          : props[\"aria-invalid\"] === \"false\"\n            ? false\n            : undefined,\n  };\n\n  return (\n    <div className=\"glass-relative glass-mb-3\">\n      <Search className=\"glass-absolute glass-left-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-w-4 glass-h-4 glass-text-secondary\" />\n      <OptimizedGlass\n        elevation={\"level1\"}\n        intensity=\"subtle\"\n        animation=\"none\"\n        className=\"glass-backdrop-blur-md glass-radius-lg glass-border glass-border-white/10 glass-surface-dark/40 glass-contrast-guard\"\n        style={{\n          background:\n            \"var(--glass-primary-level3-surface)\",\n          border: \"1px solid rgba(148, 163, 184, 0.2)\",\n          boxShadow: \"inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n        }}\n      >\n        <GlassInput\n          {...inputProps}\n          className={cn(\n            \"glass-w-full glass-py-2 glass-bg-transparent glass-border-0 glass-outline-none\",\n            \"glass-text-primary\",\n            className\n          )}\n          style={{\n            paddingLeft: \"2.5rem\",\n            paddingRight: \"1rem\",\n            background: \"transparent\",\n            border: 0,\n            boxShadow: \"none\",\n            ...(inputProps.style || {}),\n          }}\n        />\n      </OptimizedGlass>\n    </div>\n  );\n};\n\n/**\n * GlassCommandList component\n * Scrollable list container for command items\n */\nexport const GlassCommandList: React.FC<GlassCommandListProps> = ({\n  children,\n  maxHeight = \"300px\",\n  className,\n}) => {\n  return (\n    <div\n      className={cn(\"glass-overflow-y-auto\", className)}\n      style={{ maxHeight }}\n    >\n      {children}\n    </div>\n  );\n};\n\n/**\n * Hook for using command palette globally\n */\nexport const useCommandPalette = () => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [items, setItems] = useState<CommandItem[]>([]);\n\n  const openPalette = (commands: CommandItem[]) => {\n    setItems(commands);\n    setIsOpen(true);\n  };\n\n  const closePalette = () => {\n    setIsOpen(false);\n  };\n\n  return {\n    isOpen,\n    items,\n    openPalette,\n    closePalette,\n    setIsOpen,\n  };\n};\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nexport interface CommandItem {\n  /**\n   * Unique identifier\n   */\n  id: string;\n  /**\n   * Display label\n   */\n  label: string;\n  /**\n   * Search keywords\n   */\n  keywords?: string[];\n  /**\n   * Item description\n   */\n  description?: string;\n  /**\n   * Category/group\n   */\n  category?: string;\n  /**\n   * Icon component\n   */\n  icon?: React.ReactNode;\n  /**\n   * Keyboard shortcut\n   */\n  shortcut?: string;\n  /**\n   * Action to execute\n   */\n  action?: () => void;\n  /**\n   * Whether item is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Custom component to render\n   */\n  component?: React.ComponentType<{ item: CommandItem; isSelected: boolean }>;\n}\n\nexport interface CommandGroup {\n  /**\n   * Group identifier\n   */\n  id: string;\n  /**\n   * Group label\n   */\n  label: string;\n  /**\n   * Items in group\n   */\n  items: CommandItem[];\n  /**\n   * Group priority for sorting\n   */\n  priority?: number;\n}\n\nexport interface GlassCommandPaletteProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n  /**\n   * Command items (flat list or grouped)\n   */\n  items?: CommandItem[];\n  /**\n   * Grouped command items\n   */\n  groups?: CommandGroup[];\n  /**\n   * Whether the palette is open\n   */\n  open?: boolean;\n  /**\n   * Callback when open state changes\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Callback when command is selected\n   */\n  onSelect?: (item: CommandItem) => void;\n  /**\n   * Search placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Maximum number of results to show\n   */\n  maxResults?: number;\n  /**\n   * Enable recent commands tracking\n   */\n  enableRecents?: boolean;\n  /**\n   * Recent commands storage key\n   */\n  recentsKey?: string;\n  /**\n   * Maximum number of recent items\n   */\n  maxRecents?: number;\n  /**\n   * Custom filter function\n   */\n  filter?: (item: CommandItem, search: string) => boolean;\n  /**\n   * Custom sort function\n   */\n  sort?: (a: CommandItem, b: CommandItem) => number;\n  /**\n   * Enable fuzzy search\n   */\n  fuzzySearch?: boolean;\n  /**\n   * Show categories\n   */\n  showCategories?: boolean;\n  /**\n   * Show shortcuts\n   */\n  showShortcuts?: boolean;\n  /**\n   * Modal backdrop blur\n   */\n  backdropBlur?: boolean;\n  /**\n   * Close on escape key\n   */\n  closeOnEscape?: boolean;\n  /**\n   * Close on select\n   */\n  closeOnSelect?: boolean;\n  /**\n   * Custom loading state\n   */\n  loading?: boolean;\n  /**\n   * Loading message\n   */\n  loadingMessage?: string;\n  /**\n   * Compact rendering for constrained cards and preview surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Keep the palette bounded inside its parent instead of using a viewport overlay.\n   */\n  contained?: boolean;\n  /**\n   * Positioning strategy for the palette shell.\n   */\n  positionStrategy?: \"fixed\" | \"absolute\" | \"inline\";\n  /**\n   * Render the footer keyboard hints.\n   */\n  showFooter?: boolean;\n  /**\n   * Explicit palette width.\n   */\n  width?: React.CSSProperties[\"width\"];\n  /**\n   * Explicit maximum palette height.\n   */\n  maxHeight?: React.CSSProperties[\"maxHeight\"];\n  className?: string;\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\n/**\n * GlassCommandPalette component\n * Modal command palette with search, keyboard navigation, and glassmorphism styling\n */\nexport const GlassCommandPalette = forwardRef<\n  HTMLDivElement,\n  GlassCommandPaletteProps\n>(\n  (\n    {\n      items = [],\n      groups = [],\n      open = false,\n      onOpenChange,\n      onSelect,\n      placeholder = \"Search commands...\",\n      emptyMessage = \"No commands found\",\n      maxResults = 50,\n      enableRecents = true,\n      recentsKey = \"glass-command-palette-recents\",\n      maxRecents = 5,\n      filter,\n      sort,\n      fuzzySearch = true,\n      showCategories = true,\n      showShortcuts = true,\n      backdropBlur = true,\n      closeOnEscape = true,\n      closeOnSelect = true,\n      loading = false,\n      loadingMessage = \"Loading commands...\",\n      compact = false,\n      contained = false,\n      positionStrategy = \"fixed\",\n      showFooter = true,\n      width,\n      maxHeight,\n      className,\n      style,\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    // State\n    const [search, setSearch] = useState(\"\");\n    const [selectedIndex, setSelectedIndex] = useState(0);\n    const [recentCommands, setRecentCommands] = useState<CommandItem[]>([]);\n\n    // Refs\n    const inputRef = useRef<HTMLInputElement>(null);\n    const listRef = useRef<HTMLDivElement>(null);\n\n    // Load recent commands from localStorage\n    useEffect(() => {\n      if (!enableRecents || typeof window === \"undefined\") return;\n\n      try {\n        const stored = localStorage.getItem(recentsKey);\n        if (stored) {\n          setRecentCommands(JSON.parse(stored));\n        }\n      } catch {\n        setRecentCommands([]);\n      }\n    }, [enableRecents, recentsKey]);\n\n    // Save recent commands to localStorage\n    const saveRecentCommand = (item: CommandItem) => {\n      if (!enableRecents || typeof window === \"undefined\") return;\n\n      try {\n        const newRecents = [\n          item,\n          ...recentCommands.filter((cmd: any) => cmd.id !== item?.id),\n        ].slice(0, maxRecents);\n\n        setRecentCommands(newRecents);\n        localStorage.setItem(recentsKey, JSON.stringify(newRecents));\n      } catch {\n        // Ignore storage failures; recent commands remain active in memory.\n      }\n    };\n\n    // Combine items and groups into flat list\n    const allItems = useMemo(() => {\n      const flatItems = [...items];\n\n      groups.forEach((group: any) => {\n        flatItems.push(\n          ...group.items.map((item: any) => ({\n            ...item,\n            category: item?.category || group.label,\n          }))\n        );\n      });\n\n      return flatItems;\n    }, [items, groups]);\n\n    // Default filter function\n    const defaultFilter = (item: CommandItem, searchTerm: string): boolean => {\n      if (!searchTerm) return true;\n\n      const normalizedSearch = searchTerm.toLowerCase();\n      const label = item?.label.toLowerCase();\n      const description = (item?.description || \"\").toLowerCase();\n      const keywords = (item?.keywords || []).join(\" \").toLowerCase();\n\n      if (fuzzySearch) {\n        // Simple fuzzy search implementation\n        const searchRegex = new RegExp(\n          normalizedSearch.split(\"\").join(\".*\"),\n          \"i\"\n        );\n        return (\n          searchRegex.test(label) ||\n          searchRegex.test(description) ||\n          searchRegex.test(keywords)\n        );\n      } else {\n        return (\n          label.includes(normalizedSearch) ||\n          description.includes(normalizedSearch) ||\n          keywords.includes(normalizedSearch)\n        );\n      }\n    };\n\n    // Filter and sort items\n    const filteredItems = useMemo(() => {\n      let result = allItems;\n\n      // Apply search filter\n      if (search) {\n        result = result.filter((item: any) =>\n          filter ? filter(item, search) : defaultFilter(item, search)\n        );\n      } else if (enableRecents && (recentCommands?.length || 0) > 0) {\n        // Show recent commands when no search\n        result = recentCommands.filter((recent: any) =>\n          allItems.some((item) => item?.id === recent.id)\n        );\n      }\n\n      // Apply custom sort or default priority sort\n      if (sort) {\n        result.sort(sort);\n      } else {\n        // Default sort: exact matches first, then by relevance\n        result.sort((a, b) => {\n          if (search) {\n            const aExact = a.label\n              .toLowerCase()\n              .startsWith(search.toLowerCase())\n              ? 1\n              : 0;\n            const bExact = b.label\n              .toLowerCase()\n              .startsWith(search.toLowerCase())\n              ? 1\n              : 0;\n            if (aExact !== bExact) return bExact - aExact;\n          }\n          return a.label.localeCompare(b.label);\n        });\n      }\n\n      // Limit results\n      return result.slice(0, maxResults);\n    }, [\n      allItems,\n      search,\n      filter,\n      sort,\n      maxResults,\n      fuzzySearch,\n      enableRecents,\n      recentCommands,\n    ]);\n\n    // Group filtered items by category\n    const groupedItems = useMemo(() => {\n      if (!showCategories) return { All: filteredItems };\n\n      const grouped = filteredItems.reduce(\n        (acc, item) => {\n          const category = item?.category || \"Other\";\n          if (!acc[category]) acc[category] = [];\n          acc[category].push(item);\n          return acc;\n        },\n        {} as Record<string, CommandItem[]>\n      );\n\n      return grouped;\n    }, [filteredItems, showCategories]);\n\n    // Handle item selection\n    const handleSelect = (item: CommandItem) => {\n      if (item?.disabled) return;\n\n      // Save to recents\n      saveRecentCommand(item);\n\n      // Execute action\n      item?.action?.();\n      onSelect?.(item);\n\n      // Close palette if configured\n      if (closeOnSelect) {\n        onOpenChange?.(false);\n      }\n\n      // Reset search\n      setSearch(\"\");\n      setSelectedIndex(0);\n    };\n\n    // Handle keyboard navigation\n    const handleKeyDown = (e: React.KeyboardEvent) => {\n      switch (e.key) {\n        case \"Escape\":\n          if (closeOnEscape) {\n            e.preventDefault();\n            onOpenChange?.(false);\n          }\n          break;\n\n        case \"ArrowDown\":\n          e.preventDefault();\n          setSelectedIndex((prev: any) =>\n            prev < (filteredItems?.length || 0) - 1 ? prev + 1 : prev\n          );\n          break;\n\n        case \"ArrowUp\":\n          e.preventDefault();\n          setSelectedIndex((prev: any) => (prev > 0 ? prev - 1 : prev));\n          break;\n\n        case \"Enter\":\n          e.preventDefault();\n          if (filteredItems[selectedIndex]) {\n            handleSelect(filteredItems[selectedIndex]);\n          }\n          break;\n\n        case \"Home\":\n          e.preventDefault();\n          setSelectedIndex(0);\n          break;\n\n        case \"End\":\n          e.preventDefault();\n          setSelectedIndex((filteredItems?.length || 0) - 1);\n          break;\n      }\n    };\n\n    // Reset selection when search changes\n    useEffect(() => {\n      setSelectedIndex(0);\n    }, [search]);\n\n    // Focus input when opened\n    useEffect(() => {\n      if (open && inputRef.current) {\n        inputRef.current.focus();\n      }\n    }, [open]);\n\n    // Scroll selected item into view\n    useEffect(() => {\n      if (selectedIndex >= 0 && listRef.current) {\n        const selectedElement = listRef.current.children?.[\n          selectedIndex\n        ] as HTMLElement;\n        if (\n          selectedElement &&\n          typeof selectedElement.scrollIntoView === \"function\"\n        ) {\n          selectedElement.scrollIntoView({\n            block: \"nearest\",\n            behavior: \"smooth\",\n          });\n        }\n      }\n    }, [selectedIndex]);\n\n    if (!open) return null;\n\n    const isContained =\n      contained || compact || positionStrategy === \"absolute\" || positionStrategy === \"inline\";\n    const rootClassName = isContained\n      ? cn(\n          \"glass-flex glass-items-start glass-justify-center\",\n          positionStrategy === \"absolute\" && \"glass-absolute glass-inset-0 glass-z-10\",\n          positionStrategy === \"inline\" && \"glass-relative glass-z-0\",\n          compact ? \"glass-p-2\" : \"glass-p-4\"\n        )\n      : \"glass-fixed glass-inset-0 glass-z-50 glass-flex glass-items-start glass-justify-center glass-pt-10vh\";\n    const paletteMaxHeight = maxHeight ?? (compact || contained ? 360 : undefined);\n    const paletteWidth = width ?? (compact || contained ? \"100%\" : undefined);\n\n    return (\n      <div\n        data-glass-component\n        className={rootClassName}\n        style={{\n          minHeight: isContained ? undefined : \"100vh\",\n          ...style,\n        }}\n        onClick={(e) => {\n          if (!isContained && e.target === e.currentTarget) {\n            onOpenChange?.(false);\n          }\n        }}\n      >\n        {/* Backdrop */}\n        {!isContained && (\n          <div\n            className={cn(\n              \"absolute inset-0 bg-black/20\",\n              backdropBlur && \"glass-backdrop-blur-md\"\n            )}\n          />\n        )}\n\n        {/* Command Palette */}\n        <Motion\n          preset=\"scaleIn\"\n          duration={200}\n          className={cn(\n            \"glass-relative glass-w-full\",\n            isContained ? \"glass-max-w-full\" : \"glass-max-w-2xl glass-mx-4\"\n          )}\n          style={{ width: paletteWidth }}\n        >\n          <OptimizedGlass\n            ref={ref}\n            intent=\"neutral\"\n            elevation=\"level4\"\n            intensity=\"strong\"\n            depth={3}\n            tint=\"neutral\"\n            border=\"glow\"\n            animation=\"float\"\n            performanceMode=\"high\"\n            className={cn(\n              \"w-full overflow-hidden glass-radius-xl\",\n              isContained ? \"glass-max-h-full\" : \"glass-max-h-80vh\",\n              className\n            )}\n            style={{\n              maxHeight: paletteMaxHeight,\n            }}\n            onKeyDown={handleKeyDown}\n            data-testid={dataTestId}\n            aria-label={ariaLabel || \"Command palette\"}\n            role=\"dialog\"\n            aria-modal={isContained ? undefined : true}\n          >\n            {/* Search Input */}\n            <div className=\"glass-p-4 glass-border-b glass-border-glass-border/10\">\n              <GlassInput\n                ref={inputRef}\n                value={search}\n                onChange={(e) => setSearch(e.target.value)}\n                placeholder={placeholder}\n                size=\"lg\"\n                leftIcon={\n                  <svg\n                    className=\"glass-w-5 glass-h-5\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    viewBox=\"0 0 24 24\"\n                  >\n                    <path\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                      strokeWidth={2}\n                      d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                    />\n                  </svg>\n                }\n                rightIcon={\n                  search && (\n                    <GlassButton\n                      type=\"button\"\n                      className=\"glass-p-1 glass-radius-md hover:glass-surface-subtle glass-transition-colors\"\n                      onClick={(e) => setSearch(\"\")}\n                    >\n                      <svg\n                        className=\"glass-w-4 glass-h-4\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        viewBox=\"0 0 24 24\"\n                      >\n                        <path\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                          strokeWidth={2}\n                          d=\"M6 18L18 6M6 6l12 12\"\n                        />\n                      </svg>\n                    </GlassButton>\n                  )\n                }\n                className=\"glass-border-0 glass-bg-transparent glass-focus-ring-0\"\n              />\n            </div>\n\n            {/* Results */}\n            <div\n              ref={listRef}\n              className={cn(\n                \"glass-overflow-y-auto glass-overscroll-contain\",\n                compact || contained ? \"glass-max-h-64\" : \"glass-max-h-96\"\n              )}\n              role={\n                filteredItems && filteredItems.length > 0 ? \"listbox\" : \"status\"\n              }\n              aria-label={\n                filteredItems && filteredItems.length > 0\n                  ? \"Command results\"\n                  : \"No commands found\"\n              }\n            >\n              {loading ? (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-py-8\">\n                  <div className=\"glass-flex glass-items-center glass-gap-3\">\n                    <div className=\"glass-w-5 glass-h-5 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                    <span className=\"glass-text-secondary\">\n                      {loadingMessage}\n                    </span>\n                  </div>\n                </div>\n              ) : (filteredItems?.length || 0) === 0 ? (\n                <div className=\"glass-py-8 glass-text-center glass-text-secondary\">\n                  {emptyMessage}\n                </div>\n              ) : (\n                Object.entries(groupedItems).map(\n                  ([category, categoryItems]) => (\n                    <div key={category}>\n                      {showCategories &&\n                        Object.keys(groupedItems).length > 1 && (\n                          <div className=\"glass-px-4 glass-py-2 glass-text-xs glass-font-medium glass-text-secondary glass-surface-subtle glass-border-b glass-border-glass-border/5\">\n                            {search ? \"Results\" : category}\n                          </div>\n                        )}\n\n                      {categoryItems.map((item, index) => {\n                        const globalIndex = filteredItems.indexOf(item);\n                        const isSelected = globalIndex === selectedIndex;\n\n                        if (item?.component) {\n                          const Component = item?.component;\n                          return (\n                            <Component\n                              key={item?.id}\n                              item={item}\n                              isSelected={isSelected}\n                            />\n                          );\n                        }\n\n                        return (\n                          <GlassButton\n                            key={item?.id}\n                            type=\"button\"\n                            className={cn(\n                              \"w-full flex items-center glass-gap-3 glass-px-4 glass-py-3 text-left transition-colors\",\n                              \"hover:bg-muted/20 focus:bg-muted/20 focus:outline-none\",\n                              {\n                                \"bg-primary/10 border-l-2 border-primary\":\n                                  isSelected,\n                                \"opacity-50 cursor-not-allowed\": item?.disabled,\n                              }\n                            )}\n                            onClick={(e) => handleSelect(item)}\n                            disabled={item?.disabled}\n                            role=\"option\"\n                            aria-selected={isSelected}\n                          >\n                            {/* Icon */}\n                            {item?.icon && (\n                              <span className=\"glass-flex-shrink-0 glass-text-secondary\">\n                                {item?.icon}\n                              </span>\n                            )}\n\n                            {/* Content */}\n                            <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                              <div className=\"glass-font-medium glass-text-primary\">\n                                {item?.label}\n                              </div>\n                              {item?.description && (\n                                <div className=\"glass-text-sm glass-text-secondary glass-truncate\">\n                                  {item?.description}\n                                </div>\n                              )}\n                            </div>\n\n                            {/* Shortcut */}\n                            {showShortcuts && item?.shortcut && (\n                              <GlassBadge variant=\"secondary\" size=\"sm\">\n                                {item?.shortcut}\n                              </GlassBadge>\n                            )}\n                          </GlassButton>\n                        );\n                      })}\n                    </div>\n                  )\n                )\n              )}\n            </div>\n\n            {/* Footer */}\n            {showFooter && !compact && (filteredItems?.length || 0) > 0 && (\n              <div className=\"glass-px-4 glass-py-2 glass-text-xs glass-text-secondary glass-surface-subtle glass-border-t glass-border-glass-border/5\">\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <span>\n                    {filteredItems?.length || 0}{\" \"}\n                    {(filteredItems?.length || 0) === 1 ? \"result\" : \"results\"}\n                  </span>\n                  <div className=\"glass-flex glass-items-center glass-gap-4\">\n                    <span className=\"glass-flex glass-items-center glass-gap-1\">\n                      <GlassBadge variant=\"secondary\" size=\"sm\">\n                        \u2191\u2193\n                      </GlassBadge>\n                      Navigate\n                    </span>\n                    <span className=\"glass-flex glass-items-center glass-gap-1\">\n                      <GlassBadge variant=\"secondary\" size=\"sm\">\n                        \u21B5\n                      </GlassBadge>\n                      Select\n                    </span>\n                    <span className=\"glass-flex glass-items-center glass-gap-1\">\n                      <GlassBadge variant=\"secondary\" size=\"sm\">\n                        Esc\n                      </GlassBadge>\n                      Close\n                    </span>\n                  </div>\n                </div>\n              </div>\n            )}\n          </OptimizedGlass>\n        </Motion>\n      </div>\n    );\n  }\n);\n\nGlassCommandPalette.displayName = \"GlassCommandPalette\";\n\n// Export types - using different names to avoid conflicts\nexport type {\n  CommandGroup as GlassCommandGroup,\n  CommandItem as GlassCommandItem,\n};\n", "\"use client\";\n\nimport React, { forwardRef, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { LiquidGlassScrollEdge } from \"../../primitives/LiquidGlassScrollEdge\";\n\nexport interface LiquidGlassCommandItem {\n  id: string;\n  label: string;\n  description?: string;\n  group?: string;\n  icon?: React.ReactNode;\n  shortcut?: React.ReactNode;\n  disabled?: boolean;\n  onSelect?: () => void;\n}\n\nexport interface LiquidGlassCommandSurfaceProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  open: boolean;\n  onOpenChange?: (open: boolean) => void;\n  items: LiquidGlassCommandItem[];\n  placeholder?: string;\n}\n\nexport const LiquidGlassCommandSurface = forwardRef<\n  HTMLDivElement,\n  LiquidGlassCommandSurfaceProps\n>(\n  (\n    {\n      open,\n      onOpenChange,\n      items,\n      placeholder = \"Search commands\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [query, setQuery] = useState(\"\");\n    const [selectedIndex, setSelectedIndex] = useState(0);\n    const listRef = useRef<HTMLDivElement>(null);\n    const filtered = useMemo(\n      () =>\n        items.filter((item) =>\n          item.label.toLowerCase().includes(query.toLowerCase())\n        ),\n      [items, query]\n    );\n\n    if (!open) return null;\n\n    return (\n      <div className=\"glass-fixed glass-inset-0 glass-z-1200 glass-grid glass-place-items-start glass-overflow-y-auto glass-px-4 glass-py-16 sm:glass-px-6 sm:glass-py-24\">\n        <button\n          type=\"button\"\n          aria-label=\"Close command surface\"\n          data-glass-overlay=\"true\"\n          className=\"glass-absolute glass-inset-0 glass-bg-black/20\"\n          onClick={() => onOpenChange?.(false)}\n        />\n        <LiquidGlassMaterial\n          ref={ref}\n          material=\"liquid\"\n          radius=\"2xl\"\n          className={cn(\n            \"liquid-glass-command-surface glass-relative glass-z-10 glass-mx-auto glass-w-full glass-max-w-2xl glass-overflow-hidden\",\n            className\n          )}\n          {...props}\n        >\n          <input\n            value={query}\n            onChange={(event) => setQuery(event.target.value)}\n            onKeyDown={(event) => {\n              if (event.key === \"Escape\") onOpenChange?.(false);\n              if (event.key === \"ArrowDown\")\n                setSelectedIndex((index) =>\n                  Math.min(index + 1, filtered.length - 1)\n                );\n              if (event.key === \"ArrowUp\")\n                setSelectedIndex((index) => Math.max(index - 1, 0));\n              if (event.key === \"Enter\") filtered[selectedIndex]?.onSelect?.();\n            }}\n            role=\"combobox\"\n            aria-expanded\n            placeholder={placeholder}\n            className=\"glass-w-full glass-bg-transparent glass-p-4 glass-outline-none\"\n          />\n          <div\n            ref={listRef}\n            role=\"listbox\"\n            className=\"glass-relative glass-max-h-[min(24rem,calc(100vh-12rem))] glass-overflow-y-auto glass-p-2\"\n            data-liquid-glass-scroll-target\n          >\n            <LiquidGlassScrollEdge\n              edge=\"top\"\n              styleMode=\"soft\"\n              targetRef={listRef}\n            />\n            {filtered.map((item, index) => (\n              <button\n                key={item.id}\n                type=\"button\"\n                role=\"option\"\n                aria-selected={index === selectedIndex}\n                disabled={item.disabled}\n                className={cn(\n                  \"glass-flex glass-w-full glass-min-w-0 glass-items-center glass-gap-3 glass-radius-lg glass-px-3 glass-py-2 glass-text-left\",\n                  index === selectedIndex && \"glass-surface-primary\"\n                )}\n                onMouseEnter={() => setSelectedIndex(index)}\n                onClick={item.onSelect}\n              >\n                {item.icon}\n                <span className=\"glass-min-w-0 glass-flex-1\">\n                  <span className=\"glass-block glass-truncate\">\n                    {item.label}\n                  </span>\n                  {item.description && (\n                    <span className=\"glass-block glass-truncate glass-text-xs glass-text-secondary\">\n                      {item.description}\n                    </span>\n                  )}\n                </span>\n                {item.shortcut && (\n                  <span className=\"glass-shrink-0 glass-text-xs glass-text-secondary\">\n                    {item.shortcut}\n                  </span>\n                )}\n              </button>\n            ))}\n          </div>\n        </LiquidGlassMaterial>\n      </div>\n    );\n  }\n);\n\nLiquidGlassCommandSurface.displayName = \"LiquidGlassCommandSurface\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassControlGroup } from \"../input/LiquidGlassControlGroup\";\n\nexport interface LiquidGlassMapControl {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  disabled?: boolean;\n  onClick?: () => void;\n}\n\nexport interface LiquidGlassMapControlsProps extends React.HTMLAttributes<HTMLDivElement> {\n  controls: LiquidGlassMapControl[];\n  placement?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n  materialVariant?: \"regular\" | \"clear\";\n}\n\nexport const LiquidGlassMapControls = forwardRef<HTMLDivElement, LiquidGlassMapControlsProps>(\n  ({ controls, placement = \"top-right\", materialVariant = \"clear\", className, ...props }, ref) => (\n    <div\n      ref={ref}\n      className={cn(\"liquid-glass-map-controls glass-absolute glass-z-30\", className)}\n      data-liquid-glass-map-controls=\"true\"\n      data-placement={placement}\n      {...props}\n    >\n      <LiquidGlassControlGroup orientation=\"vertical\" materialVariant={materialVariant} aria-label=\"Map controls\">\n        {controls.map((control) => (\n          <button\n            key={control.id}\n            type=\"button\"\n            disabled={control.disabled}\n            aria-label={control.label}\n            className=\"glass-radius-full glass-p-2\"\n            onClick={control.onClick}\n          >\n            {control.icon ?? control.label}\n          </button>\n        ))}\n      </LiquidGlassControlGroup>\n    </div>\n  )\n);\n\nLiquidGlassMapControls.displayName = \"LiquidGlassMapControls\";\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\n\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface Comment {\n  id: string;\n  author: string;\n  text: string;\n  createdAt?: string;\n  replies?: Comment[];\n}\n\nexport interface GlassCommentThreadProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  comments: Comment[];\n  onReply?: (parentId: string, text: string) => void;\n}\n\nexport function GlassCommentThread({\n  comments,\n  onReply,\n  className,\n  ...props\n}: GlassCommentThreadProps) {\n  const [drafts, setDrafts] = React.useState<Record<string, string>>({});\n  const setDraft = (id: string, v: string) =>\n    setDrafts((d) => ({ ...d, [id]: v }));\n\n  const render = (c: Comment, depth = 0) => (\n    <div key={c.id} className={cn(\"glass-gap-2\")}>\n      <OptimizedGlass\n        elevation={\"level1\"}\n        className={cn(\n          \"glass-radius-lg glass-p-3 glass-border glass-border-white-15\"\n        )}\n      >\n        <div\n          className={cn(\n            \"glass-text-sm glass-text-primary-90 glass-font-medium\"\n          )}\n        >\n          {c.author}\n        </div>\n        <div\n          className={cn(\n            \"glass-text-sm glass-text-primary-80 glass-whitespace-pre-wrap\"\n          )}\n        >\n          {c.text}\n        </div>\n        {c.createdAt && (\n          <div className={cn(\"glass-text-xs glass-text-primary-60 glass-mt-1\")}>\n            {c.createdAt}\n          </div>\n        )}\n      </OptimizedGlass>\n      <div className={cn(\"glass-ml-6\")}>\n        <div className={cn(\"glass-flex glass-gap-2 glass-items-center\")}>\n          <input\n            value={drafts[c.id] ?? \"\"}\n            onChange={(e) => setDraft(c.id, e.target.value)}\n            placeholder=\"Reply\u2026\"\n            className={cn(\n              \"glass-flex-1 glass-bg-transparent glass-border glass-border-white-20 glass-radius-lg glass-px-2 glass-py-1 glass-text-sm glass-outline-none glass-focus glass-touch-target glass-contrast-guard\"\n            )}\n          />\n          <GlassButton\n            size=\"sm\"\n            variant=\"secondary\"\n            onClick={(e) => {\n              if (onReply && drafts[c.id]) {\n                onReply(c.id, drafts[c.id]);\n                setDraft(c.id, \"\");\n              }\n            }}\n          >\n            Reply\n          </GlassButton>\n        </div>\n        {c.replies?.length ? (\n          <div className={cn(\"glass-mt-2 glass-gap-2\")}>\n            {(c.replies || []).map((r: any) => render(r, depth + 1))}\n          </div>\n        ) : null}\n      </div>\n    </div>\n  );\n\n  return (\n    <div className={cn(\"glass-gap-3\", className)} {...props}>\n      {(comments || []).map((c: any) => render(c))}\n    </div>\n  );\n}\n\nexport default GlassCommentThread;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { GripVertical, Move } from \"@/icons\";\nimport React, {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion } from \"../../primitives\";\n\nexport interface DragData {\n  id: string;\n  type: string;\n  data?: unknown;\n}\n\nexport interface GlassDraggableProps {\n  /**\n   * Unique identifier for the draggable item\n   */\n  id: string;\n  /**\n   * Drag type/category\n   */\n  type: string;\n  /**\n   * Additional data to pass during drag\n   */\n  data?: unknown;\n  /**\n   * Drag handle element\n   */\n  handle?: React.ReactNode;\n  /**\n   * Children to render\n   */\n  children: React.ReactNode;\n  /**\n   * Enable dragging\n   */\n  disabled?: boolean;\n  /**\n   * Drag start handler\n   */\n  onDragStart?: (data: DragData) => void;\n  /**\n   * Drag end handler\n   */\n  onDragEnd?: (data: DragData) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n// Drag Context\ninterface DragContextType {\n  draggedItem: DragData | null;\n  isDragging: boolean;\n  dragOffset: { x: number; y: number };\n  setDraggedItem: (item: DragData | null) => void;\n  setIsDragging: (dragging: boolean) => void;\n  setDragOffset: (offset: { x: number; y: number }) => void;\n}\n\nconst DragContext = createContext<DragContextType | null>(null);\n\nexport const useDragContext = () => {\n  const context = useContext(DragContext);\n  if (!context) {\n    return {\n      isDragging: false,\n      dragOffset: { x: 0, y: 0 },\n      setIsDragging: () => {},\n      setDragOffset: () => {},\n    };\n  }\n  return context;\n};\n\n/**\n * GlassDraggable component\n * Makes an element draggable with visual feedback\n */\nexport const GlassDraggable: React.FC<GlassDraggableProps> = ({\n  id,\n  type,\n  data,\n  handle,\n  children,\n  disabled = false,\n  onDragStart,\n  onDragEnd,\n  className,\n  ...props\n}) => {\n  const [isDragging, setIsDragging] = useState(false);\n  const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n  const dragRef = useRef<HTMLDivElement>(null);\n  const dragStartPos = useRef({ x: 0, y: 0 });\n  const elementStartPos = useRef({ x: 0, y: 0 });\n\n  const dragData: DragData = { id, type, data };\n\n  // Handle mouse down\n  const handleMouseDown = useCallback(\n    (e: React.MouseEvent) => {\n      if (disabled) return;\n\n      e.preventDefault();\n      const rect = dragRef.current?.getBoundingClientRect();\n      if (!rect) return;\n\n      dragStartPos.current = { x: e.clientX, y: e.clientY };\n      elementStartPos.current = { x: rect.left, y: rect.top };\n\n      setIsDragging(true);\n      setDragOffset({ x: 0, y: 0 });\n\n      onDragStart?.(dragData);\n\n      // Add global event listeners\n      document.addEventListener(\"mousemove\", handleMouseMove);\n      document.addEventListener(\"mouseup\", handleMouseUp);\n    },\n    [disabled, dragData, onDragStart]\n  );\n\n  // Handle mouse move\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (!isDragging) return;\n\n      const deltaX = e.clientX - dragStartPos.current.x;\n      const deltaY = e.clientY - dragStartPos.current.y;\n\n      setDragOffset({ x: deltaX, y: deltaY });\n    },\n    [isDragging]\n  );\n\n  // Handle mouse up\n  const handleMouseUp = useCallback(() => {\n    if (!isDragging) return;\n\n    setIsDragging(false);\n    setDragOffset({ x: 0, y: 0 });\n\n    onDragEnd?.(dragData);\n\n    // Remove global event listeners\n    document.removeEventListener(\"mousemove\", handleMouseMove);\n    document.removeEventListener(\"mouseup\", handleMouseUp);\n  }, [isDragging, dragData, onDragEnd]);\n\n  // Clean up event listeners\n  useEffect(() => {\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n    };\n  }, [handleMouseMove, handleMouseUp]);\n\n  // Default drag handle\n  const defaultHandle = handle || (\n    <div className=\"glass-flex glass-items-center glass-justify-center glass-w-6 glass-h-6 glass-text-primary-glass-opacity-60 hover:glass-text-primary glass-cursor-grab glass-active-cursor-grabbing\">\n      <GripVertical className=\"glass-w-4 glass-h-4\" />\n    </div>\n  );\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"fadeIn\"\n      className={cn(\n        \"relative cursor-grab glass-active-cursor-grabbing select-none\",\n        isDragging && \"z-50\",\n        disabled && \"cursor-not-allowed opacity-50\",\n        className\n      )}\n      style={{\n        ...(isDragging\n          ? {\n              transform: `translate(${dragOffset.x}px, ${dragOffset.y}px)`,\n              zIndex: 50,\n            }\n          : undefined),\n      }}\n      ref={dragRef}\n      onMouseDown={handleMouseDown}\n      {...props}\n    >\n      {/* Drag Handle */}\n      <div className=\"glass-absolute glass-top-2 glass-right-2 glass-z-10\">\n        {defaultHandle}\n      </div>\n\n      {/* Content */}\n      <div\n        className={cn(\n          \"transition-all duration-200\",\n          isDragging && \"shadow-2xl scale-105 rotate-2\"\n        )}\n      >\n        {children}\n      </div>\n\n      {/* Drag Preview (ghost image) */}\n      {isDragging && (\n        <div\n          className=\"glass-fixed glass-pointer-events-none glass-z-40 glass-opacity-50\"\n          style={{\n            left: elementStartPos.current.x,\n            top: elementStartPos.current.y,\n            transform: `translate(${dragOffset.x}px, ${dragOffset.y}px)`,\n          }}\n        >\n          <div className=\"glass-scale-95\">{children}</div>\n        </div>\n      )}\n    </Motion>\n  );\n};\n\n/**\n * GlassDroppable component\n * Drop zone that accepts draggable items\n */\nexport interface GlassDroppableProps {\n  /**\n   * Unique identifier for the drop zone\n   */\n  id: string;\n  /**\n   * Accepted drag types\n   */\n  accept?: string[];\n  /**\n   * Children to render\n   */\n  children: React.ReactNode;\n  /**\n   * Disable dropping\n   */\n  disabled?: boolean;\n  /**\n   * Drop handler\n   */\n  onDrop?: (data: DragData, dropZoneId: string) => void;\n  /**\n   * Drag over handler\n   */\n  onDragOver?: (data: DragData, dropZoneId: string) => void;\n  /**\n   * Drag leave handler\n   */\n  onDragLeave?: (data: DragData, dropZoneId: string) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nexport const GlassDroppable: React.FC<GlassDroppableProps> = ({\n  id,\n  accept = [],\n  children,\n  disabled = false,\n  onDrop,\n  onDragOver,\n  onDragLeave,\n  className,\n  ...props\n}) => {\n  const [isOver, setIsOver] = useState(false);\n  const [isValidDrop, setIsValidDrop] = useState(false);\n  const dropRef = useRef<HTMLDivElement>(null);\n\n  // Handle drag over\n  const handleDragOver = useCallback(\n    (e: React.DragEvent) => {\n      e.preventDefault();\n      if (disabled) return;\n\n      const dragData = JSON.parse(\n        e.dataTransfer.getData(\"application/json\")\n      ) as DragData;\n      const isAccepted =\n        (accept?.length || 0) === 0 || accept.includes(dragData.type);\n\n      setIsOver(true);\n      setIsValidDrop(isAccepted);\n\n      if (isAccepted) {\n        onDragOver?.(dragData, id);\n      }\n    },\n    [disabled, accept, onDragOver, id]\n  );\n\n  // Handle drag leave\n  const handleDragLeave = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n\n    // Only trigger leave if we're actually leaving the drop zone\n    const rect = dropRef.current?.getBoundingClientRect();\n    if (rect) {\n      const { clientX, clientY } = e;\n      if (\n        clientX < rect.left ||\n        clientX > rect.right ||\n        clientY < rect.top ||\n        clientY > rect.bottom\n      ) {\n        setIsOver(false);\n        setIsValidDrop(false);\n      }\n    }\n  }, []);\n\n  // Handle drop\n  const handleDrop = useCallback(\n    (e: React.DragEvent) => {\n      e.preventDefault();\n      if (disabled) return;\n\n      const dragData = JSON.parse(\n        e.dataTransfer.getData(\"application/json\")\n      ) as DragData;\n      const isAccepted =\n        (accept?.length || 0) === 0 || accept.includes(dragData.type);\n\n      setIsOver(false);\n      setIsValidDrop(false);\n\n      if (isAccepted) {\n        onDrop?.(dragData, id);\n      }\n    },\n    [disabled, accept, onDrop, id]\n  );\n\n  return (\n    <div\n      ref={dropRef}\n      className={cn(\n        \"relative transition-all duration-200\",\n        isOver && isValidDrop && \"ring-2 ring-primary ring-opacity-50\",\n        isOver && !isValidDrop && \"ring-2 ring-red-500 ring-opacity-50\",\n        disabled && \"opacity-50 pointer-events-none\",\n        className\n      )}\n      onDragOver={handleDragOver}\n      onDragLeave={handleDragLeave}\n      onDrop={handleDrop}\n      {...props}\n    >\n      {/* Drop Indicator */}\n      {isOver && (\n        <div\n          className={cn(\n            \"absolute inset-0 border-2 border-dashed glass-radius-lg flex items-center justify-center\",\n            isValidDrop\n              ? \"border-primary bg-primary/10\"\n              : \"border-red-500 bg-red-500/10\"\n          )}\n        >\n          <div className=\"glass-text-center\">\n            <Move\n              className={cn(\n                \"w-8 h-8 mx-auto glass-mb-2\",\n                isValidDrop ? \"text-primary\" : \"text-red-500\"\n              )}\n            />\n            <p\n              className={cn(\n                \"glass-text-sm font-medium\",\n                isValidDrop ? \"text-primary\" : \"text-red-500\"\n              )}\n            >\n              {isValidDrop ? \"Drop here\" : \"Cannot drop here\"}\n            </p>\n          </div>\n        </div>\n      )}\n\n      {children}\n    </div>\n  );\n};\n\n/**\n * GlassSortable component\n * Sortable list with drag-and-drop reordering\n */\nexport interface SortableItem {\n  id: string;\n  content: React.ReactNode;\n  data?: unknown;\n}\n\nexport interface GlassSortableProps {\n  /**\n   * Items to sort\n   */\n  items: SortableItem[];\n  /**\n   * Sort direction\n   */\n  direction?: \"vertical\" | \"horizontal\";\n  /**\n   * Item change handler\n   */\n  onChange?: (items: SortableItem[]) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\nexport const GlassSortable: React.FC<GlassSortableProps> = ({\n  items,\n  direction = \"vertical\",\n  onChange,\n  className,\n  ...props\n}) => {\n  const [draggedIndex, setDraggedIndex] = useState<number | null>(null);\n  const [dragOverIndex, setDragOverIndex] = useState<number | null>(null);\n\n  // Handle drag start\n  const handleDragStart = useCallback((index: number) => {\n    setDraggedIndex(index);\n  }, []);\n\n  // Handle drag over\n  const handleDragOver = useCallback((e: React.DragEvent, index: number) => {\n    e.preventDefault();\n    setDragOverIndex(index);\n  }, []);\n\n  // Handle drop\n  const handleDrop = useCallback(\n    (e: React.DragEvent, dropIndex: number) => {\n      e.preventDefault();\n\n      if (draggedIndex === null || draggedIndex === dropIndex) {\n        setDraggedIndex(null);\n        setDragOverIndex(null);\n        return;\n      }\n\n      const newItems = [...items];\n      const [draggedItem] = newItems.splice(draggedIndex, 1);\n      newItems.splice(dropIndex, 0, draggedItem);\n\n      onChange?.(newItems);\n      setDraggedIndex(null);\n      setDragOverIndex(null);\n    },\n    [draggedIndex, items, onChange]\n  );\n\n  // Handle drag end\n  const handleDragEnd = useCallback(() => {\n    setDraggedIndex(null);\n    setDragOverIndex(null);\n  }, []);\n\n  return (\n    <div\n      className={cn(\n        \"glass-gap-2\",\n        direction === \"horizontal\" && \"flex space-y-0 glass-gap-2\",\n        className\n      )}\n      {...props}\n    >\n      {items.map((item, index) => (\n        <div\n          key={item?.id}\n          draggable\n          onDragStart={() => handleDragStart(index)}\n          onDragOver={(e) => handleDragOver(e, index)}\n          onDrop={(e) => handleDrop(e, index)}\n          onDragEnd={handleDragEnd}\n          className={cn(\n            \"relative cursor-move transition-all duration-200\",\n            draggedIndex === index && \"opacity-50 scale-95\",\n            dragOverIndex === index && \"ring-2 ring-primary ring-opacity-50\"\n          )}\n        >\n          {/* Drag Handle */}\n          <div className=\"glass-absolute glass-top-2 glass-right-2 glass-z-10\">\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-w-6 glass-h-6 glass-text-primary-glass-opacity-60 hover:glass-text-primary glass-cursor-grab glass-active-cursor-grabbing glass-surface-dark/20 glass-radius-md\">\n              <Move className=\"glass-w-4 glass-h-4\" />\n            </div>\n          </div>\n\n          {/* Content */}\n          <div className={cn(dragOverIndex === index && \"scale-105\")}>\n            {item?.content}\n          </div>\n\n          {/* Drop Indicator */}\n          {dragOverIndex === index && draggedIndex !== index && (\n            <div\n              className={cn(\n                \"absolute inset-0 border-2 border-dashed border-primary glass-radius-lg pointer-events-none\",\n                direction === \"vertical\"\n                  ? \"border-t-0 border-b-0\"\n                  : \"border-l-0 border-r-0\"\n              )}\n            />\n          )}\n        </div>\n      ))}\n    </div>\n  );\n};\n\n/**\n * DragProvider component\n * Provides drag context for advanced drag-and-drop scenarios\n */\nexport interface DragProviderProps {\n  children: React.ReactNode;\n  onDragStart?: (data: DragData) => void;\n  onDragEnd?: (data: DragData) => void;\n}\n\nexport const DragProvider: React.FC<DragProviderProps> = ({\n  children,\n  onDragStart,\n  onDragEnd,\n}) => {\n  const [draggedItem, setDraggedItem] = useState<DragData | null>(null);\n  const [isDragging, setIsDragging] = useState(false);\n  const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n  const contextValue: DragContextType = {\n    draggedItem,\n    isDragging,\n    dragOffset,\n    setDraggedItem: (item) => {\n      setDraggedItem(item);\n      onDragStart?.(item!);\n    },\n    setIsDragging,\n    setDragOffset,\n  };\n\n  return (\n    <DragContext.Provider value={contextValue}>{children}</DragContext.Provider>\n  );\n};\n\nexport default GlassDraggable;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  ChevronDown,\n  ChevronRight,\n  Filter,\n  Search,\n  SlidersHorizontal,\n  Tag,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassCheckbox } from \"../input/GlassCheckbox\";\nimport { GlassDateRangePicker } from \"../input/GlassDateRangePicker\";\nimport type { DateRange } from \"../input/GlassDateRangePicker\";\nimport { GlassInput } from \"../input/GlassInput\";\nimport { GlassSlider } from \"../input/GlassSlider\";\n\nexport type FacetScalarValue = string | number | boolean;\nexport type FacetRangeValue = number | number[];\nexport type FacetValue =\n  | FacetScalarValue\n  | string[]\n  | FacetRangeValue\n  | DateRange\n  | null\n  | undefined;\nexport type FacetValuesState = Record<string, FacetValue>;\nexport type SearchResultMetadata = Record<string, unknown>;\n\nexport interface Facet {\n  id: string;\n  label: string;\n  type: \"checkbox\" | \"range\" | \"select\" | \"daterange\";\n  options?: FacetOption[];\n  min?: number;\n  max?: number;\n  step?: number;\n  collapsed?: boolean;\n  showCount?: boolean;\n}\n\nexport interface FacetOption {\n  id: string;\n  label: string;\n  value: string;\n  count?: number;\n  selected?: boolean;\n  disabled?: boolean;\n}\n\nexport interface SearchResult {\n  id: string;\n  title: string;\n  description?: string;\n  category?: string;\n  tags?: string[];\n  score?: number;\n  metadata?: SearchResultMetadata;\n}\n\nexport interface GlassFacetSearchProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"results\"> {\n  query?: string;\n  onQueryChange?: (query: string) => void;\n  facets?: Facet[];\n  facetValues?: FacetValuesState;\n  onFacetChange?: (facetId: string, value: FacetValue) => void;\n  results?: SearchResult[];\n  onResultSelect?: (result: SearchResult) => void;\n  placeholder?: string;\n  loading?: boolean;\n  showFilters?: boolean;\n  showResults?: boolean;\n  maxResults?: number;\n  className?: string;\n  onSearch?: (query: string, filters: FacetValuesState) => void;\n  suggestions?: string[];\n  onSuggestionSelect?: (suggestion: string) => void;\n  recentSearches?: string[];\n  onRecentSearchSelect?: (search: string) => void;\n  variant?: \"default\" | \"compact\" | \"minimal\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  elevation?: \"low\" | \"medium\" | \"high\";\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\nconst createExpandedFacetState = (facets: Facet[]): Record<string, boolean> =>\n  Object.fromEntries(facets.map((facet) => [facet.id, !facet.collapsed]));\n\nconst createClearedFacetValues = (facets: Facet[]): FacetValuesState =>\n  Object.fromEntries(\n    facets.map((facet) => [facet.id, facet.type === \"checkbox\" ? [] : null])\n  );\n\nconst isActiveFacetValue = (value: FacetValue): boolean => {\n  if (Array.isArray(value)) {\n    return value.length > 0;\n  }\n\n  return value !== null && value !== undefined;\n};\n\nconst toCheckboxValues = (value: FacetValue): string[] =>\n  Array.isArray(value)\n    ? value.filter((item): item is string => typeof item === \"string\")\n    : [];\n\nconst toSliderValue = (\n  value: FacetValue,\n  fallback: number\n): number | number[] =>\n  typeof value === \"number\" ||\n  (Array.isArray(value) &&\n    value.every((item): item is number => typeof item === \"number\"))\n    ? value\n    : [fallback];\n\nconst isDateRange = (value: FacetValue): value is DateRange =>\n  typeof value === \"object\" &&\n  value !== null &&\n  !Array.isArray(value) &&\n  \"from\" in value &&\n  \"to\" in value;\n\nconst GlassFacetSearch = React.forwardRef<\n  HTMLDivElement,\n  GlassFacetSearchProps\n>(\n  (\n    {\n      query = \"\",\n      onQueryChange = () => {},\n      facets = [],\n      facetValues = {},\n      onFacetChange = () => {},\n      results = [],\n      onResultSelect,\n      placeholder = \"Search...\",\n      loading = false,\n      showFilters = true,\n      showResults = true,\n      maxResults = 10,\n      className,\n      onSearch,\n      suggestions = [],\n      onSuggestionSelect,\n      recentSearches = [],\n      onRecentSearchSelect,\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"medium\",\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [showSuggestions, setShowSuggestions] = useState(false);\n    const [expandedFacets, setExpandedFacets] = useState<\n      Record<string, boolean>\n    >(createExpandedFacetState(facets));\n    const [showFacetPanel, setShowFacetPanel] = useState(\n      showFilters && variant !== \"default\"\n    );\n\n    const handleQueryChange = useCallback(\n      (e: React.ChangeEvent<HTMLInputElement>) => {\n        const newQuery = e.target.value;\n        onQueryChange(newQuery);\n        setShowSuggestions(true);\n      },\n      [onQueryChange]\n    );\n\n    const handleSearch = useCallback(() => {\n      onSearch?.(query, facetValues);\n      setShowSuggestions(false);\n    }, [query, facetValues, onSearch]);\n\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent) => {\n        if (e.key === \"Enter\") {\n          handleSearch();\n        } else if (e.key === \"Escape\") {\n          setShowSuggestions(false);\n        }\n      },\n      [handleSearch]\n    );\n\n    const handleFacetToggle = useCallback((facetId: string) => {\n      setExpandedFacets((prev) => ({\n        ...prev,\n        [facetId]: !prev[facetId],\n      }));\n    }, []);\n\n    const handleFacetChange = useCallback(\n      (facetId: string, value: FacetValue) => {\n        onFacetChange(facetId, value);\n        // Auto-search when facets change\n        setTimeout(\n          () => onSearch?.(query, { ...facetValues, [facetId]: value }),\n          300\n        );\n      },\n      [onFacetChange, onSearch, query, facetValues]\n    );\n\n    const clearFilters = useCallback(() => {\n      const clearedValues = createClearedFacetValues(facets);\n      Object.keys(clearedValues).forEach((facetId) => {\n        onFacetChange(facetId, clearedValues[facetId]);\n      });\n      onSearch?.(query, clearedValues);\n    }, [facets, onFacetChange, onSearch, query]);\n\n    const hasActiveFilters = useMemo(() => {\n      return Object.values(facetValues).some(isActiveFacetValue);\n    }, [facetValues]);\n\n    const displayedResults = useMemo(() => {\n      return results.slice(0, maxResults);\n    }, [results, maxResults]);\n\n    const sizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-p-6\",\n      compact: \"glass-p-4\",\n      minimal: \"glass-p-2\",\n    };\n\n    const elevationClasses = {\n      low: \"glass-backdrop-blur-md glass-surface-dark/20 glass-border glass-border-white/10\",\n      medium:\n        \"glass-backdrop-blur-md glass-surface-dark/30 glass-border glass-border-white/12 glass-shadow-lg\",\n      high: \"glass-backdrop-blur-md glass-surface-dark/40 glass-border glass-border-white/20 glass-shadow-2xl\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-radius-xl\",\n          \"glass-max-h-full glass-min-w-0 glass-overflow-auto\",\n          elevationClasses[elevation],\n          variantClasses[variant],\n          sizeClasses[size],\n          className\n        )}\n        data-testid={dataTestId}\n        aria-label={ariaLabel || \"Faceted search\"}\n        role=\"search\"\n        style={{ maxWidth: \"100%\", boxSizing: \"border-box\", minWidth: 0 }}\n        {...props}\n      >\n        {/* Search Input */}\n        <div className=\"glass-relative glass-mb-4\">\n          <GlassInput\n            value={query}\n            onChange={handleQueryChange}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            className=\"glass-w-full glass-pr-12\"\n            leftIcon={<Search className=\"glass-w-4 glass-h-4\" />}\n          />\n          <div className=\"glass-absolute glass-right-3 glass-top-1/2 glass--translate-y-1-2 glass-flex glass-items-center glass-gap-2\">\n            {loading && (\n              <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-white/30 glass-border-t-white glass-radius-full glass-animate-spin\" />\n            )}\n            {query && (\n              <button\n                onClick={(e) => onQueryChange(\"\")}\n                className=\"glass-text-primary-opacity-70 hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                aria-label=\"Clear search\"\n              >\n                <X className=\"glass-w-4 glass-h-4\" />\n              </button>\n            )}\n            {showFilters && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={(e) => setShowFacetPanel(!showFacetPanel)}\n                className={cn(\n                  \"glass-transition\",\n                  hasActiveFilters && \"glass-text-primary\"\n                )}\n                aria-label=\"Toggle filters\"\n                aria-pressed={showFacetPanel}\n              >\n                <SlidersHorizontal className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            )}\n          </div>\n\n          {/* Suggestions Dropdown */}\n          <AnimatePresence>\n            {showSuggestions &&\n              (suggestions.length > 0 || recentSearches.length > 0) && (\n                <motion.div\n                  initial={{ opacity: 0, y: -10 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n                  exit={{ opacity: 0, y: -10 }}\n                  className=\"glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-1 glass-z-10 glass-max-h-60 glass-overflow-y-auto\"\n                >\n                  <OptimizedGlass\n                    elevation={\"level2\"}\n                    className=\"glass-radius-lg glass-overflow-hidden glass-shadow-lg\"\n                  >\n                    {suggestions.length > 0 && (\n                      <div className=\"glass-p-2\">\n                        <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-px-2 glass-py-1\">\n                          Suggestions\n                        </div>\n                        {suggestions.map((suggestion, index) => (\n                          <button\n                            key={index}\n                            onClick={(e) => {\n                              onSuggestionSelect?.(suggestion);\n                              onQueryChange(suggestion);\n                              setShowSuggestions(false);\n                            }}\n                            className=\"glass-w-full glass-text-left glass-px-2 glass-py-1 glass-text-sm glass-text-primary hover:glass-surface-subtle/10 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                          >\n                            {suggestion}\n                          </button>\n                        ))}\n                      </div>\n                    )}\n\n                    {recentSearches.length > 0 && (\n                      <div className=\"glass-p-2 glass-border-t glass-border-white/10\">\n                        <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-px-2 glass-py-1\">\n                          Recent Searches\n                        </div>\n                        {recentSearches.map((search, index) => (\n                          <button\n                            key={index}\n                            onClick={(e) => {\n                              onRecentSearchSelect?.(search);\n                              onQueryChange(search);\n                              setShowSuggestions(false);\n                            }}\n                            className=\"glass-w-full glass-text-left glass-px-2 glass-py-1 glass-text-sm glass-text-primary hover:glass-surface-subtle/10 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                          >\n                            {search}\n                          </button>\n                        ))}\n                      </div>\n                    )}\n                  </OptimizedGlass>\n                </motion.div>\n              )}\n          </AnimatePresence>\n        </div>\n\n        {/* Facet Panel */}\n        <AnimatePresence>\n          {showFacetPanel && showFilters && (\n            <motion.div\n              initial={{ opacity: 0, height: 0 }}\n              animate={\n                prefersReducedMotion ? {} : { opacity: 1, height: \"auto\" }\n              }\n              exit={{ opacity: 0, height: 0 }}\n              className=\"glass-mb-4 glass-border glass-border-white/10 glass-surface-dark/20 glass-radius-lg glass-overflow-hidden\"\n            >\n              <div className=\"glass-p-3\">\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3 glass-gap-2\">\n                  <h3 className=\"glass-font-semibold glass-text-primary glass-flex glass-items-center glass-gap-2\">\n                    <Filter className=\"glass-w-4 glass-h-4\" />\n                    Filters\n                  </h3>\n                  {hasActiveFilters && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={clearFilters}\n                      className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                    >\n                      Clear All\n                    </GlassButton>\n                  )}\n                </div>\n\n                <div className=\"glass-auto-gap glass-auto-gap-sm\">\n                  {facets.map((facet) => (\n                    <FacetGroup\n                      key={facet.id}\n                      facet={facet}\n                      value={facetValues[facet.id]}\n                      onChange={(value) => handleFacetChange(facet.id, value)}\n                      expanded={expandedFacets[facet.id]}\n                      onToggle={() => handleFacetToggle(facet.id)}\n                    />\n                  ))}\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Results */}\n        {showResults && (loading || displayedResults.length > 0 || query) && (\n          <div className=\"glass-auto-gap glass-auto-gap-sm\">\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <h3 className=\"glass-text-base glass-font-semibold glass-text-primary\">\n                Results {results.length > 0 && `(${results.length})`}\n              </h3>\n              {results.length > maxResults && (\n                <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n                  Showing {maxResults} of {results.length}\n                </span>\n              )}\n            </div>\n\n            <AnimatePresence>\n              {loading ? (\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"glass-flex glass-items-center glass-justify-center glass-py-8\"\n                >\n                  <div className=\"glass-w-6 glass-h-6 glass-border-2 glass-border-white/30 glass-border-t-white glass-radius-full glass-animate-spin\" />\n                </motion.div>\n              ) : displayedResults.length > 0 ? (\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"glass-auto-gap glass-auto-gap-sm\"\n                >\n                  {displayedResults.map((result, index) => (\n                    <motion.div\n                      key={result.id}\n                      initial={{ opacity: 0, x: -20 }}\n                      animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n                      transition={\n                        prefersReducedMotion\n                          ? { duration: 0 }\n                          : { duration: 0.3 }\n                      }\n                      className=\"glass-p-3 glass-surface-dark/20 hover:glass-surface-dark/30 glass-radius-lg glass-cursor-pointer glass-transition-all glass-duration-200 glass-border glass-border-white/10 hover:glass-border-white/20\"\n                      onClick={(e) => onResultSelect?.(result)}\n                    >\n                      <div className=\"glass-flex glass-items-start glass-justify-between\">\n                        <div className=\"glass-flex-1\">\n                          <h4 className=\"glass-font-medium glass-text-primary\">\n                            {result.title}\n                          </h4>\n                          {result.description && (\n                            <p className=\"glass-text-sm glass-text-primary-opacity-70 glass-mt-1\">\n                              {result.description}\n                            </p>\n                          )}\n                          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mt-2\">\n                            {result.category && (\n                              <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle/10 glass-text-primary-glass-opacity-80 glass-radius-md\">\n                                {result.category}\n                              </span>\n                            )}\n                            {result.tags &&\n                              result.tags.map((tag, tagIndex) => (\n                                <span\n                                  key={tagIndex}\n                                  className=\"glass-flex glass-items-center glass-gap-1 glass-px-2 glass-py-1 glass-text-xs glass-surface-blue/20 glass-text-secondary glass-radius-md\"\n                                >\n                                  <Tag className=\"glass-w-3 glass-h-3\" />\n                                  {tag}\n                                </span>\n                              ))}\n                          </div>\n                        </div>\n                        {result.score && (\n                          <div className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                            {Math.round(result.score * 100)}%\n                          </div>\n                        )}\n                      </div>\n                    </motion.div>\n                  ))}\n                </motion.div>\n              ) : query ? (\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"glass-text-center glass-py-8 glass-text-primary-opacity-70\"\n                >\n                  No results found for \"{query}\"\n                </motion.div>\n              ) : (\n                <motion.div\n                  initial={{ opacity: 0 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1 }}\n                  exit={{ opacity: 0 }}\n                  className=\"glass-text-center glass-py-8 glass-text-primary-opacity-70\"\n                >\n                  Start typing to search...\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassFacetSearch.displayName = \"GlassFacetSearch\";\n\n// Facet Group Component\ninterface FacetGroupProps {\n  facet: Facet;\n  value: FacetValue;\n  onChange: (value: FacetValue) => void;\n  expanded: boolean;\n  onToggle: () => void;\n}\n\nconst FacetGroup: React.FC<FacetGroupProps> = ({\n  facet,\n  value,\n  onChange,\n  expanded,\n  onToggle,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  return (\n    <div className=\"glass-border glass-border-white/10 glass-surface-dark/20 glass-radius-lg glass-overflow-hidden\">\n      <button\n        onClick={onToggle}\n        className=\"glass-w-full glass-flex glass-items-center glass-justify-between glass-gap-2 glass-p-2 glass-text-left hover:glass-surface-subtle/5 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n      >\n        <span\n          className=\"glass-font-medium\"\n          style={{ color: \"rgba(255, 255, 255, 0.95)\" }}\n        >\n          {facet.label}\n        </span>\n        {expanded ? (\n          <ChevronDown className=\"glass-w-4 glass-h-4 glass-text-primary-opacity-70\" />\n        ) : (\n          <ChevronRight className=\"glass-w-4 glass-h-4 glass-text-primary-opacity-70\" />\n        )}\n      </button>\n\n      <AnimatePresence>\n        {expanded && (\n          <motion.div\n            initial={{ opacity: 0, height: 0 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, height: \"auto\" }}\n            exit={{ opacity: 0, height: 0 }}\n            className=\"glass-px-3 glass-pb-3\"\n          >\n            <FacetContent facet={facet} value={value} onChange={onChange} />\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\n// Facet Content Component\ninterface FacetContentProps {\n  facet: Facet;\n  value: FacetValue;\n  onChange: (value: FacetValue) => void;\n}\n\nconst FacetContent: React.FC<FacetContentProps> = ({\n  facet,\n  value,\n  onChange,\n}) => {\n  switch (facet.type) {\n    case \"checkbox\":\n      return (\n        <div className=\"glass-auto-gap glass-auto-gap-sm\">\n          {facet.options?.map((option) => (\n            <div\n              key={option.id}\n              className=\"glass-flex glass-items-center glass-justify-between\"\n            >\n              <GlassCheckbox\n                id={option.id}\n                checked={toCheckboxValues(value).includes(option.value)}\n                onCheckedChange={(checked) => {\n                  const currentValues = toCheckboxValues(value);\n                  const newValues = checked\n                    ? [...currentValues, option.value]\n                    : currentValues.filter(\n                        (currentValue) => currentValue !== option.value\n                      );\n                  onChange(newValues);\n                }}\n                disabled={option.disabled}\n                label={option.label}\n              />\n              {facet.showCount && option.count != null && (\n                <span className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                  ({option.count})\n                </span>\n              )}\n            </div>\n          ))}\n        </div>\n      );\n\n    case \"range\":\n      return (\n        <div className=\"glass-auto-gap glass-auto-gap-md\">\n          <GlassSlider\n            min={facet.min || 0}\n            max={facet.max || 100}\n            step={facet.step || 1}\n            value={toSliderValue(value, facet.min || 0)}\n            onValueChange={onChange}\n            className=\"glass-w-full\"\n          />\n          <div className=\"glass-flex glass-justify-between glass-text-sm glass-text-primary-opacity-70\">\n            <span>{facet.min || 0}</span>\n            <span>{facet.max || 100}</span>\n          </div>\n        </div>\n      );\n\n    case \"select\":\n      return (\n        <div className=\"glass-auto-gap glass-auto-gap-sm\">\n          {facet.options?.map((option) => (\n            <GlassCheckbox\n              key={option.id}\n              id={option.id}\n              checked={value === option.value}\n              onCheckedChange={(checked) => {\n                onChange(checked ? option.value : null);\n              }}\n              disabled={option.disabled}\n              label={option.label}\n            />\n          ))}\n        </div>\n      );\n\n    case \"daterange\":\n      return (\n        <GlassDateRangePicker\n          value={isDateRange(value) ? value : undefined}\n          onChange={onChange}\n          placeholder=\"Select date range\"\n        />\n      );\n\n    default:\n      return null;\n  }\n};\n\nexport { GlassFacetSearch };\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  Archive,\n  ArrowUp,\n  Check,\n  Code,\n  FileText,\n  Folder,\n  Grid,\n  Home,\n  Image,\n  List,\n  MoreVertical,\n  Music,\n  Plus,\n  RefreshCw,\n  Search,\n  Upload,\n  Video,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\nimport {\n  GlassBreadcrumb,\n  GlassBreadcrumbItem,\n} from \"../navigation/GlassBreadcrumb\";\n\nexport interface FileItem {\n  id: string;\n  name: string;\n  type: \"file\" | \"folder\";\n  size?: number;\n  modifiedAt: Date;\n  createdAt: Date;\n  extension?: string;\n  mimeType?: string;\n  thumbnail?: string;\n  permissions?: string;\n  owner?: string;\n  path: string;\n  parentId?: string;\n  children?: FileItem[];\n  isLoading?: boolean;\n}\n\nexport interface GlassFileExplorerProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n  currentPath?: string;\n  files?: FileItem[];\n  onNavigate?: (path: string) => void;\n  onFileSelect?: (file: FileItem) => void;\n  onFileOpen?: (file: FileItem) => void;\n  onFileDelete?: (fileId: string) => void;\n  onFileRename?: (fileId: string, newName: string) => void;\n  onFileMove?: (fileId: string, newPath: string) => void;\n  onFileCopy?: (fileId: string, newPath: string) => void;\n  onFolderCreate?: (parentPath: string, name: string) => void;\n  onFileUpload?: (files: FileList, path: string) => void;\n  onRefresh?: () => void;\n  selectedFiles?: string[];\n  onSelectionChange?: (fileIds: string[]) => void;\n  loading?: boolean;\n  viewMode?: \"list\" | \"grid\";\n  onViewModeChange?: (mode: \"list\" | \"grid\") => void;\n  showHiddenFiles?: boolean;\n  onShowHiddenFilesChange?: (show: boolean) => void;\n  searchQuery?: string;\n  onSearchChange?: (query: string) => void;\n  className?: string;\n  showToolbar?: boolean;\n  showBreadcrumb?: boolean;\n  showSearch?: boolean;\n  allowMultiSelect?: boolean;\n  allowDragDrop?: boolean;\n  variant?: \"default\" | \"compact\" | \"minimal\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  elevation?: \"low\" | \"medium\" | \"high\";\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\nconst GlassFileExplorer = React.forwardRef<\n  HTMLDivElement,\n  GlassFileExplorerProps\n>(\n  (\n    {\n      currentPath = \"/\",\n      files = [],\n      onNavigate = () => {},\n      onFileSelect,\n      onFileOpen,\n      onFileDelete,\n      onFileRename,\n      onFileMove,\n      onFileCopy,\n      onFolderCreate,\n      onFileUpload,\n      onRefresh,\n      selectedFiles = [],\n      onSelectionChange,\n      loading = false,\n      viewMode = \"list\",\n      onViewModeChange,\n      showHiddenFiles = false,\n      onShowHiddenFilesChange,\n      searchQuery = \"\",\n      onSearchChange,\n      className,\n      showToolbar = true,\n      showBreadcrumb = true,\n      showSearch = true,\n      allowMultiSelect = true,\n      allowDragDrop = true,\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"medium\",\n      \"data-testid\": dataTestId,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [draggedItem, setDraggedItem] = useState<FileItem | null>(null);\n    const [dragOverItem, setDragOverItem] = useState<string | null>(null);\n    const [renamingFile, setRenamingFile] = useState<string | null>(null);\n    const [newName, setNewName] = useState(\"\");\n    const [creatingFolder, setCreatingFolder] = useState(false);\n    const [newFolderName, setNewFolderName] = useState(\"\");\n    const fileInputRef = useRef<HTMLInputElement>(null);\n\n    const pathSegments = useMemo(() => {\n      return currentPath.split(\"/\").filter(Boolean);\n    }, [currentPath]);\n\n    const filteredFiles = useMemo(() => {\n      let filtered = files;\n\n      // Filter by search query\n      if (searchQuery) {\n        filtered = filtered.filter((file: any) =>\n          file.name.toLowerCase().includes(searchQuery.toLowerCase())\n        );\n      }\n\n      // Filter hidden files\n      if (!showHiddenFiles) {\n        filtered = filtered.filter((file: any) => !file.name.startsWith(\".\"));\n      }\n\n      return filtered;\n    }, [files, searchQuery, showHiddenFiles]);\n\n    const sortedFiles = useMemo(() => {\n      return [...filteredFiles].sort((a, b) => {\n        // Folders first, then files\n        if (a.type !== b.type) {\n          return a.type === \"folder\" ? -1 : 1;\n        }\n        // Alphabetical sort\n        return a.name.localeCompare(b.name);\n      });\n    }, [filteredFiles]);\n\n    const handleFileClick = useCallback(\n      (file: FileItem, event: React.MouseEvent) => {\n        if (renamingFile === file.id) return;\n\n        if (allowMultiSelect && (event.ctrlKey || event.metaKey)) {\n          // Multi-select\n          const newSelection = selectedFiles.includes(file.id)\n            ? selectedFiles.filter((id: any) => id !== file.id)\n            : [...selectedFiles, file.id];\n          onSelectionChange?.(newSelection);\n        } else if (\n          allowMultiSelect &&\n          event.shiftKey &&\n          selectedFiles.length > 0\n        ) {\n          // Range select\n          const currentIndex = sortedFiles.findIndex(\n            (f) => f.id === selectedFiles[0]\n          );\n          const targetIndex = sortedFiles.findIndex((f) => f.id === file.id);\n          const startIndex = Math.min(currentIndex, targetIndex);\n          const endIndex = Math.max(currentIndex, targetIndex);\n          const rangeSelection = sortedFiles\n            .slice(startIndex, endIndex + 1)\n            .map((f: any) => f.id);\n          onSelectionChange?.(rangeSelection);\n        } else {\n          // Single select\n          onSelectionChange?.([file.id]);\n          onFileSelect?.(file);\n\n          if (file.type === \"folder\") {\n            onNavigate(file.path);\n          } else {\n            onFileOpen?.(file);\n          }\n        }\n      },\n      [\n        renamingFile,\n        allowMultiSelect,\n        selectedFiles,\n        onSelectionChange,\n        onFileSelect,\n        onNavigate,\n        onFileOpen,\n        sortedFiles,\n      ]\n    );\n\n    const handleBreadcrumbClick = useCallback(\n      (segmentIndex: number) => {\n        const newPath = \"/\" + pathSegments.slice(0, segmentIndex + 1).join(\"/\");\n        onNavigate(newPath);\n      },\n      [pathSegments, onNavigate]\n    );\n\n    const handleContextMenuAction = useCallback(\n      (action: string, file: FileItem) => {\n        switch (action) {\n          case \"open\":\n            if (file.type === \"folder\") {\n              onNavigate(file.path);\n            } else {\n              onFileOpen?.(file);\n            }\n            break;\n          case \"rename\":\n            setRenamingFile(file.id);\n            setNewName(file.name);\n            break;\n          case \"delete\":\n            onFileDelete?.(file.id);\n            break;\n          case \"download\":\n            // Handle download\n            break;\n        }\n      },\n      [onNavigate, onFileOpen, onFileDelete]\n    );\n\n    const handleRenameSubmit = useCallback(() => {\n      if (renamingFile && newName.trim()) {\n        onFileRename?.(renamingFile, newName.trim());\n        setRenamingFile(null);\n        setNewName(\"\");\n      }\n    }, [renamingFile, newName, onFileRename]);\n\n    const handleCreateFolder = useCallback(() => {\n      if (newFolderName.trim()) {\n        onFolderCreate?.(currentPath, newFolderName.trim());\n        setCreatingFolder(false);\n        setNewFolderName(\"\");\n      }\n    }, [newFolderName, currentPath, onFolderCreate]);\n\n    const handleFileUpload = useCallback(\n      (event: React.ChangeEvent<HTMLInputElement>) => {\n        const fileList = event.target.files;\n        if (fileList && fileList.length > 0) {\n          onFileUpload?.(fileList, currentPath);\n        }\n        // Reset input\n        if (fileInputRef.current) {\n          fileInputRef.current.value = \"\";\n        }\n      },\n      [currentPath, onFileUpload]\n    );\n\n    const handleDragStart = useCallback(\n      (event: React.DragEvent, file: FileItem) => {\n        if (!allowDragDrop) return;\n        setDraggedItem(file);\n\n        // Create a lightweight glass ghost for drag image\n        const ghost = document.createElement(\"div\");\n        ghost.className =\n          \"glass-pointer-events-none glass-px-3 glass-py-1.5 glass-radius-lg glass-surface-dark/40 glass-ring-1 glass-ring-white-opacity-10 glass-text-primary glass-text-sm glass-backdrop-blur-md glass-shadow-xl glass-contrast-guard\";\n        ghost.textContent = file.name;\n        document.body.appendChild(ghost);\n        event.dataTransfer.setDragImage(ghost, 10, 10);\n        // Remove ghost after drag starts (browser clones the node)\n        setTimeout(() => ghost.remove(), 0);\n      },\n      [allowDragDrop]\n    );\n\n    const handleDragOver = useCallback(\n      (event: React.DragEvent, fileId?: string) => {\n        if (allowDragDrop) {\n          event.preventDefault();\n          setDragOverItem(fileId || null);\n        }\n      },\n      [allowDragDrop]\n    );\n\n    const handleDrop = useCallback(\n      (event: React.DragEvent, targetFile?: FileItem) => {\n        if (allowDragDrop && draggedItem && targetFile?.type === \"folder\") {\n          event.preventDefault();\n          onFileMove?.(draggedItem.id, targetFile.path);\n          setDraggedItem(null);\n          setDragOverItem(null);\n        }\n      },\n      [allowDragDrop, draggedItem, onFileMove]\n    );\n\n    const getFileIcon = useCallback((file: FileItem) => {\n      if (file.type === \"folder\") {\n        return <Folder className=\"glass-w-5 glass-h-5 glass-text-primary\" />;\n      }\n\n      const ext = file.extension?.toLowerCase();\n      switch (ext) {\n        case \"jpg\":\n        case \"jpeg\":\n        case \"png\":\n        case \"gif\":\n        case \"webp\":\n          return <Image className=\"glass-w-5 glass-h-5 glass-text-primary\" />;\n        case \"mp4\":\n        case \"avi\":\n        case \"mov\":\n        case \"mkv\":\n          return <Video className=\"glass-w-5 glass-h-5 glass-text-primary\" />;\n        case \"mp3\":\n        case \"wav\":\n        case \"flac\":\n          return <Music className=\"glass-w-5 glass-h-5 glass-text-pink\" />;\n        case \"zip\":\n        case \"rar\":\n        case \"7z\":\n          return <Archive className=\"glass-w-5 glass-h-5 glass-text-primary\" />;\n        case \"js\":\n        case \"ts\":\n        case \"jsx\":\n        case \"tsx\":\n        case \"py\":\n        case \"java\":\n        case \"cpp\":\n        case \"c\":\n        case \"php\":\n        case \"html\":\n        case \"css\":\n          return <Code className=\"glass-w-5 glass-h-5 glass-text-primary\" />;\n        default:\n          return (\n            <FileText className=\"glass-w-5 glass-h-5 glass-text-secondary\" />\n          );\n      }\n    }, []);\n\n    const formatFileSize = useCallback((bytes?: number) => {\n      if (!bytes) return \"\";\n      const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n      const i = Math.floor(Math.log(bytes) / Math.log(1024));\n      return (\n        Math.round((bytes / Math.pow(1024, i)) * 100) / 100 + \" \" + sizes[i]\n      );\n    }, []);\n\n    const formatDate = useCallback((date: Date) => {\n      return (\n        date.toLocaleDateString() +\n        \" \" +\n        date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })\n      );\n    }, []);\n\n    const sizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-p-6\",\n      compact: \"glass-p-4\",\n      minimal: \"glass-p-2\",\n    };\n\n    const elevationClasses = {\n      low: \"glass-backdrop-blur-md glass-surface-dark/20 glass-border glass-border-white/10\",\n      medium:\n        \"glass-backdrop-blur-md glass-surface-dark/30 glass-border glass-border-white/10 glass-shadow-lg\",\n      high: \"glass-backdrop-blur-md glass-surface-dark/40 glass-border glass-border-white/20 glass-shadow-2xl\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-radius-xl glass-max-w-full glass-min-w-0 glass-overflow-auto\",\n          elevationClasses[elevation],\n          variantClasses[variant],\n          sizeClasses[size],\n          className\n        )}\n        data-glass-component\n        data-testid={dataTestId}\n        style={{ maxHeight: \"100%\", minWidth: 0 }}\n        aria-label={ariaLabel || \"File explorer\"}\n        role=\"region\"\n        {...props}\n      >\n        {/* Toolbar */}\n        {showToolbar && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4 glass-pb-4 glass-border-b glass-border-white/20\">\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={(e) => onNavigate(\"/\")}\n                disabled={currentPath === \"/\"}\n                className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                aria-label=\"Navigate to root\"\n              >\n                <Home className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={(e) => {\n                  const parentPath =\n                    currentPath.split(\"/\").slice(0, -1).join(\"/\") || \"/\";\n                  onNavigate(parentPath);\n                }}\n                disabled={currentPath === \"/\"}\n                className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                aria-label=\"Navigate up\"\n              >\n                <ArrowUp className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={onRefresh}\n                className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                aria-label=\"Refresh\"\n              >\n                <RefreshCw className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              {onFolderCreate && (\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setCreatingFolder(true)}\n                  className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                >\n                  <Plus className=\"glass-w-4 glass-h-4 glass-mr-1\" />\n                  New Folder\n                </GlassButton>\n              )}\n\n              {onFileUpload && (\n                <>\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => fileInputRef.current?.click()}\n                    className=\"glass-text-primary-opacity-70 hover:glass-text-primary\"\n                  >\n                    <Upload className=\"glass-w-4 glass-h-4 glass-mr-1\" />\n                    Upload\n                  </GlassButton>\n                  <input\n                    ref={fileInputRef}\n                    type=\"file\"\n                    multiple\n                    onChange={handleFileUpload}\n                    className=\"glass-hidden glass-touch-target glass-contrast-guard\"\n                  />\n                </>\n              )}\n\n              <div className=\"glass-flex glass-items-center glass-border glass-border-white/20 glass-radius-lg\">\n                <GlassButton\n                  variant={viewMode === \"list\" ? \"secondary\" : \"ghost\"}\n                  size=\"sm\"\n                  onClick={(e) => onViewModeChange?.(\"list\")}\n                  className=\"glass-radius-r-none glass-border-r glass-border-white/20\"\n                  aria-label=\"List view\"\n                  aria-pressed={viewMode === \"list\"}\n                >\n                  <List className=\"glass-w-4 glass-h-4\" />\n                </GlassButton>\n                <GlassButton\n                  variant={viewMode === \"grid\" ? \"secondary\" : \"ghost\"}\n                  size=\"sm\"\n                  onClick={(e) => onViewModeChange?.(\"grid\")}\n                  className=\"glass-radius-l-none\"\n                  aria-label=\"Grid view\"\n                  aria-pressed={viewMode === \"grid\"}\n                >\n                  <Grid className=\"glass-w-4 glass-h-4\" />\n                </GlassButton>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Breadcrumb */}\n        {showBreadcrumb && (\n          <div className=\"glass-mb-4\">\n            <GlassBreadcrumb>\n              <GlassBreadcrumbItem>\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => onNavigate(\"/\")}\n                >\n                  Root\n                </GlassButton>\n              </GlassBreadcrumbItem>\n              {pathSegments.map((segment, index) => (\n                <GlassBreadcrumbItem key={segment}>\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => handleBreadcrumbClick(index)}\n                  >\n                    {segment}\n                  </GlassButton>\n                </GlassBreadcrumbItem>\n              ))}\n            </GlassBreadcrumb>\n          </div>\n        )}\n\n        {/* Search */}\n        {showSearch && (\n          <div className=\"glass-mb-4\">\n            <GlassInput\n              placeholder=\"Search files...\"\n              value={searchQuery}\n              onChange={(e) => onSearchChange?.(e.target.value)}\n              leftIcon={<Search className=\"glass-w-4 glass-h-4\" />}\n            />\n          </div>\n        )}\n\n        {/* File List/Grid */}\n        <div className=\"glass-flex-1 glass-overflow-auto\">\n          {loading ? (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-py-8\">\n              <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-white/30 glass-border-t-white glass-radius-full glass-animate-spin\" />\n            </div>\n          ) : (\n            <div\n              className={cn(\n                viewMode === \"grid\"\n                  ? \"glass-grid glass-grid-cols-2 sm:glass-grid-cols-3 md:glass-grid-cols-4 lg:glass-grid-cols-6 glass-gap-4\"\n                  : \"glass-gap-1\"\n              )}\n            >\n              <AnimatePresence>\n                {sortedFiles.map((file) => (\n                  <motion.div\n                    key={file.id}\n                    initial={{ opacity: 0, scale: 0.95 }}\n                    animate={\n                      prefersReducedMotion ? {} : { opacity: 1, scale: 1 }\n                    }\n                    exit={{ opacity: 0, scale: 0.95 }}\n                    className={cn(\n                      \"glass-relative glass-group\",\n                      selectedFiles.includes(file.id) &&\n                        \"glass-ring-2 glass-ring-blue-400\",\n                      dragOverItem === file.id &&\n                        \"glass-ring-2 glass-ring-green-400\"\n                    )}\n                  >\n                    <div className=\"glass-relative\">\n                      <OptimizedGlass\n                        elevation={\"level1\"}\n                        interactive\n                        className={cn(\n                          \"glass-cursor-pointer glass-radius-lg glass-transition-all glass-duration-200\",\n                          viewMode === \"grid\"\n                            ? \"glass-p-3\"\n                            : \"glass-flex glass-items-center glass-gap-3 glass-p-3\",\n                          selectedFiles.includes(file.id) &&\n                            \"ring-1 ring-blue-400/40\",\n                          draggedItem?.id === file.id &&\n                            \"glass-lift scale-[1.02] ring-1 ring-white/15 shadow-xl\",\n                          dragOverItem === file.id && \"glass-pulse-ring\"\n                        )}\n                        onClick={(e: React.MouseEvent) =>\n                          handleFileClick(file, e)\n                        }\n                        draggable={allowDragDrop}\n                        onDragStart={(e: React.DragEvent) =>\n                          handleDragStart(e, file)\n                        }\n                        onDragOver={(e: React.DragEvent) =>\n                          handleDragOver(e, file.id)\n                        }\n                        onDragEnd={() => {\n                          setDraggedItem(null);\n                          setDragOverItem(null);\n                        }}\n                        onDrop={(e: React.DragEvent) => handleDrop(e, file)}\n                      >\n                        {viewMode === \"grid\" ? (\n                          <div className=\"glass-flex glass-flex-col glass-items-center glass-text-center\">\n                            {file.thumbnail ? (\n                              <img\n                                src={file.thumbnail}\n                                alt={file.name}\n                                className=\"glass-w-12 glass-h-12 glass-object-cover glass-radius-md glass-mb-2\"\n                              />\n                            ) : (\n                              <div className=\"glass-w-12 glass-h-12 glass-flex glass-items-center glass-justify-center glass-mb-2\">\n                                {getFileIcon(file)}\n                              </div>\n                            )}\n                            <div className=\"glass-text-sm glass-text-primary glass-font-medium glass-truncate glass-w-full\">\n                              {file.name}\n                            </div>\n                            {file.type === \"file\" && file.size && (\n                              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                                {formatFileSize(file.size)}\n                              </div>\n                            )}\n                          </div>\n                        ) : (\n                          <>\n                            <div className=\"glass-flex-shrink-0\">\n                              {file.thumbnail ? (\n                                <img\n                                  src={file.thumbnail}\n                                  alt={file.name}\n                                  className=\"glass-w-8 glass-h-8 glass-object-cover glass-radius-md\"\n                                />\n                              ) : (\n                                getFileIcon(file)\n                              )}\n                            </div>\n\n                            <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                              {renamingFile === file.id ? (\n                                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                                  <GlassInput\n                                    value={newName}\n                                    onChange={(e) => setNewName(e.target.value)}\n                                    onKeyDown={(e) => {\n                                      if (e.key === \"Enter\")\n                                        handleRenameSubmit();\n                                      if (e.key === \"Escape\")\n                                        setRenamingFile(null);\n                                    }}\n                                    autoFocus\n                                    className=\"glass-flex-1 glass-pulse-ring\"\n                                  />\n                                  <GlassButton\n                                    variant=\"ghost\"\n                                    size=\"sm\"\n                                    onClick={handleRenameSubmit}\n                                    aria-label=\"Confirm rename\"\n                                  >\n                                    <Check className=\"glass-w-4 glass-h-4\" />\n                                  </GlassButton>\n                                  <GlassButton\n                                    variant=\"ghost\"\n                                    size=\"sm\"\n                                    onClick={(e) => setRenamingFile(null)}\n                                    aria-label=\"Cancel rename\"\n                                  >\n                                    <X className=\"glass-w-4 glass-h-4\" />\n                                  </GlassButton>\n                                </div>\n                              ) : (\n                                <div className=\"glass-font-medium glass-text-primary glass-truncate\">\n                                  {file.name}\n                                </div>\n                              )}\n                              <div className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                                {file.type === \"file\"\n                                  ? formatFileSize(file.size)\n                                  : \"Folder\"}\n                                {file.modifiedAt &&\n                                  ` \u2022 ${formatDate(file.modifiedAt)}`}\n                              </div>\n                            </div>\n                          </>\n                        )}\n                      </OptimizedGlass>\n\n                      {/* Simple context menu button */}\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        className=\"glass-absolute glass-top-2 glass-right-2 glass-w-6 glass-h-6 glass-p-0 glass-opacity-0 glass-group-glass-hover-opacity-100 hover:glass-surface-subtle/20\"\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          // Simple action - could be expanded to show a menu\n                          handleContextMenuAction(\"open\", file);\n                        }}\n                        aria-label={`More options for ${file.name}`}\n                      >\n                        <MoreVertical className=\"glass-w-3 glass-h-3\" />\n                      </GlassButton>\n                    </div>\n                  </motion.div>\n                ))}\n              </AnimatePresence>\n            </div>\n          )}\n        </div>\n\n        {/* Create Folder Dialog */}\n        {creatingFolder && (\n          <div className=\"glass-fixed glass-inset-0 glass-surface-dark/50 glass-backdrop-blur-md glass-z-50 glass-flex glass-items-center glass-justify-center glass-contrast-guard\">\n            <OptimizedGlass\n              elevation={\"level2\"}\n              className=\"glass-radius-lg glass-p-6 glass-max-w-md glass-w-full glass-mx-4\"\n            >\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">\n                Create New Folder\n              </h3>\n              <GlassInput\n                placeholder=\"Folder name...\"\n                value={newFolderName}\n                onChange={(e) => setNewFolderName(e.target.value)}\n                onKeyDown={(e) => e.key === \"Enter\" && handleCreateFolder()}\n                className=\"glass-mb-4\"\n                autoFocus\n              />\n              <div className=\"glass-flex glass-gap-2\">\n                <GlassButton\n                  variant=\"ghost\"\n                  onClick={(e) => setCreatingFolder(false)}\n                  className=\"glass-flex-1\"\n                >\n                  Cancel\n                </GlassButton>\n                <GlassButton\n                  variant=\"primary\"\n                  onClick={handleCreateFolder}\n                  disabled={!newFolderName.trim()}\n                  className=\"glass-flex-1\"\n                >\n                  Create\n                </GlassButton>\n              </div>\n            </OptimizedGlass>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassFileExplorer.displayName = \"GlassFileExplorer\";\n\nexport { GlassFileExplorer };\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  Archive,\n  Check,\n  ChevronDown,\n  ChevronRight,\n  Code,\n  FileText,\n  Folder,\n  FolderOpen,\n  Image,\n  MoreVertical,\n  Music,\n  Search,\n  Video,\n  X,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nexport interface TreeNode {\n  id: string;\n  name: string;\n  type: \"file\" | \"folder\";\n  path: string;\n  size?: number;\n  modifiedAt?: Date;\n  extension?: string;\n  children?: TreeNode[];\n  isExpanded?: boolean;\n  isLoading?: boolean;\n  canExpand?: boolean;\n  level: number;\n}\n\nexport interface GlassFileTreeProps {\n  nodes?: TreeNode[];\n  onNodeSelect?: (node: TreeNode) => void;\n  onNodeToggle?: (nodeId: string, expanded: boolean) => void;\n  onNodeCreate?: (\n    parentId: string,\n    name: string,\n    type: \"file\" | \"folder\"\n  ) => void;\n  onNodeDelete?: (nodeId: string) => void;\n  onNodeRename?: (nodeId: string, newName: string) => void;\n  onNodeMove?: (nodeId: string, newParentId: string) => void;\n  onNodeCopy?: (nodeId: string, newParentId: string) => void;\n  selectedNodeId?: string;\n  expandedNodes?: string[];\n  onExpandedChange?: (expandedNodes: string[]) => void;\n  searchQuery?: string;\n  onSearchChange?: (query: string) => void;\n  showIcons?: boolean;\n  showSize?: boolean;\n  showModified?: boolean;\n  allowCreate?: boolean;\n  allowDelete?: boolean;\n  allowRename?: boolean;\n  allowMove?: boolean;\n  allowCopy?: boolean;\n  className?: string;\n  maxHeight?: string | number;\n  virtualize?: boolean;\n  variant?: \"default\" | \"compact\" | \"minimal\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  elevation?: \"low\" | \"medium\" | \"high\";\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n}\n\nconst EMPTY_TREE_NODES: TreeNode[] = [];\nconst EMPTY_EXPANDED_NODES: string[] = [];\n\nconst GlassFileTree = React.forwardRef<HTMLDivElement, GlassFileTreeProps>(\n  (\n    {\n      nodes = EMPTY_TREE_NODES,\n      onNodeSelect,\n      onNodeToggle,\n      onNodeCreate,\n      onNodeDelete,\n      onNodeRename,\n      onNodeMove,\n      onNodeCopy,\n      selectedNodeId,\n      expandedNodes = EMPTY_EXPANDED_NODES,\n      onExpandedChange,\n      searchQuery = \"\",\n      onSearchChange,\n      showIcons = true,\n      showSize = false,\n      showModified = false,\n      allowCreate = false,\n      allowDelete = false,\n      allowRename = false,\n      allowMove = false,\n      allowCopy = false,\n      className,\n      maxHeight = \"400px\",\n      virtualize = false,\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"medium\",\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const [renamingNode, setRenamingNode] = useState<string | null>(null);\n    const [newName, setNewName] = useState(\"\");\n    const [creatingNode, setCreatingNode] = useState<{\n      parentId: string;\n      type: \"file\" | \"folder\";\n    } | null>(null);\n    const [newNodeName, setNewNodeName] = useState(\"\");\n    const [localExpandedNodes, setLocalExpandedNodes] =\n      useState<string[]>(expandedNodes);\n    const [draggedNode, setDraggedNode] = useState<TreeNode | null>(null);\n    const [dragOverNode, setDragOverNode] = useState<string | null>(null);\n\n    // Sync local expanded state with props\n    useEffect(() => {\n      setLocalExpandedNodes(expandedNodes);\n    }, [expandedNodes]);\n\n    const handleToggle = useCallback(\n      (node: TreeNode) => {\n        if (node.type !== \"folder\" || !node.canExpand) return;\n\n        const newExpanded = localExpandedNodes.includes(node.id)\n          ? localExpandedNodes.filter((id: any) => id !== node.id)\n          : [...localExpandedNodes, node.id];\n\n        setLocalExpandedNodes(newExpanded);\n        onExpandedChange?.(newExpanded);\n        onNodeToggle?.(node.id, !localExpandedNodes.includes(node.id));\n      },\n      [localExpandedNodes, onExpandedChange, onNodeToggle]\n    );\n\n    const handleSelect = useCallback(\n      (node: TreeNode) => {\n        onNodeSelect?.(node);\n      },\n      [onNodeSelect]\n    );\n\n    const handleContextMenuAction = useCallback(\n      (action: string, node: TreeNode) => {\n        switch (action) {\n          case \"rename\":\n            if (allowRename) {\n              setRenamingNode(node.id);\n              setNewName(node.name);\n            }\n            break;\n          case \"delete\":\n            if (allowDelete) {\n              onNodeDelete?.(node.id);\n            }\n            break;\n          case \"copy\":\n            if (allowCopy) {\n              // This would typically open a dialog to select destination\n            }\n            break;\n          case \"move\":\n            if (allowMove) {\n              // This would typically open a dialog to select destination\n            }\n            break;\n          case \"newFolder\":\n            if (allowCreate && node.type === \"folder\") {\n              setCreatingNode({ parentId: node.id, type: \"folder\" });\n              setNewNodeName(\"\");\n            }\n            break;\n          case \"newFile\":\n            if (allowCreate && node.type === \"folder\") {\n              setCreatingNode({ parentId: node.id, type: \"file\" });\n              setNewNodeName(\"\");\n            }\n            break;\n        }\n      },\n      [\n        allowRename,\n        allowDelete,\n        allowCopy,\n        allowMove,\n        allowCreate,\n        onNodeDelete,\n      ]\n    );\n\n    const handleRenameSubmit = useCallback(() => {\n      if (renamingNode && newName.trim()) {\n        onNodeRename?.(renamingNode, newName.trim());\n        setRenamingNode(null);\n        setNewName(\"\");\n      }\n    }, [renamingNode, newName, onNodeRename]);\n\n    const handleCreateSubmit = useCallback(() => {\n      if (creatingNode && newNodeName.trim()) {\n        onNodeCreate?.(\n          creatingNode.parentId,\n          newNodeName.trim(),\n          creatingNode.type\n        );\n        setCreatingNode(null);\n        setNewNodeName(\"\");\n      }\n    }, [creatingNode, newNodeName, onNodeCreate]);\n\n    const handleDragStart = useCallback(\n      (event: React.DragEvent, node: TreeNode) => {\n        setDraggedNode(node);\n        const ghost = document.createElement(\"div\");\n        ghost.className =\n          \"glass-pointer-events-none glass-px-2 glass-py-1 glass-radius-md glass-surface-dark/40 glass-ring-1 glass-ring-white-opacity-10 glass-text-primary glass-text-xs glass-backdrop-blur-md glass-shadow-xl glass-contrast-guard\";\n        ghost.textContent = node.name;\n        document.body.appendChild(ghost);\n        event.dataTransfer.setDragImage(ghost, 8, 8);\n        setTimeout(() => ghost.remove(), 0);\n      },\n      []\n    );\n\n    const handleDragOver = useCallback(\n      (event: React.DragEvent, node: TreeNode) => {\n        if (\n          node.type === \"folder\" &&\n          draggedNode &&\n          draggedNode.id !== node.id\n        ) {\n          event.preventDefault();\n          setDragOverNode(node.id);\n        }\n      },\n      [draggedNode]\n    );\n\n    const handleDragEnd = useCallback(() => {\n      setDraggedNode(null);\n      setDragOverNode(null);\n    }, []);\n\n    const handleDrop = useCallback(\n      (event: React.DragEvent, node: TreeNode) => {\n        if (\n          draggedNode &&\n          node.type === \"folder\" &&\n          draggedNode.id !== node.id\n        ) {\n          event.preventDefault();\n          onNodeMove?.(draggedNode.id, node.id);\n          setDraggedNode(null);\n          setDragOverNode(null);\n        }\n      },\n      [draggedNode, onNodeMove]\n    );\n\n    const filteredNodes = useMemo(() => {\n      if (!searchQuery) return nodes;\n\n      const filterNodes = (nodes: TreeNode[]): TreeNode[] => {\n        return nodes.reduce((filtered: TreeNode[], node) => {\n          const matches = node.name\n            .toLowerCase()\n            .includes(searchQuery.toLowerCase());\n\n          if (matches) {\n            filtered.push(node);\n          } else if (node.children && node.children.length > 0) {\n            const filteredChildren = filterNodes(node.children);\n            if (filteredChildren.length > 0) {\n              filtered.push({\n                ...node,\n                children: filteredChildren,\n                isExpanded: true,\n              });\n            }\n          }\n\n          return filtered;\n        }, []);\n      };\n\n      return filterNodes(nodes);\n    }, [nodes, searchQuery]);\n\n    const getFileIcon = useCallback(\n      (node: TreeNode) => {\n        if (node.type === \"folder\") {\n          return localExpandedNodes.includes(node.id) ? (\n            <FolderOpen className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n          ) : (\n            <Folder className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n          );\n        }\n\n        const ext = node.extension?.toLowerCase();\n        switch (ext) {\n          case \"jpg\":\n          case \"jpeg\":\n          case \"png\":\n          case \"gif\":\n          case \"webp\":\n            return <Image className=\"glass-w-4 glass-h-4 glass-text-primary\" />;\n          case \"mp4\":\n          case \"avi\":\n          case \"mov\":\n          case \"mkv\":\n            return <Video className=\"glass-w-4 glass-h-4 glass-text-primary\" />;\n          case \"mp3\":\n          case \"wav\":\n          case \"flac\":\n            return <Music className=\"glass-w-4 glass-h-4 glass-text-pink\" />;\n          case \"zip\":\n          case \"rar\":\n          case \"7z\":\n            return (\n              <Archive className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n            );\n          case \"js\":\n          case \"ts\":\n          case \"jsx\":\n          case \"tsx\":\n          case \"py\":\n          case \"java\":\n          case \"cpp\":\n          case \"c\":\n          case \"php\":\n          case \"html\":\n          case \"css\":\n            return <Code className=\"glass-w-4 glass-h-4 glass-text-primary\" />;\n          default:\n            return (\n              <FileText className=\"glass-w-4 glass-h-4 glass-text-secondary\" />\n            );\n        }\n      },\n      [localExpandedNodes]\n    );\n\n    const formatFileSize = useCallback((bytes?: number) => {\n      if (!bytes) return \"\";\n      const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n      const i = Math.floor(Math.log(bytes) / Math.log(1024));\n      return (\n        Math.round((bytes / Math.pow(1024, i)) * 100) / 100 + \" \" + sizes[i]\n      );\n    }, []);\n\n    const formatDate = useCallback((date?: Date) => {\n      if (!date) return \"\";\n      return (\n        date.toLocaleDateString() +\n        \" \" +\n        date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })\n      );\n    }, []);\n\n    const sizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-p-4\",\n      compact: \"glass-p-2\",\n      minimal: \"glass-p-1\",\n    };\n\n    const elevationClasses = {\n      low: \"glass-backdrop-blur-md glass-surface-dark/20 glass-border glass-border-white/10 glass-contrast-guard\",\n      medium:\n        \"glass-backdrop-blur-md glass-surface-dark/30 glass-border glass-border-white/10 glass-shadow-lg glass-contrast-guard\",\n      high: \"glass-backdrop-blur-md glass-surface-dark/40 glass-border glass-border-white/20 glass-shadow-2xl glass-contrast-guard\",\n    };\n\n    const TreeNodeComponent = ({\n      node,\n      level = 0,\n    }: {\n      node: TreeNode;\n      level?: number;\n    }) => {\n      const prefersReducedMotion = useReducedMotion();\n      const isExpanded = localExpandedNodes.includes(node.id);\n      const isSelected = selectedNodeId === node.id;\n      const isDragOver = dragOverNode === node.id;\n      const indent = level * 16;\n\n      return (\n        <div>\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-gap-1 glass-py-1 glass-px-2 glass-radius-md glass-cursor-pointer hover:glass-surface-subtle/10 glass-transition-all glass-duration-200 glass-group glass-relative\",\n              \"glass-hover--translate-y-0-5 glass-press\",\n              isSelected && \"glass-surface-primary/20 glass-text-secondary\",\n              isDragOver &&\n                \"glass-surface-green/10 glass-ring-1 glass-ring-green-400 glass-pulse-ring\",\n              renamingNode === node.id && \"glass-surface-subtle/5\"\n            )}\n            style={{ paddingLeft: `${indent + 8}px` }}\n            onClick={(e) => handleSelect(node)}\n            draggable\n            onDragStart={(e) => handleDragStart(e, node)}\n            onDragOver={(e) => handleDragOver(e, node)}\n            onDragEnd={handleDragEnd}\n            onDrop={(e) => handleDrop(e, node)}\n          >\n            {/* Expand/Collapse Button */}\n            {node.type === \"folder\" && node.canExpand && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                className=\"glass-w-4 glass-h-4 glass-p-0 hover:glass-surface-subtle/20 glass-focus glass-touch-target\"\n                onClick={(e) => {\n                  e.stopPropagation();\n                  handleToggle(node);\n                }}\n              >\n                {isExpanded ? (\n                  <ChevronDown className=\"glass-w-3 glass-h-3\" />\n                ) : (\n                  <ChevronRight className=\"glass-w-3 glass-h-3\" />\n                )}\n              </GlassButton>\n            )}\n\n            {/* Spacer for files */}\n            {node.type === \"file\" && <div className=\"glass-w-4\" />}\n\n            {/* Icon */}\n            {showIcons && (\n              <div className=\"glass-flex-shrink-0\">{getFileIcon(node)}</div>\n            )}\n\n            {/* Name */}\n            <div className=\"glass-flex-1 glass-min-glass-w-0\">\n              {renamingNode === node.id ? (\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <GlassInput\n                    value={newName}\n                    onChange={(e) => setNewName(e.target.value)}\n                    onKeyDown={(e) => {\n                      if (e.key === \"Enter\") handleRenameSubmit();\n                      if (e.key === \"Escape\") setRenamingNode(null);\n                    }}\n                    autoFocus\n                    className=\"glass-flex-1 glass-h-6 glass-text-sm glass-pulse-ring\"\n                  />\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={handleRenameSubmit}\n                    className=\"glass-w-6 glass-h-6 glass-p-0 glass-focus glass-touch-target\"\n                  >\n                    <Check className=\"glass-w-3 glass-h-3\" />\n                  </GlassButton>\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => setRenamingNode(null)}\n                    className=\"glass-w-6 glass-h-6 glass-p-0 glass-focus glass-touch-target\"\n                  >\n                    <X className=\"glass-w-3 glass-h-3\" />\n                  </GlassButton>\n                </div>\n              ) : (\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <span className=\"glass-truncate glass-text-primary\">\n                    {node.name}\n                  </span>\n                  {showSize && node.size && (\n                    <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                      ({formatFileSize(node.size)})\n                    </span>\n                  )}\n                </div>\n              )}\n            </div>\n\n            {/* Modified Date */}\n            {showModified && node.modifiedAt && (\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-hidden md:glass-block\">\n                {formatDate(node.modifiedAt)}\n              </div>\n            )}\n\n            {/* Context Menu */}\n            <GlassButton\n              variant=\"ghost\"\n              size=\"sm\"\n              className=\"glass-w-6 glass-h-6 glass-p-0 glass-opacity-0 glass-group-glass-hover-opacity-100 hover:glass-surface-subtle/20 glass-focus glass-touch-target\"\n              onClick={(e) => {\n                e.stopPropagation();\n                // Simple action for now\n              }}\n            >\n              <MoreVertical className=\"glass-w-3 glass-h-3\" />\n            </GlassButton>\n          </div>\n\n          {/* Children */}\n          <AnimatePresence>\n            {isExpanded && node.children && node.children.length > 0 && (\n              <motion.div\n                initial={{ opacity: 0, height: 0 }}\n                animate={\n                  prefersReducedMotion ? {} : { opacity: 1, height: \"auto\" }\n                }\n                exit={{ opacity: 0, height: 0 }}\n                className=\"glass-overflow-hidden\"\n              >\n                {node.children.map((child) => (\n                  <TreeNodeComponent\n                    key={child.id}\n                    node={{ ...child, level: level + 1 }}\n                    level={level + 1}\n                  />\n                ))}\n              </motion.div>\n            )}\n          </AnimatePresence>\n\n          {/* Loading indicator */}\n          {isExpanded && node.isLoading && (\n            <div\n              className=\"glass-flex glass-items-center glass-py-1\"\n              style={{ paddingLeft: `${indent + 32}px` }}\n            >\n              <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-white/30 glass-border-t-white glass-radius-full glass-animate-spin\" />\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-ml-2\">\n                Loading...\n              </span>\n            </div>\n          )}\n        </div>\n      );\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-radius-xl glass-overflow-hidden glass-max-w-full glass-min-w-0\",\n          elevationClasses[elevation],\n          variantClasses[variant],\n          sizeClasses[size],\n          className\n        )}\n        role=\"region\"\n        aria-label=\"File tree\"\n        data-glass-component\n        data-testid={dataTestId}\n        style={{ maxHeight: \"100%\", minWidth: 0 }}\n        {...props}\n      >\n        {/* Search */}\n        <div className=\"glass-mb-4\">\n          <GlassInput\n            placeholder=\"Search files...\"\n            value={searchQuery}\n            onChange={(e) => onSearchChange?.(e.target.value)}\n            leftIcon={<Search className=\"glass-w-4 glass-h-4\" />}\n          />\n        </div>\n\n        {/* Tree */}\n        <div className=\"glass-overflow-y-auto\" style={{ maxHeight }}>\n          {filteredNodes.length > 0 ? (\n            filteredNodes.map((node) => (\n              <TreeNodeComponent key={node.id} node={node} />\n            ))\n          ) : (\n            <div className=\"glass-text-center glass-py-8 glass-text-primary-glass-opacity-60\">\n              {searchQuery ? \"No files found\" : \"No files to display\"}\n            </div>\n          )}\n        </div>\n\n        {/* Create Node Dialog */}\n        {creatingNode && (\n          <div className=\"glass-fixed glass-inset-0 glass-surface-dark/50 glass-backdrop-blur-md glass-z-50 glass-flex glass-items-center glass-justify-center glass-contrast-guard\">\n            <div className=\"glass-radius-lg glass-p-6 glass-max-w-md glass-w-full glass-mx-4 glass-surface-subtle/5 glass-ring-1 glass-ring-white-opacity-10 glass-contrast-guard\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">\n                Create New {creatingNode.type === \"folder\" ? \"Folder\" : \"File\"}\n              </h3>\n              <GlassInput\n                placeholder={`${creatingNode.type === \"folder\" ? \"Folder\" : \"File\"} name...`}\n                value={newNodeName}\n                onChange={(e) => setNewNodeName(e.target.value)}\n                onKeyDown={(e) => e.key === \"Enter\" && handleCreateSubmit()}\n                className=\"glass-mb-4\"\n                autoFocus\n              />\n              <div className=\"glass-flex glass-gap-2\">\n                <GlassButton\n                  variant=\"ghost\"\n                  onClick={(e) => setCreatingNode(null)}\n                  className=\"glass-flex-1 glass-focus glass-touch-target\"\n                >\n                  Cancel\n                </GlassButton>\n                <GlassButton\n                  variant=\"primary\"\n                  onClick={handleCreateSubmit}\n                  disabled={!newNodeName.trim()}\n                  className=\"glass-flex-1 glass-focus glass-touch-target\"\n                >\n                  Create\n                </GlassButton>\n              </div>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassFileTree.displayName = \"GlassFileTree\";\n\nexport { GlassFileTree };\n", "\"use client\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton, IconButton } from \"../button/GlassButton\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\nimport { GlassProgress } from \"../data-display/GlassProgress\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface UploadedFile {\n  id: string;\n  file: File;\n  name: string;\n  size: number;\n  type: string;\n  url?: string;\n  preview?: string;\n  status: \"pending\" | \"uploading\" | \"completed\" | \"error\";\n  progress?: number;\n  error?: string;\n}\n\nexport interface GlassFileUploadProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onChange\"\n> {\n  /**\n   * File input accept attribute\n   */\n  accept?: string;\n  /**\n   * Allow multiple files\n   */\n  multiple?: boolean;\n  /**\n   * Maximum file size in bytes\n   */\n  maxSize?: number;\n  /**\n   * Maximum number of files\n   */\n  maxFiles?: number;\n  /**\n   * Upload variant\n   */\n  variant?: \"default\" | \"compact\" | \"minimal\" | \"grid\";\n  /**\n   * Upload size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Disabled state\n   */\n  disabled?: boolean;\n  /**\n   * Files array\n   */\n  files?: UploadedFile[];\n  /**\n   * Initial files for uncontrolled demos, previews, and preloaded upload flows.\n   */\n  defaultFiles?: UploadedFile[];\n  /**\n   * Compact rendering for embedded cards and dense app surfaces.\n   */\n  compact?: boolean;\n  /**\n   * Contain the uploader inside its parent instead of assuming a full-width page section.\n   */\n  contained?: boolean;\n  /**\n   * Explicit uploader width for constrained layouts.\n   */\n  width?: React.CSSProperties[\"width\"];\n  /**\n   * Explicit uploader height for constrained layouts.\n   */\n  height?: React.CSSProperties[\"height\"];\n  /**\n   * Maximum uploader height before file lists scroll.\n   */\n  maxHeight?: React.CSSProperties[\"maxHeight\"];\n  /**\n   * Show per-file and batch upload/remove actions.\n   */\n  showActions?: boolean;\n  /**\n   * Show the dropzone. Disable this for review-only uploaded file lists.\n   */\n  showDropzone?: boolean;\n  /**\n   * File change handler\n   */\n  onChange?: (files: UploadedFile[]) => void;\n  /**\n   * Upload function\n   */\n  onUpload?: (file: File) => Promise<{ url: string } | void>;\n  /**\n   * File remove handler\n   */\n  onRemove?: (fileId: string) => void;\n  /**\n   * File preview handler\n   */\n  onPreview?: (file: UploadedFile) => void;\n  /**\n   * Show file previews\n   */\n  showPreviews?: boolean;\n  /**\n   * Show upload progress\n   */\n  showProgress?: boolean;\n  /**\n   * Upload instruction text\n   */\n  instruction?: string;\n  /**\n   * Helper text\n   */\n  helperText?: string;\n  /**\n   * Error text\n   */\n  error?: string;\n  /**\n   * Auto upload on file selection\n   */\n  autoUpload?: boolean;\n  /**\n   * Custom file renderer\n   */\n  renderFile?: (file: UploadedFile, index: number) => React.ReactNode;\n  /**\n   * Custom dropzone content\n   */\n  children?: React.ReactNode;\n}\n\nconst EMPTY_UPLOADED_FILES: UploadedFile[] = [];\n\n/**\n * GlassFileUpload component\n * File upload with drag-and-drop functionality and glassmorphism styling\n */\nexport const GlassFileUpload = forwardRef<HTMLDivElement, GlassFileUploadProps>(\n  (\n    {\n      accept,\n      multiple = false,\n      maxSize = 10 * 1024 * 1024, // 10MB\n      maxFiles = 10,\n      variant = \"compact\",\n      size = \"sm\",\n      disabled = false,\n      files,\n      defaultFiles = EMPTY_UPLOADED_FILES,\n      compact = false,\n      contained = false,\n      width,\n      height,\n      maxHeight,\n      showActions = true,\n      showDropzone = true,\n      onChange,\n      onUpload,\n      onRemove,\n      onPreview,\n      showPreviews = true,\n      showProgress = true,\n      instruction = \"Drop files or click to select\",\n      helperText,\n      error,\n      autoUpload = false,\n      renderFile,\n      children,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const isControlled = files !== undefined;\n    const [internalFiles, setInternalFiles] =\n      useState<UploadedFile[]>(defaultFiles);\n    const [isDragOver, setIsDragOver] = useState(false);\n    const [isDragActive, setIsDragActive] = useState(false);\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const dropZoneRef = useRef<HTMLDivElement>(null);\n    const visibleFiles = files ?? internalFiles;\n    const isCompact = compact || variant === \"minimal\";\n\n    const sizeClasses = {\n      sm: \"glass-p-4 glass-text-sm\",\n      md: \"glass-p-5 glass-text-base\",\n      lg: \"glass-p-6 glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-min-h-32\",\n      compact: \"glass-min-h-20\",\n      minimal: \"glass-min-h-16\",\n      grid: \"glass-min-h-32\",\n    };\n\n    // Sync internal files with props\n    useEffect(() => {\n      if (isControlled) {\n        setInternalFiles(files ?? EMPTY_UPLOADED_FILES);\n      }\n    }, [files, isControlled]);\n\n    const commitFiles = useCallback(\n      (nextFiles: UploadedFile[]) => {\n        if (!isControlled) {\n          setInternalFiles(nextFiles);\n        }\n        onChange?.(nextFiles);\n      },\n      [isControlled, onChange]\n    );\n\n    // Format file size\n    const formatFileSize = (bytes: number): string => {\n      if (bytes === 0) return \"0 Bytes\";\n      const k = 1024;\n      const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n      const i = Math.floor(Math.log(bytes) / Math.log(k));\n      return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i];\n    };\n\n    // Validate file\n    const validateFile = (file: File): string | null => {\n      if (maxSize && file.size > maxSize) {\n        return `File size must be less than ${formatFileSize(maxSize)}`;\n      }\n\n      if (accept) {\n        const acceptedTypes = accept.split(\",\").map((type: any) => type.trim());\n        const isAccepted = acceptedTypes.some((type) => {\n          if (type.startsWith(\".\")) {\n            return file.name.toLowerCase().endsWith(type.toLowerCase());\n          }\n          return file.type.match(type.replace(\"*\", \".*\"));\n        });\n\n        if (!isAccepted) {\n          return `File type not accepted. Accepted types: ${accept}`;\n        }\n      }\n\n      return null;\n    };\n\n    // Create file object\n    const createFileObject = (file: File): UploadedFile => {\n      const id = Math.random().toString(36).substr(2, 9);\n      const validationError = validateFile(file);\n\n      return {\n        id,\n        file,\n        name: file.name,\n        size: file.size,\n        type: file.type,\n        status: validationError ? \"error\" : \"pending\",\n        error: validationError || undefined,\n        progress: 0,\n      };\n    };\n\n    // Handle file selection\n    const handleFiles = useCallback(\n      async (fileList: FileList) => {\n        if (disabled) return;\n\n        const newFiles = Array.from(fileList).map(createFileObject);\n\n        // Check max files limit\n        if (maxFiles && visibleFiles.length + newFiles.length > maxFiles) {\n          return;\n        }\n\n        const updatedFiles = multiple\n          ? [...visibleFiles, ...newFiles]\n          : newFiles;\n        commitFiles(updatedFiles);\n\n        // Auto upload valid files\n        if (autoUpload && onUpload) {\n          for (const fileObj of newFiles) {\n            if (fileObj.status === \"pending\") {\n              await handleUpload(fileObj.id);\n            }\n          }\n        }\n      },\n      [\n        disabled,\n        maxFiles,\n        visibleFiles,\n        multiple,\n        commitFiles,\n        autoUpload,\n        onUpload,\n      ]\n    );\n\n    // Handle file upload\n    const handleUpload = async (fileId: string) => {\n      if (!onUpload) return;\n\n      const fileIndex = visibleFiles.findIndex((f) => f.id === fileId);\n      if (fileIndex === -1) return;\n\n      const fileObj = visibleFiles[fileIndex];\n\n      // Update status to uploading\n      const updatedFiles = [...visibleFiles];\n      updatedFiles[fileIndex] = {\n        ...fileObj,\n        status: \"uploading\",\n        progress: 0,\n      };\n      commitFiles(updatedFiles);\n\n      try {\n        // Simulate upload progress\n        const progressInterval = setInterval(() => {\n          setInternalFiles((current) => {\n            const newFiles = [...(isControlled ? visibleFiles : current)];\n            const currentFile = newFiles.find((f) => f.id === fileId);\n            if (currentFile && currentFile.status === \"uploading\") {\n              currentFile.progress = Math.min(\n                (currentFile.progress || 0) + 10,\n                90\n              );\n            }\n            return newFiles;\n          });\n        }, ANIMATION.DURATION.fast);\n\n        const result = await onUpload(fileObj.file);\n\n        clearInterval(progressInterval);\n\n        // Update file with result\n        const finalFiles = [...visibleFiles];\n        const finalIndex = finalFiles.findIndex((f) => f.id === fileId);\n        if (finalIndex !== -1) {\n          finalFiles[finalIndex] = {\n            ...finalFiles[finalIndex],\n            status: \"completed\",\n            progress: 100,\n            url: result?.url,\n          };\n          commitFiles(finalFiles);\n        }\n      } catch (error) {\n        // Update file with error\n        const errorFiles = [...visibleFiles];\n        const errorIndex = errorFiles.findIndex((f) => f.id === fileId);\n        if (errorIndex !== -1) {\n          errorFiles[errorIndex] = {\n            ...errorFiles[errorIndex],\n            status: \"error\",\n            error: error instanceof Error ? error.message : \"Upload failed\",\n          };\n          commitFiles(errorFiles);\n        }\n      }\n    };\n\n    // Handle file removal\n    const handleRemove = (fileId: string) => {\n      const updatedFiles = visibleFiles.filter((f: any) => f.id !== fileId);\n      commitFiles(updatedFiles);\n      onRemove?.(fileId);\n    };\n\n    // Drag and drop handlers\n    const handleDragEnter = (e: React.DragEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsDragActive(true);\n    };\n\n    const handleDragLeave = (e: React.DragEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsDragActive(false);\n      setIsDragOver(false);\n    };\n\n    const handleDragOver = (e: React.DragEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsDragOver(true);\n    };\n\n    const handleDrop = (e: React.DragEvent) => {\n      e.preventDefault();\n      e.stopPropagation();\n      setIsDragActive(false);\n      setIsDragOver(false);\n\n      const { files: droppedFiles } = e.dataTransfer;\n      if (droppedFiles && droppedFiles.length > 0) {\n        handleFiles(droppedFiles);\n      }\n    };\n\n    // Click to select files\n    const handleClick = () => {\n      if (!disabled) {\n        fileInputRef.current?.click();\n      }\n    };\n\n    // File input change\n    const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      const { files } = e.target;\n      if (files && files.length > 0) {\n        handleFiles(files);\n      }\n      // Reset input value to allow selecting the same file again\n      e.target.value = \"\";\n    };\n\n    // Get file icon\n    const getFileIcon = (type: string) => {\n      if (type.startsWith(\"image/\")) {\n        return (\n          <svg\n            data-glass-component\n            className=\"glass-w-5 glass-h-5\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            viewBox=\"0 0 24 24\"\n          >\n            <path\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              strokeWidth={2}\n              d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n            />\n          </svg>\n        );\n      }\n\n      if (type.includes(\"pdf\")) {\n        return (\n          <svg\n            className=\"glass-w-5 glass-h-5\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            viewBox=\"0 0 24 24\"\n          >\n            <path\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              strokeWidth={2}\n              d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\"\n            />\n          </svg>\n        );\n      }\n\n      return (\n        <svg\n          className=\"glass-w-5 glass-h-5\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          viewBox=\"0 0 24 24\"\n        >\n          <path\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            strokeWidth={2}\n            d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n          />\n        </svg>\n      );\n    };\n\n    // Render file item\n    const renderFileItem = (file: UploadedFile, index: number) => {\n      if (renderFile) {\n        return renderFile(file, index);\n      }\n\n      return (\n        <Motion key={file.id} preset=\"slideDown\">\n          <OptimizedGlass\n            intent=\"neutral\"\n            elevation=\"level1\"\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation=\"none\"\n            performanceMode=\"medium\"\n            className={cn(\n              \"glass-p-3 border border-border/20\",\n              isCompact && \"glass-p-2\",\n              file.status === \"error\" &&\n                \"border-destructive/50 bg-destructive/5\"\n            )}\n          >\n            <div className=\"glass-flex glass-items-center glass-gap-3\">\n              {/* File icon/preview */}\n              <div className=\"glass-flex-shrink-0\">\n                {showPreviews &&\n                !isCompact &&\n                file.type.startsWith(\"image/\") &&\n                file.preview ? (\n                  <img\n                    src={file.preview}\n                    alt={file.name}\n                    className=\"glass-w-10 glass-h-10 glass-object-cover glass-radius-md\"\n                  />\n                ) : (\n                  <div className=\"glass-w-10 glass-h-10 glass-radius-md glass-surface-subtle glass-flex glass-items-center glass-justify-center\">\n                    {getFileIcon(file.type)}\n                  </div>\n                )}\n              </div>\n\n              {/* File info */}\n              <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                <p className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n                  {file.name}\n                </p>\n                <div className=\"glass-flex glass-items-center glass-gap-2 glass-mt-1\">\n                  <span className=\"glass-text-xs glass-text-secondary\">\n                    {formatFileSize(file.size)}\n                  </span>\n                  <GlassBadge\n                    variant={\n                      file.status === \"completed\"\n                        ? \"success\"\n                        : file.status === \"error\"\n                          ? \"error\"\n                          : file.status === \"uploading\"\n                            ? \"primary\"\n                            : \"outline\"\n                    }\n                    size=\"xs\"\n                  >\n                    {file.status}\n                  </GlassBadge>\n                </div>\n\n                {/* Progress bar */}\n                {file.status === \"uploading\" && showProgress && (\n                  <GlassProgress\n                    value={file.progress}\n                    size=\"xs\"\n                    className=\"glass-mt-2\"\n                  />\n                )}\n\n                {/* Error message */}\n                {file.error && (\n                  <p className=\"glass-text-xs glass-text-danger glass-mt-1\">\n                    {file.error}\n                  </p>\n                )}\n              </div>\n\n              {/* Actions */}\n              {showActions && (\n              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                {file.status === \"pending\" && onUpload && (\n                  <IconButton\n                    icon=\"\u2191\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => handleUpload(file.id)}\n                    aria-label=\"Upload file\"\n                  />\n                )}\n\n                {file.status === \"completed\" && onPreview && (\n                  <IconButton\n                    icon=\"\uD83D\uDC41\"\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => onPreview(file)}\n                    aria-label=\"Preview file\"\n                  />\n                )}\n\n                <IconButton\n                  icon=\"\u00D7\"\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => handleRemove(file.id)}\n                  aria-label=\"Remove file\"\n                />\n              </div>\n              )}\n            </div>\n          </OptimizedGlass>\n        </Motion>\n      );\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-w-full glass-max-w-full glass-min-w-0\",\n          contained && \"glass-overflow-hidden\",\n          className\n        )}\n        style={{\n          width,\n          height,\n          maxHeight,\n          overflow: maxHeight || height ? \"auto\" : undefined,\n          ...style,\n        }}\n        data-testid={props[\"data-testid\"] || \"glassfileupload\"}\n        {...props}\n      >\n        {/* Hidden file input */}\n        <GlassInput\n          ref={fileInputRef}\n          type=\"file\"\n          accept={accept}\n          multiple={multiple}\n          onChange={handleInputChange}\n          className=\"glass-hidden\"\n          disabled={disabled}\n        />\n\n        {/* Drop zone */}\n        {showDropzone && (\n        <OptimizedGlass\n          variant=\"frosted\"\n          elevation={isDragOver ? \"level2\" : \"level1\"}\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          ref={dropZoneRef}\n          className={cn(\n            \"glass-relative glass-border glass-border-dashed glass-cursor-pointer glass-transition-all glass-overflow-hidden\",\n            \"hover:glass-border-blue focus:glass-border-blue glass-focus-outline-none\",\n            sizeClasses[size],\n            variantClasses[variant],\n            isCompact && \"glass-min-h-16\",\n            {\n              \"glass-border-blue glass-surface-blue/20\": isDragOver,\n              \"glass-border-white/20 glass-surface-dark/20\":\n                !isDragOver && !error,\n              \"glass-border-red glass-surface-red/20\": error,\n              \"glass-opacity-50 glass-cursor-not-allowed\": disabled,\n            }\n          )}\n          onDragEnter={handleDragEnter}\n          onDragLeave={handleDragLeave}\n          onDragOver={handleDragOver}\n          onDrop={handleDrop}\n          onClick={handleClick}\n          tabIndex={disabled ? -1 : 0}\n          role=\"button\"\n          aria-label=\"File upload area\"\n        >\n          {children || (\n            <div className=\"glass-flex glass-flex-col glass-items-center glass-justify-center glass-text-center\">\n              <svg\n                className={cn(\"glass-mx-auto glass-mb-2 glass-text-secondary\", {\n                  \"glass-w-8 glass-h-8\": size === \"sm\",\n                  \"glass-w-10 glass-h-10\": size === \"md\",\n                  \"glass-w-12 glass-h-12\": size === \"lg\",\n                })}\n                fill=\"none\"\n                stroke=\"currentColor\"\n                viewBox=\"0 0 24 24\"\n              >\n                <path\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                  strokeWidth={2}\n                  d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\"\n                />\n              </svg>\n\n              <p className=\"glass-text-primary glass-font-medium glass-mb-1\">\n                {instruction}\n              </p>\n\n              {helperText && (\n                <p className=\"glass-text-sm glass-text-secondary\">\n                  {helperText}\n                </p>\n              )}\n\n              {maxSize && (\n                <p className={cn(\"glass-text-xs glass-text-secondary glass-mt-2\", isCompact && \"glass-hidden\")}>\n                  Max file size: {formatFileSize(maxSize)}\n                </p>\n              )}\n            </div>\n          )}\n        </OptimizedGlass>\n        )}\n\n        {/* Error message */}\n        {error && (\n          <p className=\"glass-text-sm glass-text-danger glass-mt-2\">{error}</p>\n        )}\n\n        {/* File list */}\n        {visibleFiles.length > 0 && (\n          <div\n            className={cn(\"glass-mt-4 glass-gap-2\", {\n              \"grid grid-cols-2 md:grid-cols-3 glass-gap-3\": variant === \"grid\",\n            })}\n          >\n            {visibleFiles.map((file, index) => renderFileItem(file, index))}\n          </div>\n        )}\n\n        {/* Upload all button */}\n        {showActions &&\n          visibleFiles.some((f) => f.status === \"pending\") &&\n          onUpload &&\n          !autoUpload && (\n            <div className=\"glass-mt-4 glass-flex glass-justify-end\">\n              <GlassButton\n                variant=\"default\"\n                size=\"sm\"\n                onClick={(e) => {\n                  visibleFiles\n                    .filter((f: any) => f.status === \"pending\")\n                    .forEach((f: any) => handleUpload(f.id));\n                }}\n                disabled={disabled}\n              >\n                Upload All\n              </GlassButton>\n            </div>\n          )}\n      </div>\n    );\n  }\n);\n\nGlassFileUpload.displayName = \"GlassFileUpload\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { Filter } from \"../../icons\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface GlassFilterBarFilter {\n  id: string;\n  label: string;\n  value?: React.ReactNode;\n  active?: boolean;\n  onRemove?: () => void;\n}\n\nexport interface GlassFilterBarProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  filters?: GlassFilterBarFilter[];\n  actions?: React.ReactNode;\n  onClear?: () => void;\n  clearLabel?: string;\n  label?: string;\n}\n\nexport const GlassFilterBar = forwardRef<HTMLDivElement, GlassFilterBarProps>(\n  (\n    {\n      filters = [],\n      actions,\n      onClear,\n      clearLabel = \"Clear filters\",\n      label = \"Filters\",\n      className,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    const activeFilters = filters.filter((filter) => filter.active !== false);\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        role=\"region\"\n        aria-label={label}\n        className={cn(\n          \"glass-flex glass-flex-wrap glass-items-center glass-gap-2 glass-rounded-lg glass-border glass-border-white/10 glass-bg-white/8 glass-p-3\",\n          className\n        )}\n        {...props}\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-sm glass-font-medium glass-text-primary\">\n          <Filter aria-hidden=\"true\" className=\"glass-h-4 glass-w-4\" />\n          <span>{label}</span>\n        </div>\n        {children}\n        {activeFilters.map((filter) => (\n          <span\n            key={filter.id}\n            className=\"glass-inline-flex glass-items-center glass-gap-1 glass-rounded-full glass-border glass-border-white/10 glass-bg-white/10 glass-px-3 glass-py-1 glass-text-xs glass-text-primary\"\n          >\n            <span>{filter.label}</span>\n            {filter.value ? (\n              <span className=\"glass-text-secondary\">{filter.value}</span>\n            ) : null}\n            {filter.onRemove ? (\n              <button\n                type=\"button\"\n                onClick={filter.onRemove}\n                className=\"glass-ml-1 glass-rounded-full glass-px-1 glass-text-secondary hover:glass-text-primary\"\n                aria-label={`Remove ${filter.label} filter`}\n              >\n                x\n              </button>\n            ) : null}\n          </span>\n        ))}\n        <div className=\"glass-ml-auto glass-flex glass-items-center glass-gap-2\">\n          {actions}\n          {onClear && activeFilters.length > 0 ? (\n            <GlassButton\n              type=\"button\"\n              size=\"sm\"\n              variant=\"ghost\"\n              onClick={onClear}\n            >\n              {clearLabel}\n            </GlassButton>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassFilterBar.displayName = \"GlassFilterBar\";\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  ChevronDown,\n  ChevronRight,\n  Filter,\n  RotateCcw,\n  Save,\n  Search,\n} from \"@/icons\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassCheckbox } from \"../input/GlassCheckbox\";\nimport {\n  GlassDateRangePicker,\n  type DateRange,\n} from \"../input/GlassDateRangePicker\";\nimport { GlassInput } from \"../input/GlassInput\";\nimport {\n  GlassSelect,\n  GlassSelectContent,\n  GlassSelectItem,\n  GlassSelectTrigger,\n  GlassSelectValue,\n} from \"../input/GlassSelectCompound\";\nimport { GlassSlider } from \"../input/GlassSlider\";\n\nexport interface FilterOption {\n  id: string;\n  label: string;\n  value: string;\n  count?: number;\n  disabled?: boolean;\n}\n\nexport interface FilterGroup {\n  id: string;\n  label: string;\n  type: \"checkbox\" | \"select\" | \"slider\" | \"daterange\" | \"search\";\n  options?: FilterOption[];\n  min?: number;\n  max?: number;\n  step?: number;\n  placeholder?: string;\n  collapsed?: boolean;\n  required?: boolean;\n}\n\nexport type FilterScalarValue = string | number | boolean;\nexport type FilterValue =\n  | FilterScalarValue\n  | FilterScalarValue[]\n  | DateRange\n  | null;\nexport type FilterValues = Record<string, FilterValue>;\n\nexport interface FilterPreset {\n  id: string;\n  name: string;\n  filters: FilterValues;\n}\n\nexport interface GlassFilterPanelProps {\n  filters?: FilterGroup[];\n  values?: FilterValues;\n  onChange?: (filters: FilterValues) => void;\n  onApply?: () => void;\n  onClear?: () => void;\n  presets?: FilterPreset[];\n  onSavePreset?: (name: string) => void;\n  className?: string;\n  title?: string;\n  collapsible?: boolean;\n  showSearch?: boolean;\n  showPresets?: boolean;\n  showApplyButton?: boolean;\n  showClearButton?: boolean;\n  variant?: \"default\" | \"compact\" | \"minimal\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  elevation?: \"low\" | \"medium\" | \"high\";\n  /**\n   * Bound the panel inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained panels.\n   */\n  maxHeight?: number | string;\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n  style?: React.CSSProperties;\n}\n\nconst GlassFilterPanel = React.forwardRef<\n  HTMLDivElement,\n  GlassFilterPanelProps\n>(\n  (\n    {\n      filters = [],\n      values = {},\n      onChange = () => {},\n      onApply,\n      onClear,\n      presets = [],\n      onSavePreset,\n      className,\n      title = \"Filters\",\n      collapsible = true,\n      showSearch = true,\n      showPresets = true,\n      showApplyButton = true,\n      showClearButton = true,\n      variant = \"default\",\n      size = \"md\",\n      elevation = \"medium\",\n      contained = false,\n      maxHeight,\n      \"data-testid\": dataTestId,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [expandedGroups, setExpandedGroups] = useState<\n      Record<string, boolean>\n    >(Object.fromEntries(filters.map((f) => [f.id, !f.collapsed])));\n    const [searchQuery, setSearchQuery] = useState(\"\");\n    const [showPresetDialog, setShowPresetDialog] = useState(false);\n    const [newPresetName, setNewPresetName] = useState(\"\");\n\n    const toggleGroup = useCallback((groupId: string) => {\n      setExpandedGroups((prev) => ({\n        ...prev,\n        [groupId]: !prev[groupId],\n      }));\n    }, []);\n\n    const handleFilterChange = useCallback(\n      (groupId: string, value: FilterValue) => {\n        onChange({\n          ...values,\n          [groupId]: value,\n        });\n      },\n      [values, onChange]\n    );\n\n    const handleClearAll = useCallback(() => {\n      const clearedValues = Object.fromEntries(\n        filters.map((f) => [f.id, f.type === \"checkbox\" ? [] : null])\n      ) as FilterValues;\n      onChange(clearedValues);\n      onClear?.();\n    }, [filters, onChange, onClear]);\n\n    const handleApplyFilters = useCallback(() => {\n      onApply?.();\n    }, [onApply]);\n\n    const handlePresetSelect = useCallback(\n      (preset: FilterPreset) => {\n        onChange(preset.filters);\n      },\n      [onChange]\n    );\n\n    const handleSavePreset = useCallback(() => {\n      if (newPresetName.trim()) {\n        onSavePreset?.(newPresetName.trim());\n        setNewPresetName(\"\");\n        setShowPresetDialog(false);\n      }\n    }, [newPresetName, onSavePreset]);\n\n    const filteredGroups = useMemo(() => {\n      if (!searchQuery) return filters;\n\n      return filters.filter((group) => {\n        const normalizedQuery = searchQuery.toLowerCase();\n        return (\n          group.label.toLowerCase().includes(normalizedQuery) ||\n          group.options?.some((option) =>\n            option.label.toLowerCase().includes(normalizedQuery)\n          )\n        );\n      });\n    }, [filters, searchQuery]);\n\n    const hasActiveFilters = useMemo(() => {\n      return Object.values(values).some((value) =>\n        Array.isArray(value) ? (value?.length || 0) > 0 : value != null\n      );\n    }, [values]);\n\n    const isCompactMode = variant === \"compact\" || contained;\n    const boundedHeight = maxHeight ?? (isCompactMode ? 220 : undefined);\n    const visibleGroups = isCompactMode\n      ? filteredGroups.slice(0, 1)\n      : filteredGroups;\n    const effectiveShowPresets = isCompactMode ? false : showPresets;\n    const effectiveShowClearButton = isCompactMode ? false : showClearButton;\n    const effectiveShowApplyButton = showApplyButton;\n    const effectiveSize = isCompactMode ? \"sm\" : size;\n\n    const sizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-p-6\",\n      compact: \"glass-p-3\",\n      minimal: \"glass-p-2\",\n    };\n\n    const elevationClasses = {\n      low: \"glass-backdrop-blur glass-surface-dark/50 glass-border glass-border-white/20 glass-contrast-guard\",\n      medium:\n        \"glass-backdrop-blur glass-surface-dark/50 glass-border glass-border-white/30 glass-shadow-lg glass-contrast-guard\",\n      high: \"glass-backdrop-blur glass-surface-dark/50 glass-border glass-border-white/40 glass-shadow-2xl glass-contrast-guard\",\n    };\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          \"glass-radius-xl\",\n          elevationClasses[elevation],\n          variantClasses[variant],\n          sizeClasses[effectiveSize],\n          \"glass-w-full glass-text-primary\",\n          className\n        )}\n        role=\"region\"\n        aria-label=\"Filter panel\"\n        data-testid={dataTestId}\n        style={{\n          backgroundColor:\n            elevation === \"low\"\n              ? \"rgba(15, 23, 42, 0.7)\"\n              : elevation === \"high\"\n                ? \"rgba(15, 23, 42, 0.76)\"\n                : \"rgba(15, 23, 42, 0.72)\",\n          color: \"rgba(255, 255, 255, 0.95)\",\n          maxWidth: isCompactMode ? \"100%\" : \"28rem\",\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n                overflow: \"hidden\",\n              }\n            : null),\n          ...style,\n        }}\n        {...props}\n      >\n        {/* Header */}\n        <div\n          className={cn(\n            \"glass-flex glass-items-center glass-justify-between\",\n            isCompactMode ? \"glass-mb-3\" : \"glass-mb-6\"\n          )}\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <Filter\n              className={cn(\n                \"glass-text-white/85\",\n                isCompactMode ? \"glass-w-4 glass-h-4\" : \"glass-w-5 glass-h-5\"\n              )}\n            />\n            <h3\n              className={cn(\n                \"glass-font-semibold glass-text-white\",\n                isCompactMode ? \"glass-text-lg\" : undefined\n              )}\n              style={lightOnDarkTextStyle}\n            >\n              {title}\n            </h3>\n            {hasActiveFilters && (\n              <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-blue/20 glass-text-secondary glass-radius-full\">\n                Active\n              </span>\n            )}\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            {effectiveShowClearButton && hasActiveFilters && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleClearAll}\n                className=\"glass-text-white/85 hover:glass-text-white glass-focus glass-touch-target\"\n                style={lightOnDarkTextStyle}\n              >\n                <RotateCcw className=\"glass-w-4 glass-h-4 glass-mr-1\" />\n                Clear\n              </GlassButton>\n            )}\n\n            {effectiveShowApplyButton && (\n              <GlassButton\n                variant=\"primary\"\n                size=\"sm\"\n                onClick={handleApplyFilters}\n                disabled={!hasActiveFilters}\n                className=\"glass-focus glass-touch-target\"\n              >\n                {isCompactMode ? \"Apply\" : \"Apply Filters\"}\n              </GlassButton>\n            )}\n          </div>\n        </div>\n\n        {/* Search */}\n        {showSearch && (\n          <div className={cn(isCompactMode ? \"glass-mb-3\" : \"glass-mb-4\")}>\n            <GlassInput\n              placeholder=\"Search filters...\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"glass-w-full\"\n              leftIcon={<Search className=\"glass-w-4 glass-h-4\" />}\n            />\n          </div>\n        )}\n\n        {/* Presets */}\n        {effectiveShowPresets && presets.length > 0 && (\n          <div className=\"glass-mb-6\">\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-font-medium glass-text-white/85\">\n                Presets\n              </span>\n              {onSavePreset && (\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setShowPresetDialog(true)}\n                  className=\"glass-text-white/85 hover:glass-text-white glass-focus glass-touch-target\"\n                  style={lightOnDarkTextStyle}\n                >\n                  <Save className=\"glass-w-4 glass-h-4 glass-mr-1\" />\n                  Save\n                </GlassButton>\n              )}\n            </div>\n\n            <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n              {presets.map((preset) => (\n                <GlassButton\n                  key={preset.id}\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={(e) => handlePresetSelect(preset)}\n                  className=\"glass-text-xs glass-focus glass-touch-target\"\n                >\n                  {preset.name}\n                </GlassButton>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {/* Filter Groups */}\n        <div\n          className={cn(isCompactMode ? \"glass-space-y-2\" : \"glass-space-y-4\")}\n        >\n          <AnimatePresence>\n            {visibleGroups.map((group) => (\n              <motion.div\n                key={group.id}\n                initial={prefersReducedMotion ? false : { opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                className=\"glass-radius-lg glass-overflow-hidden glass-ring-1 glass-ring-white-opacity-10\"\n              >\n                {/* Group Header */}\n                {collapsible && (\n                  <button\n                    onClick={(e) => toggleGroup(group.id)}\n                    className={cn(\n                      \"glass-w-full glass-flex glass-items-center glass-justify-between glass-text-left glass-text-white hover:glass-surface-subtle/10 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                      isCompactMode ? \"glass-p-2\" : \"glass-p-3\"\n                    )}\n                    style={lightOnDarkTextStyle}\n                  >\n                    <div className=\"glass-flex glass-items-center glass-gap-2\">\n                      <span className=\"glass-font-medium glass-text-white\">\n                        {group.label}\n                      </span>\n                      {group.required && (\n                        <span className=\"glass-text-xs glass-text-white\">\n                          *\n                        </span>\n                      )}\n                    </div>\n                    {expandedGroups[group.id] ? (\n                      <ChevronDown className=\"glass-w-4 glass-h-4 glass-text-white/85\" />\n                    ) : (\n                      <ChevronRight className=\"glass-w-4 glass-h-4 glass-text-white/85\" />\n                    )}\n                  </button>\n                )}\n\n                {/* Group Content */}\n                <AnimatePresence>\n                  {(!collapsible || expandedGroups[group.id]) && (\n                    <motion.div\n                      initial={prefersReducedMotion ? false : { opacity: 0 }}\n                      animate={{ opacity: 1 }}\n                      exit={{ opacity: 0 }}\n                      className={cn(\n                        \"glass-border-t glass-border-white/10 glass-text-white\",\n                        isCompactMode ? \"glass-p-2\" : \"glass-p-3\"\n                      )}\n                      style={lightOnDarkTextStyle}\n                    >\n                      <FilterGroupContent\n                        group={group}\n                        value={values[group.id]}\n                        onChange={(value) =>\n                          handleFilterChange(group.id, value)\n                        }\n                        compact={isCompactMode}\n                      />\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </motion.div>\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Save Preset Dialog */}\n        {showPresetDialog && (\n          <div className=\"glass-fixed glass-inset-0 glass-surface-dark/50 glass-backdrop-blur-md glass-z-50 glass-flex glass-items-center glass-justify-center glass-contrast-guard\">\n            <div className=\"glass-radius-lg glass-p-6 glass-max-w-md glass-w-full glass-mx-4 glass-surface-subtle/5 glass-ring-1 glass-ring-white-opacity-10 glass-contrast-guard\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">\n                Save Filter Preset\n              </h3>\n              <GlassInput\n                placeholder=\"Preset name...\"\n                value={newPresetName}\n                onChange={(e) => setNewPresetName(e.target.value)}\n                className=\"glass-mb-4\"\n              />\n              <div className=\"glass-flex glass-gap-2\">\n                <GlassButton\n                  variant=\"ghost\"\n                  onClick={(e) => setShowPresetDialog(false)}\n                  className=\"glass-flex-1 glass-focus glass-touch-target\"\n                >\n                  Cancel\n                </GlassButton>\n                <GlassButton\n                  variant=\"primary\"\n                  onClick={handleSavePreset}\n                  disabled={!newPresetName.trim()}\n                  className=\"glass-flex-1 glass-focus glass-touch-target\"\n                >\n                  Save\n                </GlassButton>\n              </div>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassFilterPanel.displayName = \"GlassFilterPanel\";\n\n// Filter Group Content Component\ninterface FilterGroupContentProps {\n  group: FilterGroup;\n  value: FilterValue | undefined;\n  onChange: (value: FilterValue) => void;\n  compact?: boolean;\n}\n\nconst isDateRange = (value: FilterValue | undefined): value is DateRange =>\n  typeof value === \"object\" &&\n  value !== null &&\n  !Array.isArray(value) &&\n  \"from\" in value &&\n  \"to\" in value;\n\nconst getNumberSliderValue = (\n  value: FilterValue | undefined,\n  fallback: number\n): number | number[] =>\n  Array.isArray(value) && value.every((entry) => typeof entry === \"number\")\n    ? value\n    : fallback;\n\nconst lightOnDarkTextStyle: React.CSSProperties = {\n  color: \"rgba(255, 255, 255, 0.95)\",\n};\n\nconst FilterGroupContent: React.FC<FilterGroupContentProps> = ({\n  group,\n  value,\n  onChange,\n  compact = false,\n}) => {\n  const options = compact ? group.options?.slice(0, 3) : group.options;\n  const hiddenOptionCount = Math.max(\n    (group.options?.length ?? 0) - (options?.length ?? 0),\n    0\n  );\n\n  switch (group.type) {\n    case \"checkbox\":\n      return (\n        <div className={cn(compact ? \"glass-gap-1\" : \"glass-gap-2\")}>\n          {options?.map((option) => (\n            <div\n              key={option.id}\n              className=\"glass-flex glass-items-center glass-justify-between\"\n              style={lightOnDarkTextStyle}\n            >\n              <GlassCheckbox\n                id={option.id}\n                checked={Array.isArray(value) && value.includes(option.value)}\n                onCheckedChange={(checked) => {\n                  const currentValues = Array.isArray(value) ? value : [];\n                  const newValues = checked\n                    ? [...currentValues, option.value]\n                    : currentValues.filter((v) => v !== option.value);\n                  onChange(newValues);\n                }}\n                disabled={option.disabled}\n                label={option.label}\n              />\n              {option.count != null && (\n                <span className=\"glass-text-xs glass-text-white/80\">\n                  ({option.count})\n                </span>\n              )}\n            </div>\n          ))}\n          {hiddenOptionCount > 0 && (\n            <div className=\"glass-text-xs glass-text-white/65 glass-pt-1\">\n              +{hiddenOptionCount} more\n            </div>\n          )}\n        </div>\n      );\n\n    case \"select\":\n      return (\n        <GlassSelect\n          value={typeof value === \"string\" ? value : \"\"}\n          onValueChange={(newValue) => onChange(newValue)}\n        >\n          <GlassSelectTrigger>\n            <GlassSelectValue placeholder={group.placeholder || \"Select...\"} />\n          </GlassSelectTrigger>\n          <GlassSelectContent>\n            {options?.map((option) => (\n              <GlassSelectItem\n                key={option.id}\n                value={option.value}\n                disabled={option.disabled}\n              >\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-w-full\">\n                  <span>{option.label}</span>\n                  {option.count != null && (\n                    <span className=\"glass-text-xs glass-text-white/80 glass-ml-2\">\n                      ({option.count})\n                    </span>\n                  )}\n                </div>\n              </GlassSelectItem>\n            ))}\n          </GlassSelectContent>\n        </GlassSelect>\n      );\n\n    case \"slider\":\n      return (\n        <div className=\"glass-gap-3\">\n          <GlassSlider\n            min={group.min || 0}\n            max={group.max || 100}\n            step={group.step || 1}\n            value={getNumberSliderValue(value, group.min || 0)}\n            onValueChange={(newValue) => onChange(newValue)}\n            className=\"glass-w-full\"\n          />\n          <div className=\"glass-flex glass-justify-between glass-text-sm glass-text-white/85\">\n            <span>{group.min || 0}</span>\n            <span>{group.max || 100}</span>\n          </div>\n        </div>\n      );\n\n    case \"daterange\":\n      return (\n        <GlassDateRangePicker\n          value={isDateRange(value) ? value : undefined}\n          onChange={onChange}\n          placeholder={group.placeholder}\n        />\n      );\n\n    case \"search\":\n      return (\n        <GlassInput\n          placeholder={group.placeholder || \"Search...\"}\n          value={typeof value === \"string\" ? value : \"\"}\n          onChange={(e) => onChange(e.target.value)}\n          leftIcon={<Search className=\"glass-w-4 glass-h-4\" />}\n        />\n      );\n\n    default:\n      return null;\n  }\n};\n\nexport { GlassFilterPanel };\n", "\"use client\";\nimport { cn } from \"@/lib/utils\";\nimport React from \"react\";\nimport { useGlassFocus } from \"../../hooks/extended/useGlassFocus\";\nimport type { GlassFocusRingProps } from \"../interactive/types\";\nimport { ACCESSIBILITY } from \"../../tokens/designConstants\";\nimport styles from \"./GlassFocusRing.module.css\";\n\n// No longer need mergeRefs if attaching ref to wrapper div\n// import { mergeRefs } from '../../utils/refUtils';\n\n/**\n * A component that wraps a focusable element to provide an animated,\n * glass-styled focus indicator ring.\n */\nexport const GlassFocusRing: React.FC<GlassFocusRingProps> = ({\n  children,\n  color,\n  ringStyle,\n  offset,\n  thickness,\n  borderRadius,\n  disabled,\n  className,\n  // Extract other potential UseGlassFocusOptions if needed\n}) => {\n  const childNodes = React.Children.toArray(children);\n  const child =\n    childNodes.length === 1 ? (\n      childNodes[0]\n    ) : (\n      <span className={styles.placeholder} aria-hidden>\n        {childNodes}\n      </span>\n    );\n\n  // Determine effective color (fallback to accessibility token)\n  const effectiveColor = color ?? ACCESSIBILITY.focusRing.color;\n\n  // Hook manages focus classes and state; attach its ref to our wrapper\n  const { ref, options } = useGlassFocus({\n    color: effectiveColor,\n    width: thickness ?? 2,\n    offset,\n    keyboardNavigation: true,\n    enabled: !disabled,\n  });\n\n  const focusVars = React.useMemo<React.CSSProperties>(\n    () => ({\n      \"--glass-focus-color\": options.color,\n      \"--glass-focus-width\": `${options.width}px`,\n      \"--glass-focus-blur\": `${options.blur}px`,\n      \"--glass-focus-offset\": `${options.offset}px`,\n      \"--glass-focus-spread\": `${options.spread}px`,\n      \"--glass-focus-duration\": `${options.duration}ms`,\n      borderRadius: borderRadius != null ? `${borderRadius}px` : undefined,\n    }),\n    [options, borderRadius]\n  );\n\n  return (\n    // Wrapper div to capture focus and position the ring\n    <div\n      ref={ref as React.RefObject<HTMLDivElement>}\n      className={cn(\n        styles.wrapper,\n        \"glass-relative glass-inline-block glass-outline-none\",\n        className\n      )}\n      style={{ ...focusVars }}\n      // Make wrapper focusable only if not disabled\n      tabIndex={disabled ? -1 : 0}\n    >\n      {child}\n    </div>\n  );\n};\n\n// Add default export if this is the main export of the file\n// export default GlassFocusRing;\n", "\"use client\";\nimport React from \"react\";\nimport { useRef, useEffect, useCallback, useState } from \"react\";\n\nexport interface GlassFocusOptions {\n  /** Enable glass focus ring */\n  enabled?: boolean;\n  /** Focus ring color */\n  color?: string;\n  /** Focus ring width */\n  width?: number;\n  /** Focus ring blur */\n  blur?: number;\n  /** Focus ring spread */\n  spread?: number;\n  /** Animation duration */\n  duration?: number;\n  /** Focus ring offset */\n  offset?: number;\n  /** Focus ring position */\n  position?: string;\n  /** Custom focus styles */\n  customStyles?: React.CSSProperties;\n  /** Enable keyboard navigation */\n  keyboardNavigation?: boolean;\n  /** Auto-focus on mount */\n  autoFocus?: boolean;\n  /** Focus trap behavior */\n  focusTrap?: boolean;\n  /** Restore focus on unmount */\n  restoreFocus?: boolean;\n}\n\nexport interface GlassFocusState {\n  isFocused: boolean;\n  isKeyboardFocused: boolean;\n  focusOrigin: \"mouse\" | \"keyboard\" | \"programmatic\" | null;\n  focusRingVisible: boolean;\n  previousFocusedElement: Element | null;\n}\n\nconst DEFAULT_OPTIONS: Required<GlassFocusOptions> = {\n  enabled: true,\n  color: \"hsl(var(--glass-color-primary)/0.5)\",\n  width: 2,\n  blur: 4,\n  spread: 2,\n  duration: 200,\n  offset: 2,\n  position: \"relative\",\n  customStyles: {},\n  keyboardNavigation: true,\n  autoFocus: false,\n  focusTrap: false,\n  restoreFocus: false,\n};\n\nexport function useGlassFocus(options: GlassFocusOptions = {}) {\n  const elementRef = useRef<HTMLElement>(null);\n  const previousFocusedElementRef = useRef<Element | null>(null);\n  const focusOriginRef = useRef<\"mouse\" | \"keyboard\" | \"programmatic\" | null>(\n    null\n  );\n\n  const [focusState, setFocusState] = useState<GlassFocusState>({\n    isFocused: false,\n    isKeyboardFocused: false,\n    focusOrigin: null,\n    focusRingVisible: false,\n    previousFocusedElement: null,\n  });\n\n  const finalOptions = {\n    ...DEFAULT_OPTIONS,\n    ...Object.fromEntries(\n      Object.entries(options).filter(([, value]) => value !== undefined)\n    ),\n  } as Required<GlassFocusOptions>;\n\n  // Base inline styles only (no pseudo-selectors here)\n  const baseStyle = useCallback((): React.CSSProperties => {\n    if (!finalOptions.enabled) return {};\n    return {\n      outline: \"none\",\n      position: \"relative\",\n      // pseudo-element styles are applied by CSS-in-JS in the wrapper component\n    } as React.CSSProperties;\n  }, [finalOptions.enabled]);\n\n  // Handle focus events\n  const handleFocus = useCallback(\n    (event: FocusEvent) => {\n      const target = event.target as HTMLElement;\n\n      // Determine focus origin\n      if (event.relatedTarget) {\n        focusOriginRef.current = \"keyboard\";\n      } else if (focusOriginRef.current === null) {\n        focusOriginRef.current = \"programmatic\";\n      }\n\n      setFocusState((prev) => ({\n        ...prev,\n        isFocused: true,\n        isKeyboardFocused: focusOriginRef.current === \"keyboard\",\n        focusOrigin: focusOriginRef.current,\n        focusRingVisible:\n          finalOptions.enabled && focusOriginRef.current === \"keyboard\",\n      }));\n\n      // Apply focus styles\n      if (target && finalOptions.enabled) {\n        target.classList.add(\"glass-focus-visible\");\n\n        if (focusOriginRef.current === \"keyboard\") {\n          target.classList.add(\"glass-focus-keyboard\");\n        }\n      }\n    },\n    [finalOptions.enabled]\n  );\n\n  const handleBlur = useCallback((event: FocusEvent) => {\n    const target = event.target as HTMLElement;\n\n    setFocusState((prev) => ({\n      ...prev,\n      isFocused: false,\n      isKeyboardFocused: false,\n      focusOrigin: null,\n      focusRingVisible: false,\n    }));\n\n    // Remove focus styles\n    if (target) {\n      target.classList.remove(\"glass-focus-visible\", \"glass-focus-keyboard\");\n    }\n  }, []);\n\n  // Handle mouse down to detect mouse focus\n  const handleMouseDown = useCallback(() => {\n    focusOriginRef.current = \"mouse\";\n  }, []);\n\n  // Handle key down to detect keyboard focus\n  const handleKeyDown = useCallback((event: KeyboardEvent) => {\n    if (\n      [\n        \"Tab\",\n        \"ArrowUp\",\n        \"ArrowDown\",\n        \"ArrowLeft\",\n        \"ArrowRight\",\n        \"Enter\",\n        \" \",\n      ].includes(event.key)\n    ) {\n      focusOriginRef.current = \"keyboard\";\n    }\n  }, []);\n\n  // Programmatic focus methods\n  const focus = useCallback(() => {\n    if (elementRef.current && finalOptions.enabled) {\n      focusOriginRef.current = \"programmatic\";\n      elementRef.current.focus();\n    }\n  }, [finalOptions.enabled]);\n\n  const blur = useCallback(() => {\n    if (elementRef.current) {\n      elementRef.current.blur();\n    }\n  }, []);\n\n  // Focus trap implementation\n  const setupFocusTrap = useCallback(() => {\n    if (!finalOptions.focusTrap || !elementRef.current) return;\n\n    const element = elementRef.current;\n    const focusableElements = element.querySelectorAll(\n      'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n    );\n\n    const firstElement = focusableElements[0] as HTMLElement;\n    const lastElement = focusableElements[\n      focusableElements.length - 1\n    ] as HTMLElement;\n\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Tab\") {\n        if (event.shiftKey) {\n          if (document.activeElement === firstElement) {\n            event.preventDefault();\n            lastElement?.focus();\n          }\n        } else {\n          if (document.activeElement === lastElement) {\n            event.preventDefault();\n            firstElement?.focus();\n          }\n        }\n      }\n    };\n\n    element.addEventListener(\"keydown\", handleKeyDown);\n\n    return () => {\n      element.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [finalOptions.focusTrap]);\n\n  // Setup event listeners\n  useEffect(() => {\n    const element = elementRef.current;\n    if (!element) return;\n\n    // Store previous focused element for restoration\n    if (finalOptions.restoreFocus) {\n      previousFocusedElementRef.current = document.activeElement;\n    }\n\n    // Add event listeners\n    element.addEventListener(\"focus\", handleFocus);\n    element.addEventListener(\"blur\", handleBlur);\n    element.addEventListener(\"mousedown\", handleMouseDown);\n\n    if (finalOptions.keyboardNavigation) {\n      element.addEventListener(\"keydown\", handleKeyDown);\n    }\n\n    // Setup focus trap\n    const cleanupFocusTrap = setupFocusTrap();\n\n    // Auto-focus if enabled\n    if (finalOptions.autoFocus) {\n      setTimeout(() => focus(), 0);\n    }\n\n    return () => {\n      element.removeEventListener(\"focus\", handleFocus);\n      element.removeEventListener(\"blur\", handleBlur);\n      element.removeEventListener(\"mousedown\", handleMouseDown);\n\n      if (finalOptions.keyboardNavigation) {\n        element.removeEventListener(\"keydown\", handleKeyDown);\n      }\n\n      cleanupFocusTrap?.();\n\n      // Restore focus if enabled\n      if (finalOptions.restoreFocus && previousFocusedElementRef.current) {\n        setTimeout(() => {\n          (previousFocusedElementRef.current as HTMLElement)?.focus?.();\n        }, 0);\n      }\n    };\n  }, [\n    handleFocus,\n    handleBlur,\n    handleMouseDown,\n    handleKeyDown,\n    setupFocusTrap,\n    finalOptions.autoFocus,\n    finalOptions.keyboardNavigation,\n    finalOptions.restoreFocus,\n  ]);\n\n  return {\n    ref: elementRef,\n    focusState,\n    baseStyle: baseStyle(),\n    focus,\n    blur,\n    options: finalOptions,\n  };\n}\n\n// Hook for managing focus within a group of elements\nexport function useGlassFocusGroup(\n  options: GlassFocusOptions & {\n    elements: HTMLElement[];\n    loop?: boolean;\n  } = { elements: [] }\n) {\n  const { elements, loop = true, ...focusOptions } = options;\n  const [currentFocusIndex, setCurrentFocusIndex] = useState(-1);\n\n  const moveFocus = useCallback(\n    (direction: \"next\" | \"previous\" | \"first\" | \"last\") => {\n      if (elements.length === 0) return;\n\n      let newIndex: number;\n\n      switch (direction) {\n        case \"first\":\n          newIndex = 0;\n          break;\n        case \"last\":\n          newIndex = elements.length - 1;\n          break;\n        case \"next\":\n          newIndex = loop\n            ? (currentFocusIndex + 1) % elements.length\n            : Math.min(currentFocusIndex + 1, elements.length - 1);\n          break;\n        case \"previous\":\n          newIndex = loop\n            ? (currentFocusIndex - 1 + elements.length) % elements.length\n            : Math.max(currentFocusIndex - 1, 0);\n          break;\n      }\n\n      setCurrentFocusIndex(newIndex);\n      elements[newIndex]?.focus();\n    },\n    [elements, currentFocusIndex, loop]\n  );\n\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      switch (event.key) {\n        case \"ArrowRight\":\n        case \"ArrowDown\":\n          event.preventDefault();\n          moveFocus(\"next\");\n          break;\n        case \"ArrowLeft\":\n        case \"ArrowUp\":\n          event.preventDefault();\n          moveFocus(\"previous\");\n          break;\n        case \"Home\":\n          event.preventDefault();\n          moveFocus(\"first\");\n          break;\n        case \"End\":\n          event.preventDefault();\n          moveFocus(\"last\");\n          break;\n      }\n    },\n    [moveFocus]\n  );\n\n  useEffect(() => {\n    const handleGlobalKeyDown = (event: KeyboardEvent) => {\n      if (elements.includes(event.target as HTMLElement)) {\n        handleKeyDown(event);\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleGlobalKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleGlobalKeyDown);\n  }, [elements, handleKeyDown]);\n\n  return {\n    currentFocusIndex,\n    moveFocus,\n    focusOptions,\n  };\n}\n\n// Hook for skip links (accessibility)\nexport function useSkipLinks(\n  links: Array<{ id: string; label: string; targetId: string }>\n) {\n  const [visible, setVisible] = useState(false);\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Tab\" && !visible) {\n        setVisible(true);\n      }\n    };\n\n    const handleClick = () => {\n      setVisible(false);\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    document.addEventListener(\"click\", handleClick);\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n      document.removeEventListener(\"click\", handleClick);\n    };\n  }, [visible]);\n\n  const skipTo = useCallback((targetId: string) => {\n    const target = document.getElementById(targetId);\n    if (target) {\n      target.focus();\n      target.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n    setVisible(false);\n  }, []);\n\n  return {\n    visible,\n    links,\n    skipTo,\n  };\n}\n", ".wrapper {\n  position: relative;\n  outline: none;\n}\n\n.wrapper::before {\n  content: '';\n  position: absolute;\n  inset: calc(var(--glass-focus-offset) * -1);\n  border-radius: inherit;\n  border: var(--glass-focus-width) solid var(--glass-focus-color);\n  filter: blur(var(--glass-focus-blur));\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity var(--glass-focus-duration) ease;\n  z-index: -1;\n}\n\n.wrapper.glass-focus-visible::before {\n  opacity: 1;\n}\n\n.wrapper.glass-focus-keyboard::before {\n  box-shadow: 0 0 var(--glass-focus-spread) var(--glass-focus-color);\n}\n\n.placeholder {\n  display: inline-flex;\n}\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useCallback, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassCard } from \"../card/GlassCard\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\nimport { GlassTextArea } from \"../input/GlassInput\";\nimport { GlassSelect } from \"../input/GlassSelect\";\nimport { GlassCheckbox } from \"../input/GlassCheckbox\";\n\nexport interface FormField {\n  id: string;\n  type:\n    | \"text\"\n    | \"email\"\n    | \"password\"\n    | \"number\"\n    | \"tel\"\n    | \"url\"\n    | \"textarea\"\n    | \"select\"\n    | \"checkbox\"\n    | \"radio\"\n    | \"date\"\n    | \"file\";\n  label: string;\n  placeholder?: string;\n  description?: string;\n  required?: boolean;\n  disabled?: boolean;\n  options?: { value: string; label: string }[];\n  validation?: {\n    min?: number;\n    max?: number;\n    minLength?: number;\n    maxLength?: number;\n    pattern?: string;\n    custom?: (value: FormFieldValue) => string | null;\n  };\n  defaultValue?: FormFieldValue;\n  conditional?: {\n    field: string;\n    operator:\n      | \"equals\"\n      | \"not_equals\"\n      | \"contains\"\n      | \"greater_than\"\n      | \"less_than\";\n    value: FormFieldValue;\n  };\n  layout?: {\n    width?: \"full\" | \"half\" | \"third\" | \"quarter\";\n    order?: number;\n  };\n}\n\nexport type FormFieldValue = unknown;\n\nexport interface FormSection {\n  id: string;\n  title: string;\n  description?: string;\n  fields: FormField[];\n  collapsible?: boolean;\n  defaultExpanded?: boolean;\n}\n\nexport interface FormValue {\n  [fieldId: string]: FormFieldValue;\n}\n\nexport interface FormError {\n  [fieldId: string]: string;\n}\n\nexport interface GlassFormBuilderProps {\n  /**\n   * Form schema\n   */\n  schema?: FormSection[];\n  /**\n   * Form values\n   */\n  values?: FormValue;\n  /**\n   * Form errors\n   */\n  errors?: FormError;\n  /**\n   * Value change handler\n   */\n  onChange?: (values: FormValue) => void;\n  /**\n   * Form submit handler\n   */\n  onSubmit?: (values: FormValue) => void;\n  /**\n   * Validation handler\n   */\n  onValidate?: (values: FormValue) => FormError;\n  /**\n   * Form variant\n   */\n  variant?: \"default\" | \"compact\" | \"wizard\" | \"inline\";\n  /**\n   * Form size\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Whether form is loading\n   */\n  loading?: boolean;\n  /**\n   * Whether form is disabled\n   */\n  disabled?: boolean;\n  /**\n   * Form title\n   */\n  title?: string;\n  /**\n   * Form description\n   */\n  description?: string;\n  /**\n   * Submit button text\n   */\n  submitText?: string;\n  /**\n   * Cancel button text\n   */\n  cancelText?: string;\n  /**\n   * Show cancel button\n   */\n  showCancel?: boolean;\n  /**\n   * Cancel handler\n   */\n  onCancel?: () => void;\n  /**\n   * Auto-save functionality\n   */\n  autoSave?: boolean;\n  /**\n   * Auto-save delay in ms\n   */\n  autoSaveDelay?: number;\n  /**\n   * Show field count\n   */\n  showProgress?: boolean;\n  /**\n   * Validate on change\n   */\n  validateOnChange?: boolean;\n  /**\n   * Custom field renderer\n   */\n  renderField?: (\n    field: FormField,\n    value: FormFieldValue,\n    onChange: (value: FormFieldValue) => void,\n    error?: string\n  ) => React.ReactNode;\n  className?: string;\n}\n\n/**\n * GlassFormBuilder component\n * Dynamic form generator with glassmorphism styling\n */\nexport const GlassFormBuilder = forwardRef<\n  HTMLFormElement,\n  GlassFormBuilderProps\n>(\n  (\n    {\n      schema = [],\n      values = {},\n      errors = {},\n      onChange,\n      onSubmit,\n      onValidate,\n      variant = \"default\",\n      size = \"md\",\n      loading = false,\n      disabled = false,\n      title,\n      description,\n      submitText = \"Submit\",\n      cancelText = \"Cancel\",\n      showCancel = false,\n      onCancel,\n      autoSave = false,\n      autoSaveDelay = 1000,\n      showProgress = false,\n      validateOnChange = true,\n      renderField,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValues, setInternalValues] = useState<FormValue>(values);\n    const [internalErrors, setInternalErrors] = useState<FormError>(errors);\n    const [expandedSections, setExpandedSections] = useState<Set<string>>(\n      new Set(\n        schema\n          ?.filter((section) => section && section.defaultExpanded !== false)\n          .map((section) => section.id)\n          .filter(Boolean) || []\n      )\n    );\n    const [autoSaveTimer, setAutoSaveTimer] = useState<NodeJS.Timeout>();\n\n    const sizeClasses = {\n      sm: \"glass-text-sm\",\n      md: \"glass-text-base\",\n      lg: \"glass-text-lg\",\n    };\n\n    const variantClasses = {\n      default: \"glass-auto-gap glass-auto-gap-2xl\",\n      compact: \"glass-auto-gap glass-auto-gap-lg\",\n      wizard: \"glass-auto-gap glass-auto-gap-3xl\",\n      inline: \"glass-auto-gap glass-auto-gap-sm\",\n    };\n\n    // Get all fields for progress calculation\n    const allFields =\n      schema\n        ?.flatMap((section) => section?.fields || [])\n        .filter((field): field is FormField => Boolean(field)) || [];\n    const filledFields = allFields.filter((field) => {\n      if (!field || !field.id) return false;\n      const value = internalValues[field.id];\n      return value !== undefined && value !== \"\" && value !== null;\n    });\n\n    // Handle value change\n    const handleValueChange = useCallback(\n      (fieldId: string, value: FormFieldValue) => {\n        const newValues = { ...internalValues, [fieldId]: value };\n        setInternalValues(newValues);\n        onChange?.(newValues);\n\n        // Auto-save\n        if (autoSave) {\n          if (autoSaveTimer) {\n            clearTimeout(autoSaveTimer);\n          }\n          setAutoSaveTimer(\n            setTimeout(() => {\n              onSubmit?.(newValues);\n            }, autoSaveDelay)\n          );\n        }\n\n        // Validate on change\n        if (validateOnChange && onValidate) {\n          const newErrors = onValidate(newValues);\n          setInternalErrors(newErrors);\n        }\n      },\n      [\n        internalValues,\n        onChange,\n        autoSave,\n        autoSaveTimer,\n        autoSaveDelay,\n        onSubmit,\n        validateOnChange,\n        onValidate,\n      ]\n    );\n\n    // Check if field should be shown based on conditional logic\n    const shouldShowField = useCallback(\n      (field: FormField) => {\n        if (!field.conditional) return true;\n\n        const {\n          field: conditionField,\n          operator,\n          value: conditionValue,\n        } = field.conditional;\n        const fieldValue = internalValues[conditionField];\n\n        switch (operator) {\n          case \"equals\":\n            return fieldValue === conditionValue;\n          case \"not_equals\":\n            return fieldValue !== conditionValue;\n          case \"contains\":\n            return String(fieldValue).includes(String(conditionValue));\n          case \"greater_than\":\n            return Number(fieldValue) > Number(conditionValue);\n          case \"less_than\":\n            return Number(fieldValue) < Number(conditionValue);\n          default:\n            return true;\n        }\n      },\n      [internalValues]\n    );\n\n    // Validate field\n    const validateField = (\n      field: FormField,\n      value: FormFieldValue\n    ): string | null => {\n      if (field.required && (!value || value === \"\")) {\n        return `${field.label} is required`;\n      }\n\n      if (field.validation) {\n        const { min, max, minLength, maxLength, pattern, custom } =\n          field.validation;\n\n        if (min !== undefined && Number(value) < min) {\n          return `${field.label} must be at least ${min}`;\n        }\n\n        if (max !== undefined && Number(value) > max) {\n          return `${field.label} must be at most ${max}`;\n        }\n\n        if (minLength !== undefined && String(value).length < minLength) {\n          return `${field.label} must be at least ${minLength} characters`;\n        }\n\n        if (maxLength !== undefined && String(value).length > maxLength) {\n          return `${field.label} must be at most ${maxLength} characters`;\n        }\n\n        if (pattern && !new RegExp(pattern).test(String(value))) {\n          return `${field.label} format is invalid`;\n        }\n\n        if (custom) {\n          const customError = custom(value);\n          if (customError) return customError;\n        }\n      }\n\n      return null;\n    };\n\n    // Render field based on type\n    const renderFieldComponent = (field: FormField) => {\n      if (!field || !field.id) return null;\n\n      const value = internalValues[field.id] ?? field.defaultValue ?? \"\";\n      const inputValue =\n        typeof value === \"string\" || typeof value === \"number\" ? value : \"\";\n      const error = internalErrors[field.id];\n      const isDisabled = disabled || field.disabled;\n\n      // Use custom renderer if provided\n      if (renderField) {\n        return renderField(\n          field,\n          value,\n          (newValue) => handleValueChange(field.id, newValue),\n          error\n        );\n      }\n\n      const baseProps = {\n        id: field.id,\n        label: field.label,\n        placeholder: field.placeholder,\n        disabled: isDisabled,\n        error: error,\n        required: field.required,\n        size,\n        fullWidth: true,\n      };\n\n      switch (field.type) {\n        case \"text\":\n        case \"email\":\n        case \"password\":\n        case \"number\":\n        case \"tel\":\n        case \"url\":\n        case \"date\":\n          return (\n            <GlassInput\n              data-glass-component\n              {...baseProps}\n              type={field.type}\n              value={inputValue}\n              onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n                handleValueChange(field.id, e.target.value)\n              }\n            />\n          );\n\n        case \"textarea\":\n          return (\n            <GlassTextArea\n              {...baseProps}\n              value={inputValue}\n              onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n                handleValueChange(field.id, e.target.value)\n              }\n              rows={4}\n            />\n          );\n\n        case \"select\":\n          return (\n            <GlassSelect\n              {...baseProps}\n              value={inputValue}\n              onChange={(e: React.ChangeEvent<HTMLSelectElement>) =>\n                handleValueChange(field.id, e.target.value)\n              }\n              options={field.options || []}\n            />\n          );\n\n        case \"checkbox\":\n          return (\n            <GlassCheckbox\n              id={field.id}\n              label={field.label}\n              checked={Boolean(value)}\n              onChange={(e) => handleValueChange(field.id, e.target.checked)}\n              disabled={isDisabled}\n              required={field.required}\n              size={size === \"lg\" ? \"lg\" : size === \"sm\" ? \"sm\" : \"md\"}\n            />\n          );\n\n        case \"radio\":\n          return (\n            <div className=\"glass-auto-gap glass-auto-gap-sm\">\n              <label\n                className={cn(\"font-medium text-foreground\", sizeClasses[size])}\n              >\n                {field.label}\n                {field.required && (\n                  <span className=\"glass-text-danger glass-ml-1\">*</span>\n                )}\n              </label>\n              <div className=\"glass-auto-gap glass-auto-gap-sm\">\n                {field.options?.map((option) => (\n                  <label\n                    key={option.value}\n                    className=\"glass-flex glass-items-center glass-gap-3 glass-cursor-pointer\"\n                  >\n                    <GlassInput\n                      type=\"radio\"\n                      name={field.id}\n                      value={option.value}\n                      checked={value === option.value}\n                      onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n                        handleValueChange(field.id, e.target.value)\n                      }\n                      disabled={isDisabled}\n                      className=\"glass-border-glass-border glass-focus-ring-primary\"\n                    />\n                    <span className=\"glass-text-sm\">{option.label}</span>\n                  </label>\n                ))}\n              </div>\n            </div>\n          );\n\n        default:\n          return null;\n      }\n    };\n\n    // Get field width class\n    const getFieldWidthClass = (field: FormField) => {\n      if (!field) return \"md:col-span-12\";\n\n      switch (field.layout?.width) {\n        case \"half\":\n          return \"md:col-span-6\";\n        case \"third\":\n          return \"md:col-span-4\";\n        case \"quarter\":\n          return \"md:col-span-3\";\n        default:\n          return \"md:col-span-12\";\n      }\n    };\n\n    // Handle form submission\n    const handleSubmit = (e: React.FormEvent) => {\n      e.preventDefault();\n\n      // Validate all fields\n      const newErrors: FormError = {};\n      allFields.forEach((field) => {\n        if (field && field.id && shouldShowField(field)) {\n          const value = internalValues[field.id];\n          const error = validateField(field, value);\n          if (error) {\n            newErrors[field.id] = error;\n          }\n        }\n      });\n\n      setInternalErrors(newErrors);\n\n      // Submit if no errors\n      if (Object.keys(newErrors).length === 0) {\n        onSubmit?.(internalValues);\n      }\n    };\n\n    // Toggle section expansion\n    const toggleSection = (sectionId: string) => {\n      const newExpanded = new Set(expandedSections);\n      if (newExpanded.has(sectionId)) {\n        newExpanded.delete(sectionId);\n      } else {\n        newExpanded.add(sectionId);\n      }\n      setExpandedSections(newExpanded);\n    };\n\n    return (\n      <form\n        ref={ref}\n        onSubmit={handleSubmit}\n        className={cn(\"w-full\", className)}\n        {...props}\n      >\n        {/* Form header */}\n        {(title || description || showProgress) && (\n          <div className=\"glass-mb-6\">\n            {title && (\n              <h2\n                className={cn(\"font-semibold text-foreground glass-mb-2\", {\n                  \"glass-text-lg\": size === \"sm\",\n                  \"glass-text-xl\": size === \"md\",\n                  \"glass-text-2xl\": size === \"lg\",\n                })}\n              >\n                {title}\n              </h2>\n            )}\n\n            {description && (\n              <p className=\"glass-text-secondary glass-mb-4\">{description}</p>\n            )}\n\n            {showProgress && (\n              <div className=\"glass-flex glass-items-center glass-gap-4\">\n                <div className=\"glass-flex-1 glass-surface-subtle glass-radius-full glass-h-2\">\n                  <div\n                    className=\"glass-surface-primary glass-h-2 glass-radius-full glass-transition-all glass-duration-300\"\n                    style={{\n                      width: `${allFields.length > 0 ? (filledFields.length / allFields.length) * 100 : 0}%`,\n                    }}\n                  />\n                </div>\n                <span className=\"glass-text-sm glass-text-secondary\">\n                  {filledFields.length} / {allFields.length} completed\n                </span>\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Form sections */}\n        <div className={variantClasses[variant]}>\n          {schema && schema.length > 0 ? (\n            schema\n              .filter(\n                (section) =>\n                  section &&\n                  section.id &&\n                  section.fields &&\n                  section.fields.length > 0\n              )\n              .map((section) => (\n                <Motion key={section.id} preset=\"slideDown\">\n                  <GlassCard variant=\"default\" className=\"glass-p-6\">\n                    {/* Section header */}\n                    <div\n                      className={cn(\n                        \"flex items-center justify-between glass-mb-4\",\n                        section.collapsible && \"cursor-pointer\"\n                      )}\n                      onClick={\n                        section.collapsible\n                          ? () => toggleSection(section.id)\n                          : undefined\n                      }\n                    >\n                      <div>\n                        <h3\n                          className={cn(\"font-medium text-foreground\", {\n                            \"glass-text-base\": size === \"sm\",\n                            \"glass-text-lg\": size === \"md\",\n                            \"glass-text-xl\": size === \"lg\",\n                          })}\n                        >\n                          {section.title}\n                        </h3>\n                        {section.description && (\n                          <p className=\"glass-text-sm glass-text-secondary glass-mt-1\">\n                            {section.description}\n                          </p>\n                        )}\n                      </div>\n\n                      {section.collapsible && (\n                        <GlassButton\n                          leftIcon={\n                            expandedSections.has(section.id) ? \"\u2212\" : \"+\"\n                          }\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          aria-label={\n                            expandedSections.has(section.id)\n                              ? \"Collapse section\"\n                              : \"Expand section\"\n                          }\n                        />\n                      )}\n                    </div>\n\n                    {/* Section fields */}\n                    {(!section.collapsible ||\n                      expandedSections.has(section.id)) && (\n                      <div className=\"glass-grid glass-grid-cols-12 glass-gap-4\">\n                        {section.fields\n                          ?.filter(\n                            (field) =>\n                              field && field.id && shouldShowField(field)\n                          )\n                          ?.sort(\n                            (a, b) =>\n                              (a?.layout?.order || 0) - (b?.layout?.order || 0)\n                          )\n                          ?.map((field) => (\n                            <div\n                              key={field.id}\n                              className={cn(\n                                \"col-span-12\",\n                                getFieldWidthClass(field)\n                              )}\n                            >\n                              {renderFieldComponent(field)}\n                              {field.description && (\n                                <p className=\"glass-text-xs glass-text-secondary glass-mt-1\">\n                                  {field.description}\n                                </p>\n                              )}\n                            </div>\n                          ))}\n                      </div>\n                    )}\n                  </GlassCard>\n                </Motion>\n              ))\n          ) : (\n            <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n              <p>No form sections configured</p>\n            </div>\n          )}\n        </div>\n\n        {/* Form actions */}\n        <div className=\"glass-flex glass-items-center glass-justify-end glass-gap-3 glass-mt-8\">\n          {autoSave && (\n            <GlassBadge variant=\"outline\" size=\"sm\">\n              Auto-save enabled\n            </GlassBadge>\n          )}\n\n          {showCancel && (\n            <GlassButton\n              type=\"button\"\n              variant=\"ghost\"\n              size={size}\n              onClick={onCancel}\n              disabled={loading}\n            >\n              {cancelText}\n            </GlassButton>\n          )}\n\n          <GlassButton\n            type=\"submit\"\n            variant=\"default\"\n            size={size}\n            loading={loading}\n            disabled={disabled}\n            aria-label={submitText || \"Submit form\"}\n          >\n            {submitText}\n          </GlassButton>\n        </div>\n      </form>\n    );\n  }\n);\n\nGlassFormBuilder.displayName = \"GlassFormBuilder\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ChevronLeft,\n  ChevronRight,\n  Eye,\n  Grid3X3,\n  Heart,\n  List,\n  Share2,\n  X,\n  ZoomIn,\n} from \"@/icons\";\nimport React, { useCallback, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\nimport { GlassImageViewer } from \"./GlassImageViewer\";\n\nexport interface GalleryImage {\n  id: string;\n  src: string;\n  alt?: string;\n  title?: string;\n  description?: string;\n  thumbnail?: string;\n  width?: number;\n  height?: number;\n  tags?: string[];\n  likes?: number;\n  views?: number;\n  createdAt?: Date;\n  category?: string;\n}\n\nexport interface GlassGalleryProps {\n  /**\n   * Gallery images\n   */\n  images?: GalleryImage[];\n  /**\n   * Gallery layout\n   */\n  layout?: \"grid\" | \"masonry\" | \"list\";\n  /**\n   * Grid columns\n   */\n  columns?: number;\n  /**\n   * Image aspect ratio\n   */\n  aspectRatio?: \"square\" | \"portrait\" | \"landscape\" | \"auto\";\n  /**\n   * Show image info\n   */\n  showInfo?: boolean;\n  /**\n   * Show image actions\n   */\n  showActions?: boolean;\n  /**\n   * Enable lightbox\n   */\n  enableLightbox?: boolean;\n  /**\n   * Show filters\n   */\n  showFilters?: boolean;\n  /**\n   * Enable selection mode\n   */\n  enableSelection?: boolean;\n  /**\n   * Compact preview/card layout.\n   */\n  compact?: boolean;\n  /**\n   * Bound the gallery inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained galleries.\n   */\n  maxHeight?: number | string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Image click handler\n   */\n  onImageClick?: (image: GalleryImage, index: number) => void;\n  /**\n   * Selection change handler\n   */\n  onSelectionChange?: (selectedImages: GalleryImage[]) => void;\n}\n\n/**\n * GlassGallery component\n * A responsive image gallery with grid, masonry, and list layouts\n */\nexport const GlassGallery: React.FC<GlassGalleryProps> = ({\n  images = [],\n  layout = \"grid\",\n  columns = 3,\n  aspectRatio = \"square\",\n  showInfo = true,\n  showActions = true,\n  enableLightbox = true,\n  showFilters = false,\n  enableSelection = false,\n  compact = false,\n  contained = false,\n  maxHeight,\n  className,\n  onImageClick,\n  onSelectionChange,\n  ...props\n}) => {\n  const [lightboxIndex, setLightboxIndex] = useState<number | null>(null);\n  const [selectedImages, setSelectedImages] = useState<Set<string>>(new Set());\n  const [viewMode, setViewMode] = useState<\"grid\" | \"list\">(\"grid\");\n  const [filterCategory, setFilterCategory] = useState<string>(\"all\");\n  const boundedHeight = maxHeight ?? (compact || contained ? 240 : undefined);\n\n  // Get aspect ratio classes\n  const getAspectRatioClass = useCallback(() => {\n    switch (aspectRatio) {\n      case \"square\":\n        return \"aspect-square\";\n      case \"portrait\":\n        return \"aspect-[3/4]\";\n      case \"landscape\":\n        return \"aspect-[4/3]\";\n      case \"auto\":\n      default:\n        return \"aspect-auto\";\n    }\n  }, [aspectRatio]);\n\n  // Get grid columns classes\n  const getGridColumnsClass = useCallback(() => {\n    const cols = Math.min(Math.max(columns, 1), 6);\n    if (compact) return \"grid-cols-2\";\n    return `grid-cols-1 sm:grid-cols-2 md:grid-cols-${Math.min(cols, 3)} lg:grid-cols-${Math.min(cols, 4)} xl:grid-cols-${cols}`;\n  }, [columns, compact]);\n\n  // Handle image click\n  const handleImageClick = useCallback(\n    (image: GalleryImage, index: number) => {\n      if (enableSelection) {\n        const newSelected = new Set(selectedImages);\n        if (newSelected.has(image.id)) {\n          newSelected.delete(image.id);\n        } else {\n          newSelected.add(image.id);\n        }\n        setSelectedImages(newSelected);\n        onSelectionChange?.(\n          images.filter((img: any) => newSelected.has(img.id))\n        );\n      } else if (enableLightbox) {\n        setLightboxIndex(index);\n      }\n\n      onImageClick?.(image, index);\n    },\n    [\n      enableSelection,\n      enableLightbox,\n      selectedImages,\n      images,\n      onImageClick,\n      onSelectionChange,\n    ]\n  );\n\n  // Handle lightbox navigation\n  const handleLightboxNav = useCallback(\n    (direction: \"prev\" | \"next\") => {\n      if (lightboxIndex === null) return;\n\n      let newIndex = lightboxIndex;\n      if (direction === \"prev\") {\n        newIndex = lightboxIndex > 0 ? lightboxIndex - 1 : images.length - 1;\n      } else {\n        newIndex = lightboxIndex < images.length - 1 ? lightboxIndex + 1 : 0;\n      }\n      setLightboxIndex(newIndex);\n    },\n    [lightboxIndex, images.length]\n  );\n\n  // Filter images by category\n  const filteredImages = images.filter(\n    (image: any) =>\n      filterCategory === \"all\" || image.category === filterCategory\n  );\n  const visibleImages = compact ? filteredImages.slice(0, 4) : filteredImages;\n\n  // Get unique categories\n  const categories = Array.from(\n    new Set(images.map((img: any) => img.category).filter(Boolean))\n  );\n\n  // Grid Layout\n  const renderGridLayout = () => (\n    <div className={cn(\"grid glass-gap-4\", getGridColumnsClass())}>\n      {visibleImages.map((image, index) => (\n        <div\n          key={image.id}\n          className=\"glass-group glass-relative glass-animate-fade-in\"\n          style={{\n            animationDelay: `${Math.min(index, 20) * 50}ms`,\n            animationFillMode: \"both\",\n          }}\n        >\n          <GlassCard\n            variant=\"elevated\"\n            interactive\n            onClick={(e) => handleImageClick(image, index)}\n            className={cn(\n              \"overflow-hidden cursor-pointer hover:scale-[1.02] transition-all duration-200 glass-sheen glass-tilt\",\n              selectedImages.has(image.id) && \"ring-2 ring-primary\",\n              getAspectRatioClass()\n            )}\n          >\n            <CardContent className=\"glass-p-0\">\n              <div className=\"glass-relative glass-overflow-hidden\">\n                <img\n                  src={image.thumbnail || image.src}\n                  alt={image.alt || image.title}\n                  className=\"glass-w-full glass-h-full glass-object-cover glass-transition-transform glass-duration-300 glass-group-glass-hover-scale-105\"\n                  loading=\"lazy\"\n                />\n\n                {/* Selection Indicator */}\n                {enableSelection && (\n                  <div className=\"glass-absolute glass-top-2 glass-left-2\">\n                    <div\n                      className={cn(\n                        \"w-5 h-5 glass-radius-md border-2 transition-all\",\n                        selectedImages.has(image.id)\n                          ? \"bg-primary border-primary\"\n                          : \"bg-white/20 border-white/40\"\n                      )}\n                    >\n                      {selectedImages.has(image.id) && (\n                        <div className=\"glass-w-full glass-h-full glass-flex glass-items-center glass-justify-center\">\n                          <div className=\"glass-w-2 glass-h-2 glass-surface-subtle glass-radius-full\" />\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                {/* Overlay with actions */}\n                <div className=\"glass-absolute glass-inset-0 glass-surface-dark/0 glass-group-hover:glass-surface-dark/40 glass-transition-all glass-duration-200\">\n                  <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity\">\n                    <div className=\"glass-flex glass-gap-2\">\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"sm\"\n                        onClick={(e) => {\n                          e.stopPropagation();\n                          if (enableLightbox) setLightboxIndex(index);\n                        }}\n                        className=\"glass-p-2\"\n                        aria-label={`View ${image.title || image.alt || \"image\"} in lightbox`}\n                      >\n                        <ZoomIn className=\"glass-w-4 glass-h-4\" />\n                      </GlassButton>\n\n                      {showActions && (\n                        <>\n                          <GlassButton\n                            variant=\"secondary\"\n                            size=\"sm\"\n                            onClick={(e) => e.stopPropagation()}\n                            className=\"glass-p-2\"\n                            aria-label={`Like ${image.title || image.alt || \"image\"}`}\n                          >\n                            <Heart className=\"glass-w-4 glass-h-4\" />\n                          </GlassButton>\n\n                          <GlassButton\n                            variant=\"secondary\"\n                            size=\"sm\"\n                            onClick={(e) => e.stopPropagation()}\n                            className=\"glass-p-2\"\n                            aria-label={`Share ${image.title || image.alt || \"image\"}`}\n                          >\n                            <Share2 className=\"glass-w-4 glass-h-4\" />\n                          </GlassButton>\n                        </>\n                      )}\n                    </div>\n                  </div>\n                </div>\n\n                {/* Image Info */}\n                {!compact && showInfo && image.title && (\n                  <div className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-p-3 glass-gradient-primary glass-gradient-primary glass-gradient-primary\">\n                    <h3 className=\"glass-text-primary glass-font-medium glass-text-sm glass-truncate\">\n                      {image.title}\n                    </h3>\n                    {image.description && (\n                      <p className=\"glass-text-primary-glass-opacity-80 glass-text-xs glass-mt-1 glass-line-clamp-2\">\n                        {image.description}\n                      </p>\n                    )}\n                  </div>\n                )}\n              </div>\n\n              {/* Card Footer */}\n              {!compact && (image.likes || image.views || image.tags) && (\n                <div className=\"glass-p-3 glass-border-t glass-border-white/10\">\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-primary-glass-opacity-60\">\n                    <div className=\"glass-flex glass-items-center glass-gap-3\">\n                      {image.likes && (\n                        <span className=\"glass-flex glass-items-center glass-gap-1\">\n                          <Heart className=\"glass-w-3 glass-h-3\" />\n                          {image.likes}\n                        </span>\n                      )}\n                      {image.views && (\n                        <span className=\"glass-flex glass-items-center glass-gap-1\">\n                          <Eye className=\"glass-w-3 glass-h-3\" />\n                          {image.views}\n                        </span>\n                      )}\n                    </div>\n\n                    {image.tags && image.tags.length > 0 && (\n                      <div className=\"glass-flex glass-gap-1\">\n                        {image.tags.slice(0, 2).map((tag, tagIndex) => (\n                          <GlassBadge\n                            key={tagIndex}\n                            variant=\"outline\"\n                            size=\"sm\"\n                          >\n                            {tag}\n                          </GlassBadge>\n                        ))}\n                      </div>\n                    )}\n                  </div>\n                </div>\n              )}\n            </CardContent>\n          </GlassCard>\n        </div>\n      ))}\n    </div>\n  );\n\n  // List Layout\n  const renderListLayout = () => (\n    <div className=\"glass-auto-gap glass-auto-gap-lg\">\n      {visibleImages.map((image, index) => (\n        <div\n          key={image.id}\n          className=\"glass-animate-slide-in-up\"\n          style={{\n            animationDelay: `${Math.min(index, 20) * 50}ms`,\n            animationFillMode: \"both\",\n          }}\n        >\n          <GlassCard\n            variant=\"elevated\"\n            interactive\n            onClick={(e) => handleImageClick(image, index)}\n            className=\"glass-overflow-hidden glass-cursor-pointer glass-hover-scale-1-01 glass-transition-transform\"\n          >\n            <CardContent className=\"glass-p-0\">\n              <div className=\"glass-flex\">\n                <div className=\"glass-w-32 glass-h-32 glass-flex-shrink-0\">\n                  <img\n                    src={image.thumbnail || image.src}\n                    alt={image.alt || image.title}\n                    className=\"glass-w-full glass-h-full glass-object-cover\"\n                    loading=\"lazy\"\n                  />\n                </div>\n\n                <div className=\"glass-flex-1 glass-p-4\">\n                  <div className=\"glass-flex glass-items-start glass-justify-between\">\n                    <div className=\"glass-flex-1\">\n                      <h3 className=\"glass-text-primary glass-font-medium glass-mb-1\">\n                        {image.title}\n                      </h3>\n                      {image.description && (\n                        <p className=\"glass-text-primary-opacity-70 glass-text-sm glass-mb-2\">\n                          {image.description}\n                        </p>\n                      )}\n\n                      <div className=\"glass-flex glass-items-center glass-gap-4 glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {image.likes && (\n                          <span className=\"glass-flex glass-items-center glass-gap-1\">\n                            <Heart className=\"glass-w-3 glass-h-3\" />\n                            {image.likes}\n                          </span>\n                        )}\n                        {image.views && (\n                          <span className=\"glass-flex glass-items-center glass-gap-1\">\n                            <Eye className=\"glass-w-3 glass-h-3\" />\n                            {image.views}\n                          </span>\n                        )}\n                        {image.createdAt && (\n                          <span>{image.createdAt.toLocaleDateString()}</span>\n                        )}\n                      </div>\n                    </div>\n\n                    {showActions && (\n                      <div className=\"glass-flex glass-gap-1 glass-ml-4\">\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => {\n                            e.stopPropagation();\n                            if (enableLightbox) setLightboxIndex(index);\n                          }}\n                          className=\"glass-p-2\"\n                          aria-label={`View ${image.title || image.alt || \"image\"} in lightbox`}\n                        >\n                          <ZoomIn className=\"glass-w-4 glass-h-4\" />\n                        </GlassButton>\n\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => e.stopPropagation()}\n                          className=\"glass-p-2\"\n                          aria-label={`Like ${image.title || image.alt || \"image\"}`}\n                        >\n                          <Heart className=\"glass-w-4 glass-h-4\" />\n                        </GlassButton>\n\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={(e) => e.stopPropagation()}\n                          className=\"glass-p-2\"\n                          aria-label={`Share ${image.title || image.alt || \"image\"}`}\n                        >\n                          <Share2 className=\"glass-w-4 glass-h-4\" />\n                        </GlassButton>\n                      </div>\n                    )}\n                  </div>\n\n                  {image.tags && image.tags.length > 0 && (\n                    <div className=\"glass-flex glass-gap-1 glass-mt-3\">\n                      {image.tags.map((tag, tagIndex) => (\n                        <GlassBadge key={tagIndex} variant=\"outline\" size=\"sm\">\n                          {tag}\n                        </GlassBadge>\n                      ))}\n                    </div>\n                  )}\n                </div>\n              </div>\n            </CardContent>\n          </GlassCard>\n        </div>\n      ))}\n    </div>\n  );\n\n  // Lightbox Modal\n  const renderLightbox = () => {\n    if (lightboxIndex === null) return null;\n\n    const image = images[lightboxIndex];\n\n    return (\n      <div\n        data-glass-component\n        className=\"glass-fixed glass-inset-0 glass-z-50 glass-surface-dark/90 glass-flex glass-items-center glass-justify-center glass-p-4\"\n      >\n        <div className=\"glass-relative glass-max-w-4xl glass-max-h-full\">\n          {/* Close Button */}\n          <GlassButton\n            variant=\"secondary\"\n            size=\"sm\"\n            onClick={(e) => setLightboxIndex(null)}\n            className=\"glass-absolute glass-top-4 glass-right-4 glass-z-10\"\n            aria-label=\"Close lightbox\"\n          >\n            <X className=\"glass-w-4 glass-h-4\" />\n          </GlassButton>\n\n          {/* Navigation */}\n          {images.length > 1 && (\n            <>\n              <GlassButton\n                variant=\"secondary\"\n                size=\"lg\"\n                onClick={(e) => handleLightboxNav(\"prev\")}\n                className=\"glass-absolute glass-left-4 glass-top-1/2 glass-transform glass--translate-y-1-2\"\n                aria-label=\"Previous image\"\n              >\n                <ChevronLeft className=\"glass-w-6 glass-h-6\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"secondary\"\n                size=\"lg\"\n                onClick={(e) => handleLightboxNav(\"next\")}\n                className=\"glass-absolute glass-right-4 glass-top-1/2 glass-transform glass--translate-y-1-2\"\n                aria-label=\"Next image\"\n              >\n                <ChevronRight className=\"glass-w-6 glass-h-6\" />\n              </GlassButton>\n            </>\n          )}\n\n          {/* Image */}\n          <GlassImageViewer\n            images={images.map((img: any) => ({\n              src: img.src,\n              alt: img.alt,\n              title: img.title,\n            }))}\n            initialIndex={lightboxIndex}\n            enableZoom={true}\n            enablePan={true}\n            enableFullscreen={false}\n            onImageChange={setLightboxIndex}\n            className=\"glass-max-h-80vh\"\n          />\n\n          {/* Image Info */}\n          {image && (image.title || image.description) && (\n            <div className=\"glass-mt-4 glass-text-center\">\n              {image.title && (\n                <h3 className=\"glass-text-primary glass-text-lg glass-font-medium glass-mb-1\">\n                  {image.title}\n                </h3>\n              )}\n              {image.description && (\n                <p className=\"glass-text-primary-glass-opacity-80\">\n                  {image.description}\n                </p>\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <div\n        className={cn(\n          compact\n            ? \"glass-auto-gap glass-auto-gap-md\"\n            : \"glass-auto-gap glass-auto-gap-2xl\",\n          (compact || contained) && \"glass-overflow-auto\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n              }\n            : null),\n        }}\n        {...props}\n      >\n        {/* Header with filters and view options */}\n        {!compact && (\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-flex glass-items-center glass-gap-4\">\n              {showFilters && categories.length > 0 && (\n                <select\n                  value={filterCategory}\n                  onChange={(e) => setFilterCategory(e.target.value)}\n                  className=\"glass-bg-fill glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-px-3 glass-py-1 glass-text-sm glass-text-primary glass-focus-outline-none glass-focus-ring-white-opacity-30\"\n                >\n                  <option value=\"all\">All Categories</option>\n                  {categories.map((category: any) => (\n                    <option key={category} value={category}>\n                      {category}\n                    </option>\n                  ))}\n                </select>\n              )}\n\n              {enableSelection && selectedImages.size > 0 && (\n                <GlassBadge variant=\"primary\">\n                  {selectedImages.size} selected\n                </GlassBadge>\n              )}\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <GlassButton\n                variant={viewMode === \"grid\" ? \"primary\" : \"ghost\"}\n                size=\"sm\"\n                onClick={(e) => setViewMode(\"grid\")}\n                className=\"glass-p-2\"\n                aria-label=\"Switch to grid view\"\n              >\n                <Grid3X3 className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant={viewMode === \"list\" ? \"primary\" : \"ghost\"}\n                size=\"sm\"\n                onClick={(e) => setViewMode(\"list\")}\n                className=\"glass-p-2\"\n                aria-label=\"Switch to list view\"\n              >\n                <List className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            </div>\n          </div>\n        )}\n\n        {/* Gallery Content */}\n        {visibleImages.length === 0 ? (\n          <div className=\"glass-text-center glass-py-12\">\n            <div className=\"glass-text-primary-glass-opacity-60 glass-mb-4\">\n              <Grid3X3 className=\"glass-w-12 glass-h-12 glass-mx-auto\" />\n            </div>\n            <p className=\"glass-text-primary-glass-opacity-60\">\n              {filterCategory === \"all\"\n                ? \"No images to display\"\n                : `No images in ${filterCategory} category`}\n            </p>\n          </div>\n        ) : viewMode === \"grid\" ? (\n          renderGridLayout()\n        ) : (\n          renderListLayout()\n        )}\n\n        {/* Lightbox */}\n        {renderLightbox()}\n      </div>\n    </Motion>\n  );\n};\n\nexport default GlassGallery;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ChevronLeft,\n  ChevronRight,\n  Download,\n  Home,\n  Maximize2,\n  Minimize2,\n  Pause,\n  Play,\n  RotateCcw,\n  RotateCw,\n  X,\n  ZoomIn,\n  ZoomOut,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\n\nexport interface ImageViewerImage {\n  src: string;\n  alt?: string;\n  title?: string;\n  description?: string;\n  width?: number;\n  height?: number;\n}\n\nexport interface GlassImageViewerProps {\n  /**\n   * Images to display\n   */\n  images: ImageViewerImage[];\n  /**\n   * Initial image index\n   */\n  initialIndex?: number;\n  /**\n   * Enable zoom functionality\n   */\n  enableZoom?: boolean;\n  /**\n   * Enable pan functionality\n   */\n  enablePan?: boolean;\n  /**\n   * Enable rotation\n   */\n  enableRotation?: boolean;\n  /**\n   * Enable fullscreen mode\n   */\n  enableFullscreen?: boolean;\n  /**\n   * Render as a bounded embedded viewer instead of allowing viewport-fixed fullscreen.\n   */\n  contained?: boolean;\n  /**\n   * Use denser controls and hide nonessential copy for card/docs previews.\n   */\n  compact?: boolean;\n  /**\n   * Bounded viewer width.\n   */\n  width?: React.CSSProperties[\"width\"];\n  /**\n   * Bounded viewer height.\n   */\n  height?: React.CSSProperties[\"height\"];\n  /**\n   * Bounded viewer max-height.\n   */\n  maxHeight?: React.CSSProperties[\"maxHeight\"];\n  /**\n   * Enable image navigation\n   */\n  enableNavigation?: boolean;\n  /**\n   * Show zoom controls\n   */\n  showZoomControls?: boolean;\n  /**\n   * Show rotation controls\n   */\n  showRotationControls?: boolean;\n  /**\n   * Show download button\n   */\n  showDownloadButton?: boolean;\n  /**\n   * Show image info\n   */\n  showImageInfo?: boolean;\n  /**\n   * Auto-play slideshow\n   */\n  autoPlay?: boolean;\n  /**\n   * Auto-play interval in milliseconds\n   */\n  autoPlayInterval?: number;\n  /**\n   * Zoom levels\n   */\n  zoomLevels?: number[];\n  /**\n   * Minimum zoom level\n   */\n  minZoom?: number;\n  /**\n   * Maximum zoom level\n   */\n  maxZoom?: number;\n  /**\n   * Image fit mode\n   */\n  objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Error message\n   */\n  error?: string;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Image change callback\n   */\n  onImageChange?: (index: number) => void;\n  /**\n   * Zoom change callback\n   */\n  onZoomChange?: (zoom: number) => void;\n  /**\n   * Fullscreen change callback\n   */\n  onFullscreenChange?: (fullscreen: boolean) => void;\n}\n\n/**\n * GlassImageViewer component\n * A comprehensive image viewer with zoom, pan, rotation, and slideshow features\n */\nexport const GlassImageViewer: React.FC<GlassImageViewerProps> = ({\n  images = [],\n  initialIndex = 0,\n  enableZoom = true,\n  enablePan = true,\n  enableRotation = true,\n  enableFullscreen = true,\n  contained = false,\n  compact = false,\n  width,\n  height,\n  maxHeight,\n  enableNavigation = true,\n  showZoomControls = true,\n  showRotationControls = true,\n  showDownloadButton = true,\n  showImageInfo = true,\n  autoPlay = false,\n  autoPlayInterval = 3000,\n  zoomLevels = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4],\n  minZoom = 0.1,\n  maxZoom = 5,\n  objectFit = \"contain\",\n  loading = false,\n  error,\n  className,\n  onImageChange,\n  onZoomChange,\n  onFullscreenChange,\n  ...props\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const safeImages = Array.isArray(images) ? images : [];\n  const safeImageCount = safeImages.length;\n  const normalizedInitialIndex = safeImageCount\n    ? Math.min(Math.max(initialIndex, 0), safeImageCount - 1)\n    : 0;\n  const [currentIndex, setCurrentIndex] = useState(normalizedInitialIndex);\n  const [isFullscreen, setIsFullscreen] = useState(false);\n  const [zoom, setZoom] = useState(1);\n  const [rotation, setRotation] = useState(0);\n  const [pan, setPan] = useState({ x: 0, y: 0 });\n  const [isDragging, setIsDragging] = useState(false);\n  const [dragStart, setDragStart] = useState({ x: 0, y: 0 });\n  const [isAutoPlaying, setIsAutoPlaying] = useState(autoPlay);\n  const [imageLoading, setImageLoading] = useState(true);\n  const [imageError, setImageError] = useState(false);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const imageRef = useRef<HTMLImageElement>(null);\n  const autoPlayRef = useRef<NodeJS.Timeout>();\n\n  const currentImage = safeImages[currentIndex];\n  const isViewportFullscreen = isFullscreen && !contained;\n  const showExpandedInfo = showImageInfo && !compact;\n\n  // Handle image change\n  const handleImageChange = useCallback(\n    (index: number) => {\n      if (safeImageCount === 0) return;\n\n      const clampedIndex = Math.min(Math.max(index, 0), safeImageCount - 1);\n\n      setCurrentIndex(clampedIndex);\n      setZoom(1);\n      setRotation(0);\n      setPan({ x: 0, y: 0 });\n      setImageLoading(true);\n      setImageError(false);\n      onImageChange?.(clampedIndex);\n    },\n    [onImageChange, safeImageCount]\n  );\n\n  // Handle zoom\n  const handleZoom = useCallback(\n    (newZoom: number) => {\n      const clampedZoom = Math.max(minZoom, Math.min(maxZoom, newZoom));\n      setZoom(clampedZoom);\n      onZoomChange?.(clampedZoom);\n    },\n    [minZoom, maxZoom, onZoomChange]\n  );\n\n  // Handle zoom in/out with levels\n  const handleZoomIn = useCallback(() => {\n    const currentLevelIndex = zoomLevels.findIndex((level) => level >= zoom);\n    const nextLevel =\n      zoomLevels[Math.min(currentLevelIndex + 1, zoomLevels.length - 1)];\n    handleZoom(nextLevel);\n  }, [zoom, zoomLevels, handleZoom]);\n\n  const handleZoomOut = useCallback(() => {\n    const reversedLevels = [...zoomLevels].reverse();\n    const currentLevelIndex =\n      zoomLevels.length -\n      1 -\n      reversedLevels.findIndex((level: number) => level <= zoom);\n    const prevLevel = zoomLevels[Math.max(currentLevelIndex - 1, 0)];\n    handleZoom(prevLevel);\n  }, [zoom, zoomLevels, handleZoom]);\n\n  // Handle rotation\n  const handleRotate = useCallback((degrees: number) => {\n    setRotation((prev: any) => (prev + degrees) % 360);\n  }, []);\n\n  // Handle pan\n  const handleMouseDown = useCallback(\n    (e: React.MouseEvent) => {\n      if (!enablePan || zoom <= 1) return;\n\n      setIsDragging(true);\n      setDragStart({\n        x: e.clientX - pan.x,\n        y: e.clientY - pan.y,\n      });\n    },\n    [enablePan, zoom, pan]\n  );\n\n  const handleMouseMove = useCallback(\n    (e: React.MouseEvent) => {\n      if (!isDragging || !enablePan) return;\n\n      setPan({\n        x: e.clientX - dragStart.x,\n        y: e.clientY - dragStart.y,\n      });\n    },\n    [isDragging, enablePan, dragStart]\n  );\n\n  const handleMouseUp = useCallback(() => {\n    setIsDragging(false);\n  }, []);\n\n  // Handle wheel zoom\n  const handleWheel = useCallback(\n    (e: React.WheelEvent) => {\n      if (!enableZoom) return;\n\n      e.preventDefault();\n      const zoomFactor = e.deltaY > 0 ? 0.9 : 1.1;\n      handleZoom(zoom * zoomFactor);\n    },\n    [enableZoom, zoom, handleZoom]\n  );\n\n  // Handle keyboard navigation\n  useEffect(() => {\n    const handleKeyPress = (e: KeyboardEvent) => {\n      switch (e.key) {\n        case \"ArrowLeft\":\n          if (enableNavigation) {\n            handleImageChange(currentIndex - 1);\n          }\n          break;\n        case \"ArrowRight\":\n          if (enableNavigation) {\n            handleImageChange(currentIndex + 1);\n          }\n          break;\n        case \"Escape\":\n          if (isFullscreen) {\n            handleFullscreenToggle();\n          }\n          break;\n        case \"+\":\n        case \"=\":\n          if (enableZoom) {\n            handleZoomIn();\n          }\n          break;\n        case \"-\":\n          if (enableZoom) {\n            handleZoomOut();\n          }\n          break;\n        case \"0\":\n          handleZoom(1);\n          break;\n        case \"r\":\n        case \"R\":\n          if (enableRotation) {\n            handleRotate(90);\n          }\n          break;\n      }\n    };\n\n    window.addEventListener(\"keydown\", handleKeyPress);\n    return () => window.removeEventListener(\"keydown\", handleKeyPress);\n  }, [\n    currentIndex,\n    isFullscreen,\n    zoom,\n    enableNavigation,\n    enableZoom,\n    enableRotation,\n    handleImageChange,\n    handleZoom,\n    handleZoomIn,\n    handleZoomOut,\n    handleRotate,\n  ]);\n\n  // Handle fullscreen toggle\n  const handleFullscreenToggle = useCallback(() => {\n    const newFullscreen = !isFullscreen;\n    setIsFullscreen(newFullscreen);\n    onFullscreenChange?.(newFullscreen);\n  }, [isFullscreen, onFullscreenChange]);\n\n  // Handle download\n  const handleDownload = useCallback(() => {\n    if (!currentImage) return;\n\n    const link = document.createElement(\"a\");\n    link.href = currentImage.src;\n    link.download = currentImage.title || `image-${currentIndex + 1}`;\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }, [currentImage, currentIndex]);\n\n  // Handle image load\n  const handleImageLoad = useCallback(() => {\n    setImageLoading(false);\n    setImageError(false);\n  }, []);\n\n  const handleImageError = useCallback(() => {\n    setImageLoading(false);\n    setImageError(true);\n  }, []);\n\n  // Auto-play functionality\n  useEffect(() => {\n    if (isAutoPlaying && safeImageCount > 1 && !prefersReducedMotion) {\n      autoPlayRef.current = setInterval(() => {\n        setCurrentIndex((prev: any) => (prev + 1) % safeImageCount);\n      }, autoPlayInterval);\n    } else {\n      if (autoPlayRef.current) {\n        clearInterval(autoPlayRef.current);\n      }\n    }\n\n    return () => {\n      if (autoPlayRef.current) {\n        clearInterval(autoPlayRef.current);\n      }\n    };\n  }, [isAutoPlaying, safeImageCount, autoPlayInterval, prefersReducedMotion]);\n\n  useEffect(() => {\n    setCurrentIndex((prevIndex) => {\n      if (safeImageCount === 0) {\n        return prevIndex === 0 ? prevIndex : 0;\n      }\n      const boundedIndex = Math.min(Math.max(prevIndex, 0), safeImageCount - 1);\n      return boundedIndex;\n    });\n  }, [safeImageCount]);\n\n  // Reset zoom and pan when image changes\n  useEffect(() => {\n    setZoom(1);\n    setRotation(0);\n    setPan({ x: 0, y: 0 });\n  }, [currentIndex]);\n\n  if (!currentImage) {\n    return (\n      <GlassCard data-glass-component className={cn(\"p-8\", className)}>\n        <div className=\"glass-text-center glass-text-primary-glass-opacity-60\">\n          No image to display\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\n          \"overflow-hidden relative\",\n          contained && \"glass-contained\",\n          compact && \"glass-compact\",\n          isViewportFullscreen && \"fixed inset-0 z-50 rounded-none\",\n          className\n        )}\n        style={{\n          width,\n          height,\n          maxHeight,\n        }}\n        {...props}\n      >\n        <CardContent className=\"glass-p-0\">\n          {/* Image Container */}\n          <div\n            ref={containerRef}\n            className={cn(\n              \"relative bg-black/20 overflow-hidden\",\n              isViewportFullscreen\n                ? \"h-screen\"\n                : height\n                  ? \"h-full\"\n                  : \"aspect-video\"\n            )}\n            onMouseDown={handleMouseDown}\n            onMouseMove={handleMouseMove}\n            onMouseUp={handleMouseUp}\n            onMouseLeave={handleMouseUp}\n            onWheel={handleWheel}\n            style={{\n              cursor: isDragging\n                ? \"grabbing\"\n                : enablePan && zoom > 1\n                  ? \"grab\"\n                  : \"default\",\n            }}\n          >\n            {/* Loading State */}\n            {imageLoading && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n                <div\n                  className={cn(\n                    \"glass-radius-full h-8 w-8 border-2 border-white/20 border-t-white/60\",\n                    !prefersReducedMotion && \"animate-spin\"\n                  )}\n                ></div>\n              </div>\n            )}\n\n            {/* Error State */}\n            {imageError && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-flex-col glass-items-center glass-justify-center glass-text-primary-glass-opacity-60\">\n                <X className=\"glass-w-12 glass-h-12 glass-mb-4\" />\n                <p>Failed to load image</p>\n              </div>\n            )}\n\n            {/* Main Image */}\n            {!imageError && (\n              <img\n                ref={imageRef}\n                src={currentImage.src}\n                alt={\n                  currentImage.alt ||\n                  currentImage.title ||\n                  `Image ${currentIndex + 1}`\n                }\n                className={cn(\n                  \"w-full h-full transition-transform duration-200\",\n                  objectFit === \"contain\" && \"object-contain\",\n                  objectFit === \"cover\" && \"object-cover\",\n                  objectFit === \"fill\" && \"object-fill\",\n                  objectFit === \"none\" && \"object-none\",\n                  objectFit === \"scale-down\" && \"object-scale-down\"\n                )}\n                style={{\n                  transform: `scale(${zoom}) rotate(${rotation}deg) translate(${pan.x}px, ${pan.y}px)`,\n                  transformOrigin: \"center center\",\n                }}\n                onLoad={handleImageLoad}\n                onError={handleImageError}\n                draggable={false}\n              />\n            )}\n\n            {/* Image Info Overlay */}\n            {showExpandedInfo && currentImage.title && (\n              <div\n                className={cn(\n                  \"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-surface-dark/50 glass-backdrop-blur-md glass-contrast-guard glass-contrast-guard\",\n                  compact ? \"glass-p-2\" : \"glass-p-4\"\n                )}\n              >\n                <h3 className=\"glass-text-primary glass-font-medium\">\n                  {currentImage.title}\n                </h3>\n                {currentImage.description && (\n                  <p className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-mt-1\">\n                    {currentImage.description}\n                  </p>\n                )}\n              </div>\n            )}\n          </div>\n\n          {/* Controls Overlay */}\n          <div\n            className={cn(\n              \"glass-absolute glass-flex glass-justify-between glass-items-start\",\n              compact\n                ? \"glass-top-2 glass-left-2 glass-right-2\"\n                : \"glass-top-4 glass-left-4 glass-right-4\"\n            )}\n            style={{ gap: 8, minWidth: 0, pointerEvents: \"none\" }}\n          >\n            {/* Left Controls */}\n            <div\n              className=\"glass-flex glass-items-center glass-gap-2\"\n              style={{ flex: \"0 1 auto\", minWidth: 0, pointerEvents: \"auto\" }}\n            >\n              {enableNavigation && safeImageCount > 1 && (\n                <>\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => handleImageChange(currentIndex - 1)}\n                    disabled={currentIndex === 0 || safeImageCount === 0}\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Previous image\"\n                  >\n                    <ChevronLeft className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => handleImageChange(currentIndex + 1)}\n                    disabled={\n                      safeImageCount === 0 || currentIndex >= safeImageCount - 1\n                    }\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Next image\"\n                  >\n                    <ChevronRight className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n\n                  <span\n                    className={cn(\n                      \"glass-text-primary-glass-opacity-80 glass-text-sm\",\n                      compact ? \"glass-px-1\" : \"glass-px-2\"\n                    )}\n                  >\n                    {safeImageCount > 0\n                      ? `${currentIndex + 1} / ${safeImageCount}`\n                      : \"0 / 0\"}\n                  </span>\n                </>\n              )}\n            </div>\n\n            {/* Right Controls */}\n            <div\n              className=\"glass-flex glass-items-center glass-gap-2\"\n              style={{\n                flex: \"1 1 auto\",\n                minWidth: 0,\n                maxWidth: \"100%\",\n                flexWrap: \"wrap\",\n                justifyContent: \"flex-end\",\n                pointerEvents: \"auto\",\n              }}\n            >\n              {enableZoom && showZoomControls && (\n                <>\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={handleZoomOut}\n                    disabled={zoom <= minZoom}\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Zoom out\"\n                  >\n                    <ZoomOut className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n\n                  <span\n                    className={cn(\n                      \"glass-text-primary-glass-opacity-80 glass-text-sm glass-text-center\",\n                      compact\n                        ? \"glass-min-w-10 glass-px-1\"\n                        : \"glass-min-w-16 glass-px-2\"\n                    )}\n                  >\n                    {Math.round(zoom * 100)}%\n                  </span>\n\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={handleZoomIn}\n                    disabled={zoom >= maxZoom}\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Zoom in\"\n                  >\n                    <ZoomIn className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                </>\n              )}\n\n              {enableRotation && showRotationControls && (\n                <>\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => handleRotate(-90)}\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Rotate counter-clockwise\"\n                  >\n                    <RotateCcw className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n\n                  <GlassButton\n                    variant=\"secondary\"\n                    size=\"sm\"\n                    onClick={(e) => handleRotate(90)}\n                    className=\"glass-p-2 glass-focus glass-touch-target\"\n                    aria-label=\"Rotate clockwise\"\n                  >\n                    <RotateCw className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                </>\n              )}\n\n              {showDownloadButton && (\n                <GlassButton\n                  variant=\"secondary\"\n                  size=\"sm\"\n                  onClick={handleDownload}\n                  className=\"glass-p-2 glass-focus glass-touch-target\"\n                  aria-label=\"Download image\"\n                >\n                  <Download className=\"glass-w-4 glass-h-4\" />\n                </GlassButton>\n              )}\n\n              {enableFullscreen && !contained && (\n                <GlassButton\n                  variant=\"secondary\"\n                  size=\"sm\"\n                  onClick={handleFullscreenToggle}\n                  className=\"glass-p-2 glass-focus glass-touch-target\"\n                  aria-label=\"Toggle fullscreen\"\n                >\n                  {isFullscreen ? (\n                    <Minimize2 className=\"glass-w-4 glass-h-4\" />\n                  ) : (\n                    <Maximize2 className=\"glass-w-4 glass-h-4\" />\n                  )}\n                </GlassButton>\n              )}\n            </div>\n          </div>\n\n          {/* Auto-play Controls */}\n          {enableNavigation && safeImageCount > 1 && (\n            <div className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2\">\n              <div className=\"glass-flex glass-items-center glass-gap-2 glass-surface-dark/50 glass-backdrop-blur-md glass-contrast-guard glass-radius-full glass-px-4 glass-py-2 glass-contrast-guard\">\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setIsAutoPlaying(!isAutoPlaying)}\n                  className=\"glass-p-1 glass-focus glass-touch-target\"\n                  aria-label={\n                    isAutoPlaying ? \"Pause slideshow\" : \"Play slideshow\"\n                  }\n                >\n                  {isAutoPlaying ? (\n                    <Pause className=\"glass-w-4 glass-h-4\" />\n                  ) : (\n                    <Play className=\"glass-w-4 glass-h-4\" />\n                  )}\n                </GlassButton>\n\n                <div className=\"glass-flex glass-gap-1\">\n                  {safeImages.map((_, index) => (\n                    <button\n                      key={index}\n                      onClick={(e) => handleImageChange(index)}\n                      className={cn(\n                        \"w-2 h-2 glass-radius-full transition-all duration-200 glass-focus glass-touch-target glass-contrast-guard\",\n                        index === currentIndex ? \"bg-white\" : \"bg-white/40\"\n                      )}\n                      aria-label={`Go to image ${index + 1}`}\n                    />\n                  ))}\n                </div>\n              </div>\n            </div>\n          )}\n\n          {/* Reset Controls */}\n          {(zoom !== 1 || rotation !== 0 || pan.x !== 0 || pan.y !== 0) && (\n            <div className=\"glass-absolute glass-top-1/2 glass-left-4 glass-transform glass--translate-y-1-2\">\n              <GlassButton\n                variant=\"secondary\"\n                size=\"sm\"\n                onClick={(e) => {\n                  setZoom(1);\n                  setRotation(0);\n                  setPan({ x: 0, y: 0 });\n                }}\n                className=\"glass-p-2 glass-focus glass-touch-target\"\n                aria-label=\"Reset view\"\n              >\n                <Home className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassImageViewer;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Check,\n  Copy,\n  Download,\n  Palette,\n  RotateCcw,\n  Shuffle,\n  Upload,\n} from \"@/icons\";\nimport React, { useCallback, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\nexport interface GradientStop {\n  color: string;\n  position: number; // 0-100\n}\n\nexport interface GradientPreset {\n  id: string;\n  name: string;\n  type: \"linear\" | \"radial\" | \"conic\";\n  angle?: number; // For linear gradients\n  stops: GradientStop[];\n}\n\nexport interface GlassGradientPickerProps {\n  /**\n   * Current gradient\n   */\n  value?: string;\n  /**\n   * Gradient presets\n   */\n  presets?: GradientPreset[];\n  /**\n   * Enable custom gradient creation\n   */\n  enableCustom?: boolean;\n  /**\n   * Show gradient type selector\n   */\n  showTypeSelector?: boolean;\n  /**\n   * Show angle control for linear gradients\n   */\n  showAngleControl?: boolean;\n  /**\n   * Show color stops editor\n   */\n  showStopsEditor?: boolean;\n  /**\n   * Maximum number of color stops\n   */\n  maxStops?: number;\n  /**\n   * Gradient change handler\n   */\n  onChange?: (\n    gradient: string,\n    stops: GradientStop[],\n    type: string,\n    angle?: number\n  ) => void;\n  /**\n   * Preset selection handler\n   */\n  onPresetSelect?: (preset: GradientPreset) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Contain the picker in a bounded viewport. */\n  contained?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n}\n\n/**\n * GlassGradientPicker component\n * Advanced gradient picker with presets and custom creation\n */\nexport const GlassGradientPicker: React.FC<GlassGradientPickerProps> = ({\n  value,\n  presets = [],\n  enableCustom = true,\n  showTypeSelector = true,\n  showAngleControl = true,\n  showStopsEditor = true,\n  maxStops = 5,\n  onChange,\n  onPresetSelect,\n  className,\n  compact = false,\n  contained = false,\n  maxHeight,\n  ...props\n}) => {\n  const [selectedType, setSelectedType] = useState<\n    \"linear\" | \"radial\" | \"conic\"\n  >(\"linear\");\n  const [angle, setAngle] = useState(45);\n  const [stops, setStops] = useState<GradientStop[]>([\n    { color: \"#7CD3FF\", position: 0 },\n    { color: \"#A78BFA\", position: 100 },\n  ]);\n  const [selectedStopIndex, setSelectedStopIndex] = useState<number | null>(\n    null\n  );\n  const [copied, setCopied] = useState(false);\n\n  // Default presets\n  const defaultPresets: GradientPreset[] = [\n    {\n      id: \"sunset\",\n      name: \"Sunset\",\n      type: \"linear\",\n      angle: 45,\n      stops: [\n        { color: \"#FB7185\", position: 0 },\n        { color: \"#FBBF24\", position: 50 },\n        { color: \"#A78BFA\", position: 100 },\n      ],\n    },\n    {\n      id: \"ocean\",\n      name: \"Ocean\",\n      type: \"linear\",\n      angle: 90,\n      stops: [\n        { color: \"#7CD3FF\", position: 0 },\n        { color: \"#22D3EE\", position: 50 },\n        { color: \"#60A5FA\", position: 100 },\n      ],\n    },\n    {\n      id: \"forest\",\n      name: \"Forest\",\n      type: \"radial\",\n      stops: [\n        { color: \"#86EFAC\", position: 0 },\n        { color: \"#34D399\", position: 70 },\n        { color: \"#059669\", position: 100 },\n      ],\n    },\n    {\n      id: \"fire\",\n      name: \"Fire\",\n      type: \"conic\",\n      stops: [\n        { color: \"#FB7185\", position: 0 },\n        { color: \"#FBBF24\", position: 25 },\n        { color: \"#F97316\", position: 50 },\n        { color: \"#DC2626\", position: 100 },\n      ],\n    },\n  ];\n\n  const allPresets = [...defaultPresets, ...presets];\n\n  // Generate CSS gradient string\n  const generateGradient = useCallback(() => {\n    if (stops.length === 0) return \"transparent\";\n\n    const colorStops = stops\n      .sort((a, b) => a.position - b.position)\n      .map((stop: any) => `${stop.color} ${stop.position}%`)\n      .join(\", \");\n\n    switch (selectedType) {\n      case \"linear\":\n        return `linear-gradient(${angle}deg, ${colorStops})`;\n      case \"radial\":\n        return `radial-gradient(circle, ${colorStops})`;\n      case \"conic\":\n        return `conic-gradient(from 0deg, ${colorStops})`;\n      default:\n        return `linear-gradient(45deg, ${colorStops})`;\n    }\n  }, [stops, selectedType, angle]);\n\n  // Handle stop change\n  const handleStopChange = useCallback(\n    (index: number, updates: Partial<GradientStop>) => {\n      setStops((prev: any) =>\n        prev.map((stop: any, i: any) =>\n          i === index ? { ...stop, ...updates } : stop\n        )\n      );\n    },\n    []\n  );\n\n  // Add new stop\n  const handleAddStop = useCallback(() => {\n    if (stops.length >= maxStops) return;\n\n    const newStop: GradientStop = {\n      color: \"var(--glass-white)\",\n      position: 50,\n    };\n    setStops((prev: any) => [...prev, newStop]);\n    setSelectedStopIndex(stops.length);\n  }, [stops.length, maxStops]);\n\n  // Remove stop\n  const handleRemoveStop = useCallback(\n    (index: number) => {\n      if (stops.length <= 2) return; // Keep at least 2 stops\n\n      setStops((prev: any) => prev.filter((_: any, i: any) => i !== index));\n      setSelectedStopIndex(null);\n    },\n    [stops.length]\n  );\n\n  // Handle preset selection\n  const handlePresetSelect = useCallback(\n    (preset: GradientPreset) => {\n      setSelectedType(preset.type);\n      if (preset.angle !== undefined) {\n        setAngle(preset.angle);\n      }\n      setStops([...preset.stops]);\n      setSelectedStopIndex(null);\n\n      const gradient = generateGradient();\n      onChange?.(gradient, preset.stops, preset.type, preset.angle);\n      onPresetSelect?.(preset);\n    },\n    [generateGradient, onChange, onPresetSelect]\n  );\n\n  // Generate random gradient\n  const handleRandomGradient = useCallback(() => {\n    const randomColor = () =>\n      \"#\" + Math.floor(Math.random() * 16777215).toString(16);\n    const newStops = [\n      { color: randomColor(), position: 0 },\n      { color: randomColor(), position: 100 },\n    ];\n\n    if (Math.random() > 0.5) {\n      newStops.push({ color: randomColor(), position: 50 });\n    }\n\n    setStops(newStops);\n    setSelectedStopIndex(null);\n\n    const gradient = generateGradient();\n    onChange?.(gradient, newStops, selectedType, angle);\n  }, [generateGradient, selectedType, angle, onChange]);\n\n  // Copy gradient to clipboard\n  const handleCopyGradient = useCallback(async () => {\n    const gradient = generateGradient();\n    try {\n      await navigator.clipboard.writeText(gradient);\n      setCopied(true);\n      setTimeout(() => setCopied(false), ANIMATION.DURATION.normal);\n    } catch {\n      setCopied(false);\n    }\n  }, [generateGradient]);\n\n  // Reset to default\n  const handleReset = useCallback(() => {\n    setSelectedType(\"linear\");\n    setAngle(45);\n    setStops([\n      { color: \"#7CD3FF\", position: 0 },\n      { color: \"#A78BFA\", position: 100 },\n    ]);\n    setSelectedStopIndex(null);\n  }, []);\n\n  const currentGradient = generateGradient();\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const effectiveShowTypeSelector = compact ? false : showTypeSelector;\n  const effectiveShowAngleControl = compact ? false : showAngleControl;\n  const effectiveShowStopsEditor = compact ? false : showStopsEditor;\n  const effectivePresets = compact ? allPresets.slice(0, 4) : allPresets;\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\"overflow-hidden\", className)}\n        style={{\n          maxHeight:\n            resolvedMaxHeight ?? (compact || contained ? \"240px\" : undefined),\n          overflow:\n            compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n        }}\n        {...props}\n      >\n        <CardHeader className={compact ? \"glass-p-3 glass-pb-2\" : \"glass-pb-3\"}>\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <ContrastGuard>\n              <CardTitle\n                className={cn(\n                  \"glass-text-primary glass-font-semibold glass-flex glass-items-center glass-gap-2\",\n                  compact ? \"glass-text-sm\" : \"glass-text-lg\"\n                )}\n              >\n                <Palette\n                  className={\n                    compact ? \"glass-w-4 glass-h-4\" : \"glass-w-5 glass-h-5\"\n                  }\n                />\n                Gradient Picker\n              </CardTitle>\n            </ContrastGuard>\n\n            <div className=\"glass-flex glass-gap-2\">\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleRandomGradient}\n                className=\"glass-p-2 glass-focus glass-touch-target\"\n                title=\"Random Gradient\"\n                aria-label=\"Generate random gradient\"\n              >\n                <Shuffle className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleCopyGradient}\n                className=\"glass-p-2 glass-focus glass-touch-target\"\n                title=\"Copy Gradient\"\n                aria-label={\n                  copied ? \"Gradient copied\" : \"Copy gradient to clipboard\"\n                }\n              >\n                {copied ? (\n                  <Check className=\"glass-w-4 glass-h-4\" />\n                ) : (\n                  <Copy className=\"glass-w-4 glass-h-4\" />\n                )}\n              </GlassButton>\n            </div>\n          </div>\n        </CardHeader>\n\n        <CardContent\n          className={cn(\n            \"glass-pt-0 glass-auto-gap\",\n            compact\n              ? \"glass-px-3 glass-pb-3 glass-auto-gap-md\"\n              : \"glass-auto-gap-2xl\"\n          )}\n        >\n          {/* Current Gradient Preview */}\n          <div className=\"glass-auto-gap glass-auto-gap-md\">\n            <div\n              className={cn(\n                \"glass-w-full glass-radius-lg glass-border glass-border-white/20\",\n                compact ? \"glass-h-16\" : \"glass-h-32\"\n              )}\n              style={{ background: currentGradient }}\n            />\n\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-2\">\n              <ContrastGuard>\n                <code\n                  className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-surface-subtle/10 glass-px-2 glass-py-1 glass-radius-md glass-font-mono glass-flex-1 glass-min-w-0\"\n                  style={{\n                    display: \"-webkit-box\",\n                    WebkitLineClamp: 2,\n                    WebkitBoxOrient: \"vertical\",\n                    overflow: \"hidden\",\n                    overflowWrap: \"anywhere\",\n                    wordBreak: \"break-word\",\n                  }}\n                >\n                  {currentGradient}\n                </code>\n              </ContrastGuard>\n\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={handleReset}\n                className=\"glass-p-2 glass-focus glass-touch-target\"\n                title=\"Reset\"\n                aria-label=\"Reset gradient to default\"\n              >\n                <RotateCcw className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            </div>\n          </div>\n\n          {/* Gradient Type Selector */}\n          {effectiveShowTypeSelector && (\n            <div className=\"glass-auto-gap glass-auto-gap-md\">\n              <h3 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                Type\n              </h3>\n              <div className=\"glass-flex glass-gap-2\">\n                {([\"linear\", \"radial\", \"conic\"] as const).map((type) => (\n                  <GlassButton\n                    key={type}\n                    variant={selectedType === type ? \"primary\" : \"ghost\"}\n                    size=\"sm\"\n                    onClick={(e) => setSelectedType(type)}\n                    className=\"glass-capitalize glass-focus glass-touch-target\"\n                  >\n                    {type}\n                  </GlassButton>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {/* Angle Control for Linear */}\n          {effectiveShowAngleControl && selectedType === \"linear\" && (\n            <div className=\"glass-auto-gap glass-auto-gap-md\">\n              <ContrastGuard>\n                <h3 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                  Angle: {angle}\u00B0\n                </h3>\n              </ContrastGuard>\n              <input\n                type=\"range\"\n                min=\"0\"\n                max=\"360\"\n                value={angle}\n                onChange={(e) => setAngle(Number(e.target.value))}\n                className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\"\n                aria-label=\"Gradient angle\"\n              />\n            </div>\n          )}\n\n          {/* Color Stops Editor */}\n          {effectiveShowStopsEditor && enableCustom && (\n            <div className=\"glass-auto-gap glass-auto-gap-md\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <ContrastGuard>\n                  <h3 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                    Color Stops\n                  </h3>\n                </ContrastGuard>\n                {stops.length < maxStops && (\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={handleAddStop}\n                    className=\"glass-p-1 glass-focus glass-touch-target\"\n                    aria-label=\"Add color stop\"\n                  >\n                    <Upload className=\"glass-w-4 glass-h-4\" />\n                  </GlassButton>\n                )}\n              </div>\n\n              {/* Stops List */}\n              <div className=\"glass-auto-gap glass-auto-gap-sm\">\n                {stops.map((stop, index) => (\n                  <div\n                    key={index}\n                    className={cn(\n                      \"flex items-center glass-gap-3 glass-p-3 glass-radius-lg border transition-all\",\n                      selectedStopIndex === index\n                        ? \"border-primary bg-primary/20\"\n                        : \"border-white/20 bg-white/5\"\n                    )}\n                    onClick={(e) => setSelectedStopIndex(index)}\n                  >\n                    <input\n                      type=\"color\"\n                      value={normalizeColorInputValue(stop.color)}\n                      onChange={(e) =>\n                        handleStopChange(index, { color: e.target.value })\n                      }\n                      className=\"glass-w-8 glass-h-8 glass-radius-md glass-border glass-border-white/20 glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\"\n                      aria-label={`Color stop ${index + 1} color picker`}\n                    />\n\n                    <div className=\"glass-flex-1\">\n                      <input\n                        type=\"range\"\n                        min=\"0\"\n                        max=\"100\"\n                        value={stop.position}\n                        onChange={(e) =>\n                          handleStopChange(index, {\n                            position: Number(e.target.value),\n                          })\n                        }\n                        className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\"\n                        aria-label={`Color stop ${index + 1} position`}\n                      />\n                      <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-1\">\n                        Position: {stop.position}%\n                      </div>\n                    </div>\n\n                    {stops.length > 2 && (\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={(e) => handleRemoveStop(index)}\n                        className=\"glass-p-1 glass-text-primary hover:glass-text-secondary glass-focus glass-touch-target\"\n                        aria-label={`Remove color stop ${index + 1}`}\n                      >\n                        <Download className=\"glass-w-4 glass-h-4\" />\n                      </GlassButton>\n                    )}\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {/* Presets */}\n          {allPresets.length > 0 && (\n            <div className=\"glass-auto-gap glass-auto-gap-md\">\n              <ContrastGuard>\n                <h3 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                  Presets\n                </h3>\n              </ContrastGuard>\n              <div\n                className={cn(\n                  \"glass-grid\",\n                  compact\n                    ? \"glass-grid-cols-4 glass-gap-2\"\n                    : \"glass-grid-cols-2 glass-gap-3\"\n                )}\n              >\n                {effectivePresets.map((preset) => (\n                  <div\n                    key={preset.id}\n                    className=\"glass-cursor-pointer glass-group glass-focus glass-touch-target\"\n                    onClick={(e) => handlePresetSelect(preset)}\n                    role=\"button\"\n                    aria-label={`Select ${preset.name} gradient preset`}\n                    tabIndex={0}\n                    onKeyDown={(e) => {\n                      if (e.key === \"Enter\" || e.key === \" \") {\n                        e.preventDefault();\n                        handlePresetSelect(preset);\n                      }\n                    }}\n                  >\n                    <div\n                      className={cn(\n                        \"glass-w-full glass-radius-lg glass-border glass-border-white/20 glass-group-hover:glass-border-white/40 glass-transition-all\",\n                        compact ? \"glass-h-8\" : \"glass-h-16\"\n                      )}\n                      style={{\n                        background:\n                          preset.stops.length > 0\n                            ? `${preset.type}-gradient(${preset.angle || 0}deg, ${preset.stops.map((s: any) => `${s.color} ${s.position}%`).join(\", \")})`\n                            : \"transparent\",\n                      }}\n                    />\n                    <ContrastGuard>\n                      <p className=\"glass-text-primary-glass-opacity-80 glass-text-xs glass-mt-2 glass-text-center glass-group-hover:glass-text-primary glass-transition-colors\">\n                        {preset.name}\n                      </p>\n                    </ContrastGuard>\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassGradientPicker;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AlertCircle, Loader2, RefreshCw } from \"@/icons\";\nimport React, {\n  ReactNode,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassInfiniteScrollProps {\n  /**\n   * Children to render\n   */\n  children: ReactNode;\n  /**\n   * Load more handler\n   */\n  onLoadMore: () => void | Promise<void>;\n  /**\n   * Has more items to load\n   */\n  hasMore: boolean;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Error state\n   */\n  error?: string | null;\n  /**\n   * Threshold distance from bottom to trigger load (pixels)\n   */\n  threshold?: number;\n  /**\n   * Custom loading indicator\n   */\n  loadingIndicator?: ReactNode;\n  /**\n   * Custom error indicator\n   */\n  errorIndicator?: ReactNode;\n  /**\n   * End of list message\n   */\n  endMessage?: ReactNode;\n  /**\n   * Scroll container className\n   */\n  className?: string;\n  /**\n   * Reverse scroll direction (for chat-like interfaces)\n   */\n  reverse?: boolean;\n  /**\n   * Auto-scroll to bottom on new content\n   */\n  autoScroll?: boolean;\n}\n\n/**\n * GlassInfiniteScroll component\n * Infinite scrolling container with loading states and error handling\n */\nexport const GlassInfiniteScroll: React.FC<GlassInfiniteScrollProps> = ({\n  children,\n  onLoadMore,\n  hasMore,\n  loading = false,\n  error = null,\n  threshold = 100,\n  loadingIndicator,\n  errorIndicator,\n  endMessage,\n  className,\n  reverse = false,\n  autoScroll = false,\n  ...props\n}) => {\n  const [isLoading, setIsLoading] = useState(loading);\n  const [loadError, setLoadError] = useState<string | null>(error);\n  const [hasReachedEnd, setHasReachedEnd] = useState(false);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const sentinelRef = useRef<HTMLDivElement>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n  const isLoadingMoreRef = useRef(false);\n\n  // Handle intersection observer\n  const handleIntersection = useCallback(\n    async (entries: IntersectionObserverEntry[]) => {\n      const [entry] = entries;\n\n      if (\n        entry.isIntersecting &&\n        hasMore &&\n        !isLoadingMoreRef.current &&\n        !loadError\n      ) {\n        isLoadingMoreRef.current = true;\n        setIsLoading(true);\n        setLoadError(null);\n\n        try {\n          await onLoadMore();\n        } catch {\n          setLoadError(\"Failed to load more items\");\n        } finally {\n          setIsLoading(false);\n          isLoadingMoreRef.current = false;\n        }\n      }\n\n      if (!hasMore && entry.isIntersecting) {\n        setHasReachedEnd(true);\n      }\n    },\n    [hasMore, onLoadMore, loadError]\n  );\n\n  // Setup intersection observer\n  useEffect(() => {\n    if (!sentinelRef.current) return;\n\n    observerRef.current = new IntersectionObserver(handleIntersection, {\n      root: containerRef.current,\n      rootMargin: `${threshold}px`,\n      threshold: 0.1,\n    });\n\n    observerRef.current.observe(sentinelRef.current);\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n    };\n  }, [handleIntersection, threshold]);\n\n  // Update loading state when prop changes\n  useEffect(() => {\n    setIsLoading(loading);\n  }, [loading]);\n\n  // Update error state when prop changes\n  useEffect(() => {\n    setLoadError(error);\n  }, [error]);\n\n  // Auto-scroll to bottom\n  useEffect(() => {\n    if (autoScroll && containerRef.current && reverse) {\n      containerRef.current.scrollTop = containerRef.current.scrollHeight;\n    }\n  }, [children, autoScroll, reverse]);\n\n  // Handle retry\n  const handleRetry = useCallback(async () => {\n    setLoadError(null);\n    setIsLoading(true);\n\n    try {\n      await onLoadMore();\n    } catch {\n      setLoadError(\"Failed to load more items\");\n    } finally {\n      setIsLoading(false);\n    }\n  }, [onLoadMore]);\n\n  // Default loading indicator\n  const defaultLoadingIndicator = (\n    <Motion\n      preset=\"fadeIn\"\n      className=\"glass-flex glass-items-center glass-justify-center glass-py-8\"\n    >\n      <div className=\"glass-flex glass-items-center glass-gap-3 glass-px-4 glass-py-2 glass-surface-subtle/10 glass-backdrop-blur-md glass-contrast-guard glass-radius-full glass-contrast-guard\">\n        <Loader2 className=\"glass-w-5 glass-h-5 glass-animate-spin glass-text-primary\" />\n        <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm\">\n          Loading more...\n        </span>\n      </div>\n    </Motion>\n  );\n\n  // Default error indicator\n  const defaultErrorIndicator = (\n    <Motion\n      preset=\"fadeIn\"\n      className=\"glass-flex glass-flex-col glass-items-center glass-justify-center glass-py-8 glass-px-4\"\n    >\n      <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-primary glass-mb-3\">\n        <AlertCircle className=\"glass-w-5 glass-h-5\" />\n        <span className=\"glass-text-sm glass-font-medium\">\n          Error loading more items\n        </span>\n      </div>\n      <button\n        onClick={handleRetry}\n        className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-surface-dark/30 hover:glass-surface-dark/40 glass-radius-lg glass-transition-colors glass-border glass-border-white/20 hover:glass-border-white/30 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n      >\n        <RefreshCw className=\"glass-w-4 glass-h-4\" />\n        <span className=\"glass-text-sm\">Try again</span>\n      </button>\n    </Motion>\n  );\n\n  // Default end message\n  const defaultEndMessage = (\n    <Motion preset=\"fadeIn\" className=\"glass-text-center glass-py-8\">\n      <div className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n        You've reached the end\n      </div>\n    </Motion>\n  );\n\n  return (\n    <div\n      data-glass-component\n      ref={containerRef}\n      className={cn(\n        \"overflow-y-auto\",\n        reverse && \"flex flex-col-reverse\",\n        className\n      )}\n      {...props}\n    >\n      {/* Content */}\n      <div className={cn(reverse && \"flex flex-col-reverse\")}>{children}</div>\n\n      {/* Sentinel for intersection observer */}\n      {!reverse && <div ref={sentinelRef} className=\"glass-h-4\" />}\n\n      {/* Loading State */}\n      {isLoading && !reverse && (\n        <div className=\"glass-py-4\">\n          {loadingIndicator || defaultLoadingIndicator}\n        </div>\n      )}\n\n      {/* Error State */}\n      {loadError && !reverse && (\n        <div className=\"glass-py-4\">\n          {errorIndicator || defaultErrorIndicator}\n        </div>\n      )}\n\n      {/* End of List */}\n      {hasReachedEnd && !hasMore && !isLoading && !loadError && !reverse && (\n        <div className=\"glass-py-4\">{endMessage || defaultEndMessage}</div>\n      )}\n\n      {/* Reverse direction indicators */}\n      {reverse && (\n        <div className=\"glass-flex glass-flex-col-reverse\">\n          {/* Sentinel for reverse direction */}\n          <div ref={sentinelRef} className=\"glass-h-4\" />\n\n          {/* Loading State */}\n          {isLoading && (\n            <div className=\"glass-py-4\">\n              {loadingIndicator || defaultLoadingIndicator}\n            </div>\n          )}\n\n          {/* Error State */}\n          {loadError && (\n            <div className=\"glass-py-4\">\n              {errorIndicator || defaultErrorIndicator}\n            </div>\n          )}\n\n          {/* End of List */}\n          {hasReachedEnd && !hasMore && !isLoading && !loadError && (\n            <div className=\"glass-py-4\">{endMessage || defaultEndMessage}</div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default GlassInfiniteScroll;\n", "'use client';\nimport React from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface GlassInlineEditProps {\n  value: string;\n  onChange: (v: string) => void;\n  placeholder?: string;\n  className?: string;\n}\n\nexport function GlassInlineEdit({\n  value,\n  onChange,\n  placeholder = \"Edit\u2026\",\n  className,\n}: GlassInlineEditProps) {\n  const [editing, setEditing] = React.useState(false);\n  const [draft, setDraft] = React.useState(value);\n  React.useEffect(() => setDraft(value), [value]);\n  return (\n    <div\n      data-glass-component\n      className={cn(\"inline-flex items-center glass-gap-2\", className)}\n      role=\"group\"\n      aria-label=\"Inline editable field\"\n    >\n      {editing ? (\n        <>\n          <input\n            autoFocus\n            value={draft}\n            onChange={(e) => setDraft(e.target.value)}\n            onKeyDown={(e) => {\n              if (e.key === \"Enter\") {\n                onChange(draft);\n                setEditing(false);\n              }\n              if (e.key === \"Escape\") {\n                setDraft(value);\n                setEditing(false);\n              }\n            }}\n            placeholder={placeholder}\n            aria-label={placeholder}\n            className='glass-bg-transparent glass-border glass-border-white/20 glass-radius-lg glass-px-2 glass-py-1 glass-text-sm glass-outline-none glass-focus glass-touch-target glass-contrast-guard'\n          />\n          <GlassButton\n            size=\"sm\"\n            variant=\"primary\"\n            onClick={(e) => {\n              onChange(draft);\n              setEditing(false);\n            }}\n            aria-label=\"Save changes\"\n            className=\"glass-focus glass-touch-target\"\n          >\n            Save\n          </GlassButton>\n          <GlassButton\n            size=\"sm\"\n            variant=\"ghost\"\n            onClick={(e) => {\n              setDraft(value);\n              setEditing(false);\n            }}\n            aria-label=\"Cancel editing\"\n            className=\"glass-focus glass-touch-target\"\n          >\n            Cancel\n          </GlassButton>\n        </>\n      ) : (\n        <button\n          className='glass-px-2 glass-py-1 glass-radius-lg hover:glass-surface-subtle/10 glass-text-sm glass-focus glass-touch-target glass-contrast-guard'\n          onClick={(e) => setEditing(true)}\n          aria-label={`Edit ${value || placeholder}`}\n        >\n          {value || <span className='glass-text-primary-glass-opacity-60'>{placeholder}</span>}\n        </button>\n      )}\n    </div>\n  );\n}\n\nexport default GlassInlineEdit;", "\"use client\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport {\n  usePredictiveEngine,\n  useInteractionRecorder,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport { GlassButton } from \"../button\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { Plus, MoreHorizontal, Eye, Target, Brain } from \"@/icons\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\n// Extend Window interface for spatial audio\ndeclare global {\n  interface Window {\n    _kanbanSpatialAudio?: (\n      type: \"card-click\" | \"column-click\" | \"card-move\"\n    ) => void;\n  }\n}\n\nexport interface KanbanCard {\n  id: string;\n  title: string;\n  description?: string;\n  priority?: \"low\" | \"medium\" | \"high\";\n  assignee?: string;\n  dueDate?: Date;\n  tags?: string[];\n}\n\nexport interface KanbanColumn {\n  id: string;\n  title: string;\n  cards: KanbanCard[];\n  color?: string;\n  limit?: number;\n}\n\nexport interface GlassKanbanProps extends ConsciousnessFeatures {\n  columns: KanbanColumn[];\n  className?: string;\n  \"data-testid\"?: string;\n  /**\n   * Enable drag and drop\n   */\n  enableDragDrop?: boolean;\n  /**\n   * Show column limits\n   */\n  showLimits?: boolean;\n  /**\n   * Show card metrics\n   */\n  showMetrics?: boolean;\n  /**\n   * Card click handler\n   */\n  onCardClick?: (cardId: string, columnId: string) => void;\n  /**\n   * Column click handler\n   */\n  onColumnClick?: (columnId: string) => void;\n  /**\n   * Card move handler\n   */\n  onCardMove?: (cardId: string, fromColumn: string, toColumn: string) => void;\n  /**\n   * Reduces column width, padding, and chrome for embedded previews.\n   */\n  compact?: boolean;\n}\n\n/**\n * GlassKanban component\n * A comprehensive Kanban board with consciousness interface features\n */\nexport function GlassKanban({\n  // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n  columns,\n  className,\n  enableDragDrop = true,\n  showLimits = true,\n  showMetrics = false,\n  compact = false,\n  onCardClick,\n  onColumnClick,\n  onCardMove,\n  \"data-testid\": dataTestId,\n  // Consciousness features\n  consciousness = false,\n  predictive = false,\n  adaptive = false,\n  eyeTracking = false,\n  spatialAudio = false,\n  trackAchievements = false,\n}: GlassKanbanProps) {\n  // Consciousness state\n  const [cardInteractionCounts, setCardInteractionCounts] = useState<\n    Record<string, number>\n  >({});\n  const [columnInteractionCounts, setColumnInteractionCounts] = useState<\n    Record<string, number>\n  >({});\n  const [focusedCard, setFocusedCard] = useState<string | null>(null);\n  const [focusedColumn, setFocusedColumn] = useState<string | null>(null);\n  const [workflowSuggestions, setWorkflowSuggestions] = useState<\n    Array<{\n      cardId: string;\n      suggestedColumn: string;\n      reason: string;\n      priority: number;\n    }>\n  >([]);\n  const [boardMetrics, setBoardMetrics] = useState<{\n    totalCards: number;\n    bottlenecks: string[];\n    productivity: number;\n    completionRate: number;\n  } | null>(null);\n\n  // Consciousness hooks\n  const predictiveEngine = predictive ? usePredictiveEngine() : null;\n  const eyeTracker = eyeTracking ? useEyeTracking() : null;\n  const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n  const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n  const interactionRecorder = consciousness ? useInteractionRecorder() : null;\n  const achievementTracker = trackAchievements ? useAchievements() : null;\n\n  // Consciousness effects\n  // Eye tracking for card and column focus\n  useEffect(() => {\n    if (!eyeTracking || !eyeTracker) return;\n\n    const handleGazeData = (gazeData: any) => {\n      // Find focused card\n      const cardElements = document.querySelectorAll(\n        '[data-consciousness-card=\"true\"]'\n      );\n      let focusedCardId: string | null = null;\n\n      cardElements.forEach((element) => {\n        const rect = element.getBoundingClientRect();\n        if (\n          gazeData.x >= rect.left &&\n          gazeData.x <= rect.right &&\n          gazeData.y >= rect.top &&\n          gazeData.y <= rect.bottom\n        ) {\n          focusedCardId = element.getAttribute(\"data-card-id\");\n        }\n      });\n\n      setFocusedCard(focusedCardId);\n\n      // Find focused column\n      const columnElements = document.querySelectorAll(\n        '[data-consciousness-column=\"true\"]'\n      );\n      let focusedColumnId: string | null = null;\n\n      columnElements.forEach((element) => {\n        const rect = element.getBoundingClientRect();\n        if (\n          gazeData.x >= rect.left &&\n          gazeData.x <= rect.right &&\n          gazeData.y >= rect.top &&\n          gazeData.y <= rect.bottom\n        ) {\n          focusedColumnId = element.getAttribute(\"data-column-id\");\n        }\n      });\n\n      setFocusedColumn(focusedColumnId);\n\n      // Record achievements for focus tracking\n      if (\n        trackAchievements &&\n        achievementTracker &&\n        (focusedCardId || focusedColumnId)\n      ) {\n        achievementTracker.recordAction(\"kanban_gaze_focus\", {\n          cardId: focusedCardId,\n          columnId: focusedColumnId,\n          gazeTime: Date.now(),\n        });\n      }\n    };\n\n    // Eye tracking functionality temporarily disabled\n    // eyeTracker.startTracking(handleGazeData);\n    // return () => eyeTracker.stopTracking();\n  }, [eyeTracking, eyeTracker, achievementTracker, trackAchievements]);\n\n  // Predictive workflow suggestions\n  useEffect(() => {\n    if (!predictive || !predictiveEngine) return;\n\n    const generateWorkflowSuggestions = async () => {\n      try {\n        const boardContext = {\n          columns: columns.map((col: any) => ({\n            id: col.id,\n            title: col.title,\n            cardCount: col.cards.length,\n            limit: col.limit,\n            cards: col.cards.map((card: any) => ({\n              id: card.id,\n              title: card.title,\n              priority: card.priority,\n              interactionCount: cardInteractionCounts[card.id] || 0,\n            })),\n          })),\n          interactions: cardInteractionCounts,\n        };\n\n        const suggestions =\n          (await predictiveEngine.engine?.generateWorkflowSuggestions(\n            boardContext\n          )) || [];\n        setWorkflowSuggestions(suggestions.slice(0, 3));\n\n        // Generate board metrics\n        const metrics =\n          (await predictiveEngine.engine?.analyzeBoardPerformance(\n            boardContext\n          )) || null;\n        setBoardMetrics(metrics);\n      } catch {\n        setWorkflowSuggestions([]);\n        setBoardMetrics(null);\n      }\n    };\n\n    if (columns.length > 0) {\n      const timeoutId = setTimeout(generateWorkflowSuggestions, 1000);\n      return () => clearTimeout(timeoutId);\n    }\n  }, [columns, predictive, predictiveEngine, cardInteractionCounts]);\n\n  // Spatial audio for card interactions\n  useEffect(() => {\n    if (!spatialAudio || !spatialAudioEngine) return;\n\n    const playInteractionSound = (\n      type: \"card-click\" | \"column-click\" | \"card-move\"\n    ) => {\n      const soundMap = {\n        \"card-click\": {\n          sound: \"card-select\",\n          volume: 0.4,\n          position: { x: 0, y: 0, z: 0 },\n        },\n        \"column-click\": {\n          sound: \"column-focus\",\n          volume: 0.3,\n          position: { x: -0.5, y: 0, z: 0 },\n        },\n        \"card-move\": {\n          sound: \"card-move\",\n          volume: 0.5,\n          position: { x: 0.5, y: 0, z: 0 },\n        },\n      };\n\n      const config = soundMap[type];\n      spatialAudioEngine.playGlassSound(config.sound, config.position, {\n        volume: config.volume,\n        reverb: 0.2,\n      });\n    };\n\n    // Store sound function for use in handlers\n    window._kanbanSpatialAudio = playInteractionSound;\n\n    return () => {\n      delete window._kanbanSpatialAudio;\n    };\n  }, [spatialAudio, spatialAudioEngine]);\n\n  // Enhanced card click handler\n  const handleCardClick = useCallback(\n    (cardId: string, columnId: string) => {\n      // Update interaction counts\n      setCardInteractionCounts((prev: any) => ({\n        ...prev,\n        [cardId]: (prev[cardId] || 0) + 1,\n      }));\n\n      // Record interaction for consciousness tracking\n      if (consciousness && interactionRecorder) {\n        const mockEvent = {\n          currentTarget: { id: `card-${cardId}` },\n          clientX: 0,\n          clientY: 0,\n          button: 0,\n          ctrlKey: false,\n          altKey: false,\n          shiftKey: false,\n          metaKey: false,\n          preventDefault: () => {},\n          stopPropagation: () => {},\n        } as React.MouseEvent;\n        interactionRecorder.recordClick(mockEvent);\n      }\n\n      // Track achievement\n      if (trackAchievements && achievementTracker) {\n        achievementTracker.recordAction(\"kanban_card_interaction\", {\n          cardId,\n          columnId,\n          timestamp: Date.now(),\n        });\n      }\n\n      // Play spatial audio\n      if (spatialAudio && window._kanbanSpatialAudio) {\n        window._kanbanSpatialAudio(\"card-click\");\n      }\n\n      onCardClick?.(cardId, columnId);\n    },\n    [\n      consciousness,\n      interactionRecorder,\n      trackAchievements,\n      achievementTracker,\n      spatialAudio,\n      onCardClick,\n      cardInteractionCounts,\n    ]\n  );\n\n  // Enhanced column click handler\n  const handleColumnClick = useCallback(\n    (columnId: string) => {\n      // Update interaction counts\n      setColumnInteractionCounts((prev: any) => ({\n        ...prev,\n        [columnId]: (prev[columnId] || 0) + 1,\n      }));\n\n      // Record interaction for consciousness tracking\n      if (consciousness && interactionRecorder) {\n        const mockEvent = {\n          currentTarget: { id: `column-${columnId}` },\n          clientX: 0,\n          clientY: 0,\n          button: 0,\n          ctrlKey: false,\n          altKey: false,\n          shiftKey: false,\n          metaKey: false,\n          preventDefault: () => {},\n          stopPropagation: () => {},\n        } as React.MouseEvent;\n        interactionRecorder.recordClick(mockEvent);\n      }\n\n      // Play spatial audio\n      if (spatialAudio && window._kanbanSpatialAudio) {\n        window._kanbanSpatialAudio(\"column-click\");\n      }\n\n      onColumnClick?.(columnId);\n    },\n    [\n      consciousness,\n      interactionRecorder,\n      spatialAudio,\n      onColumnClick,\n      columnInteractionCounts,\n    ]\n  );\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"fadeIn\"\n      className={cn(\"glass-w-full glass-h-full\", className)}\n      data-testid={dataTestId || \"glasskanban\"}\n    >\n      <div\n        className={cn(\n          \"grid glass-gap-4 glass-p-4\",\n          consciousness && \"consciousness-kanban-board\",\n          predictive &&\n            workflowSuggestions.length > 0 &&\n            \"consciousness-predictive-board\",\n          adaptive && \"consciousness-adaptive-board\",\n          eyeTracking && \"consciousness-eye-trackable\",\n          className\n        )}\n        style={{\n          gridTemplateColumns: `repeat(${columns.length}, minmax(${compact ? 96 : 280}px, 1fr))`,\n          gap: compact ? 8 : undefined,\n          padding: compact ? 8 : undefined,\n          minWidth: compact ? 0 : undefined,\n        }}\n        data-consciousness-kanban=\"true\"\n        data-consciousness-active={String(!!consciousness)}\n        data-predictive={String(!!predictive)}\n        data-adaptive={String(!!adaptive)}\n        data-eye-tracking={String(!!eyeTracking)}\n        data-spatial-audio={String(!!spatialAudio)}\n      >\n        {/* Board Metrics */}\n        {showMetrics && boardMetrics && (\n          <div className=\"glass-col-span-full glass-mb-4 glass-p-3 glass-surface-subtle/5 glass-radius-lg glass-border glass-border-white/10\">\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-text-sm\">\n              <div className=\"glass-flex glass-items-center glass-gap-4\">\n                <span className=\"glass-text-primary-glass-opacity-80\">\n                  Total Cards: {boardMetrics.totalCards}\n                </span>\n                <span className=\"glass-text-primary-glass-opacity-80\">\n                  Productivity: {Math.round(boardMetrics.productivity * 100)}%\n                </span>\n                <span className=\"glass-text-primary-glass-opacity-80\">\n                  Completion Rate:{\" \"}\n                  {Math.round(boardMetrics.completionRate * 100)}%\n                </span>\n              </div>\n              {boardMetrics.bottlenecks.length > 0 && (\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <Target className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n                  <span className=\"glass-text-primary glass-text-xs\">\n                    Bottlenecks: {boardMetrics.bottlenecks.join(\", \")}\n                  </span>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Workflow Suggestions */}\n        {predictive && workflowSuggestions.length > 0 && (\n          <div className=\"glass-col-span-full glass-mb-4 glass-p-3 glass-surface-primary/10 glass-radius-lg glass-border glass-border-primary/20\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-2\">\n              <Brain className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n              <span className=\"glass-text-primary glass-text-sm glass-font-medium\">\n                Workflow Suggestions\n              </span>\n            </div>\n            <div className=\"glass-gap-2\">\n              {workflowSuggestions.map((suggestion, index) => (\n                <div\n                  key={index}\n                  className=\"glass-text-xs glass-text-primary-opacity-70 glass-flex glass-items-center glass-justify-between\"\n                >\n                  <span>\n                    Move \"{suggestion.cardId}\" to \"{suggestion.suggestedColumn}\"\n                  </span>\n                  <span className=\"glass-text-primary-glass-opacity-80\">\n                    {suggestion.reason}\n                  </span>\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {columns.map((column) => {\n          const isOverLimit =\n            column.limit && column.cards.length > column.limit;\n          const isFocused = eyeTracking && focusedColumn === column.id;\n          const interactionCount = columnInteractionCounts[column.id] || 0;\n\n          return (\n            <div\n              key={column.id}\n              className={cn(\n                \"glass-gap-3 glass-min-h-200px glass-p-3 glass-radius-xl\",\n                \"bg-white/5 border border-white/10\",\n                isFocused && \"consciousness-column-focused\",\n                isOverLimit && \"consciousness-column-overlimit\",\n                interactionCount > 0 && \"consciousness-column-interacted\",\n                consciousness && \"consciousness-enhanced-column\"\n              )}\n              style={{\n                minHeight: compact ? 120 : undefined,\n                padding: compact ? 10 : undefined,\n                overflow: \"hidden\",\n              }}\n              data-consciousness-column=\"true\"\n              data-column-id={column.id}\n              data-interaction-count={interactionCount}\n              data-gaze-focused={isFocused}\n              data-over-limit={isOverLimit}\n              onClick={() => handleColumnClick(column.id)}\n            >\n              {/* Column Header */}\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <div\n                  className=\"glass-text-sm glass-text-primary glass-font-medium glass-flex glass-items-center glass-gap-2\"\n                  style={{ color: column.color || \"white\" }}\n                >\n                  {column.title}\n                  <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                    ({column.cards.length})\n                  </span>\n                  {isFocused && (\n                    <Eye className=\"glass-w-3 glass-h-3 glass-text-primary\" />\n                  )}\n                </div>\n\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  {!compact && showLimits && column.limit && (\n                    <span\n                      className={cn(\n                        \"glass-text-xs glass-px-2 glass-py-1 glass-radius-md\",\n                        isOverLimit\n                          ? \"bg-red-500/20 text-red-300\"\n                          : \"bg-white/10 glass-text-primary/60\"\n                      )}\n                    >\n                      {column.cards.length}/{column.limit}\n                    </span>\n                  )}\n\n                  {!compact && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      className=\"glass-p-1\"\n                      consciousness={consciousness}\n                      adaptive={adaptive}\n                      spatialAudio={spatialAudio}\n                      trackAchievements={trackAchievements}\n                    >\n                      <Plus className=\"glass-w-3 glass-h-3\" />\n                    </GlassButton>\n                  )}\n\n                  {!compact && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      className=\"glass-p-1\"\n                      consciousness={consciousness}\n                      adaptive={adaptive}\n                      spatialAudio={spatialAudio}\n                      trackAchievements={trackAchievements}\n                    >\n                      <MoreHorizontal className=\"glass-w-3 glass-h-3\" />\n                    </GlassButton>\n                  )}\n                </div>\n              </div>\n\n              {/* Cards */}\n              <div className=\"glass-gap-2\">\n                {column.cards.map((card, cardIndex) => {\n                  const isCardFocused = eyeTracking && focusedCard === card.id;\n                  const cardInteractionCount =\n                    cardInteractionCounts[card.id] || 0;\n                  const hasSuggestion = workflowSuggestions.some(\n                    (s) => s.cardId === card.id\n                  );\n\n                  return (\n                    <OptimizedGlass\n                      key={card.id}\n                      elevation=\"level1\"\n                      className={cn(\n                        \"glass-radius-lg glass-p-3 border cursor-pointer transition-all duration-200\",\n                        \"hover:border-white/30 hover:bg-white/10\",\n                        isCardFocused &&\n                          \"consciousness-card-focused border-primary\",\n                        cardInteractionCount > 0 &&\n                          \"consciousness-card-interacted\",\n                        hasSuggestion &&\n                          \"consciousness-card-suggested border-yellow-400/50\",\n                        card.priority === \"high\" && \"border-red-400/50\",\n                        card.priority === \"medium\" && \"border-yellow-400/50\",\n                        card.priority === \"low\" && \"border-green-400/50\",\n                        consciousness && \"consciousness-enhanced-card\"\n                      )}\n                      style={{\n                        animationDelay: `${cardIndex * 50}ms`,\n                        animationFillMode: \"both\",\n                        padding: compact ? 8 : undefined,\n                      }}\n                      data-consciousness-card=\"true\"\n                      data-card-id={card.id}\n                      data-column-id={column.id}\n                      data-interaction-count={cardInteractionCount}\n                      data-gaze-focused={isCardFocused}\n                      data-priority={card.priority}\n                      data-has-suggestion={hasSuggestion}\n                      onClick={() => handleCardClick(card.id, column.id)}\n                    >\n                      <div className=\"glass-flex glass-items-start glass-justify-between glass-mb-2\">\n                        <div className=\"glass-text-sm glass-text-primary glass-font-medium glass-flex-1\">\n                          {card.title}\n                          {isCardFocused && (\n                            <Eye className=\"glass-inline-glass-block glass-w-3 glass-h-3 glass-text-primary glass-ml-2\" />\n                          )}\n                        </div>\n                        {hasSuggestion && (\n                          <div className=\"glass-text-xs glass-text-primary glass-surface-yellow/20 glass-px-2 glass-py-1 glass-radius-md\">\n                            Suggested\n                          </div>\n                        )}\n                      </div>\n\n                      {card.description && (\n                        <div\n                          className=\"glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n                          style={{ display: compact ? \"none\" : undefined }}\n                        >\n                          {card.description}\n                        </div>\n                      )}\n\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <div className=\"glass-flex glass-items-center glass-gap-2\">\n                          {card.priority && (\n                            <span\n                              className={cn(\n                                \"glass-text-xs glass-px-2 glass-py-1 glass-radius-md\",\n                                card.priority === \"high\" &&\n                                  \"bg-red-500/20 text-red-300\",\n                                card.priority === \"medium\" &&\n                                  \"bg-yellow-500/20 text-yellow-300\",\n                                card.priority === \"low\" &&\n                                  \"bg-green-500/20 text-green-300\"\n                              )}\n                            >\n                              {card.priority}\n                            </span>\n                          )}\n\n                          {card.tags && card.tags.length > 0 && (\n                            <div className=\"glass-flex glass-gap-1\">\n                              {card.tags.slice(0, 2).map((tag, index) => (\n                                <span\n                                  key={index}\n                                  className=\"glass-text-xs glass-text-primary glass-surface-primary/20 glass-px-1 glass-radius-md\"\n                                >\n                                  {tag}\n                                </span>\n                              ))}\n                            </div>\n                          )}\n                        </div>\n\n                        {cardInteractionCount > 0 && (\n                          <span className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                            {cardInteractionCount} interactions\n                          </span>\n                        )}\n                      </div>\n\n                      {card.assignee && (\n                        <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-2\">\n                          Assigned: {card.assignee}\n                        </div>\n                      )}\n\n                      {card.dueDate && (\n                        <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-1\">\n                          Due: {card.dueDate.toLocaleDateString()}\n                        </div>\n                      )}\n                    </OptimizedGlass>\n                  );\n                })}\n              </div>\n            </div>\n          );\n        })}\n      </div>\n    </Motion>\n  );\n}\n\n// Consciousness-Enhanced Kanban Variants\nexport const GlassPredictiveKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban {...props} consciousness={true} predictive={true} />\n);\n\nexport const GlassAdaptiveKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban {...props} consciousness={true} adaptive={true} />\n);\n\nexport const GlassEyeTrackingKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban {...props} consciousness={true} eyeTracking={true} />\n);\n\nexport const GlassSpatialAudioKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban {...props} consciousness={true} spatialAudio={true} />\n);\n\nexport const GlassAchievementKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban {...props} consciousness={true} trackAchievements={true} />\n);\n\nexport const GlassConsciousnessKanban: React.FC<GlassKanbanProps> = (props) => (\n  <GlassKanban\n    {...props}\n    consciousness={true}\n    predictive={true}\n    adaptive={true}\n    eyeTracking={true}\n    spatialAudio={true}\n    trackAchievements={true}\n  />\n);\n\nexport default GlassKanban;\n", "'use client';\nimport React from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface Pair {\n  key: string;\n  value: string;\n}\nexport interface GlassKeyValueEditorProps {\n  value: Pair[];\n  onChange: (pairs: Pair[]) => void;\n  className?: string;\n  'data-testid'?: string;\n}\n\nexport function GlassKeyValueEditor({\n  value,\n  onChange,\n  className,\n  'data-testid': dataTestId,\n}: GlassKeyValueEditorProps) {\n  const update = (i: number, patch: Partial<Pair>) => {\n    const next = value.slice();\n    next[i] = { ...next[i], ...patch };\n    onChange(next);\n  };\n  const add = () => onChange([...value, { key: \"\", value: \"\" }]);\n  const remove = (i: number) => onChange(value.filter((_, idx) => idx !== i));\n\n  return (\n    <div\n      data-glass-component\n      className={cn(\"glass-gap-2\", className)}\n      role=\"group\"\n      aria-label=\"Key-value pair editor\"\n      data-testid={dataTestId || 'glasskeyvalueeditor'}\n    >\n      {value.map((p, i) => (\n        <div\n          key={i}\n          className=\"glass-flex glass-gap-2\"\n          role=\"group\"\n          aria-label={`Key-value pair ${i + 1}`}\n        >\n          <input\n            value={p.key}\n            onChange={(e) => update(i, { key: e.target.value })}\n            placeholder=\"Key\"\n            aria-label={`Key for pair ${i + 1}`}\n            className='glass-flex-1 glass-bg-transparent glass-border glass-border-white/20 glass-radius-lg glass-px-2 glass-py-1 glass-text-sm glass-outline-none glass-focus glass-touch-target glass-contrast-guard'\n          />\n          <input\n            value={p.value}\n            onChange={(e) => update(i, { value: e.target.value })}\n            placeholder=\"Value\"\n            aria-label={`Value for pair ${i + 1}`}\n            className='glass-flex-1 glass-bg-transparent glass-border glass-border-white/20 glass-radius-lg glass-px-2 glass-py-1 glass-text-sm glass-outline-none glass-focus glass-touch-target glass-contrast-guard'\n          />\n          <GlassButton\n            size=\"sm\"\n            variant=\"ghost\"\n            onClick={(e) => remove(i)}\n            aria-label={`Remove pair ${i + 1}`}\n            className=\"glass-focus glass-touch-target\"\n          >\n            Remove\n          </GlassButton>\n        </div>\n      ))}\n      <GlassButton\n        size=\"sm\"\n        variant=\"secondary\"\n        onClick={add}\n        aria-label=\"Add new key-value pair\"\n        className=\"glass-focus glass-touch-target\"\n      >\n        Add\n      </GlassButton>\n    </div>\n  );\n}\n\nexport default GlassKeyValueEditor;", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  AlertCircle,\n  Download,\n  Eye,\n  Heart,\n  Image as ImageIcon,\n  Loader2,\n  Share2,\n  ZoomIn,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassLazyImageProps {\n  /**\n   * Image source URL\n   */\n  src: string;\n  /**\n   * Low quality placeholder image\n   */\n  placeholder?: string;\n  /**\n   * Alt text for the image\n   */\n  alt?: string;\n  /**\n   * Image title\n   */\n  title?: string;\n  /**\n   * Image width\n   */\n  width?: number | string;\n  /**\n   * Image height\n   */\n  height?: number | string;\n  /**\n   * CSS object-fit property\n   */\n  objectFit?: \"contain\" | \"cover\" | \"fill\" | \"none\" | \"scale-down\";\n  /**\n   * Enable blur placeholder\n   */\n  blur?: boolean;\n  /**\n   * Blur intensity (0-10)\n   */\n  blurIntensity?: number;\n  /**\n   * Root margin for intersection observer\n   */\n  rootMargin?: string;\n  /**\n   * Threshold for intersection observer\n   */\n  threshold?: number;\n  /**\n   * Custom loading component\n   */\n  loadingComponent?: React.ReactNode;\n  /**\n   * Custom error component\n   */\n  errorComponent?: React.ReactNode;\n  /**\n   * Enable click to zoom\n   */\n  enableZoom?: boolean;\n  /**\n   * Enable image actions (download, share, etc.)\n   */\n  enableActions?: boolean;\n  /**\n   * Show image stats (views, likes)\n   */\n  showStats?: boolean;\n  /**\n   * Image statistics\n   */\n  stats?: {\n    views?: number;\n    likes?: number;\n    downloads?: number;\n  };\n  /**\n   * Image load callback\n   */\n  onLoad?: () => void;\n  /**\n   * Image error callback\n   */\n  onError?: (error: string) => void;\n  /**\n   * Image click callback\n   */\n  onClick?: (event: React.MouseEvent) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassLazyImage component\n * Lazy loading image with blur placeholder and performance optimizations\n */\nexport const GlassLazyImage: React.FC<GlassLazyImageProps> = ({\n  src,\n  placeholder,\n  alt = \"\",\n  title,\n  width,\n  height,\n  objectFit = \"cover\",\n  blur = true,\n  blurIntensity = 5,\n  rootMargin = \"50px\",\n  threshold = 0.1,\n  loadingComponent,\n  errorComponent,\n  enableZoom = false,\n  enableActions = false,\n  showStats = false,\n  stats,\n  onLoad,\n  onError,\n  onClick,\n  className,\n  ...props\n}) => {\n  const [isLoaded, setIsLoaded] = useState(false);\n  const [isError, setIsError] = useState(false);\n  const [isInView, setIsInView] = useState(false);\n  const [showActionsMenu, setShowActionsMenu] = useState(false);\n  const imgRef = useRef<HTMLImageElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n\n  // Handle intersection observer\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    observerRef.current = new IntersectionObserver(\n      (entries) => {\n        const [entry] = entries;\n        if (entry.isIntersecting) {\n          setIsInView(true);\n          if (observerRef.current) {\n            observerRef.current.disconnect();\n          }\n        }\n      },\n      { rootMargin, threshold }\n    );\n\n    observerRef.current.observe(containerRef.current);\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n    };\n  }, [rootMargin, threshold]);\n\n  // Handle image load\n  const handleLoad = useCallback(() => {\n    setIsLoaded(true);\n    setIsError(false);\n\n    onLoad?.();\n  }, [onLoad]);\n\n  // Handle image error\n  const handleError = useCallback(() => {\n    setIsLoaded(false);\n    setIsError(true);\n    const errorMsg = \"Failed to load image\";\n    onError?.(errorMsg);\n  }, [onError]);\n\n  // Handle image click\n  const handleClick = useCallback(\n    (event: React.MouseEvent) => {\n      onClick?.(event);\n    },\n    [onClick]\n  );\n\n  // Handle zoom\n  const handleZoom = useCallback(() => {\n    if (!enableZoom) return;\n    // Zoom functionality would be implemented here\n    // Could open a modal with zoom controls\n  }, [enableZoom]);\n\n  // Handle download\n  const handleDownload = useCallback(() => {\n    if (!src) return;\n\n    const link = document.createElement(\"a\");\n    link.href = src;\n    link.download = title || \"image\";\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }, [src, title]);\n\n  // Handle share\n  const handleShare = useCallback(async () => {\n    if (!src) return;\n\n    if (navigator.share) {\n      try {\n        await navigator.share({\n          title: title || \"Image\",\n          url: src,\n        });\n      } catch {\n        // Native sharing can be cancelled by the user; no component state changes.\n      }\n    } else {\n      // Fallback: copy to clipboard\n      navigator.clipboard.writeText(src);\n    }\n  }, [src, title]);\n\n  // Default loading component\n  const defaultLoadingComponent = (\n    <Motion\n      preset=\"fadeIn\"\n      className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n    >\n      <div className=\"glass-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2 glass-surface-dark/50 glass-backdrop-blur-md glass-contrast-guard glass-radius-full glass-contrast-guard\">\n        <Loader2 className=\"glass-w-4 glass-h-4 glass-animate-spin glass-text-primary-glass-opacity-80\" />\n        <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm\">\n          Loading...\n        </span>\n      </div>\n    </Motion>\n  );\n\n  // Default error component\n  const defaultErrorComponent = (\n    <Motion\n      preset=\"fadeIn\"\n      className=\"glass-absolute glass-inset-0 glass-flex glass-flex-col glass-items-center glass-justify-center glass-surface-dark/20\"\n    >\n      <AlertCircle className=\"glass-w-8 glass-h-8 glass-text-primary glass-mb-2\" />\n      <span className=\"glass-text-primary glass-text-sm\">\n        Failed to load image\n      </span>\n    </Motion>\n  );\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"fadeIn\"\n      className={cn(\"relative overflow-hidden group cursor-pointer\", className)}\n      style={{\n        width: width || \"auto\",\n        height: height || \"auto\",\n      }}\n      onClick={handleClick}\n      ref={containerRef}\n      {...props}\n    >\n      {/* Placeholder/Loading State */}\n      {(!isLoaded || !isInView) && (\n        <div\n          className=\"glass-absolute glass-inset-0 glass-surface-subtle/10 glass-flex glass-items-center glass-justify-center\"\n          style={{\n            filter: blur ? `blur(${blurIntensity}px)` : \"none\",\n          }}\n        >\n          {placeholder ? (\n            <img\n              src={placeholder}\n              alt=\"Loading...\"\n              className=\"glass-w-full glass-h-full glass-object-cover\"\n            />\n          ) : (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-w-full glass-h-full\">\n              <ImageIcon className=\"glass-w-8 glass-h-8 glass-text-primary-glass-opacity-40\" />\n            </div>\n          )}\n        </div>\n      )}\n\n      {/* Main Image */}\n      {isInView && (\n        <Motion\n          preset=\"fadeIn\"\n          className={cn(\n            \"w-full h-full transition-opacity duration-300\",\n            isLoaded ? \"opacity-100\" : \"opacity-0\"\n          )}\n        >\n          <img\n            ref={imgRef}\n            src={src}\n            alt={alt}\n            className={cn(\n              \"w-full h-full transition-all duration-300\",\n              objectFit === \"contain\" && \"object-contain\",\n              objectFit === \"cover\" && \"object-cover\",\n              objectFit === \"fill\" && \"object-fill\",\n              objectFit === \"none\" && \"object-none\",\n              objectFit === \"scale-down\" && \"object-scale-down\"\n            )}\n            onLoad={handleLoad}\n            onError={handleError}\n            loading=\"lazy\"\n          />\n        </Motion>\n      )}\n\n      {/* Loading Overlay */}\n      {!isLoaded && !isError && isInView && (\n        <div className=\"glass-absolute glass-inset-0\">\n          {loadingComponent || defaultLoadingComponent}\n        </div>\n      )}\n\n      {/* Error Overlay */}\n      {isError && (\n        <div className=\"glass-absolute glass-inset-0\">\n          {errorComponent || defaultErrorComponent}\n        </div>\n      )}\n\n      {/* Image Info Overlay */}\n      {(title || showStats) && (\n        <div className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-p-3 glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity\">\n          {title && (\n            <h3 className=\"glass-text-primary glass-font-medium glass-text-sm glass-mb-1 glass-truncate\">\n              {title}\n            </h3>\n          )}\n\n          {showStats && stats && (\n            <div className=\"glass-flex glass-items-center glass-gap-3 glass-text-primary-glass-opacity-80 glass-text-xs\">\n              {stats.views && (\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <Eye className=\"glass-w-3 glass-h-3\" />\n                  <span>{stats.views}</span>\n                </div>\n              )}\n\n              {stats.likes && (\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <Heart className=\"glass-w-3 glass-h-3\" />\n                  <span>{stats.likes}</span>\n                </div>\n              )}\n\n              {stats.downloads && (\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <Download className=\"glass-w-3 glass-h-3\" />\n                  <span>{stats.downloads}</span>\n                </div>\n              )}\n            </div>\n          )}\n        </div>\n      )}\n\n      {/* Actions Menu */}\n      {enableActions && (\n        <div className=\"glass-absolute glass-top-2 glass-right-2 glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity\">\n          <div className=\"glass-relative\">\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                setShowActionsMenu(!showActionsMenu);\n              }}\n              className=\"glass-p-2 glass-surface-dark/50 glass-backdrop-blur-md glass-contrast-guard glass-radius-full hover:glass-surface-dark/70 glass-transition-colors glass-focus glass-touch-target\"\n            >\n              <span className=\"glass-text-primary glass-text-lg\">\u22EF</span>\n            </button>\n\n            {/* Actions Dropdown */}\n            {showActionsMenu && (\n              <Motion\n                preset=\"slideDown\"\n                className=\"glass-absolute glass-top-full glass-right-0 glass-mt-2\"\n              >\n                <div className=\"glass-surface-dark/80 glass-backdrop-blur-md glass-contrast-guard glass-radius-lg glass-shadow-xl glass-border glass-border-white/20 glass-min-glass-w-32 glass-contrast-guard\">\n                  {enableZoom && (\n                    <button\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        handleZoom();\n                        setShowActionsMenu(false);\n                      }}\n                      className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-text-primary-glass-opacity-90 hover:glass-surface-subtle/10 glass-transition-colors glass-flex glass-items-center glass-gap-3 first:glass-radius-t-lg glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      <ZoomIn className=\"glass-w-4 glass-h-4\" />\n                      <span className=\"glass-text-sm\">Zoom</span>\n                    </button>\n                  )}\n\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      handleDownload();\n                      setShowActionsMenu(false);\n                    }}\n                    className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-text-primary-glass-opacity-90 hover:glass-surface-subtle/10 glass-transition-colors glass-flex glass-items-center glass-gap-3 glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    <Download className=\"glass-w-4 glass-h-4\" />\n                    <span className=\"glass-text-sm\">Download</span>\n                  </button>\n\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      handleShare();\n                      setShowActionsMenu(false);\n                    }}\n                    className=\"glass-w-full glass-text-left glass-px-4 glass-py-3 glass-text-primary-glass-opacity-90 hover:glass-surface-subtle/10 glass-transition-colors glass-flex glass-items-center glass-gap-3 last:glass-radius-b-lg glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    <Share2 className=\"glass-w-4 glass-h-4\" />\n                    <span className=\"glass-text-sm\">Share</span>\n                  </button>\n                </div>\n              </Motion>\n            )}\n          </div>\n        </div>\n      )}\n    </Motion>\n  );\n};\n\nexport default GlassLazyImage;\n", "'use client';\nimport React from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface MentionItem {\n  id: string;\n  label: string;\n  meta?: string;\n}\nexport interface GlassMentionListProps {\n  items: MentionItem[];\n  onSelect: (id: string) => void;\n  className?: string;\n}\n\nexport function GlassMentionList({\n  items: incomingItems = [],\n  onSelect = () => {},\n  className,\n}: GlassMentionListProps) {\n  const items = Array.isArray(incomingItems) ? incomingItems : [];\n\n  return (\n    <OptimizedGlass\n      data-glass-component\n      elevation={\"level2\"}\n      className={cn(\n        \"glass-radius-lg glass-p-1 border border-white/15\",\n        className\n      )}\n    >\n      <ul className='glass-max-h-60 glass-overflow-auto'>\n        {items.length === 0 ? (\n          <li className='glass-text-sm glass-text-secondary glass-py-3 glass-text-center'>\n            No mentions available.\n          </li>\n        ) : (\n          items.map((it: any) => (\n            <li key={it.id}>\n              <button\n                onClick={() => onSelect(it.id)}\n                className='glass-w-full glass-text-left glass-px-3 glass-py-2 glass-radius-md hover:glass-surface-subtle/10 glass-focus glass-touch-target'\n              >\n                <div className='glass-text-sm glass-text-primary'>{it.label}</div>\n                {it.meta && (\n                  <div className='glass-text-xs glass-text-primary-glass-opacity-60'>{it.meta}</div>\n                )}\n              </button>\n            </li>\n          ))\n        )}\n      </ul>\n    </OptimizedGlass>\n  );\n}\n\nexport default GlassMentionList;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  AlertCircle,\n  Check,\n  CheckCheck,\n  Clock,\n  Download,\n  File,\n  Heart,\n  Image as ImageIcon,\n  MoreHorizontal,\n  Reply,\n  Video,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\nimport { ChatMessage } from \"./GlassChat\";\n\nexport interface GlassMessageListProps {\n  /**\n   * Messages to display\n   */\n  messages?: ChatMessage[];\n  /**\n   * Current user ID\n   */\n  currentUserId?: string;\n  /**\n   * Enable message reactions\n   */\n  enableReactions?: boolean;\n  /**\n   * Enable message replies\n   */\n  enableReplies?: boolean;\n  /**\n   * Show message status\n   */\n  showMessageStatus?: boolean;\n  /**\n   * Show timestamps\n   */\n  showTimestamps?: boolean;\n  /**\n   * Show user avatars\n   */\n  showAvatars?: boolean;\n  /**\n   * Enable message search\n   */\n  enableSearch?: boolean;\n  /**\n   * Virtual scrolling\n   */\n  virtualScroll?: boolean;\n  /**\n   * Message click handler\n   */\n  onMessageClick?: (message: ChatMessage) => void;\n  /**\n   * Message reaction handler\n   */\n  onMessageReaction?: (messageId: string, emoji: string) => void;\n  /**\n   * Message reply handler\n   */\n  onMessageReply?: (messageId: string) => void;\n  /**\n   * Attachment download handler\n   */\n  onAttachmentDownload?: (attachment: { url: string; name: string }) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the message list inside a bounded local surface. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n}\n\n/**\n * GlassMessageList component\n * A scrollable list of chat messages with reactions, replies, and attachments\n */\nexport const GlassMessageList: React.FC<GlassMessageListProps> = ({\n  messages = [],\n  currentUserId,\n  enableReactions = true,\n  enableReplies = true,\n  showMessageStatus = true,\n  showTimestamps = true,\n  showAvatars = true,\n  enableSearch = false,\n  virtualScroll = false,\n  onMessageClick,\n  onMessageReaction,\n  onMessageReply,\n  onAttachmentDownload,\n  className,\n  compact = false,\n  contained = false,\n  preview = false,\n  maxHeight,\n  maxWidth,\n  density = \"comfortable\",\n  \"data-testid\": dataTestId,\n  ...props\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const [selectedMessage, setSelectedMessage] = useState<string | null>(null);\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  const [showSearch, setShowSearch] = useState(false);\n\n  const messagesEndRef = useRef<HTMLDivElement>(null);\n\n  // Auto-scroll to bottom\n  useEffect(() => {\n    if (\n      messagesEndRef.current &&\n      typeof messagesEndRef.current.scrollIntoView === \"function\"\n    ) {\n      messagesEndRef.current.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }, [messages]);\n\n  // Handle message click\n  const handleMessageClick = useCallback(\n    (message: ChatMessage) => {\n      setSelectedMessage(selectedMessage === message.id ? null : message.id);\n      onMessageClick?.(message);\n    },\n    [selectedMessage, onMessageClick]\n  );\n\n  // Handle reaction\n  const handleReaction = useCallback(\n    (messageId: string, emoji: string) => {\n      onMessageReaction?.(messageId, emoji);\n    },\n    [onMessageReaction]\n  );\n\n  // Handle reply\n  const handleReply = useCallback(\n    (messageId: string) => {\n      onMessageReply?.(messageId);\n    },\n    [onMessageReply]\n  );\n\n  // Handle attachment download\n  const handleAttachmentDownload = useCallback(\n    (attachment: { url: string; name: string }) => {\n      onAttachmentDownload?.(attachment);\n    },\n    [onAttachmentDownload]\n  );\n\n  // Format timestamp\n  const formatTimestamp = useCallback((date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n\n    if (minutes < 1) return \"now\";\n    if (minutes < 60) return `${minutes}m`;\n    if (hours < 24) return `${hours}h`;\n    return date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n  }, []);\n\n  // Filter messages based on search\n  const filteredMessages = searchQuery\n    ? messages.filter(\n        (message: any) =>\n          message.content.toLowerCase().includes(searchQuery.toLowerCase()) ||\n          message.sender.name.toLowerCase().includes(searchQuery.toLowerCase())\n      )\n    : messages;\n\n  // Group messages by date\n  const groupedMessages = filteredMessages.reduce(\n    (groups, message) => {\n      const date = message.timestamp.toDateString();\n      if (!groups[date]) {\n        groups[date] = [];\n      }\n      groups[date].push(message);\n      return groups;\n    },\n    {} as Record<string, ChatMessage[]>\n  );\n  const isCompact = compact || preview || density === \"compact\";\n  const bounded = contained || isCompact;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const resolvedMaxWidth =\n    typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n  const effectiveShowAvatars = isCompact ? false : showAvatars;\n  const effectiveShowStatus = isCompact ? false : showMessageStatus;\n  const effectiveEnableReplies = isCompact ? false : enableReplies;\n\n  return (\n    <Motion\n      data-glass-component\n      preset=\"fadeIn\"\n      className=\"glass-w-full glass-h-full\"\n    >\n      <GlassCard\n        className={cn(\n          \"flex flex-col h-full overflow-hidden\",\n          bounded && \"glass-w-full\",\n          isCompact && \"glass-text-sm\",\n          className\n        )}\n        style={{\n          maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n          maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n        }}\n        data-testid={dataTestId}\n        role=\"log\"\n        aria-label=\"Message list\"\n        {...props}\n      >\n        {/* Search header */}\n        {enableSearch && showSearch && (\n          <div\n            className={cn(\n              isCompact ? \"glass-p-2\" : \"glass-p-4\",\n              \"glass-border-b glass-border-white/10\"\n            )}\n          >\n            <input\n              type=\"text\"\n              placeholder=\"Search messages...\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"glass-w-full glass-bg-fill glass-ring-1 glass-ring-white-opacity-10 glass-radius-lg glass-px-4 glass-py-2 glass-text-primary glass-placeholder-white-opacity-50 glass-focus-outline-none glass-focus-ring-white-opacity-30 glass-focus glass-touch-target glass-contrast-guard\"\n            />\n          </div>\n        )}\n\n        {/* Messages */}\n        <CardContent\n          className={cn(\n            \"glass-flex-1 glass-overflow-y-auto\",\n            isCompact ? \"glass-p-2\" : \"glass-p-4\"\n          )}\n          spacing={isCompact ? \"sm\" : \"lg\"}\n        >\n          {Object.entries(groupedMessages).map(([date, dateMessages]) => (\n            <div key={date}>\n              {/* Date separator */}\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-center\",\n                  isCompact ? \"glass-my-2\" : \"glass-my-6\"\n                )}\n              >\n                <div className=\"glass-px-3 glass-py-1 glass-surface-subtle/10 glass-radius-full\">\n                  <span className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                    {new Date(date).toLocaleDateString()}\n                  </span>\n                </div>\n              </div>\n\n              {/* Messages for this date */}\n              <div\n                className={cn(\n                  \"glass-auto-gap\",\n                  isCompact ? \"glass-auto-gap-sm\" : \"glass-auto-gap-md\"\n                )}\n              >\n                {dateMessages.map((message, index) => {\n                  const isCurrentUser = message.sender.id === currentUserId;\n                  const isSelected = selectedMessage === message.id;\n\n                  return (\n                    <div\n                      key={message.id}\n                      className={cn(\n                        \"group relative cursor-pointer glass-focus glass-touch-target\",\n                        !prefersReducedMotion &&\n                          \"transition-all duration-200 animate-slide-in-up\",\n                        isSelected && \"ring-2 ring-primary glass-radius-lg\"\n                      )}\n                      style={{\n                        animationDelay: `${Math.min(index, 20) * 20}ms`,\n                        animationFillMode: \"both\",\n                      }}\n                      onClick={() => handleMessageClick(message)}\n                    >\n                      <div\n                        className={cn(\n                          \"flex glass-radius-lg transition-all duration-200\",\n                          isCompact\n                            ? \"glass-gap-2 glass-p-2\"\n                            : \"glass-gap-3 glass-p-3\",\n                          isSelected ? \"bg-primary/20\" : \"hover:bg-white/5\"\n                        )}\n                      >\n                        {/* Avatar */}\n                        {effectiveShowAvatars && (\n                          <div className=\"glass-flex-shrink-0\">\n                            <div className=\"glass-w-10 glass-h-10 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                              {message.sender.avatar ? (\n                                <img\n                                  src={message.sender.avatar}\n                                  alt={message.sender.name}\n                                  className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                                />\n                              ) : (\n                                <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                                  {message.sender.name.charAt(0).toUpperCase()}\n                                </span>\n                              )}\n                            </div>\n                          </div>\n                        )}\n\n                        {/* Message content */}\n                        <div className=\"glass-flex-1 glass-min-w-0\">\n                          {/* Header */}\n                          <div\n                            className={cn(\n                              \"glass-flex glass-items-center glass-gap-2\",\n                              isCompact ? \"glass-mb-0\" : \"glass-mb-1\"\n                            )}\n                          >\n                            <span className=\"glass-text-primary glass-font-medium glass-text-sm\">\n                              {message.sender.name}\n                            </span>\n\n                            {message.sender.status && (\n                              <div\n                                className={cn(\n                                  \"w-2 h-2 glass-radius-full\",\n                                  message.sender.status === \"online\"\n                                    ? \"bg-green-400\"\n                                    : message.sender.status === \"away\"\n                                      ? \"bg-yellow-400\"\n                                      : message.sender.status === \"busy\"\n                                        ? \"bg-red-400\"\n                                        : \"bg-gray-400\"\n                                )}\n                              />\n                            )}\n\n                            {showTimestamps && !isCompact && (\n                              <span className=\"glass-text-primary-glass-opacity-60 glass-text-xs glass-flex glass-items-center glass-gap-1\">\n                                <Clock className=\"glass-w-3 glass-h-3\" />\n                                {formatTimestamp(message.timestamp)}\n                              </span>\n                            )}\n\n                            {message.edited && (\n                              <span className=\"glass-text-primary-glass-opacity-50 glass-text-xs\">\n                                (edited)\n                              </span>\n                            )}\n                          </div>\n\n                          {/* Message text */}\n                          <div\n                            className={cn(\n                              \"glass-text-primary-glass-opacity-90 glass-leading-relaxed\",\n                              isCompact\n                                ? \"glass-text-xs glass-line-clamp-2\"\n                                : \"glass-text-sm\"\n                            )}\n                          >\n                            {message.content}\n                          </div>\n\n                          {/* Attachments */}\n                          {message.attachments &&\n                            message.attachments.length > 0 &&\n                            !isCompact && (\n                              <div className=\"glass-mt-3 glass-auto-gap glass-auto-gap-sm\">\n                                {message.attachments.map(\n                                  (attachment, attIndex) => (\n                                    <div\n                                      key={attIndex}\n                                      className=\"glass-flex glass-items-center glass-gap-3 glass-p-3 glass-surface-dark/20 glass-radius-lg hover:glass-surface-dark/30 glass-transition-colors glass-cursor-pointer glass-border glass-border-white/10 hover:glass-border-white/20 glass-focus glass-touch-target glass-contrast-guard\"\n                                      onClick={(e) => {\n                                        e.stopPropagation();\n                                        handleAttachmentDownload({\n                                          url: attachment.url,\n                                          name: attachment.name,\n                                        });\n                                      }}\n                                    >\n                                      <div className=\"glass-flex-shrink-0\">\n                                        {attachment.type === \"image\" && (\n                                          <ImageIcon className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n                                        )}\n                                        {attachment.type === \"video\" && (\n                                          <Video className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n                                        )}\n                                        {attachment.type === \"file\" && (\n                                          <File className=\"glass-w-5 glass-h-5 glass-text-primary\" />\n                                        )}\n                                      </div>\n\n                                      <div className=\"glass-flex-1 glass-min-w-0\">\n                                        <p className=\"glass-text-primary-glass-opacity-90 glass-text-sm glass-truncate\">\n                                          {attachment.name}\n                                        </p>\n                                        {attachment.size && (\n                                          <p className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                                            {(\n                                              attachment.size /\n                                              1024 /\n                                              1024\n                                            ).toFixed(1)}{\" \"}\n                                            MB\n                                          </p>\n                                        )}\n                                      </div>\n\n                                      <GlassButton\n                                        variant=\"ghost\"\n                                        size=\"sm\"\n                                        className=\"glass-p-1\"\n                                      >\n                                        <Download className=\"glass-w-4 glass-h-4\" />\n                                      </GlassButton>\n                                    </div>\n                                  )\n                                )}\n                              </div>\n                            )}\n\n                          {/* Reactions */}\n                          {message.reactions &&\n                            message.reactions.length > 0 && (\n                              <div className=\"glass-flex glass-gap-1 glass-mt-2\">\n                                {message.reactions.map(\n                                  (reaction, reactionIndex) => (\n                                    <GlassButton\n                                      key={reactionIndex}\n                                      variant=\"ghost\"\n                                      size=\"sm\"\n                                      onClick={(e) => {\n                                        e.stopPropagation();\n                                        handleReaction(\n                                          message.id,\n                                          reaction.emoji\n                                        );\n                                      }}\n                                      className=\"glass-h-6 glass-px-2 glass-text-xs glass-surface-subtle/10 glass-focus glass-touch-target\"\n                                    >\n                                      {reaction.emoji} {reaction.count}\n                                    </GlassButton>\n                                  )\n                                )}\n                              </div>\n                            )}\n                        </div>\n\n                        {/* Message actions */}\n                        {!isCompact && (\n                          <div className=\"glass-absolute glass-right-2 glass-top-2 glass-z-10 glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity\">\n                            <div className=\"glass-flex glass-flex-col glass-gap-1\">\n                              {enableReactions && (\n                                <GlassButton\n                                  variant=\"ghost\"\n                                  size=\"sm\"\n                                  onClick={(e) => {\n                                    e.stopPropagation();\n                                    handleReaction(message.id, \"\uD83D\uDC4D\");\n                                  }}\n                                  className=\"glass-p-1 glass-focus glass-touch-target\"\n                                >\n                                  <Heart className=\"glass-w-3 glass-h-3\" />\n                                </GlassButton>\n                              )}\n\n                              {effectiveEnableReplies && (\n                                <GlassButton\n                                  variant=\"ghost\"\n                                  size=\"sm\"\n                                  onClick={(e) => {\n                                    e.stopPropagation();\n                                    handleReply(message.id);\n                                  }}\n                                  className=\"glass-p-1 glass-focus glass-touch-target\"\n                                >\n                                  <Reply className=\"glass-w-3 glass-h-3\" />\n                                </GlassButton>\n                              )}\n\n                              <GlassButton\n                                variant=\"ghost\"\n                                size=\"sm\"\n                                onClick={(e) => e.stopPropagation()}\n                                className=\"glass-p-1 glass-focus glass-touch-target\"\n                              >\n                                <MoreHorizontal className=\"glass-w-3 glass-h-3\" />\n                              </GlassButton>\n                            </div>\n                          </div>\n                        )}\n\n                        {/* Message status */}\n                        {effectiveShowStatus && isCurrentUser && (\n                          <div className=\"glass-flex-shrink-0 glass-ml-2\">\n                            {message.type === \"system\" ? (\n                              <AlertCircle className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n                            ) : (\n                              <div className=\"glass-flex\">\n                                <Check className=\"glass-w-3 glass-h-3 glass-text-primary-glass-opacity-60\" />\n                                <CheckCheck className=\"glass-w-3 glass-h-3 glass-text-primary glass--ml-1\" />\n                              </div>\n                            )}\n                          </div>\n                        )}\n                      </div>\n                    </div>\n                  );\n                })}\n              </div>\n            </div>\n          ))}\n\n          <div ref={messagesEndRef} />\n        </CardContent>\n\n        {/* Search toggle */}\n        {enableSearch && (\n          <div\n            className={cn(\n              isCompact ? \"glass-p-2\" : \"glass-p-4\",\n              \"glass-border-t glass-border-white/10\"\n            )}\n          >\n            <GlassButton\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={() => setShowSearch(!showSearch)}\n              className=\"glass-w-full glass-focus glass-touch-target\"\n            >\n              {showSearch ? \"Hide Search\" : \"Search Messages\"}\n            </GlassButton>\n          </div>\n        )}\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassMessageList;\n", "\"use client\";\nimport React from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Select as GlassSelect,\n  SelectTrigger as GlassSelectTrigger,\n  SelectValue as GlassSelectValue,\n  SelectContent as GlassSelectContent,\n  SelectItem as GlassSelectItem,\n} from \"../input/GlassSelectCompound\";\n\nexport interface FieldDef {\n  id: string;\n  label: string;\n  type: \"text\" | \"number\" | \"select\";\n  options?: { label: string; value: string }[];\n}\nexport interface Rule {\n  field: string;\n  op: string;\n  value: unknown;\n}\nexport interface RuleGroup {\n  combinator: \"AND\" | \"OR\";\n  rules: (Rule | RuleGroup)[];\n}\n\nexport interface GlassQueryBuilderProps {\n  fields?: FieldDef[];\n  value?: RuleGroup;\n  onChange?: (v: RuleGroup) => void;\n  className?: string;\n  /**\n   * Custom data-testid for testing\n   */\n  \"data-testid\"?: string;\n}\n\nfunction isGroup(x: unknown): x is RuleGroup {\n  return Boolean(\n    x &&\n      typeof x === \"object\" &&\n      Array.isArray((x as { rules?: unknown }).rules)\n  );\n}\n\nconst getRuleInputValue = (value: unknown): string => {\n  if (typeof value === \"string\" || typeof value === \"number\") {\n    return String(value);\n  }\n  return \"\";\n};\n\nconst lightOnDarkButtonStyle: React.CSSProperties = {\n  color: \"rgba(255, 255, 255, 0.95)\",\n};\n\nexport function GlassQueryBuilder({\n  fields = [],\n  value = { combinator: \"AND\", rules: [] },\n  onChange = () => {},\n  className,\n  \"data-testid\": dataTestId,\n}: GlassQueryBuilderProps) {\n  const update = (group: RuleGroup) => onChange({ ...group });\n\n  const renderRule = (rule: Rule, idx: number, parent: RuleGroup) => {\n    const field = fields.find((f) => f.id === rule.field) || fields[0];\n    return (\n      <div\n        data-glass-component\n        key={idx}\n        className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-2\"\n      >\n        <GlassSelect\n          value={rule.field}\n          onValueChange={(v) => {\n            rule.field = v;\n            update(value);\n          }}\n        >\n          <GlassSelectTrigger\n            className=\"glass-w-40 glass-h-8 glass-text-sm\"\n            aria-label=\"Select field\"\n          >\n            <GlassSelectValue placeholder=\"Field\" />\n          </GlassSelectTrigger>\n          <GlassSelectContent>\n            {fields.map((f: any) => (\n              <GlassSelectItem key={f.id} value={f.id}>\n                {f.label}\n              </GlassSelectItem>\n            ))}\n          </GlassSelectContent>\n        </GlassSelect>\n        <GlassSelect\n          value={rule.op}\n          onValueChange={(v) => {\n            rule.op = v;\n            update(value);\n          }}\n        >\n          <GlassSelectTrigger\n            className=\"glass-w-28 glass-h-8 glass-text-sm\"\n            aria-label=\"Select operator\"\n          >\n            <GlassSelectValue placeholder=\"Op\" />\n          </GlassSelectTrigger>\n          <GlassSelectContent>\n            {[\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"contains\"].map((op) => (\n              <GlassSelectItem key={op} value={op}>\n                {op}\n              </GlassSelectItem>\n            ))}\n          </GlassSelectContent>\n        </GlassSelect>\n        {field.type === \"select\" ? (\n          <GlassSelect\n            value={getRuleInputValue(rule.value)}\n            onValueChange={(v) => {\n              const next = v === \"__clear__\" ? \"\" : v;\n              rule.value = next;\n              update(value);\n            }}\n          >\n            <GlassSelectTrigger\n              className=\"glass-w-48 glass-h-8 glass-text-sm\"\n              aria-label=\"Select value\"\n            >\n              <GlassSelectValue placeholder=\"Value\" />\n            </GlassSelectTrigger>\n            <GlassSelectContent>\n              <GlassSelectItem value=\"__clear__\">\u2014</GlassSelectItem>\n              {field.options?.map((o) => (\n                <GlassSelectItem key={o.value} value={o.value}>\n                  {o.label}\n                </GlassSelectItem>\n              ))}\n            </GlassSelectContent>\n          </GlassSelect>\n        ) : (\n          <input\n            value={getRuleInputValue(rule.value)}\n            onChange={(e) => {\n              rule.value = e.target.value;\n              update(value);\n            }}\n            className=\"glass-min-w-0 glass-flex-1 glass-bg-white/10 glass-border glass-border-white/35 glass-radius-md glass-px-2 glass-py-1 glass-text-sm glass-text-white glass-placeholder-white/70 glass-focus glass-touch-target glass-contrast-guard\"\n          />\n        )}\n        <GlassButton\n          size=\"sm\"\n          variant=\"ghost\"\n          onClick={(e) => {\n            parent.rules.splice(idx, 1);\n            update(value);\n          }}\n          className=\"glass-text-white hover:glass-text-white\"\n          style={lightOnDarkButtonStyle}\n        >\n          Remove\n        </GlassButton>\n      </div>\n    );\n  };\n\n  const renderGroup = (group: RuleGroup, parent?: RuleGroup) => (\n    <div className=\"glass-radius-xl glass-border glass-border-white/25 glass-bg-white/10 glass-backdrop-blur-md glass-p-3 glass-space-y-3 glass-text-white glass-contrast-guard\">\n      <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-2\">\n        <GlassSelect\n          value={group.combinator}\n          onValueChange={(v) => {\n            group.combinator = v as any;\n            update(value);\n          }}\n        >\n          <GlassSelectTrigger\n            className=\"glass-w-24 glass-h-8 glass-text-sm\"\n            aria-label=\"Select combinator (AND/OR)\"\n          >\n            <GlassSelectValue />\n          </GlassSelectTrigger>\n          <GlassSelectContent>\n            <GlassSelectItem value=\"AND\">AND</GlassSelectItem>\n            <GlassSelectItem value=\"OR\">OR</GlassSelectItem>\n          </GlassSelectContent>\n        </GlassSelect>\n        <GlassButton\n          size=\"sm\"\n          variant=\"secondary\"\n          onClick={(e) => {\n            group.rules.push({ field: fields[0].id, op: \"=\", value: \"\" });\n            update(value);\n          }}\n        >\n          + Rule\n        </GlassButton>\n        <GlassButton\n          size=\"sm\"\n          variant=\"ghost\"\n          onClick={(e) => {\n            group.rules.push({ combinator: \"AND\", rules: [] });\n            update(value);\n          }}\n          className=\"glass-text-white hover:glass-text-white\"\n          style={lightOnDarkButtonStyle}\n        >\n          + Group\n        </GlassButton>\n        {parent && (\n          <GlassButton\n            size=\"sm\"\n            variant=\"ghost\"\n            onClick={(e) => {\n              parent.rules.splice(parent.rules.indexOf(group), 1);\n              update(value);\n            }}\n            className=\"glass-text-white hover:glass-text-white\"\n            style={lightOnDarkButtonStyle}\n          >\n            Remove\n          </GlassButton>\n        )}\n      </div>\n      <div className=\"glass-space-y-2\">\n        {group.rules.map((r, i) =>\n          isGroup(r) ? (\n            <div key={i}>{renderGroup(r, group)}</div>\n          ) : (\n            renderRule(r as Rule, i, group)\n          )\n        )}\n      </div>\n    </div>\n  );\n\n  return (\n    <div\n      className={cn(\n        \"glass-w-full glass-max-w-3xl glass-space-y-2 glass-text-white\",\n        className\n      )}\n      data-testid={dataTestId}\n      role=\"group\"\n      aria-label=\"Query builder\"\n    >\n      {renderGroup(value)}\n    </div>\n  );\n}\n\nexport default GlassQueryBuilder;\n", "'use client';\nimport { cn } from \"@/lib/utils\";\n\nimport React from \"react\";\nimport { GlassButton } from \"../button/GlassButton\";\n\nexport interface Reaction {\n  key: string;\n  label: string;\n  count: number;\n}\nexport interface GlassReactionBarProps {\n  reactions: Reaction[];\n  onReact?: (key: string) => void;\n  className?: string;\n}\n\nexport function GlassReactionBar({\n  reactions: incomingReactions = [],\n  onReact,\n  className,\n}: GlassReactionBarProps) {\n  const reactions = Array.isArray(incomingReactions) ? incomingReactions : [];\n\n  return (\n    <div data-glass-component className={className}>\n      <div className=\"glass-flex glass-gap-2\">\n        {reactions.length === 0 ? (\n          <span className=\"glass-text-sm glass-text-secondary\">\n            No reactions yet.\n          </span>\n        ) : (\n          reactions.map((r: any) => (\n            <GlassButton\n              key={r.key}\n              variant=\"ghost\"\n              size=\"sm\"\n              onClick={() => onReact?.(r.key)}\n            >\n              <span className=\"glass-mr-1\">{r.label}</span>\n              <span className='glass-text-primary-opacity-70'>{r.count}</span>\n            </GlassButton>\n          ))\n        )}\n      </div>\n    </div>\n  );\n}\n\nexport default GlassReactionBar;\n", "\"use client\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { GlassInput } from \"../input/GlassInput\";\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { FocusTrap } from \"../../primitives/focus/FocusTrap\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { GlassBadge } from \"../data-display/GlassBadge\";\n\nexport interface SearchResult {\n  id: string;\n  title: string;\n  description?: string;\n  category?: string;\n  url?: string;\n  metadata?: Record<string, unknown>;\n  highlighted?: {\n    title?: string;\n    description?: string;\n  };\n}\n\nexport interface SearchFilter {\n  id: string;\n  label: string;\n  value: string;\n  count?: number;\n}\n\nexport interface SearchCategory {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  count?: number;\n}\n\nconst DEFAULT_SEARCH_RESULTS: SearchResult[] = [\n  {\n    id: \"surface-system\",\n    title: \"Surface system\",\n    description: \"Glass primitives, tokens, and elevation recipes.\",\n    category: \"Components\",\n  },\n  {\n    id: \"live-filters\",\n    title: \"Live filters\",\n    description: \"Keyboard-friendly filters with visible selected state.\",\n    category: \"Patterns\",\n  },\n];\n\nconst DEFAULT_SEARCH_SUGGESTIONS = [\"glass surface\", \"data grid\", \"navigation\"];\nconst DEFAULT_RECENT_SEARCHES = [\"accessibility\", \"charts\"];\nconst DEFAULT_SEARCH_CATEGORIES: SearchCategory[] = [\n  { id: \"components\", label: \"Components\", count: 126 },\n  { id: \"patterns\", label: \"Patterns\", count: 34 },\n];\n\nconst DEFAULT_SEARCH_FILTERS: Record<string, SearchFilter[]> = {\n  type: [\n    { id: \"stable\", label: \"Stable\", value: \"stable\", count: 84 },\n    {\n      id: \"interactive\",\n      label: \"Interactive\",\n      value: \"interactive\",\n      count: 29,\n    },\n  ],\n};\n\nexport interface GlassSearchInterfaceProps {\n  /**\n   * Search placeholder text\n   */\n  placeholder?: string;\n  /**\n   * Search value\n   */\n  value?: string;\n  /**\n   * Search change handler\n   */\n  onChange?: (value: string) => void;\n  /**\n   * Search submit handler\n   */\n  onSearch?: (query: string, filters: Record<string, string[]>) => void;\n  /**\n   * Search results\n   */\n  results?: SearchResult[];\n  /**\n   * Search suggestions\n   */\n  suggestions?: string[];\n  /**\n   * Recent searches\n   */\n  recentSearches?: string[];\n  /**\n   * Available filters\n   */\n  filters?: Record<string, SearchFilter[]>;\n  /**\n   * Selected filters\n   */\n  selectedFilters?: Record<string, string[]>;\n  /**\n   * Filter change handler\n   */\n  onFiltersChange?: (filters: Record<string, string[]>) => void;\n  /**\n   * Search categories\n   */\n  categories?: SearchCategory[];\n  /**\n   * Active category\n   */\n  activeCategory?: string;\n  /**\n   * Category change handler\n   */\n  onCategoryChange?: (categoryId: string) => void;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Result click handler\n   */\n  onResultClick?: (result: SearchResult) => void;\n  /**\n   * Custom result renderer\n   */\n  renderResult?: (result: SearchResult) => React.ReactNode;\n  /**\n   * Search interface variant\n   */\n  variant?: \"default\" | \"modal\" | \"inline\" | \"compact\";\n  /**\n   * Whether to show filters\n   */\n  showFilters?: boolean;\n  /**\n   * Whether to show categories\n   */\n  showCategories?: boolean;\n  /**\n   * Maximum results to show\n   */\n  maxResults?: number;\n  /**\n   * Debounce delay for search\n   */\n  debounceDelay?: number;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * GlassSearchInterface component\n * Advanced search interface with filters, categories, and results\n */\nexport const GlassSearchInterface = forwardRef<\n  HTMLDivElement,\n  GlassSearchInterfaceProps\n>(\n  (\n    {\n      placeholder = \"Search...\",\n      value = \"\",\n      onChange,\n      onSearch,\n      results = [],\n      suggestions = [],\n      recentSearches = [],\n      filters = {},\n      selectedFilters = {},\n      onFiltersChange,\n      categories = [],\n      activeCategory,\n      onCategoryChange,\n      loading = false,\n      emptyMessage = \"No results found\",\n      onResultClick,\n      renderResult,\n      variant = \"default\",\n      showFilters = true,\n      showCategories = true,\n      maxResults = 10,\n      debounceDelay = 300,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValue, setInternalValue] = useState(value);\n    const [isOpen, setIsOpen] = useState(false);\n    const [focusedIndex, setFocusedIndex] = useState(-1);\n    const searchRef = useRef<HTMLInputElement>(null);\n    const resultsRef = useRef<HTMLDivElement>(null);\n    const debounceRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n    const shouldUseDemoContent =\n      !value &&\n      !loading &&\n      results.length === 0 &&\n      suggestions.length === 0 &&\n      recentSearches.length === 0 &&\n      categories.length === 0 &&\n      Object.keys(filters).length === 0;\n    const searchResults = shouldUseDemoContent\n      ? DEFAULT_SEARCH_RESULTS\n      : results;\n    const searchSuggestions = shouldUseDemoContent\n      ? DEFAULT_SEARCH_SUGGESTIONS\n      : suggestions;\n    const searchRecentSearches = shouldUseDemoContent\n      ? DEFAULT_RECENT_SEARCHES\n      : recentSearches;\n    const searchCategories = shouldUseDemoContent\n      ? DEFAULT_SEARCH_CATEGORIES\n      : categories;\n    const searchFilters = shouldUseDemoContent\n      ? DEFAULT_SEARCH_FILTERS\n      : filters;\n    const effectiveShowFilters = showFilters && !shouldUseDemoContent;\n    const displayResults = searchResults.slice(0, maxResults);\n    const hasActiveFilters = Object.values(selectedFilters).some(\n      (arr) => arr.length > 0\n    );\n\n    // Debounced search\n    const debouncedSearch = useCallback(\n      (query: string) => {\n        if (debounceRef.current) {\n          clearTimeout(debounceRef.current);\n        }\n\n        debounceRef.current = setTimeout(() => {\n          onSearch?.(query, selectedFilters);\n        }, debounceDelay);\n      },\n      [onSearch, selectedFilters, debounceDelay]\n    );\n\n    // Handle input change\n    const handleInputChange = (newValue: string) => {\n      setInternalValue(newValue);\n      onChange?.(newValue);\n      setIsOpen(true);\n      setFocusedIndex(-1);\n\n      if (newValue.trim()) {\n        debouncedSearch(newValue);\n      }\n    };\n\n    // Handle filter change\n    const handleFilterChange = (\n      filterId: string,\n      optionValue: string,\n      checked: boolean\n    ) => {\n      const currentFilters = { ...selectedFilters };\n\n      if (!currentFilters[filterId]) {\n        currentFilters[filterId] = [];\n      }\n\n      if (checked) {\n        currentFilters[filterId] = [...currentFilters[filterId], optionValue];\n      } else {\n        currentFilters[filterId] = currentFilters[filterId].filter(\n          (v: any) => v !== optionValue\n        );\n      }\n\n      onFiltersChange?.(currentFilters);\n\n      if (internalValue.trim()) {\n        onSearch?.(internalValue, currentFilters);\n      }\n    };\n\n    // Handle keyboard navigation\n    const handleKeyDown = (event: React.KeyboardEvent) => {\n      if (!isOpen) return;\n\n      const totalItems =\n        searchSuggestions.length +\n        displayResults.length +\n        searchRecentSearches.length;\n      if (totalItems <= 0) return;\n\n      switch (event.key) {\n        case \"ArrowDown\":\n          event.preventDefault();\n          setFocusedIndex((prev: any) => (prev + 1) % totalItems);\n          break;\n        case \"ArrowUp\":\n          event.preventDefault();\n          setFocusedIndex((prev: any) => (prev - 1 + totalItems) % totalItems);\n          break;\n        case \"Enter\":\n          event.preventDefault();\n          if (focusedIndex >= 0) {\n            handleItemSelect(focusedIndex);\n          } else if (internalValue.trim()) {\n            onSearch?.(internalValue, selectedFilters);\n            setIsOpen(false);\n          }\n          break;\n        case \"Escape\":\n          event.preventDefault();\n          setIsOpen(false);\n          setFocusedIndex(-1);\n          break;\n      }\n    };\n\n    // Handle item selection\n    const handleItemSelect = (index: number) => {\n      let currentIndex = 0;\n\n      // Check suggestions\n      if (index < searchSuggestions.length) {\n        const suggestion = searchSuggestions[index];\n        setInternalValue(suggestion);\n        onChange?.(suggestion);\n        onSearch?.(suggestion, selectedFilters);\n        setIsOpen(false);\n        return;\n      }\n      currentIndex += searchSuggestions.length;\n\n      // Check recent searches\n      if (index < currentIndex + searchRecentSearches.length) {\n        const recent = searchRecentSearches[index - currentIndex];\n        setInternalValue(recent);\n        onChange?.(recent);\n        onSearch?.(recent, selectedFilters);\n        setIsOpen(false);\n        return;\n      }\n      currentIndex += searchRecentSearches.length;\n\n      // Check results\n      if (index < currentIndex + displayResults.length) {\n        const result = displayResults[index - currentIndex];\n        onResultClick?.(result);\n        setIsOpen(false);\n        return;\n      }\n    };\n\n    // Clear filters\n    const clearFilters = () => {\n      onFiltersChange?.({});\n      if (internalValue.trim()) {\n        onSearch?.(internalValue, {});\n      }\n    };\n\n    // Clear search\n    const clearSearch = () => {\n      setInternalValue(\"\");\n      onChange?.(\"\");\n      setIsOpen(false);\n    };\n\n    const variantClasses = {\n      default: \"glass-w-full\",\n      modal: \"glass-w-full\",\n      inline: \"glass-w-full\",\n      compact: \"glass-w-full\",\n    };\n\n    const variantStyles: Record<\n      NonNullable<GlassSearchInterfaceProps[\"variant\"]>,\n      React.CSSProperties\n    > = {\n      default: { maxWidth: \"42rem\" },\n      modal: { maxWidth: \"56rem\" },\n      inline: {},\n      compact: { maxWidth: \"28rem\" },\n    };\n\n    return (\n      <div\n        data-glass-component\n        ref={ref}\n        className={cn(\n          \"glass-relative glass-min-w-0 glass-max-w-full\",\n          variantClasses[variant],\n          className\n        )}\n        style={{ minWidth: 0, ...variantStyles[variant], ...style }}\n        {...props}\n      >\n        {/* Categories */}\n        {showCategories && searchCategories.length > 0 && (\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-4 glass-overflow-x-auto\">\n            <GlassButton\n              variant={!activeCategory ? \"primary\" : \"ghost\"}\n              size=\"sm\"\n              onClick={(e) => onCategoryChange?.(\"\")}\n            >\n              All\n            </GlassButton>\n            {searchCategories.map((category) => (\n              <GlassButton\n                key={category.id}\n                variant={activeCategory === category.id ? \"primary\" : \"ghost\"}\n                size=\"sm\"\n                leftIcon={category.icon}\n                onClick={(e) => onCategoryChange?.(category.id)}\n              >\n                {category.label}\n                {category.count && (\n                  <GlassBadge\n                    variant=\"outline\"\n                    size=\"xs\"\n                    className=\"glass-ml-2\"\n                  >\n                    {category.count}\n                  </GlassBadge>\n                )}\n              </GlassButton>\n            ))}\n          </div>\n        )}\n\n        {/* Search GlassInput */}\n        <div className=\"glass-relative\">\n          <GlassInput\n            ref={searchRef}\n            value={internalValue}\n            onChange={(e) => handleInputChange(e.target.value)}\n            onFocus={() => setIsOpen(true)}\n            onKeyDown={handleKeyDown}\n            placeholder={placeholder}\n            leftIcon={\n              <svg\n                className=\"glass-w-4 glass-h-4\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                viewBox=\"0 0 24 24\"\n              >\n                <path\n                  strokeLinecap=\"round\"\n                  strokeLinejoin=\"round\"\n                  strokeWidth={2}\n                  d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                />\n              </svg>\n            }\n            rightIcon={\n              loading ? (\n                <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-current glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n              ) : undefined\n            }\n            clearable\n            onClear={clearSearch}\n            fullWidth\n          />\n\n          {/* Active filters indicator */}\n          {hasActiveFilters && (\n            <div className=\"glass-absolute glass--right-12 glass-top-1/2 glass--translate-y-1-2\">\n              <GlassBadge\n                variant=\"default\"\n                size=\"xs\"\n                onClick={clearFilters}\n                className=\"glass-cursor-pointer\"\n              >\n                {Object.values(selectedFilters).flat().length} filters\n              </GlassBadge>\n            </div>\n          )}\n        </div>\n\n        {/* Search Results Dropdown */}\n        {isOpen && (\n          <Motion\n            preset=\"slideDown\"\n            className=\"glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-2 glass-z-50\"\n          >\n            <OptimizedGlass\n              intent=\"neutral\"\n              elevation=\"level2\"\n              intensity=\"medium\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              animation=\"none\"\n              performanceMode=\"medium\"\n              className=\"glass-border glass-border-white/10 glass-surface-dark/30 glass-max-h-96 glass-overflow-hidden\"\n            >\n              <FocusTrap active={isOpen} onEscape={() => setIsOpen(false)}>\n                <div\n                  ref={resultsRef}\n                  className=\"glass-overflow-y-auto glass-max-h-96\"\n                >\n                  {/* Suggestions */}\n                  {searchSuggestions.length > 0 && (\n                    <div className=\"glass-p-2 glass-border-b glass-border-white/20\">\n                      <h4 className=\"glass-px-3 glass-py-2 glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                        Suggestions\n                      </h4>\n                      {searchSuggestions.map((suggestion, index) => (\n                        <GlassButton\n                          key={suggestion}\n                          className={cn(\n                            \"glass-w-full glass-flex glass-items-center glass-gap-3 glass-px-3 glass-py-2 glass-radius-md glass-text-left\",\n                            \"glass-transition\",\n                            focusedIndex === index && \"glass-surface-subtle/20\"\n                          )}\n                          onClick={(e) => handleItemSelect(index)}\n                        >\n                          <svg\n                            className=\"glass-w-4 glass-h-4 glass-text-secondary\"\n                            fill=\"none\"\n                            stroke=\"currentColor\"\n                            viewBox=\"0 0 24 24\"\n                          >\n                            <path\n                              strokeLinecap=\"round\"\n                              strokeLinejoin=\"round\"\n                              strokeWidth={2}\n                              d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                            />\n                          </svg>\n                          <span>{suggestion}</span>\n                        </GlassButton>\n                      ))}\n                    </div>\n                  )}\n\n                  {/* Recent Searches */}\n                  {searchRecentSearches.length > 0 && (\n                    <div className=\"glass-p-2 glass-border-b glass-border-white/20\">\n                      <h4 className=\"glass-px-3 glass-py-2 glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                        Recent Searches\n                      </h4>\n                      {searchRecentSearches.map((recent, index) => {\n                        const globalIndex = searchSuggestions.length + index;\n                        return (\n                          <GlassButton\n                            key={recent}\n                            className={cn(\n                              \"glass-w-full glass-flex glass-items-center glass-gap-3 glass-px-3 glass-py-2 glass-radius-md glass-text-left\",\n                              \"glass-transition\",\n                              focusedIndex === globalIndex &&\n                                \"glass-surface-subtle/20\"\n                            )}\n                            onClick={(e) => handleItemSelect(globalIndex)}\n                          >\n                            <svg\n                              className=\"glass-w-4 glass-h-4 glass-text-secondary\"\n                              fill=\"none\"\n                              stroke=\"currentColor\"\n                              viewBox=\"0 0 24 24\"\n                            >\n                              <path\n                                strokeLinecap=\"round\"\n                                strokeLinejoin=\"round\"\n                                strokeWidth={2}\n                                d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"\n                              />\n                            </svg>\n                            <span>{recent}</span>\n                          </GlassButton>\n                        );\n                      })}\n                    </div>\n                  )}\n\n                  {/* Search Results */}\n                  {displayResults.length > 0 ? (\n                    <div className=\"glass-p-2\">\n                      <h4 className=\"glass-px-3 glass-py-2 glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                        Results ({searchResults.length})\n                      </h4>\n                      {displayResults.map((result, index) => {\n                        const globalIndex =\n                          searchSuggestions.length +\n                          searchRecentSearches.length +\n                          index;\n                        return (\n                          <GlassButton\n                            key={result.id}\n                            className={cn(\n                              \"glass-w-full glass-flex glass-items-start glass-gap-3 glass-px-3 glass-py-3 glass-radius-md glass-text-left\",\n                              \"glass-transition\",\n                              focusedIndex === globalIndex &&\n                                \"glass-surface-subtle/20\"\n                            )}\n                            onClick={(e) => handleItemSelect(globalIndex)}\n                          >\n                            {renderResult ? (\n                              renderResult(result)\n                            ) : (\n                              <>\n                                <div className=\"glass-w-8 glass-h-8 glass-radius-md glass-surface-primary/10 glass-flex glass-items-center glass-justify-center glass-flex-shrink-0 glass-mt-0-5\">\n                                  <svg\n                                    className=\"glass-w-4 glass-h-4 glass-text-primary\"\n                                    fill=\"none\"\n                                    stroke=\"currentColor\"\n                                    viewBox=\"0 0 24 24\"\n                                  >\n                                    <path\n                                      strokeLinecap=\"round\"\n                                      strokeLinejoin=\"round\"\n                                      strokeWidth={2}\n                                      d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n                                    />\n                                  </svg>\n                                </div>\n                                <div className=\"glass-flex-1 glass-min-w-0\">\n                                  <h5 className=\"glass-font-medium glass-text-primary\">\n                                    {result.highlighted?.title || result.title}\n                                  </h5>\n                                  {result.description && (\n                                    <p className=\"glass-text-sm glass-text-secondary glass-mt-1 glass-line-clamp-2\">\n                                      {result.highlighted?.description ||\n                                        result.description}\n                                    </p>\n                                  )}\n                                  {result.category && (\n                                    <GlassBadge\n                                      variant=\"outline\"\n                                      size=\"xs\"\n                                      className=\"glass-mt-2\"\n                                    >\n                                      {result.category}\n                                    </GlassBadge>\n                                  )}\n                                </div>\n                              </>\n                            )}\n                          </GlassButton>\n                        );\n                      })}\n\n                      {searchResults.length > maxResults && (\n                        <div className=\"glass-px-3 glass-py-2 glass-text-center\">\n                          <GlassButton\n                            variant=\"ghost\"\n                            size=\"sm\"\n                            onClick={(e) =>\n                              onSearch?.(internalValue, selectedFilters)\n                            }\n                          >\n                            View all {searchResults.length} results\n                          </GlassButton>\n                        </div>\n                      )}\n                    </div>\n                  ) : internalValue.trim() && !loading ? (\n                    <div className=\"glass-p-8 glass-text-center\">\n                      <div className=\"glass-w-12 glass-h-12 glass-radius-full glass-surface-subtle glass-flex glass-items-center glass-justify-center glass-mx-auto glass-mb-3\">\n                        <svg\n                          className=\"glass-w-6 glass-h-6 glass-text-secondary\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          viewBox=\"0 0 24 24\"\n                        >\n                          <path\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                            strokeWidth={2}\n                            d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n                          />\n                        </svg>\n                      </div>\n                      <p className=\"glass-text-secondary\">{emptyMessage}</p>\n                    </div>\n                  ) : null}\n                </div>\n              </FocusTrap>\n            </OptimizedGlass>\n          </Motion>\n        )}\n\n        {/* Filters Sidebar */}\n        {effectiveShowFilters &&\n          Object.keys(searchFilters).length > 0 &&\n          variant !== \"compact\" && (\n            <OptimizedGlass\n              intent=\"neutral\"\n              elevation={\"level1\"}\n              intensity=\"subtle\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              animation=\"none\"\n              performanceMode=\"medium\"\n              className=\"glass-mt-3 glass-p-3 glass-border glass-border-white/10 glass-surface-dark/30 glass-max-h-52 glass-overflow-auto\"\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3 glass-gap-2\">\n                <h3 className=\"glass-font-medium glass-text-primary glass-text-sm\">\n                  Filters\n                </h3>\n                {hasActiveFilters && (\n                  <GlassButton variant=\"ghost\" size=\"sm\" onClick={clearFilters}>\n                    Clear all\n                  </GlassButton>\n                )}\n              </div>\n\n              <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-3\">\n                {Object.entries(searchFilters).map(([filterId, options]) => (\n                  <div key={filterId}>\n                    <h4 className=\"glass-font-medium glass-text-sm glass-text-primary glass-mb-2\">\n                      {filterId.charAt(0).toUpperCase() + filterId.slice(1)}\n                    </h4>\n                    <div className=\"glass-space-y-1.5\">\n                      {options.map((option) => (\n                        <label\n                          key={option.id}\n                          className=\"glass-flex glass-items-center glass-gap-2 glass-cursor-pointer glass-min-w-0\"\n                        >\n                          <GlassInput\n                            type=\"checkbox\"\n                            checked={\n                              selectedFilters[filterId]?.includes(\n                                option.value\n                              ) || false\n                            }\n                            onChange={(e) =>\n                              handleFilterChange(\n                                filterId,\n                                option.value,\n                                e.target.checked\n                              )\n                            }\n                            className=\"glass-radius-md glass-border-white/20 glass-focus-ring-primary glass-shrink-0\"\n                          />\n                          <span className=\"glass-text-sm glass-text-primary glass-flex-1 glass-min-w-0 glass-truncate\">\n                            {option.label}\n                          </span>\n                          {option.count && (\n                            <span className=\"glass-text-xs glass-text-secondary\">\n                              {option.count}\n                            </span>\n                          )}\n                        </label>\n                      ))}\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </OptimizedGlass>\n          )}\n      </div>\n    );\n  }\n);\n\nGlassSearchInterface.displayName = \"GlassSearchInterface\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nimport React, {\n  forwardRef,\n  HTMLAttributes,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassSpotlightProps extends HTMLAttributes<HTMLDivElement> {\n  targetRect?: DOMRect | null;\n  onClose?: () => void;\n  padding?: number;\n  /** Keep the spotlight inside a local container instead of using fixed viewport overlay. */\n  contained?: boolean;\n  /** Alias for contained catalog/documentation previews. */\n  preview?: boolean;\n  /** Show a package-owned animated local spotlight when no targetRect is provided. */\n  demoMotion?: boolean;\n  /** Whether to honor reduced-motion settings for the package-owned demo motion. */\n  respectMotionPreference?: boolean;\n  /** Local preview height. */\n  height?: number | string;\n  /** Local preview max-height. */\n  maxHeight?: number | string;\n}\n\nexport const GlassSpotlight = forwardRef<HTMLDivElement, GlassSpotlightProps>(\n  (\n    {\n      targetRect,\n      onClose,\n      className,\n      children,\n      padding = 8,\n      contained = false,\n      preview = false,\n      demoMotion = false,\n      respectMotionPreference = true,\n      height,\n      maxHeight,\n      style,\n      ...rest\n    },\n    ref\n  ) => {\n    const isContained = contained || preview;\n    const prefersReducedMotion = useReducedMotion();\n    const shouldAnimate =\n      demoMotion && (respectMotionPreference ? !prefersReducedMotion : true);\n    const [demoPhase, setDemoPhase] = useState(0);\n    const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const holeStyle = useMemo((): React.CSSProperties | undefined => {\n      if (!targetRect) return undefined;\n\n      return {\n        position: \"absolute\",\n        left: targetRect.left - padding,\n        top: targetRect.top - padding,\n        width: targetRect.width + padding * 2,\n        height: targetRect.height + padding * 2,\n        borderRadius: 12,\n        boxShadow: \"0 0 0 9999px var(--glass-text-tertiary-dark)\",\n        pointerEvents: \"none\",\n      };\n    }, [targetRect, padding]);\n\n    const spotlightHoleStyle = holeStyle ? { ...holeStyle } : undefined;\n\n    useEffect(() => {\n      if (!shouldAnimate) return undefined;\n      let raf = 0;\n      const start = performance.now();\n      const tick = (now: number) => {\n        setDemoPhase((now - start) / 1000);\n        raf = requestAnimationFrame(tick);\n      };\n      raf = requestAnimationFrame(tick);\n      return () => cancelAnimationFrame(raf);\n    }, [shouldAnimate]);\n\n    const demoX = 14 + Math.sin(demoPhase * 1.35) * 60;\n    const demoY = 12 + Math.cos(demoPhase * 1.08) * 44;\n    const demoScale = 1.04 + Math.sin(demoPhase * 1.5) * 0.16;\n    const demoOpacity = 0.76 + Math.sin(demoPhase * 1.24) * 0.22;\n\n    return (\n      <div\n        ref={ref}\n        data-glass-component\n        className={cn(\n          isContained ? \"relative overflow-hidden\" : \"fixed inset-0\",\n          className\n        )}\n        style={{\n          ...{\n            background: targetRect\n              ? \"transparent\"\n              : \"linear-gradient(135deg, rgba(15,23,42,0.7), rgba(15,23,42,0.85))\",\n            minHeight: resolvedHeight ?? (isContained ? \"202px\" : undefined),\n            maxHeight: resolvedMaxHeight,\n            width: isContained ? \"100%\" : undefined,\n          },\n          ...(style ?? {}),\n        }}\n        onClick={onClose}\n        {...rest}\n      >\n        {!targetRect && demoMotion ? (\n          <>\n            <div\n              aria-hidden=\"true\"\n              className=\"ag-glass-spotlight-demo-orb\"\n              style={{\n                transform: shouldAnimate\n                  ? `translate(${demoX}%, ${demoY}%) scale(${demoScale})`\n                  : \"translate(28%, 22%) scale(1)\",\n                opacity: shouldAnimate ? demoOpacity : 0.78,\n              }}\n            />\n            <style>{`\n              .ag-glass-spotlight-demo-orb {\n                position: absolute;\n                width: 210px;\n                height: 210px;\n                border-radius: 999px;\n                background: radial-gradient(circle, rgba(255,255,255,0.58) 0%, rgba(124,211,255,0.46) 23%, rgba(216,111,255,0.20) 48%, transparent 76%);\n                filter: blur(1px);\n                pointer-events: none;\n              }\n              @keyframes ag-glass-spotlight-demo {\n                0% { transform: translate(18%, 8%) scale(0.92); opacity: 0.62; }\n                50% { transform: translate(58%, 28%) scale(1.08); opacity: 0.95; }\n                100% { transform: translate(28%, 52%) scale(0.98); opacity: 0.72; }\n              }\n              .ag-glass-spotlight-demo-orb {\n                animation: ag-glass-spotlight-demo 3.4s ease-in-out infinite alternate;\n              }\n              @media (prefers-reduced-motion: reduce) {\n                .ag-glass-spotlight-demo-orb { animation: none; }\n              }\n            `}</style>\n          </>\n        ) : null}\n        {spotlightHoleStyle ? (\n          <div style={{ ...spotlightHoleStyle }} />\n        ) : (\n          <span className=\"glass-sr-only\">Glass spotlight inactive</span>\n        )}\n        {children}\n      </div>\n    );\n  }\n);\n\nGlassSpotlight.displayName = \"GlassSpotlight\";\n\nexport default GlassSpotlight;\n", "\"use client\";\nimport React, { useEffect, useRef } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface Step {\n  id: string;\n  label: string;\n  optional?: boolean;\n}\nexport interface GlassStepperProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"steps\" | \"active\" | \"onChange\"\n> {\n  steps?: Step[];\n  active?: string;\n  onChange?: (id: string) => void;\n}\n\nconst DEFAULT_STEPS: Step[] = [\n  { id: \"step1\", label: \"Step 1\" },\n  { id: \"step2\", label: \"Step 2\" },\n  { id: \"step3\", label: \"Step 3\" },\n];\n\nexport function GlassStepper({\n  steps = DEFAULT_STEPS,\n  active = DEFAULT_STEPS[0].id,\n  onChange,\n  className,\n  ...htmlProps\n}: GlassStepperProps) {\n  const lastActiveRef = useRef<string | null>(null);\n\n  useEffect(() => {\n    lastActiveRef.current = active;\n  }, [active]);\n\n  return (\n    <div\n      data-glass-component\n      className={cn(\n        \"glass-flex glass-flex-wrap glass-items-center glass-justify-center glass-gap-3 glass-w-full glass-min-w-0\",\n        className\n      )}\n      {...htmlProps}\n    >\n      {steps.map((s, i) => {\n        const isActive = s.id === active;\n        const wasJustActivated = isActive && lastActiveRef.current !== active;\n        return (\n          <div key={s.id} className=\"glass-flex glass-items-center glass-gap-3\">\n            <button\n              type=\"button\"\n              aria-current={isActive ? \"step\" : undefined}\n              aria-label={`Go to ${s.label}${isActive ? \" (current step)\" : \"\"}`}\n              className={cn(\n                `glass-px-3 glass-py-1.5 glass-radius-full glass-text-sm transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                \"ring-1 ring-white/10 bg-glass-fill glass-hover--translate-y-0-5 glass-press glass-ripple\",\n                \"glass-focus glass-touch-target glass-contrast-guard\",\n                \"glass-flex-shrink-0 glass-whitespace-nowrap\",\n                isActive ? \"glass-text-primary\" : \"glass-text-primary/80\"\n              )}\n              onClick={(e) => onChange?.(s.id)}\n            >\n              <span\n                className={cn(\n                  \"relative\",\n                  wasJustActivated && \"glass-pulse-ring\"\n                )}\n              >\n                {s.label}\n              </span>\n            </button>\n            {i < steps.length - 1 && (\n              <div className=\"glass-w-8 glass-h-px glass-surface-subtle/15\" />\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n\nexport default GlassStepper;\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { GlassButton } from \"../button/GlassButton\";\nimport { OptimizedGlass } from \"../../primitives\";\n\nexport interface GlassTagInputProps {\n  value?: string[];\n  onChange?: (tags: string[]) => void;\n  placeholder?: string;\n  suggestions?: string[];\n  className?: string;\n}\n\nexport function GlassTagInput({\n  value = [],\n  onChange = () => {},\n  placeholder = \"Add tag\u2026\",\n  suggestions = [],\n  className,\n}: GlassTagInputProps) {\n  const [input, setInput] = React.useState(\"\");\n  const add = (t: string) => {\n    const tag = t.trim();\n    if (!tag) return;\n    if (!value.includes(tag)) onChange([...value, tag]);\n    setInput(\"\");\n  };\n  const remove = (tag: string) => onChange(value.filter((v: any) => v !== tag));\n\n  return (\n    <OptimizedGlass\n      data-glass-component\n      elevation={\"level1\"}\n      intensity=\"subtle\"\n      animation=\"none\"\n      className={cn(\n        \"glass-radius-xl glass-p-2 glass-flex glass-flex-wrap glass-items-center glass-gap-2 glass-w-full glass-min-w-0 glass-border glass-border-white/10\",\n        className\n      )}\n      style={{\n        background:\n          \"var(--glass-primary-level3-surface)\",\n        border: \"1px solid rgba(148, 163, 184, 0.2)\",\n        boxShadow:\n          \"0 8px 22px rgba(2, 6, 23, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n      }}\n    >\n      {value.map((t) => (\n        <span\n          key={t}\n          className=\"glass-inline-flex glass-items-center glass-gap-1 glass-px-2 glass-py-1 glass-text-sm glass-radius-lg glass-surface-dark/40 glass-border glass-border-white/10 glass-text-primary\"\n        >\n          {t}\n          <button\n            onClick={(e) => remove(t)}\n            className=\"glass-text-primary-glass-opacity-60 glass-bg-transparent glass-border-0 glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            \u00D7\n          </button>\n        </span>\n      ))}\n      <input\n        value={input}\n        onChange={(e) => setInput(e.target.value)}\n        onKeyDown={(e) => {\n          if (e.key === \"Enter\") {\n            e.preventDefault();\n            add(input);\n          } else if (e.key === \"Backspace\" && !input && value.length) {\n            remove(value[value.length - 1]);\n          }\n        }}\n        placeholder={placeholder}\n        className=\"glass-flex-1 glass-min-w-120px glass-bg-transparent glass-border-0 glass-outline-none glass-text-sm glass-text-primary glass-placeholder-text-primary-opacity-50 glass-focus glass-touch-target glass-contrast-guard\"\n      />\n      {!!suggestions.length && input && (\n        <div className=\"glass-w-full glass--mb-1\">\n          <div className=\"glass-mt-1 glass-radius-lg glass-border glass-border-white/15 glass-surface-dark/20 glass-p-1\">\n            {suggestions\n              .filter((s: any) => s.toLowerCase().includes(input.toLowerCase()))\n              .slice(0, 6)\n              .map((s: any) => (\n                <GlassButton\n                  key={s}\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  className=\"glass-w-full glass-justify-start\"\n                  onClick={(e) => add(s)}\n                >\n                  {s}\n                </GlassButton>\n              ))}\n          </div>\n        </div>\n      )}\n    </OptimizedGlass>\n  );\n}\n\nexport default GlassTagInput;\n", "\"use client\";\n/**\n * GlassThemeDemo Component\n *\n * A comprehensive theme demo component to showcase themed Glass UI components.\n * Migrated to use OptimizedGlass architecture.\n */\nimport React, { forwardRef, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nimport { GlassAlert as Alert } from \"../data-display/GlassAlert\";\nimport { GlassAvatar as Avatar } from \"../data-display/GlassAvatar\";\nimport { GlassBadge as Badge } from \"../data-display/GlassBadge\";\nimport { Box } from \"../layout/Box\";\nimport { GlassButton as Button } from \"../button\";\nimport { GlassCard as Card } from \"../card\";\nimport { GlassCheckbox as Checkbox } from \"../input/GlassCheckbox\";\nimport { GlassMetricChip as Chip } from \"../data-display/GlassMetricChip\";\nimport { GlassProgress as Progress } from \"../data-display/GlassProgress\";\nimport { GlassRadioGroup as Radio } from \"../input/GlassRadioGroup\";\nimport { GlassSelect as Select } from \"../input/GlassSelect\";\nimport { GlassSlider as Slider } from \"../input/GlassSlider\";\nimport { GlassSwitch as Switch } from \"../input/GlassSwitch\";\nimport {\n  GlassTabs as Tabs,\n  GlassTabsContent as TabsContent,\n  GlassTabsList,\n  GlassTabsTrigger,\n} from \"../navigation/GlassTabs\";\nimport { GlassInput as TextField } from \"../input/GlassInput\";\nimport { Typography } from \"../data-display/Typography\";\n\nimport { GlassThemeSwitcher } from \"./GlassThemeSwitcher\";\nimport { CursorGlow } from \"./CursorGlow\";\nimport { GlassThemeDemoProps } from \"./types\";\n\n// Helper to map glass intensity to elevation level\nconst mapIntensityToElevation = (\n  intensity: number\n): \"level1\" | \"level2\" | \"level3\" | \"level4\" => {\n  if (intensity <= 0.3) return \"level1\";\n  if (intensity <= 0.6) return \"level2\";\n  if (intensity <= 0.8) return \"level3\";\n  return \"level4\";\n};\n\n// Categories of components to showcase\nconst COMPONENT_CATEGORIES = {\n  inputs: \"Input Components\",\n  feedback: \"Feedback Components\",\n  layout: \"Layout Components\",\n  navigation: \"Navigation Components\",\n  display: \"Display Components\",\n};\n\n/**\n * GlassThemeDemo Component\n *\n * A comprehensive theme demo component to showcase themed Glass UI components.\n * Now optimized with OptimizedGlass architecture for better performance.\n */\nexport const GlassThemeDemo = forwardRef<HTMLDivElement, GlassThemeDemoProps>(\n  (\n    {\n      title = \"Glass UI Theme Demo\",\n      description = \"Explore different theme options and see how components adapt to theme changes.\",\n      showThemeSwitcher = true,\n      showExamples = true,\n      customExamples,\n      glassIntensity = 0.7,\n      className,\n      style,\n      header,\n      footer,\n      showPerformanceMetrics = false,\n      useTabs = true,\n      showCode = false,\n      interactive = true,\n      includedCategories = Object.keys(COMPONENT_CATEGORIES),\n      minimal = false,\n      compact = false,\n      contained = false,\n      maxHeight,\n      animation,\n      ...rest\n    }: GlassThemeDemoProps,\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [activeTab, setActiveTab] = useState(0);\n\n    // Map glass intensity to elevation level\n    const elevation = mapIntensityToElevation(glassIntensity);\n    const isCompact = compact || minimal;\n    const boundedHeight =\n      maxHeight ?? (isCompact || contained ? 240 : undefined);\n\n    if (isCompact) {\n      return (\n        <OptimizedGlass\n          ref={ref}\n          elevation={elevation}\n          tier=\"medium\"\n          className={cn(\n            \"glass-theme-demo glass-theme-demo--compact glass-radius-xl glass-p-4 glass-overflow-hidden glass-w-full\",\n            className\n          )}\n          style={{\n            maxHeight:\n              typeof boundedHeight === \"number\"\n                ? `${boundedHeight}px`\n                : boundedHeight,\n            ...(style ?? {}),\n          }}\n          {...rest}\n        >\n          <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-3 glass-mb-3\">\n            <div className=\"glass-min-w-0\">\n              <Typography\n                variant=\"h3\"\n                className=\"glass-text-base glass-font-semibold glass-mb-1\"\n              >\n                {title}\n              </Typography>\n              {description && (\n                <Typography\n                  variant=\"p\"\n                  className=\"glass-text-xs glass-text-secondary glass-line-clamp-2\"\n                >\n                  {description}\n                </Typography>\n              )}\n            </div>\n            <div className=\"glass-flex glass-gap-1 glass-shrink-0\">\n              {[\"#7dd3fc\", \"#a78bfa\", \"#34d399\"].map((color) => (\n                <span\n                  key={color}\n                  aria-hidden\n                  className=\"glass-block glass-h-5 glass-w-5 glass-radius-full glass-ring-1 glass-ring-white/20\"\n                  style={{ backgroundColor: color }}\n                />\n              ))}\n            </div>\n          </div>\n          <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n            <Card className=\"glass-p-3 glass-min-w-0\">\n              <Typography variant=\"p\" className=\"glass-text-xs glass-mb-2\">\n                Surface\n              </Typography>\n              <Button size=\"sm\" variant=\"primary\">\n                Primary\n              </Button>\n            </Card>\n            <Card className=\"glass-p-3 glass-min-w-0\">\n              <Typography variant=\"p\" className=\"glass-text-xs glass-mb-2\">\n                Signal\n              </Typography>\n              <Progress variant=\"primary\" value={68} />\n            </Card>\n          </div>\n        </OptimizedGlass>\n      );\n    }\n\n    // Example components by category\n    const categoryExamples = {\n      inputs: (\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-mt-4\">\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Button\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}\n            >\n              <Button variant=\"primary\">Primary</Button>\n              <Button variant=\"outline\">Outline</Button>\n              <Button variant=\"ghost\">Ghost</Button>\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Button variant=\"contained\">Contained</Button>\n<Button variant=\"outlined\">Outlined</Button>\n<Button variant=\"text\">Text</Button>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Text Field\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}\n            >\n              <TextField placeholder=\"Standard\" />\n              <TextField placeholder=\"With placeholder\" />\n              <TextField placeholder=\"Disabled\" disabled />\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<TextField label=\"Standard\" />\n<TextField label=\"With placeholder\" placeholder=\"Type here...\" />\n<TextField label=\"Disabled\" disabled />`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Select\n            </Typography>\n            <Select\n              placeholder=\"Select Option\"\n              options={[\n                { value: \"option1\", label: \"Option 1\" },\n                { value: \"option2\", label: \"Option 2\" },\n                { value: \"option3\", label: \"Option 3\" },\n              ]}\n            />\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Select\n  label=\"Select Option\"\n  options={[\n    { value: 'option1', label: 'Option 1' },\n    { value: 'option2', label: 'Option 2' },\n    { value: 'option3', label: 'Option 3' },\n  ]}\n/>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Checkbox & Radio\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}\n            >\n              <Checkbox label=\"Checkbox Option\" />\n              <Radio options={[{ value: \"radio1\", label: \"Radio Option\" }]} />\n              <Switch label=\"Switch Option\" />\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Checkbox label=\"Checkbox Option\" />\n<Radio label=\"Radio Option\" name=\"radio-group\" />\n<Switch label=\"Switch Option\" />`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Slider\n            </Typography>\n            <Slider\n              defaultValue={50}\n              aria-label=\"Theme intensity slider\"\n              aria-labelledby=\"glass-theme-demo-slider-label\"\n            />\n            <Typography\n              id=\"glass-theme-demo-slider-label\"\n              variant=\"p\"\n              className=\"glass-text-secondary glass-text-xs glass-mt-1\"\n            >\n              Adjust theme intensity for preview components.\n            </Typography>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">{`<Slider defaultValue={50} aria-label=\"Slider\" />`}</pre>\n            )}\n          </Card>\n        </div>\n      ),\n\n      feedback: (\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-mt-4\">\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Alert\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}\n            >\n              <Alert variant=\"info\">Info message</Alert>\n              <Alert variant=\"success\">Success message</Alert>\n              <Alert variant=\"warning\">Warning message</Alert>\n              <Alert variant=\"error\">Error message</Alert>\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Alert severity=\"info\">Info message</Alert>\n<Alert severity=\"success\">Success message</Alert>\n<Alert severity=\"warning\">Warning message</Alert>\n<Alert severity=\"error\">Error message</Alert>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Progress\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"16px\" }}\n            >\n              <Progress variant=\"primary\" value={75} />\n              <Progress variant=\"gradient\" indeterminate />\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Progress variant=\"determinate\" value={75} />\n<Progress variant=\"indeterminate\" />`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Badge\n            </Typography>\n            <Box style={{ display: \"flex\", gap: \"16px\" }}>\n              <Badge content=\"4\">\n                <Button>Messages</Button>\n              </Badge>\n              <Badge content=\"New\" variant=\"destructive\">\n                <Button>Updates</Button>\n              </Badge>\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Badge content={4}>\n  <Button>Messages</Button>\n</Badge>\n<Badge content=\"New\" color=\"error\">\n  <Button>Updates</Button>\n</Badge>`}\n              </pre>\n            )}\n          </Card>\n        </div>\n      ),\n\n      layout: (\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-mt-4\">\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Card\n            </Typography>\n            <Card>\n              <Box style={{ padding: \"16px\" }}>\n                <Typography variant=\"h4\">Card Title</Typography>\n                <Typography variant=\"p\">Card content with text</Typography>\n                <Box style={{ ...{ marginTop: \"16px\" } }}>\n                  <Button size=\"sm\">Action</Button>\n                </Box>\n              </Box>\n            </Card>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Card>\n  <Box p={2}>\n    <Typography variant=\"h5\">Card Title</Typography>\n    <Typography variant=\"body2\">Card content with text</Typography>\n    <Box mt={2}>\n      <Button size=\"small\">Action</Button>\n    </Box>\n  </Box>\n</Card>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Paper Card\n            </Typography>\n            <Card>\n              <Box style={{ padding: \"16px\" }}>\n                <Typography>Paper Component</Typography>\n              </Box>\n            </Card>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Paper elevation={'level2'}>\n  <Box p={2}>\n    <Typography>Paper Component</Typography>\n  </Box>\n</Paper>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Box Layout\n            </Typography>\n            <Box>\n              <Typography>Above divider</Typography>\n              <Box\n                style={{\n                  marginTop: \"16px\",\n                  marginBottom: \"16px\",\n                  borderTop:\n                    \"1px solid rgba(var(--glass-color-black) / var(--glass-opacity-10))\",\n                }}\n              />\n              <Typography>Below divider</Typography>\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Typography>Above divider</Typography>\n<Divider style={{ marginTop: '16px', marginBottom: '16px' }} />\n<Typography>Below divider</Typography>`}\n              </pre>\n            )}\n          </Card>\n        </div>\n      ),\n\n      navigation: (\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-mt-4\">\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Tabs\n            </Typography>\n            <Tabs defaultValue=\"tab1\">\n              <GlassTabsList>\n                <GlassTabsTrigger value=\"tab1\">Tab 1</GlassTabsTrigger>\n                <GlassTabsTrigger value=\"tab2\">Tab 2</GlassTabsTrigger>\n                <GlassTabsTrigger value=\"tab3\">Tab 3</GlassTabsTrigger>\n              </GlassTabsList>\n              <TabsContent value=\"tab1\">Tab 1 Content</TabsContent>\n              <TabsContent value=\"tab2\">Tab 2 Content</TabsContent>\n              <TabsContent value=\"tab3\">Tab 3 Content</TabsContent>\n            </Tabs>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Tabs value={0}>\n   <TabPanel value={0} index={0}>Tab 1 Content</TabPanel>\n   <TabPanel value={0} index={1}>Tab 2 Content</TabPanel>\n   <TabPanel value={0} index={2}>Tab 3 Content</TabPanel>\n</Tabs>`}\n              </pre>\n            )}\n          </Card>\n        </div>\n      ),\n\n      display: (\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-mt-4\">\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Typography\n            </Typography>\n            <Box\n              style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}\n            >\n              <Typography variant=\"h2\">Heading 2</Typography>\n              <Typography variant=\"h3\">Heading 3</Typography>\n              <Typography variant=\"h4\">Heading 4</Typography>\n              <Typography variant=\"p\">Body 1 text</Typography>\n              <Typography variant=\"span\">Body 2 text</Typography>\n              <Typography variant=\"p\">Caption text</Typography>\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Typography variant=\"h3\">Heading 3</Typography>\n<Typography variant=\"h5\">Heading 5</Typography>\n<Typography variant=\"subtitle1\">Subtitle 1</Typography>\n<Typography variant=\"body1\">Body 1 text</Typography>\n<Typography variant=\"body2\">Body 2 text</Typography>\n<Typography variant=\"caption\">Caption text</Typography>`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Chip\n            </Typography>\n            <Box style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n              <Chip label=\"Basic\" value=\"10\" />\n              <Chip label=\"Success\" value=\"5\" intent=\"success\" />\n              <Chip label=\"Warning\" value=\"3\" intent=\"warning\" />\n              <Chip label=\"Danger\" value=\"1\" intent=\"danger\" />\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Chip label=\"Basic\" />\n<Chip label=\"Clickable\" onClick={(e) => {}} />\n<Chip label=\"Deletable\" onDelete={() => {}} />\n<Chip label=\"With Avatar\">`}\n              </pre>\n            )}\n          </Card>\n\n          <Card\n            className={cn(\n              \"p-5 h-full flex flex-col\",\n              \"transition-all duration-200\",\n              !prefersReducedMotion && \"hover:scale-[1.02]\"\n            )}\n          >\n            <Typography variant=\"h2\" className=\"glass-mb-4 glass-font-semibold\">\n              Avatar\n            </Typography>\n            <Box style={{ display: \"flex\", gap: \"8px\" }}>\n              <Avatar>A</Avatar>\n              <Avatar>B</Avatar>\n              <Avatar alt=\"User\" />\n            </Box>\n            {showCode && (\n              <pre className=\"glass-surface-dark/10 glass-radius-md glass-p-3 glass-font-mono glass-text-sm glass-overflow-auto glass-mt-4\">\n                {`<Avatar>A</Avatar>\n<Avatar color=\"primary\">B</Avatar>\n<Avatar alt=\"User\" />`}\n              </pre>\n            )}\n          </Card>\n        </div>\n      ),\n    };\n\n    // Filter categories based on includedCategories prop\n    const filteredCategories = Object.entries(COMPONENT_CATEGORIES)\n      .filter(([key]) => includedCategories.includes(key))\n      .map(([key, label]) => ({ key, label }));\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        elevation={elevation}\n        tier=\"high\"\n        className={cn(\n          \"flex flex-col glass-gap-6 w-full glass-radius-xl\",\n          minimal ? \"glass-p-4\" : \"p-8\",\n          \"relative overflow-hidden\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n                overflow: \"auto\",\n              }\n            : null),\n          ...(style ?? {}),\n        }}\n        {...rest}\n      >\n        {/* Local cursor glow overlay for theme showcase */}\n        <div\n          style={{ position: \"absolute\", inset: 0, pointerEvents: \"none\" }}\n          aria-hidden\n        >\n          <CursorGlow\n            global={false}\n            size={280}\n            opacity={0.14}\n            intensity={0.6}\n          />\n        </div>\n\n        {/* Custom header or default header */}\n        <header className=\"glass-mb-4\">\n          {header || (\n            <>\n              <Typography\n                variant=\"h1\"\n                style={{ marginBottom: \"8px\", fontSize: \"2rem\" }}\n              >\n                {title}\n              </Typography>\n              {typeof description === \"string\" ? (\n                <Typography variant=\"p\">{description}</Typography>\n              ) : (\n                description\n              )}\n            </>\n          )}\n        </header>\n\n        {/* Theme switcher */}\n        {showThemeSwitcher && (\n          <section className=\"glass-mt-6\">\n            <GlassThemeSwitcher compact={minimal} themes={[]} />\n          </section>\n        )}\n\n        {/* Component examples */}\n        {showExamples && (\n          <section className=\"glass-mt-6\">\n            {useTabs && filteredCategories.length > 1 ? (\n              <>\n                <Tabs defaultValue={filteredCategories[0]?.key}>\n                  <GlassTabsList>\n                    {filteredCategories.map(({ key, label }) => (\n                      <GlassTabsTrigger key={key} value={key}>\n                        {label}\n                      </GlassTabsTrigger>\n                    ))}\n                  </GlassTabsList>\n                  {filteredCategories.map(({ key, label }) => (\n                    <TabsContent key={key} value={key}>\n                      {categoryExamples[key as keyof typeof categoryExamples]}\n                    </TabsContent>\n                  ))}\n                </Tabs>\n              </>\n            ) : (\n              // Show all categories without tabs\n              <>\n                {filteredCategories.map(({ key, label }) => (\n                  <Box\n                    key={key}\n                    style={{ ...{ marginTop: \"12px\", marginBottom: \"8px\" } }}\n                  >\n                    <Typography\n                      variant=\"h5\"\n                      style={{ ...{ marginBottom: \"16px\" } }}\n                    >\n                      {label}\n                    </Typography>\n                    {categoryExamples[key as keyof typeof categoryExamples]}\n                  </Box>\n                ))}\n              </>\n            )}\n          </section>\n        )}\n\n        {/* Custom examples */}\n        {customExamples && (\n          <section className=\"glass-mt-6\">\n            <Typography variant=\"h5\" style={{ ...{ marginBottom: \"16px\" } }}>\n              Custom Examples\n            </Typography>\n            {customExamples}\n          </section>\n        )}\n\n        {/* Performance metrics */}\n        {showPerformanceMetrics && (\n          <section className=\"glass-mt-6\">\n            <Typography variant=\"h5\" style={{ ...{ marginBottom: \"16px\" } }}>\n              Performance Metrics\n            </Typography>\n            <Card>\n              <Box style={{ padding: \"16px\" }}>\n                <Typography>\n                  Theme performance metrics and optimization data\n                </Typography>\n              </Box>\n            </Card>\n          </section>\n        )}\n\n        {/* Footer */}\n        {footer && (\n          <Box style={{ ...{ marginTop: \"auto\", paddingTop: \"8px\" } }}>\n            {footer}\n          </Box>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassThemeDemo.displayName = \"GlassThemeDemo\";\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLElement> {\n  variant?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"p\" | \"span\" | \"div\";\n  children?: React.ReactNode;\n}\n\nconst variantMap = {\n  h1: \"h1\",\n  h2: \"h2\",\n  h3: \"h3\",\n  h4: \"h4\",\n  h5: \"h5\",\n  h6: \"h6\",\n  p: \"p\",\n  span: \"span\",\n  div: \"div\",\n} as const;\n\nexport const Typography = React.forwardRef<HTMLElement, TypographyProps>(\n  ({ variant = \"p\", className, children, ...props }, ref) => {\n    // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n    const Component = variantMap[variant];\n    const sizeClass: Record<keyof typeof variantMap, string> = {\n      h1: \"glass-text-5xl\",\n      h2: \"glass-text-4xl\",\n      h3: \"glass-text-3xl\",\n      h4: \"glass-text-xl\",\n      h5: \"glass-text-lg\",\n      h6: \"glass-text-base\",\n      p: \"glass-text-base\",\n      span: \"glass-text-base\",\n      div: \"glass-text-base\",\n    };\n    return React.createElement(\n      Component,\n      {\n        className: cn(\"glass-text-primary\", sizeClass[variant], className),\n        ref,\n        ...props,\n      },\n      children\n    );\n  }\n);\n\nTypography.displayName = \"Typography\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Check,\n  Eye,\n  Monitor,\n  Moon,\n  Palette,\n  Save,\n  Settings,\n  Sun,\n} from \"@/icons\";\nimport React, { useCallback, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\nexport interface ThemeOption {\n  id: string;\n  name: string;\n  preview: {\n    primary: string;\n    secondary: string;\n    background: string;\n    text: string;\n  };\n  colors: Record<string, string>;\n}\n\nexport interface GlassThemeSwitcherProps {\n  /**\n   * Current theme\n   */\n  currentTheme?: string;\n  /**\n   * Available themes\n   */\n  themes: ThemeOption[];\n  /**\n   * Enable system theme detection\n   */\n  enableSystemTheme?: boolean;\n  /**\n   * Show theme preview\n   */\n  showPreview?: boolean;\n  /**\n   * Show custom theme option\n   */\n  showCustomOption?: boolean;\n  /**\n   * Compact mode\n   */\n  compact?: boolean;\n  /**\n   * Bound the switcher inside the parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained switchers.\n   */\n  maxHeight?: number | string;\n  /**\n   * Theme change handler\n   */\n  onThemeChange?: (themeId: string) => void;\n  /**\n   * Custom theme save handler\n   */\n  onCustomThemeSave?: (colors: Record<string, string>) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom style\n   */\n  style?: React.CSSProperties;\n}\n\n/**\n * GlassThemeSwitcher component\n * Theme switching interface with preview and customization\n */\nexport const GlassThemeSwitcher: React.FC<GlassThemeSwitcherProps> = ({\n  currentTheme = \"light\",\n  themes = [],\n  enableSystemTheme = true,\n  showPreview = true,\n  showCustomOption = false,\n  compact = false,\n  contained = false,\n  maxHeight,\n  onThemeChange,\n  onCustomThemeSave,\n  className,\n  style,\n  ...props\n}) => {\n  const [selectedTheme, setSelectedTheme] = useState(currentTheme);\n  const [showCustomizer, setShowCustomizer] = useState(false);\n  const [customColors, setCustomColors] = useState<Record<string, string>>({\n    primary: \"hsl(var(--glass-color-primary))\",\n    secondary: \"#64748b\",\n    background: \"var(--glass-white)\",\n    text: \"var(--glass-black)\",\n  });\n\n  // System theme options\n  const systemThemes = [\n    {\n      id: \"light\",\n      name: \"Light\",\n      icon: Sun,\n      preview: {\n        primary: \"hsl(var(--glass-color-primary))\",\n        secondary: \"#64748b\",\n        background: \"var(--glass-white)\",\n        text: \"var(--glass-black)\",\n      },\n    },\n    {\n      id: \"dark\",\n      name: \"Dark\",\n      icon: Moon,\n      preview: {\n        primary: \"var(--glass-color-primary-light)\",\n        secondary: \"#94a3b8\",\n        background: \"#0f172a\",\n        text: \"var(--glass-white)\",\n      },\n    },\n    ...(enableSystemTheme\n      ? [\n          {\n            id: \"system\",\n            name: \"System\",\n            icon: Monitor,\n            preview: {\n              primary: \"#8b5cf6\",\n              secondary: \"#64748b\",\n              background: \"#f8fafc\",\n              text: \"#1e293b\",\n            },\n          },\n        ]\n      : []),\n  ];\n\n  // Handle theme selection\n  const handleThemeSelect = useCallback(\n    (themeId: string) => {\n      setSelectedTheme(themeId);\n      onThemeChange?.(themeId);\n    },\n    [onThemeChange]\n  );\n\n  // Handle custom color change\n  const handleCustomColorChange = useCallback(\n    (colorKey: string, value: string) => {\n      setCustomColors((prev: any) => ({\n        ...prev,\n        [colorKey]: value,\n      }));\n    },\n    []\n  );\n\n  // Save custom theme\n  const handleSaveCustomTheme = useCallback(() => {\n    onCustomThemeSave?.(customColors);\n    setShowCustomizer(false);\n  }, [customColors, onCustomThemeSave]);\n\n  // Get theme preview style\n  const getPreviewStyle = useCallback(\n    (preview: any) =>\n      ({\n        backgroundColor: preview.background,\n        color: preview.text,\n        \"--preview-primary\": preview.primary,\n        \"--preview-secondary\": preview.secondary,\n      }) as React.CSSProperties,\n    []\n  );\n  const boundedHeight = maxHeight ?? (compact || contained ? 240 : undefined);\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\"overflow-hidden\", className)}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n                overflow: \"auto\",\n              }\n            : null),\n          ...(style ?? {}),\n        }}\n        {...props}\n      >\n        <CardHeader className={cn(compact ? \"glass-pb-2\" : \"glass-pb-3\")}>\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <CardTitle\n              className={cn(\n                \"glass-text-primary glass-font-semibold glass-flex glass-items-center glass-gap-2\",\n                compact ? \"glass-text-sm\" : \"glass-text-lg\"\n              )}\n            >\n              <Palette\n                className={\n                  compact ? \"glass-w-4 glass-h-4\" : \"glass-w-5 glass-h-5\"\n                }\n              />\n              Theme\n            </CardTitle>\n\n            {!compact && showCustomOption && (\n              <GlassButton\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={(e) => setShowCustomizer(!showCustomizer)}\n                className=\"glass-p-2 glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                <Settings className=\"glass-w-4 glass-h-4\" />\n              </GlassButton>\n            )}\n          </div>\n        </CardHeader>\n\n        <CardContent\n          className={cn(\"glass-pt-0\", compact && \"glass-px-3 glass-pb-3\")}\n        >\n          {/* System Themes */}\n          <div\n            className={cn(\n              \"grid glass-gap-3 mb-6\",\n              compact\n                ? \"grid-cols-1\"\n                : \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\"\n            )}\n          >\n            {systemThemes.map((theme) => {\n              const IconComponent = theme.icon;\n              const isSelected = selectedTheme === theme.id;\n\n              return (\n                <Motion\n                  key={theme.id}\n                  preset=\"scaleIn\"\n                  className={cn(\n                    \"relative glass-radius-lg cursor-pointer transition-all duration-200\",\n                    compact ? \"glass-p-2\" : \"glass-p-4\",\n                    \"hover:scale-[1.02] hover:shadow-lg\",\n                    \"glass-focus glass-touch-target glass-contrast-guard\",\n                    isSelected\n                      ? \"ring-2 ring-primary bg-primary/20\"\n                      : \"ring-1 ring-white/10 bg-white/5 hover:ring-white/30\"\n                  )}\n                  onClick={(e) => handleThemeSelect(theme.id)}\n                >\n                  {/* Preview */}\n                  {showPreview && (\n                    <div\n                      className={cn(\n                        \"glass-w-full glass-radius-md glass-ring-1 glass-ring-white-opacity-10\",\n                        compact\n                          ? \"glass-h-8 glass-mb-2\"\n                          : \"glass-h-16 glass-mb-3\"\n                      )}\n                      style={getPreviewStyle(theme.preview)}\n                    >\n                      <div className=\"glass-p-2 glass-gap-1\">\n                        <div\n                          className=\"glass-h-2 glass-radius-md\"\n                          style={{ backgroundColor: \"var(--preview-primary)\" }}\n                        />\n                        <div\n                          className=\"glass-h-1 glass-radius-md\"\n                          style={{\n                            backgroundColor: \"var(--preview-secondary)\",\n                          }}\n                        />\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Theme Info */}\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <div className=\"glass-flex glass-items-center glass-gap-2\">\n                      <IconComponent className=\"glass-w-4 glass-h-4\" />\n                      <span className=\"glass-font-medium glass-text-sm\">\n                        {theme.name}\n                      </span>\n                    </div>\n\n                    {isSelected && (\n                      <Check className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n                    )}\n                  </div>\n                </Motion>\n              );\n            })}\n          </div>\n\n          {/* Custom Themes */}\n          {themes.length > 0 && (\n            <>\n              <div className=\"glass-mb-3\">\n                <h4 className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                  Custom Themes\n                </h4>\n              </div>\n\n              <div\n                className={cn(\n                  \"grid glass-gap-3\",\n                  compact\n                    ? \"grid-cols-1\"\n                    : \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\"\n                )}\n              >\n                {themes.map((theme) => {\n                  const isSelected = selectedTheme === theme.id;\n\n                  return (\n                    <Motion\n                      key={theme.id}\n                      preset=\"scaleIn\"\n                      className={cn(\n                        \"relative glass-radius-lg cursor-pointer transition-all duration-200\",\n                        compact ? \"glass-p-2\" : \"glass-p-4\",\n                        \"hover:scale-[1.02] hover:shadow-lg\",\n                        \"glass-focus glass-touch-target glass-contrast-guard\",\n                        isSelected\n                          ? \"ring-2 ring-primary bg-primary/20\"\n                          : \"ring-1 ring-white/10 bg-white/5 hover:ring-white/30\"\n                      )}\n                      onClick={(e) => handleThemeSelect(theme.id)}\n                    >\n                      {/* Preview */}\n                      {showPreview && (\n                        <div\n                          className={cn(\n                            \"glass-w-full glass-radius-md glass-border glass-border-white/20\",\n                            compact\n                              ? \"glass-h-8 glass-mb-2\"\n                              : \"glass-h-16 glass-mb-3\"\n                          )}\n                          style={getPreviewStyle(theme.preview)}\n                        >\n                          <div className=\"glass-p-2 glass-gap-1\">\n                            <div\n                              className=\"glass-h-2 glass-radius-md\"\n                              style={{ backgroundColor: theme.preview.primary }}\n                            />\n                            <div\n                              className=\"glass-h-1 glass-radius-md\"\n                              style={{\n                                backgroundColor: theme.preview.secondary,\n                              }}\n                            />\n                          </div>\n                        </div>\n                      )}\n\n                      {/* Theme Info */}\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-font-medium glass-text-sm\">\n                          {theme.name}\n                        </span>\n                        {isSelected && (\n                          <Check className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n                        )}\n                      </div>\n                    </Motion>\n                  );\n                })}\n              </div>\n            </>\n          )}\n\n          {/* Custom Theme Customizer */}\n          {showCustomizer && (\n            <Motion\n              preset=\"slideDown\"\n              className=\"glass-mt-6 glass-p-4 glass-surface-subtle/5 glass-radius-lg\"\n            >\n              <div className=\"glass-gap-4\">\n                <h4 className=\"glass-text-primary glass-font-medium glass-flex glass-items-center glass-gap-2\">\n                  <Eye className=\"glass-w-4 glass-h-4\" />\n                  Customize Theme\n                </h4>\n\n                {/* Color Pickers */}\n                <div className=\"glass-grid glass-grid-cols-2 glass-gap-4\">\n                  {Object.entries(customColors).map(([key, value]) => (\n                    <div key={key} className=\"glass-gap-2\">\n                      <label className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-capitalize\">\n                        {key}\n                      </label>\n                      <div className=\"glass-flex glass-gap-2\">\n                        <input\n                          type=\"color\"\n                          value={normalizeColorInputValue(value)}\n                          onChange={(e) =>\n                            handleCustomColorChange(key, e.target.value)\n                          }\n                          className=\"glass-w-10 glass-h-8 glass-radius-md glass-ring-1 glass-ring-white-opacity-10 glass-cursor-pointer glass-focus glass-touch-target glass-contrast-guard\"\n                        />\n                        <input\n                          type=\"text\"\n                          value={value}\n                          onChange={(e) =>\n                            handleCustomColorChange(key, e.target.value)\n                          }\n                          className=\"glass-flex-1 glass-px-3 glass-py-1 glass-surface-subtle/10 glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-text-primary glass-text-sm glass-focus-outline-none glass-focus-ring-white-opacity-30 glass-focus glass-touch-target glass-contrast-guard\"\n                        />\n                      </div>\n                    </div>\n                  ))}\n                </div>\n\n                {/* Preview */}\n                <div\n                  className=\"glass-w-full glass-h-20 glass-radius-md glass-ring-1 glass-ring-white-opacity-10\"\n                  style={{\n                    backgroundColor: customColors.background,\n                    color: customColors.text,\n                  }}\n                >\n                  <div className=\"glass-p-3 glass-gap-2\">\n                    <div\n                      className=\"glass-h-3 glass-radius-md\"\n                      style={{ backgroundColor: customColors.primary }}\n                    />\n                    <div\n                      className=\"glass-h-2 glass-radius-md\"\n                      style={{ backgroundColor: customColors.secondary }}\n                    />\n                  </div>\n                </div>\n\n                {/* Actions */}\n                <div className=\"glass-flex glass-gap-2\">\n                  <GlassButton\n                    variant=\"primary\"\n                    size=\"sm\"\n                    onClick={handleSaveCustomTheme}\n                    className=\"glass-flex glass-items-center glass-gap-2\"\n                  >\n                    <Save className=\"glass-w-4 glass-h-4\" />\n                    Save Theme\n                  </GlassButton>\n\n                  <GlassButton\n                    variant=\"ghost\"\n                    size=\"sm\"\n                    onClick={(e) => setShowCustomizer(false)}\n                  >\n                    Cancel\n                  </GlassButton>\n                </div>\n              </div>\n            </Motion>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassThemeSwitcher;\n", "'use client';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { useReducedMotion } from '../../hooks/useReducedMotion';\nimport { useA11yId } from '../../utils/a11y';\n\nexport interface CursorGlowProps {\n  size?: number; // diameter in px\n  intensity?: number; // 0..1\n  color?: string; // CSS color for glow\n  opacity?: number; // 0..1\n  global?: boolean; // fixed overlay\n  \n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n  \n  /** Custom className */\n  className?: string;\n  \n  /** ARIA label for accessibility */\n  'aria-label'?: string;\n  \n  /** Custom ID */\n  id?: string;\n\n  /** Glass surface intent */\n  intent?: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';\n  \n  /** Glass surface elevation */\n  elevation?: 'level1' | 'level2' | 'level3' | 'level4';\n  \n  /** Performance tier */\n  tier?: 'low' | 'medium' | 'high';\n}\n\n/**\n * CursorGlow\n * Renders a pointer-following radial glow. Pointer-events: none.\n * Uses rAF to throttle updates. Respects reduced motion.\n */\nexport const CursorGlow = forwardRef<HTMLDivElement, CursorGlowProps>((\n  {\n    size = 280,\n    intensity = 0.6,\n    color = 'var(--glass-white)',\n    opacity = 0.18,\n    global = true,\n    respectMotionPreference = true,\n    className,\n    'aria-label': ariaLabel,\n    id,\n    ...props\n  },\n  ref\n) => {\n  const reduce = useReducedMotion();\n  const componentId = useA11yId(id || 'cursor-glow');\n  const localRef = useRef<HTMLDivElement | null>(null);\n  const frame = useRef<number | null>(null);\n  const latest = useRef({ x: -9999, y: -9999 });\n  \n  // Combine refs\n  const combinedRef = (node: HTMLDivElement | null) => {\n    localRef.current = node;\n    if (typeof ref === 'function') {\n      ref(node);\n    } else if (ref) {\n      ref.current = node;\n    }\n  };\n\n  useEffect(() => {\n    if ((respectMotionPreference && reduce)) return; // respect reduced motion\n    const handleMove = (e: MouseEvent) => {\n      latest.current = { x: e.clientX, y: e.clientY };\n      if (frame.current) return;\n      frame.current = requestAnimationFrame(() => {\n        frame.current = null;\n        const el = localRef.current; if (!el) return;\n        const { x, y } = latest.current;\n        el.style.background = `radial-gradient(${size}px ${size}px at ${x}px ${y}px, ${color}${toAlpha(opacity)}, transparent ${Math.round(\n          100 * (1 - opacity)\n        )}%)`;\n      });\n    };\n\n    window.addEventListener('pointermove', handleMove, { passive: true });\n    return () => {\n      window.removeEventListener('pointermove', handleMove);\n      if (frame.current) cancelAnimationFrame(frame.current);\n    };\n  }, [size, color, opacity, reduce, respectMotionPreference]);\n\n  return (\n    <div\n      ref={combinedRef}\n      id={componentId}\n      className={cn(\n        global ? 'glass-fixed' : 'glass-absolute',\n        'glass-inset-0 glass-pointer-events-none glass-z-2',\n        className\n      )}\n      aria-hidden={!ariaLabel}\n      aria-label={ariaLabel}\n      role={ariaLabel ? \"img\" : undefined}\n      style={{\n        mixBlendMode: 'screen',\n        filter: `blur(${Math.round(size / 16)}px) saturate(${100 + intensity * 60}%)`,\n      }}\n      {...props}\n    />\n  );\n});\n\nfunction toAlpha(opacity: number) {\n  const a = Math.max(0, Math.min(1, opacity));\n  const hex = Math.round(a * 255)\n    .toString(16)\n    .padStart(2, '0');\n  return hex.length === 2 ? hex : '2d';\n}\n\nCursorGlow.displayName = 'CursorGlow';\n\nexport default CursorGlow;", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Activity,\n  Circle,\n  Clock,\n  MapPin,\n  MessageCircle,\n  MoreHorizontal,\n  Phone,\n  Users,\n  Video,\n} from \"@/icons\";\nimport React, { useCallback, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\n\nexport interface UserPresence {\n  id: string;\n  name: string;\n  avatar?: string;\n  status: \"online\" | \"offline\" | \"away\" | \"busy\" | \"invisible\";\n  lastSeen?: Date;\n  location?: string;\n  activity?: string;\n  customStatus?: string;\n  role?: \"admin\" | \"moderator\" | \"member\" | \"guest\";\n}\n\nexport interface GlassUserPresenceProps {\n  /**\n   * Current user\n   */\n  currentUser?: UserPresence;\n  /**\n   * List of users to display\n   */\n  users?: UserPresence[];\n  /**\n   * Show online count\n   */\n  showOnlineCount?: boolean;\n  /**\n   * Show user roles\n   */\n  showRoles?: boolean;\n  /**\n   * Show user locations\n   */\n  showLocations?: boolean;\n  /**\n   * Show user activities\n   */\n  showActivities?: boolean;\n  /**\n   * Enable user actions\n   */\n  enableActions?: boolean;\n  /**\n   * Enable status updates\n   */\n  enableStatusUpdate?: boolean;\n  /**\n   * Group users by status\n   */\n  groupByStatus?: boolean;\n  /**\n   * Compact mode\n   */\n  compact?: boolean;\n  /**\n   * Max users to display\n   */\n  maxUsers?: number;\n  /**\n   * User click handler\n   */\n  onUserClick?: (user: UserPresence) => void;\n  /**\n   * User action handler\n   */\n  onUserAction?: (userId: string, action: string) => void;\n  /**\n   * Status change handler\n   */\n  onStatusChange?: (status: UserPresence[\"status\"]) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassUserPresence component\n * Display user presence status with avatars and online indicators\n */\nexport const GlassUserPresence: React.FC<GlassUserPresenceProps> = ({\n  currentUser,\n  users = [],\n  showOnlineCount = true,\n  showRoles = false,\n  showLocations = false,\n  showActivities = false,\n  enableActions = false,\n  enableStatusUpdate = false,\n  groupByStatus = false,\n  compact = false,\n  maxUsers,\n  onUserClick,\n  onUserAction,\n  onStatusChange,\n  className,\n  ...props\n}) => {\n  const [showAllUsers, setShowAllUsers] = useState(false);\n\n  // Get status color and icon\n  const getStatusConfig = useCallback((status: UserPresence[\"status\"]) => {\n    switch (status) {\n      case \"online\":\n        return {\n          color: \"bg-green-400\",\n          borderColor: \"border-green-400\",\n          textColor: \"text-green-400\",\n          icon: Circle,\n          label: \"Online\",\n        };\n      case \"away\":\n        return {\n          color: \"bg-yellow-400\",\n          borderColor: \"border-yellow-400\",\n          textColor: \"text-yellow-400\",\n          icon: Clock,\n          label: \"Away\",\n        };\n      case \"busy\":\n        return {\n          color: \"bg-red-400\",\n          borderColor: \"border-red-400\",\n          textColor: \"text-red-400\",\n          icon: Circle,\n          label: \"Busy\",\n        };\n      case \"invisible\":\n        return {\n          color: \"bg-gray-400\",\n          borderColor: \"border-gray-400\",\n          textColor: \"glass-text-secondary\",\n          icon: Circle,\n          label: \"Invisible\",\n        };\n      default:\n        return {\n          color: \"bg-gray-400\",\n          borderColor: \"border-gray-400\",\n          textColor: \"glass-text-secondary\",\n          icon: Circle,\n          label: \"Offline\",\n        };\n    }\n  }, []);\n\n  // Get role badge\n  const getRoleBadge = useCallback((role?: string) => {\n    switch (role) {\n      case \"admin\":\n        return (\n          <GlassBadge variant=\"destructive\" size=\"sm\">\n            Admin\n          </GlassBadge>\n        );\n      case \"moderator\":\n        return (\n          <GlassBadge variant=\"warning\" size=\"sm\">\n            Mod\n          </GlassBadge>\n        );\n      case \"member\":\n        return (\n          <GlassBadge variant=\"secondary\" size=\"sm\">\n            Member\n          </GlassBadge>\n        );\n      case \"guest\":\n        return (\n          <GlassBadge variant=\"outline\" size=\"sm\">\n            Guest\n          </GlassBadge>\n        );\n      default:\n        return null;\n    }\n  }, []);\n\n  // Format last seen time\n  const formatLastSeen = useCallback((date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    if (days === 1) return \"Yesterday\";\n    if (days < 7) return `${days}d ago`;\n    return date.toLocaleDateString();\n  }, []);\n\n  // Handle status change\n  const handleStatusChange = useCallback(\n    (status: UserPresence[\"status\"]) => {\n      onStatusChange?.(status);\n    },\n    [onStatusChange]\n  );\n\n  // Filter and sort users\n  const processedUsers = users\n    .filter(\n      (user: any) => user.status !== \"invisible\" || user.id === currentUser?.id\n    )\n    .sort((a, b) => {\n      // Sort by status priority\n      const statusOrder: Record<UserPresence[\"status\"], number> = {\n        online: 0,\n        away: 1,\n        busy: 2,\n        offline: 3,\n        invisible: 4,\n      };\n      const aOrder = statusOrder[a.status] ?? 3;\n      const bOrder = statusOrder[b.status] ?? 3;\n\n      if (aOrder !== bOrder) return aOrder - bOrder;\n\n      // Then by name\n      return a.name.localeCompare(b.name);\n    });\n\n  const displayUsers =\n    showAllUsers || !maxUsers\n      ? processedUsers\n      : processedUsers.slice(0, maxUsers);\n  const onlineCount = users.filter(\n    (user: any) => user.status === \"online\"\n  ).length;\n\n  // Group users by status\n  const groupedUsers = processedUsers.reduce(\n    (groups, user) => {\n      if (!groups[user.status]) {\n        groups[user.status] = [];\n      }\n      groups[user.status].push(user);\n      return groups;\n    },\n    {} as Record<string, UserPresence[]>\n  );\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard className={cn(\"overflow-hidden\", className)} {...props}>\n        <CardHeader className=\"glass-pb-3\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <CardTitle className=\"glass-text-primary glass-text-lg glass-font-semibold glass-flex glass-items-center glass-gap-2\">\n              <Users className=\"glass-w-5 glass-h-5\" />\n              Team Presence\n            </CardTitle>\n\n            {showOnlineCount && (\n              <GlassBadge variant=\"secondary\">{onlineCount} online</GlassBadge>\n            )}\n          </div>\n        </CardHeader>\n\n        <CardContent className=\"glass-pt-0\">\n          {/* Current user status */}\n          {currentUser && enableStatusUpdate && (\n            <div className=\"glass-mb-6 glass-p-3 glass-surface-subtle/5 glass-radius-lg\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <div className=\"glass-flex glass-items-center glass-gap-3\">\n                  <div className=\"glass-relative\">\n                    <div className=\"glass-w-10 glass-h-10 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                      {currentUser.avatar ? (\n                        <img\n                          src={currentUser.avatar}\n                          alt={currentUser.name}\n                          className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                        />\n                      ) : (\n                        <span className=\"glass-text-primary glass-font-medium\">\n                          {currentUser.name.charAt(0).toUpperCase()}\n                        </span>\n                      )}\n                    </div>\n                    <div\n                      className={cn(\n                        \"absolute -bottom-1 -right-1 w-4 h-4 glass-radius-full border-2 border-black\",\n                        getStatusConfig(currentUser.status).color\n                      )}\n                    />\n                  </div>\n\n                  <div>\n                    <p className=\"glass-text-primary glass-font-medium\">\n                      {currentUser.name}\n                    </p>\n                    <p className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n                      Set your status\n                    </p>\n                  </div>\n                </div>\n\n                <div className=\"glass-flex glass-gap-1\">\n                  {([\"online\", \"away\", \"busy\", \"invisible\"] as const).map(\n                    (status) => {\n                      const config = getStatusConfig(status);\n                      const IconComponent = config.icon;\n\n                      return (\n                        <GlassButton\n                          key={status}\n                          variant={\n                            currentUser.status === status ? \"primary\" : \"ghost\"\n                          }\n                          size=\"sm\"\n                          onClick={(e) => handleStatusChange(status)}\n                          className=\"glass-p-2\"\n                          title={config.label}\n                          aria-label={`Set status to ${config.label}`}\n                        >\n                          <IconComponent className=\"glass-w-3 glass-h-3\" />\n                        </GlassButton>\n                      );\n                    }\n                  )}\n                </div>\n              </div>\n            </div>\n          )}\n\n          {/* User list */}\n          {groupByStatus ? (\n            // Grouped by status\n            <div className=\"glass-gap-4\">\n              {Object.entries(groupedUsers).map(([status, statusUsers]) => {\n                const config = getStatusConfig(\n                  status as UserPresence[\"status\"]\n                );\n\n                return (\n                  <div key={status}>\n                    <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-2\">\n                      <div\n                        className={cn(\n                          \"w-2 h-2 glass-radius-full\",\n                          config.color\n                        )}\n                      />\n                      <span className=\"glass-text-primary-glass-opacity-80 glass-text-sm glass-font-medium\">\n                        {config.label} ({statusUsers.length})\n                      </span>\n                    </div>\n\n                    <div className=\"glass-gap-2\">\n                      {statusUsers.map((user) => (\n                        <UserPresenceItem\n                          key={user.id}\n                          user={user}\n                          compact={compact}\n                          showRoles={showRoles}\n                          showLocations={showLocations}\n                          showActivities={showActivities}\n                          enableActions={enableActions}\n                          onUserClick={onUserClick}\n                          onUserAction={onUserAction}\n                        />\n                      ))}\n                    </div>\n                  </div>\n                );\n              })}\n            </div>\n          ) : (\n            // Flat list\n            <div className=\"glass-gap-2\">\n              {displayUsers.map((user) => (\n                <UserPresenceItem\n                  key={user.id}\n                  user={user}\n                  compact={compact}\n                  showRoles={showRoles}\n                  showLocations={showLocations}\n                  showActivities={showActivities}\n                  enableActions={enableActions}\n                  onUserClick={onUserClick}\n                  onUserAction={onUserAction}\n                />\n              ))}\n\n              {/* Show more button */}\n              {maxUsers && users.length > maxUsers && !showAllUsers && (\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => setShowAllUsers(true)}\n                  className=\"glass-w-full glass-mt-2\"\n                >\n                  Show {users.length - maxUsers} more\n                </GlassButton>\n              )}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Individual user presence item\ninterface UserPresenceItemProps {\n  user: UserPresence;\n  compact?: boolean;\n  showRoles?: boolean;\n  showLocations?: boolean;\n  showActivities?: boolean;\n  enableActions?: boolean;\n  onUserClick?: (user: UserPresence) => void;\n  onUserAction?: (userId: string, action: string) => void;\n}\n\nconst UserPresenceItem: React.FC<UserPresenceItemProps> = ({\n  user,\n  compact = false,\n  showRoles = false,\n  showLocations = false,\n  showActivities = false,\n  enableActions = false,\n  onUserClick,\n  onUserAction,\n}) => {\n  const config = getStatusConfig(user.status);\n\n  // Helper function (defined here since it's used in this component)\n  function getStatusConfig(status: UserPresence[\"status\"]) {\n    switch (status) {\n      case \"online\":\n        return {\n          color: \"bg-green-400\",\n          textColor: \"text-green-400\",\n          label: \"Online\",\n        };\n      case \"away\":\n        return {\n          color: \"bg-yellow-400\",\n          textColor: \"text-yellow-400\",\n          label: \"Away\",\n        };\n      case \"busy\":\n        return {\n          color: \"bg-red-400\",\n          textColor: \"text-red-400\",\n          label: \"Busy\",\n        };\n      case \"invisible\":\n        return {\n          color: \"bg-gray-400\",\n          textColor: \"glass-text-secondary\",\n          label: \"Invisible\",\n        };\n      default:\n        return {\n          color: \"bg-gray-400\",\n          textColor: \"glass-text-secondary\",\n          label: \"Offline\",\n        };\n    }\n  }\n\n  const formatLastSeen = (date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    if (days === 1) return \"Yesterday\";\n    if (days < 7) return `${days}d ago`;\n    return date.toLocaleDateString();\n  };\n\n  const getRoleBadge = (role?: string) => {\n    switch (role) {\n      case \"admin\":\n        return (\n          <GlassBadge variant=\"destructive\" size=\"sm\">\n            Admin\n          </GlassBadge>\n        );\n      case \"moderator\":\n        return (\n          <GlassBadge variant=\"warning\" size=\"sm\">\n            Mod\n          </GlassBadge>\n        );\n      case \"member\":\n        return (\n          <GlassBadge variant=\"secondary\" size=\"sm\">\n            Member\n          </GlassBadge>\n        );\n      case \"guest\":\n        return (\n          <GlassBadge variant=\"outline\" size=\"sm\">\n            Guest\n          </GlassBadge>\n        );\n      default:\n        return null;\n    }\n  };\n\n  return (\n    <Motion\n      preset=\"fadeIn\"\n      className={cn(\n        \"flex items-center glass-gap-3 glass-p-2 glass-radius-lg hover:bg-white/5 cursor-pointer transition-all duration-200\",\n        compact && \"glass-p-1\"\n      )}\n      onClick={(e) => onUserClick?.(user)}\n    >\n      {/* Avatar */}\n      <div className=\"glass-relative glass-flex-shrink-0\">\n        <div\n          className={cn(\n            \"glass-radius-full bg-white/20 flex items-center justify-center\",\n            compact ? \"w-8 h-8\" : \"w-10 h-10\"\n          )}\n        >\n          {user.avatar ? (\n            <img\n              src={user.avatar}\n              alt={user.name}\n              className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n            />\n          ) : (\n            <span\n              className={cn(\n                \"glass-text-primary font-medium\",\n                compact ? \"glass-text-sm\" : \"glass-text-base\"\n              )}\n            >\n              {user.name.charAt(0).toUpperCase()}\n            </span>\n          )}\n        </div>\n\n        {/* Status indicator */}\n        <div\n          className={cn(\n            \"absolute -bottom-1 -right-1 w-3 h-3 glass-radius-full border-2 border-black\",\n            config.color,\n            compact && \"w-2 h-2 -bottom-0.5 -right-0.5\"\n          )}\n        />\n      </div>\n\n      {/* User info */}\n      <div className=\"glass-flex-1 glass-min-glass-w-0\">\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <p\n            className={cn(\n              \"glass-text-primary font-medium truncate\",\n              compact ? \"glass-text-sm\" : \"glass-text-base\"\n            )}\n          >\n            {user.name}\n          </p>\n\n          {showRoles && getRoleBadge(user.role)}\n        </div>\n\n        {!compact && (\n          <div className=\"glass-gap-1\">\n            {/* Status and last seen */}\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <span className={cn(\"glass-text-xs\", config.textColor)}>\n                {config.label}\n              </span>\n\n              {user.status === \"offline\" && user.lastSeen && (\n                <>\n                  <span className=\"glass-text-primary-glass-opacity-40 glass-text-xs\">\n                    \u2022\n                  </span>\n                  <span className=\"glass-text-primary-glass-opacity-60 glass-text-xs\">\n                    {formatLastSeen(user.lastSeen)}\n                  </span>\n                </>\n              )}\n            </div>\n\n            {/* Custom status */}\n            {user.customStatus && (\n              <p className=\"glass-text-primary-opacity-70 glass-text-xs glass-truncate\">\n                {user.customStatus}\n              </p>\n            )}\n\n            {/* Activity */}\n            {showActivities && user.activity && (\n              <div className=\"glass-flex glass-items-center glass-gap-1 glass-text-primary-glass-opacity-60 glass-text-xs\">\n                <Activity className=\"glass-w-3 glass-h-3\" />\n                <span className=\"glass-truncate\">{user.activity}</span>\n              </div>\n            )}\n\n            {/* Location */}\n            {showLocations && user.location && (\n              <div className=\"glass-flex glass-items-center glass-gap-1 glass-text-primary-glass-opacity-60 glass-text-xs\">\n                <MapPin className=\"glass-w-3 glass-h-3\" />\n                <span className=\"glass-truncate\">{user.location}</span>\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n\n      {/* Actions */}\n      {enableActions && (\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          <GlassButton\n            variant=\"ghost\"\n            size=\"sm\"\n            onClick={(e) => {\n              e.stopPropagation();\n              onUserAction?.(user.id, \"message\");\n            }}\n            className=\"glass-p-1\"\n            aria-label={`Send message to ${user.name}`}\n          >\n            <MessageCircle className=\"glass-w-3 glass-h-3\" />\n          </GlassButton>\n\n          <GlassButton\n            variant=\"ghost\"\n            size=\"sm\"\n            onClick={(e) => {\n              e.stopPropagation();\n              onUserAction?.(user.id, \"call\");\n            }}\n            className=\"glass-p-1\"\n            aria-label={`Call ${user.name}`}\n          >\n            <Phone className=\"glass-w-3 glass-h-3\" />\n          </GlassButton>\n\n          <GlassButton\n            variant=\"ghost\"\n            size=\"sm\"\n            onClick={(e) => {\n              e.stopPropagation();\n              onUserAction?.(user.id, \"video\");\n            }}\n            className=\"glass-p-1\"\n            aria-label={`Start video call with ${user.name}`}\n          >\n            <Video className=\"glass-w-3 glass-h-3\" />\n          </GlassButton>\n\n          <GlassButton\n            variant=\"ghost\"\n            size=\"sm\"\n            onClick={(e) => e.stopPropagation()}\n            className=\"glass-p-1\"\n            aria-label={`More options for ${user.name}`}\n          >\n            <MoreHorizontal className=\"glass-w-3 glass-h-3\" />\n          </GlassButton>\n        </div>\n      )}\n    </Motion>\n  );\n};\n\nexport default GlassUserPresence;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  AlertCircle,\n  Loader2,\n  Maximize,\n  Minimize,\n  Pause,\n  Play,\n  Settings,\n  SkipBack,\n  SkipForward,\n  Volume2,\n  VolumeX,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\n\nexport interface VideoSource {\n  src: string;\n  type: string;\n  quality?: string;\n  bitrate?: number;\n}\n\nexport interface SubtitleTrack {\n  src: string;\n  label: string;\n  language: string;\n  default?: boolean;\n}\n\nexport interface GlassVideoPlayerProps {\n  /**\n   * Video sources\n   */\n  sources: VideoSource[];\n  /**\n   * Video poster image\n   */\n  poster?: string;\n  /**\n   * Video title\n   */\n  title?: string;\n  /**\n   * Auto-play video\n   */\n  autoPlay?: boolean;\n  /**\n   * Show controls\n   */\n  controls?: boolean;\n  /**\n   * Enable fullscreen\n   */\n  enableFullscreen?: boolean;\n  /**\n   * Enable picture-in-picture\n   */\n  enablePiP?: boolean;\n  /**\n   * Enable theater mode\n   */\n  enableTheaterMode?: boolean;\n  /**\n   * Subtitle tracks\n   */\n  subtitles?: SubtitleTrack[];\n  /**\n   * Playback speed options\n   */\n  playbackSpeeds?: number[];\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Play event handler\n   */\n  onPlay?: () => void;\n  /**\n   * Pause event handler\n   */\n  onPause?: () => void;\n  /**\n   * Time update handler\n   */\n  onTimeUpdate?: (currentTime: number, duration: number) => void;\n  /**\n   * Volume change handler\n   */\n  onVolumeChange?: (volume: number, muted: boolean) => void;\n  /**\n   * Fullscreen change handler\n   */\n  onFullscreenChange?: (fullscreen: boolean) => void;\n}\n\n/**\n * GlassVideoPlayer component\n * A comprehensive video player with glassmorphism design and advanced controls\n */\nexport const GlassVideoPlayer: React.FC<GlassVideoPlayerProps> = ({\n  sources,\n  poster,\n  title,\n  autoPlay = false,\n  controls = true,\n  enableFullscreen = true,\n  enablePiP = true,\n  enableTheaterMode = false,\n  subtitles = [],\n  playbackSpeeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n  className,\n  onPlay,\n  onPause,\n  onTimeUpdate,\n  onVolumeChange,\n  onFullscreenChange,\n  ...props\n}) => {\n  const videoRef = useRef<HTMLVideoElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [currentTime, setCurrentTime] = useState(0);\n  const [duration, setDuration] = useState(0);\n  const [volume, setVolume] = useState(1);\n  const [isMuted, setIsMuted] = useState(false);\n  const [isFullscreen, setIsFullscreen] = useState(false);\n  const [isTheaterMode, setIsTheaterMode] = useState(false);\n  const [showControls, setShowControls] = useState(true);\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const [currentQuality, setCurrentQuality] = useState<string>(\"auto\");\n  const [playbackSpeed, setPlaybackSpeed] = useState(1);\n  const [showSettings, setShowSettings] = useState(false);\n\n  // Hide controls after inactivity\n  const controlsTimeoutRef = useRef<NodeJS.Timeout>();\n\n  // Handle play/pause\n  const handlePlayPause = useCallback(async () => {\n    if (!videoRef.current) return;\n\n    try {\n      if (isPlaying) {\n        await videoRef.current.pause();\n        setIsPlaying(false);\n        onPause?.();\n      } else {\n        await videoRef.current.play();\n        setIsPlaying(true);\n        onPlay?.();\n      }\n    } catch {\n      setIsPlaying(false);\n    }\n  }, [isPlaying, onPlay, onPause]);\n\n  // Handle time update\n  const handleTimeUpdate = useCallback(() => {\n    if (!videoRef.current) return;\n\n    const current = videoRef.current.currentTime;\n    const total = videoRef.current.duration || 0;\n\n    setCurrentTime(current);\n    setDuration(total);\n    onTimeUpdate?.(current, total);\n  }, [onTimeUpdate]);\n\n  // Handle seek\n  const handleSeek = useCallback(\n    (e: React.MouseEvent<HTMLDivElement>) => {\n      if (!videoRef.current || !containerRef.current) return;\n\n      const rect = e.currentTarget.getBoundingClientRect();\n      const percent = (e.clientX - rect.left) / rect.width;\n      const newTime = percent * duration;\n\n      videoRef.current.currentTime = newTime;\n      setCurrentTime(newTime);\n    },\n    [duration]\n  );\n\n  // Handle volume change\n  const handleVolumeChange = useCallback(\n    (newVolume: number) => {\n      if (!videoRef.current) return;\n\n      const clampedVolume = Math.max(0, Math.min(1, newVolume));\n      videoRef.current.volume = clampedVolume;\n      setVolume(clampedVolume);\n      setIsMuted(clampedVolume === 0);\n      onVolumeChange?.(clampedVolume, clampedVolume === 0);\n    },\n    [onVolumeChange]\n  );\n\n  // Handle mute toggle\n  const handleMuteToggle = useCallback(() => {\n    if (!videoRef.current) return;\n\n    const newMuted = !isMuted;\n    videoRef.current.muted = newMuted;\n    setIsMuted(newMuted);\n    onVolumeChange?.(newMuted ? 0 : volume, newMuted);\n  }, [isMuted, volume, onVolumeChange]);\n\n  // Handle fullscreen toggle\n  const handleFullscreenToggle = useCallback(async () => {\n    if (!containerRef.current) return;\n\n    try {\n      if (!isFullscreen) {\n        await containerRef.current.requestFullscreen();\n        setIsFullscreen(true);\n      } else {\n        await document.exitFullscreen();\n        setIsFullscreen(false);\n      }\n      onFullscreenChange?.(!isFullscreen);\n    } catch {\n      setIsFullscreen(Boolean(document.fullscreenElement));\n    }\n  }, [isFullscreen, onFullscreenChange]);\n\n  // Handle keyboard shortcuts\n  useEffect(() => {\n    const handleKeyPress = (e: KeyboardEvent) => {\n      if (!videoRef.current) return;\n\n      switch (e.key.toLowerCase()) {\n        case \" \":\n          e.preventDefault();\n          handlePlayPause();\n          break;\n        case \"arrowleft\":\n          e.preventDefault();\n          videoRef.current.currentTime = Math.max(0, currentTime - 10);\n          break;\n        case \"arrowright\":\n          e.preventDefault();\n          videoRef.current.currentTime = Math.min(duration, currentTime + 10);\n          break;\n        case \"arrowup\":\n          e.preventDefault();\n          handleVolumeChange(volume + 0.1);\n          break;\n        case \"arrowdown\":\n          e.preventDefault();\n          handleVolumeChange(volume - 0.1);\n          break;\n        case \"m\":\n          e.preventDefault();\n          handleMuteToggle();\n          break;\n        case \"f\":\n          e.preventDefault();\n          if (enableFullscreen) handleFullscreenToggle();\n          break;\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyPress);\n    return () => document.removeEventListener(\"keydown\", handleKeyPress);\n  }, [\n    handlePlayPause,\n    handleVolumeChange,\n    handleMuteToggle,\n    handleFullscreenToggle,\n    currentTime,\n    duration,\n    volume,\n    enableFullscreen,\n  ]);\n\n  // Auto-hide controls\n  const resetControlsTimeout = useCallback(() => {\n    if (controlsTimeoutRef.current) {\n      clearTimeout(controlsTimeoutRef.current);\n    }\n\n    setShowControls(true);\n\n    if (isPlaying) {\n      controlsTimeoutRef.current = setTimeout(() => {\n        setShowControls(false);\n      }, 3000);\n    }\n  }, [isPlaying]);\n\n  useEffect(() => {\n    resetControlsTimeout();\n    return () => {\n      if (controlsTimeoutRef.current) {\n        clearTimeout(controlsTimeoutRef.current);\n      }\n    };\n  }, [resetControlsTimeout]);\n\n  // Handle mouse movement to show controls\n  const handleMouseMove = useCallback(() => {\n    resetControlsTimeout();\n  }, [resetControlsTimeout]);\n\n  // Format time\n  const formatTime = useCallback((time: number) => {\n    const minutes = Math.floor(time / 60);\n    const seconds = Math.floor(time % 60);\n    return `${minutes}:${seconds.toString().padStart(2, \"0\")}`;\n  }, []);\n\n  // Handle video load\n  const handleLoadedData = useCallback(() => {\n    setIsLoading(false);\n    setError(null);\n  }, []);\n\n  // Handle video error\n  const handleError = useCallback(() => {\n    setIsLoading(false);\n    if (poster && sources.every((source) => source.src.startsWith(\"data:\"))) {\n      setError(null);\n      return;\n    }\n    setError(\"Failed to load video\");\n  }, [poster, sources]);\n\n  // Skip forward/backward\n  const handleSkip = useCallback(\n    (seconds: number) => {\n      if (!videoRef.current) return;\n      videoRef.current.currentTime = Math.max(\n        0,\n        Math.min(duration, currentTime + seconds)\n      );\n    },\n    [currentTime, duration]\n  );\n\n  if (sources.length === 0) {\n    return (\n      <GlassCard data-glass-component className={cn(\"p-8\", className)}>\n        <div className=\"glass-text-center glass-text-primary-glass-opacity-60\">\n          No video sources provided\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\n          \"overflow-hidden relative group\",\n          isFullscreen && \"fixed inset-0 z-50 rounded-none\",\n          isTheaterMode && \"aspect-video max-w-6xl mx-auto\",\n          className\n        )}\n        ref={containerRef}\n        onMouseMove={handleMouseMove}\n        {...props}\n      >\n        <CardContent className=\"glass-p-0\">\n          {/* Video Element */}\n          <div className=\"glass-relative glass-surface-dark glass-aspect-video glass-overflow-hidden\">\n            <video\n              ref={videoRef}\n              className=\"glass-w-full glass-h-full glass-object-contain\"\n              poster={poster}\n              autoPlay={autoPlay}\n              onLoadedData={handleLoadedData}\n              onTimeUpdate={handleTimeUpdate}\n              onPlay={() => setIsPlaying(true)}\n              onPause={() => setIsPlaying(false)}\n              onError={handleError}\n              onWaiting={() => setIsLoading(true)}\n              onCanPlay={() => setIsLoading(false)}\n            >\n              {sources.map((source, index) => (\n                <source key={index} src={source.src} type={source.type} />\n              ))}\n              {subtitles.map((subtitle, index) => (\n                <track\n                  key={index}\n                  src={subtitle.src}\n                  label={subtitle.label}\n                  kind=\"subtitles\"\n                  srcLang={subtitle.language}\n                  default={subtitle.default}\n                />\n              ))}\n              Your browser does not support the video tag.\n            </video>\n\n            {/* Loading State */}\n            {isLoading && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-surface-dark/50\">\n                <Loader2 className=\"glass-w-8 glass-h-8 glass-text-primary glass-animate-spin\" />\n              </div>\n            )}\n\n            {/* Error State */}\n            {error && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-flex-col glass-items-center glass-justify-center glass-surface-dark/50 glass-text-primary\">\n                <AlertCircle className=\"glass-w-12 glass-h-12 glass-mb-4\" />\n                <p>{error}</p>\n              </div>\n            )}\n\n            {/* Big Play Button */}\n            {!controls && !isPlaying && !isLoading && !error && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n                <GlassButton\n                  variant=\"secondary\"\n                  size=\"lg\"\n                  onClick={handlePlayPause}\n                  className=\"glass-p-6 glass-radius-full\"\n                  aria-label=\"Play video\"\n                >\n                  <Play className=\"glass-w-8 glass-h-8\" />\n                </GlassButton>\n              </div>\n            )}\n\n            {/* Controls Overlay */}\n            {controls && showControls && (\n              <div className=\"glass-absolute glass-inset-0 glass-bg-gradient-to-b glass-from-black/45 glass-via-transparent glass-to-black/70\">\n                {/* Top Bar */}\n                <div className=\"glass-absolute glass-top-0 glass-left-0 glass-right-0 glass-p-4 glass-flex glass-justify-between glass-items-center\">\n                  {title && (\n                    <GlassBadge\n                      variant=\"secondary\"\n                      className=\"glass-surface-dark/50\"\n                    >\n                      {title}\n                    </GlassBadge>\n                  )}\n\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    {enableTheaterMode && (\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={() => setIsTheaterMode(!isTheaterMode)}\n                        className=\"glass-text-primary\"\n                        aria-label={\n                          isTheaterMode\n                            ? \"Exit theater mode\"\n                            : \"Enter theater mode\"\n                        }\n                      >\n                        {isTheaterMode ? (\n                          <Minimize className=\"glass-w-4 glass-h-4\" />\n                        ) : (\n                          <Maximize className=\"glass-w-4 glass-h-4\" />\n                        )}\n                      </GlassButton>\n                    )}\n\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={() => setShowSettings(!showSettings)}\n                      className=\"glass-text-primary\"\n                      aria-label=\"Video settings\"\n                    >\n                      <Settings className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n                  </div>\n                </div>\n\n                {/* Center Controls */}\n                {isPlaying && (\n                  <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n                    <div className=\"glass-flex glass-items-center glass-gap-3 sm:glass-gap-4 glass-transition-opacity sm:glass-opacity-0 sm:glass-group-glass-hover-opacity-100\">\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"lg\"\n                        onClick={() => handleSkip(-10)}\n                        className=\"glass-p-3\"\n                        aria-label=\"Rewind 10 seconds\"\n                      >\n                        <SkipBack className=\"glass-w-6 glass-h-6\" />\n                      </GlassButton>\n\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"lg\"\n                        onClick={handlePlayPause}\n                        className=\"glass-p-4\"\n                        aria-label={isPlaying ? \"Pause video\" : \"Play video\"}\n                      >\n                        {isPlaying ? (\n                          <Pause className=\"glass-w-8 glass-h-8\" />\n                        ) : (\n                          <Play className=\"glass-w-8 glass-h-8\" />\n                        )}\n                      </GlassButton>\n\n                      <GlassButton\n                        variant=\"secondary\"\n                        size=\"lg\"\n                        onClick={() => handleSkip(10)}\n                        className=\"glass-p-3\"\n                        aria-label=\"Forward 10 seconds\"\n                      >\n                        <SkipForward className=\"glass-w-6 glass-h-6\" />\n                      </GlassButton>\n                    </div>\n                  </div>\n                )}\n\n                {/* Bottom Controls */}\n                <div className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-p-4\">\n                  {/* Progress Bar */}\n                  <div\n                    className=\"glass-w-full glass-h-1 glass-surface-subtle/20 glass-radius-full glass-mb-4 glass-cursor-pointer\"\n                    onClick={handleSeek}\n                  >\n                    <div\n                      className=\"glass-h-full glass-surface-primary glass-radius-full glass-transition-all glass-duration-100\"\n                      style={{\n                        width: `${duration > 0 ? (currentTime / duration) * 100 : 0}%`,\n                      }}\n                    />\n                  </div>\n\n                  {/* Control Buttons */}\n                  <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3\">\n                    <div className=\"glass-flex glass-min-w-0 glass-flex-wrap glass-items-center glass-gap-2 sm:glass-gap-4\">\n                      <GlassButton\n                        variant=\"ghost\"\n                        size=\"sm\"\n                        onClick={handlePlayPause}\n                        className=\"glass-text-primary glass-p-2\"\n                        aria-label={isPlaying ? \"Pause video\" : \"Play video\"}\n                      >\n                        {isPlaying ? (\n                          <Pause className=\"glass-w-5 glass-h-5\" />\n                        ) : (\n                          <Play className=\"glass-w-5 glass-h-5\" />\n                        )}\n                      </GlassButton>\n\n                      <div className=\"glass-flex glass-items-center glass-gap-2\">\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={handleMuteToggle}\n                          className=\"glass-text-primary glass-p-2\"\n                          aria-label={\n                            isMuted || volume === 0\n                              ? \"Unmute video\"\n                              : \"Mute video\"\n                          }\n                        >\n                          {isMuted || volume === 0 ? (\n                            <VolumeX className=\"glass-w-5 glass-h-5\" />\n                          ) : (\n                            <Volume2 className=\"glass-w-5 glass-h-5\" />\n                          )}\n                        </GlassButton>\n\n                        <div className=\"glass-hidden glass-h-1 glass-w-20 glass-surface-subtle/20 glass-radius-full glass-cursor-pointer sm:glass-block\">\n                          <div\n                            className=\"glass-h-full glass-surface-subtle glass-radius-full\"\n                            style={{ width: `${isMuted ? 0 : volume * 100}%` }}\n                          />\n                        </div>\n                      </div>\n\n                      <span className=\"glass-whitespace-nowrap glass-text-primary glass-text-sm\">\n                        {formatTime(currentTime)} / {formatTime(duration)}\n                      </span>\n                    </div>\n\n                    <div className=\"glass-flex glass-shrink-0 glass-items-center glass-gap-2\">\n                      <span className=\"glass-whitespace-nowrap glass-text-primary glass-text-sm\">\n                        {playbackSpeed}x\n                      </span>\n\n                      {enableFullscreen && (\n                        <GlassButton\n                          variant=\"ghost\"\n                          size=\"sm\"\n                          onClick={handleFullscreenToggle}\n                          className=\"glass-text-primary glass-p-2\"\n                          aria-label={\n                            isFullscreen\n                              ? \"Exit fullscreen\"\n                              : \"Enter fullscreen\"\n                          }\n                        >\n                          {isFullscreen ? (\n                            <Minimize className=\"glass-w-5 glass-h-5\" />\n                          ) : (\n                            <Maximize className=\"glass-w-5 glass-h-5\" />\n                          )}\n                        </GlassButton>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </div>\n            )}\n          </div>\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassVideoPlayer;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { Loader2 } from \"@/icons\";\nimport React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface VirtualListItem {\n  id: string;\n  height: number;\n  component: React.ElementType;\n  props?: Record<string, unknown>;\n}\n\nexport interface GlassVirtualListProps {\n  /**\n   * Items to render\n   */\n  items: VirtualListItem[];\n  /**\n   * Container height\n   */\n  height: number;\n  /**\n   * Item height (if uniform)\n   */\n  itemHeight?: number;\n  /**\n   * Estimated item height for dynamic sizing\n   */\n  estimatedItemHeight?: number;\n  /**\n   * Overscan count (items to render outside visible area)\n   */\n  overscan?: number;\n  /**\n   * Enable smooth scrolling\n   */\n  smoothScroll?: boolean;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * End reached handler (for infinite scroll)\n   */\n  onEndReached?: () => void;\n  /**\n   * End threshold (pixels from bottom)\n   */\n  endThreshold?: number;\n  /**\n   * Scroll position change handler\n   */\n  onScrollChange?: (scrollTop: number) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassVirtualList component\n * High-performance virtualized list that only renders visible items\n */\nexport const GlassVirtualList: React.FC<GlassVirtualListProps> = ({\n  items,\n  height,\n  itemHeight,\n  estimatedItemHeight = 50,\n  overscan = 5,\n  smoothScroll = true,\n  loading = false,\n  onEndReached,\n  endThreshold = 100,\n  onScrollChange,\n  className,\n  ...props\n}) => {\n  const [scrollTop, setScrollTop] = useState(0);\n  const [containerHeight, setContainerHeight] = useState(height);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  // Calculate total height\n  const totalHeight = useMemo(() => {\n    if (itemHeight) {\n      return (items?.length || 0) * itemHeight;\n    }\n\n    return items.reduce(\n      (sum, item) => sum + (item?.height || estimatedItemHeight),\n      0\n    );\n  }, [items, itemHeight, estimatedItemHeight]);\n\n  // Get visible range\n  const visibleRange = useMemo(() => {\n    const itemSize = itemHeight || estimatedItemHeight;\n\n    const start = Math.floor(scrollTop / itemSize);\n    const end = Math.min(\n      (items?.length || 1) - 1,\n      Math.ceil((scrollTop + containerHeight) / itemSize)\n    );\n\n    return {\n      start: Math.max(0, start - overscan),\n      end: Math.min(items.length - 1, end + overscan),\n    };\n  }, [\n    scrollTop,\n    containerHeight,\n    itemHeight,\n    estimatedItemHeight,\n    items.length,\n    overscan,\n  ]);\n\n  // Get visible items\n  const visibleItems = useMemo(() => {\n    return items.slice(visibleRange.start, visibleRange.end + 1);\n  }, [items, visibleRange]);\n\n  // Calculate offset\n  const offsetY = useMemo(() => {\n    if (itemHeight) {\n      return visibleRange.start * itemHeight;\n    }\n\n    let offset = 0;\n    for (let i = 0; i < visibleRange.start; i++) {\n      offset += items[i]?.height || estimatedItemHeight;\n    }\n    return offset;\n  }, [visibleRange.start, itemHeight, items, estimatedItemHeight]);\n\n  // Handle scroll\n  const handleScroll = useCallback(\n    (e: React.UIEvent<HTMLDivElement>) => {\n      const scrollTop = e.currentTarget.scrollTop;\n      setScrollTop(scrollTop);\n      onScrollChange?.(scrollTop);\n\n      // Check if near end for infinite scroll\n      if (\n        onEndReached &&\n        scrollTop + containerHeight >= totalHeight - endThreshold\n      ) {\n        onEndReached();\n      }\n    },\n    [onScrollChange, onEndReached, containerHeight, totalHeight, endThreshold]\n  );\n\n  // Handle resize\n  useEffect(() => {\n    const handleResize = () => {\n      if (containerRef.current) {\n        setContainerHeight(containerRef.current.clientHeight);\n      }\n    };\n\n    handleResize();\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, []);\n\n  // Update container height when prop changes\n  useEffect(() => {\n    setContainerHeight(height);\n  }, [height]);\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <div\n        ref={containerRef}\n        className={cn(\n          \"relative overflow-auto\",\n          smoothScroll && \"scroll-smooth\",\n          className\n        )}\n        style={{ height: containerHeight }}\n        onScroll={handleScroll}\n        {...props}\n      >\n        <div\n          ref={contentRef}\n          className=\"glass-relative\"\n          style={{ height: totalHeight }}\n        >\n          <div\n            className=\"glass-absolute glass-top-0 glass-left-0 glass-right-0\"\n            style={{ transform: `translateY(${offsetY}px)` }}\n          >\n            {visibleItems.map((item, index) => {\n              const ItemComponent = item?.component;\n              const actualIndex = visibleRange.start + index;\n\n              return (\n                <div\n                  key={item?.id}\n                  style={{\n                    height: itemHeight || item?.height || estimatedItemHeight,\n                  }}\n                >\n                  <ItemComponent {...(item?.props || {})} />\n                </div>\n              );\n            })}\n          </div>\n        </div>\n\n        {/* Loading indicator */}\n        {loading && (\n          <div className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-surface-dark/80 glass-backdrop-blur-md glass-contrast-guard glass-radius-full glass-contrast-guard\">\n              <Loader2 className=\"glass-w-4 glass-h-4 glass-animate-spin\" />\n              <span className=\"glass-text-primary glass-text-sm\">\n                Loading...\n              </span>\n            </div>\n          </div>\n        )}\n      </div>\n    </Motion>\n  );\n};\n\n// Virtual Grid Component\nexport interface GlassVirtualGridProps\n  extends Omit<GlassVirtualListProps, \"itemHeight\"> {\n  /**\n   * Number of columns\n   */\n  columns: number;\n  /**\n   * Grid gap\n   */\n  gap?: number;\n  /**\n   * Item aspect ratio\n   */\n  aspectRatio?: number;\n}\n\n/**\n * GlassVirtualGrid component\n * Virtualized grid layout for large datasets\n */\nexport const GlassVirtualGrid: React.FC<GlassVirtualGridProps> = ({\n  items,\n  columns,\n  gap = 8,\n  aspectRatio = 1,\n  height,\n  estimatedItemHeight = 100,\n  overscan = 5,\n  className,\n  ...props\n}) => {\n  const [scrollTop, setScrollTop] = useState(0);\n  const [containerHeight, setContainerHeight] = useState(height);\n  const [containerWidth, setContainerWidth] = useState(0);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  // Calculate item dimensions\n  const itemWidth = useMemo(() => {\n    return (containerWidth - gap * (columns - 1)) / columns;\n  }, [containerWidth, columns, gap]);\n\n  const itemHeight = useMemo(() => {\n    return itemWidth * aspectRatio;\n  }, [itemWidth, aspectRatio]);\n\n  // Calculate rows and visible range\n  const totalRows = Math.ceil((items?.length || 0) / columns);\n  const rowHeight = itemHeight + gap;\n  const visibleRows = Math.ceil(containerHeight / rowHeight);\n\n  const visibleRange = useMemo(() => {\n    const startRow = Math.floor(scrollTop / rowHeight);\n    const endRow = Math.min(totalRows - 1, startRow + visibleRows + overscan);\n\n    return {\n      startRow: Math.max(0, startRow - overscan),\n      endRow,\n    };\n  }, [scrollTop, rowHeight, visibleRows, totalRows, overscan]);\n\n  // Get visible items\n  const visibleItems = useMemo(() => {\n    const result = [];\n    for (let row = visibleRange.startRow; row <= visibleRange.endRow; row++) {\n      for (let col = 0; col < columns; col++) {\n        const index = row * columns + col;\n        if (index < (items?.length || 0)) {\n          result.push({\n            ...items[index],\n            row,\n            col,\n            index,\n          });\n        }\n      }\n    }\n    return result;\n  }, [items, visibleRange, columns]);\n\n  // Calculate offset\n  const offsetY = visibleRange.startRow * rowHeight;\n\n  // Handle scroll\n  const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n    setScrollTop(e.currentTarget.scrollTop);\n  }, []);\n\n  // Handle resize\n  useEffect(() => {\n    const handleResize = () => {\n      if (containerRef.current) {\n        setContainerHeight(containerRef.current.clientHeight);\n        setContainerWidth(containerRef.current.clientWidth);\n      }\n    };\n\n    handleResize();\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, []);\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <div\n        ref={containerRef}\n        className={cn(\"relative overflow-auto\", className)}\n        style={{ height: containerHeight }}\n        onScroll={handleScroll}\n        {...props}\n      >\n        <div\n          className=\"glass-relative\"\n          style={{ height: totalRows * rowHeight }}\n        >\n          <div\n            className=\"glass-absolute glass-top-0 glass-left-0 glass-right-0\"\n            style={{ transform: `translateY(${offsetY}px)` }}\n          >\n            <div\n              className=\"glass-grid glass-gap-2\"\n              style={{\n                gridTemplateColumns: `repeat(${columns}, 1fr)`,\n                gap: `${gap}px`,\n              }}\n            >\n              {visibleItems.map((item) => {\n                const ItemComponent = item?.component;\n\n                return (\n                  <div\n                    key={item?.id}\n                    style={{\n                      height: itemHeight,\n                      width: itemWidth,\n                    }}\n                  >\n                    <ItemComponent {...(item?.props || {})} />\n                  </div>\n                );\n              })}\n            </div>\n          </div>\n        </div>\n      </div>\n    </Motion>\n  );\n};\n\nexport default GlassVirtualList;\n", "\"use client\";\nimport React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useAccessibility } from \"../../hooks/useAccessibility\";\nimport { usePerformance } from \"../../hooks/usePerformance\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface FormField {\n  id: string;\n  type:\n    | \"text\"\n    | \"email\"\n    | \"password\"\n    | \"number\"\n    | \"select\"\n    | \"textarea\"\n    | \"checkbox\"\n    | \"radio\"\n    | \"date\"\n    | \"file\"\n    | \"tel\"\n    | \"url\";\n  label: string;\n  placeholder?: string;\n  required?: boolean;\n  validation?: {\n    pattern?: string;\n    minLength?: number;\n    maxLength?: number;\n    min?: number;\n    max?: number;\n    custom?: (value: unknown) => string | null;\n  };\n  options?: Array<{ value: string; label: string }>;\n  aiSuggestions?: {\n    fieldType: string[];\n    validationRules: string[];\n    accessibilityTips: string[];\n    uxOptimizations: string[];\n  };\n  conditional?: {\n    dependsOn: string;\n    condition: (value: unknown) => boolean;\n  };\n}\n\nexport interface FormSchema {\n  id: string;\n  title: string;\n  description: string;\n  fields: FormField[];\n  aiAnalysis?: {\n    purpose: string;\n    conversionOptimizations: string[];\n    performanceScore: number;\n    accessibilityScore: number;\n    recommendations: string[];\n  };\n}\n\nexport interface IntelligentFormBuilderProps {\n  onSchemaChange?: (schema: FormSchema) => void;\n  initialSchema?: Partial<FormSchema>;\n  enableAIAssistance?: boolean;\n  enableRealTimeOptimization?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  className?: string;\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\n// AI-powered field type detection\nconst analyzeFieldPurpose = (\n  label: string,\n  context: string\n): FormField[\"aiSuggestions\"] => {\n  const lowerLabel = label.toLowerCase();\n  const lowerContext = context.toLowerCase();\n\n  const suggestions: FormField[\"aiSuggestions\"] = {\n    fieldType: [],\n    validationRules: [],\n    accessibilityTips: [],\n    uxOptimizations: [],\n  };\n\n  // Smart field type detection\n  if (lowerLabel.includes(\"email\")) {\n    suggestions.fieldType.push(\"email\");\n    suggestions.validationRules.push(\"Email format validation\");\n    suggestions.accessibilityTips.push(\n      'Use autocomplete=\"email\" for better UX'\n    );\n  } else if (lowerLabel.includes(\"password\")) {\n    suggestions.fieldType.push(\"password\");\n    suggestions.validationRules.push(\n      \"Minimum 8 characters, include numbers and symbols\"\n    );\n    suggestions.uxOptimizations.push(\"Add password strength indicator\");\n  } else if (lowerLabel.includes(\"phone\") || lowerLabel.includes(\"tel\")) {\n    suggestions.fieldType.push(\"tel\");\n    suggestions.validationRules.push(\"Phone number format validation\");\n    suggestions.accessibilityTips.push(\n      'Use autocomplete=\"tel\" for mobile optimization'\n    );\n  } else if (lowerLabel.includes(\"date\") || lowerLabel.includes(\"birth\")) {\n    suggestions.fieldType.push(\"date\");\n    suggestions.validationRules.push(\"Date range validation\");\n    suggestions.uxOptimizations.push(\"Consider date picker for better UX\");\n  } else if (\n    lowerLabel.includes(\"age\") ||\n    lowerLabel.includes(\"count\") ||\n    lowerLabel.includes(\"number\")\n  ) {\n    suggestions.fieldType.push(\"number\");\n    suggestions.validationRules.push(\"Numeric range validation\");\n  } else if (\n    lowerLabel.includes(\"description\") ||\n    lowerLabel.includes(\"comment\") ||\n    lowerLabel.includes(\"message\")\n  ) {\n    suggestions.fieldType.push(\"textarea\");\n    suggestions.validationRules.push(\"Character limit (recommended: 500-2000)\");\n    suggestions.uxOptimizations.push(\"Add character counter\");\n  } else if (\n    lowerLabel.includes(\"website\") ||\n    lowerLabel.includes(\"url\") ||\n    lowerLabel.includes(\"link\")\n  ) {\n    suggestions.fieldType.push(\"url\");\n    suggestions.validationRules.push(\"URL format validation\");\n  }\n\n  // Context-based suggestions\n  if (\n    lowerContext.includes(\"registration\") ||\n    lowerContext.includes(\"signup\")\n  ) {\n    suggestions.uxOptimizations.push(\"Consider social login options\");\n    suggestions.accessibilityTips.push(\"Provide clear password requirements\");\n  } else if (\n    lowerContext.includes(\"payment\") ||\n    lowerContext.includes(\"billing\")\n  ) {\n    suggestions.validationRules.push(\"Real-time validation for payment fields\");\n    suggestions.uxOptimizations.push(\"Add secure payment indicators\");\n  } else if (\n    lowerContext.includes(\"contact\") ||\n    lowerContext.includes(\"support\")\n  ) {\n    suggestions.uxOptimizations.push(\"Add expected response time\");\n    suggestions.accessibilityTips.push(\"Provide alternative contact methods\");\n  }\n\n  // Universal accessibility tips\n  suggestions.accessibilityTips.push(\"Ensure sufficient color contrast\");\n  suggestions.accessibilityTips.push(\"Add proper ARIA labels\");\n  suggestions.uxOptimizations.push(\"Add real-time validation feedback\");\n\n  return suggestions;\n};\n\n// AI form optimization engine\nconst optimizeFormFlow = (fields: FormField[]): string[] => {\n  const optimizations: string[] = [];\n\n  // Check field order\n  const hasPersonalInfo = fields.some(\n    (f) =>\n      f.type === \"text\" &&\n      (f.label.toLowerCase().includes(\"name\") ||\n        f.label.toLowerCase().includes(\"first\"))\n  );\n  const hasContactInfo = fields.some(\n    (f) => f.type === \"email\" || f.type === \"tel\"\n  );\n\n  if (hasPersonalInfo && hasContactInfo) {\n    optimizations.push(\n      \"Consider grouping personal information first, then contact details\"\n    );\n  }\n\n  // Check for long forms\n  if (fields.length > 8) {\n    optimizations.push(\n      \"Consider breaking this into multiple steps or sections\"\n    );\n    optimizations.push(\"Implement progress indicator for better UX\");\n  }\n\n  // Check for required field balance\n  const requiredFields = fields.filter((f) => f.required).length;\n  if (requiredFields / fields.length > 0.7) {\n    optimizations.push(\n      \"Consider reducing required fields to improve completion rates\"\n    );\n  }\n\n  // Check for conditional logic opportunities\n  const independentFields = fields.filter((f) => !f.conditional).length;\n  if (independentFields === fields.length && fields.length > 5) {\n    optimizations.push(\n      \"Consider adding conditional logic to reduce cognitive load\"\n    );\n  }\n\n  return optimizations;\n};\n\nexport const GlassIntelligentFormBuilder: React.FC<\n  IntelligentFormBuilderProps\n> = ({\n  onSchemaChange,\n  initialSchema,\n  enableAIAssistance = true,\n  enableRealTimeOptimization = true,\n  compact = false,\n  contained = false,\n  maxHeight,\n  className = \"\",\n  \"data-testid\": dataTestId,\n  \"aria-label\": ariaLabel,\n}) => {\n  const [schema, setSchema] = useState<FormSchema>({\n    id: initialSchema?.id || `form-${Date.now()}`,\n    title: initialSchema?.title || \"New Form\",\n    description: initialSchema?.description || \"\",\n    fields: initialSchema?.fields || [],\n    aiAnalysis: initialSchema?.aiAnalysis,\n  });\n\n  const [selectedFieldIndex, setSelectedFieldIndex] = useState<number | null>(\n    null\n  );\n  const [aiRecommendations, setAIRecommendations] = useState<string[]>([]);\n  const [isAnalyzing, setIsAnalyzing] = useState(false);\n  const [validationErrors, setValidationErrors] = useState<\n    Record<string, string>\n  >({});\n  const [isCompact, setIsCompact] = useState(false);\n\n  const rootRef = useRef<HTMLDivElement>(null);\n  const accessibility = useAccessibility();\n  const performance = usePerformance();\n  const analysisTimeoutRef = useRef<NodeJS.Timeout>();\n\n  useEffect(() => {\n    const element = rootRef.current;\n    if (!element || typeof ResizeObserver === \"undefined\") return;\n\n    const updateCompactState = () => {\n      const rect = element.getBoundingClientRect();\n      setIsCompact(compact || rect.width < 720 || rect.height < 520);\n    };\n\n    updateCompactState();\n    const observer = new ResizeObserver(updateCompactState);\n    observer.observe(element);\n\n    return () => observer.disconnect();\n  }, [compact]);\n\n  // Real-time AI analysis\n  useEffect(() => {\n    if (!enableAIAssistance || schema.fields.length === 0) return;\n\n    clearTimeout(analysisTimeoutRef.current);\n    analysisTimeoutRef.current = setTimeout(() => {\n      setIsAnalyzing(true);\n\n      // Simulate AI analysis delay\n      setTimeout(() => {\n        const optimizations = optimizeFormFlow(schema.fields);\n        const accessibilityScore = calculateAccessibilityScore(schema.fields);\n        const performanceScore = performance.getPerformanceScore();\n\n        const updatedSchema = {\n          ...schema,\n          aiAnalysis: {\n            purpose: detectFormPurpose(schema.title, schema.description),\n            conversionOptimizations: optimizations,\n            performanceScore,\n            accessibilityScore,\n            recommendations: [\n              ...optimizations,\n              ...(accessibilityScore < 90\n                ? [\"Improve accessibility compliance\"]\n                : []),\n              ...(performanceScore < 80 ? [\"Optimize form performance\"] : []),\n            ],\n          },\n        };\n\n        setSchema(updatedSchema);\n        setAIRecommendations(updatedSchema.aiAnalysis!.recommendations);\n        setIsAnalyzing(false);\n        onSchemaChange?.(updatedSchema);\n      }, 1000);\n    }, 500);\n\n    return () => clearTimeout(analysisTimeoutRef.current);\n  }, [schema.fields, enableAIAssistance]);\n\n  const detectFormPurpose = (title: string, description: string): string => {\n    const combined = (title + \" \" + description).toLowerCase();\n\n    if (combined.includes(\"contact\") || combined.includes(\"support\"))\n      return \"Contact/Support Form\";\n    if (combined.includes(\"registration\") || combined.includes(\"signup\"))\n      return \"Registration Form\";\n    if (combined.includes(\"login\") || combined.includes(\"signin\"))\n      return \"Authentication Form\";\n    if (combined.includes(\"payment\") || combined.includes(\"billing\"))\n      return \"Payment Form\";\n    if (combined.includes(\"feedback\") || combined.includes(\"survey\"))\n      return \"Feedback/Survey Form\";\n    if (combined.includes(\"application\") || combined.includes(\"apply\"))\n      return \"Application Form\";\n\n    return \"General Purpose Form\";\n  };\n\n  const calculateAccessibilityScore = (fields: FormField[]): number => {\n    let score = 100;\n\n    fields.forEach((field) => {\n      if (!field.label || field.label.trim() === \"\") score -= 10;\n      if (field.required && !field.validation) score -= 5;\n      if (\n        field.type === \"select\" &&\n        (!field.options || field.options.length === 0)\n      )\n        score -= 10;\n    });\n\n    return Math.max(0, score);\n  };\n\n  const addField = useCallback(() => {\n    const newField: FormField = {\n      id: `field-${Date.now()}`,\n      type: \"text\",\n      label: \"New Field\",\n      required: false,\n    };\n\n    setSchema((prev) => ({\n      ...prev,\n      fields: [...prev.fields, newField],\n    }));\n  }, []);\n\n  const updateField = useCallback(\n    (index: number, updates: Partial<FormField>) => {\n      setSchema((prev) => ({\n        ...prev,\n        fields: prev.fields.map((field, i) => {\n          if (i === index) {\n            const updatedField = { ...field, ...updates };\n\n            // AI-powered field analysis\n            if (enableAIAssistance && (updates.label || updates.type)) {\n              updatedField.aiSuggestions = analyzeFieldPurpose(\n                updatedField.label,\n                prev.title + \" \" + prev.description\n              );\n            }\n\n            return updatedField;\n          }\n          return field;\n        }),\n      }));\n    },\n    [enableAIAssistance]\n  );\n\n  const removeField = useCallback(\n    (index: number) => {\n      setSchema((prev) => ({\n        ...prev,\n        fields: prev.fields.filter((_, i) => i !== index),\n      }));\n      if (selectedFieldIndex === index) {\n        setSelectedFieldIndex(null);\n      }\n    },\n    [selectedFieldIndex]\n  );\n\n  const validateForm = useCallback((): boolean => {\n    const errors: Record<string, string> = {};\n\n    if (!schema.title.trim()) {\n      errors.title = \"Form title is required\";\n    }\n\n    schema.fields.forEach((field, index) => {\n      if (!field.label.trim()) {\n        errors[`field-${index}-label`] = \"Field label is required\";\n      }\n\n      if (\n        field.type === \"select\" &&\n        (!field.options || field.options.length === 0)\n      ) {\n        errors[`field-${index}-options`] = \"Select fields must have options\";\n      }\n    });\n\n    setValidationErrors(errors);\n    return Object.keys(errors).length === 0;\n  }, [schema]);\n\n  const exportSchema = useCallback(() => {\n    if (!validateForm()) return;\n\n    const exportData = {\n      ...schema,\n      exportedAt: new Date().toISOString(),\n      version: \"1.0.0\",\n    };\n\n    const blob = new Blob([JSON.stringify(exportData, null, 2)], {\n      type: \"application/json\",\n    });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.download = `${schema.title.replace(/\\s+/g, \"-\").toLowerCase()}-schema.json`;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  }, [schema, validateForm]);\n\n  const compactFields =\n    schema.fields.length > 0\n      ? schema.fields.slice(0, 3)\n      : [\n          {\n            id: \"compact-name\",\n            type: \"text\" as const,\n            label: \"Full name\",\n            required: true,\n          },\n          {\n            id: \"compact-email\",\n            type: \"email\" as const,\n            label: \"Email\",\n            required: true,\n          },\n          {\n            id: \"compact-message\",\n            type: \"textarea\" as const,\n            label: \"Message\",\n          },\n        ];\n\n  const boundedHeight =\n    maxHeight ?? (compact || contained || isCompact ? 260 : undefined);\n\n  if (isCompact || compact) {\n    return (\n      <div\n        ref={rootRef}\n        data-glass-component\n        className={cn(\n          \"glass-w-full glass-p-3\",\n          (compact || contained) && \"glass-overflow-auto\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n              }\n            : null),\n        }}\n        data-testid={dataTestId}\n        aria-label={ariaLabel}\n      >\n        <Glass className=\"glass-p-4 glass-overflow-hidden\">\n          <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-3 glass-mb-4\">\n            <div className=\"glass-min-w-0\">\n              <p className=\"glass-text-xs glass-uppercase glass-tracking-wider glass-text-primary-glass-opacity-60 glass-mb-1\">\n                AI form builder\n              </p>\n              <h1 className=\"glass-text-xl glass-font-bold glass-text-primary glass-leading-tight\">\n                {schema.title === \"New Form\"\n                  ? \"Intelligent Form\"\n                  : schema.title}\n              </h1>\n              <p className=\"glass-text-sm glass-text-secondary glass-mt-1 glass-leading-snug\">\n                {schema.description ||\n                  \"Draft, optimize, and preview form fields.\"}\n              </p>\n            </div>\n            <div className=\"glass-flex glass-flex-col glass-gap-2 glass-shrink-0\">\n              <button\n                onClick={addField}\n                className=\"glass-px-3 glass-py-2 glass-surface-blue glass-text-primary glass-radius-lg glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Add\n              </button>\n              <button\n                onClick={exportSchema}\n                className=\"glass-px-3 glass-py-2 glass-surface-subtle glass-text-primary glass-radius-lg glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Export\n              </button>\n            </div>\n          </div>\n\n          <div className=\"glass-grid glass-grid-cols-1 glass-gap-2\">\n            {compactFields.map((field) => (\n              <div\n                key={field.id}\n                className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-rounded-lg glass-border glass-border-subtle glass-bg-white/8 glass-px-3 glass-py-2\"\n              >\n                <div className=\"glass-min-w-0\">\n                  <p className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n                    {field.label}\n                  </p>\n                  <p className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n                    {field.type}\n                    {field.required ? \" \u00B7 required\" : \"\"}\n                  </p>\n                </div>\n                <span className=\"glass-rounded-full glass-border glass-border-white/15 glass-px-2 glass-py-1 glass-text-xs glass-text-secondary\">\n                  {enableAIAssistance ? \"AI\" : \"Field\"}\n                </span>\n              </div>\n            ))}\n          </div>\n\n          <div className=\"glass-mt-4 glass-rounded-lg glass-border glass-border-cyan-400/20 glass-bg-cyan-950/20 glass-px-3 glass-py-2\">\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3\">\n              <span className=\"glass-text-xs glass-text-secondary\">\n                Accessibility\n              </span>\n              <span className=\"glass-text-sm glass-font-semibold glass-text-cyan-200\">\n                {schema.aiAnalysis?.accessibilityScore ?? 100}%\n              </span>\n            </div>\n          </div>\n        </Glass>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={rootRef}\n      data-glass-component\n      className={cn(\n        \"glass-w-full glass-container-6xl glass-mx-auto glass-p-6\",\n        contained && \"glass-overflow-auto\",\n        className\n      )}\n      style={{\n        ...(boundedHeight !== undefined\n          ? {\n              maxHeight:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n            }\n          : null),\n      }}\n      data-testid={dataTestId}\n      aria-label={ariaLabel}\n    >\n      {/* Form Builder Header */}\n      <Glass className=\"glass-p-6\">\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-6\">\n          <div>\n            <h1 className=\"glass-text-2xl glass-font-bold glass-text-secondary\">\n              \uD83E\uDD16 Intelligent Form Builder\n            </h1>\n            <p className=\"glass-text-secondary glass-mt-1\">\n              AI-powered form creation with real-time optimization\n            </p>\n          </div>\n          <div className=\"glass-flex glass-gap-3\">\n            <button\n              onClick={exportSchema}\n              className=\"glass-px-4 glass-py-2 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              Export Schema\n            </button>\n            <button\n              onClick={addField}\n              className=\"glass-px-4 glass-py-2 glass-surface-green glass-text-primary glass-radius-lg hover:glass-surface-green glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              + Add Field\n            </button>\n          </div>\n        </div>\n\n        {/* Form Basic Info */}\n        <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-2 glass-gap-6 glass-mb-6\">\n          <div>\n            <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n              Form Title *\n            </label>\n            <input\n              type=\"text\"\n              value={schema.title}\n              onChange={(e) =>\n                setSchema((prev) => ({ ...prev, title: e.target.value }))\n              }\n              className={cn(\n                \"glass-w-full glass-px-3 glass-py-2 glass-border glass-radius-lg glass-focus\",\n                validationErrors.title ? \"border-red-500\" : \"border-white/20\"\n              )}\n              placeholder=\"Enter form title...\"\n            />\n            {validationErrors.title && (\n              <p className=\"glass-text-primary glass-text-sm glass-mt-1\">\n                {validationErrors.title}\n              </p>\n            )}\n          </div>\n          <div>\n            <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n              Description\n            </label>\n            <input\n              type=\"text\"\n              value={schema.description}\n              onChange={(e) =>\n                setSchema((prev) => ({\n                  ...prev,\n                  description: e.target.value,\n                }))\n              }\n              className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus\"\n              placeholder=\"Describe the purpose of this form...\"\n            />\n          </div>\n        </div>\n\n        {/* AI Analysis Panel */}\n        {enableAIAssistance && schema.aiAnalysis && (\n          <div className=\"glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-xl glass-p-6\">\n            <div className=\"glass-flex glass-items-center glass-gap-3 glass-mb-4\">\n              <div className=\"glass-w-8 glass-h-8 glass-surface-blue glass-radius-full glass-flex glass-items-center glass-justify-center\">\n                <span className=\"glass-text-primary glass-text-sm\">\uD83E\uDD16</span>\n              </div>\n              <div>\n                <h3 className=\"glass-font-semibold glass-text-secondary\">\n                  AI Analysis\n                </h3>\n                <p className=\"glass-text-sm glass-text-secondary\">\n                  Detected Purpose: {schema.aiAnalysis.purpose}\n                </p>\n              </div>\n              {isAnalyzing && (\n                <div className=\"glass-ml-auto\">\n                  <div className=\"glass-animate-spin glass-w-5 glass-h-5 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full\"></div>\n                </div>\n              )}\n            </div>\n\n            <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-3 glass-gap-4 glass-mb-4\">\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {schema.aiAnalysis.accessibilityScore}%\n                </div>\n                <div className=\"glass-text-sm glass-text-secondary\">\n                  Accessibility Score\n                </div>\n              </div>\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {schema.aiAnalysis.performanceScore}/100\n                </div>\n                <div className=\"glass-text-sm glass-text-secondary\">\n                  Performance Score\n                </div>\n              </div>\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {schema.fields.length}\n                </div>\n                <div className=\"glass-text-sm glass-text-secondary\">\n                  Total Fields\n                </div>\n              </div>\n            </div>\n\n            {schema.aiAnalysis.recommendations.length > 0 && (\n              <div>\n                <h4 className=\"glass-font-medium glass-text-secondary glass-mb-2\">\n                  \uD83C\uDFAF AI Recommendations:\n                </h4>\n                <ul className=\"glass-space-y-1\">\n                  {schema.aiAnalysis.recommendations\n                    .slice(0, 3)\n                    .map((rec, index) => (\n                      <li\n                        key={index}\n                        className=\"glass-text-sm glass-text-secondary glass-flex glass-items-center glass-gap-2\"\n                      >\n                        <span className=\"glass-w-1.5 glass-h-1.5 glass-surface-blue glass-radius-full\"></span>\n                        {rec}\n                      </li>\n                    ))}\n                </ul>\n              </div>\n            )}\n          </div>\n        )}\n      </Glass>\n\n      {/* Form Fields Builder */}\n      <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-2 glass-gap-8\">\n        {/* Fields List */}\n        <Glass className=\"glass-p-6\">\n          <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary glass-mb-4\">\n            Form Fields\n          </h2>\n          <div className=\"glass-space-y-4 glass-max-h-96 glass-overflow-y-auto\">\n            {schema.fields.map((field, index) => (\n              <div\n                key={field.id}\n                className={cn(\n                  \"glass-p-4 glass-border glass-radius-lg glass-cursor-pointer glass-transition\",\n                  selectedFieldIndex === index\n                    ? \"glass-surface-primary/10\"\n                    : \"glass-border-subtle hover:glass-border\"\n                )}\n                onClick={() => setSelectedFieldIndex(index)}\n              >\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <div className=\"glass-flex-1\">\n                    <div className=\"glass-font-medium glass-text-secondary\">\n                      {field.label}\n                    </div>\n                    <div className=\"glass-text-sm glass-text-secondary glass-capitalize\">\n                      {field.type} {field.required && \"\u2022 Required\"}\n                    </div>\n                  </div>\n                  <button\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      removeField(index);\n                    }}\n                    className=\"glass-text-primary hover:glass-text-primary glass-p-1\"\n                  >\n                    \u2715\n                  </button>\n                </div>\n\n                {enableAIAssistance &&\n                  field.aiSuggestions &&\n                  field.aiSuggestions.fieldType.length > 0 && (\n                    <div className=\"glass-mt-2 glass-flex glass-flex-wrap glass-gap-1\">\n                      {field.aiSuggestions.fieldType\n                        .slice(0, 2)\n                        .map((suggestion, i) => (\n                          <span\n                            key={i}\n                            className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-primary glass-radius\"\n                          >\n                            \uD83D\uDCA1 {suggestion}\n                          </span>\n                        ))}\n                    </div>\n                  )}\n              </div>\n            ))}\n\n            {schema.fields.length === 0 && (\n              <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n                <div className=\"glass-text-4xl glass-mb-2\">\uD83D\uDCDD</div>\n                <p>No fields yet. Click \"Add Field\" to get started.</p>\n              </div>\n            )}\n          </div>\n        </Glass>\n\n        {/* Field Editor */}\n        <Glass className=\"glass-p-6\">\n          <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary glass-mb-4\">\n            Field Editor\n          </h2>\n\n          {selectedFieldIndex !== null && schema.fields[selectedFieldIndex] ? (\n            <div className=\"glass-space-y-4\">\n              {(() => {\n                const field = schema.fields[selectedFieldIndex];\n                return (\n                  <>\n                    {/* Basic Field Properties */}\n                    <div>\n                      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                        Field Label *\n                      </label>\n                      <input\n                        type=\"text\"\n                        value={field.label}\n                        onChange={(e) =>\n                          updateField(selectedFieldIndex, {\n                            label: e.target.value,\n                          })\n                        }\n                        className={cn(\n                          \"glass-w-full glass-px-3 glass-py-2 glass-border glass-radius-lg glass-focus\",\n                          validationErrors[`field-${selectedFieldIndex}-label`]\n                            ? \"border-red-500\"\n                            : \"border-white/20\"\n                        )}\n                        placeholder=\"Enter field label...\"\n                      />\n                      {validationErrors[\n                        `field-${selectedFieldIndex}-label`\n                      ] && (\n                        <p className=\"glass-text-primary glass-text-sm glass-mt-1\">\n                          {\n                            validationErrors[\n                              `field-${selectedFieldIndex}-label`\n                            ]\n                          }\n                        </p>\n                      )}\n                    </div>\n\n                    <div className=\"glass-grid glass-grid-cols-2 glass-gap-4\">\n                      <div>\n                        <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                          Field Type\n                        </label>\n                        <select\n                          value={field.type}\n                          onChange={(e) =>\n                            updateField(selectedFieldIndex, {\n                              type: e.target.value as FormField[\"type\"],\n                            })\n                          }\n                          className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus\"\n                        >\n                          <option value=\"text\">Text</option>\n                          <option value=\"email\">Email</option>\n                          <option value=\"password\">Password</option>\n                          <option value=\"tel\">Phone</option>\n                          <option value=\"number\">Number</option>\n                          <option value=\"date\">Date</option>\n                          <option value=\"url\">URL</option>\n                          <option value=\"textarea\">Textarea</option>\n                          <option value=\"select\">Select</option>\n                          <option value=\"checkbox\">Checkbox</option>\n                          <option value=\"radio\">Radio</option>\n                          <option value=\"file\">File Upload</option>\n                        </select>\n                      </div>\n\n                      <div className=\"glass-flex glass-items-center\">\n                        <label className=\"glass-flex glass-items-center glass-gap-2 glass-text-sm glass-font-medium glass-text-secondary\">\n                          <input\n                            type=\"checkbox\"\n                            checked={field.required || false}\n                            onChange={(e) =>\n                              updateField(selectedFieldIndex, {\n                                required: e.target.checked,\n                              })\n                            }\n                            className=\"glass-radius glass-border-subtle glass-text-primary glass-focus\"\n                          />\n                          Required Field\n                        </label>\n                      </div>\n                    </div>\n\n                    <div>\n                      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                        Placeholder Text\n                      </label>\n                      <input\n                        type=\"text\"\n                        value={field.placeholder || \"\"}\n                        onChange={(e) =>\n                          updateField(selectedFieldIndex, {\n                            placeholder: e.target.value,\n                          })\n                        }\n                        className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus\"\n                        placeholder=\"Enter placeholder text...\"\n                      />\n                    </div>\n\n                    {/* Options for Select/Radio fields */}\n                    {(field.type === \"select\" || field.type === \"radio\") && (\n                      <div>\n                        <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                          Options\n                        </label>\n                        <div className=\"glass-space-y-2\">\n                          {(field.options || []).map((option, optionIndex) => (\n                            <div\n                              key={optionIndex}\n                              className=\"glass-flex glass-gap-2\"\n                            >\n                              <input\n                                type=\"text\"\n                                value={option.value}\n                                onChange={(e) => {\n                                  const newOptions = [...(field.options || [])];\n                                  newOptions[optionIndex] = {\n                                    ...option,\n                                    value: e.target.value,\n                                  };\n                                  updateField(selectedFieldIndex, {\n                                    options: newOptions,\n                                  });\n                                }}\n                                placeholder=\"Value\"\n                                className=\"glass-flex-1 glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus\"\n                              />\n                              <input\n                                type=\"text\"\n                                value={option.label}\n                                onChange={(e) => {\n                                  const newOptions = [...(field.options || [])];\n                                  newOptions[optionIndex] = {\n                                    ...option,\n                                    label: e.target.value,\n                                  };\n                                  updateField(selectedFieldIndex, {\n                                    options: newOptions,\n                                  });\n                                }}\n                                placeholder=\"Label\"\n                                className=\"glass-flex-1 glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus\"\n                              />\n                              <button\n                                onClick={() => {\n                                  const newOptions = (\n                                    field.options || []\n                                  ).filter((_, i) => i !== optionIndex);\n                                  updateField(selectedFieldIndex, {\n                                    options: newOptions,\n                                  });\n                                }}\n                                className=\"glass-px-3 glass-py-2 glass-text-primary hover:glass-text-primary\"\n                              >\n                                \u2715\n                              </button>\n                            </div>\n                          ))}\n                          <button\n                            onClick={() => {\n                              const newOptions = [\n                                ...(field.options || []),\n                                { value: \"\", label: \"\" },\n                              ];\n                              updateField(selectedFieldIndex, {\n                                options: newOptions,\n                              });\n                            }}\n                            className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-dashed glass-border-subtle glass-radius-lg glass-text-secondary hover:glass-border-subtle glass-transition-colors\"\n                          >\n                            + Add Option\n                          </button>\n                        </div>\n                        {validationErrors[\n                          `field-${selectedFieldIndex}-options`\n                        ] && (\n                          <p className=\"glass-text-primary glass-text-sm glass-mt-1\">\n                            {\n                              validationErrors[\n                                `field-${selectedFieldIndex}-options`\n                              ]\n                            }\n                          </p>\n                        )}\n                      </div>\n                    )}\n\n                    {/* AI Suggestions */}\n                    {enableAIAssistance && field.aiSuggestions && (\n                      <div className=\"glass-surface-subtle glass-radius-lg glass-p-4\">\n                        <h4 className=\"glass-font-medium glass-text-secondary glass-mb-2\">\n                          \uD83E\uDD16 AI Suggestions\n                        </h4>\n\n                        {field.aiSuggestions.fieldType.length > 0 && (\n                          <div className=\"glass-mb-3\">\n                            <h5 className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n                              Recommended Field Types:\n                            </h5>\n                            <div className=\"glass-flex glass-flex-wrap glass-gap-1 glass-mt-1\">\n                              {field.aiSuggestions.fieldType.map((type, i) => (\n                                <button\n                                  key={i}\n                                  onClick={() =>\n                                    updateField(selectedFieldIndex, {\n                                      type: type as FormField[\"type\"],\n                                    })\n                                  }\n                                  className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-primary glass-radius hover:glass-surface-subtle glass-transition-colors\"\n                                >\n                                  {type}\n                                </button>\n                              ))}\n                            </div>\n                          </div>\n                        )}\n\n                        {field.aiSuggestions.validationRules.length > 0 && (\n                          <div className=\"glass-mb-3\">\n                            <h5 className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n                              Validation Suggestions:\n                            </h5>\n                            <ul className=\"glass-text-xs glass-text-secondary glass-mt-1 glass-space-y-1\">\n                              {field.aiSuggestions.validationRules\n                                .slice(0, 2)\n                                .map((rule, i) => (\n                                  <li\n                                    key={i}\n                                    className=\"glass-flex glass-items-center glass-gap-1\"\n                                  >\n                                    <span className=\"glass-w-1 glass-h-1 glass-surface-green glass-radius-full\"></span>\n                                    {rule}\n                                  </li>\n                                ))}\n                            </ul>\n                          </div>\n                        )}\n\n                        {field.aiSuggestions.uxOptimizations.length > 0 && (\n                          <div>\n                            <h5 className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n                              UX Optimizations:\n                            </h5>\n                            <ul className=\"glass-text-xs glass-text-secondary glass-mt-1 glass-space-y-1\">\n                              {field.aiSuggestions.uxOptimizations\n                                .slice(0, 2)\n                                .map((opt, i) => (\n                                  <li\n                                    key={i}\n                                    className=\"glass-flex glass-items-center glass-gap-1\"\n                                  >\n                                    <span className=\"glass-w-1 glass-h-1 glass-surface-primary glass-radius-full\"></span>\n                                    {opt}\n                                  </li>\n                                ))}\n                            </ul>\n                          </div>\n                        )}\n                      </div>\n                    )}\n                  </>\n                );\n              })()}\n            </div>\n          ) : (\n            <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n              <div className=\"glass-text-4xl glass-mb-2\">\u2699\uFE0F</div>\n              <p>Select a field from the left to edit its properties</p>\n            </div>\n          )}\n        </Glass>\n      </div>\n\n      {/* Form Preview */}\n      <Glass className=\"glass-p-6\">\n        <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary glass-mb-4\">\n          Live Preview\n        </h2>\n        <div className=\"glass-surface-subtle glass-radius-lg glass-p-6\">\n          <form className=\"glass-max-w-2xl glass-mx-auto glass-space-y-6\">\n            <div className=\"glass-text-center glass-mb-8\">\n              <h2 className=\"glass-text-2xl glass-font-bold glass-text-secondary\">\n                {schema.title}\n              </h2>\n              {schema.description && (\n                <p className=\"glass-text-secondary glass-mt-2\">\n                  {schema.description}\n                </p>\n              )}\n            </div>\n\n            {schema.fields.map((field, index) => (\n              <div key={field.id}>\n                <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                  {field.label}\n                  {field.required && (\n                    <span className=\"glass-text-primary glass-ml-1\">*</span>\n                  )}\n                </label>\n\n                {field.type === \"textarea\" ? (\n                  <textarea\n                    placeholder={field.placeholder}\n                    required={field.required}\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus glass-touch-target glass-contrast-guard\"\n                    rows={3}\n                  />\n                ) : field.type === \"select\" ? (\n                  <select\n                    required={field.required}\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    <option value=\"\">Choose an option...</option>\n                    {(field.options || []).map((option, i) => (\n                      <option key={i} value={option.value}>\n                        {option.label}\n                      </option>\n                    ))}\n                  </select>\n                ) : field.type === \"checkbox\" ? (\n                  <label className=\"glass-flex glass-items-center glass-gap-2\">\n                    <input\n                      type=\"checkbox\"\n                      required={field.required}\n                      className=\"glass-radius glass-border-subtle glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n                    />\n                    <span className=\"glass-text-sm glass-text-secondary\">\n                      {field.placeholder || \"Check this option\"}\n                    </span>\n                  </label>\n                ) : field.type === \"radio\" ? (\n                  <div className=\"glass-space-y-2\">\n                    {(field.options || []).map((option, i) => (\n                      <label\n                        key={i}\n                        className=\"glass-flex glass-items-center glass-gap-2\"\n                      >\n                        <input\n                          type=\"radio\"\n                          name={field.id}\n                          value={option.value}\n                          required={field.required}\n                          className=\"glass-border-subtle glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n                        />\n                        <span className=\"glass-text-sm glass-text-secondary\">\n                          {option.label}\n                        </span>\n                      </label>\n                    ))}\n                  </div>\n                ) : (\n                  <input\n                    type={field.type}\n                    placeholder={field.placeholder}\n                    required={field.required}\n                    className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus glass-touch-target glass-contrast-guard\"\n                  />\n                )}\n              </div>\n            ))}\n\n            {schema.fields.length > 0 && (\n              <div className=\"glass-pt-6 glass-border-t\">\n                <button\n                  type=\"button\"\n                  className=\"glass-w-full glass-px-6 glass-py-3 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-transition-colors glass-font-medium\"\n                >\n                  Submit Form\n                </button>\n              </div>\n            )}\n          </form>\n        </div>\n      </Glass>\n    </div>\n  );\n};\n\nexport default GlassIntelligentFormBuilder;\n", "\"use client\";\nimport { useState, useEffect, useCallback } from \"react\";\n\nexport interface AccessibilitySettings {\n  // Visual preferences\n  fontSize: \"small\" | \"medium\" | \"large\" | \"x-large\";\n  contrast: \"normal\" | \"high\" | \"higher\";\n  colorBlindMode: \"none\" | \"deuteranopia\" | \"protanopia\" | \"tritanopia\";\n\n  // Motion preferences\n  reduceMotion: boolean;\n  autoplayMedia: boolean;\n\n  // Interaction preferences\n  stickyFocus: boolean;\n  announceChanges: boolean;\n  keyboardNavigation: boolean;\n\n  // Cognitive preferences\n  simplifiedUI: boolean;\n  readingGuide: boolean;\n  focusIndicators: \"subtle\" | \"prominent\" | \"high-contrast\";\n}\n\nexport const defaultAccessibilitySettings: AccessibilitySettings = {\n  fontSize: \"medium\",\n  contrast: \"normal\",\n  colorBlindMode: \"none\",\n  reduceMotion: false,\n  autoplayMedia: true,\n  stickyFocus: false,\n  announceChanges: true,\n  keyboardNavigation: true,\n  simplifiedUI: false,\n  readingGuide: false,\n  focusIndicators: \"subtle\",\n};\n\nexport const useAccessibility = () => {\n  const [settings, setSettings] = useState<AccessibilitySettings>(\n    defaultAccessibilitySettings\n  );\n  const [isLoading, setIsLoading] = useState(true);\n\n  // Load settings from localStorage on mount\n  useEffect(() => {\n    try {\n      const stored = localStorage.getItem(\"aura-accessibility-settings\");\n      if (stored) {\n        const parsed = JSON.parse(stored);\n        setSettings({ ...defaultAccessibilitySettings, ...parsed });\n      }\n    } catch {\n      setSettings(defaultAccessibilitySettings);\n    } finally {\n      setIsLoading(false);\n    }\n  }, []);\n\n  // Detect system preferences\n  useEffect(() => {\n    // Detect prefers-reduced-motion\n    const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    const handleChange = (e: MediaQueryListEvent) => {\n      if (e.matches && !localStorage.getItem(\"aura-accessibility-settings\")) {\n        updateSettings({ reduceMotion: true });\n      }\n    };\n    mediaQuery.addEventListener(\"change\", handleChange);\n\n    // Set initial value if no stored preference\n    if (\n      mediaQuery.matches &&\n      !localStorage.getItem(\"aura-accessibility-settings\")\n    ) {\n      updateSettings({ reduceMotion: true });\n    }\n\n    return () => mediaQuery.removeEventListener(\"change\", handleChange);\n  }, []);\n\n  // Apply CSS custom properties based on settings\n  useEffect(() => {\n    const root = document.documentElement;\n\n    // Font size scaling\n    const fontSizeMap = {\n      small: \"0.875\",\n      medium: \"1\",\n      large: \"1.125\",\n      \"x-large\": \"1.25\",\n    };\n    root.style.setProperty(\"--font-scale\", fontSizeMap[settings.fontSize]);\n\n    // Contrast adjustments\n    const contrastMap = {\n      normal: \"1\",\n      high: \"1.2\",\n      higher: \"1.5\",\n    };\n    root.style.setProperty(\"--contrast-scale\", contrastMap[settings.contrast]);\n\n    // Motion preferences\n    root.style.setProperty(\n      \"--animation-duration\",\n      settings.reduceMotion ? \"0.01s\" : \"0.3s\"\n    );\n    root.style.setProperty(\n      \"--transition-duration\",\n      settings.reduceMotion ? \"0.01s\" : \"0.2s\"\n    );\n\n    // Focus indicators\n    const focusMap = {\n      subtle: \"2px\",\n      prominent: \"3px\",\n      \"high-contrast\": \"4px\",\n    };\n    root.style.setProperty(\"--focus-width\", focusMap[settings.focusIndicators]);\n\n    // Color blind filters\n    if (settings.colorBlindMode !== \"none\") {\n      const filterMap = {\n        deuteranopia: \"sepia(100%) saturate(0%) hue-rotate(90deg)\",\n        protanopia: \"sepia(100%) saturate(0%) hue-rotate(180deg)\",\n        tritanopia: \"sepia(100%) saturate(0%) hue-rotate(270deg)\",\n        none: \"none\",\n      };\n      root.style.setProperty(\n        \"--color-blind-filter\",\n        filterMap[settings.colorBlindMode]\n      );\n    }\n  }, [settings]);\n\n  // Save settings to localStorage\n  const updateSettings = useCallback(\n    (updates: Partial<AccessibilitySettings>) => {\n      const newSettings = { ...settings, ...updates };\n      setSettings(newSettings);\n\n      try {\n        localStorage.setItem(\n          \"aura-accessibility-settings\",\n          JSON.stringify(newSettings)\n        );\n      } catch {\n        // Ignore storage failures; in-memory settings still apply for this session.\n      }\n    },\n    [settings]\n  );\n\n  // Reset to defaults\n  const resetSettings = useCallback(() => {\n    setSettings(defaultAccessibilitySettings);\n    localStorage.removeItem(\"aura-accessibility-settings\");\n  }, []);\n\n  // Announce changes to screen readers\n  const announce = useCallback(\n    (message: string, priority: \"polite\" | \"assertive\" = \"polite\") => {\n      if (!settings.announceChanges) return;\n\n      const announcer = document.getElementById(\"accessibility-announcer\");\n      if (announcer) {\n        announcer.setAttribute(\"aria-live\", priority);\n        announcer.textContent = message;\n\n        // Clear after announcement\n        setTimeout(() => {\n          announcer.textContent = \"\";\n        }, 1000);\n      }\n    },\n    [settings.announceChanges]\n  );\n\n  // Keyboard navigation helper\n  const handleKeyboardNavigation = useCallback(\n    (event: KeyboardEvent, onEnter?: () => void, onEscape?: () => void) => {\n      if (!settings.keyboardNavigation) return;\n\n      switch (event.key) {\n        case \"Enter\":\n        case \" \":\n          event.preventDefault();\n          onEnter?.();\n          break;\n        case \"Escape\":\n          event.preventDefault();\n          onEscape?.();\n          break;\n      }\n    },\n    [settings.keyboardNavigation]\n  );\n\n  // Focus management\n  const focusElement = useCallback(\n    (element: HTMLElement | null) => {\n      if (!element || !settings.stickyFocus) return;\n\n      element.focus({ preventScroll: false });\n\n      if (settings.focusIndicators !== \"subtle\") {\n        element.style.outline = `var(--focus-width) solid var(--primary)`;\n        element.style.outlineOffset = \"2px\";\n      }\n    },\n    [settings.stickyFocus, settings.focusIndicators]\n  );\n\n  // Get CSS classes based on settings\n  const getAccessibilityClasses = useCallback(() => {\n    const classes = [];\n\n    if (settings.reduceMotion) classes.push(\"reduce-motion\");\n    if (settings.simplifiedUI) classes.push(\"simplified-ui\");\n    if (settings.contrast !== \"normal\")\n      classes.push(`contrast-${settings.contrast}`);\n    if (settings.colorBlindMode !== \"none\")\n      classes.push(`color-blind-${settings.colorBlindMode}`);\n    if (settings.readingGuide) classes.push(\"reading-guide\");\n\n    return classes.join(\" \");\n  }, [settings]);\n\n  return {\n    settings,\n    updateSettings,\n    resetSettings,\n    announce,\n    handleKeyboardNavigation,\n    focusElement,\n    getAccessibilityClasses,\n    isLoading,\n  };\n};\n\n// Hook for checking specific accessibility features\nexport const useAccessibilityFeatures = () => {\n  const { settings } = useAccessibility();\n\n  return {\n    prefersReducedMotion:\n      settings.reduceMotion ||\n      window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches,\n    prefersHighContrast:\n      settings.contrast !== \"normal\" ||\n      window.matchMedia(\"(prefers-contrast: high)\").matches,\n    prefersLargeText:\n      settings.fontSize === \"large\" || settings.fontSize === \"x-large\",\n    hasColorBlindMode: settings.colorBlindMode !== \"none\",\n    needsFocusManagement: settings.stickyFocus || settings.keyboardNavigation,\n  };\n};\n", "'use client';\nimport { useState, useEffect, useCallback, useRef } from 'react';\n\nexport interface PerformanceMetrics {\n  // Core Web Vitals\n  cls: number; // Cumulative Layout Shift\n  fcp: number; // First Contentful Paint\n  lcp: number; // Largest Contentful Paint\n  fid: number; // First Input Delay\n  inp: number; // Interaction to Next Paint\n  \n  // Runtime metrics\n  fps: number; // Frames per second\n  memoryUsage: number; // Memory usage in MB\n  domElements: number; // Number of DOM elements\n  \n  // Network metrics\n  networkLatency: number; // Network latency in ms\n  bundleSize: number; // Bundle size in KB\n  \n  // User experience\n  timeToInteractive: number; // Time to Interactive\n  totalBlockingTime: number; // Total Blocking Time\n}\n\nexport interface PerformanceSettings {\n  enableMonitoring: boolean;\n  sampleRate: number; // Percentage of users to monitor (0-100)\n  reportingInterval: number; // How often to report metrics (ms)\n  enableDevtools: boolean; // Show performance overlay in dev mode\n}\n\nconst defaultMetrics: PerformanceMetrics = {\n  cls: 0,\n  fcp: 0,\n  lcp: 0,\n  fid: 0,\n  inp: 0,\n  fps: 60,\n  memoryUsage: 0,\n  domElements: 0,\n  networkLatency: 0,\n  bundleSize: 0,\n  timeToInteractive: 0,\n  totalBlockingTime: 0,\n};\n\nconst defaultSettings: PerformanceSettings = {\n  enableMonitoring: true,\n  sampleRate: 100, // Monitor 100% in development\n  reportingInterval: 5000, // Report every 5 seconds\n  enableDevtools: process.env.NODE_ENV === 'development',\n};\n\nexport const usePerformance = (settings: Partial<PerformanceSettings> = {}) => {\n  const [metrics, setMetrics] = useState<PerformanceMetrics>(defaultMetrics);\n  const [isMonitoring, setIsMonitoring] = useState(false);\n  const [alerts, setAlerts] = useState<string[]>([]);\n  \n  const config = { ...defaultSettings, ...settings };\n  const frameId = useRef<number>();\n  const lastFrameTime = useRef<number>(performance.now());\n  const frameCount = useRef<number>(0);\n\n  // FPS monitoring\n  const measureFPS = useCallback(() => {\n    const now = performance.now();\n    frameCount.current++;\n    \n    if (now - lastFrameTime.current >= 1000) {\n      const fps = Math.round((frameCount.current * 1000) / (now - lastFrameTime.current));\n      setMetrics((prev: any) => ({ ...prev, fps }));\n      \n      frameCount.current = 0;\n      lastFrameTime.current = now;\n      \n      // Alert on low FPS\n      if (fps < 30) {\n        setAlerts((prev: any) => [...prev, `Low FPS detected: ${fps}`]);\n      }\n    }\n    \n    if (isMonitoring) {\n      frameId.current = requestAnimationFrame(measureFPS);\n    }\n  }, [isMonitoring]);\n\n  // Memory usage monitoring\n  const measureMemoryUsage = useCallback(() => {\n    if ('memory' in performance) {\n      const memory = (performance as any).memory;\n      const memoryUsage = Math.round(memory.usedJSHeapSize / 1024 / 1024);\n      setMetrics((prev: any) => ({ ...prev, memoryUsage }));\n      \n      // Alert on high memory usage\n      if (memoryUsage > 100) {\n        setAlerts((prev: any) => [...prev, `High memory usage: ${memoryUsage}MB`]);\n      }\n    }\n  }, []);\n\n  // DOM elements count\n  const measureDOMComplexity = useCallback(() => {\n    const domElements = document.querySelectorAll('*').length;\n    setMetrics((prev: any) => ({ ...prev, domElements }));\n    \n    // Alert on DOM complexity\n    if (domElements > 2000) {\n      setAlerts((prev: any) => [...prev, `High DOM complexity: ${domElements} elements`]);\n    }\n  }, []);\n\n  // Web Vitals monitoring\n  const measureWebVitals = useCallback(() => {\n    // Use Web Vitals library if available\n    if ('webVitals' in window) {\n      return;\n    }\n\n    // Basic CLS measurement\n    let clsValue = 0;\n    const observer = new PerformanceObserver((list) => {\n      for (const entry of list.getEntries()) {\n        if (entry.entryType === 'layout-shift' && !(entry as any).hadRecentInput) {\n          clsValue += (entry as any).value;\n        }\n      }\n      setMetrics((prev: any) => ({ ...prev, cls: clsValue }));\n    });\n\n    try {\n      observer.observe({ type: 'layout-shift', buffered: true });\n    } catch (e) {\n      // Layout shift not supported\n    }\n\n    // LCP measurement\n    const lcpObserver = new PerformanceObserver((list) => {\n      const entries = list.getEntries();\n      const lastEntry = entries[entries.length - 1];\n      setMetrics((prev: any) => ({ ...prev, lcp: lastEntry.startTime }));\n    });\n\n    try {\n      lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });\n    } catch (e) {\n      // LCP not supported\n    }\n\n    return () => {\n      observer.disconnect();\n      lcpObserver.disconnect();\n    };\n  }, []);\n\n  // Network latency estimation\n  const measureNetworkLatency = useCallback(async () => {\n    const start = performance.now();\n    try {\n      await fetch('/favicon.ico', { method: 'HEAD' });\n      const latency = performance.now() - start;\n      setMetrics((prev: any) => ({ ...prev, networkLatency: Math.round(latency) }));\n    } catch (e) {\n      // Network request failed\n    }\n  }, []);\n\n  // Start monitoring\n  const startMonitoring = useCallback(() => {\n    if (Math.random() * 100 > config.sampleRate) return;\n    \n    setIsMonitoring(true);\n    measureFPS();\n    \n    const interval = setInterval(() => {\n      measureMemoryUsage();\n      measureDOMComplexity();\n      measureNetworkLatency();\n    }, config.reportingInterval);\n\n    const cleanup = measureWebVitals();\n\n    return () => {\n      setIsMonitoring(false);\n      clearInterval(interval);\n      if (frameId.current) {\n        cancelAnimationFrame(frameId.current);\n      }\n      cleanup?.();\n    };\n  }, [config.sampleRate, config.reportingInterval, measureFPS, measureMemoryUsage, measureDOMComplexity, measureNetworkLatency, measureWebVitals]);\n\n  // Stop monitoring\n  const stopMonitoring = useCallback(() => {\n    setIsMonitoring(false);\n    if (frameId.current) {\n      cancelAnimationFrame(frameId.current);\n    }\n  }, []);\n\n  // Performance recommendations\n  const getRecommendations = useCallback((): string[] => {\n    const recommendations = [];\n\n    if (metrics.fps < 30) {\n      recommendations.push('Consider reducing animations or using will-change CSS property');\n    }\n\n    if (metrics.memoryUsage > 100) {\n      recommendations.push('High memory usage detected. Check for memory leaks');\n    }\n\n    if (metrics.domElements > 2000) {\n      recommendations.push('High DOM complexity. Consider virtualizing long lists');\n    }\n\n    if (metrics.cls > 0.1) {\n      recommendations.push('Layout shifts detected. Ensure elements have defined dimensions');\n    }\n\n    if (metrics.lcp > 2500) {\n      recommendations.push('Slow loading detected. Optimize images and critical resources');\n    }\n\n    if (metrics.networkLatency > 200) {\n      recommendations.push('High network latency. Consider caching or CDN optimization');\n    }\n\n    return recommendations;\n  }, [metrics]);\n\n  // Performance score calculation\n  const getPerformanceScore = useCallback((): number => {\n    let score = 100;\n\n    // FPS penalty\n    if (metrics.fps < 60) score -= (60 - metrics.fps) * 0.5;\n\n    // Memory penalty\n    if (metrics.memoryUsage > 50) score -= (metrics.memoryUsage - 50) * 0.2;\n\n    // DOM complexity penalty\n    if (metrics.domElements > 1000) score -= (metrics.domElements - 1000) * 0.01;\n\n    // Web Vitals penalties\n    if (metrics.cls > 0.1) score -= metrics.cls * 100;\n    if (metrics.lcp > 2500) score -= (metrics.lcp - 2500) * 0.01;\n\n    return Math.max(0, Math.round(score));\n  }, [metrics]);\n\n  // Clear alerts\n  const clearAlerts = useCallback(() => {\n    setAlerts([]);\n  }, []);\n\n  // Export metrics for reporting\n  const exportMetrics = useCallback(() => {\n    return {\n      ...metrics,\n      timestamp: Date.now(),\n      userAgent: navigator.userAgent,\n      url: window.location.href,\n      performanceScore: getPerformanceScore(),\n      recommendations: getRecommendations(),\n    };\n  }, [metrics, getPerformanceScore, getRecommendations]);\n\n  // Initialize monitoring on mount\n  useEffect(() => {\n    if (!config.enableMonitoring) return;\n\n    const cleanup = startMonitoring();\n    return cleanup;\n  }, [config.enableMonitoring, startMonitoring]);\n\n  // Performance grade\n  const getGrade = useCallback((): 'A' | 'B' | 'C' | 'D' | 'F' => {\n    const score = getPerformanceScore();\n    if (score >= 90) return 'A';\n    if (score >= 80) return 'B';\n    if (score >= 70) return 'C';\n    if (score >= 60) return 'D';\n    return 'F';\n  }, [getPerformanceScore]);\n\n  return {\n    metrics,\n    isMonitoring,\n    alerts,\n    startMonitoring,\n    stopMonitoring,\n    getRecommendations,\n    getPerformanceScore,\n    getGrade,\n    clearAlerts,\n    exportMetrics,\n    config,\n  };\n};\n\n// Hook for performance-aware components\nexport const usePerformanceOptimization = () => {\n  const { metrics, getPerformanceScore } = usePerformance();\n  \n  // Adaptive quality based on performance\n  const getAdaptiveQuality = useCallback(() => {\n    const score = getPerformanceScore();\n    \n    if (score >= 80) return 'high';\n    if (score >= 60) return 'medium';\n    return 'low';\n  }, [getPerformanceScore]);\n\n  // Should reduce animations based on performance\n  const shouldReduceAnimations = useCallback(() => {\n    return metrics.fps < 30 || window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }, [metrics.fps]);\n\n  // Should lazy load based on performance\n  const shouldLazyLoad = useCallback(() => {\n    return metrics.memoryUsage > 50 || metrics.domElements > 1500;\n  }, [metrics.memoryUsage, metrics.domElements]);\n\n  return {\n    adaptiveQuality: getAdaptiveQuality(),\n    shouldReduceAnimations: shouldReduceAnimations(),\n    shouldLazyLoad: shouldLazyLoad(),\n    performanceMetrics: metrics,\n  };\n};", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Activity,\n  AlertCircle,\n  CheckCircle,\n  Clock,\n  Filter,\n  Info,\n  MoreHorizontal,\n  Settings,\n  User,\n  XCircle,\n} from \"@/icons\";\nimport React, { useMemo, useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface ActivityItem {\n  id: string;\n  type:\n    | \"user\"\n    | \"system\"\n    | \"notification\"\n    | \"error\"\n    | \"success\"\n    | \"warning\"\n    | \"info\";\n  title: string;\n  description?: string;\n  timestamp: Date;\n  user?: {\n    name: string;\n    avatar?: string;\n    id: string;\n  };\n  metadata?: Record<string, unknown>;\n  icon?: React.ReactNode;\n  color?: string;\n  category?: string;\n  tags?: string[];\n  actions?: Array<{\n    label: string;\n    onClick: () => void;\n    icon?: React.ReactNode;\n  }>;\n}\n\nexport interface GlassActivityFeedProps {\n  /**\n   * Activity items to display\n   */\n  activities?: ActivityItem[];\n  /**\n   * Feed title\n   */\n  title?: string;\n  /**\n   * Feed subtitle\n   */\n  subtitle?: string;\n  /**\n   * Maximum number of activities to show\n   */\n  maxItems?: number;\n  /**\n   * Show filter options\n   */\n  showFilters?: boolean;\n  /**\n   * Show activity categories\n   */\n  showCategories?: boolean;\n  /**\n   * Show timestamps\n   */\n  showTimestamps?: boolean;\n  /**\n   * Show user avatars\n   */\n  showAvatars?: boolean;\n  /**\n   * Compact mode\n   */\n  compact?: boolean;\n  /**\n   * Bound the feed inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained feeds.\n   */\n  maxHeight?: number | string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Filter activities by type\n   */\n  filterBy?: string[];\n  /**\n   * Group activities by date\n   */\n  groupByDate?: boolean;\n  /**\n   * Show load more button\n   */\n  showLoadMore?: boolean;\n  /**\n   * Load more handler\n   */\n  onLoadMore?: () => void;\n  /**\n   * Activity click handler\n   */\n  onActivityClick?: (activity: ActivityItem) => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /**\n   * Custom style\n   */\n  style?: React.CSSProperties;\n}\n\n/**\n * GlassActivityFeed component\n * A glassmorphism activity timeline with filtering and grouping\n */\nexport const GlassActivityFeed: React.FC<GlassActivityFeedProps> = ({\n  activities = [],\n  title = \"Activity Feed\",\n  subtitle,\n  maxItems,\n  showFilters = true,\n  showCategories = true,\n  showTimestamps = true,\n  showAvatars = true,\n  compact = false,\n  contained = false,\n  maxHeight,\n  loading = false,\n  emptyMessage = \"No recent activity\",\n  filterBy = [],\n  groupByDate = true,\n  showLoadMore = false,\n  onLoadMore,\n  onActivityClick,\n  className,\n  style,\n  ...props\n}) => {\n  const isCompactMode = compact || contained;\n  const effectiveMaxItems = maxItems ?? (isCompactMode ? 2 : 10);\n  const [selectedFilter, setSelectedFilter] = useState<string>(\"all\");\n  const [visibleCount, setVisibleCount] = useState(effectiveMaxItems);\n  const boundedHeight = maxHeight ?? (isCompactMode ? 220 : undefined);\n  const effectiveShowFilters = isCompactMode ? false : showFilters;\n  const effectiveGroupByDate = isCompactMode ? false : groupByDate;\n  const effectiveShowCategories = isCompactMode ? false : showCategories;\n  const effectiveShowAvatars = isCompactMode ? false : showAvatars;\n  const effectiveShowLoadMore = isCompactMode ? false : showLoadMore;\n\n  // Get activity type icon and color\n  const getActivityTypeConfig = (type: ActivityItem[\"type\"]) => {\n    switch (type) {\n      case \"user\":\n        return {\n          icon: User,\n          color: \"text-blue-400\",\n          bgColor: \"bg-blue-500/20\",\n          borderColor: \"border-blue-500/30\",\n        };\n      case \"system\":\n        return {\n          icon: Settings,\n          color: \"text-purple-400\",\n          bgColor: \"bg-purple-500/20\",\n          borderColor: \"border-purple-500/30\",\n        };\n      case \"notification\":\n        return {\n          icon: Info,\n          color: \"text-cyan-400\",\n          bgColor: \"bg-cyan-500/20\",\n          borderColor: \"border-cyan-500/30\",\n        };\n      case \"error\":\n        return {\n          icon: XCircle,\n          color: \"text-red-400\",\n          bgColor: \"bg-red-500/20\",\n          borderColor: \"border-red-500/30\",\n        };\n      case \"success\":\n        return {\n          icon: CheckCircle,\n          color: \"text-green-400\",\n          bgColor: \"bg-green-500/20\",\n          borderColor: \"border-green-500/30\",\n        };\n      case \"warning\":\n        return {\n          icon: AlertCircle,\n          color: \"text-yellow-400\",\n          bgColor: \"bg-yellow-500/20\",\n          borderColor: \"border-yellow-500/30\",\n        };\n      default:\n        return {\n          icon: Activity,\n          color: \"glass-text-secondary\",\n          bgColor: \"bg-gray-500/20\",\n          borderColor: \"border-gray-500/30\",\n        };\n    }\n  };\n\n  // Format timestamp\n  const formatTimestamp = (date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    if (days === 1) return \"Yesterday\";\n    if (days < 7) return `${days}d ago`;\n    return date.toLocaleDateString();\n  };\n\n  // Group activities by date\n  const groupedActivities = useMemo(() => {\n    if (!effectiveGroupByDate) return { \"All Activities\": activities };\n\n    const groups: Record<string, ActivityItem[]> = {};\n\n    activities.forEach((activity) => {\n      const date = activity.timestamp.toDateString();\n      if (!groups[date]) {\n        groups[date] = [];\n      }\n      groups[date].push(activity);\n    });\n\n    return groups;\n  }, [activities, effectiveGroupByDate]);\n\n  // Filter activities\n  const filteredActivities = useMemo(() => {\n    let filtered = activities;\n\n    if (selectedFilter !== \"all\") {\n      filtered = filtered.filter(\n        (activity) => activity.type === selectedFilter\n      );\n    }\n\n    if (filterBy && filterBy.length > 0) {\n      filtered = filtered.filter((activity) =>\n        filterBy.includes(activity.type)\n      );\n    }\n\n    return filtered.slice(0, visibleCount);\n  }, [activities, selectedFilter, filterBy, visibleCount]);\n\n  // Get available filter options\n  const filterOptions = useMemo(() => {\n    const types = new Set(activities.map((activity) => activity.type));\n    return [\"all\", ...Array.from(types)];\n  }, [activities]);\n\n  // Handle load more\n  const handleLoadMore = () => {\n    setVisibleCount((prev) => prev + effectiveMaxItems);\n    onLoadMore?.();\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n        <div className=\"glass-animate-pulse glass-auto-gap glass-auto-gap-lg\">\n          <div className=\"glass-h-6 glass-surface-subtle/20 glass-radius-md glass-w-48\"></div>\n          <div className=\"glass-auto-gap glass-auto-gap-md\">\n            {Array.from({ length: 5 }).map((_, i) => (\n              <div key={i} className=\"glass-flex glass-gap-3\">\n                <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-full glass-flex-shrink-0\"></div>\n                <div className=\"glass-flex-1 glass-auto-gap glass-auto-gap-sm\">\n                  <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-3-4\"></div>\n                  <div className=\"glass-h-3 glass-surface-subtle/20 glass-radius-md glass-w-1-2\"></div>\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        className={cn(\"overflow-hidden\", className)}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n                overflow: isCompactMode ? \"hidden\" : \"auto\",\n              }\n            : null),\n          ...(style ?? {}),\n        }}\n        {...props}\n      >\n        <CardHeader\n          className={cn(isCompactMode ? \"glass-p-3 glass-pb-2\" : \"glass-pb-4\")}\n        >\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div>\n              <CardTitle\n                className={cn(\n                  \"glass-text-primary glass-font-semibold\",\n                  isCompactMode ? \"glass-text-lg\" : \"glass-text-xl\"\n                )}\n              >\n                <ContrastGuard>{title}</ContrastGuard>\n              </CardTitle>\n              {!isCompactMode && subtitle && (\n                <ContrastGuard>\n                  <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mt-1\">\n                    {subtitle}\n                  </p>\n                </ContrastGuard>\n              )}\n            </div>\n\n            {/* Filters */}\n            {effectiveShowFilters && filterOptions.length > 1 && (\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <Filter className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-60\" />\n                <select\n                  value={selectedFilter}\n                  onChange={(e) => setSelectedFilter(e.target.value)}\n                  className=\"glass-bg-fill glass-ring-1 glass-ring-white-opacity-10 glass-radius-md glass-px-3 glass-py-1 glass-text-sm glass-text-primary glass-focus-outline-none glass-focus-ring-white-opacity-30\"\n                  aria-label=\"Filter activity feed\"\n                >\n                  <option value=\"all\">All Types</option>\n                  {filterOptions.slice(1).map((type) => (\n                    <option key={type} value={type}>\n                      {type.charAt(0).toUpperCase() + type.slice(1)}\n                    </option>\n                  ))}\n                </select>\n              </div>\n            )}\n          </div>\n        </CardHeader>\n\n        <CardContent\n          className={cn(\"glass-pt-0\", isCompactMode && \"glass-px-3 glass-pb-3\")}\n        >\n          {filteredActivities.length === 0 ? (\n            <div className=\"glass-flex glass-flex-col glass-items-center glass-justify-center glass-py-12\">\n              <Activity className=\"glass-w-12 glass-h-12 glass-text-primary-glass-opacity-40 glass-mb-4\" />\n              <p className=\"glass-text-primary-glass-opacity-60 glass-text-center\">\n                {emptyMessage}\n              </p>\n            </div>\n          ) : (\n            <div\n              className={cn(\n                \"glass-auto-gap\",\n                isCompactMode ? \"glass-auto-gap-sm\" : \"glass-auto-gap-lg\"\n              )}\n            >\n              {effectiveGroupByDate ? (\n                Object.entries(groupedActivities).map(([date, items]) => (\n                  <div key={date}>\n                    {groupByDate && items.length > 0 && (\n                      <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-3\">\n                        <div className=\"glass-h-px glass-surface-subtle/20 glass-flex-1\"></div>\n                        <ContrastGuard>\n                          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-font-medium glass-px-2 glass-py-1 glass-surface-subtle/10 glass-radius-md\">\n                            {new Date(date).toLocaleDateString(undefined, {\n                              weekday: \"long\",\n                              year: \"numeric\",\n                              month: \"long\",\n                              day: \"numeric\",\n                            })}\n                          </span>\n                        </ContrastGuard>\n                        <div className=\"glass-h-px glass-surface-subtle/20 glass-flex-1\"></div>\n                      </div>\n                    )}\n\n                    <div className=\"glass-auto-gap glass-auto-gap-md\">\n                      {items\n                        .filter((activity) => {\n                          if (selectedFilter === \"all\") return true;\n                          return activity.type === selectedFilter;\n                        })\n                        .slice(0, visibleCount)\n                        .map((activity, index) => {\n                          const config = getActivityTypeConfig(activity.type);\n                          const IconComponent = config.icon;\n\n                          return (\n                            <div\n                              key={activity.id}\n                              className={cn(\n                                `flex glass-gap-3 glass-p-3 glass-radius-lg border transition-all duration-[${ANIMATION.DURATION.fast}ms] animate-slide-in-up`,\n                                \"hover:bg-white/5 cursor-pointer glass-foundation-complete glass-backdrop-blur-md bg-transparent border-white/40 shadow-2xl\",\n                                config.bgColor,\n                                config.borderColor,\n                                isCompactMode && \"glass-p-2\"\n                              )}\n                              style={{\n                                animationDelay: `${Math.min(index, 15) * 50}ms`,\n                                animationFillMode: \"both\",\n                              }}\n                              onClick={(e) => onActivityClick?.(activity)}\n                            >\n                              {/* Activity Icon */}\n                              <div\n                                className={cn(\n                                  \"flex-shrink-0 w-8 h-8 glass-radius-full flex items-center justify-center\",\n                                  config.bgColor,\n                                  isCompactMode && \"w-6 h-6\"\n                                )}\n                              >\n                                {activity.icon ? (\n                                  <span className=\"glass-w-4 glass-h-4\">\n                                    {activity.icon}\n                                  </span>\n                                ) : (\n                                  <IconComponent\n                                    className={cn(\n                                      \"w-4 h-4\",\n                                      config.color,\n                                      isCompactMode && \"w-3 h-3\"\n                                    )}\n                                  />\n                                )}\n                              </div>\n\n                              {/* Content */}\n                              <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                                <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-2 glass-min-glass-w-0\">\n                                  <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                                    <p\n                                      className={cn(\n                                        \"glass-text-primary font-medium truncate\",\n                                        isCompactMode\n                                          ? \"glass-text-sm\"\n                                          : \"glass-text-base\"\n                                      )}\n                                      title={activity.title}\n                                    >\n                                      <ContrastGuard>\n                                        {activity.title}\n                                      </ContrastGuard>\n                                    </p>\n                                    {activity.description && (\n                                      <p\n                                        className={cn(\n                                          \"glass-text-primary/70 glass-mt-1\",\n                                          isCompactMode\n                                            ? \"glass-text-xs\"\n                                            : \"glass-text-sm\",\n                                          isCompactMode\n                                            ? \"line-clamp-1\"\n                                            : \"line-clamp-2\"\n                                        )}\n                                        title={activity.description}\n                                      >\n                                        <ContrastGuard>\n                                          {activity.description}\n                                        </ContrastGuard>\n                                      </p>\n                                    )}\n                                  </div>\n\n                                  {/* Actions */}\n                                  {activity.actions &&\n                                    activity.actions.length > 0 && (\n                                      <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                        {activity.actions.map(\n                                          (action, actionIndex) => (\n                                            <GlassButton\n                                              key={actionIndex}\n                                              variant=\"ghost\"\n                                              size=\"sm\"\n                                              onClick={(e) => {\n                                                e.stopPropagation();\n                                                action.onClick();\n                                              }}\n                                              className=\"glass-p-1\"\n                                              aria-label={\n                                                action.label ||\n                                                `Action ${actionIndex + 1} for ${activity.title}`\n                                              }\n                                            >\n                                              {action.icon || (\n                                                <MoreHorizontal className=\"glass-w-3 glass-h-3\" />\n                                              )}\n                                            </GlassButton>\n                                          )\n                                        )}\n                                      </div>\n                                    )}\n                                </div>\n\n                                {/* Metadata */}\n                                <div className=\"glass-flex glass-items-center glass-gap-3 glass-mt-2\">\n                                  {activity.user && effectiveShowAvatars && (\n                                    <div className=\"glass-flex glass-items-center glass-gap-2\">\n                                      {activity.user.avatar ? (\n                                        <img\n                                          src={activity.user.avatar}\n                                          alt={activity.user.name}\n                                          className=\"glass-w-5 glass-h-5 glass-radius-full\"\n                                        />\n                                      ) : (\n                                        <div className=\"glass-w-5 glass-h-5 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                                          <span className=\"glass-text-xs glass-text-primary-glass-opacity-80 glass-font-medium\">\n                                            {activity.user.name\n                                              .charAt(0)\n                                              .toUpperCase()}\n                                          </span>\n                                        </div>\n                                      )}\n                                      <ContrastGuard>\n                                        <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                                          {activity.user.name}\n                                        </span>\n                                      </ContrastGuard>\n                                    </div>\n                                  )}\n\n                                  {showTimestamps && (\n                                    <span className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-flex glass-items-center glass-gap-1\">\n                                      <Clock className=\"glass-w-3 glass-h-3\" />\n                                      <ContrastGuard>\n                                        {formatTimestamp(activity.timestamp)}\n                                      </ContrastGuard>\n                                    </span>\n                                  )}\n\n                                  {activity.category &&\n                                    effectiveShowCategories && (\n                                      <GlassBadge\n                                        variant=\"secondary\"\n                                        size=\"sm\"\n                                        className=\"glass-truncate glass-max-w-100px\"\n                                        title={activity.category}\n                                      >\n                                        {activity.category.length > 12\n                                          ? `${activity.category.slice(0, 12)}...`\n                                          : activity.category}\n                                      </GlassBadge>\n                                    )}\n\n                                  {activity.tags &&\n                                    activity.tags.length > 0 && (\n                                      <div className=\"glass-flex glass-flex-wrap glass-gap-1 glass-items-center\">\n                                        {activity.tags\n                                          .slice(0, isCompactMode ? 1 : 2)\n                                          .map((tag, tagIndex) => (\n                                            <GlassBadge\n                                              key={tagIndex}\n                                              variant=\"outline\"\n                                              size=\"sm\"\n                                              className=\"glass-truncate glass-max-w-80px\"\n                                              title={tag}\n                                            >\n                                              {tag.length > 8\n                                                ? `${tag.slice(0, 8)}...`\n                                                : tag}\n                                            </GlassBadge>\n                                          ))}\n                                        {activity.tags.length >\n                                          (isCompactMode ? 1 : 2) && (\n                                          <GlassBadge\n                                            variant=\"secondary\"\n                                            size=\"sm\"\n                                            className=\"glass-opacity-60\"\n                                          >\n                                            +\n                                            {activity.tags.length -\n                                              (isCompactMode ? 1 : 2)}\n                                          </GlassBadge>\n                                        )}\n                                      </div>\n                                    )}\n                                </div>\n                              </div>\n                            </div>\n                          );\n                        })}\n                    </div>\n                  </div>\n                ))\n              ) : (\n                // Ungrouped view\n                <div className=\"glass-auto-gap glass-auto-gap-md\">\n                  {filteredActivities.map((activity, index) => {\n                    const config = getActivityTypeConfig(activity.type);\n                    const IconComponent = config.icon;\n\n                    return (\n                      <Motion\n                        key={activity.id}\n                        preset=\"slideUp\"\n                        delay={index * 50}\n                        className={cn(\n                          `flex glass-gap-3 glass-p-3 glass-radius-lg border transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                          \"hover:bg-white/5 cursor-pointer\",\n                          config.bgColor,\n                          config.borderColor,\n                          isCompactMode && \"glass-p-2\"\n                        )}\n                        onClick={(e) => onActivityClick?.(activity)}\n                      >\n                        {/* Activity Icon */}\n                        <div\n                          className={cn(\n                            \"flex-shrink-0 w-8 h-8 glass-radius-full flex items-center justify-center\",\n                            config.bgColor,\n                            isCompactMode && \"w-6 h-6\"\n                          )}\n                        >\n                          {activity.icon ? (\n                            <span className=\"glass-w-4 glass-h-4\">\n                              {activity.icon}\n                            </span>\n                          ) : (\n                            <IconComponent\n                              className={cn(\n                                \"w-4 h-4\",\n                                config.color,\n                                isCompactMode && \"w-3 h-3\"\n                              )}\n                            />\n                          )}\n                        </div>\n\n                        {/* Content */}\n                        <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                          <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-2 glass-min-glass-w-0\">\n                            <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                              <p\n                                className={cn(\n                                  \"glass-text-primary font-medium truncate\",\n                                  isCompactMode\n                                    ? \"glass-text-sm\"\n                                    : \"glass-text-base\"\n                                )}\n                                title={activity.title}\n                              >\n                                {activity.title}\n                              </p>\n                              {activity.description && (\n                                <p\n                                  className={cn(\n                                    \"glass-text-primary/70 glass-mt-1\",\n                                    isCompactMode\n                                      ? \"glass-text-xs line-clamp-1\"\n                                      : \"glass-text-sm line-clamp-2\"\n                                  )}\n                                  title={activity.description}\n                                >\n                                  {activity.description}\n                                </p>\n                              )}\n                            </div>\n                          </div>\n\n                          {/* Metadata */}\n                          <div className=\"glass-flex glass-items-center glass-gap-3 glass-mt-2\">\n                            {activity.user && effectiveShowAvatars && (\n                              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                                {activity.user.avatar ? (\n                                  <img\n                                    src={activity.user.avatar}\n                                    alt={activity.user.name}\n                                    className=\"glass-w-5 glass-h-5 glass-radius-full\"\n                                  />\n                                ) : (\n                                  <div className=\"glass-w-5 glass-h-5 glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center\">\n                                    <span className=\"glass-text-xs glass-text-primary-glass-opacity-80 glass-font-medium\">\n                                      {activity.user.name\n                                        .charAt(0)\n                                        .toUpperCase()}\n                                    </span>\n                                  </div>\n                                )}\n                                <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                                  {activity.user.name}\n                                </span>\n                              </div>\n                            )}\n\n                            {showTimestamps && (\n                              <span className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-flex glass-items-center glass-gap-1\">\n                                <Clock className=\"glass-w-3 glass-h-3\" />\n                                {formatTimestamp(activity.timestamp)}\n                              </span>\n                            )}\n                          </div>\n                        </div>\n                      </Motion>\n                    );\n                  })}\n                </div>\n              )}\n\n              {/* Load More */}\n              {effectiveShowLoadMore && visibleCount < activities.length && (\n                <div className=\"glass-flex glass-justify-center glass-mt-6\">\n                  <GlassButton variant=\"outline\" onClick={handleLoadMore}>\n                    Load More Activities\n                  </GlassButton>\n                </div>\n              )}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\nexport default GlassActivityFeed;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  BarChart3,\n  Download,\n  LineChart,\n  Maximize2,\n  Minimize2,\n  MoreVertical,\n  PieChart,\n  RefreshCw,\n  Settings,\n  TrendingUp,\n} from \"@/icons\";\nimport React, { useState } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { GlassBadge } from \"../data-display\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface ChartWidgetAction {\n  label: string;\n  icon?: React.ReactNode;\n  onClick: () => void;\n  disabled?: boolean;\n}\n\nexport interface GlassChartWidgetProps {\n  /**\n   * Widget title\n   */\n  title?: string;\n  /**\n   * Widget subtitle/description\n   */\n  subtitle?: string;\n  /**\n   * Chart content to display\n   */\n  children: React.ReactNode;\n  /**\n   * Widget size\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Render a dense widget for card previews, dashboards, and sidebars.\n   */\n  compact?: boolean;\n  /**\n   * Bounded rendering mode for constrained surfaces.\n   */\n  contained?: boolean;\n  /**\n   * Explicit content height.\n   */\n  height?: number | string;\n  /**\n   * Maximum widget height in compact/contained layouts.\n   */\n  maxHeight?: number | string;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Error state\n   */\n  error?: string;\n  /**\n   * Empty state message\n   */\n  emptyMessage?: string;\n  /**\n   * Show header\n   */\n  showHeader?: boolean;\n  /**\n   * Show actions menu\n   */\n  showActions?: boolean;\n  /**\n   * Custom actions\n   */\n  actions?: ChartWidgetAction[];\n  /**\n   * Chart type indicator\n   */\n  chartType?: \"line\" | \"bar\" | \"area\" | \"pie\" | \"donut\" | \"custom\";\n  /**\n   * Show chart type indicator\n   */\n  showChartType?: boolean;\n  /**\n   * Time range indicator\n   */\n  timeRange?: string;\n  /**\n   * Last updated timestamp\n   */\n  lastUpdated?: Date;\n  /**\n   * Show refresh button\n   */\n  showRefresh?: boolean;\n  /**\n   * Show download button\n   */\n  showDownload?: boolean;\n  /**\n   * Show fullscreen toggle\n   */\n  showFullscreen?: boolean;\n  /**\n   * Fullscreen state\n   */\n  fullscreen?: boolean;\n  /**\n   * Fullscreen change handler\n   */\n  onFullscreenChange?: (fullscreen: boolean) => void;\n  /**\n   * Refresh handler\n   */\n  onRefresh?: () => void;\n  /**\n   * Download handler\n   */\n  onDownload?: () => void;\n  /**\n   * Custom header content\n   */\n  headerContent?: React.ReactNode;\n  /**\n   * Custom footer content\n   */\n  footerContent?: React.ReactNode;\n  /**\n   * Custom className\n   */\n  className?: string;\n  style?: React.CSSProperties;\n}\n\n/**\n * GlassChartWidget component\n * A glassmorphism chart container widget with header, actions, and fullscreen support\n */\nexport const GlassChartWidget: React.FC<GlassChartWidgetProps> = ({\n  title = \"Chart Widget\",\n  subtitle,\n  children,\n  size = \"md\",\n  compact = false,\n  contained = false,\n  height,\n  maxHeight,\n  loading = false,\n  error,\n  emptyMessage,\n  showHeader = true,\n  showActions: showActionsProp,\n  actions = [],\n  chartType,\n  showChartType = true,\n  timeRange,\n  lastUpdated,\n  showRefresh: showRefreshProp,\n  showDownload: showDownloadProp,\n  showFullscreen: showFullscreenProp,\n  fullscreen = false,\n  onFullscreenChange,\n  onRefresh,\n  onDownload,\n  headerContent,\n  footerContent,\n  className,\n  style,\n  ...props\n}) => {\n  const [isFullscreen, setIsFullscreen] = useState(fullscreen);\n  const [showActionMenu, setShowActionMenu] = useState(false);\n  const isCompact = compact || contained;\n  const showActions = showActionsProp ?? !isCompact;\n  const showRefresh = showRefreshProp ?? !isCompact;\n  const showDownload = showDownloadProp ?? !isCompact;\n  const showFullscreen = showFullscreenProp ?? !isCompact;\n  const toCssSize = (value?: number | string): string | undefined =>\n    typeof value === \"number\" ? `${value}px` : value;\n  const resolvedContentHeight =\n    toCssSize(height) ?? (isCompact ? \"140px\" : undefined);\n  const resolvedMaxHeight =\n    toCssSize(maxHeight) ?? (isCompact ? \"220px\" : undefined);\n\n  // Size configurations\n  const sizeConfigs = {\n    sm: {\n      cardClass: \"glass-p-4\",\n      titleClass: \"glass-text-lg font-semibold\",\n      contentClass: \"glass-min-h-200px\",\n    },\n    md: {\n      cardClass: \"glass-p-6\",\n      titleClass: \"glass-text-xl font-semibold\",\n      contentClass: \"glass-min-h-300px\",\n    },\n    lg: {\n      cardClass: \"p-8\",\n      titleClass: \"glass-text-2xl font-semibold\",\n      contentClass: \"glass-min-h-400px\",\n    },\n    xl: {\n      cardClass: \"glass-p-10\",\n      titleClass: \"text-3xl font-semibold\",\n      contentClass: \"min-glass-h-500px\",\n    },\n  };\n\n  const config = sizeConfigs[size];\n  const cardPaddingClass = isCompact ? \"glass-p-3\" : config.cardClass;\n  const titleClass = isCompact\n    ? \"glass-text-base font-semibold\"\n    : config.titleClass;\n\n  // Get chart type icon\n  const getChartTypeIcon = () => {\n    switch (chartType) {\n      case \"line\":\n        return <LineChart className=\"glass-w-5 glass-h-5\" />;\n      case \"bar\":\n        return <BarChart3 className=\"glass-w-5 glass-h-5\" />;\n      case \"area\":\n        return <TrendingUp className=\"glass-w-5 glass-h-5\" />;\n      case \"pie\":\n        return <PieChart className=\"glass-w-5 glass-h-5\" />;\n      case \"donut\":\n        return <PieChart className=\"glass-w-5 glass-h-5\" />;\n      default:\n        return <BarChart3 className=\"glass-w-5 glass-h-5\" />;\n    }\n  };\n\n  // Handle fullscreen toggle\n  const handleFullscreenToggle = () => {\n    const newFullscreen = !isFullscreen;\n    setIsFullscreen(newFullscreen);\n    onFullscreenChange?.(newFullscreen);\n  };\n\n  // Handle refresh\n  const handleRefresh = () => {\n    onRefresh?.();\n  };\n\n  // Handle download\n  const handleDownload = () => {\n    onDownload?.();\n  };\n\n  // Format last updated time\n  const formatLastUpdated = (date: Date) => {\n    const now = new Date();\n    const diff = now.getTime() - date.getTime();\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    return `${days}d ago`;\n  };\n\n  return (\n    <Motion data-glass-component preset=\"fadeIn\" className=\"glass-w-full\">\n      <GlassCard\n        variant=\"elevated\"\n        elevation={\"level3\"}\n        className={cn(\n          cardPaddingClass,\n          isFullscreen && \"fixed inset-4 z-50\",\n          className\n        )}\n        style={{\n          maxHeight: resolvedMaxHeight,\n          overflow: isCompact ? \"hidden\" : undefined,\n          ...style,\n        }}\n        data-compact={isCompact || undefined}\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <CardHeader className=\"glass-pb-4\">\n            <div className=\"glass-flex glass-items-start glass-justify-between\">\n              <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                <div className=\"glass-flex glass-items-center glass-gap-3 glass-mb-2\">\n                  <CardTitle\n                    className={cn(\n                      titleClass,\n                      \"glass-text-primary flex items-center glass-gap-2\"\n                    )}\n                  >\n                    {showChartType && chartType && (\n                      <span className=\"glass-text-primary-glass-opacity-60\">\n                        {getChartTypeIcon()}\n                      </span>\n                    )}\n                    <ContrastGuard>{title}</ContrastGuard>\n                  </CardTitle>\n\n                  {/* Time range badge */}\n                  {timeRange && (\n                    <GlassBadge variant=\"secondary\" size=\"sm\">\n                      {timeRange}\n                    </GlassBadge>\n                  )}\n                </div>\n\n                {subtitle && (\n                  <ContrastGuard>\n                    <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mb-2\">\n                      {subtitle}\n                    </p>\n                  </ContrastGuard>\n                )}\n\n                {/* Last updated */}\n                {lastUpdated && (\n                  <ContrastGuard>\n                    <p className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                      Last updated: {formatLastUpdated(lastUpdated)}\n                    </p>\n                  </ContrastGuard>\n                )}\n              </div>\n\n              {/* Header Actions */}\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                {headerContent}\n\n                {/* Quick Actions */}\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  {showRefresh && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={handleRefresh}\n                      disabled={loading}\n                      className=\"glass-p-2\"\n                      aria-label=\"Refresh chart data\"\n                    >\n                      <RefreshCw\n                        className={cn(\"w-4 h-4\", loading && \"animate-spin\")}\n                      />\n                    </GlassButton>\n                  )}\n\n                  {showDownload && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={handleDownload}\n                      className=\"glass-p-2\"\n                      aria-label=\"Download chart data\"\n                    >\n                      <Download className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n                  )}\n\n                  {showFullscreen && (\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={handleFullscreenToggle}\n                      className=\"glass-p-2\"\n                      aria-label={\n                        isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"\n                      }\n                    >\n                      {isFullscreen ? (\n                        <Minimize2 className=\"glass-w-4 glass-h-4\" />\n                      ) : (\n                        <Maximize2 className=\"glass-w-4 glass-h-4\" />\n                      )}\n                    </GlassButton>\n                  )}\n                </div>\n\n                {/* Actions Menu */}\n                {showActions && actions.length > 0 && (\n                  <div className=\"glass-relative\">\n                    <GlassButton\n                      variant=\"ghost\"\n                      size=\"sm\"\n                      onClick={(e) => setShowActionMenu(!showActionMenu)}\n                      className=\"glass-p-2\"\n                      aria-label=\"Chart actions menu\"\n                    >\n                      <MoreVertical className=\"glass-w-4 glass-h-4\" />\n                    </GlassButton>\n\n                    {showActionMenu && (\n                      <Motion\n                        preset=\"fadeIn\"\n                        className=\"glass-absolute glass-right-0 glass-top-full glass-mt-2 glass-z-10\"\n                      >\n                        <div className=\"glass-surface-dark/80 glass-backdrop-blur-md glass-border glass-border-white/20 glass-radius-lg glass-shadow-xl glass-min-glass-w-48 glass-contrast-guard\">\n                          {actions.map((action, index) => (\n                            <button\n                              key={index}\n                              onClick={(e) => {\n                                action.onClick();\n                                setShowActionMenu(false);\n                              }}\n                              disabled={action.disabled}\n                              className={cn(\n                                \"w-full text-left glass-px-4 glass-py-2 glass-text-sm glass-text-primary/80 hover:bg-white/10\",\n                                \"first:rounded-t-lg last:rounded-b-lg\",\n                                \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n                                \"flex items-center glass-gap-2\"\n                              )}\n                            >\n                              {action.icon && (\n                                <span className=\"glass-w-4 glass-h-4\">\n                                  {action.icon}\n                                </span>\n                              )}\n                              <ContrastGuard>{action.label}</ContrastGuard>\n                            </button>\n                          ))}\n\n                          {/* Default actions */}\n                          <div className=\"glass-border-t glass-border-white/10\">\n                            <button\n                              onClick={(e) => {\n                                onRefresh?.();\n                                setShowActionMenu(false);\n                              }}\n                              className=\"glass-w-full glass-text-left glass-px-4 glass-py-2 glass-text-sm glass-text-primary-glass-opacity-80 hover:glass-surface-subtle/10 glass-flex glass-items-center glass-gap-2 glass-focus glass-touch-target glass-contrast-guard\"\n                            >\n                              <RefreshCw className=\"glass-w-4 glass-h-4\" />\n                              <ContrastGuard>Refresh Data</ContrastGuard>\n                            </button>\n                            <button\n                              onClick={(e) => {\n                                onDownload?.();\n                                setShowActionMenu(false);\n                              }}\n                              className=\"glass-w-full glass-text-left glass-px-4 glass-py-2 glass-text-sm glass-text-primary-glass-opacity-80 hover:glass-surface-subtle/10 glass-flex glass-items-center glass-gap-2 glass-radius-b-lg glass-focus glass-touch-target glass-contrast-guard\"\n                            >\n                              <Download className=\"glass-w-4 glass-h-4\" />\n                              <ContrastGuard>Export Data</ContrastGuard>\n                            </button>\n                          </div>\n                        </div>\n                      </Motion>\n                    )}\n                  </div>\n                )}\n              </div>\n            </div>\n          </CardHeader>\n        )}\n\n        {/* Content */}\n        <CardContent className={cn(\"glass-pt-0\", isCompact && \"glass-px-0\")}>\n          {error ? (\n            <div\n              className={cn(\n                \"flex flex-col items-center justify-center\",\n                config.contentClass\n              )}\n            >\n              <div className=\"glass-text-primary glass-mb-2\">\n                <Settings className=\"glass-w-8 glass-h-8\" />\n              </div>\n              <ContrastGuard>\n                <p className=\"glass-text-primary-glass-opacity-80 glass-text-center glass-mb-4\">\n                  {error}\n                </p>\n              </ContrastGuard>\n              <GlassButton variant=\"outline\" onClick={handleRefresh}>\n                Try Again\n              </GlassButton>\n            </div>\n          ) : !children && emptyMessage ? (\n            <div\n              className={cn(\n                \"flex flex-col items-center justify-center\",\n                config.contentClass\n              )}\n            >\n              <div className=\"glass-text-primary-glass-opacity-40 glass-mb-2\">\n                <BarChart3 className=\"glass-w-8 glass-h-8\" />\n              </div>\n              <ContrastGuard>\n                <p className=\"glass-text-primary-glass-opacity-60 glass-text-center\">\n                  {emptyMessage}\n                </p>\n              </ContrastGuard>\n            </div>\n          ) : (\n            <div\n              className={cn(!isCompact && config.contentClass)}\n              style={{\n                height: resolvedContentHeight,\n                minHeight: isCompact ? 0 : undefined,\n                overflow: isCompact ? \"hidden\" : undefined,\n              }}\n            >\n              {loading ? (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full\">\n                  <div className=\"glass-animate-spin glass-radius-full glass-h-8 glass-w-8 glass-border-2 glass-border-white/20 glass-border-t-white/60\"></div>\n                </div>\n              ) : (\n                children\n              )}\n            </div>\n          )}\n        </CardContent>\n\n        {/* Footer */}\n        {footerContent && (\n          <div className=\"glass-mt-4 glass-pt-4 glass-border-t glass-border-white/10\">\n            {footerContent}\n          </div>\n        )}\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Chart Widget Grid Component\nexport interface GlassChartWidgetGridProps {\n  widgets: Array<Omit<GlassChartWidgetProps, \"size\">>;\n  columns?: number;\n  size?: \"sm\" | \"md\" | \"lg\";\n  className?: string;\n}\n\nexport const GlassChartWidgetGrid: React.FC<GlassChartWidgetGridProps> = ({\n  widgets,\n  columns = 2,\n  size = \"md\",\n  className,\n}) => {\n  const gridCols = {\n    1: \"grid-cols-1\",\n    2: \"grid-cols-1 lg:grid-cols-2\",\n    3: \"grid-cols-1 lg:grid-cols-2 xl:grid-cols-3\",\n    4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"grid glass-gap-6\",\n        gridCols[columns as keyof typeof gridCols],\n        className\n      )}\n    >\n      {widgets.map((widget, index) => (\n        <GlassChartWidget key={widget.title} {...widget} size={size} />\n      ))}\n    </div>\n  );\n};\n\nexport default GlassChartWidget;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ArrowDownIcon, ArrowUpIcon, Minus } from \"@/icons\";\nimport React from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassKPICardProps {\n  /**\n   * KPI title/label\n   */\n  title: string;\n  /**\n   * Main KPI value\n   */\n  value: string | number;\n  /**\n   * KPI unit (e.g., '$', '%', 'users')\n   */\n  unit?: string;\n  /**\n   * Previous value for comparison\n   */\n  previousValue?: string | number;\n  /**\n   * Trend direction\n   */\n  trend?: \"up\" | \"down\" | \"neutral\" | \"none\";\n  /**\n   * Trend percentage change\n   */\n  trendPercentage?: number;\n  /**\n   * KPI description/subtitle\n   */\n  description?: string;\n  /**\n   * Icon to display\n   */\n  icon?: React.ReactNode;\n  /**\n   * Color variant for the card\n   */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\" | \"primary\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Show trend indicator\n   */\n  showTrend?: boolean;\n  /**\n   * Custom trend label\n   */\n  trendLabel?: string;\n  /**\n   * Format function for the value\n   */\n  formatValue?: (value: string | number) => string;\n  /**\n   * Additional content to display\n   */\n  children?: React.ReactNode;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Click handler\n   */\n  onClick?: () => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassKPICard component\n * A glassmorphism KPI card for displaying key performance indicators\n */\nexport const GlassKPICard: React.FC<GlassKPICardProps> = ({\n  title = \"KPI\",\n  value = \"--\",\n  unit = \"\",\n  previousValue,\n  trend = \"none\",\n  trendPercentage,\n  description,\n  icon,\n  variant = \"default\",\n  size = \"md\",\n  showTrend = true,\n  trendLabel,\n  formatValue,\n  children,\n  loading = false,\n  onClick,\n  className,\n  ...props\n}) => {\n  // Size configurations\n  const sizeConfigs = {\n    sm: {\n      cardClass: \"glass-p-4\",\n      titleClass: \"glass-text-sm font-medium\",\n      valueClass: \"glass-text-2xl font-bold\",\n      iconSize: \"w-6 h-6\",\n      trendIconSize: \"w-4 h-4\",\n      trendTextSize: \"glass-text-xs\",\n    },\n    md: {\n      cardClass: \"glass-p-6\",\n      titleClass: \"glass-text-base font-medium\",\n      valueClass: \"text-3xl font-bold\",\n      iconSize: \"w-8 h-8\",\n      trendIconSize: \"w-5 h-5\",\n      trendTextSize: \"glass-text-sm\",\n    },\n    lg: {\n      cardClass: \"p-8\",\n      titleClass: \"glass-text-lg font-semibold\",\n      valueClass: \"text-4xl font-bold\",\n      iconSize: \"w-10 h-10\",\n      trendIconSize: \"w-6 h-6\",\n      trendTextSize: \"glass-text-base\",\n    },\n    xl: {\n      cardClass: \"glass-p-10\",\n      titleClass: \"glass-text-xl font-semibold\",\n      valueClass: \"text-5xl font-bold\",\n      iconSize: \"w-12 h-12\",\n      trendIconSize: \"w-7 h-7\",\n      trendTextSize: \"glass-text-lg\",\n    },\n  };\n\n  const config = sizeConfigs[size] ?? sizeConfigs.md;\n\n  // Variant color configurations\n  const variantConfigs = {\n    default: {\n      iconColor: \"glass-text-primary/70\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      valueColor: \"glass-text-primary\",\n    },\n    success: {\n      iconColor: \"text-green-400\",\n      trendUpColor: \"text-green-300\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      valueColor: \"text-green-200\",\n    },\n    warning: {\n      iconColor: \"text-yellow-400\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-300\",\n      valueColor: \"text-yellow-200\",\n    },\n    error: {\n      iconColor: \"text-red-400\",\n      trendUpColor: \"text-red-400\",\n      trendDownColor: \"text-red-300\",\n      trendNeutralColor: \"text-yellow-400\",\n      valueColor: \"text-red-200\",\n    },\n    info: {\n      iconColor: \"text-blue-400\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      valueColor: \"text-blue-200\",\n    },\n    primary: {\n      iconColor: \"text-primary\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      valueColor: \"text-primary-foreground\",\n    },\n  };\n\n  const variantConfig = variantConfigs[variant] ?? variantConfigs.default;\n\n  // Format the display value\n  const displayValue = formatValue\n    ? formatValue(value ?? \"--\")\n    : String(value ?? \"--\");\n\n  // Calculate trend information\n  const getTrendInfo = () => {\n    if (trend === \"none\" || !showTrend) return null;\n\n    let trendIcon;\n    let trendColor;\n    let trendText = \"\";\n\n    switch (trend) {\n      case \"up\":\n        trendIcon = (\n          <ArrowUpIcon\n            className={cn(config.trendIconSize, variantConfig.trendUpColor)}\n          />\n        );\n        trendColor = variantConfig.trendUpColor;\n        break;\n      case \"down\":\n        trendIcon = (\n          <ArrowDownIcon\n            className={cn(config.trendIconSize, variantConfig.trendDownColor)}\n          />\n        );\n        trendColor = variantConfig.trendDownColor;\n        break;\n      case \"neutral\":\n        trendIcon = (\n          <Minus\n            className={cn(\n              config.trendIconSize,\n              variantConfig.trendNeutralColor\n            )}\n          />\n        );\n        trendColor = variantConfig.trendNeutralColor;\n        break;\n    }\n\n    if (trendPercentage !== undefined) {\n      trendText = `${trend === \"up\" ? \"+\" : trend === \"down\" ? \"-\" : \"\"}${Math.abs(trendPercentage)}%`;\n    } else if (trendLabel) {\n      trendText = trendLabel;\n    }\n\n    return { trendIcon, trendColor, trendText };\n  };\n\n  const trendInfo = getTrendInfo();\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard\n        data-glass-component\n        className={cn(\"animate-pulse\", config.cardClass, className)}\n      >\n        <div className=\"glass-gap-4\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-24\"></div>\n            <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-md\"></div>\n          </div>\n          <div className=\"glass-gap-2\">\n            <div className=\"glass-h-8 glass-surface-subtle/20 glass-radius-md glass-w-32\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full glass-kpi-card\">\n      <GlassCard\n        elevation=\"level2\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        animation=\"none\"\n        performanceMode=\"medium\"\n        hoverable={!!onClick}\n        clickable={!!onClick}\n        onClick={onClick}\n        className={cn(\n          config.cardClass,\n          \"group relative overflow-hidden\",\n          onClick && [\n            \"cursor-pointer\",\n            \"hover:shadow-2xl hover:shadow-purple-500/20\",\n            `transition-all duration-[${ANIMATION.DURATION.slow}ms] ease-out`,\n          ],\n          className\n        )}\n        {...props}\n      >\n        <CardHeader className=\"glass-pb-2\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <CardTitle\n              className={cn(\n                config.titleClass,\n                \"glass-text-primary/90 flex items-center glass-gap-2\"\n              )}\n            >\n              {icon && (\n                <div\n                  className={cn(\n                    \"inline-flex items-center justify-center glass-radius-lg glass-p-2 mr-3\",\n                    \"bg-gradient-to-br from-white/10 to-white/5 border border-white/20\",\n                    \"group-hover:from-white/15 group-hover:to-white/8\",\n                    \"group-hover:border-white/30 group-hover:shadow-lg\",\n                    \"group-hover:scale-110 group-hover:rotate-2\",\n                    `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n                    variantConfig.iconColor\n                  )}\n                >\n                  <div\n                    className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-lg glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n                  />\n                  <span\n                    className={cn(\n                      config.iconSize,\n                      `relative z-10 transition-transform duration-[${ANIMATION.DURATION.normal}ms] group-hover:scale-110`\n                    )}\n                  >\n                    {icon}\n                  </span>\n                </div>\n              )}\n              <ContrastGuard>{title}</ContrastGuard>\n            </CardTitle>\n            {trendInfo && trendInfo.trendIcon && (\n              <div className=\"glass-flex glass-items-center glass-gap-1 trend-indicator\">\n                <div\n                  className={`glass-p-1 glass-radius-md glass-surface-subtle/10 glass-group-hover:glass-surface-subtle/20 glass-transition-colors glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n                >\n                  <span\n                    data-icon\n                    className={`glass-transition-all glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n                  >\n                    {trendInfo.trendIcon}\n                  </span>\n                </div>\n                {trendInfo.trendText && (\n                  <span\n                    className={cn(\n                      config.trendTextSize,\n                      trendInfo.trendColor,\n                      `font-medium transition-all duration-[${ANIMATION.DURATION.normal}ms]`,\n                      \"group-glass-hover-scale-105 group-hover:brightness-110\"\n                    )}\n                  >\n                    {trendInfo.trendText}\n                  </span>\n                )}\n              </div>\n            )}\n          </div>\n          {description && (\n            <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mt-1\">\n              {description}\n            </p>\n          )}\n        </CardHeader>\n\n        <CardContent className=\"glass-pt-0\">\n          <div className=\"glass-flex glass-items-baseline glass-gap-2 glass-relative\">\n            {/* Value with premium glow effect */}\n            <div className=\"glass-relative premium-glow\">\n              <div\n                className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-purple-opacity-30 glass-gradient-primary glass-blur-xl glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.slow}ms] glass--z-10 glass-scale-150`}\n              />\n              <span\n                data-value\n                className={cn(\n                  config.valueClass,\n                  variantConfig.valueColor,\n                  \"relative z-10 font-bold tracking-tight\",\n                  `group-hover:glass-text-primary transition-all duration-[${ANIMATION.DURATION.normal}ms]`,\n                  \"drop-shadow-sm group-hover:drop-shadow-lg\"\n                )}\n              >\n                <ContrastGuard>{displayValue}</ContrastGuard>\n              </span>\n            </div>\n\n            {unit && (\n              <ContrastGuard>\n                <span\n                  className={cn(\n                    \"glass-text-lg glass-text-primary/70 font-medium\",\n                    `group-hover:glass-text-primary/90 transition-colors duration-[${ANIMATION.DURATION.normal}ms]`\n                  )}\n                >\n                  {unit}\n                </span>\n              </ContrastGuard>\n            )}\n          </div>\n\n          {previousValue && (\n            <div className=\"glass-mt-2\">\n              <ContrastGuard>\n                <span className=\"glass-text-sm glass-text-primary-glass-opacity-50\">\n                  Previous:{\" \"}\n                  {formatValue\n                    ? formatValue(previousValue)\n                    : String(previousValue)}\n                  {unit}\n                </span>\n              </ContrastGuard>\n            </div>\n          )}\n\n          {children && <div className=\"glass-mt-4\">{children}</div>}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Compound component for KPI Card with built-in formatting\nexport interface KPIStat {\n  label: string;\n  value: number;\n  unit?: string;\n  trend?: \"up\" | \"down\" | \"neutral\";\n  trendPercentage?: number;\n}\n\nexport interface GlassKPIGridProps {\n  kpis: KPIStat[];\n  columns?: number;\n  className?: string;\n}\n\nexport const GlassKPIGrid: React.FC<GlassKPIGridProps> = ({\n  kpis,\n  columns = 3,\n  className,\n}) => {\n  const gridCols = {\n    1: \"grid-cols-1\",\n    2: \"grid-cols-1 md:grid-cols-2\",\n    3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n    4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"grid glass-gap-6\",\n        gridCols[columns as keyof typeof gridCols],\n        className\n      )}\n    >\n      {kpis.map((kpi, index) => (\n        <GlassKPICard\n          key={kpi.label}\n          title={kpi.label}\n          value={kpi.value}\n          unit={kpi.unit}\n          trend={kpi.trend}\n          trendPercentage={kpi.trendPercentage}\n          size=\"md\"\n        />\n      ))}\n    </div>\n  );\n};\n\nexport default GlassKPICard;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Activity,\n  DollarSign,\n  Minus,\n  Target,\n  TrendingDown,\n  TrendingUp,\n  Users,\n} from \"@/icons\";\nimport React, { forwardRef } from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassMetricCardProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Metric title/label\n   */\n  title: string;\n  /**\n   * Main metric value\n   */\n  value: string | number;\n  /**\n   * Additional className for the rendered metric value.\n   */\n  valueClassName?: string;\n  /**\n   * Inline style for the rendered metric value.\n   */\n  valueStyle?: React.CSSProperties;\n  /**\n   * Metric unit (e.g., '$', '%', 'users')\n   */\n  unit?: string;\n  /**\n   * Metric description/subtitle\n   */\n  description?: string;\n  /**\n   * Icon to display\n   */\n  icon?: React.ReactNode;\n  /**\n   * Metric type for automatic icon\n   */\n  type?:\n    | \"revenue\"\n    | \"users\"\n    | \"conversion\"\n    | \"performance\"\n    | \"growth\"\n    | \"target\"\n    | \"custom\";\n  /**\n   * Color variant for the card\n   */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\" | \"primary\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Layout variant\n   */\n  layout?: \"horizontal\" | \"vertical\" | \"compact\";\n  /**\n   * Show progress indicator\n   */\n  showProgress?: boolean;\n  /**\n   * Progress value (0-100)\n   */\n  progress?: number;\n  /**\n   * Progress label\n   */\n  progressLabel?: string;\n  /**\n   * Trend information\n   */\n  trend?: {\n    value: number;\n    label: string;\n    direction: \"up\" | \"down\" | \"neutral\";\n  };\n  /**\n   * Comparison value\n   */\n  comparison?: {\n    value: string | number;\n    label: string;\n  };\n  /**\n   * Additional content to display\n   */\n  children?: React.ReactNode;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Click handler\n   */\n  onClick?: () => void;\n}\n\n/**\n * GlassMetricCard component\n * A glassmorphism metric card for displaying various dashboard metrics\n */\nexport const GlassMetricCard = forwardRef<HTMLDivElement, GlassMetricCardProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      title,\n      value,\n      valueClassName,\n      valueStyle,\n      unit = \"\",\n      description,\n      icon,\n      type = \"custom\",\n      variant = \"default\",\n      size = \"md\",\n      layout = \"vertical\",\n      showProgress = false,\n      progress = 0,\n      progressLabel,\n      trend,\n      comparison,\n      children,\n      loading = false,\n      onClick,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    // Size configurations\n    const sizeConfigs = {\n      sm: {\n        cardClass: \"glass-p-4\",\n        titleClass: \"glass-text-sm font-medium\",\n        valueClass: \"glass-text-xl font-bold\",\n        iconSize: \"w-6 h-6\",\n        progressHeight: \"h-1\",\n      },\n      md: {\n        cardClass: \"glass-p-6\",\n        titleClass: \"glass-text-base font-medium\",\n        valueClass: \"glass-text-2xl font-bold\",\n        iconSize: \"w-8 h-8\",\n        progressHeight: \"h-2\",\n      },\n      lg: {\n        cardClass: \"p-8\",\n        titleClass: \"glass-text-lg font-semibold\",\n        valueClass: \"text-3xl font-bold\",\n        iconSize: \"w-10 h-10\",\n        progressHeight: \"h-3\",\n      },\n      xl: {\n        cardClass: \"glass-p-10\",\n        titleClass: \"glass-text-xl font-semibold\",\n        valueClass: \"text-4xl font-bold\",\n        iconSize: \"w-12 h-12\",\n        progressHeight: \"h-4\",\n      },\n    };\n\n    // Get automatic icon based on type\n    const getTypeIcon = () => {\n      switch (type) {\n        case \"revenue\":\n          return <DollarSign className={sizeConfigs[size].iconSize} />;\n        case \"users\":\n          return <Users className={sizeConfigs[size].iconSize} />;\n        case \"conversion\":\n          return <Target className={sizeConfigs[size].iconSize} />;\n        case \"performance\":\n          return <Activity className={sizeConfigs[size].iconSize} />;\n        case \"growth\":\n          return <TrendingUp className={sizeConfigs[size].iconSize} />;\n        case \"target\":\n          return <Target className={sizeConfigs[size].iconSize} />;\n        default:\n          return null;\n      }\n    };\n\n    // Variant color configurations\n    const variantConfigs = {\n      default: {\n        iconColor: \"glass-text-primary/70\",\n        valueColor: \"glass-text-primary\",\n        trendUpColor: \"text-green-400\",\n        trendDownColor: \"text-red-400\",\n        trendNeutralColor: \"text-yellow-400\",\n        progressBg: \"bg-white/20\",\n        progressFill: \"bg-white/60\",\n      },\n      success: {\n        iconColor: \"text-green-400\",\n        valueColor: \"text-green-200\",\n        trendUpColor: \"text-green-300\",\n        trendDownColor: \"text-red-400\",\n        trendNeutralColor: \"text-yellow-400\",\n        progressBg: \"bg-green-500/20\",\n        progressFill: \"bg-green-500\",\n      },\n      warning: {\n        iconColor: \"text-yellow-400\",\n        valueColor: \"text-yellow-200\",\n        trendUpColor: \"text-green-400\",\n        trendDownColor: \"text-red-400\",\n        trendNeutralColor: \"text-yellow-300\",\n        progressBg: \"bg-yellow-500/20\",\n        progressFill: \"bg-yellow-500\",\n      },\n      error: {\n        iconColor: \"text-red-400\",\n        valueColor: \"text-red-200\",\n        trendUpColor: \"text-red-400\",\n        trendDownColor: \"text-red-300\",\n        trendNeutralColor: \"text-yellow-400\",\n        progressBg: \"bg-red-500/20\",\n        progressFill: \"bg-red-500\",\n      },\n      info: {\n        iconColor: \"text-blue-400\",\n        valueColor: \"text-blue-200\",\n        trendUpColor: \"text-green-400\",\n        trendDownColor: \"text-red-400\",\n        trendNeutralColor: \"text-yellow-400\",\n        progressBg: \"bg-blue-500/20\",\n        progressFill: \"bg-blue-500\",\n      },\n      primary: {\n        iconColor: \"text-primary\",\n        valueColor: \"text-primary-foreground\",\n        trendUpColor: \"text-green-400\",\n        trendDownColor: \"text-red-400\",\n        trendNeutralColor: \"text-yellow-400\",\n        progressBg: \"bg-primary/20\",\n        progressFill: \"bg-primary\",\n      },\n    };\n\n    const config = sizeConfigs?.[size];\n    const variantConfig = variantConfigs?.[variant];\n    const displayIcon = icon || getTypeIcon();\n\n    // Loading skeleton\n    if (loading) {\n      return (\n        <GlassCard\n          data-glass-component\n          className={cn(\"animate-pulse\", config.cardClass, className)}\n        >\n          <div className=\"glass-gap-4\">\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-24\"></div>\n              <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-md\"></div>\n            </div>\n            <div className=\"glass-gap-2\">\n              <div className=\"glass-h-8 glass-surface-subtle/20 glass-radius-md glass-w-32\"></div>\n              <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n            </div>\n            {showProgress && (\n              <div className=\"glass-h-2 glass-surface-subtle/10 glass-radius-md\"></div>\n            )}\n          </div>\n        </GlassCard>\n      );\n    }\n\n    return (\n      <Motion preset=\"fadeIn\" className=\"glass-w-full glass-metric-card\">\n        <GlassCard\n          ref={ref}\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          animation=\"none\"\n          performanceMode=\"medium\"\n          hoverable={!!onClick}\n          clickable={!!onClick}\n          onClick={onClick}\n          className={cn(\n            config.cardClass,\n            \"group relative overflow-hidden\",\n            onClick && [\n              \"cursor-pointer\",\n              \"hover:shadow-2xl hover:shadow-blue-500/20\",\n              `transition-all duration-[${ANIMATION.DURATION.slow}ms] ease-out`,\n            ],\n            className\n          )}\n          {...props}\n        >\n          <CardHeader className=\"glass-pb-2\">\n            <div\n              className={cn(\n                \"flex items-start justify-between\",\n                layout === \"horizontal\" ? \"flex-row items-center\" : \"flex-col\"\n              )}\n            >\n              <div className=\"glass-flex-1\">\n                <CardTitle\n                  className={cn(\n                    config.titleClass,\n                    \"glass-text-primary/90 flex items-center glass-gap-2\"\n                  )}\n                >\n                  {displayIcon && (\n                    <div\n                      className={cn(\n                        \"inline-flex items-center justify-center glass-radius-lg\",\n                        \"bg-gradient-to-br from-white/10 to-white/5\",\n                        \"border border-white/20 glass-p-2 mr-3\",\n                        \"group-hover:from-white/15 group-hover:to-white/8\",\n                        \"group-hover:border-white/30 group-hover:shadow-lg\",\n                        \"group-hover:scale-110 group-hover:-rotate-2\",\n                        `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n                        variantConfig.iconColor\n                      )}\n                    >\n                      {/* Icon glow effect */}\n                      <div\n                        className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-lg glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n                      />\n                      <span\n                        className={cn(\n                          config.iconSize,\n                          `relative z-10 transition-transform duration-[${ANIMATION.DURATION.normal}ms] group-hover:scale-110`\n                        )}\n                      >\n                        {displayIcon}\n                      </span>\n                    </div>\n                  )}\n                  <ContrastGuard>{title}</ContrastGuard>\n                </CardTitle>\n                {description && (\n                  <ContrastGuard>\n                    <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mt-1\">\n                      {description}\n                    </p>\n                  </ContrastGuard>\n                )}\n              </div>\n\n              {/* Trend indicator */}\n              {trend && (\n                <div className=\"glass-flex glass-items-center glass-gap-1 glass-mt-2\">\n                  {trend.direction === \"up\" && (\n                    <TrendingUp\n                      className={cn(\"w-4 h-4\", variantConfig.trendUpColor)}\n                    />\n                  )}\n                  {trend.direction === \"down\" && (\n                    <TrendingDown\n                      className={cn(\"w-4 h-4\", variantConfig.trendDownColor)}\n                    />\n                  )}\n                  {trend.direction === \"neutral\" && (\n                    <Minus\n                      className={cn(\"w-4 h-4\", variantConfig.trendNeutralColor)}\n                    />\n                  )}\n                  <span\n                    className={cn(\n                      \"glass-text-sm font-medium\",\n                      trend.direction === \"up\"\n                        ? variantConfig.trendUpColor\n                        : trend.direction === \"down\"\n                          ? variantConfig.trendDownColor\n                          : variantConfig.trendNeutralColor\n                    )}\n                  >\n                    {trend.value > 0 ? \"+\" : \"\"}\n                    {trend.value}% {trend.label}\n                  </span>\n                </div>\n              )}\n            </div>\n          </CardHeader>\n\n          <CardContent className=\"glass-pt-0\">\n            <div\n              className={cn(\n                \"flex items-baseline glass-gap-2 glass-mb-4 relative\",\n                layout === \"horizontal\" ? \"justify-start\" : \"justify-center\"\n              )}\n            >\n              {/* Value with sophisticated hover effects */}\n              <div className=\"glass-relative\">\n                {/* Background glow on hover */}\n                <div\n                  className={`glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-purple-opacity-30 glass-gradient-primary glass-blur-xl glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.slow}ms] glass--z-10 glass-scale-150`}\n                />\n\n                <span\n                  className={cn(\n                    config.valueClass,\n                    valueClassName || variantConfig.valueColor,\n                    \"relative z-10 font-bold tracking-tight\",\n                    \"group-glass-hover-scale-105 group-hover:glass-text-primary\",\n                    `transition-all duration-[${ANIMATION.DURATION.normal}ms] ease-out`,\n                    \"drop-shadow-sm group-hover:drop-shadow-lg\"\n                  )}\n                  style={valueStyle}\n                >\n                  {value}\n                </span>\n              </div>\n\n              {unit && (\n                <ContrastGuard>\n                  <span\n                    className={cn(\n                      \"glass-text-lg glass-text-primary/70 font-medium relative\",\n                      `group-hover:glass-text-primary/90 transition-colors duration-[${ANIMATION.DURATION.normal}ms]`\n                    )}\n                  >\n                    {unit}\n                  </span>\n                </ContrastGuard>\n              )}\n            </div>\n\n            {/* Progress bar */}\n            {showProgress && (\n              <div className=\"glass-mb-4\">\n                <div\n                  className={cn(\n                    \"w-full glass-radius-full overflow-hidden\",\n                    config.progressHeight,\n                    variantConfig.progressBg\n                  )}\n                >\n                  <Motion\n                    preset=\"slideRight\"\n                    className={cn(\"h-full\", variantConfig.progressFill)}\n                    style={{ width: `${Math.min(progress, 100)}%` }}\n                  />\n                </div>\n                {progressLabel && (\n                  <div className=\"glass-flex glass-justify-between glass-items-center glass-mt-2\">\n                    <ContrastGuard>\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {progressLabel}\n                      </span>\n                    </ContrastGuard>\n                    <ContrastGuard>\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {Math.round(progress)}%\n                      </span>\n                    </ContrastGuard>\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* Comparison */}\n            {comparison && (\n              <div className=\"glass-mb-4 glass-p-3 glass-surface-subtle/5 glass-radius-lg\">\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n                      {comparison.label}\n                    </span>\n                  </ContrastGuard>\n                  <ContrastGuard>\n                    <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                      {comparison.value}\n                    </span>\n                  </ContrastGuard>\n                </div>\n              </div>\n            )}\n\n            {children && <div className=\"glass-mt-4\">{children}</div>}\n          </CardContent>\n        </GlassCard>\n      </Motion>\n    );\n  }\n);\n\nGlassMetricCard.displayName = \"GlassMetricCard\";\n\n// Metric Grid Component\nexport interface GlassMetricGridProps {\n  metrics: Array<Omit<GlassMetricCardProps, \"size\">>;\n  columns?: number;\n  size?: \"sm\" | \"md\" | \"lg\";\n  className?: string;\n}\n\nexport const GlassMetricGrid: React.FC<GlassMetricGridProps> = ({\n  metrics,\n  columns = 3,\n  size = \"md\",\n  className,\n}) => {\n  const gridCols = {\n    1: \"grid-cols-1\",\n    2: \"grid-cols-1 md:grid-cols-2\",\n    3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n    4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"grid glass-gap-6\",\n        gridCols?.[columns as keyof typeof gridCols],\n        className\n      )}\n    >\n      {metrics.map((metric, index) => (\n        <GlassMetricCard key={metric?.title} {...metric} size={size} />\n      ))}\n    </div>\n  );\n};\n\nexport default GlassMetricCard;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Activity,\n  ArrowDownIcon,\n  ArrowUpIcon,\n  BarChart3,\n  DollarSign,\n  Minus,\n  Target,\n  TrendingUp,\n  Users,\n  Zap,\n} from \"@/icons\";\nimport React from \"react\";\nimport { Motion } from \"../../primitives\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassStatCardProps {\n  /**\n   * Statistic title/label\n   */\n  title: string;\n  /**\n   * Main statistic value\n   */\n  value: string | number;\n  /**\n   * Statistic unit (e.g., '$', '%', 'users')\n   */\n  unit?: string;\n  /**\n   * Statistic description/subtitle\n   */\n  description?: string;\n  /**\n   * Icon to display\n   */\n  icon?: React.ReactNode;\n  /**\n   * Statistic type for automatic icon\n   */\n  type?:\n    | \"revenue\"\n    | \"users\"\n    | \"conversion\"\n    | \"performance\"\n    | \"growth\"\n    | \"target\"\n    | \"activity\"\n    | \"analytics\"\n    | \"custom\";\n  /**\n   * Color variant for the card\n   */\n  variant?: \"default\" | \"success\" | \"warning\" | \"error\" | \"info\" | \"primary\";\n  /**\n   * Size variant\n   */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /**\n   * Layout variant\n   */\n  layout?: \"horizontal\" | \"vertical\" | \"compact\";\n  /**\n   * Trend information\n   */\n  trend?: {\n    value: number;\n    label: string;\n    direction: \"up\" | \"down\" | \"neutral\";\n  };\n  /**\n   * Previous period value for comparison\n   */\n  previousValue?: string | number;\n  /**\n   * Additional stats to display\n   */\n  additionalStats?: Array<{\n    label: string;\n    value: string | number;\n    change?: number;\n  }>;\n  /**\n   * Show sparkline or mini chart\n   */\n  showSparkline?: boolean;\n  /**\n   * Sparkline data (simplified)\n   */\n  sparklineData?: number[];\n  /**\n   * Progress value (0-100)\n   */\n  progress?: number;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Click handler\n   */\n  onClick?: () => void;\n  /**\n   * Custom className\n   */\n  className?: string;\n}\n\n/**\n * GlassStatCard component\n * A glassmorphism statistics card with trend indicators and additional metrics\n */\nexport const GlassStatCard: React.FC<GlassStatCardProps> = ({\n  // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n  title,\n  value,\n  unit = \"\",\n  description,\n  icon,\n  type = \"custom\",\n  variant = \"default\",\n  size = \"md\",\n  layout = \"vertical\",\n  trend,\n  previousValue,\n  additionalStats,\n  showSparkline = false,\n  sparklineData = [],\n  progress,\n  loading = false,\n  onClick,\n  className,\n  ...props\n}) => {\n  // Size configurations\n  const sizeConfigs = {\n    sm: {\n      cardClass: \"glass-p-4\",\n      titleClass: \"glass-text-sm font-medium\",\n      valueClass: \"glass-text-xl font-bold\",\n      iconSize: \"w-6 h-6\",\n      sparklineHeight: \"h-6\",\n    },\n    md: {\n      cardClass: \"glass-p-6\",\n      titleClass: \"glass-text-base font-medium\",\n      valueClass: \"glass-text-2xl font-bold\",\n      iconSize: \"w-8 h-8\",\n      sparklineHeight: \"h-8\",\n    },\n    lg: {\n      cardClass: \"p-8\",\n      titleClass: \"glass-text-lg font-semibold\",\n      valueClass: \"text-3xl font-bold\",\n      iconSize: \"w-10 h-10\",\n      sparklineHeight: \"h-10\",\n    },\n    xl: {\n      cardClass: \"glass-p-10\",\n      titleClass: \"glass-text-xl font-semibold\",\n      valueClass: \"text-4xl font-bold\",\n      iconSize: \"w-12 h-12\",\n      sparklineHeight: \"h-12\",\n    },\n  };\n\n  // Get automatic icon based on type\n  const getTypeIcon = () => {\n    switch (type) {\n      case \"revenue\":\n        return <DollarSign className={sizeConfigs[size].iconSize} />;\n      case \"users\":\n        return <Users className={sizeConfigs[size].iconSize} />;\n      case \"conversion\":\n        return <Target className={sizeConfigs[size].iconSize} />;\n      case \"performance\":\n        return <Activity className={sizeConfigs[size].iconSize} />;\n      case \"growth\":\n        return <TrendingUp className={sizeConfigs[size].iconSize} />;\n      case \"target\":\n        return <Target className={sizeConfigs[size].iconSize} />;\n      case \"activity\":\n        return <Zap className={sizeConfigs[size].iconSize} />;\n      case \"analytics\":\n        return <BarChart3 className={sizeConfigs[size].iconSize} />;\n      default:\n        return null;\n    }\n  };\n\n  // Variant color configurations\n  const variantConfigs = {\n    default: {\n      iconColor: \"glass-text-primary/70\",\n      valueColor: \"glass-text-primary\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      sparklineColor: \"glass-text-primary/60\",\n    },\n    success: {\n      iconColor: \"text-green-400\",\n      valueColor: \"text-green-200\",\n      trendUpColor: \"text-green-300\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      sparklineColor: \"text-green-400\",\n    },\n    warning: {\n      iconColor: \"text-yellow-400\",\n      valueColor: \"text-yellow-200\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-300\",\n      sparklineColor: \"text-yellow-400\",\n    },\n    error: {\n      iconColor: \"text-red-400\",\n      valueColor: \"text-red-200\",\n      trendUpColor: \"text-red-400\",\n      trendDownColor: \"text-red-300\",\n      trendNeutralColor: \"text-yellow-400\",\n      sparklineColor: \"text-red-400\",\n    },\n    info: {\n      iconColor: \"text-blue-400\",\n      valueColor: \"text-blue-200\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      sparklineColor: \"text-blue-400\",\n    },\n    primary: {\n      iconColor: \"text-primary\",\n      valueColor: \"text-primary-foreground\",\n      trendUpColor: \"text-green-400\",\n      trendDownColor: \"text-red-400\",\n      trendNeutralColor: \"text-yellow-400\",\n      sparklineColor: \"text-primary\",\n    },\n  };\n\n  const config = sizeConfigs?.[size];\n  const variantConfig = variantConfigs?.[variant];\n  const displayIcon = icon || getTypeIcon();\n\n  // Generate sparkline path\n  const generateSparklinePath = (data: number[]) => {\n    if ((data?.length || 0) === 0) return \"\";\n\n    const min = Math.min(...data);\n    const max = Math.max(...data);\n    const range = max - min || 1;\n    const height = parseInt(config.sparklineHeight.replace(\"h-\", \"\")) * 4; // Convert to pixels\n\n    let path = \"\";\n    data?.forEach((value, index) => {\n      const x = (index / ((data?.length || 0) - 1)) * 100;\n      const y = height - ((value - min) / range) * height;\n\n      if (index === 0) {\n        path += `M ${x} ${y}`;\n      } else {\n        path += ` L ${x} ${y}`;\n      }\n    });\n\n    return path;\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard\n        data-glass-component\n        className={cn(\"animate-pulse\", config.cardClass, className)}\n      >\n        <div className=\"glass-gap-4\">\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-24\"></div>\n            <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-md\"></div>\n          </div>\n          <div className=\"glass-gap-2\">\n            <div className=\"glass-h-8 glass-surface-subtle/20 glass-radius-md glass-w-32\"></div>\n            <div className=\"glass-h-4 glass-surface-subtle/20 glass-radius-md glass-w-20\"></div>\n          </div>\n          {showSparkline && (\n            <div\n              className={cn(\n                \"bg-white/10 glass-radius-md\",\n                config.sparklineHeight\n              )}\n            ></div>\n          )}\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <Motion preset=\"fadeIn\" className=\"glass-w-full glass-stat-card\">\n      <GlassCard\n        variant={variant === \"default\" ? \"default\" : \"elevated\"}\n        elevation={\"level2\"}\n        hoverable={!!onClick}\n        clickable={!!onClick}\n        onClick={onClick}\n        className={cn(\n          config.cardClass,\n          \"group relative overflow-hidden\",\n          onClick && [\n            \"cursor-pointer\",\n            \"hover:shadow-2xl hover:shadow-emerald-500/20\",\n            `transition-all duration-[${ANIMATION.DURATION.slow}ms] ease-out`,\n          ],\n          className\n        )}\n        {...props}\n      >\n        <CardHeader className=\"glass-pb-2\">\n          <div\n            className={cn(\n              \"flex items-start justify-between\",\n              layout === \"horizontal\" ? \"flex-row items-center\" : \"flex-col\"\n            )}\n          >\n            <div className=\"glass-flex-1\">\n              <CardTitle\n                className={cn(\n                  config.titleClass,\n                  \"glass-text-primary/90 flex items-center glass-gap-2\"\n                )}\n              >\n                {displayIcon && (\n                  <span\n                    className={cn(config.iconSize, variantConfig.iconColor)}\n                  >\n                    {displayIcon}\n                  </span>\n                )}\n                <ContrastGuard>{title}</ContrastGuard>\n              </CardTitle>\n              {description && (\n                <ContrastGuard>\n                  <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mt-1\">\n                    {description}\n                  </p>\n                </ContrastGuard>\n              )}\n            </div>\n\n            {/* Trend indicator */}\n            {trend && (\n              <div className=\"glass-flex glass-items-center glass-gap-1 glass-mt-2\">\n                {trend.direction === \"up\" && (\n                  <ArrowUpIcon\n                    className={cn(\"w-4 h-4\", variantConfig.trendUpColor)}\n                  />\n                )}\n                {trend.direction === \"down\" && (\n                  <ArrowDownIcon\n                    className={cn(\"w-4 h-4\", variantConfig.trendDownColor)}\n                  />\n                )}\n                {trend.direction === \"neutral\" && (\n                  <Minus\n                    className={cn(\"w-4 h-4\", variantConfig.trendNeutralColor)}\n                  />\n                )}\n                <span\n                  className={cn(\n                    \"glass-text-sm font-medium\",\n                    trend.direction === \"up\"\n                      ? variantConfig.trendUpColor\n                      : trend.direction === \"down\"\n                        ? variantConfig.trendDownColor\n                        : variantConfig.trendNeutralColor\n                  )}\n                >\n                  {trend.value > 0 ? \"+\" : \"\"}\n                  {trend.value}% {trend.label}\n                </span>\n              </div>\n            )}\n          </div>\n        </CardHeader>\n\n        <CardContent className=\"glass-pt-0\">\n          <div\n            className={cn(\n              \"flex items-baseline glass-gap-2 glass-mb-4\",\n              layout === \"horizontal\" ? \"justify-start\" : \"justify-center\"\n            )}\n          >\n            <span className={cn(config.valueClass, variantConfig.valueColor)}>\n              <ContrastGuard>{value}</ContrastGuard>\n            </span>\n            {unit && (\n              <ContrastGuard>\n                <span className=\"glass-text-lg glass-text-primary-opacity-70 glass-font-medium\">\n                  {unit}\n                </span>\n              </ContrastGuard>\n            )}\n          </div>\n\n          {/* Sparkline */}\n          {showSparkline && (sparklineData?.length || 0) > 0 && (\n            <div className=\"glass-mb-4\">\n              <svg\n                width=\"100%\"\n                height={config.sparklineHeight.replace(\"h-\", \"\")}\n                className=\"glass-overflow-visible\"\n              >\n                <path\n                  d={generateSparklinePath(sparklineData)}\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  strokeWidth=\"2\"\n                  className={cn(\"opacity-60\", variantConfig.sparklineColor)}\n                />\n              </svg>\n            </div>\n          )}\n\n          {/* Progress bar */}\n          {progress !== undefined && (\n            <div className=\"glass-mb-4\">\n              <div className=\"glass-w-full glass-surface-subtle/10 glass-radius-full glass-h-2 glass-overflow-hidden\">\n                <Motion\n                  preset=\"slideRight\"\n                  className=\"glass-h-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-full\"\n                  style={{ width: `${Math.min(progress, 100)}%` }}\n                />\n              </div>\n              <div className=\"glass-flex glass-justify-between glass-items-center glass-mt-1\">\n                <ContrastGuard>\n                  <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                    Progress\n                  </span>\n                </ContrastGuard>\n                <ContrastGuard>\n                  <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                    {Math.round(progress)}%\n                  </span>\n                </ContrastGuard>\n              </div>\n            </div>\n          )}\n\n          {/* Previous value comparison */}\n          {previousValue && (\n            <div className=\"glass-mb-4 glass-p-3 glass-surface-subtle/5 glass-radius-lg\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <ContrastGuard>\n                  <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    Previous period\n                  </span>\n                </ContrastGuard>\n                <ContrastGuard>\n                  <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                    {previousValue}\n                    {unit}\n                  </span>\n                </ContrastGuard>\n              </div>\n            </div>\n          )}\n\n          {/* Additional stats */}\n          {additionalStats && (additionalStats?.length || 0) > 0 && (\n            <div className=\"glass-gap-3\">\n              {additionalStats.map((stat, index) => (\n                <div\n                  key={index}\n                  className=\"glass-flex glass-items-center glass-justify-between\"\n                >\n                  <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n                    {stat.label}\n                  </span>\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                      {stat.value}\n                    </span>\n                    {stat.change !== undefined && (\n                      <ContrastGuard>\n                        <span\n                          className={cn(\n                            \"glass-text-xs font-medium\",\n                            stat.change > 0\n                              ? \"text-green-400\"\n                              : stat.change < 0\n                                ? \"text-red-400\"\n                                : \"text-yellow-400\"\n                          )}\n                        >\n                          {stat.change > 0 ? \"+\" : \"\"}\n                          {stat.change}%\n                        </span>\n                      </ContrastGuard>\n                    )}\n                  </div>\n                </div>\n              ))}\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </Motion>\n  );\n};\n\n// Stat Grid Component\nexport interface GlassStatGridProps {\n  stats: Array<Omit<GlassStatCardProps, \"size\">>;\n  columns?: number;\n  size?: \"sm\" | \"md\" | \"lg\";\n  className?: string;\n}\n\nexport const GlassStatGrid: React.FC<GlassStatGridProps> = ({\n  stats,\n  columns = 3,\n  size = \"md\",\n  className,\n}) => {\n  const gridCols = {\n    1: \"grid-cols-1\",\n    2: \"grid-cols-1 md:grid-cols-2\",\n    3: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3\",\n    4: \"grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n  };\n\n  return (\n    <div\n      className={cn(\n        \"grid glass-gap-6\",\n        gridCols?.[columns as keyof typeof gridCols],\n        className\n      )}\n    >\n      {stats.map((stat, index) => (\n        <GlassStatCard key={stat.title} {...stat} size={size} />\n      ))}\n    </div>\n  );\n};\n\nexport default GlassStatCard;\n", "\"use client\";\n/**\n * Dimensional Dashboard Container\n * Advanced dashboard container with 3D depth layers and Z-space positioning\n */\n\nimport React, {\n  CSSProperties,\n  forwardRef,\n  ReactNode,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassContainer } from \"../layout/GlassContainer\";\n\n/**\n * Dimensional Dashboard Container Props\n */\nexport interface DimensionalDashboardContainerProps {\n  children?: ReactNode;\n  className?: string;\n  style?: CSSProperties;\n  perspective?: number;\n  depth?: number; // Z-axis depth in pixels\n  parallax?: boolean; // Enable parallax scrolling\n  autoRotate?: boolean; // Auto-rotate the dashboard\n  rotationSpeed?: number; // Rotation speed (degrees per second)\n  layers?: ReactNode[]; // Separate content layers with different Z positions\n  onLayerClick?: (layerIndex: number) => void;\n}\n\n/**\n * Dimensional Dashboard Container Component\n */\nexport const DimensionalDashboardContainer = forwardRef<\n  HTMLDivElement,\n  DimensionalDashboardContainerProps\n>(\n  (\n    {\n      children,\n      className = \"\",\n      style = {},\n      perspective = 1200,\n      depth = 100,\n      parallax = false,\n      autoRotate = false,\n      rotationSpeed = 10,\n      layers = [],\n      onLayerClick,\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [rotation, setRotation] = useState({ x: 0, y: 0 });\n    const [scrollPosition, setScrollPosition] = useState(0);\n    const animationFrameRef = useRef<number | null>(null);\n\n    /**\n     * Handle auto-rotation\n     */\n    useEffect(() => {\n      if (!autoRotate || prefersReducedMotion) return;\n\n      let lastTime = Date.now();\n\n      const rotate = () => {\n        const currentTime = Date.now();\n        const delta = (currentTime - lastTime) / 1000;\n        lastTime = currentTime;\n\n        setRotation((prev) => ({\n          x: prev.x,\n          y: (prev.y + rotationSpeed * delta) % 360,\n        }));\n\n        animationFrameRef.current = requestAnimationFrame(rotate);\n      };\n\n      animationFrameRef.current = requestAnimationFrame(rotate);\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [autoRotate, rotationSpeed, prefersReducedMotion]);\n\n    /**\n     * Handle mouse move for interactive rotation\n     */\n    const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n      if (autoRotate || prefersReducedMotion) return;\n\n      const container = containerRef.current;\n      if (!container) return;\n\n      const rect = container.getBoundingClientRect();\n      const centerX = rect.left + rect.width / 2;\n      const centerY = rect.top + rect.height / 2;\n\n      const rotateY = ((e.clientX - centerX) / (rect.width / 2)) * 15;\n      const rotateX = -((e.clientY - centerY) / (rect.height / 2)) * 15;\n\n      setRotation({ x: rotateX, y: rotateY });\n    };\n\n    /**\n     * Reset rotation on mouse leave\n     */\n    const handleMouseLeave = () => {\n      if (!autoRotate) {\n        setRotation({ x: 0, y: 0 });\n      }\n    };\n\n    /**\n     * Handle parallax scrolling\n     */\n    useEffect(() => {\n      if (!parallax || prefersReducedMotion) return;\n\n      const handleScroll = () => {\n        setScrollPosition(window.scrollY);\n      };\n\n      window.addEventListener(\"scroll\", handleScroll, { passive: true });\n      return () => {\n        window.removeEventListener(\"scroll\", handleScroll);\n      };\n    }, [parallax, prefersReducedMotion]);\n\n    /**\n     * Container styles\n     */\n    const containerStyles: CSSProperties = {\n      ...style,\n      position: \"relative\",\n      perspective: `${perspective}px`,\n      transformStyle: \"preserve-3d\",\n    };\n\n    /**\n     * Content wrapper styles\n     */\n    const contentStyles: CSSProperties = {\n      transformStyle: \"preserve-3d\",\n      transform: prefersReducedMotion\n        ? \"none\"\n        : `\n            rotateX(${rotation.x}deg)\n            rotateY(${rotation.y}deg)\n            translateZ(${parallax ? scrollPosition * -0.2 : 0}px)\n          `,\n      transition: autoRotate\n        ? \"none\"\n        : \"transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n    };\n\n    /**\n     * Calculate layer Z position\n     */\n    const getLayerZPosition = (index: number, total: number): number => {\n      if (total <= 1) return 0;\n      return ((index - (total - 1) / 2) * depth) / (total - 1);\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={`dimensional-dashboard-container ${className}`}\n        style={{ ...containerStyles }}\n        onMouseMove={handleMouseMove}\n        onMouseLeave={handleMouseLeave}\n      >\n        <div\n          ref={containerRef}\n          className=\"dimensional-dashboard-content\"\n          style={{ ...contentStyles }}\n        >\n          {/* Render layers */}\n          {layers.length > 0 ? (\n            layers.map((layer, index) => {\n              const zPosition = getLayerZPosition(index, layers.length);\n\n              return (\n                <div\n                  key={index}\n                  className=\"dimensional-dashboard-layer\"\n                  style={{\n                    ...{\n                      position: \"absolute\",\n                      top: 0,\n                      left: 0,\n                      width: \"100%\",\n                      height: \"100%\",\n                      transform: `translateZ(${zPosition}px)`,\n                      transformStyle: \"preserve-3d\",\n                      cursor: onLayerClick ? \"pointer\" : \"default\",\n                    },\n                  }}\n                  onClick={() => onLayerClick?.(index)}\n                  role={onLayerClick ? \"button\" : undefined}\n                  tabIndex={onLayerClick ? 0 : undefined}\n                  onKeyDown={\n                    onLayerClick\n                      ? (e) => {\n                          if (e.key === \"Enter\" || e.key === \" \") {\n                            e.preventDefault();\n                            onLayerClick(index);\n                          }\n                        }\n                      : undefined\n                  }\n                >\n                  <GlassContainer\n                    style={{\n                      ...{\n                        width: \"100%\",\n                        height: \"100%\",\n                        opacity: 1 - Math.abs(zPosition) / (depth * 2),\n                      },\n                    }}\n                  >\n                    {layer}\n                  </GlassContainer>\n                </div>\n              );\n            })\n          ) : (\n            // Single content layer\n            <GlassContainer\n              style={{\n                width: \"100%\",\n                height: \"100%\",\n              }}\n            >\n              {children}\n            </GlassContainer>\n          )}\n        </div>\n\n        <style>{`\n          .dimensional-dashboard-container {\n            width: 100%;\n            height: 100%;\n            overflow: hidden;\n          }\n\n          .dimensional-dashboard-content {\n            width: 100%;\n            height: 100%;\n            position: relative;\n          }\n\n          .dimensional-dashboard-layer:focus-visible {\n            outline: 2px solid var(--aura-accent-color, hsl(var(--glass-color-info)));\n            outline-offset: 4px;\n          }\n\n          @media (prefers-reduced-motion: reduce) {\n            .dimensional-dashboard-content {\n              transform: none !important;\n              transition: none !important;\n            }\n            .dimensional-dashboard-layer {\n              transform: none !important;\n            }\n          }\n        `}</style>\n      </div>\n    );\n  }\n);\n\nDimensionalDashboardContainer.displayName = \"DimensionalDashboardContainer\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  Calendar as CalendarIcon,\n  ChevronLeft,\n  ChevronRight,\n  Clock,\n  MapPin,\n  Users,\n} from \"@/icons\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { Motion } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { CardContent, CardHeader, CardTitle, GlassCard } from \"../card\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface CalendarEvent {\n  id: string;\n  title: string;\n  date: Date;\n  startTime?: string;\n  endTime?: string;\n  description?: string;\n  location?: string;\n  attendees?: string[];\n  type?: \"meeting\" | \"event\" | \"reminder\" | \"task\";\n  color?: string;\n}\n\nexport interface GlassCalendarProps {\n  /**\n   * Currently selected date\n   */\n  selectedDate?: Date;\n  /**\n   * Callback when date is selected\n   */\n  onDateSelect?: (date: Date) => void;\n  /**\n   * Events to display on the calendar\n   */\n  events?: CalendarEvent[];\n  /**\n   * Calendar view mode\n   */\n  view?: \"month\" | \"week\" | \"day\";\n  /**\n   * Show events in calendar cells\n   */\n  showEvents?: boolean;\n  /**\n   * Highlight today's date\n   */\n  showToday?: boolean;\n  /**\n   * Show weekend days\n   */\n  showWeekends?: boolean;\n  /**\n   * Custom date formatting\n   */\n  dateFormat?: \"short\" | \"long\" | \"numeric\";\n  /**\n   * Locale for date formatting\n   */\n  locale?: string;\n  /**\n   * Minimum selectable date\n   */\n  minDate?: Date;\n  /**\n   * Maximum selectable date\n   */\n  maxDate?: Date;\n  /**\n   * Custom className\n   */\n  className?: string;\n  /** Compact mode for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Contain calendar height in a bounded viewport. */\n  contained?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum number of week rows to render. Useful for compact previews. */\n  maxRows?: number;\n  /** Alias for maxRows, optimized for documentation/catalog previews. */\n  weeksToShow?: number;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n}\n\n/**\n * GlassCalendar component\n * A full-featured calendar with glassmorphism styling and event support\n */\nexport const GlassCalendar: React.FC<GlassCalendarProps> = ({\n  selectedDate,\n  onDateSelect,\n  events = [],\n  view = \"month\",\n  showEvents = true,\n  showToday = true,\n  showWeekends = true,\n  dateFormat = \"short\",\n  locale = \"en-US\",\n  minDate,\n  maxDate,\n  className,\n  compact = false,\n  contained = false,\n  maxHeight,\n  maxRows,\n  weeksToShow,\n  loading = false,\n  ...props\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const [currentDate, setCurrentDate] = useState(selectedDate || new Date());\n  const [selectedDateState, setSelectedDateState] = useState<Date | null>(\n    selectedDate || null\n  );\n  const effectiveShowEvents = compact ? false : showEvents;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const compactWeekLimit =\n    maxRows ?? weeksToShow ?? (compact || contained ? 3 : undefined);\n\n  useEffect(() => {\n    if (selectedDate) {\n      setSelectedDateState(selectedDate);\n      setCurrentDate(selectedDate);\n    }\n  }, [selectedDate]);\n\n  const startOfDay = (date: Date) => {\n    const normalizedDate = new Date(date);\n    normalizedDate.setHours(0, 0, 0, 0);\n    return normalizedDate;\n  };\n\n  // Get events for a specific date - OPTIMIZED with memoization\n  const eventsByDate = useMemo(() => {\n    const eventMap = new Map<string, CalendarEvent[]>();\n\n    if (!events || !Array.isArray(events)) return eventMap;\n\n    events.forEach((event: any) => {\n      const eventDate = new Date(event.date);\n      const dateKey = eventDate.toDateString();\n\n      if (!eventMap.has(dateKey)) {\n        eventMap.set(dateKey, []);\n      }\n      eventMap.get(dateKey)!.push(event);\n    });\n\n    return eventMap;\n  }, [events]);\n\n  const getEventsForDate = (date: Date) => {\n    return eventsByDate.get(date.toDateString()) || [];\n  };\n\n  // Get month data\n  const monthData = useMemo(() => {\n    const year = currentDate.getFullYear();\n    const month = currentDate.getMonth();\n\n    const firstDay = new Date(year, month, 1);\n    const lastDay = new Date(year, month + 1, 0);\n    const startDate = new Date(firstDay);\n    startDate.setDate(startDate.getDate() - firstDay.getDay());\n\n    const weeks: Date[][] = [];\n    let currentWeek: Date[] = [];\n    const currentDateIter = new Date(startDate);\n\n    // SAFE calendar generation - prevent infinite loops\n    let dayCount = 0;\n    const maxDays = 42; // 6 weeks max = prevent infinite loops\n\n    while (\n      dayCount < maxDays &&\n      (currentDateIter <= lastDay || currentWeek.length < 7)\n    ) {\n      currentWeek.push(new Date(currentDateIter));\n\n      if (currentWeek.length === 7) {\n        weeks.push([...currentWeek]);\n        currentWeek = [];\n      }\n\n      currentDateIter.setDate(currentDateIter.getDate() + 1);\n      dayCount++;\n\n      // Safety break for full weeks\n      if (weeks.length >= 6) break;\n    }\n\n    if (currentWeek.length > 0) {\n      weeks.push(currentWeek);\n    }\n\n    return {\n      year,\n      month,\n      monthName: new Intl.DateTimeFormat(locale, { month: \"long\" }).format(\n        currentDate\n      ),\n      weeks,\n    };\n  }, [currentDate, locale]);\n\n  const visibleWeeks = useMemo(() => {\n    if (!compactWeekLimit || compactWeekLimit >= monthData.weeks.length) {\n      return monthData.weeks;\n    }\n\n    const clampedLimit = Math.max(1, Math.min(6, compactWeekLimit));\n    const selectedWeekIndex =\n      selectedDateState === null\n        ? -1\n        : monthData.weeks.findIndex((week) =>\n            week.some(\n              (date) =>\n                date.toDateString() === selectedDateState?.toDateString()\n            )\n          );\n    const today = new Date();\n    const todayIndex = monthData.weeks.findIndex((week) =>\n      week.some((date) => date.toDateString() === today.toDateString())\n    );\n    const anchorIndex =\n      selectedWeekIndex >= 0\n        ? selectedWeekIndex\n        : todayIndex >= 0\n          ? todayIndex\n          : 0;\n    const start = Math.max(\n      0,\n      Math.min(anchorIndex, monthData.weeks.length - clampedLimit)\n    );\n    return monthData.weeks.slice(start, start + clampedLimit);\n  }, [compactWeekLimit, monthData.weeks, selectedDateState]);\n\n  // Navigate to previous/next month\n  const navigateMonth = (direction: \"prev\" | \"next\") => {\n    setCurrentDate((prev: any) => {\n      const newDate = new Date(prev);\n      if (direction === \"prev\") {\n        newDate.setMonth(newDate.getMonth() - 1);\n      } else {\n        newDate.setMonth(newDate.getMonth() + 1);\n      }\n      return newDate;\n    });\n  };\n\n  // Check if date is today\n  const isToday = (date: Date) => {\n    const today = new Date();\n    return date.toDateString() === today.toDateString();\n  };\n\n  // Check if date is selected\n  const isSelected = (date: Date) => {\n    return (\n      selectedDateState &&\n      date.toDateString() === selectedDateState.toDateString()\n    );\n  };\n\n  // Check if date is in current month\n  const isCurrentMonth = (date: Date) => {\n    return date.getMonth() === currentDate.getMonth();\n  };\n\n  // Check if date is disabled\n  const isDisabled = (date: Date) => {\n    const day = startOfDay(date);\n    if (minDate && day < startOfDay(minDate)) return true;\n    if (maxDate && day > startOfDay(maxDate)) return true;\n    return false;\n  };\n\n  // Handle date click\n  const handleDateClick = (date: Date) => {\n    if (isDisabled(date)) return;\n\n    setSelectedDateState(date);\n    onDateSelect?.(date);\n  };\n\n  // Get event type color\n  const getEventColor = (event: CalendarEvent) => {\n    if (event.color) return event.color;\n\n    switch (event.type) {\n      case \"meeting\":\n        return \"bg-blue-500/80\";\n      case \"event\":\n        return \"bg-green-500/80\";\n      case \"reminder\":\n        return \"bg-yellow-500/80\";\n      case \"task\":\n        return \"bg-purple-500/80\";\n      default:\n        return \"bg-gray-500/80\";\n    }\n  };\n\n  // Loading skeleton\n  if (loading) {\n    return (\n      <GlassCard data-glass-component className={cn(\"glass-p-6\", className)}>\n        <div\n          className={cn(\n            prefersReducedMotion\n              ? \"glass-gap-4\"\n              : \"glass-animate-pulse glass-gap-4\"\n          )}\n        >\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-h-8 glass-surface-subtle/20 glass-radius-md glass-w-32 glass-contrast-guard\"></div>\n            <div className=\"glass-flex glass-gap-2\">\n              <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-md glass-contrast-guard\"></div>\n              <div className=\"glass-w-8 glass-h-8 glass-surface-subtle/20 glass-radius-md glass-contrast-guard\"></div>\n            </div>\n          </div>\n          <div className=\"glass-grid glass-grid-cols-7 glass-gap-2\">\n            {Array.from({ length: 35 }).map((_: any, i: any) => (\n              <div\n                key={i}\n                className=\"glass-aspect-square glass-surface-subtle/10 glass-radius-lg glass-contrast-guard\"\n              ></div>\n            ))}\n          </div>\n        </div>\n      </GlassCard>\n    );\n  }\n\n  return (\n    <div className=\"glass-w-full glass-typography-reset\">\n      <GlassCard\n        variant=\"elevated\"\n        className={cn(\"overflow-hidden\", className)}\n        style={{\n          maxHeight:\n            resolvedMaxHeight ?? (compact || contained ? \"220px\" : undefined),\n          overflow:\n            compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n        }}\n        {...props}\n      >\n        {/* Calendar Header */}\n        <CardHeader\n          className={cn(\n            \"glass-border-b glass-border-white/10\",\n            compact && \"glass-p-3\"\n          )}\n        >\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-justify-between glass-flex-wrap\",\n              compact ? \"glass-gap-2\" : \"glass-gap-3\"\n            )}\n          >\n            <CardTitle\n              className={cn(\n                \"glass-font-semibold glass-text-primary glass-flex glass-items-center glass-gap-2 glass-min-w-0\",\n                compact ? \"glass-text-base\" : \"glass-subheading\"\n              )}\n            >\n              <CalendarIcon\n                className={cn(\n                  \"glass-flex-shrink-0\",\n                  compact ? \"glass-w-4 glass-h-4\" : \"glass-w-6 glass-h-6\"\n                )}\n              />\n              {monthData.monthName} {monthData.year}\n            </CardTitle>\n\n            <div\n              className={cn(\n                \"glass-flex glass-items-center glass-flex-wrap\",\n                compact ? \"glass-gap-1\" : \"glass-gap-2\"\n              )}\n            >\n              {/* Month navigation: glass morphism buttons */}\n              <GlassButton\n                variant=\"tertiary\"\n                size=\"sm\"\n                onClick={(e) => navigateMonth(\"prev\")}\n                disabled={loading}\n                elevation=\"level1\"\n                intensity=\"medium\"\n                tint=\"neutral\"\n                border=\"subtle\"\n                aria-label=\"Previous month\"\n              >\n                <ChevronLeft className=\"glass-w-4 glass-h-4 glass-focus glass-touch-target glass-contrast-guard\" />\n              </GlassButton>\n\n              {!compact && (\n                <GlassButton\n                  variant=\"tertiary\"\n                  size=\"sm\"\n                  onClick={(e) => setCurrentDate(new Date())}\n                  disabled={loading}\n                  elevation=\"level1\"\n                  intensity=\"medium\"\n                  tint=\"neutral\"\n                  border=\"subtle\"\n                >\n                  Today\n                </GlassButton>\n              )}\n\n              <GlassButton\n                variant=\"tertiary\"\n                size=\"sm\"\n                onClick={(e) => navigateMonth(\"next\")}\n                disabled={loading}\n                elevation=\"level1\"\n                intensity=\"medium\"\n                tint=\"neutral\"\n                border=\"subtle\"\n                aria-label=\"Next month\"\n              >\n                <ChevronRight className=\"glass-w-4 glass-h-4 glass-focus glass-touch-target glass-contrast-guard\" />\n              </GlassButton>\n            </div>\n          </div>\n        </CardHeader>\n\n        {/* Calendar Grid */}\n        <CardContent className={compact ? \"glass-p-2\" : \"glass-p-4\"}>\n          {/* Week day headers */}\n          <div\n            className={cn(\n              \"glass-grid\",\n              compact ? \"glass-gap-1 glass-mb-2\" : \"glass-gap-2 glass-mb-4\"\n            )}\n            style={{\n              gridTemplateColumns: `repeat(${showWeekends ? 7 : 5}, minmax(0, 1fr))`,\n            }}\n          >\n            {[\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"].map(\n              (day, index) => {\n                const isWeekend = index === 0 || index === 6;\n                if (!showWeekends && isWeekend) return null;\n\n                return (\n                  <div\n                    key={day}\n                    className={cn(\n                      \"text-center glass-body font-medium glass-radius-lg\",\n                      compact ? \"glass-py-1 glass-text-xs\" : \"glass-py-2\",\n                      isWeekend\n                        ? \"glass-text-primary/60\"\n                        : \"glass-text-primary/80\"\n                    )}\n                  >\n                    {day}\n                  </div>\n                );\n              }\n            )}\n          </div>\n\n          {/* Calendar days */}\n          <div\n            className={cn(\n              \"glass-grid\",\n              compact ? \"glass-gap-1\" : \"glass-gap-2\"\n            )}\n            style={{\n              gridTemplateColumns: `repeat(${showWeekends ? 7 : 5}, minmax(0, 1fr))`,\n            }}\n          >\n            {visibleWeeks.flat().map((date, index) => {\n              const dateKey = date.toDateString();\n              const dayEvents = eventsByDate.get(dateKey) || [];\n              const hasEvents = dayEvents.length > 0;\n              const isWeekend = date.getDay() === 0 || date.getDay() === 6;\n\n              if (!showWeekends && isWeekend) return null;\n\n              return (\n                <div\n                  key={`${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`}\n                  className=\"glass-aspect-square\"\n                >\n                  <button\n                    onClick={(e) => handleDateClick(date)}\n                    disabled={isDisabled(date)}\n                    className={cn(\n                      \"w-full h-full glass-radius-lg glass-focus glass-accent-primary glass-touch-target glass-contrast-guard\",\n                      \"flex flex-col items-center justify-start\",\n                      compact ? \"glass-p-0.5\" : \"glass-p-1\",\n                      prefersReducedMotion\n                        ? \"transition-none hover:bg-white/10 focus:bg-white/15 focus:outline-none\"\n                        : \"transition-all duration-200 hover:bg-white/10 focus:bg-white/15 focus:outline-none glass-hover-scale-105\",\n                      \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n                      {\n                        \"glass-foundation-complete glass-backdrop-blur bg-transparent border-white/40\":\n                          isSelected(date) ||\n                          (isToday(date) && showToday && !isSelected(date)),\n                        \"glass-text-primary/60\": !isCurrentMonth(date),\n                        \"glass-text-primary/90\": isCurrentMonth(date),\n                      }\n                    )}\n                    aria-label={`Select date ${date.toLocaleDateString(locale, { month: \"long\", day: \"numeric\", year: \"numeric\" })}`}\n                  >\n                    <span className=\"glass-body glass-font-medium glass-leading-none glass-touch-target glass-contrast-guard\">\n                      {date.getDate()}\n                    </span>\n\n                    {/* Events indicator */}\n                    {effectiveShowEvents && hasEvents && (\n                      <div className=\"glass-flex glass-flex-col glass-gap-0.5 glass-mt-1 glass-w-full\">\n                        {dayEvents.slice(0, 2).map((event) => (\n                          <div\n                            key={event.id}\n                            className={cn(\n                              \"w-full h-1 glass-radius-full\",\n                              getEventColor(event)\n                            )}\n                          />\n                        ))}\n                        {dayEvents.length > 2 && (\n                          <div className=\"glass-w-full glass-text-xs glass-text-primary-glass-opacity-60 glass-text-center\">\n                            +{dayEvents.length - 2}\n                          </div>\n                        )}\n                      </div>\n                    )}\n                  </button>\n                </div>\n              );\n            })}\n          </div>\n\n          {/* Selected date events */}\n          {selectedDateState && effectiveShowEvents && (\n            <div className=\"glass-mt-6 glass-pt-4 glass-border-t glass-border-white/10\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-3\">\n                Events for{\" \"}\n                {selectedDateState.toLocaleDateString(locale, {\n                  weekday: \"long\",\n                  month: \"long\",\n                  day: \"numeric\",\n                })}\n              </h3>\n\n              <div className=\"glass-gap-3\">\n                {(eventsByDate.get(selectedDateState.toDateString()) || []).map(\n                  (event) => (\n                    <div key={event.id} className=\"glass-w-full\">\n                      <GlassCard className=\"glass-foundation-complete glass-backdrop-blur-md glass-bg-transparent glass-border-white/40 glass-shadow-2xl glass-p-4 hover:glass-shadow-2xl hover:glass-bg-transparent glass-transition-all glass-cursor-pointer glass-contrast-guard\">\n                        <div className=\"glass-flex glass-items-start glass-gap-3\">\n                          <div\n                            className={cn(\n                              \"w-3 h-3 glass-radius-full glass-mt-2 flex-shrink-0\",\n                              getEventColor(event)\n                            )}\n                          />\n\n                          <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                            <h4 className=\"glass-font-medium glass-text-primary glass-text-sm\">\n                              {event.title}\n                            </h4>\n\n                            <div className=\"glass-flex glass-items-center glass-gap-4 glass-mt-2 glass-text-xs glass-text-primary-opacity-70\">\n                              {event.startTime && (\n                                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                  <Clock className=\"glass-w-3 glass-h-3\" />\n                                  {event.startTime}\n                                  {event.endTime && ` - ${event.endTime}`}\n                                </div>\n                              )}\n\n                              {event.location && (\n                                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                  <MapPin className=\"glass-w-3 glass-h-3\" />\n                                  {event.location}\n                                </div>\n                              )}\n\n                              {event.attendees &&\n                                event.attendees.length > 0 && (\n                                  <div className=\"glass-flex glass-items-center glass-gap-1\">\n                                    <Users className=\"glass-w-3 glass-h-3\" />\n                                    {event.attendees.length} attendee\n                                    {event.attendees.length !== 1 ? \"s\" : \"\"}\n                                  </div>\n                                )}\n                            </div>\n\n                            {event.description && (\n                              <p className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-2 glass-line-clamp-2\">\n                                {event.description}\n                              </p>\n                            )}\n                          </div>\n                        </div>\n                      </GlassCard>\n                    </div>\n                  )\n                )}\n\n                {(eventsByDate.get(selectedDateState.toDateString()) || [])\n                  .length === 0 && (\n                  <div className=\"glass-text-center glass-text-primary-glass-opacity-50 glass-py-8\">\n                    No events scheduled for this date\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n        </CardContent>\n      </GlassCard>\n    </div>\n  );\n};\n\n// Calendar Event Card Component\nexport interface GlassCalendarEventCardProps {\n  event: CalendarEvent;\n  compact?: boolean;\n  onClick?: () => void;\n  className?: string;\n}\n\nexport const GlassCalendarEventCard: React.FC<GlassCalendarEventCardProps> = ({\n  event,\n  compact = false,\n  onClick,\n  className,\n}) => {\n  const getEventTypeIcon = (type?: string) => {\n    switch (type) {\n      case \"meeting\":\n        return <Users className=\"glass-w-4 glass-h-4\" />;\n      case \"event\":\n        return <CalendarIcon className=\"glass-w-4 glass-h-4\" />;\n      case \"reminder\":\n        return <Clock className=\"glass-w-4 glass-h-4\" />;\n      default:\n        return <CalendarIcon className=\"glass-w-4 glass-h-4\" />;\n    }\n  };\n\n  const getEventColor = (event: CalendarEvent) => {\n    if (event.color) return event.color;\n\n    switch (event.type) {\n      case \"meeting\":\n        return \"border-l-blue-500\";\n      case \"event\":\n        return \"border-l-green-500\";\n      case \"reminder\":\n        return \"border-l-yellow-500\";\n      case \"task\":\n        return \"border-l-purple-500\";\n      default:\n        return \"border-l-gray-500\";\n    }\n  };\n\n  if (compact) {\n    return (\n      <div\n        className={cn(\n          \"flex items-center glass-gap-2 glass-p-2 glass-radius-lg border-l-4 bg-white/5\",\n          getEventColor(event),\n          onClick && \"cursor-pointer hover:bg-white/10 transition-colors\",\n          className\n        )}\n        onClick={onClick}\n      >\n        {getEventTypeIcon(event.type)}\n        <div className=\"glass-flex-1 glass-min-glass-w-0 glass-focus glass-touch-target glass-contrast-guard\">\n          <p className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n            {event.title}\n          </p>\n          {event.startTime && (\n            <p className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n              {event.startTime}\n            </p>\n          )}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <GlassCard\n      variant=\"outline\"\n      className={cn(\n        \"glass-p-4\",\n        onClick && \"cursor-pointer hover:bg-white/5 transition-colors\",\n        className\n      )}\n      onClick={onClick}\n    >\n      <div className=\"glass-flex glass-items-start glass-gap-3 glass-focus glass-touch-target glass-contrast-guard\">\n        <div\n          className={cn(\n            \"glass-p-2 glass-radius-lg bg-white/10\",\n            getEventColor(event).replace(\"border-l-\", \"text-\")\n          )}\n        >\n          {getEventTypeIcon(event.type)}\n        </div>\n\n        <div className=\"glass-flex-1 glass-min-glass-w-0\">\n          <h3 className=\"glass-font-medium glass-text-primary\">\n            {event.title}\n          </h3>\n\n          <div className=\"glass-flex glass-items-center glass-gap-4 glass-mt-2 glass-text-sm glass-text-primary-opacity-70\">\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <CalendarIcon className=\"glass-w-4 glass-h-4\" />\n              {event.date.toLocaleDateString()}\n            </div>\n\n            {event.startTime && (\n              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                <Clock className=\"glass-w-4 glass-h-4\" />\n                {event.startTime}\n                {event.endTime && ` - ${event.endTime}`}\n              </div>\n            )}\n\n            {event.location && (\n              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                <MapPin className=\"glass-w-4 glass-h-4\" />\n                {event.location}\n              </div>\n            )}\n          </div>\n\n          {event.description && (\n            <p className=\"glass-text-sm glass-text-primary-glass-opacity-60 glass-mt-2\">\n              {event.description}\n            </p>\n          )}\n\n          {event.attendees && event.attendees.length > 0 && (\n            <div className=\"glass-flex glass-items-center glass-gap-1 glass-mt-2\">\n              <Users className=\"glass-w-4 glass-h-4 glass-text-primary-glass-opacity-60\" />\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                {event.attendees.join(\", \")}\n              </span>\n            </div>\n          )}\n        </div>\n      </div>\n    </GlassCard>\n  );\n};\n\nexport default GlassCalendar;\n", "\"use client\";\nimport React, { forwardRef, useState, useCallback } from \"react\";\nimport { Glass } from \"../../../primitives\";\nimport { Motion } from \"../../../primitives\";\nimport { GlassGrid, GlassGridItem } from \"../../layout/GlassGrid\";\nimport { GlassCard } from \"../../card/GlassCard\";\nimport { GlassButton, IconButton } from \"../../button/GlassButton\";\nimport { PageHeader } from \"../../layout/GlassAppShell\";\nimport { VStack, HStack } from \"../../layout/GlassStack\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface DashboardTableRow {\n  name?: React.ReactNode;\n  value?: React.ReactNode;\n}\n\nexport interface DashboardWidgetData extends Record<string, unknown> {\n  value?: React.ReactNode;\n  label?: React.ReactNode;\n  change?: number;\n  title?: React.ReactNode;\n  chartType?: string;\n  rows?: DashboardTableRow[];\n  content?: React.ReactNode;\n}\n\nexport interface DashboardWidget {\n  id: string;\n  title: string;\n  type: \"metric\" | \"chart\" | \"table\" | \"text\" | \"custom\";\n  size: {\n    cols: 1 | 2 | 3 | 4 | 6 | 12;\n    rows: 1 | 2 | 3 | 4;\n  };\n  position: {\n    x: number;\n    y: number;\n  };\n  data?: DashboardWidgetData;\n  config?: Record<string, unknown>;\n  component?: React.ComponentType<DashboardWidgetRendererProps>;\n  editable?: boolean;\n  removable?: boolean;\n  resizable?: boolean;\n}\n\nexport interface DashboardWidgetRendererProps {\n  widget: DashboardWidget;\n}\n\nexport interface DashboardLayout {\n  id: string;\n  name: string;\n  widgets: DashboardWidget[];\n  cols: number;\n  gap: \"sm\" | \"md\" | \"lg\";\n}\n\nexport interface GlassDashboardProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Dashboard title\n   */\n  title?: string;\n  /**\n   * Dashboard description\n   */\n  description?: string;\n  /**\n   * Dashboard layout\n   */\n  layout?: DashboardLayout;\n  /**\n   * Available widget types for adding\n   */\n  availableWidgets?: Array<{\n    type: string;\n    title: string;\n    icon: React.ReactNode;\n    defaultSize: DashboardWidget[\"size\"];\n  }>;\n  /**\n   * Whether dashboard is in edit mode\n   */\n  editMode?: boolean;\n  /**\n   * Edit mode change handler\n   */\n  onEditModeChange?: (editMode: boolean) => void;\n  /**\n   * Layout change handler\n   */\n  onLayoutChange?: (layout: DashboardLayout) => void;\n  /**\n   * Widget add handler\n   */\n  onWidgetAdd?: (widget: Partial<DashboardWidget>) => void;\n  /**\n   * Widget remove handler\n   */\n  onWidgetRemove?: (widgetId: string) => void;\n  /**\n   * Widget update handler\n   */\n  onWidgetUpdate?: (\n    widgetId: string,\n    updates: Partial<DashboardWidget>\n  ) => void;\n  /**\n   * Drag and drop enabled\n   */\n  dragEnabled?: boolean;\n  /**\n   * Custom widget renderers\n   */\n  widgetRenderers?: Record<\n    string,\n    React.ComponentType<DashboardWidgetRendererProps>\n  >;\n  /**\n   * Dashboard actions\n   */\n  actions?: React.ReactNode;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Empty state component\n   */\n  emptyState?: React.ReactNode;\n  /**\n   * Compact rendering for constrained cards and docs previews.\n   */\n  compact?: boolean;\n  /**\n   * Keep the dashboard bounded inside its parent instead of assuming a page-scale layout.\n   */\n  contained?: boolean;\n  /**\n   * Whether to render the dashboard header.\n   */\n  showHeader?: boolean;\n  /**\n   * Whether to render actions in the header.\n   */\n  showActions?: boolean;\n  /**\n   * Whether to render edit toolbar controls.\n   */\n  showToolbar?: boolean;\n  /**\n   * Explicit dashboard height for embedded layouts.\n   */\n  height?: React.CSSProperties[\"height\"];\n  /**\n   * Explicit dashboard width for embedded layouts.\n   */\n  width?: React.CSSProperties[\"width\"];\n  /**\n   * Maximum dashboard height for embedded layouts.\n   */\n  maxHeight?: React.CSSProperties[\"maxHeight\"];\n}\n\n/**\n * GlassDashboard component\n * Drag-and-drop dashboard with glassmorphism widgets\n */\n// Default layout for when no layout is provided\nconst DEFAULT_LAYOUT: DashboardLayout = {\n  id: \"default\",\n  name: \"Default Dashboard\",\n  widgets: [],\n  cols: 4,\n  gap: \"md\",\n};\n\nexport const GlassDashboard = forwardRef<HTMLDivElement, GlassDashboardProps>(\n  (\n    {\n      title = \"Dashboard\",\n      description,\n      layout = DEFAULT_LAYOUT,\n      availableWidgets = [],\n      editMode = false,\n      onEditModeChange,\n      onLayoutChange,\n      onWidgetAdd,\n      onWidgetRemove,\n      onWidgetUpdate,\n      dragEnabled = true,\n      widgetRenderers = {},\n      actions,\n      loading = false,\n      emptyState,\n      compact = false,\n      contained = false,\n      showHeader = true,\n      showActions = true,\n      showToolbar = true,\n      height,\n      width,\n      maxHeight,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const [draggedWidget, setDraggedWidget] = useState<string | null>(null);\n    const [dragOverPosition, setDragOverPosition] = useState<{\n      x: number;\n      y: number;\n    } | null>(null);\n    const isBounded =\n      compact || contained || height !== undefined || maxHeight !== undefined;\n    const gridCols = compact ? Math.min(layout.cols, 2) : layout.cols;\n    const gridMinHeightClass = isBounded\n      ? \"glass-min-glass-h-0\"\n      : \"glass-min-glass-h-96\";\n    const dashboardStyle: React.CSSProperties = {\n      ...style,\n      width,\n      height,\n      maxHeight: maxHeight ?? (compact || contained ? 420 : undefined),\n      overflow: isBounded ? \"hidden\" : style?.overflow,\n    };\n\n    // Handle drag start\n    const handleDragStart = useCallback(\n      (widgetId: string) => {\n        if (!editMode || !dragEnabled) return;\n        setDraggedWidget(widgetId);\n      },\n      [editMode, dragEnabled]\n    );\n\n    // Handle drag end\n    const handleDragEnd = useCallback(() => {\n      setDraggedWidget(null);\n      setDragOverPosition(null);\n    }, []);\n\n    // Handle drop\n    const handleDrop = useCallback(\n      (position: { x: number; y: number }) => {\n        if (!draggedWidget || !onWidgetUpdate) return;\n\n        onWidgetUpdate(draggedWidget, {\n          position,\n        });\n\n        handleDragEnd();\n      },\n      [draggedWidget, onWidgetUpdate, handleDragEnd]\n    );\n\n    // Add new widget\n    const handleAddWidget = useCallback(\n      (widgetType: string) => {\n        const widgetTemplate = availableWidgets.find(\n          (w) => w.type === widgetType\n        );\n        if (!widgetTemplate || !onWidgetAdd) return;\n\n        // Find empty position\n        const usedPositions = new Set(\n          layout.widgets.map((w) => `${w.position.x},${w.position.y}`)\n        );\n\n        let position = { x: 0, y: 0 };\n        for (let y = 0; y < 10; y++) {\n          for (let x = 0; x < layout.cols; x++) {\n            const posKey = `${x},${y}`;\n            if (!usedPositions.has(posKey)) {\n              position = { x, y };\n              break;\n            }\n          }\n          if (position.x !== 0 || position.y !== 0) break;\n        }\n\n        onWidgetAdd({\n          title: widgetTemplate.title,\n          type: widgetTemplate.type as\n            | \"metric\"\n            | \"chart\"\n            | \"table\"\n            | \"text\"\n            | \"custom\",\n          size: widgetTemplate.defaultSize,\n          position,\n        });\n      },\n      [availableWidgets, layout.widgets, layout.cols, onWidgetAdd]\n    );\n\n    // Default widget renderers\n    const defaultWidgetRenderers = {\n      metric: ({ widget }: DashboardWidgetRendererProps) => (\n        <VStack space=\"md\">\n          <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n            {widget.data?.value || \"0\"}\n          </div>\n          <div className=\"glass-text-sm glass-text-secondary\">\n            {widget.data?.label || \"Metric\"}\n          </div>\n          {widget.data?.change && (\n            <div\n              className={cn(\n                \"glass-text-xs font-medium\",\n                widget.data?.change > 0 ? \"text-success\" : \"text-destructive\"\n              )}\n            >\n              {widget.data?.change > 0 ? \"+\" : \"\"}\n              {widget.data?.change}%\n            </div>\n          )}\n        </VStack>\n      ),\n      chart: ({ widget }: DashboardWidgetRendererProps) => (\n        <VStack space=\"md\">\n          <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n            {widget.data?.title || \"Chart\"}\n          </div>\n          <div className=\"glass-h-32 glass-surface-subtle glass-radius-md glass-flex glass-items-center glass-justify-center\">\n            <span className=\"glass-text-secondary\">\n              {widget.data?.chartType\n                ? `${widget.data?.chartType} Chart`\n                : \"Chart Widget\"}\n            </span>\n          </div>\n        </VStack>\n      ),\n      table: ({ widget }: DashboardWidgetRendererProps) => (\n        <VStack space=\"md\">\n          <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n            {widget.data?.title || \"Table\"}\n          </div>\n          <div className=\"glass-auto-gap glass-auto-gap-sm\">\n            {(widget.data?.rows || []).slice(0, 3).map((row, index) => (\n              <div\n                key={index}\n                className=\"glass-flex glass-justify-between glass-text-sm\"\n              >\n                <span className=\"glass-text-primary\">{row.name}</span>\n                <span className=\"glass-text-secondary\">{row.value}</span>\n              </div>\n            ))}\n          </div>\n        </VStack>\n      ),\n      text: ({ widget }: { widget: DashboardWidget }) => (\n        <div className=\"glass-text-sm glass-text-primary\">\n          {widget.data?.content || widget.data?.title || \"Text Widget\"}\n        </div>\n      ),\n    };\n\n    // Render widget\n    const renderWidget = (widget: DashboardWidget) => {\n      const WidgetRenderer =\n        widgetRenderers?.[widget.type] ||\n        defaultWidgetRenderers?.[\n          widget.type as keyof typeof defaultWidgetRenderers\n        ] ||\n        widget.component;\n\n      if (!WidgetRenderer) {\n        return (\n          <div\n            data-glass-component\n            className=\"glass-h-full glass-flex glass-items-center glass-justify-center glass-text-secondary\"\n          >\n            Unknown widget type: {widget.type}\n          </div>\n        );\n      }\n\n      return <WidgetRenderer widget={widget} />;\n    };\n\n    // Render add widget menu\n    const renderAddWidgetMenu = () => {\n      if (!editMode || (availableWidgets?.length || 0) === 0) return null;\n\n      return (\n        <div className=\"glass-grid glass-grid-cols-2 glass-gap-2 glass-p-2\">\n          {availableWidgets.map((widgetType) => (\n            <GlassButton\n              key={widgetType.type}\n              variant=\"ghost\"\n              size=\"sm\"\n              leftIcon={widgetType.icon}\n              onClick={(e) => handleAddWidget(widgetType.type)}\n              className=\"glass-justify-start glass-focus glass-touch-target\"\n            >\n              {widgetType.title}\n            </GlassButton>\n          ))}\n        </div>\n      );\n    };\n\n    if (loading) {\n      return (\n        <div className=\"glass-flex glass-items-center glass-justify-center glass-h-64\">\n          <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n        </div>\n      );\n    }\n\n    if ((layout.widgets?.length || 0) === 0 && emptyState) {\n      return emptyState;\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"w-full glass-auto-gap\",\n          compact ? \"glass-auto-gap-md\" : \"glass-auto-gap-2xl\",\n          contained && \"glass-contained\",\n          className\n        )}\n        style={dashboardStyle}\n        data-glass-component\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <PageHeader\n            title={title}\n            description={compact ? undefined : description}\n            actions={\n              showActions ? (\n                <HStack space=\"sm\">\n                  {actions}\n                  {showToolbar && (availableWidgets?.length || 0) > 0 && (\n                    <GlassButton\n                      variant={editMode ? \"primary\" : \"outline\"}\n                      size=\"sm\"\n                      leftIcon={editMode ? \"\u2713\" : \"Edit\"}\n                      onClick={(e) => onEditModeChange?.(!editMode)}\n                      className=\"glass-focus glass-touch-target\"\n                    >\n                      {editMode ? \"Done\" : \"Edit\"}\n                    </GlassButton>\n                  )}\n                </HStack>\n              ) : undefined\n            }\n          />\n        )}\n\n        {/* Add widget section */}\n        {showToolbar && editMode && (availableWidgets?.length || 0) > 0 && (\n          <Motion preset=\"slideDown\">\n            <Glass className=\"glass-p-4 glass-radius-lg\">\n              <VStack space=\"sm\">\n                <h3 className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                  Add Widget\n                </h3>\n                {renderAddWidgetMenu()}\n              </VStack>\n            </Glass>\n          </Motion>\n        )}\n\n        {/* Dashboard grid */}\n        <GlassGrid\n          cols={gridCols as 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12}\n          gap={layout.gap}\n          className={cn(\n            gridMinHeightClass,\n            isBounded && \"glass-overflow-y-auto glass-pr-1\"\n          )}\n        >\n          {layout.widgets.map((widget) => (\n            <GlassGridItem\n              key={widget.id}\n              colSpan={\n                compact\n                  ? (Math.min(\n                      widget.size.cols,\n                      gridCols\n                    ) as DashboardWidget[\"size\"][\"cols\"])\n                  : widget.size.cols\n              }\n              rowSpan={\n                compact\n                  ? (Math.min(\n                      widget.size.rows,\n                      2\n                    ) as DashboardWidget[\"size\"][\"rows\"])\n                  : widget.size.rows\n              }\n              className={cn(\n                \"transition-all duration-200\",\n                draggedWidget === widget.id && \"opacity-50 scale-95\",\n                editMode && dragEnabled && \"cursor-move\"\n              )}\n              draggable={editMode && dragEnabled}\n              onDragStart={() => handleDragStart(widget.id)}\n              onDragEnd={handleDragEnd}\n            >\n              <GlassCard\n                variant=\"default\"\n                className={cn(\n                  \"h-full relative group\",\n                  editMode && \"hover:ring-2 hover:ring-primary/50\"\n                )}\n              >\n                {/* Widget header */}\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n                  <h2 className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n                    {widget.title}\n                  </h2>\n                  {editMode && (\n                    <HStack\n                      space=\"xs\"\n                      className=\"glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity\"\n                    >\n                      {widget.removable !== false && (\n                        <IconButton\n                          icon=\"\uD83D\uDDD1\uFE0F\"\n                          variant=\"ghost\"\n                          size=\"xs\"\n                          onClick={(e) => onWidgetRemove?.(widget.id)}\n                          aria-label=\"Remove widget\"\n                          className=\"glass-focus glass-touch-target glass-contrast-guard\"\n                        />\n                      )}\n                      <IconButton\n                        icon=\"\u2699\uFE0F\"\n                        variant=\"ghost\"\n                        size=\"xs\"\n                        onClick={(e) => {\n                          // Handle widget configuration\n                        }}\n                        aria-label=\"Configure widget\"\n                        className=\"glass-focus glass-touch-target glass-contrast-guard\"\n                      />\n                    </HStack>\n                  )}\n                </div>\n\n                {/* Widget content */}\n                <div className=\"glass-flex-1\">{renderWidget(widget)}</div>\n              </GlassCard>\n            </GlassGridItem>\n          ))}\n\n          {/* Drop zones for empty grid positions */}\n          {editMode && draggedWidget && (\n            <>\n              {Array.from({ length: layout.cols * 4 }, (_, index) => {\n                const x = index % layout.cols;\n                const y = Math.floor(index / layout.cols);\n                const isOccupied = layout.widgets.some(\n                  (w) => w.position.x === x && w.position.y === y\n                );\n\n                if (isOccupied) return null;\n\n                return (\n                  <GlassGridItem\n                    key={`drop-zone-${x}-${y}`}\n                    colSpan={1}\n                    rowSpan={1}\n                    className=\"glass-min-glass-h-24\"\n                    style={{ gridColumnStart: x + 1, gridRowStart: y + 1 }}\n                  >\n                    <div\n                      className=\"glass-h-full glass-border-2 glass-border-dashed glass-border-primary/30 glass-radius-lg glass-surface-primary/5 glass-flex glass-items-center glass-justify-center glass-transition-colors hover:glass-border-primary/50 hover:glass-surface-primary/10\"\n                      onDragOver={(e) => {\n                        e.preventDefault();\n                        setDragOverPosition({ x, y });\n                      }}\n                      onDrop={(e) => {\n                        e.preventDefault();\n                        handleDrop({ x, y });\n                      }}\n                    >\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        Drop here\n                      </span>\n                    </div>\n                  </GlassGridItem>\n                );\n              })}\n            </>\n          )}\n        </GlassGrid>\n      </div>\n    );\n  }\n);\n\nGlassDashboard.displayName = \"GlassDashboard\";\n", "\"use client\";\nimport React, { forwardRef, useState } from \"react\";\nimport { GlassButton, IconButton } from \"@/components/button\";\nimport { cn } from \"../../../lib/utilsComprehensive\";\nimport { GlassCard } from \"@/components/card\";\nimport { GlassBadge } from \"@/components/data-display\";\nimport { GlassGrid, GlassGridItem } from \"@/components/layout\";\nimport { HStack, VStack } from \"@/components/layout\";\nimport { Motion } from \"@/primitives\";\n\nexport interface DetailField {\n  id: string;\n  label: string;\n  value: unknown;\n  type?: \"text\" | \"number\" | \"date\" | \"boolean\" | \"badge\" | \"link\" | \"custom\";\n  render?: (value: unknown) => React.ReactNode;\n  copyable?: boolean;\n  width?: \"auto\" | \"full\" | \"half\" | \"third\" | \"quarter\";\n}\n\nexport interface DetailSection {\n  id: string;\n  title: string;\n  description?: string;\n  fields?: DetailField[];\n  component?: React.ReactNode;\n  collapsible?: boolean;\n  defaultExpanded?: boolean;\n}\n\nexport interface DetailTab {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: string | number;\n  content: React.ReactNode;\n}\n\nexport interface DetailAction {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  variant?: \"default\" | \"primary\" | \"secondary\" | \"error\";\n  onClick: () => void;\n  disabled?: boolean;\n  loading?: boolean;\n}\n\nexport interface GlassDetailViewProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Detail item title\n   */\n  title?: string;\n  /**\n   * Detail item subtitle\n   */\n  subtitle?: string;\n  /**\n   * Status badge\n   */\n  status?: {\n    label: string;\n    variant?:\n      | \"default\"\n      | \"primary\"\n      | \"secondary\"\n      | \"success\"\n      | \"warning\"\n      | \"error\";\n  };\n  /**\n   * Breadcrumb navigation\n   */\n  breadcrumb?: React.ReactNode;\n  /**\n   * Header actions\n   */\n  actions?: DetailAction[];\n  /**\n   * Detail sections\n   */\n  sections?: DetailSection[];\n  /**\n   * Detail tabs\n   */\n  tabs?: DetailTab[];\n  /**\n   * Active tab\n   */\n  activeTab?: string;\n  /**\n   * Tab change handler\n   */\n  onTabChange?: (tabId: string) => void;\n  /**\n   * Layout variant\n   */\n  layout?: \"default\" | \"sidebar\" | \"tabs\" | \"accordion\";\n  /**\n   * Sidebar content (for sidebar layout)\n   */\n  sidebar?: React.ReactNode;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Error state\n   */\n  error?: string;\n  /**\n   * Back action\n   */\n  onBack?: () => void;\n  /**\n   * Share action\n   */\n  onShare?: () => void;\n  /**\n   * Print action\n   */\n  onPrint?: () => void;\n  /**\n   * Compact preview/card layout.\n   */\n  compact?: boolean;\n  /**\n   * Bound the detail view inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained detail views.\n   */\n  maxHeight?: number | string;\n}\n\n/**\n * GlassDetailView component\n * Comprehensive detail view with multiple layout options\n */\nexport const GlassDetailView = forwardRef<HTMLDivElement, GlassDetailViewProps>(\n  (\n    {\n      title = \"Detail View\",\n      subtitle,\n      status,\n      breadcrumb,\n      actions = [],\n      sections = [],\n      tabs = [],\n      activeTab,\n      onTabChange,\n      layout = \"default\",\n      sidebar,\n      loading = false,\n      error,\n      onBack,\n      onShare,\n      onPrint,\n      compact = false,\n      contained = false,\n      maxHeight,\n      className,\n      children,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const stringifyFieldValue = (value: unknown): string => {\n      if (value == null) return \"\";\n      if (\n        typeof value === \"string\" ||\n        typeof value === \"number\" ||\n        typeof value === \"boolean\"\n      ) {\n        return String(value);\n      }\n      if (value instanceof Date) {\n        return value.toISOString();\n      }\n      return JSON.stringify(value);\n    };\n\n    const [expandedSections, setExpandedSections] = useState<Set<string>>(\n      new Set(\n        sections.filter((s) => s.defaultExpanded !== false).map((s) => s.id)\n      )\n    );\n    const [currentTab, setCurrentTab] = useState(activeTab || tabs[0]?.id);\n    const boundedHeight = maxHeight ?? (compact || contained ? 260 : undefined);\n\n    // Toggle section expansion\n    const toggleSection = (sectionId: string) => {\n      const newExpanded = new Set(expandedSections);\n      if (newExpanded.has(sectionId)) {\n        newExpanded.delete(sectionId);\n      } else {\n        newExpanded.add(sectionId);\n      }\n      setExpandedSections(newExpanded);\n    };\n\n    // Handle tab change\n    const handleTabChange = (tabId: string) => {\n      setCurrentTab(tabId);\n      onTabChange?.(tabId);\n    };\n\n    // Render field value\n    const renderFieldValue = (field: DetailField) => {\n      if (field.render) {\n        return field.render(field.value);\n      }\n\n      switch (field.type) {\n        case \"boolean\":\n          return (\n            <GlassBadge\n              data-glass-component\n              variant={Boolean(field.value) ? \"success\" : \"error\"}\n              size=\"xs\"\n            >\n              {Boolean(field.value) ? \"Yes\" : \"No\"}\n            </GlassBadge>\n          );\n        case \"badge\":\n          return (\n            <GlassBadge variant=\"outline\" size=\"xs\">\n              {stringifyFieldValue(field.value)}\n            </GlassBadge>\n          );\n        case \"link\":\n          const href = stringifyFieldValue(field.value);\n          return (\n            <a\n              href={href}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              className=\"glass-text-primary hover:glass-underline glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              {href}\n            </a>\n          );\n        case \"date\":\n          return new Date(\n            stringifyFieldValue(field.value)\n          ).toLocaleDateString();\n        case \"number\":\n          return typeof field.value === \"number\"\n            ? field.value.toLocaleString()\n            : stringifyFieldValue(field.value);\n        default:\n          return stringifyFieldValue(field.value);\n      }\n    };\n\n    // Render field\n    const renderField = (field: DetailField) => {\n      const widthClasses = {\n        auto: \"w-auto\",\n        full: \"w-full\",\n        half: \"w-1/2\",\n        third: \"w-1/3\",\n        quarter: \"w-1/4\",\n      };\n\n      return (\n        <div\n          key={field.id}\n          className={cn(\n            \"glass-auto-gap glass-auto-gap-xs\",\n            widthClasses[field.width || \"auto\"]\n          )}\n        >\n          <label className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n            {field.label}\n          </label>\n          <HStack space=\"sm\" align=\"center\">\n            <div className=\"glass-text-sm glass-text-primary\">\n              {renderFieldValue(field)}\n            </div>\n            {field.copyable && (\n              <IconButton\n                icon=\"\uD83D\uDCCB\"\n                variant=\"ghost\"\n                size=\"xs\"\n                onClick={(e) =>\n                  navigator.clipboard?.writeText(String(field.value))\n                }\n                aria-label=\"Copy to clipboard\"\n                className=\"glass-focus glass-touch-target\"\n              />\n            )}\n          </HStack>\n        </div>\n      );\n    };\n\n    // Render section\n    const renderSection = (section: DetailSection) => {\n      const isExpanded = expandedSections.has(section.id);\n\n      return (\n        <Motion key={section.id} type=\"slide\" direction=\"down\">\n          <GlassCard\n            variant=\"default\"\n            className={compact ? \"glass-p-3\" : undefined}\n          >\n            {/* Section header */}\n            <div\n              className={cn(\n                \"flex items-center justify-between\",\n                section.collapsible &&\n                  \"cursor-pointer glass-focus glass-touch-target\"\n              )}\n              onClick={\n                section.collapsible\n                  ? () => toggleSection(section.id)\n                  : undefined\n              }\n            >\n              <VStack space=\"xs\">\n                <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                  {section.title}\n                </h3>\n                {section.description && (\n                  <p className=\"glass-text-sm glass-text-secondary\">\n                    {section.description}\n                  </p>\n                )}\n              </VStack>\n\n              {section.collapsible && (\n                <GlassButton\n                  leftIcon={isExpanded ? \"\u2212\" : \"+\"}\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  aria-label={\n                    isExpanded ? \"Collapse section\" : \"Expand section\"\n                  }\n                />\n              )}\n            </div>\n\n            {/* Section content */}\n            {(!section.collapsible || isExpanded) && (\n              <Motion type=\"slide\" direction=\"down\" className=\"glass-mt-6\">\n                {section.component ? (\n                  section.component\n                ) : section.fields ? (\n                  <div\n                    className={cn(\n                      \"glass-grid glass-grid-cols-1\",\n                      compact\n                        ? \"glass-gap-3\"\n                        : \"md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6\"\n                    )}\n                  >\n                    {(compact\n                      ? section.fields.slice(0, 4)\n                      : section.fields\n                    ).map(renderField)}\n                  </div>\n                ) : null}\n              </Motion>\n            )}\n          </GlassCard>\n        </Motion>\n      );\n    };\n\n    // Render tabs\n    const renderTabs = () => {\n      if (tabs.length === 0) return null;\n\n      return (\n        <VStack space=\"md\">\n          {/* Tab navigation */}\n          <div className=\"glass-border-b glass-border-glass-border/20\">\n            <nav className=\"glass-flex glass-space-x-8\">\n              {tabs.map((tab) => (\n                <GlassButton\n                  key={tab.id}\n                  onClick={(e) => handleTabChange(tab.id)}\n                  className={cn(\n                    \"flex items-center glass-gap-2 glass-py-2 glass-px-1 border-b-2 transition-colors glass-focus glass-touch-target\",\n                    currentTab === tab.id\n                      ? \"border-primary text-primary font-medium\"\n                      : \"border-transparent glass-text-secondary hover:text-foreground\"\n                  )}\n                >\n                  {tab.icon}\n                  <span>{tab.label}</span>\n                  {tab.badge && (\n                    <GlassBadge variant=\"outline\" size=\"xs\">\n                      {tab.badge}\n                    </GlassBadge>\n                  )}\n                </GlassButton>\n              ))}\n            </nav>\n          </div>\n\n          {/* Tab content */}\n          <div>{tabs.find((tab) => tab.id === currentTab)?.content}</div>\n        </VStack>\n      );\n    };\n\n    // Render header\n    const renderHeader = () => (\n      <VStack space=\"md\">\n        {/* Breadcrumb */}\n        {breadcrumb && (\n          <div className=\"glass-text-sm glass-text-secondary\">{breadcrumb}</div>\n        )}\n\n        {/* Title section */}\n        <HStack space=\"md\" align=\"center\" justify=\"between\">\n          <HStack space=\"md\" align=\"center\">\n            {onBack && (\n              <GlassButton\n                leftIcon=\"\u2190\"\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={onBack}\n                aria-label=\"Go back\"\n                className=\"glass-focus glass-touch-target\"\n              />\n            )}\n\n            <VStack space=\"xs\">\n              <HStack space=\"sm\" align=\"center\">\n                <h1 className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {title}\n                </h1>\n                {status && (\n                  <GlassBadge variant={status.variant} size=\"sm\">\n                    {status.label}\n                  </GlassBadge>\n                )}\n              </HStack>\n\n              {subtitle && (\n                <p className=\"glass-text-lg glass-text-secondary\">{subtitle}</p>\n              )}\n            </VStack>\n          </HStack>\n\n          {/* Actions */}\n          <HStack space=\"sm\" align=\"center\">\n            {!compact && onShare && (\n              <GlassButton\n                leftIcon=\"\uD83D\uDCE4\"\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={onShare}\n                aria-label=\"Share\"\n                className=\"glass-focus glass-touch-target\"\n              />\n            )}\n\n            {!compact && onPrint && (\n              <GlassButton\n                leftIcon=\"\uD83D\uDDA8\uFE0F\"\n                variant=\"ghost\"\n                size=\"sm\"\n                onClick={onPrint}\n                aria-label=\"Print\"\n                className=\"glass-focus glass-touch-target\"\n              />\n            )}\n\n            {!compact &&\n              actions.map((action) => (\n                <GlassButton\n                  key={action.id}\n                  variant={action.variant}\n                  size=\"sm\"\n                  leftIcon={action.icon}\n                  onClick={action.onClick}\n                  disabled={action.disabled}\n                  loading={action.loading}\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  {action.label}\n                </GlassButton>\n              ))}\n          </HStack>\n        </HStack>\n      </VStack>\n    );\n\n    // Render content based on layout\n    const renderContent = () => {\n      if (loading) {\n        return (\n          <div className=\"glass-flex glass-items-center glass-justify-center glass-h-64\">\n            <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n          </div>\n        );\n      }\n\n      if (error) {\n        return (\n          <GlassCard variant=\"default\" className=\"glass-p-8 glass-text-center\">\n            <div className=\"glass-text-danger glass-font-medium glass-mb-2\">\n              Error\n            </div>\n            <div className=\"glass-text-secondary\">{error}</div>\n          </GlassCard>\n        );\n      }\n\n      switch (layout) {\n        case \"sidebar\":\n          return (\n            <GlassGrid cols={12} gap=\"lg\">\n              <GlassGridItem colSpan={8}>\n                <VStack space=\"lg\">\n                  {tabs.length > 0 ? renderTabs() : sections.map(renderSection)}\n                  {children}\n                </VStack>\n              </GlassGridItem>\n              <GlassGridItem colSpan={4}>{sidebar}</GlassGridItem>\n            </GlassGrid>\n          );\n\n        case \"tabs\":\n          return renderTabs();\n\n        case \"accordion\":\n          return (\n            <VStack space=\"md\">\n              {sections\n                .map((section) => ({\n                  ...section,\n                  collapsible: true,\n                }))\n                .map(renderSection)}\n              {children}\n            </VStack>\n          );\n\n        default:\n          return (\n            <VStack space=\"lg\">\n              {sections.map(renderSection)}\n              {tabs.length > 0 && renderTabs()}\n              {children}\n            </VStack>\n          );\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"w-full\",\n          compact\n            ? \"glass-auto-gap glass-auto-gap-md\"\n            : \"glass-auto-gap glass-auto-gap-3xl\",\n          (compact || contained) && \"glass-overflow-auto\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n              }\n            : null),\n          ...(props.style as React.CSSProperties | undefined),\n        }}\n        role=\"article\"\n        aria-label={ariaLabel || title || \"Detail View\"}\n        data-testid={dataTestId}\n        {...props}\n      >\n        {/* Header */}\n        {renderHeader()}\n\n        {/* Content */}\n        {renderContent()}\n      </div>\n    );\n  }\n);\n\nGlassDetailView.displayName = \"GlassDetailView\";\n", "\"use client\";\nimport React, { forwardRef, useState } from \"react\";\nimport { Glass } from \"../../../primitives\";\nimport { Motion } from \"../../../primitives\";\nimport {\n  GlassFormBuilder,\n  type FormSection,\n} from \"../../../components/interactive/GlassFormBuilder\";\nimport { GlassButton } from \"../../../components/button/GlassButton\";\nimport { GlassProgress } from \"../../../components/data-display/GlassProgress\";\nimport { PageHeader } from \"../../../components/layout/GlassAppShell\";\nimport { VStack, HStack } from \"../../../components/layout/GlassStack\";\nimport { GlassCard } from \"../../../components/card/GlassCard\";\nimport { cn } from \"../../../lib/utilsComprehensive\";\n\nexport interface FormStep {\n  id: string;\n  title: string;\n  description?: string;\n  sections: FormSection[];\n  optional?: boolean;\n  validation?: (\n    values: GlassFormTemplateValues\n  ) => Promise<Record<string, string>>;\n}\n\nexport type GlassFormTemplateValues = Record<string, unknown>;\n\nexport interface GlassFormTemplateProps\n  extends Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    \"autoSave\" | \"onChange\" | \"onSubmit\"\n  > {\n  /**\n   * Form title\n   */\n  title: string;\n  /**\n   * Form description\n   */\n  description?: string;\n  /**\n   * Form steps (for multi-step forms)\n   */\n  steps?: FormStep[];\n  /**\n   * Single form schema (for single-step forms)\n   */\n  schema?: FormSection[];\n  /**\n   * Form values\n   */\n  values?: GlassFormTemplateValues;\n  /**\n   * Form errors\n   */\n  errors?: Record<string, string>;\n  /**\n   * Whether form is in multi-step mode\n   */\n  multiStep?: boolean;\n  /**\n   * Current step index\n   */\n  currentStep?: number;\n  /**\n   * Step change handler\n   */\n  onStepChange?: (step: number) => void;\n  /**\n   * Form submit handler\n   */\n  onSubmit?: (values: GlassFormTemplateValues) => Promise<void> | void;\n  /**\n   * Form cancel handler\n   */\n  onCancel?: () => void;\n  /**\n   * Value change handler\n   */\n  onChange?: (values: GlassFormTemplateValues) => void;\n  /**\n   * Form validation handler\n   */\n  onValidate?: (values: GlassFormTemplateValues) => Record<string, string>;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Whether form can be saved as draft\n   */\n  allowDraft?: boolean;\n  /**\n   * Draft save handler\n   */\n  onSaveDraft?: (values: GlassFormTemplateValues) => void;\n  /**\n   * Form layout\n   */\n  layout?: \"default\" | \"centered\" | \"sidebar\";\n  /**\n   * Sidebar content (for sidebar layout)\n   */\n  sidebar?: React.ReactNode;\n  /**\n   * Show progress indicator\n   */\n  showProgress?: boolean;\n  /**\n   * Auto-save functionality\n   */\n  autoSave?: boolean;\n  /**\n   * Submit button text\n   */\n  submitText?: string;\n  /**\n   * Cancel button text\n   */\n  cancelText?: string;\n  /**\n   * Next button text\n   */\n  nextText?: string;\n  /**\n   * Previous button text\n   */\n  previousText?: string;\n  /**\n   * Compact preview/card layout.\n   */\n  compact?: boolean;\n  /**\n   * Bound the template inside its parent container.\n   */\n  contained?: boolean;\n  /**\n   * Maximum height for compact/contained templates.\n   */\n  maxHeight?: number | string;\n}\n\n/**\n * GlassFormTemplate component\n * Comprehensive form template with single-step and multi-step support\n */\nexport const GlassFormTemplate = forwardRef<\n  HTMLDivElement,\n  GlassFormTemplateProps\n>(\n  (\n    {\n      title,\n      description,\n      steps = [],\n      schema = [],\n      values = {},\n      errors = {},\n      multiStep = false,\n      currentStep = 0,\n      onStepChange,\n      onSubmit,\n      onCancel,\n      onChange,\n      onValidate,\n      loading = false,\n      allowDraft = false,\n      onSaveDraft,\n      layout = \"default\",\n      sidebar,\n      showProgress = true,\n      autoSave = false,\n      submitText = \"Submit\",\n      cancelText = \"Cancel\",\n      nextText = \"Next\",\n      previousText = \"Previous\",\n      compact = false,\n      contained = false,\n      maxHeight,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValues, setInternalValues] =\n      useState<GlassFormTemplateValues>(values);\n    const [internalErrors, setInternalErrors] =\n      useState<Record<string, string>>(errors);\n    const [stepValidation, setStepValidation] = useState<\n      Record<number, boolean>\n    >({});\n\n    const isMultiStep = multiStep && (steps?.length || 0) > 0;\n    const totalSteps = isMultiStep ? steps?.length || 0 : 1;\n    const currentStepData: FormStep | null = isMultiStep\n      ? steps[currentStep]\n      : null;\n    const currentSchema = isMultiStep ? currentStepData?.sections : schema;\n    const isCompactMode = compact || contained;\n    const compactSchema = isCompactMode\n      ? (currentSchema || []).slice(0, 1).map((section) => ({\n          ...section,\n          description: undefined,\n          fields: section.fields?.slice(0, 2) ?? [],\n        }))\n      : currentSchema;\n    const boundedHeight = maxHeight ?? (isCompactMode ? 220 : undefined);\n\n    // Handle value change\n    const handleValueChange = (newValues: GlassFormTemplateValues) => {\n      setInternalValues(newValues);\n      onChange?.(newValues);\n    };\n\n    // Handle form validation\n    const handleValidate = async (stepValues: GlassFormTemplateValues) => {\n      let errors: Record<string, string> = {};\n\n      // Global validation\n      if (onValidate) {\n        errors = { ...errors, ...onValidate(stepValues) };\n      }\n\n      // Step-specific validation\n      if (currentStepData?.validation) {\n        const stepErrors = await currentStepData.validation(stepValues);\n        errors = { ...errors, ...stepErrors };\n      }\n\n      setInternalErrors(errors);\n      return errors;\n    };\n\n    // Handle step navigation\n    const handleNext = async () => {\n      if (!isMultiStep || currentStep >= totalSteps - 1) return;\n\n      const errors = await handleValidate(internalValues);\n      const hasErrors = Object.keys(errors).length > 0;\n\n      if (!hasErrors) {\n        setStepValidation({ ...stepValidation, [currentStep]: true });\n        onStepChange?.(currentStep + 1);\n      }\n    };\n\n    const handlePrevious = () => {\n      if (!isMultiStep || currentStep <= 0) return;\n      onStepChange?.(currentStep - 1);\n    };\n\n    // Handle form submission\n    const handleSubmit = async (formValues: GlassFormTemplateValues) => {\n      if (isMultiStep) {\n        const errors = await handleValidate(formValues);\n        const hasErrors = Object.keys(errors).length > 0;\n\n        if (hasErrors) return;\n\n        if (currentStep < totalSteps - 1) {\n          handleNext();\n          return;\n        }\n      }\n\n      await onSubmit?.(formValues);\n    };\n\n    // Handle draft save\n    const handleSaveDraft = () => {\n      onSaveDraft?.(internalValues);\n    };\n\n    // Calculate progress\n    const getProgress = () => {\n      if (!isMultiStep) return 100;\n      return ((currentStep + 1) / totalSteps) * 100;\n    };\n\n    // Render step indicator\n    const renderStepIndicator = () => {\n      if (!isMultiStep || !showProgress) return null;\n\n      return (\n        <VStack data-glass-component space=\"md\">\n          <HStack space=\"sm\" align=\"center\" justify=\"between\">\n            <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n              Step {currentStep + 1} of {totalSteps}\n            </span>\n            <span className=\"glass-text-sm glass-text-secondary\">\n              {Math.round(getProgress())}% Complete\n            </span>\n          </HStack>\n\n          <GlassProgress\n            value={getProgress()}\n            size=\"sm\"\n            variant=\"default\"\n            showValue={false}\n          />\n\n          <div className=\"glass-flex glass-justify-between\">\n            {steps.map((step, index) => (\n              <div\n                key={step.id}\n                className={cn(\n                  \"flex flex-col items-center glass-gap-2 cursor-pointer transition-opacity\",\n                  index > currentStep && \"opacity-50\",\n                  index < currentStep && \"opacity-75\"\n                )}\n                onClick={(e) => stepValidation[index] && onStepChange?.(index)}\n              >\n                <div\n                  className={cn(\n                    \"w-8 h-8 glass-radius-full flex items-center justify-center glass-text-sm font-medium\",\n                    index === currentStep\n                      ? \"bg-primary text-primary-foreground\"\n                      : index < currentStep\n                        ? \"bg-success text-success-foreground\"\n                        : \"bg-muted glass-text-secondary\"\n                  )}\n                >\n                  {index < currentStep ? \"\u2713\" : index + 1}\n                </div>\n                <span className=\"glass-text-xs glass-text-center glass-max-w-16 glass-truncate\">\n                  {step.title}\n                </span>\n              </div>\n            ))}\n          </div>\n        </VStack>\n      );\n    };\n\n    // Render form actions\n    const renderFormActions = () => (\n      <HStack space=\"sm\" align=\"center\" justify=\"between\">\n        <HStack space=\"sm\">\n          {onCancel && (\n            <GlassButton variant=\"ghost\" onClick={onCancel} disabled={loading}>\n              {cancelText}\n            </GlassButton>\n          )}\n\n          {allowDraft && (\n            <GlassButton\n              variant=\"outline\"\n              onClick={handleSaveDraft}\n              disabled={loading}\n            >\n              Save Draft\n            </GlassButton>\n          )}\n        </HStack>\n\n        <HStack space=\"sm\">\n          {isMultiStep && currentStep > 0 && (\n            <GlassButton\n              variant=\"ghost\"\n              onClick={handlePrevious}\n              disabled={loading}\n            >\n              {previousText}\n            </GlassButton>\n          )}\n\n          <GlassButton variant=\"default\" type=\"submit\" loading={loading}>\n            {isMultiStep && currentStep < totalSteps - 1\n              ? nextText\n              : submitText}\n          </GlassButton>\n        </HStack>\n      </HStack>\n    );\n\n    // Render form content\n    const renderFormContent = () => (\n      <VStack space={isCompactMode ? \"sm\" : \"lg\"}>\n        {/* Step indicator */}\n        {!compact && renderStepIndicator()}\n\n        {/* Current step header */}\n        {!compact && isMultiStep && currentStepData && (\n          <VStack space=\"sm\">\n            <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n              {currentStepData.title}\n            </h2>\n            {currentStepData.description && (\n              <p className=\"glass-text-secondary\">\n                {currentStepData.description}\n              </p>\n            )}\n          </VStack>\n        )}\n\n        {/* Form */}\n        <div className=\"glass-flex-1\">\n          <GlassFormBuilder\n            schema={compactSchema || []}\n            values={internalValues}\n            errors={internalErrors}\n            onChange={handleValueChange}\n            onSubmit={handleSubmit}\n            onValidate={onValidate}\n            variant={isCompactMode ? \"compact\" : \"default\"}\n            size={isCompactMode ? \"sm\" : \"md\"}\n            validateOnChange={true}\n            autoSave={autoSave}\n            showProgress={false}\n            submitText=\"\"\n            showCancel={false}\n            className={\n              isCompactMode ? \"glass-form-template-compact-builder\" : undefined\n            }\n          />\n        </div>\n\n        {/* Actions */}\n        {!compact && renderFormActions()}\n      </VStack>\n    );\n\n    // Render layout\n    const renderLayout = () => {\n      switch (layout) {\n        case \"centered\":\n          return (\n            <div className=\"glass-max-w-2xl glass-mx-auto\">\n              <GlassCard\n                variant=\"default\"\n                className={isCompactMode ? \"glass-p-3\" : \"glass-p-8\"}\n              >\n                {renderFormContent()}\n              </GlassCard>\n            </div>\n          );\n\n        case \"sidebar\":\n          return (\n            <div className=\"glass-grid glass-grid-cols-12 glass-gap-8\">\n              <div className=\"glass-col-span-8\">\n                <GlassCard\n                  variant=\"default\"\n                  className={isCompactMode ? \"glass-p-3\" : \"glass-p-6\"}\n                >\n                  {renderFormContent()}\n                </GlassCard>\n              </div>\n              <div className=\"glass-col-span-4\">{sidebar}</div>\n            </div>\n          );\n\n        default:\n          return (\n            <GlassCard\n              variant=\"default\"\n              className={isCompactMode ? \"glass-p-3\" : \"glass-p-6\"}\n            >\n              {renderFormContent()}\n            </GlassCard>\n          );\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"w-full\",\n          isCompactMode\n            ? \"glass-auto-gap glass-auto-gap-md\"\n            : \"glass-auto-gap glass-auto-gap-3xl\",\n          isCompactMode && \"glass-overflow-hidden\",\n          className\n        )}\n        style={{\n          ...(boundedHeight !== undefined\n            ? {\n                maxHeight:\n                  typeof boundedHeight === \"number\"\n                    ? `${boundedHeight}px`\n                    : boundedHeight,\n                overflow: \"hidden\",\n              }\n            : null),\n          ...(props.style as React.CSSProperties | undefined),\n        }}\n        {...props}\n      >\n        {/* Header */}\n        {!compact && (\n          <PageHeader\n            title={title}\n            description={description}\n            variant={layout === \"centered\" ? \"centered\" : \"default\"}\n          />\n        )}\n\n        {/* Form */}\n        <Motion preset=\"fadeIn\">{renderLayout()}</Motion>\n      </div>\n    );\n  }\n);\n\nGlassFormTemplate.displayName = \"GlassFormTemplate\";\n", "'use client';\nimport React, { forwardRef } from \"react\";\nimport { Motion } from \"../../../primitives\";\nimport { GlassProgress } from \"../../../components/data-display/GlassProgress\";\nimport { VStack, HStack } from \"../../../components/layout/GlassStack\";\nimport { cn } from \"../../../lib/utilsComprehensive\";\n\nexport interface StepIndicatorProps {\n  step: {\n    id: string;\n    title: string;\n    description?: string;\n    optional?: boolean;\n  };\n  index: number;\n  isActive: boolean;\n  isCompleted: boolean;\n  isClickable: boolean;\n  onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n  layout?: \"default\" | \"compact\" | \"vertical\";\n}\n\nexport interface GlassFormWizardStepsProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Wizard steps\n   */\n  steps: Array<{\n    id: string;\n    title: string;\n    description?: string;\n    optional?: boolean;\n  }>;\n  /**\n   * Current active step index\n   */\n  currentStep: number;\n  /**\n   * Set of completed step indices\n   */\n  completedSteps: Set<number>;\n  /**\n   * Step click handler\n   */\n  onStepClick?: (stepIndex: number) => void;\n  /**\n   * Layout variant\n   */\n  layout?: \"default\" | \"compact\" | \"vertical\";\n  /**\n   * Show progress bar\n   */\n  showProgress?: boolean;\n  /**\n   * Show step numbers\n   */\n  showNumbers?: boolean;\n  /**\n   * Allow clicking on steps\n   */\n  clickable?: boolean;\n}\n\n/**\n * StepIndicator component\n * Individual step indicator for wizard navigation\n */\nconst StepIndicator = forwardRef<HTMLDivElement, StepIndicatorProps>(\n  (\n    {\n      step,\n      index,\n      isActive,\n      isCompleted,\n      isClickable,\n      onClick,\n      layout = \"default\",\n    },\n    ref\n  ) => {\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (isClickable && onClick) {\n        onClick(event);\n      }\n    };\n\n    const renderStepIcon = () => {\n      if (isCompleted) {\n        return (\n          <div\n            data-glass-component\n            className='glass-w-8 glass-h-8 glass-radius-full glass-surface-success glass-flex glass-items-center glass-justify-center'\n          >\n            <svg\n              className='glass-w-4 glass-h-4 glass-text-success-foreground'\n              fill=\"currentColor\"\n              viewBox=\"0 0 20 20\"\n            >\n              <path\n                fillRule=\"evenodd\"\n                d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n                clipRule=\"evenodd\"\n              />\n            </svg>\n          </div>\n        );\n      }\n\n      return (\n        <div\n          className={cn(\n            \"w-8 h-8 glass-radius-full flex items-center justify-center glass-text-sm font-medium border-2 transition-colors\",\n            isActive\n              ? \"bg-primary border-primary text-primary-foreground\"\n              : \"bg-background border-border glass-text-secondary\"\n          )}\n        >\n          {index + 1}\n        </div>\n      );\n    };\n\n    const renderStepContent = () => {\n      if (layout === \"compact\") {\n        return renderStepIcon();\n      }\n\n      return (\n        <VStack space=\"xs\" align=\"center\">\n          {renderStepIcon()}\n          <VStack space=\"xs\" align=\"center\">\n            <span\n              className={cn(\n                \"glass-text-sm font-medium transition-colors\",\n                isActive\n                  ? \"text-primary\"\n                  : isCompleted\n                    ? \"text-success\"\n                    : \"glass-text-secondary\"\n              )}\n            >\n              {step.title}\n            </span>\n            {step.optional && (\n              <span className=\"glass-text-xs glass-text-secondary glass-surface-subtle glass-px-1.5 glass-py-0.5 glass-radius-md\">\n                Optional\n              </span>\n            )}\n          </VStack>\n        </VStack>\n      );\n    };\n\n    if (layout === \"vertical\") {\n      return (\n        <div ref={ref} className=\"glass-flex glass-items-start glass-gap-4\">\n          <div className=\"glass-flex glass-flex-col glass-items-center\">\n            {renderStepIcon()}\n            {index < step.title.length - 1 && (\n              <div\n                className={cn(\n                  \"w-0.5 h-8 glass-mt-2 transition-colors\",\n                  isCompleted ? \"bg-success\" : \"bg-border\"\n                )}\n              />\n            )}\n          </div>\n          <VStack space=\"xs\" className=\"glass-flex-1\">\n            <span\n              className={cn(\n                \"font-medium transition-colors\",\n                isActive\n                  ? \"text-primary\"\n                  : isCompleted\n                    ? \"text-success\"\n                    : \"glass-text-secondary\"\n              )}\n            >\n              {step.title}\n            </span>\n            {step.description && (\n              <p className=\"glass-text-sm glass-text-secondary\">\n                {step.description}\n              </p>\n            )}\n            {step.optional && (\n              <span className='glass-text-xs glass-text-secondary glass-surface-subtle glass-px-1.5 glass-py-0.5 glass-radius-md glass-w-fit'>\n                Optional\n              </span>\n            )}\n          </VStack>\n        </div>\n      );\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"flex flex-col items-center transition-opacity\",\n          isClickable && \"cursor-pointer hover:opacity-80\",\n          !isClickable && \"cursor-default\"\n        )}\n        onClick={handleClick}\n      >\n        {renderStepContent()}\n      </div>\n    );\n  }\n);\n\nStepIndicator.displayName = \"StepIndicator\";\n\n/**\n * GlassFormWizardSteps component\n * Step indicator and navigation for wizard forms\n */\nexport const GlassFormWizardSteps = forwardRef<\n  HTMLDivElement,\n  GlassFormWizardStepsProps\n>(\n  (\n    {\n      steps = [],\n      currentStep,\n      completedSteps,\n      onStepClick,\n      layout = \"default\",\n      showProgress = true,\n      showNumbers = true,\n      clickable = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const totalSteps = steps?.length || 0;\n    const progressValue =\n      totalSteps > 0 ? ((currentStep + 1) / totalSteps) * 100 : 0;\n\n    const handleStepClick = (stepIndex: number) => {\n      if (clickable && onStepClick) {\n        onStepClick(stepIndex);\n      }\n    };\n\n    const isStepClickable = (stepIndex: number) => {\n      if (!clickable) return false;\n      // Allow clicking on current step, completed steps, and next step if previous is completed\n      return (\n        stepIndex === currentStep ||\n        completedSteps.has(stepIndex) ||\n        (stepIndex === currentStep + 1 && completedSteps.has(stepIndex - 1))\n      );\n    };\n\n    const renderProgressBar = () => {\n      if (!showProgress) return null;\n\n      return (\n        <VStack space=\"sm\">\n          <HStack space=\"sm\" align=\"center\" justify=\"between\">\n            <span className='glass-text-sm glass-font-medium glass-text-primary'>\n              Step {currentStep + 1} of {totalSteps}\n            </span>\n            <span className=\"glass-text-sm glass-text-secondary\">\n              {Math.round(progressValue)}% Complete\n            </span>\n          </HStack>\n\n          <GlassProgress\n            value={progressValue}\n            size=\"sm\"\n            variant=\"default\"\n            showValue={false}\n          />\n        </VStack>\n      );\n    };\n\n    const renderSteps = () => {\n      if (layout === \"vertical\") {\n        return (\n          <VStack space=\"md\">\n            {steps.map((step, index) => (\n              <div\n                key={step.id}\n                className='glass-animate-slide-in-left'\n                style={{\n                  animationDelay: `${Math.min(index, 5) * 100}ms`,\n                  animationFillMode: \"both\",\n                }}\n              >\n                <StepIndicator\n                  step={step}\n                  index={index}\n                  isActive={index === currentStep}\n                  isCompleted={completedSteps.has(index)}\n                  isClickable={isStepClickable(index)}\n                  onClick={(e) => handleStepClick(index)}\n                  layout={layout}\n                />\n              </div>\n            ))}\n          </VStack>\n        );\n      }\n\n      return (\n        <div\n          className={cn(\n            \"flex items-center\",\n            layout === \"compact\"\n              ? \"justify-center glass-gap-2\"\n              : \"justify-between\"\n          )}\n        >\n          {steps.map((step, index) => (\n            <React.Fragment key={step.id}>\n              <div\n                className='glass-animate-slide-in-up'\n                style={{\n                  animationDelay: `${Math.min(index, 5) * 100}ms`,\n                  animationFillMode: \"both\",\n                }}\n              >\n                <StepIndicator\n                  step={step}\n                  index={index}\n                  isActive={index === currentStep}\n                  isCompleted={completedSteps.has(index)}\n                  isClickable={isStepClickable(index)}\n                  onClick={(e) => handleStepClick(index)}\n                  layout={layout}\n                />\n              </div>\n\n              {/* Connector line */}\n              {index < totalSteps - 1 && layout !== \"compact\" && (\n                <div\n                  className={cn(\n                    \"flex-1 h-0.5 glass-mx-4 transition-colors\",\n                    completedSteps.has(index) ? \"bg-success\" : \"bg-border\"\n                  )}\n                />\n              )}\n            </React.Fragment>\n          ))}\n        </div>\n      );\n    };\n\n    return (\n      <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n        <VStack space=\"lg\">\n          {renderProgressBar()}\n          {renderSteps()}\n        </VStack>\n      </div>\n    );\n  }\n);\n\nGlassFormWizardSteps.displayName = \"GlassFormWizardSteps\";", "\"use client\";\nimport React, { forwardRef, useCallback, useEffect, useState } from \"react\";\nimport { GlassButton } from \"@/components/button\";\nimport { cn } from \"../../../lib/utilsComprehensive\";\nimport { GlassCard } from \"@/components/card\";\nimport {\n  GlassFormBuilder,\n  type FormSection,\n} from \"@/components/interactive/GlassFormBuilder\";\nimport { HStack, VStack } from \"@/components/layout\";\nimport { Glass } from \"@/primitives\";\nimport { Motion } from \"@/primitives\";\nimport { GlassFormWizardSteps } from \"./GlassFormWizardSteps\";\n\nexport interface WizardStep {\n  id: string;\n  title: string;\n  description?: string;\n  schema: FormSection[];\n  validation?: (\n    values: GlassWizardTemplateValues\n  ) => Promise<Record<string, string>>;\n  optional?: boolean;\n  canSkip?: boolean;\n  component?: React.ReactNode;\n}\n\nexport type GlassWizardTemplateValues = Record<string, unknown>;\n\nexport interface GlassWizardTemplateProps\n  extends Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    \"autoSave\" | \"onChange\" | \"onSubmit\"\n  > {\n  /**\n   * Wizard title\n   */\n  title: string;\n  /**\n   * Wizard description\n   */\n  description?: string;\n  /**\n   * Wizard steps\n   */\n  steps: WizardStep[];\n  /**\n   * Current step index\n   */\n  currentStep?: number;\n  /**\n   * Form values\n   */\n  values?: GlassWizardTemplateValues;\n  /**\n   * Form errors\n   */\n  errors?: Record<string, string>;\n  /**\n   * Step change handler\n   */\n  onStepChange?: (step: number) => void;\n  /**\n   * Form submit handler (called when wizard is completed)\n   */\n  onSubmit?: (values: GlassWizardTemplateValues) => Promise<void> | void;\n  /**\n   * Form cancel handler\n   */\n  onCancel?: () => void;\n  /**\n   * Value change handler\n   */\n  onChange?: (values: GlassWizardTemplateValues) => void;\n  /**\n   * Step validation handler\n   */\n  onStepValidate?: (\n    step: number,\n    values: GlassWizardTemplateValues\n  ) => Promise<Record<string, string>>;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Whether wizard can be saved as draft\n   */\n  allowDraft?: boolean;\n  /**\n   * Draft save handler\n   */\n  onSaveDraft?: (values: GlassWizardTemplateValues) => void;\n  /**\n   * Auto-save functionality\n   */\n  autoSave?: boolean;\n  /**\n   * Show step indicators\n   */\n  showStepIndicator?: boolean;\n  /**\n   * Allow step skipping\n   */\n  allowSkipping?: boolean;\n  /**\n   * Layout variant\n   */\n  layout?: \"default\" | \"compact\" | \"sidebar\";\n  /**\n   * Button text customization\n   */\n  submitText?: string;\n  cancelText?: string;\n  nextText?: string;\n  previousText?: string;\n  skipText?: string;\n  finishText?: string;\n}\n\n/**\n * GlassWizardTemplate component\n * Multi-step wizard template with advanced navigation and validation\n */\nexport const GlassWizardTemplate = forwardRef<\n  HTMLDivElement,\n  GlassWizardTemplateProps\n>(\n  (\n    {\n      title,\n      description,\n      steps,\n      currentStep = 0,\n      values = {},\n      errors = {},\n      onStepChange,\n      onSubmit,\n      onCancel,\n      onChange,\n      onStepValidate,\n      loading = false,\n      allowDraft = false,\n      onSaveDraft,\n      autoSave = false,\n      showStepIndicator = true,\n      allowSkipping = false,\n      layout = \"default\",\n      submitText = \"Submit\",\n      cancelText = \"Cancel\",\n      nextText = \"Next\",\n      previousText = \"Previous\",\n      skipText = \"Skip\",\n      finishText = \"Finish\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValues, setInternalValues] =\n      useState<GlassWizardTemplateValues>(values);\n    const [internalErrors, setInternalErrors] =\n      useState<Record<string, string>>(errors);\n    const [stepValidation, setStepValidation] = useState<\n      Record<number, boolean>\n    >({});\n    const [completedSteps, setCompletedSteps] = useState<Set<number>>(\n      new Set()\n    );\n\n    const totalSteps = steps?.length || 0;\n    const currentStepData = steps?.[currentStep];\n    const isFirstStep = currentStep === 0;\n    const isLastStep = currentStep === totalSteps - 1;\n\n    // Handle value change\n    const handleValueChange = useCallback(\n      (newValues: GlassWizardTemplateValues) => {\n        setInternalValues(newValues);\n        onChange?.(newValues);\n      },\n      [onChange]\n    );\n\n    // Handle step validation\n    const handleStepValidation = useCallback(\n      async (stepIndex: number, stepValues: GlassWizardTemplateValues) => {\n        const step = steps?.[stepIndex];\n        let errors: Record<string, string> = {};\n\n        // Step-specific validation\n        if (step?.validation) {\n          errors = await step.validation(stepValues);\n        }\n\n        // Custom validation handler\n        if (onStepValidate) {\n          const customErrors = await onStepValidate(stepIndex, stepValues);\n          errors = { ...errors, ...customErrors };\n        }\n\n        setInternalErrors(errors);\n        const isValid = Object.keys(errors).length === 0;\n        setStepValidation((prev) => ({ ...prev, [stepIndex]: isValid }));\n\n        return isValid;\n      },\n      [steps, onStepValidate]\n    );\n\n    // Handle next step\n    const handleNext = useCallback(async () => {\n      if (isLastStep) return;\n\n      const isValid = await handleStepValidation(currentStep, internalValues);\n\n      if (isValid) {\n        setCompletedSteps((prev) => new Set([...prev, currentStep]));\n        onStepChange?.(currentStep + 1);\n      }\n    }, [\n      currentStep,\n      isLastStep,\n      handleStepValidation,\n      internalValues,\n      onStepChange,\n    ]);\n\n    // Handle previous step\n    const handlePrevious = useCallback(() => {\n      if (isFirstStep) return;\n      onStepChange?.(currentStep - 1);\n    }, [currentStep, isFirstStep, onStepChange]);\n\n    // Handle skip step\n    const handleSkip = useCallback(() => {\n      if (isLastStep || !currentStepData.canSkip) return;\n      onStepChange?.(currentStep + 1);\n    }, [currentStep, isLastStep, currentStepData?.canSkip, onStepChange]);\n\n    // Handle step click (direct navigation)\n    const handleStepClick = useCallback(\n      (stepIndex: number) => {\n        // Only allow navigation to completed steps or the next step\n        if (stepIndex <= currentStep || completedSteps.has(stepIndex - 1)) {\n          onStepChange?.(stepIndex);\n        }\n      },\n      [currentStep, completedSteps, onStepChange]\n    );\n\n    // Handle form submission\n    const handleSubmit = useCallback(async () => {\n      const isValid = await handleStepValidation(currentStep, internalValues);\n\n      if (isValid) {\n        if (isLastStep) {\n          await onSubmit?.(internalValues);\n        } else {\n          handleNext();\n        }\n      }\n    }, [\n      currentStep,\n      internalValues,\n      isLastStep,\n      handleStepValidation,\n      onSubmit,\n      handleNext,\n    ]);\n\n    // Handle draft save\n    const handleSaveDraft = useCallback(() => {\n      onSaveDraft?.(internalValues);\n    }, [internalValues, onSaveDraft]);\n\n    // Auto-save effect\n    useEffect(() => {\n      if (autoSave && onSaveDraft) {\n        const timeoutId = setTimeout(() => {\n          onSaveDraft(internalValues);\n        }, 2000);\n\n        return () => clearTimeout(timeoutId);\n      }\n    }, [internalValues, autoSave, onSaveDraft]);\n\n    // Render wizard header\n    const renderHeader = () => (\n      <VStack space=\"md\">\n        <VStack space=\"sm\">\n          <h1 className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n            {title}\n          </h1>\n          {description && <p className=\"glass-text-secondary\">{description}</p>}\n        </VStack>\n\n        {showStepIndicator && (\n          <GlassFormWizardSteps\n            steps={steps}\n            currentStep={currentStep}\n            completedSteps={completedSteps}\n            onStepClick={handleStepClick}\n            layout={layout === \"compact\" ? \"compact\" : \"default\"}\n          />\n        )}\n      </VStack>\n    );\n\n    // Render step content\n    const renderStepContent = () => (\n      <VStack space=\"lg\">\n        {/* Step header */}\n        <VStack space=\"sm\">\n          <HStack space=\"sm\" align=\"center\">\n            <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n              {currentStepData.title}\n            </h2>\n            {currentStepData.optional && (\n              <span className=\"glass-text-sm glass-text-secondary glass-surface-subtle glass-px-2 glass-py-1 glass-radius-md\">\n                Optional\n              </span>\n            )}\n          </HStack>\n          {currentStepData.description && (\n            <p className=\"glass-text-secondary\">\n              {currentStepData.description}\n            </p>\n          )}\n        </VStack>\n\n        {/* Step content */}\n        <div className=\"glass-flex-1\">\n          {currentStepData.component ? (\n            currentStepData.component\n          ) : (\n            <GlassFormBuilder\n              schema={currentStepData.schema || []}\n              values={internalValues}\n              errors={internalErrors}\n              onChange={handleValueChange}\n              onSubmit={handleSubmit}\n              validateOnChange={true}\n              autoSave={false}\n              showProgress={false}\n              submitText=\"\"\n              showCancel={false}\n            />\n          )}\n        </div>\n      </VStack>\n    );\n\n    // Render navigation buttons\n    const renderNavigation = () => (\n      <HStack space=\"sm\" align=\"center\" justify=\"between\">\n        <HStack space=\"sm\">\n          {onCancel && (\n            <GlassButton variant=\"ghost\" onClick={onCancel} disabled={loading}>\n              {cancelText}\n            </GlassButton>\n          )}\n\n          {allowDraft && (\n            <GlassButton\n              variant=\"outline\"\n              onClick={handleSaveDraft}\n              disabled={loading}\n            >\n              Save Draft\n            </GlassButton>\n          )}\n        </HStack>\n\n        <HStack space=\"sm\">\n          {!isFirstStep && (\n            <GlassButton\n              variant=\"ghost\"\n              onClick={handlePrevious}\n              disabled={loading}\n            >\n              {previousText}\n            </GlassButton>\n          )}\n\n          {allowSkipping && currentStepData.canSkip && !isLastStep && (\n            <GlassButton\n              variant=\"outline\"\n              onClick={handleSkip}\n              disabled={loading}\n            >\n              {skipText}\n            </GlassButton>\n          )}\n\n          <GlassButton\n            variant=\"default\"\n            onClick={handleSubmit}\n            loading={loading}\n          >\n            {isLastStep ? finishText : nextText}\n          </GlassButton>\n        </HStack>\n      </HStack>\n    );\n\n    // Render layout\n    const renderLayout = () => {\n      const content = (\n        <VStack space=\"lg\">\n          {renderStepContent()}\n          {renderNavigation()}\n        </VStack>\n      );\n\n      switch (layout) {\n        case \"compact\":\n          return (\n            <div data-glass-component className=\"glass-max-w-2xl glass-mx-auto\">\n              <GlassCard variant=\"default\" className=\"glass-p-6\">\n                {content}\n              </GlassCard>\n            </div>\n          );\n\n        case \"sidebar\":\n          return (\n            <div\n              className=\"glass-grid glass-gap-6\"\n              style={{\n                gridTemplateColumns:\n                  \"repeat(auto-fit, minmax(min(100%, 280px), 1fr))\",\n              }}\n            >\n              <div className=\"glass-min-w-0\">\n                <Glass className=\"glass-p-6 glass-sticky glass-top-8\">\n                  <VStack space=\"md\">\n                    <h3 className=\"glass-font-semibold glass-text-primary\">\n                      Steps\n                    </h3>\n                    <VStack space=\"sm\">\n                      {steps.map((step, index) => (\n                        <GlassButton\n                          key={step.id}\n                          onClick={(e) => handleStepClick(index)}\n                          className={cn(\n                            \"glass-w-full text-left glass-p-3 glass-radius-lg transition-colors\",\n                            index === currentStep\n                              ? \"bg-primary/10 text-primary border border-primary/20\"\n                              : completedSteps.has(index)\n                                ? \"bg-success/10 text-success border border-success/20\"\n                                : \"glass-text-secondary hover:bg-muted/50\"\n                          )}\n                          disabled={\n                            index > currentStep &&\n                            !completedSteps.has(index - 1)\n                          }\n                        >\n                          <div className=\"glass-font-medium\">{step.title}</div>\n                          {step.description && (\n                            <div className=\"glass-text-sm glass-opacity-75 glass-mt-1\">\n                              {step.description}\n                            </div>\n                          )}\n                        </GlassButton>\n                      ))}\n                    </VStack>\n                  </VStack>\n                </Glass>\n              </div>\n              <div className=\"glass-min-w-0\">\n                <GlassCard variant=\"default\" className=\"glass-p-6\">\n                  {content}\n                </GlassCard>\n              </div>\n            </div>\n          );\n\n        default:\n          return (\n            <GlassCard variant=\"default\" className=\"glass-p-6\">\n              {content}\n            </GlassCard>\n          );\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"w-full glass-auto-gap glass-auto-gap-3xl\", className)}\n        {...props}\n      >\n        {layout !== \"sidebar\" && renderHeader()}\n\n        <Motion>{renderLayout()}</Motion>\n      </div>\n    );\n  }\n);\n\nGlassWizardTemplate.displayName = \"GlassWizardTemplate\";\n", "\"use client\";\nimport React, { forwardRef, useState, useMemo } from \"react\";\nimport { Glass } from \"../../../primitives\";\nimport { Motion } from \"../../../primitives\";\nimport { GlassSearchInterface } from \"../../../components/interactive/GlassSearchInterface\";\nimport { GlassDataTable } from \"../../../components/data-display/GlassDataTable\";\nimport {\n  GlassButton,\n  IconButton,\n} from \"../../../components/button/GlassButton\";\nimport { GlassBadge } from \"../../../components/data-display/GlassBadge\";\nimport { PageHeader } from \"../../../components/layout/GlassAppShell\";\nimport { VStack, HStack } from \"../../../components/layout/GlassStack\";\nimport { GlassGrid, GlassGridItem } from \"../../../components/layout/GlassGrid\";\nimport { GlassCard } from \"../../../components/card/GlassCard\";\nimport { GlassInput } from \"../../../components/input/GlassInput\";\nimport { cn } from \"@/lib/utils\";\n\nexport type ListCellValue = unknown;\nexport type ListComparableValue = string | number | Date;\nexport type ListFilterRangeValue = readonly [\n  ListComparableValue,\n  ListComparableValue,\n];\nexport type ListFilterMultiValue = readonly ListComparableValue[];\nexport type ListFilterValue =\n  | ListComparableValue\n  | boolean\n  | null\n  | undefined\n  | ListFilterRangeValue\n  | ListFilterMultiValue;\nexport type ListFiltersState = Record<string, ListFilterValue>;\nexport type ListViewMode = \"table\" | \"grid\" | \"list\";\nexport type ListItem = Record<string, ListCellValue> & {\n  id: string;\n};\n\nexport interface ListColumn {\n  id: string;\n  header: string;\n  accessorKey?: string;\n  accessorFn?: (row: ListItem) => ListCellValue;\n  cell?: (props: { row: ListItem; value: ListCellValue }) => React.ReactNode;\n  sortable?: boolean;\n  filterable?: boolean;\n  width?: string | number;\n  align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface ListFilter {\n  id: string;\n  label: string;\n  type: \"select\" | \"multiselect\" | \"range\" | \"date\" | \"text\";\n  options?: Array<{ value: string; label: string; count?: number }>;\n  value?: ListFilterValue;\n  placeholder?: string;\n}\n\nexport interface ListSort {\n  column: string;\n  direction: \"asc\" | \"desc\";\n}\n\nexport interface ListAction {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  variant?: \"default\" | \"primary\" | \"secondary\" | \"error\";\n  onClick: (items: ListItem[]) => void;\n  requiresSelection?: boolean;\n  single?: boolean; // Only for single item selection\n}\n\nexport interface GlassListViewProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Page title\n   */\n  title?: string;\n  /**\n   * Page description\n   */\n  description?: string;\n  /**\n   * List data\n   */\n  data?: ListItem[];\n  /**\n   * Table columns\n   */\n  columns?: ListColumn[];\n  /**\n   * Available filters\n   */\n  filters?: ListFilter[];\n  /**\n   * Active filters\n   */\n  activeFilters?: ListFiltersState;\n  /**\n   * Filter change handler\n   */\n  onFiltersChange?: (filters: ListFiltersState) => void;\n  /**\n   * Search query\n   */\n  searchQuery?: string;\n  /**\n   * Search change handler\n   */\n  onSearchChange?: (query: string) => void;\n  /**\n   * Sort configuration\n   */\n  sort?: ListSort;\n  /**\n   * Sort change handler\n   */\n  onSortChange?: (sort: ListSort) => void;\n  /**\n   * Current page\n   */\n  currentPage?: number;\n  /**\n   * Page size\n   */\n  pageSize?: number;\n  /**\n   * Total items count\n   */\n  totalItems?: number;\n  /**\n   * Pagination change handler\n   */\n  onPaginationChange?: (page: number, pageSize: number) => void;\n  /**\n   * View mode\n   */\n  viewMode?: ListViewMode;\n  /**\n   * View mode change handler\n   */\n  onViewModeChange?: (mode: ListViewMode) => void;\n  /**\n   * Available actions\n   */\n  actions?: ListAction[];\n  /**\n   * Primary action (for create/add)\n   */\n  primaryAction?: {\n    label: string;\n    icon?: React.ReactNode;\n    onClick: () => void;\n  };\n  /**\n   * Selected items\n   */\n  selectedItems?: string[];\n  /**\n   * Selection change handler\n   */\n  onSelectionChange?: (selectedIds: string[]) => void;\n  /**\n   * Row click handler\n   */\n  onRowClick?: (item: ListItem) => void;\n  /**\n   * Loading state\n   */\n  loading?: boolean;\n  /**\n   * Empty state\n   */\n  emptyState?: React.ReactNode;\n  /**\n   * Card renderer for grid/list view\n   */\n  renderCard?: (item: ListItem, index: number) => React.ReactNode;\n  /**\n   * Bulk selection enabled\n   */\n  selectable?: boolean;\n}\n\nconst VIEW_MODES: Array<{ key: ListViewMode; icon: string; label: string }> = [\n  { key: \"table\", icon: \"\uD83D\uDCCA\", label: \"Table\" },\n  { key: \"grid\", icon: \"\u25A6\", label: \"Grid\" },\n  { key: \"list\", icon: \"\u2630\", label: \"List\" },\n];\n\nconst isActiveFilterValue = (\n  value: ListFilterValue\n): value is Exclude<ListFilterValue, null | undefined | \"\"> => {\n  if (value === null || value === undefined || value === \"\") {\n    return false;\n  }\n\n  return !Array.isArray(value) || value.length > 0;\n};\n\nconst toSearchableText = (value: ListCellValue): string => {\n  if (value === null || value === undefined) {\n    return \"\";\n  }\n\n  return String(value);\n};\n\nconst toDisplayText = (value: ListCellValue, fallback = \"\"): string => {\n  if (typeof value === \"string\") {\n    return value || fallback;\n  }\n\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return String(value);\n  }\n\n  return fallback;\n};\n\nconst toFilterControlValue = (\n  value: ListFilterValue\n): string | number | readonly string[] => {\n  if (value === null || value === undefined) {\n    return \"\";\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((item) =>\n      item instanceof Date ? item.toISOString() : String(item)\n    );\n  }\n\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n\n  if (typeof value === \"boolean\") {\n    return String(value);\n  }\n\n  return value as string | number;\n};\n\nconst isComparableFilterValue = (\n  value: ListFilterValue\n): value is ListComparableValue =>\n  typeof value === \"string\" ||\n  typeof value === \"number\" ||\n  value instanceof Date;\n\nconst toComparableNumber = (value: ListCellValue): number | null => {\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? value : null;\n  }\n\n  if (value instanceof Date) {\n    const time = value.getTime();\n    return Number.isFinite(time) ? time : null;\n  }\n\n  if (typeof value === \"string\" && value.trim()) {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  return null;\n};\n\nconst isRangeFilterValue = (\n  value: ListFilterValue\n): value is ListFilterRangeValue =>\n  Array.isArray(value) &&\n  value.length === 2 &&\n  isComparableFilterValue(value[0]) &&\n  isComparableFilterValue(value[1]);\n\nconst matchesRangeFilter = (\n  itemValue: ListCellValue,\n  filterValue: ListFilterRangeValue\n) => {\n  const numericValue = toComparableNumber(itemValue);\n  const min = toComparableNumber(filterValue[0]);\n  const max = toComparableNumber(filterValue[1]);\n\n  if (numericValue === null || min === null || max === null) {\n    return true;\n  }\n\n  return numericValue >= min && numericValue <= max;\n};\n\n/**\n * GlassListView component\n * Comprehensive list view with filtering, search, and multiple view modes\n */\nexport const GlassListView = forwardRef<HTMLDivElement, GlassListViewProps>(\n  (\n    {\n      title = \"List View\",\n      description,\n      data = [],\n      columns = [],\n      filters = [],\n      activeFilters = {},\n      onFiltersChange,\n      searchQuery = \"\",\n      onSearchChange,\n      sort,\n      onSortChange,\n      currentPage = 1,\n      pageSize = 20,\n      totalItems,\n      onPaginationChange,\n      viewMode = \"table\",\n      onViewModeChange,\n      actions = [],\n      primaryAction,\n      selectedItems = [],\n      onSelectionChange,\n      onRowClick,\n      loading = false,\n      emptyState,\n      renderCard,\n      selectable = true,\n      className,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const [showFilters, setShowFilters] = useState(false);\n\n    // Filter and search data locally if no external handlers\n    const filteredData = useMemo(() => {\n      let result = [...data];\n\n      // Apply search\n      if (searchQuery && !onSearchChange) {\n        result = result.filter((item) =>\n          columns.some((column) => {\n            const value = column.accessorFn\n              ? column.accessorFn(item)\n              : column.accessorKey\n                ? item?.[column.accessorKey]\n                : \"\";\n            return toSearchableText(value)\n              .toLowerCase()\n              .includes(searchQuery.toLowerCase());\n          })\n        );\n      }\n\n      // Apply filters\n      if (Object.keys(activeFilters).length > 0 && !onFiltersChange) {\n        result = result.filter((item) => {\n          return Object.entries(activeFilters).every(\n            ([filterId, filterValue]) => {\n              const filter = filters.find((f) => f.id === filterId);\n              if (!filter || !isActiveFilterValue(filterValue)) return true;\n\n              const itemValue = item?.[filterId];\n\n              switch (filter.type) {\n                case \"select\":\n                  return itemValue === filterValue;\n                case \"multiselect\":\n                  return Array.isArray(filterValue)\n                    ? filterValue.includes(itemValue)\n                    : true;\n                case \"text\":\n                  return String(itemValue)\n                    .toLowerCase()\n                    .includes(String(filterValue).toLowerCase());\n                case \"range\":\n                  if (isRangeFilterValue(filterValue)) {\n                    return matchesRangeFilter(itemValue, filterValue);\n                  }\n                  return true;\n                default:\n                  return true;\n              }\n            }\n          );\n        });\n      }\n\n      return result;\n    }, [\n      data,\n      searchQuery,\n      activeFilters,\n      filters,\n      columns,\n      onSearchChange,\n      onFiltersChange,\n    ]);\n\n    // Calculate pagination\n    const totalFilteredItems = totalItems || filteredData?.length || 0;\n    const totalPages = Math.ceil(totalFilteredItems / pageSize);\n    const startIndex = (currentPage - 1) * pageSize;\n    const endIndex = startIndex + pageSize;\n    const currentPageData = onPaginationChange\n      ? filteredData\n      : filteredData.slice(startIndex, endIndex);\n\n    // Handle selection\n    const handleSelectionChange = (newSelection: string[]) => {\n      onSelectionChange?.(newSelection);\n    };\n\n    // Handle bulk actions\n    const handleBulkAction = (action: ListAction) => {\n      const selectedData = data?.filter((item) =>\n        selectedItems.includes(item?.id)\n      );\n      action.onClick(selectedData);\n    };\n\n    // Render view mode toggle\n    const renderViewModeToggle = () => {\n      if (!onViewModeChange) return null;\n\n      return (\n        <HStack data-glass-component space=\"none\">\n          {VIEW_MODES.map((mode) => (\n            <IconButton\n              key={mode.key}\n              icon={mode.icon}\n              variant={viewMode === mode.key ? \"primary\" : \"ghost\"}\n              size=\"sm\"\n              onClick={() => onViewModeChange(mode.key)}\n              aria-label={mode.label}\n            />\n          ))}\n        </HStack>\n      );\n    };\n\n    // Render filters\n    const renderFilters = () => {\n      if (!showFilters || (filters?.length || 0) === 0) return null;\n\n      return (\n        <Motion preset=\"slideDown\">\n          <Glass className=\"glass-p-4 glass-radius-lg\">\n            <VStack space=\"md\">\n              <HStack space=\"sm\" align=\"center\" justify=\"between\">\n                <h3 className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                  Filters\n                </h3>\n                <GlassButton\n                  variant=\"ghost\"\n                  size=\"sm\"\n                  onClick={(e) => onFiltersChange?.({})}\n                  disabled={Object.keys(activeFilters).length === 0}\n                >\n                  Clear All\n                </GlassButton>\n              </HStack>\n\n              <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 xl:glass-grid-cols-4 glass-gap-4\">\n                {filters.map((filter) => (\n                  <div key={filter.id}>\n                    <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\">\n                      {filter.label}\n                    </label>\n\n                    {filter.type === \"select\" && (\n                      <select\n                        value={toFilterControlValue(activeFilters?.[filter.id])}\n                        onChange={(e) =>\n                          onFiltersChange?.({\n                            ...activeFilters,\n                            [filter.id]: e.target.value,\n                          })\n                        }\n                        className=\"glass-w-full glass-px-3 glass-py-2 glass-bg-background glass-border glass-border-glass-border glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-primary\"\n                      >\n                        <option value=\"\">\n                          {filter.placeholder || \"Select...\"}\n                        </option>\n                        {filter.options?.map((option) => (\n                          <option key={option.value} value={option.value}>\n                            {option.label} {option.count && `(${option.count})`}\n                          </option>\n                        ))}\n                      </select>\n                    )}\n\n                    {filter.type === \"text\" && (\n                      <GlassInput\n                        type=\"text\"\n                        value={toFilterControlValue(activeFilters?.[filter.id])}\n                        onChange={(e) =>\n                          onFiltersChange?.({\n                            ...activeFilters,\n                            [filter.id]: e.target.value,\n                          })\n                        }\n                        placeholder={filter.placeholder}\n                        className=\"glass-w-full glass-px-3 glass-py-2 glass-bg-background glass-border glass-border-glass-border glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-primary\"\n                      />\n                    )}\n                  </div>\n                ))}\n              </div>\n            </VStack>\n          </Glass>\n        </Motion>\n      );\n    };\n\n    // Render actions bar\n    const renderActionsBar = () => {\n      const hasSelectedItems = (selectedItems?.length || 0) > 0;\n      const availableActions = actions.filter(\n        (action) => !action.requiresSelection || hasSelectedItems\n      );\n\n      if ((availableActions?.length || 0) === 0 && !primaryAction) return null;\n\n      return (\n        <HStack space=\"sm\" align=\"center\" justify=\"between\">\n          <HStack space=\"sm\" align=\"center\">\n            {hasSelectedItems && (\n              <span className=\"glass-text-sm glass-text-secondary\">\n                {selectedItems?.length || 0} item\n                {(selectedItems?.length || 0) !== 1 ? \"s\" : \"\"} selected\n              </span>\n            )}\n\n            {availableActions.map((action) => (\n              <GlassButton\n                key={action.id}\n                variant={action.variant || \"outline\"}\n                size=\"sm\"\n                leftIcon={action.icon}\n                onClick={(e) => handleBulkAction(action)}\n                disabled={\n                  action.requiresSelection && (selectedItems?.length || 0) === 0\n                }\n              >\n                {action.label}\n              </GlassButton>\n            ))}\n          </HStack>\n\n          <HStack space=\"sm\" align=\"center\">\n            {renderViewModeToggle()}\n\n            {(filters?.length || 0) > 0 && (\n              <IconButton\n                icon=\"\uD83D\uDD0D\"\n                variant={showFilters ? \"primary\" : \"ghost\"}\n                size=\"sm\"\n                onClick={(e) => setShowFilters(!showFilters)}\n                aria-label=\"Toggle filters\"\n              />\n            )}\n\n            {primaryAction && (\n              <GlassButton\n                variant=\"default\"\n                size=\"sm\"\n                leftIcon={primaryAction.icon}\n                onClick={primaryAction.onClick}\n              >\n                {primaryAction.label}\n              </GlassButton>\n            )}\n          </HStack>\n        </HStack>\n      );\n    };\n\n    // Render grid view\n    const renderGridView = () => (\n      <GlassGrid cols={12} gap=\"md\">\n        {currentPageData.map((item, index) => (\n          <GlassGridItem key={item?.id} colSpan={4}>\n            {renderCard ? (\n              renderCard(item, index)\n            ) : (\n              <GlassCard\n                variant=\"default\"\n                className=\"glass-h-full glass-cursor-pointer hover:glass-shadow-lg glass-transition-shadow\"\n                onClick={(e) => onRowClick?.(item)}\n              >\n                <VStack space=\"sm\">\n                  <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                    {toDisplayText(\n                      item?.name,\n                      toDisplayText(item?.title, item?.id)\n                    )}\n                  </div>\n                  <div className=\"glass-text-xs glass-text-secondary\">\n                    {toDisplayText(item?.description, \"No description\")}\n                  </div>\n                </VStack>\n              </GlassCard>\n            )}\n          </GlassGridItem>\n        ))}\n      </GlassGrid>\n    );\n\n    // Render list view\n    const renderListView = () => (\n      <VStack space=\"sm\">\n        {currentPageData.map((item, index) => (\n          <div\n            key={item?.id}\n            className=\"glass-animate-fade-in-up\"\n            style={{\n              animationDelay: `${Math.min(index, 10) * 50}ms`,\n              animationFillMode: \"both\",\n            }}\n          >\n            {renderCard ? (\n              renderCard(item, index)\n            ) : (\n              <GlassCard\n                variant=\"outlined\"\n                className=\"glass-foundation-complete glass-backdrop-blur-md glass-bg-transparent glass-border-white/40 glass-shadow-2xl glass-cursor-pointer hover:glass-shadow-2xl glass-hover-scale-1-01 glass-transition-all glass-focus glass-touch-target glass-contrast-guard\"\n                onClick={(e) => onRowClick?.(item)}\n              >\n                <HStack space=\"md\" align=\"center\">\n                  {selectable && (\n                    <GlassInput\n                      type=\"checkbox\"\n                      checked={selectedItems.includes(item?.id)}\n                      onChange={(e) => {\n                        const newSelection = e.target.checked\n                          ? [...selectedItems, item?.id]\n                          : selectedItems.filter((id) => id !== item?.id);\n                        handleSelectionChange(newSelection);\n                      }}\n                      onClick={(e) => e.stopPropagation()}\n                      className=\"glass-radius-md glass-border-glass-border glass-focus-ring-primary\"\n                    />\n                  )}\n\n                  <VStack space=\"xs\" className=\"glass-flex-1\">\n                    <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                      {toDisplayText(\n                        item?.name,\n                        toDisplayText(item?.title, item?.id)\n                      )}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-opacity-70\">\n                      {toDisplayText(item?.description, \"No description\")}\n                    </div>\n                  </VStack>\n\n                  {Boolean(item?.status) && (\n                    <GlassBadge variant=\"outline\" size=\"xs\">\n                      {toDisplayText(item?.status)}\n                    </GlassBadge>\n                  )}\n                </HStack>\n              </GlassCard>\n            )}\n          </div>\n        ))}\n      </VStack>\n    );\n\n    // Render main content\n    const renderContent = () => {\n      if (loading) {\n        return (\n          <div className=\"glass-flex glass-items-center glass-justify-center glass-h-64\">\n            <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n          </div>\n        );\n      }\n\n      if ((currentPageData?.length || 0) === 0) {\n        return (\n          emptyState || (\n            <div className=\"glass-flex glass-flex-col glass-items-center glass-justify-center glass-h-64 glass-text-center\">\n              <div className=\"glass-text-lg glass-font-medium glass-text-secondary glass-mb-2\">\n                No items found\n              </div>\n              <div className=\"glass-text-sm glass-text-secondary\">\n                Try adjusting your search or filters\n              </div>\n            </div>\n          )\n        );\n      }\n\n      switch (viewMode) {\n        case \"grid\":\n          return renderGridView();\n        case \"list\":\n          return renderListView();\n        default:\n          return (\n            <GlassDataTable\n              data={currentPageData}\n              columns={columns}\n              selectable={selectable}\n              selectedRows={selectedItems}\n              onSelectionChange={handleSelectionChange}\n              onRowClick={onRowClick}\n              getRowId={(row) => row.id}\n              loading={loading}\n              pagination={!!onPaginationChange}\n              pageSizeOptions={[10, 20, 50, 100]}\n              initialPageSize={pageSize}\n            />\n          );\n      }\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"w-full space-y-6\", className)}\n        role=\"region\"\n        aria-label={ariaLabel || title || \"List View\"}\n        data-testid={dataTestId}\n        {...props}\n      >\n        {/* Header */}\n        <PageHeader\n          title={title}\n          description={description}\n          actions={\n            <GlassSearchInterface\n              variant=\"compact\"\n              placeholder=\"Search...\"\n              value={searchQuery}\n              onChange={onSearchChange}\n              showFilters={false}\n              showCategories={false}\n              className=\"glass-w-64\"\n            />\n          }\n        />\n\n        {/* Actions and filters */}\n        <VStack space=\"md\">\n          {renderActionsBar()}\n          {renderFilters()}\n        </VStack>\n\n        {/* Content */}\n        <div>{renderContent()}</div>\n\n        {/* Pagination */}\n        {onPaginationChange && totalPages > 1 && (\n          <HStack space=\"sm\" align=\"center\" justify=\"center\">\n            <GlassButton\n              variant=\"ghost\"\n              size=\"sm\"\n              disabled={currentPage === 1}\n              onClick={(e) => onPaginationChange(currentPage - 1, pageSize)}\n            >\n              Previous\n            </GlassButton>\n\n            <span className=\"glass-text-sm glass-text-secondary\">\n              Page {currentPage} of {totalPages}\n            </span>\n\n            <GlassButton\n              variant=\"ghost\"\n              size=\"sm\"\n              disabled={currentPage === totalPages}\n              onClick={(e) => onPaginationChange(currentPage + 1, pageSize)}\n            >\n              Next\n            </GlassButton>\n          </HStack>\n        )}\n      </div>\n    );\n  }\n);\n\nGlassListView.displayName = \"GlassListView\";\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useState } from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassChipProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onSelect\"\n> {\n  /** Chip content */\n  children: React.ReactNode;\n  /** Visual variant */\n  variant?:\n    | \"default\"\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"warning\"\n    | \"error\"\n    | \"info\"\n    | \"outline\"\n    | \"filled\";\n  /** Size of the chip */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n  /** Whether the chip is removable */\n  removable?: boolean;\n  /** Whether the chip is selected/active */\n  selected?: boolean;\n  /** Whether the chip is disabled */\n  disabled?: boolean;\n  /** Whether the chip is clickable */\n  clickable?: boolean;\n  /** Left icon or avatar */\n  avatar?: React.ReactNode;\n  /** Left icon */\n  icon?: React.ReactNode;\n  /** Custom remove icon */\n  removeIcon?: React.ReactNode;\n  /** Remove handler */\n  onRemove?: (event: React.MouseEvent) => void;\n  /** Selection handler */\n  onSelect?: (selected: boolean) => void;\n  /** Click handler */\n  onClick?: (event: React.MouseEvent) => void;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassChip = forwardRef<HTMLDivElement, GlassChipProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      children,\n      variant = \"default\",\n      size = \"md\",\n      removable = false,\n      selected = false,\n      disabled = false,\n      clickable = false,\n      avatar,\n      icon,\n      removeIcon,\n      onRemove,\n      onSelect,\n      onClick,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n    const [isHovered, setIsHovered] = useState(false);\n    const chipId = useA11yId(\"glass-chip\");\n\n    const sizeConfig = {\n      xs: {\n        height: \"glass-h-6\",\n        padding: \"glass-px-2\",\n        text: \"glass-text-xs\",\n        iconSize: \"glass-w-3 glass-h-3\",\n        avatarSize: \"glass-w-4 glass-h-4\",\n        gap: \"glass-gap-1\",\n      },\n      sm: {\n        height: \"glass-h-8\",\n        padding: \"glass-px-3\",\n        text: \"glass-text-sm\",\n        iconSize: \"glass-w-4 glass-h-4\",\n        avatarSize: \"glass-w-5 glass-h-5\",\n        gap: \"glass-gap-1.5\",\n      },\n      md: {\n        height: \"glass-h-8\",\n        padding: \"glass-px-3\",\n        text: \"glass-text-sm\",\n        iconSize: \"glass-w-4 glass-h-4\",\n        avatarSize: \"glass-w-6 glass-h-6\",\n        gap: \"glass-gap-2\",\n      },\n      lg: {\n        height: \"glass-h-10\",\n        padding: \"glass-px-4\",\n        text: \"glass-text-base\",\n        iconSize: \"glass-w-5 glass-h-5\",\n        avatarSize: \"w-7 glass-h-8\",\n        gap: \"glass-gap-2\",\n      },\n    };\n\n    const variantConfig = {\n      default: {\n        base: \"bg-background/50 glass-border-glass-border/20 glass-text-primary\",\n        selected: \"bg-primary/20 glass-border-primary glass-text-primary\",\n        hover: \"hover:bg-background/70\",\n      },\n      primary: {\n        base: \"bg-primary/10 glass-border-primary glass-text-primary\",\n        selected: \"bg-primary/90 glass-border-primary glass-text-primary\",\n        hover: \"hover:bg-primary/20\",\n      },\n      secondary: {\n        base: \"bg-secondary/10 glass-border-secondary/20 glass-text-secondary\",\n        selected:\n          \"bg-secondary/90 glass-border-secondary glass-text-secondary-foreground\",\n        hover: \"hover:bg-secondary/20\",\n      },\n      success: {\n        base: \"glass-surface-success/10 glass-border/20 glass-text-success\",\n        selected:\n          \"glass-surface-success/90 glass-surface-success glass-text-primary\",\n        hover: \"hover:glass-surface-success/20\",\n      },\n      warning: {\n        base: \"glass-surface-warning/10 glass-border/20 glass-text-primary\",\n        selected:\n          \"glass-surface-warning/90 glass-surface-warning glass-text-primary\",\n        hover: \"hover:glass-surface-warning/20\",\n      },\n      error: {\n        base: \"glass-surface-danger/10 glass-border/20 glass-text-danger\",\n        selected:\n          \"glass-surface-danger/90 glass-surface-danger glass-text-primary\",\n        hover: \"hover:glass-surface-danger/20\",\n      },\n      info: {\n        base: \"glass-surface-info/10 glass-border/20 glass-text-primary\",\n        selected: \"glass-surface-info/90 glass-surface-info glass-text-primary\",\n        hover: \"hover:glass-surface-info/20\",\n      },\n      outline: {\n        base: \"bg-transparent glass-border-glass-border glass-text-primary\",\n        selected: \"bg-primary/10 glass-border-primary glass-text-primary\",\n        hover: \"hover:bg-background/10\",\n      },\n      filled: {\n        base: \"bg-muted glass-border-muted glass-text-secondary\",\n        selected: \"bg-primary glass-border-primary glass-text-primary\",\n        hover: \"hover:bg-muted/80\",\n      },\n    };\n\n    const config = sizeConfig[size];\n    const colors = variantConfig[variant];\n\n    const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n      if (disabled) return;\n\n      if (onSelect) {\n        onSelect(!selected);\n        play(selected ? \"deselect\" : \"select\");\n      }\n\n      if (clickable) {\n        onClick?.(event);\n        play(\"click\");\n      }\n    };\n\n    const handleRemove = (event: React.MouseEvent) => {\n      if (disabled) return;\n\n      event.stopPropagation();\n      onRemove?.(event);\n      play(\"remove\");\n    };\n\n    const defaultRemoveIcon = (\n      <svg\n        className=\"glass-w-full glass-h-full\"\n        fill=\"none\"\n        stroke=\"currentColor\"\n        viewBox=\"0 0 24 24\"\n        strokeWidth={2}\n      >\n        <path\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          d=\"M6 18L18 6M6 6l12 12\"\n        />\n      </svg>\n    );\n\n    const chipContent = (\n      <>\n        {/* Avatar */}\n        {avatar && (\n          <div\n            className={cn(\n              \"glass-flex-shrink-0 glass-radius-full glass-overflow-hidden\",\n              config.avatarSize\n            )}\n          >\n            {avatar}\n          </div>\n        )}\n\n        {/* Icon */}\n        {icon && !avatar && (\n          <div className={cn(\"glass-flex-shrink-0\", config.iconSize)}>\n            {icon}\n          </div>\n        )}\n\n        {/* Content */}\n        <span className=\"glass-flex-1 glass-min-w-0 glass-truncate glass-font-medium\">\n          {children}\n        </span>\n\n        {/* Remove button */}\n        {removable && (\n          <button\n            type=\"button\"\n            onClick={handleRemove}\n            disabled={disabled}\n            className={cn(\n              \"glass-flex-shrink-0 glass-ml-1 glass-radius-full transition-colors\",\n              \"hover:bg-current/20 focus:outline-none focus:ring-1 focus:ring-current\",\n              \"glass-flex glass-items-center glass-justify-center\",\n              config.iconSize,\n              disabled && \"opacity-50 cursor-not-allowed\",\n              \"glass-focus glass-touch-target glass-contrast-guard\"\n            )}\n            aria-label=\"Remove chip\"\n          >\n            {removeIcon || defaultRemoveIcon}\n          </button>\n        )}\n\n        {/* Glass overlay effect */}\n        <div className=\"glass-absolute glass-inset-0 glass-radius-full glass-gradient-primary glass-gradient-primary glass-via-transparent glass-gradient-primary glass-pointer-events-none\" />\n      </>\n    );\n\n    const isInteractive = clickable || onSelect || removable;\n\n    return (\n      <Motion\n        data-glass-component\n        preset={shouldAnimate && respectMotionPreference ? \"scaleIn\" : \"none\"}\n      >\n        <OptimizedGlass\n          ref={ref}\n          id={chipId}\n          elevation=\"level1\"\n          intensity=\"medium\"\n          depth={variant === \"filled\" ? 2 : 1}\n          tint={selected ? \"primary\" : \"neutral\"}\n          border={variant === \"outline\" ? \"strong\" : \"subtle\"}\n          animation={\n            shouldAnimate && respectMotionPreference ? \"shimmer\" : \"none\"\n          }\n          performanceMode=\"high\"\n          liftOnHover={isInteractive && !disabled}\n          press={isInteractive ? true : false}\n          className={cn(\n            \"glass-chip glass-relative glass-inline-flex glass-items-center glass-radius-full glass-border glass-backdrop-blur-md\",\n            \"transition-all duration-200 select-none\",\n            config.height,\n            config.padding,\n            config.text,\n            config.gap,\n            selected ? colors.selected : colors.base,\n            isInteractive && !disabled && \"glass-cursor-pointer\",\n            isInteractive && !disabled && colors.hover,\n            isInteractive &&\n              !disabled &&\n              \"glass-hover-scale-105 active:scale-95\",\n            disabled && \"opacity-50 cursor-not-allowed\",\n            className\n          )}\n          onClick={isInteractive ? handleClick : undefined}\n          onMouseEnter={() => setIsHovered(true)}\n          onMouseLeave={() => setIsHovered(false)}\n          role={onSelect ? \"checkbox\" : clickable ? \"button\" : \"status\"}\n          tabIndex={isInteractive && !disabled ? 0 : -1}\n          aria-checked={onSelect ? selected : undefined}\n          aria-disabled={disabled}\n          onKeyDown={(e: React.KeyboardEvent) => {\n            if (\n              (e.key === \"Enter\" || e.key === \" \") &&\n              isInteractive &&\n              !disabled\n            ) {\n              e.preventDefault();\n              handleClick(e as any);\n            }\n          }}\n          {...props}\n        >\n          {chipContent}\n        </OptimizedGlass>\n      </Motion>\n    );\n  }\n);\n\nGlassChip.displayName = \"GlassChip\";\n\n// Chip Group Component\nexport interface GlassChipGroupProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onChange\"\n> {\n  /** Array of chip data */\n  chips: Array<{\n    id: string;\n    label: React.ReactNode;\n    value?: string;\n    removable?: boolean;\n    disabled?: boolean;\n    avatar?: React.ReactNode;\n    icon?: React.ReactNode;\n  }>;\n  /** Selection mode */\n  selectionMode?: \"none\" | \"single\" | \"multiple\";\n  /** Selected values */\n  selectedValues?: string[];\n  /** Default selected values */\n  defaultSelectedValues?: string[];\n  /** Selection change handler */\n  onChange?: (selectedValues: string[]) => void;\n  /** Chip remove handler */\n  onRemove?: (chipId: string) => void;\n  /** Chip size */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n  /** Chip variant */\n  variant?: GlassChipProps[\"variant\"];\n  /** Spacing between chips */\n  spacing?: \"tight\" | \"normal\" | \"relaxed\";\n  /** Whether chips should wrap */\n  wrap?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassChipGroup = forwardRef<HTMLDivElement, GlassChipGroupProps>(\n  (\n    {\n      chips,\n      selectionMode = \"none\",\n      selectedValues,\n      defaultSelectedValues = [],\n      onChange,\n      onRemove,\n      size = \"md\",\n      variant = \"default\",\n      spacing = \"normal\",\n      wrap = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const [internalSelected, setInternalSelected] = useState<string[]>(\n      selectedValues || defaultSelectedValues\n    );\n\n    const currentSelected =\n      selectedValues !== undefined ? selectedValues : internalSelected;\n\n    const spacingConfig = {\n      tight: \"glass-gap-1\",\n      normal: \"glass-gap-2\",\n      relaxed: \"glass-gap-3\",\n    };\n\n    const handleChipSelect = (\n      chipId: string,\n      value: string,\n      selected: boolean\n    ) => {\n      let newSelected: string[];\n\n      if (selectionMode === \"single\") {\n        newSelected = selected ? [value] : [];\n      } else if (selectionMode === \"multiple\") {\n        if (selected) {\n          newSelected = [...currentSelected, value];\n        } else {\n          newSelected = currentSelected.filter((v: any) => v !== value);\n        }\n      } else {\n        return; // No selection mode\n      }\n\n      if (selectedValues === undefined) {\n        setInternalSelected(newSelected);\n      }\n      onChange?.(newSelected);\n    };\n\n    const handleChipRemove = (chipId: string) => {\n      onRemove?.(chipId);\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-chip-group glass-flex glass-items-center\",\n          spacingConfig[spacing],\n          wrap && \"glass-flex-wrap\",\n          className\n        )}\n        role={selectionMode !== \"none\" ? \"group\" : undefined}\n        {...props}\n      >\n        {chips.map((chip, index) => {\n          const chipValue = chip.value || chip.id;\n          const isSelected =\n            selectionMode !== \"none\" && currentSelected.includes(chipValue);\n\n          return (\n            <Motion\n              key={chip.id}\n              preset={\n                shouldAnimate && respectMotionPreference ? \"slideIn\" : \"none\"\n              }\n              delay={index * 50}\n            >\n              <GlassChip\n                size={size}\n                variant={variant}\n                selected={isSelected}\n                disabled={chip.disabled}\n                clickable={selectionMode !== \"none\"}\n                removable={chip.removable}\n                avatar={chip.avatar}\n                icon={chip.icon}\n                respectMotionPreference={respectMotionPreference}\n                onSelect={\n                  selectionMode !== \"none\"\n                    ? (selected) =>\n                        handleChipSelect(chip.id, chipValue, selected)\n                    : undefined\n                }\n                onRemove={\n                  chip.removable ? () => handleChipRemove(chip.id) : undefined\n                }\n              >\n                {chip.label}\n              </GlassChip>\n            </Motion>\n          );\n        })}\n      </div>\n    );\n  }\n);\n\nGlassChipGroup.displayName = \"GlassChipGroup\";\n\nexport default GlassChip;\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GlassDividerProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Orientation of the divider */\n  orientation?: \"horizontal\" | \"vertical\";\n  /** Visual variant */\n  variant?: \"default\" | \"gradient\" | \"dashed\" | \"dotted\" | \"glow\" | \"double\";\n  /** Size/thickness of the divider */\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Label/content to display in the middle */\n  label?: React.ReactNode;\n  /** Position of the label */\n  labelPosition?: \"left\" | \"center\" | \"right\" | \"top\" | \"bottom\";\n  /** Color scheme */\n  color?: \"default\" | \"primary\" | \"secondary\" | \"muted\" | \"accent\";\n  /** Opacity level */\n  opacity?: \"light\" | \"medium\" | \"strong\";\n  /** Animation style */\n  animation?: \"none\" | \"pulse\" | \"shimmer\" | \"glow\";\n  /** Margin spacing */\n  spacing?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Custom decorative elements */\n  startDecorator?: React.ReactNode;\n  endDecorator?: React.ReactNode;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassDivider = forwardRef<HTMLDivElement, GlassDividerProps>(\n  (\n    {\n      orientation = \"horizontal\",\n      variant = \"default\",\n      size = \"sm\",\n      label,\n      labelPosition = \"center\",\n      color = \"default\",\n      opacity = \"medium\",\n      animation = \"none\",\n      spacing = \"md\",\n      startDecorator,\n      endDecorator,\n      respectMotionPreference = true,\n      className,\n      role = \"separator\",\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const dividerId = useA11yId(\"glass-divider\");\n\n    const sizeConfig = {\n      xs: {\n        horizontal: \"h-px\",\n        vertical: \"w-px\",\n        label: \"glass-text-xs glass-px-2\",\n      },\n      sm: {\n        horizontal: \"h-0.5\",\n        vertical: \"w-0.5\",\n        label: \"glass-text-sm glass-px-3\",\n      },\n      md: {\n        horizontal: \"glass-h-1\",\n        vertical: \"glass-w-1\",\n        label: \"glass-text-sm glass-px-4\",\n      },\n      lg: {\n        horizontal: \"glass-h-2\",\n        vertical: \"glass-w-2\",\n        label: \"glass-text-base glass-px-4\",\n      },\n      xl: {\n        horizontal: \"glass-h-2\",\n        vertical: \"glass-w-2\",\n        label: \"glass-text-lg glass-px-6\",\n      },\n    };\n\n    const colorConfig = {\n      default: {\n        base: \"glass-border-glass-border/30 bg-glass-border/20\",\n        gradient: \"from-transparent via-glass-border/40 to-transparent\",\n        glow: \"shadow-glass-border/20\",\n        text: \"glass-text-primary\",\n      },\n      primary: {\n        base: \"glass-border-primary bg-primary/20\",\n        gradient: \"from-transparent via-primary/40 to-transparent\",\n        glow: \"shadow-primary/20\",\n        text: \"glass-text-primary\",\n      },\n      secondary: {\n        base: \"glass-border-secondary/30 bg-secondary/20\",\n        gradient: \"from-transparent via-secondary/40 to-transparent\",\n        glow: \"shadow-secondary/20\",\n        text: \"glass-text-secondary\",\n      },\n      muted: {\n        base: \"glass-border-muted/30 bg-muted/20\",\n        gradient: \"from-transparent via-muted/40 to-transparent\",\n        glow: \"shadow-muted/20\",\n        text: \"glass-text-secondary\",\n      },\n      accent: {\n        base: \"glass-border-accent/30 bg-accent/20\",\n        gradient: \"from-transparent via-accent/40 to-transparent\",\n        glow: \"shadow-accent/20\",\n        text: \"text-accent-foreground\",\n      },\n    };\n\n    const opacityConfig = {\n      light: \"opacity-30\",\n      medium: \"opacity-50\",\n      strong: \"opacity-80\",\n    };\n\n    const spacingConfig = {\n      none: \"\",\n      xs: \"glass-my-1\",\n      sm: \"glass-my-2\",\n      md: \"glass-my-4\",\n      lg: \"my-6\",\n      xl: \"my-8\",\n    };\n\n    const config = sizeConfig[size];\n    const colors = colorConfig[color];\n\n    const getDividerClass = () => {\n      const baseClass =\n        orientation === \"horizontal\" ? \"glass-w-full\" : \"glass-h-full\";\n      const sizeClass =\n        orientation === \"horizontal\" ? config.horizontal : config.vertical;\n\n      switch (variant) {\n        case \"gradient\":\n          return cn(\n            baseClass,\n            sizeClass,\n            \"bg-gradient-to-r\",\n            colors.gradient,\n            opacityConfig[opacity]\n          );\n        case \"dashed\":\n          return cn(\n            baseClass,\n            orientation === \"horizontal\"\n              ? \"glass-border-t glass-border-dashed\"\n              : \"glass-border-l glass-border-dashed\",\n            colors.base,\n            opacityConfig[opacity]\n          );\n        case \"dotted\":\n          return cn(\n            baseClass,\n            orientation === \"horizontal\"\n              ? \"glass-border-t glass-border-dotted glass-border-2\"\n              : \"glass-border-l glass-border-dotted glass-border-2\",\n            colors.base,\n            opacityConfig[opacity]\n          );\n        case \"glow\":\n          return cn(\n            baseClass,\n            sizeClass,\n            colors.base,\n            \"shadow-lg\",\n            colors.glow,\n            opacityConfig[opacity]\n          );\n        case \"double\":\n          return cn(\n            baseClass,\n            orientation === \"horizontal\"\n              ? \"glass-border-t-4 glass-border-double\"\n              : \"glass-border-l-4 glass-border-double\",\n            colors.base,\n            opacityConfig[opacity]\n          );\n        default:\n          return cn(\n            baseClass,\n            sizeClass,\n            colors.base,\n            \"glass-backdrop-blur-sm\",\n            opacityConfig[opacity]\n          );\n      }\n    };\n\n    const animationClass = {\n      none: \"\",\n      pulse: shouldAnimate && respectMotionPreference ? \"animate-pulse\" : \"\",\n      shimmer:\n        shouldAnimate && respectMotionPreference ? \"animate-shimmer\" : \"\",\n      glow: shouldAnimate && respectMotionPreference ? \"animate-glow\" : \"\",\n    };\n\n    // Simple divider without label\n    if (!label && !startDecorator && !endDecorator) {\n      return (\n        <Motion\n          data-glass-component\n          as=\"div\"\n          ref={ref}\n          id={dividerId}\n          preset={shouldAnimate && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className={cn(\n            \"glass-divider\",\n            getDividerClass(),\n            animationClass[animation],\n            spacingConfig[spacing],\n            className\n          )}\n          role={role}\n          aria-orientation={orientation}\n          {...props}\n        />\n      );\n    }\n\n    // Divider with label or decorators\n    const isHorizontal = orientation === \"horizontal\";\n\n    const renderDividerLine = (key: string) => (\n      <div\n        key={key}\n        className={cn(\n          \"glass-flex-1\",\n          getDividerClass(),\n          animationClass[animation]\n        )}\n      />\n    );\n\n    const renderLabel = () => {\n      if (!label) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level1\"\n          intensity=\"subtle\"\n          depth={0.5}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className={cn(\n            \"glass-divider-label glass-flex-shrink-0 glass-radius-full glass-backdrop-blur-md\",\n            \"bg-background/50 glass-border glass-border-glass-border/20\",\n            config.label,\n            colors.text,\n            \"glass-font-medium\"\n          )}\n        >\n          <ContrastGuard>{label}</ContrastGuard>\n        </OptimizedGlass>\n      );\n    };\n\n    if (isHorizontal) {\n      // Horizontal layout\n      return (\n        <Motion\n          as=\"div\"\n          ref={ref}\n          id={dividerId}\n          preset={shouldAnimate && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className={cn(\n            \"glass-divider glass-flex glass-items-center\",\n            spacingConfig[spacing],\n            className\n          )}\n          role={role}\n          aria-orientation={orientation}\n          {...props}\n        >\n          {startDecorator && (\n            <div className=\"glass-flex-shrink-0 glass-mr-3\">\n              {startDecorator}\n            </div>\n          )}\n\n          {labelPosition === \"left\" && renderLabel()}\n          {(labelPosition === \"left\" || labelPosition === \"center\") &&\n            renderDividerLine(\"left\")}\n          {labelPosition === \"center\" && renderLabel()}\n          {(labelPosition === \"center\" || labelPosition === \"right\") &&\n            renderDividerLine(\"right\")}\n          {labelPosition === \"right\" && renderLabel()}\n\n          {!label && renderDividerLine(\"full\")}\n\n          {endDecorator && (\n            <div className=\"glass-flex-shrink-0 glass-ml-3\">{endDecorator}</div>\n          )}\n        </Motion>\n      );\n    } else {\n      // Vertical layout\n      return (\n        <Motion\n          as=\"div\"\n          ref={ref}\n          id={dividerId}\n          preset={shouldAnimate && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className={cn(\n            \"glass-divider glass-flex glass-flex-col glass-items-center\",\n            \"glass-mx-4\", // Default horizontal spacing for vertical dividers\n            className\n          )}\n          role={role}\n          aria-orientation={orientation}\n          {...props}\n        >\n          {startDecorator && (\n            <div className=\"glass-flex-shrink-0 glass-mb-3\">\n              {startDecorator}\n            </div>\n          )}\n\n          {labelPosition === \"top\" && renderLabel()}\n          {(labelPosition === \"top\" || labelPosition === \"center\") &&\n            renderDividerLine(\"top\")}\n          {labelPosition === \"center\" && renderLabel()}\n          {(labelPosition === \"center\" || labelPosition === \"bottom\") &&\n            renderDividerLine(\"bottom\")}\n          {labelPosition === \"bottom\" && renderLabel()}\n\n          {!label && renderDividerLine(\"full\")}\n\n          {endDecorator && (\n            <div className=\"glass-flex-shrink-0 glass-mt-3\">{endDecorator}</div>\n          )}\n        </Motion>\n      );\n    }\n  }\n);\n\nGlassDivider.displayName = \"GlassDivider\";\n\n// Specialized divider variants\nexport const GlassTextDivider = forwardRef<\n  HTMLDivElement,\n  Omit<GlassDividerProps, \"variant\"> & { text: string }\n>(({ text, ...props }, ref) => (\n  <GlassDivider ref={ref} variant=\"gradient\" label={text} {...props} />\n));\n\nGlassTextDivider.displayName = \"GlassTextDivider\";\n\nexport const GlassIconDivider = forwardRef<\n  HTMLDivElement,\n  Omit<GlassDividerProps, \"variant\"> & { icon: React.ReactNode }\n>(({ icon, ...props }, ref) => (\n  <GlassDivider ref={ref} variant=\"gradient\" label={icon} {...props} />\n));\n\nGlassIconDivider.displayName = \"GlassIconDivider\";\n\nexport default GlassDivider;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface GanttTask {\n  id: string;\n  name: string;\n  startDate: Date;\n  endDate: Date;\n  progress: number; // 0-100\n  dependencies?: string[];\n  assignee?: {\n    id: string;\n    name: string;\n    avatar?: string;\n  };\n  status?:\n    | \"not-started\"\n    | \"in-progress\"\n    | \"completed\"\n    | \"blocked\"\n    | \"cancelled\";\n  priority?: \"low\" | \"medium\" | \"high\" | \"critical\";\n  color?: string;\n  description?: string;\n  milestone?: boolean;\n  parent?: string;\n  children?: string[];\n  customData?: Record<string, unknown>;\n}\n\nexport interface GanttTimeScale {\n  unit: \"day\" | \"week\" | \"month\" | \"quarter\" | \"year\";\n  step: number;\n}\n\nexport interface GanttViewOptions {\n  showWeekends?: boolean;\n  showToday?: boolean;\n  showProgress?: boolean;\n  showDependencies?: boolean;\n  showMilestones?: boolean;\n  showCriticalPath?: boolean;\n  showBaseline?: boolean;\n  showResources?: boolean;\n}\n\nexport interface GlassGanttChartProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Tasks data */\n  tasks?: GanttTask[];\n  /** Chart start date */\n  startDate?: Date;\n  /** Chart end date */\n  endDate?: Date;\n  /** Time scale configuration */\n  timeScale?: GanttTimeScale;\n  /** View options */\n  viewOptions?: GanttViewOptions;\n  /** Chart height */\n  height?: number;\n  /** Row height */\n  rowHeight?: number;\n  /** Column width for time units */\n  columnWidth?: number;\n  /** Whether tasks can be edited */\n  editable?: boolean;\n  /** Whether to show task hierarchy */\n  showHierarchy?: boolean;\n  /** Task click handler */\n  onTaskClick?: (task: GanttTask) => void;\n  /** Task update handler */\n  onTaskUpdate?: (task: GanttTask) => void;\n  /** Task resize handler */\n  onTaskResize?: (taskId: string, startDate: Date, endDate: Date) => void;\n  /** Task move handler */\n  onTaskMove?: (taskId: string, startDate: Date, endDate: Date) => void;\n  /** Progress update handler */\n  onProgressUpdate?: (taskId: string, progress: number) => void;\n  /** Dependency create handler */\n  onDependencyCreate?: (fromTask: string, toTask: string) => void;\n  /** Dependency delete handler */\n  onDependencyDelete?: (fromTask: string, toTask: string) => void;\n  /** Custom task renderer */\n  renderTask?: (\n    task: GanttTask,\n    bounds: { x: number; width: number; y: number; height: number }\n  ) => React.ReactNode;\n  /** Custom timeline header renderer */\n  renderTimelineHeader?: (date: Date, unit: string) => React.ReactNode;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassGanttChart = forwardRef<HTMLDivElement, GlassGanttChartProps>(\n  (\n    {\n      tasks = [],\n      startDate,\n      endDate,\n      timeScale = { unit: \"day\", step: 1 },\n      viewOptions = {\n        showWeekends: true,\n        showToday: true,\n        showProgress: true,\n        showDependencies: true,\n        showMilestones: true,\n        showCriticalPath: false,\n        showBaseline: false,\n        showResources: true,\n      },\n      height = 320,\n      rowHeight = 36,\n      columnWidth = 40,\n      editable = false,\n      showHierarchy = true,\n      onTaskClick,\n      onTaskUpdate,\n      onTaskResize,\n      onTaskMove,\n      onProgressUpdate,\n      onDependencyCreate,\n      onDependencyDelete,\n      renderTask,\n      renderTimelineHeader,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n    const ganttId = useA11yId(\"glass-gantt-chart\");\n\n    const [selectedTask, setSelectedTask] = useState<string | null>(null);\n    const [dragState, setDragState] = useState<{\n      isDragging: boolean;\n      taskId?: string;\n      startX?: number;\n      startDate?: Date;\n      mode?: \"move\" | \"resize-start\" | \"resize-end\";\n    }>({ isDragging: false });\n    const [scrollPosition, setScrollPosition] = useState({ x: 0, y: 0 });\n    const [hoveredTask, setHoveredTask] = useState<string | null>(null);\n\n    const chartRef = useRef<HTMLDivElement>(null);\n    const timelineRef = useRef<HTMLDivElement>(null);\n    const taskListRef = useRef<HTMLDivElement>(null);\n\n    // Calculate date range\n    const dateRange = useMemo(() => {\n      const taskDates = tasks.flatMap((task) => [task.startDate, task.endDate]);\n      const now = new Date();\n      const minDate =\n        startDate ||\n        (taskDates.length\n          ? new Date(Math.min(...taskDates.map((d: any) => d.getTime())))\n          : now);\n      const maxDate =\n        endDate ||\n        (taskDates.length\n          ? new Date(Math.max(...taskDates.map((d: any) => d.getTime())))\n          : new Date(now.getTime() + 14 * 24 * 60 * 60 * 1000));\n\n      const paddedStart = new Date(minDate);\n      if (!startDate) {\n        paddedStart.setDate(paddedStart.getDate() - 7);\n      }\n\n      const paddedEnd = new Date(maxDate);\n      if (!endDate) {\n        paddedEnd.setDate(paddedEnd.getDate() + 7);\n      }\n\n      return { start: paddedStart, end: paddedEnd };\n    }, [tasks, startDate, endDate]);\n\n    // Generate time columns\n    const timeColumns = useMemo(() => {\n      const columns: Date[] = [];\n      const current = new Date(dateRange.start);\n\n      while (current <= dateRange.end) {\n        columns.push(new Date(current));\n\n        switch (timeScale.unit) {\n          case \"day\":\n            current.setDate(current.getDate() + timeScale.step);\n            break;\n          case \"week\":\n            current.setDate(current.getDate() + 7 * timeScale.step);\n            break;\n          case \"month\":\n            current.setMonth(current.getMonth() + timeScale.step);\n            break;\n          case \"quarter\":\n            current.setMonth(current.getMonth() + 3 * timeScale.step);\n            break;\n          case \"year\":\n            current.setFullYear(current.getFullYear() + timeScale.step);\n            break;\n        }\n      }\n\n      return columns;\n    }, [dateRange, timeScale]);\n\n    // Calculate task positions\n    const getTaskPosition = useCallback(\n      (task: GanttTask) => {\n        const totalDuration =\n          dateRange.end.getTime() - dateRange.start.getTime();\n        const taskStart = task.startDate.getTime() - dateRange.start.getTime();\n        const taskDuration = task.endDate.getTime() - task.startDate.getTime();\n\n        const x =\n          (taskStart / totalDuration) * (timeColumns.length * columnWidth);\n        const width =\n          (taskDuration / totalDuration) * (timeColumns.length * columnWidth);\n\n        return { x, width: Math.max(width, 20) }; // Minimum width of 20px\n      },\n      [dateRange, timeColumns.length, columnWidth]\n    );\n\n    // Status colors\n    const statusColors = {\n      \"not-started\": \"#94a3b8\",\n      \"in-progress\": \"#60a5fa\",\n      completed: \"#34d399\",\n      blocked: \"#f87171\",\n      cancelled: \"#64748b\",\n    };\n\n    // Priority colors\n    const priorityColors = {\n      low: \"glass-border-success\",\n      medium: \"glass-border-warning\",\n      high: \"glass-border-warning\",\n      critical: \"glass-border-danger\",\n    };\n\n    // Handle task drag start\n    const handleTaskDragStart = useCallback(\n      (\n        e: React.MouseEvent,\n        taskId: string,\n        mode: \"move\" | \"resize-start\" | \"resize-end\"\n      ) => {\n        if (!editable) return;\n\n        const task = tasks.find((t) => t.id === taskId);\n        if (!task) return;\n\n        setDragState({\n          isDragging: true,\n          taskId,\n          startX: e.clientX,\n          startDate: task.startDate,\n          mode,\n        });\n\n        play(\"drag_start\");\n      },\n      [editable, tasks, play]\n    );\n\n    // Handle task drag\n    const handleTaskDrag = useCallback(\n      (e: React.MouseEvent) => {\n        if (\n          !dragState.isDragging ||\n          !dragState.taskId ||\n          !dragState.startX ||\n          !dragState.startDate\n        )\n          return;\n\n        const deltaX = e.clientX - dragState.startX;\n        const totalDuration =\n          dateRange.end.getTime() - dateRange.start.getTime();\n        const timePerPixel = totalDuration / (timeColumns.length * columnWidth);\n        const deltaTime = deltaX * timePerPixel;\n\n        const task = tasks.find((t) => t.id === dragState.taskId);\n        if (!task) return;\n\n        if (dragState.mode === \"move\") {\n          const newStartDate = new Date(\n            dragState.startDate.getTime() + deltaTime\n          );\n          const taskDuration =\n            task.endDate.getTime() - task.startDate.getTime();\n          const newEndDate = new Date(newStartDate.getTime() + taskDuration);\n\n          onTaskMove?.(dragState.taskId, newStartDate, newEndDate);\n        } else if (dragState.mode === \"resize-end\") {\n          const newEndDate = new Date(task.endDate.getTime() + deltaTime);\n          if (newEndDate > task.startDate) {\n            onTaskResize?.(dragState.taskId, task.startDate, newEndDate);\n          }\n        } else if (dragState.mode === \"resize-start\") {\n          const newStartDate = new Date(task.startDate.getTime() + deltaTime);\n          if (newStartDate < task.endDate) {\n            onTaskResize?.(dragState.taskId, newStartDate, task.endDate);\n          }\n        }\n      },\n      [\n        dragState,\n        dateRange,\n        timeColumns.length,\n        columnWidth,\n        tasks,\n        onTaskMove,\n        onTaskResize,\n      ]\n    );\n\n    // Handle task drag end\n    const handleTaskDragEnd = useCallback(() => {\n      if (dragState.isDragging) {\n        setDragState({ isDragging: false });\n        play(\"drag_end\");\n      }\n    }, [dragState.isDragging, play]);\n\n    // Handle progress update\n    const handleProgressUpdate = useCallback(\n      (taskId: string, e: React.MouseEvent, progressBarWidth: number) => {\n        if (!editable) return;\n\n        const rect = e.currentTarget.getBoundingClientRect();\n        const x = e.clientX - rect.left;\n        const progress = Math.max(\n          0,\n          Math.min(100, (x / progressBarWidth) * 100)\n        );\n\n        onProgressUpdate?.(taskId, Math.round(progress));\n        play(\"progress_update\");\n      },\n      [editable, onProgressUpdate, play]\n    );\n\n    // Format date for header\n    const formatHeaderDate = useCallback(\n      (date: Date) => {\n        switch (timeScale.unit) {\n          case \"day\":\n            return date.getDate().toString();\n          case \"week\":\n            return `W${Math.ceil(date.getDate() / 7)}`;\n          case \"month\":\n            return date.toLocaleDateString(\"default\", { month: \"short\" });\n          case \"quarter\":\n            return `Q${Math.ceil((date.getMonth() + 1) / 3)}`;\n          case \"year\":\n            return date.getFullYear().toString();\n          default:\n            return date.toLocaleDateString();\n        }\n      },\n      [timeScale.unit]\n    );\n\n    // Organize tasks by hierarchy\n    const organizedTasks = useMemo(() => {\n      if (!showHierarchy) return tasks;\n\n      const taskMap = new Map(tasks.map((task: any) => [task.id, task]));\n      const roots: GanttTask[] = [];\n      const children = new Map<string, GanttTask[]>();\n\n      // Build hierarchy\n      tasks.forEach((task: any) => {\n        if (task.parent) {\n          const parentChildren = children.get(task.parent) || [];\n          parentChildren.push(task);\n          children.set(task.parent, parentChildren);\n        } else {\n          roots.push(task);\n        }\n      });\n\n      // Flatten with hierarchy\n      const flattened: GanttTask[] = [];\n      const addTasksRecursively = (taskList: GanttTask[], level = 0) => {\n        taskList.forEach((task: any) => {\n          flattened.push({\n            ...task,\n            customData: { ...task.customData, level },\n          });\n          const taskChildren = children.get(task.id);\n          if (taskChildren) {\n            addTasksRecursively(taskChildren, level + 1);\n          }\n        });\n      };\n\n      addTasksRecursively(roots);\n      return flattened;\n    }, [tasks, showHierarchy]);\n\n    // Default task renderer\n    const defaultRenderTask = useCallback(\n      (\n        task: GanttTask,\n        bounds: { x: number; width: number; y: number; height: number }\n      ) => {\n        const isSelected = selectedTask === task.id;\n        const isHovered = hoveredTask === task.id;\n        const level = (task.customData?.level as number) || 0;\n\n        if (task.milestone) {\n          return (\n            <div\n              data-glass-component\n              className={cn(\n                \"glass-absolute glass-flex glass-items-center glass-justify-center glass-cursor-pointer\",\n                \"glass-border-2 glass-border-primary\"\n              )}\n              style={{\n                left: bounds.x,\n                top: bounds.y + bounds.height / 4,\n                width: bounds.height / 2,\n                height: bounds.height / 2,\n                transform: `rotate(45deg) scale(${isHovered ? 1.1 : 1})`,\n                background: task.color\n                  ? `color-mix(in srgb, ${task.color} 22%, transparent)`\n                  : \"rgba(112, 214, 255, 0.22)\",\n                borderColor: task.color || \"#70d6ff\",\n                boxShadow: isSelected\n                  ? \"0 0 0 2px rgba(112, 214, 255, 0.45)\"\n                  : undefined,\n              }}\n              onClick={() => onTaskClick?.(task)}\n              onMouseEnter={() => setHoveredTask(task.id)}\n              onMouseLeave={() => setHoveredTask(null)}\n              title={`${task.name} (Milestone)`}\n            />\n          );\n        }\n\n        return (\n          <OptimizedGlass\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={1}\n            tint=\"neutral\"\n            border=\"subtle\"\n            className={cn(\n              `glass-absolute glass-cursor-pointer glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms]`,\n              \"glass-backdrop-blur-sm glass-border glass-border-subtle glass-radius-md\",\n              task.priority && priorityColors[task.priority],\n              isHovered && \"glass-shadow-lg\"\n            )}\n            style={{\n              left: bounds.x,\n              top: bounds.y + 4,\n              width: bounds.width,\n              height: bounds.height - 8,\n              marginLeft: showHierarchy ? level * 20 : 0,\n              transform: isHovered ? \"scale(1.02)\" : undefined,\n              boxShadow: isSelected\n                ? \"0 0 0 2px rgba(112, 214, 255, 0.45)\"\n                : undefined,\n            }}\n            onClick={() => {\n              setSelectedTask(task.id);\n              onTaskClick?.(task);\n            }}\n            onMouseEnter={() => setHoveredTask(task.id)}\n            onMouseLeave={() => setHoveredTask(null)}\n            onMouseDown={(e: React.MouseEvent) =>\n              handleTaskDragStart(e, task.id, \"move\")\n            }\n          >\n            {/* Task Bar */}\n            <div className=\"glass-relative glass-h-full glass-flex glass-items-center\">\n              {/* Status Color */}\n              <div\n                className=\"glass-absolute glass-left-0 glass-top-0 glass-h-full glass-w-1 glass-rounded-l\"\n                style={{\n                  backgroundColor: task.status\n                    ? statusColors[task.status]\n                    : statusColors[\"not-started\"],\n                }}\n              />\n\n              {/* Progress Bar */}\n              {viewOptions.showProgress && task.progress > 0 && (\n                <div\n                  className={`glass-absolute glass-left-1 glass-top-1 glass-bottom-1 glass-surface-primary/30 glass-radius-sm glass-transition-all glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n                  style={{\n                    width: `${(task.progress / 100) * (bounds.width - 8)}px`,\n                  }}\n                  onClick={(e: React.MouseEvent) =>\n                    handleProgressUpdate(task.id, e, bounds.width - 8)\n                  }\n                />\n              )}\n\n              {/* Task Content */}\n              <div className=\"glass-flex-1 glass-px-3 glass-min-glass-w-0\">\n                <ContrastGuard>\n                  <div className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n                    {task.name}\n                  </div>\n                </ContrastGuard>\n                {viewOptions.showResources && task.assignee && (\n                  <ContrastGuard>\n                    <div className=\"glass-text-xs glass-text-secondary glass-truncate\">\n                      {task.assignee.name}\n                    </div>\n                  </ContrastGuard>\n                )}\n              </div>\n\n              {/* Progress Percentage */}\n              {viewOptions.showProgress && (\n                <ContrastGuard>\n                  <div className=\"glass-text-xs glass-text-secondary glass-px-2\">\n                    {task.progress}%\n                  </div>\n                </ContrastGuard>\n              )}\n\n              {/* Resize Handles */}\n              {editable && isSelected && (\n                <>\n                  <div\n                    className=\"glass-absolute glass-left-0 glass-top-0 glass-bottom-0 glass-w-1 glass-cursor-ew-resize glass-surface-primary/20 hover:glass-surface-primary/40\"\n                    onMouseDown={(e: React.MouseEvent) =>\n                      handleTaskDragStart(e, task.id, \"resize-start\")\n                    }\n                  />\n                  <div\n                    className=\"glass-absolute glass-right-0 glass-top-0 glass-bottom-0 glass-w-1 glass-cursor-ew-resize glass-surface-primary/20 hover:glass-surface-primary/40\"\n                    onMouseDown={(e: React.MouseEvent) =>\n                      handleTaskDragStart(e, task.id, \"resize-end\")\n                    }\n                  />\n                </>\n              )}\n            </div>\n          </OptimizedGlass>\n        );\n      },\n      [\n        selectedTask,\n        hoveredTask,\n        priorityColors,\n        statusColors,\n        showHierarchy,\n        viewOptions.showProgress,\n        viewOptions.showResources,\n        editable,\n        onTaskClick,\n        handleTaskDragStart,\n        handleProgressUpdate,\n      ]\n    );\n\n    // Handle scroll synchronization\n    const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n      const scrollLeft = e.currentTarget.scrollLeft;\n      const scrollTop = e.currentTarget.scrollTop;\n\n      setScrollPosition({ x: scrollLeft, y: scrollTop });\n\n      if (timelineRef.current) {\n        timelineRef.current.scrollLeft = scrollLeft;\n      }\n      if (taskListRef.current) {\n        taskListRef.current.scrollTop = scrollTop;\n      }\n    }, []);\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={ganttId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-gantt-chart glass-radius-lg glass-backdrop-blur-md glass-border glass-border-subtle glass-overflow-hidden glass-max-w-full\",\n          className\n        )}\n        style={{ height: \"min(100%, \" + height + \"px)\", minWidth: 0 }}\n        onMouseMove={handleTaskDrag}\n        onMouseUp={handleTaskDragEnd}\n        onMouseLeave={handleTaskDragEnd}\n        {...props}\n      >\n        <Motion\n          preset={shouldAnimate && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-h-full glass-flex glass-flex-col\"\n        >\n          {/* Header */}\n          <div className=\"glass-flex glass-border-b glass-border-subtle\">\n            {/* Task List Header */}\n            <div className=\"glass-w-32 glass-p-3 glass-border-r glass-border-subtle glass-surface-dark/20\">\n              <ContrastGuard>\n                <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary\">\n                  Tasks\n                </h3>\n              </ContrastGuard>\n            </div>\n\n            {/* Timeline Header */}\n            <div\n              ref={timelineRef}\n              className=\"glass-flex-1 glass-overflow-x-hidden glass-surface-dark/20\"\n              style={{ ...{ scrollbarWidth: \"none\", msOverflowStyle: \"none\" } }}\n            >\n              <div\n                className=\"glass-flex glass-h-16\"\n                style={{ width: timeColumns.length * columnWidth }}\n              >\n                {timeColumns.map((date, index) => {\n                  const isToday =\n                    viewOptions.showToday &&\n                    date.toDateString() === new Date().toDateString();\n                  const isWeekend =\n                    !viewOptions.showWeekends &&\n                    (date.getDay() === 0 || date.getDay() === 6);\n\n                  return (\n                    <div\n                      key={index}\n                      className={cn(\n                        \"glass-flex-shrink-0 glass-border-r glass-border-subtle glass-flex glass-items-center glass-justify-center glass-text-xs\",\n                        isToday &&\n                          \"glass-surface-primary/10 glass-text-primary glass-font-semibold\",\n                        isWeekend &&\n                          \"glass-surface-muted/20 glass-text-secondary\"\n                      )}\n                      style={{ width: columnWidth }}\n                    >\n                      <ContrastGuard>\n                        {renderTimelineHeader\n                          ? renderTimelineHeader(date, timeScale.unit)\n                          : formatHeaderDate(date)}\n                      </ContrastGuard>\n                    </div>\n                  );\n                })}\n              </div>\n            </div>\n          </div>\n\n          {/* Content */}\n          <div className=\"glass-flex glass-flex-1 glass-overflow-hidden\">\n            {/* Task List */}\n            <div\n              ref={taskListRef}\n              className=\"glass-w-32 glass-border-r glass-border-subtle glass-overflow-y-hidden glass-surface-dark/20\"\n            >\n              <div>\n                {organizedTasks.map((task, index) => {\n                  const level = (task.customData?.level as number) || 0;\n\n                  return (\n                    <Motion\n                      key={task.id}\n                      preset={\n                        shouldAnimate && respectMotionPreference\n                          ? \"slideUp\"\n                          : \"none\"\n                      }\n                      delay={index * 50}\n                    >\n                      <div\n                        className={cn(\n                          \"glass-flex glass-items-center glass-p-2 glass-border-b glass-border-subtle glass-cursor-pointer glass-transition-colors\",\n                          \"hover:glass-surface-overlay\",\n                          selectedTask === task.id &&\n                            \"glass-surface-primary/10 glass-text-primary\"\n                        )}\n                        style={{\n                          height: rowHeight,\n                          paddingLeft: showHierarchy ? 8 + level * 16 : 8,\n                        }}\n                        onClick={() => {\n                          setSelectedTask(task.id);\n                          onTaskClick?.(task);\n                        }}\n                      >\n                        {showHierarchy &&\n                          task.children &&\n                          task.children.length > 0 && (\n                            <button className=\"glass-mr-2 glass-text-secondary hover:glass-text-primary\">\n                              \u25BC\n                            </button>\n                          )}\n\n                        <div className=\"glass-flex-1 glass-min-glass-w-0\">\n                          <ContrastGuard>\n                            <div className=\"glass-text-sm glass-font-medium glass-text-primary glass-truncate\">\n                              {task.name}\n                            </div>\n                          </ContrastGuard>\n                          {task.assignee && (\n                            <ContrastGuard>\n                              <div className=\"glass-text-xs glass-text-secondary glass-truncate\">\n                                {task.assignee.name}\n                              </div>\n                            </ContrastGuard>\n                          )}\n                        </div>\n\n                        {task.milestone && (\n                          <div className=\"glass-w-3 glass-h-3 glass-surface-primary glass-radius-full glass-transform glass-rotate-45 glass-ml-2\" />\n                        )}\n                      </div>\n                    </Motion>\n                  );\n                })}\n              </div>\n            </div>\n\n            {/* Chart Area */}\n            <div\n              ref={chartRef}\n              className=\"glass-flex-1 glass-overflow-auto glass-relative\"\n              onScroll={handleScroll}\n            >\n              <div\n                className=\"glass-relative\"\n                style={{\n                  width: timeColumns.length * columnWidth,\n                  height: organizedTasks.length * rowHeight,\n                }}\n              >\n                {/* Grid Lines */}\n                <div className=\"glass-absolute glass-inset-0\">\n                  {/* Vertical lines */}\n                  {timeColumns.map((date, index) => {\n                    const isToday =\n                      viewOptions.showToday &&\n                      date.toDateString() === new Date().toDateString();\n                    const isWeekend =\n                      date.getDay() === 0 || date.getDay() === 6;\n\n                    return (\n                      <div\n                        key={index}\n                        className={cn(\n                          \"glass-absolute glass-top-0 glass-bottom-0 glass-border-r\",\n                          isToday\n                            ? \"glass-border-primary glass-surface-primary/5\"\n                            : \"glass-border-subtle\",\n                          !viewOptions.showWeekends &&\n                            isWeekend &&\n                            \"glass-surface-muted/10\"\n                        )}\n                        style={{ left: index * columnWidth }}\n                      />\n                    );\n                  })}\n\n                  {/* Horizontal lines */}\n                  {organizedTasks.map((_, index) => (\n                    <div\n                      key={index}\n                      className=\"glass-absolute glass-left-0 glass-right-0 glass-border-b glass-border-subtle\"\n                      style={{ top: (index + 1) * rowHeight }}\n                    />\n                  ))}\n                </div>\n\n                {/* Tasks */}\n                {organizedTasks.map((task, index) => {\n                  const position = getTaskPosition(task);\n                  const bounds = {\n                    x: position.x,\n                    width: position.width,\n                    y: index * rowHeight,\n                    height: rowHeight,\n                  };\n\n                  return (\n                    <Motion\n                      key={task.id}\n                      preset={\n                        shouldAnimate && respectMotionPreference\n                          ? \"slideRight\"\n                          : \"none\"\n                      }\n                      delay={index * 100}\n                    >\n                      {renderTask\n                        ? renderTask(task, bounds)\n                        : defaultRenderTask(task, bounds)}\n                    </Motion>\n                  );\n                })}\n\n                {/* Dependencies */}\n                {viewOptions.showDependencies &&\n                  organizedTasks.map((task: any) =>\n                    task.dependencies?.map((depId: any) => {\n                      const depTask = organizedTasks.find(\n                        (t) => t.id === depId\n                      );\n                      if (!depTask) return null;\n\n                      const taskIndex = organizedTasks.indexOf(task);\n                      const depIndex = organizedTasks.indexOf(depTask);\n                      const taskPos = getTaskPosition(task);\n                      const depPos = getTaskPosition(depTask);\n\n                      return (\n                        <svg\n                          key={`${task.id}-${depId}`}\n                          className=\"glass-absolute glass-pointer-events-none\"\n                          style={{\n                            left: 0,\n                            top: 0,\n                            width: \"100%\",\n                            height: \"100%\",\n                          }}\n                        >\n                          <line\n                            x1={depPos.x + depPos.width}\n                            y1={depIndex * rowHeight + rowHeight / 2}\n                            x2={taskPos.x}\n                            y2={taskIndex * rowHeight + rowHeight / 2}\n                            stroke=\"currentColor\"\n                            strokeWidth=\"2\"\n                            strokeDasharray=\"4,4\"\n                            className=\"glass-text-primary-glass-opacity-40\"\n                          />\n                          <polygon\n                            points={`${taskPos.x - 6},${taskIndex * rowHeight + rowHeight / 2 - 3} ${taskPos.x},${taskIndex * rowHeight + rowHeight / 2} ${taskPos.x - 6},${taskIndex * rowHeight + rowHeight / 2 + 3}`}\n                            fill=\"currentColor\"\n                            className=\"glass-text-primary-glass-opacity-40\"\n                          />\n                        </svg>\n                      );\n                    })\n                  )}\n              </div>\n            </div>\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassGanttChart.displayName = \"GlassGanttChart\";\n\nexport default GlassGanttChart;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useCallback, useRef, useState } from \"react\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface KanbanCard {\n  id: string;\n  title: string;\n  description?: string;\n  content?: React.ReactNode;\n  priority?: \"low\" | \"medium\" | \"high\" | \"urgent\";\n  tags?: string[];\n  assignee?: {\n    id: string;\n    name: string;\n    avatar?: string;\n  };\n  dueDate?: Date;\n  createdAt?: Date;\n  updatedAt?: Date;\n  customData?: Record<string, unknown>;\n}\n\nexport interface KanbanColumn {\n  id: string;\n  title: string;\n  description?: string;\n  color?: string;\n  limit?: number;\n  cards: KanbanCard[];\n  allowedCardTypes?: string[];\n  readOnly?: boolean;\n  customData?: Record<string, unknown>;\n}\n\nexport interface DragState {\n  isDragging: boolean;\n  draggedCard?: KanbanCard;\n  draggedFrom?: string;\n  dragOverColumn?: string;\n  dragPosition?: number;\n}\n\nexport interface GlassKanbanBoardProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Board columns */\n  columns?: KanbanColumn[];\n  /** Board title */\n  title?: string;\n  /** Board description */\n  description?: string;\n  /** Whether cards can be dragged */\n  enableDrag?: boolean;\n  /** Whether to show card counts */\n  showCardCounts?: boolean;\n  /** Whether to show column limits */\n  showColumnLimits?: boolean;\n  /** Card size variant */\n  cardSize?: \"sm\" | \"md\" | \"lg\";\n  /** Whether to enable virtual scrolling */\n  virtualized?: boolean;\n  /** Column width */\n  columnWidth?: string | number;\n  /** Maximum board height */\n  maxHeight?: string | number;\n  /** Compact rendering for embedded previews and narrow containers */\n  compact?: boolean;\n  /** Contain the board in its parent without full-page sizing assumptions */\n  contained?: boolean;\n  /** Explicit board width */\n  width?: string | number;\n  /** Explicit board height */\n  height?: string | number;\n  /** Show the board title and description header */\n  showHeader?: boolean;\n  /** Show column-level toolbar controls such as add/delete */\n  showToolbar?: boolean;\n  /** Show add-card/add-column actions */\n  showActions?: boolean;\n  /** Custom card renderer */\n  renderCard?: (card: KanbanCard, columnId: string) => React.ReactNode;\n  /** Custom column header renderer */\n  renderColumnHeader?: (column: KanbanColumn) => React.ReactNode;\n  /** Card move handler */\n  onCardMove?: (\n    cardId: string,\n    fromColumn: string,\n    toColumn: string,\n    position: number\n  ) => void;\n  /** Card click handler */\n  onCardClick?: (card: KanbanCard, columnId: string) => void;\n  /** Card double click handler */\n  onCardDoubleClick?: (card: KanbanCard, columnId: string) => void;\n  /** Column add handler */\n  onColumnAdd?: () => void;\n  /** Column update handler */\n  onColumnUpdate?: (column: KanbanColumn) => void;\n  /** Column delete handler */\n  onColumnDelete?: (columnId: string) => void;\n  /** Card add handler */\n  onCardAdd?: (columnId: string) => void;\n  /** Card update handler */\n  onCardUpdate?: (card: KanbanCard, columnId: string) => void;\n  /** Card delete handler */\n  onCardDelete?: (cardId: string, columnId: string) => void;\n  /** Whether to show add column button */\n  showAddColumn?: boolean;\n  /** Whether to show add card buttons */\n  showAddCard?: boolean;\n  /** Custom empty state */\n  emptyState?: React.ReactNode;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nconst DEFAULT_KANBAN_COLUMNS: KanbanColumn[] = [\n  {\n    id: \"todo\",\n    title: \"To do\",\n    color: \"#38bdf8\",\n    limit: 3,\n    cards: [\n      {\n        id: \"demo-card-1\",\n        title: \"Sketch hero\",\n        description: \"Tighten layout and copy.\",\n        priority: \"medium\",\n        tags: [\"design\"],\n      },\n    ],\n  },\n  {\n    id: \"doing\",\n    title: \"Doing\",\n    color: \"#a3e635\",\n    limit: 3,\n    cards: [\n      {\n        id: \"demo-card-2\",\n        title: \"Wire previews\",\n        description: \"Validate component states.\",\n        priority: \"high\",\n        tags: [\"qa\"],\n      },\n    ],\n  },\n  {\n    id: \"done\",\n    title: \"Done\",\n    color: \"#f59e0b\",\n    limit: 4,\n    cards: [\n      {\n        id: \"demo-card-3\",\n        title: \"Token pass\",\n        description: \"Ship stable glass colors.\",\n        priority: \"low\",\n        tags: [\"tokens\"],\n      },\n    ],\n  },\n];\n\nexport const GlassKanbanBoard = forwardRef<\n  HTMLDivElement,\n  GlassKanbanBoardProps\n>(\n  (\n    {\n      columns = [],\n      title,\n      description,\n      enableDrag = true,\n      showCardCounts = true,\n      showColumnLimits = true,\n      cardSize = \"md\",\n      virtualized = false,\n      columnWidth = \"300px\",\n      maxHeight,\n      compact = false,\n      contained = false,\n      width,\n      height,\n      showHeader = true,\n      showToolbar = true,\n      showActions = true,\n      renderCard,\n      renderColumnHeader,\n      onCardMove,\n      onCardClick,\n      onCardDoubleClick,\n      onColumnAdd,\n      onColumnUpdate,\n      onColumnDelete,\n      onCardAdd,\n      onCardUpdate,\n      onCardDelete,\n      showAddColumn = true,\n      showAddCard = true,\n      emptyState,\n      respectMotionPreference = true,\n      className,\n      style,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const { play, feedback } = useGlassSound();\n    const kanbanId = useA11yId(\"glass-kanban-board\");\n\n    const [dragState, setDragState] = useState<DragState>({\n      isDragging: false,\n    });\n    const [scrollPositions, setScrollPositions] = useState<\n      Record<string, number>\n    >({});\n    const columnRefs = useRef<Record<string, HTMLDivElement>>({});\n\n    // Card size configurations\n    const cardSizeConfig = {\n      sm: {\n        padding: \"glass-p-3\",\n        text: \"glass-text-sm\",\n        spacing: \"glass-gap-2\",\n        minHeight: \"min-h-[80px]\",\n      },\n      md: {\n        padding: \"glass-p-4\",\n        text: \"glass-text-sm\",\n        spacing: \"glass-gap-3\",\n        minHeight: \"min-h-[100px]\",\n      },\n      lg: {\n        padding: \"glass-p-6\",\n        text: \"glass-text-base\",\n        spacing: \"glass-gap-4\",\n        minHeight: \"min-h-[120px]\",\n      },\n    };\n\n    const numericColumnWidth =\n      typeof columnWidth === \"number\"\n        ? columnWidth\n        : Number.parseFloat(String(columnWidth));\n    const isCompact =\n      compact ||\n      cardSize === \"sm\" ||\n      (!!numericColumnWidth && numericColumnWidth <= 160);\n    const config = cardSizeConfig[cardSize];\n    const boardColumns =\n      columns.length === 0 && !emptyState ? DEFAULT_KANBAN_COLUMNS : columns;\n    const effectiveShowAddColumn = showActions && showAddColumn;\n    const effectiveShowAddCard = showActions && showAddCard;\n    const effectiveColumnWidth =\n      contained && compact && columnWidth === \"300px\" ? \"180px\" : columnWidth;\n\n    // Priority colors\n    const priorityColors = {\n      low: \"glass-border-green-500/30 bg-green-500/5\",\n      medium: \"glass-border-yellow-500/30 bg-yellow-500/5\",\n      high: \"glass-border-orange-500/30 bg-orange-500/5\",\n      urgent: \"glass-border-red-500/30 bg-red-500/5\",\n    };\n\n    // Handle drag start\n    const handleDragStart = useCallback(\n      (card: KanbanCard, columnId: string) => {\n        if (!enableDrag) return;\n\n        setDragState({\n          isDragging: true,\n          draggedCard: card,\n          draggedFrom: columnId,\n        });\n        feedback(\"slide\");\n      },\n      [enableDrag, feedback]\n    );\n\n    // Handle drag over\n    const handleDragOver = useCallback(\n      (e: React.DragEvent, columnId: string) => {\n        if (!dragState.isDragging) return;\n\n        e.preventDefault();\n        setDragState((prev) => ({\n          ...prev,\n          dragOverColumn: columnId,\n        }));\n      },\n      [dragState.isDragging]\n    );\n\n    // Handle drag end\n    const handleDragEnd = useCallback(() => {\n      setDragState({ isDragging: false });\n    }, []);\n\n    // Handle drop\n    const handleDrop = useCallback(\n      (e: React.DragEvent, columnId: string, position?: number) => {\n        e.preventDefault();\n\n        if (!dragState.draggedCard || !dragState.draggedFrom) return;\n\n        const targetPosition = position ?? 0;\n\n        if (dragState.draggedFrom !== columnId) {\n          onCardMove?.(\n            dragState.draggedCard.id,\n            dragState.draggedFrom,\n            columnId,\n            targetPosition\n          );\n          feedback(\"success\");\n        }\n\n        setDragState({ isDragging: false });\n      },\n      [dragState, onCardMove, feedback]\n    );\n\n    // Get card priority indicator\n    const getPriorityIndicator = (priority?: KanbanCard[\"priority\"]) => {\n      if (!priority) return null;\n\n      const colors = {\n        low: \"bg-green-500\",\n        medium: \"bg-yellow-500\",\n        high: \"bg-orange-500\",\n        urgent: \"bg-red-500\",\n      };\n\n      return (\n        <div\n          className={cn(\n            \"glass-w-1 glass-h-full glass-absolute left-0 top-0 rounded-l-md\",\n            colors[priority]\n          )}\n        />\n      );\n    };\n\n    // Default card renderer\n    const defaultRenderCard = useCallback(\n      (card: KanbanCard, columnId: string) => {\n        return (\n          <OptimizedGlass\n            key={card.id}\n            draggable={\n              enableDrag &&\n              !boardColumns.find((c) => c.id === columnId)?.readOnly\n            }\n            onDragStart={(e: React.DragEvent) =>\n              handleDragStart(card, columnId)\n            }\n            onDragEnd={handleDragEnd}\n            onClick={() => onCardClick?.(card, columnId)}\n            onDoubleClick={() => onCardDoubleClick?.(card, columnId)}\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={1}\n            tint=\"neutral\"\n            border=\"subtle\"\n            className={cn(\n              `glass-kanban-card glass-relative glass-cursor-pointer transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n              \"glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-radius-md\",\n              !isCompact && config.padding,\n              config.minHeight,\n              \"hover:scale-[1.02] hover:shadow-lg\",\n              dragState.isDragging &&\n                dragState.draggedCard?.id === card.id &&\n                \"opacity-50 scale-95\",\n              card.priority && priorityColors[card.priority],\n              enableDrag && \"cursor-grab glass-active-cursor-grabbing\"\n            )}\n            role=\"article\"\n            aria-label={`Card: ${card.title}`}\n            tabIndex={0}\n            style={{\n              padding: isCompact ? \"0.55rem 0.6rem\" : undefined,\n              minHeight: isCompact ? 64 : undefined,\n              overflow: \"hidden\",\n            }}\n            onKeyDown={(e: React.KeyboardEvent) => {\n              if (e.key === \"Enter\" || e.key === \" \") {\n                onCardClick?.(card, columnId);\n              }\n            }}\n          >\n            {getPriorityIndicator(card.priority)}\n\n            <div\n              className={cn(\"glass-relative\", !isCompact && config.spacing)}\n              style={{\n                display: \"grid\",\n                gap: isCompact ? \"0.35rem\" : undefined,\n                minWidth: 0,\n              }}\n            >\n              {/* Card Title */}\n              <h3\n                className={cn(\n                  \"glass-font-semibold glass-text-primary line-clamp-2\",\n                  !isCompact && config.text\n                )}\n                style={{\n                  margin: 0,\n                  color: \"rgba(248,250,252,0.96)\",\n                  fontSize: isCompact ? \"0.78rem\" : undefined,\n                  lineHeight: isCompact ? 1.25 : undefined,\n                  overflowWrap: \"anywhere\",\n                }}\n              >\n                <ContrastGuard>{card.title}</ContrastGuard>\n              </h3>\n\n              {/* Card Description */}\n              {card.description && !isCompact && (\n                <ContrastGuard>\n                  <p className=\"glass-text-secondary glass-text-sm glass-line-clamp-3\">\n                    {card.description}\n                  </p>\n                </ContrastGuard>\n              )}\n\n              {/* Custom Content */}\n              {card.content && (\n                <div className=\"glass-text-sm\">{card.content}</div>\n              )}\n\n              {/* Tags */}\n              {card.tags && card.tags.length > 0 && (\n                <div\n                  className=\"glass-flex glass-flex-wrap glass-gap-1\"\n                  style={{\n                    display: \"flex\",\n                    flexWrap: \"wrap\",\n                    gap: isCompact ? 4 : undefined,\n                  }}\n                >\n                  {card.tags.slice(0, 3).map((tag, index) => (\n                    <span\n                      key={index}\n                      className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-primary/10 glass-text-primary glass-radius-full\"\n                      style={{\n                        maxWidth: \"100%\",\n                        padding: isCompact ? \"0.15rem 0.35rem\" : undefined,\n                        borderRadius: 999,\n                        background:\n                          \"color-mix(in srgb, hsl(var(--glass-color-primary)) 10%, transparent)\",\n                        color: \"rgba(191,232,255,0.92)\",\n                        fontSize: isCompact ? \"0.62rem\" : undefined,\n                        lineHeight: 1.1,\n                        overflow: \"hidden\",\n                        textOverflow: \"ellipsis\",\n                        whiteSpace: \"nowrap\",\n                      }}\n                    >\n                      <ContrastGuard>{tag}</ContrastGuard>\n                    </span>\n                  ))}\n                  {card.tags.length > 3 && (\n                    <ContrastGuard>\n                      <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius-full\">\n                        +{card.tags.length - 3}\n                      </span>\n                    </ContrastGuard>\n                  )}\n                </div>\n              )}\n\n              {/* Footer */}\n              <div\n                className=\"glass-flex glass-items-center glass-justify-between glass-pt-2\"\n                style={{ display: isCompact ? \"none\" : undefined }}\n              >\n                {/* Assignee */}\n                {card.assignee && (\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    {card.assignee.avatar ? (\n                      <img\n                        src={card.assignee.avatar}\n                        alt={card.assignee.name}\n                        className=\"glass-w-6 glass-h-6 glass-radius-full\"\n                      />\n                    ) : (\n                      <div className=\"glass-w-6 glass-h-6 glass-surface-primary/20 glass-text-primary glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs glass-font-medium\">\n                        <ContrastGuard>\n                          {card.assignee.name.charAt(0).toUpperCase()}\n                        </ContrastGuard>\n                      </div>\n                    )}\n                  </div>\n                )}\n\n                {/* Due Date */}\n                {card.dueDate && (\n                  <div\n                    className={cn(\n                      \"glass-text-xs glass-px-2 glass-py-1 glass-radius-md\",\n                      new Date(card.dueDate) < new Date()\n                        ? \"bg-red-500/10 text-red-600\"\n                        : new Date(card.dueDate).getTime() - Date.now() <\n                            24 * 60 * 60 * 1000\n                          ? \"bg-yellow-500/10 text-yellow-600\"\n                          : \"bg-muted/20 glass-text-secondary\"\n                    )}\n                  >\n                    <ContrastGuard>\n                      {new Date(card.dueDate).toLocaleDateString()}\n                    </ContrastGuard>\n                  </div>\n                )}\n              </div>\n            </div>\n          </OptimizedGlass>\n        );\n      },\n      [\n        enableDrag,\n        boardColumns,\n        handleDragStart,\n        handleDragEnd,\n        onCardClick,\n        onCardDoubleClick,\n        config,\n        dragState,\n        priorityColors,\n        isCompact,\n      ]\n    );\n\n    // Default column header renderer\n    const defaultRenderColumnHeader = useCallback(\n      (column: KanbanColumn) => {\n        const cardCount = column.cards.length;\n        const isOverLimit = column.limit && cardCount > column.limit;\n\n        return (\n          <div\n            className=\"glass-flex glass-items-center glass-justify-between\"\n            style={{\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"space-between\",\n              gap: 6,\n              minWidth: 0,\n            }}\n          >\n            <div\n              className=\"glass-flex glass-items-center glass-gap-2\"\n              style={{\n                display: \"flex\",\n                alignItems: \"center\",\n                gap: 6,\n                minWidth: 0,\n              }}\n            >\n              <div\n                className=\"glass-w-3 glass-h-3 glass-radius-full\"\n                style={{\n                  backgroundColor: column.color || \"var(--glass-gray-500)\",\n                  width: isCompact ? 7 : 12,\n                  height: isCompact ? 7 : 12,\n                  borderRadius: 999,\n                  flex: \"0 0 auto\",\n                }}\n              />\n              <ContrastGuard>\n                <h2\n                  className=\"glass-font-semibold glass-text-primary\"\n                  style={{\n                    margin: 0,\n                    minWidth: 0,\n                    color: \"rgba(248,250,252,0.96)\",\n                    fontSize: isCompact ? \"0.74rem\" : \"0.9rem\",\n                    lineHeight: 1.2,\n                    overflow: \"hidden\",\n                    textOverflow: \"ellipsis\",\n                    whiteSpace: \"nowrap\",\n                  }}\n                >\n                  {column.title}\n                </h2>\n              </ContrastGuard>\n              {showCardCounts && (\n                <ContrastGuard>\n                  <span\n                    className={cn(\n                      \"glass-px-2 glass-py-1 glass-text-xs glass-radius-full\",\n                      isOverLimit\n                        ? \"bg-red-500/20 text-red-600\"\n                        : \"bg-muted/20 glass-text-secondary\"\n                    )}\n                  >\n                    {cardCount}\n                    {showColumnLimits && column.limit && ` / ${column.limit}`}\n                  </span>\n                </ContrastGuard>\n              )}\n            </div>\n\n            {showToolbar && (\n              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                {effectiveShowAddCard && !column.readOnly && (\n                  <button\n                    onClick={() => onCardAdd?.(column.id)}\n                    className={cn(\n                      \"glass-w-6 glass-h-6 glass-radius-full bg-primary/10 hover:bg-primary/20\",\n                      \"glass-text-primary glass-text-sm glass-font-bold transition-colors\",\n                      \"glass-flex glass-items-center glass-justify-center glass-focus glass-touch-target glass-contrast-guard\"\n                    )}\n                    title=\"Add card\"\n                    aria-label={`Add card to ${column.title}`}\n                  >\n                    +\n                  </button>\n                )}\n\n                {showActions && onColumnDelete && (\n                  <button\n                    onClick={() => onColumnDelete(column.id)}\n                    className={cn(\n                      \"glass-w-6 glass-h-6 glass-radius-full bg-red-500/10 hover:bg-red-500/20\",\n                      \"text-red-500 glass-text-sm transition-colors\",\n                      \"glass-flex glass-items-center glass-justify-center glass-focus glass-touch-target glass-contrast-guard\"\n                    )}\n                    title=\"Delete column\"\n                    aria-label={`Delete ${column.title} column`}\n                  >\n                    \u00D7\n                  </button>\n                )}\n              </div>\n            )}\n          </div>\n        );\n      },\n      [\n        showCardCounts,\n        showColumnLimits,\n        effectiveShowAddCard,\n        showActions,\n        showToolbar,\n        onCardAdd,\n        onColumnDelete,\n        isCompact,\n      ]\n    );\n\n    // Handle column scroll\n    const handleColumnScroll = useCallback(\n      (columnId: string, scrollTop: number) => {\n        setScrollPositions((prev) => ({\n          ...prev,\n          [columnId]: scrollTop,\n        }));\n      },\n      []\n    );\n\n    const maxHeightStyle = maxHeight ? { maxHeight } : undefined;\n    const columnsContainerStyle = {\n      minWidth: boardColumns.length > 0 ? \"fit-content\" : \"100%\",\n      gap: isCompact ? 8 : undefined,\n      padding: isCompact ? 10 : undefined,\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={kanbanId}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-kanban-board glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20\",\n          className\n        )}\n        style={{\n          ...(maxHeightStyle ?? {}),\n          width,\n          height,\n          overflow: \"hidden\",\n          maxWidth: contained ? \"100%\" : undefined,\n          color: \"rgba(248,250,252,0.94)\",\n          ...style,\n        }}\n        role=\"region\"\n        aria-label={ariaLabel || \"Kanban Board\"}\n        data-testid={dataTestId}\n        {...props}\n      >\n        <Motion\n          preset={\n            !prefersReducedMotion && respectMotionPreference ? \"fadeIn\" : \"none\"\n          }\n          className=\"glass-flex glass-flex-col glass-h-full\"\n        >\n          {/* Board Header */}\n          {showHeader && (title || description) && (\n            <div\n              className=\"glass-p-6 glass-border-b glass-border-glass-border/20\"\n              style={{ padding: isCompact ? \"0.75rem 0.9rem\" : undefined }}\n            >\n              {title && (\n                <h1\n                  className=\"glass-text-xl glass-font-bold glass-text-primary glass-mb-2\"\n                  style={{\n                    fontSize: isCompact ? \"0.95rem\" : undefined,\n                    marginBottom: isCompact ? \"0.25rem\" : undefined,\n                  }}\n                >\n                  {title}\n                </h1>\n              )}\n              {description && !isCompact && (\n                <p className=\"glass-text-secondary\">{description}</p>\n              )}\n            </div>\n          )}\n\n          {/* Kanban Columns */}\n          <div\n            className=\"glass-flex-1 glass-overflow-x-auto glass-overflow-y-glass-hidden\"\n            style={{ overflowX: \"auto\", overflowY: \"hidden\", minHeight: 0 }}\n          >\n            {boardColumns.length === 0 && emptyState ? (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full glass-p-8\">\n                {emptyState}\n              </div>\n            ) : (\n              <div\n                className={cn(\n                  \"glass-flex glass-h-full\",\n                  !isCompact && \"glass-gap-6 glass-p-6\"\n                )}\n                style={{ ...columnsContainerStyle }}\n              >\n                {boardColumns.map((column) => (\n                  <Motion\n                    key={column.id}\n                    preset={\n                      !prefersReducedMotion && respectMotionPreference\n                        ? \"slideUp\"\n                        : \"none\"\n                    }\n                    delay={boardColumns.indexOf(column) * 100}\n                  >\n                    <OptimizedGlass\n                      elevation=\"level2\"\n                      intensity=\"medium\"\n                      depth={2}\n                      tint=\"neutral\"\n                      border=\"subtle\"\n                      className={cn(\n                        \"glass-kanban-column glass-flex glass-flex-col glass-h-full\",\n                        \"glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-radius-lg\",\n                        dragState.dragOverColumn === column.id &&\n                          \"ring-2 ring-primary/50\"\n                      )}\n                      style={{\n                        width: effectiveColumnWidth,\n                        minWidth: effectiveColumnWidth,\n                        maxWidth: effectiveColumnWidth,\n                        overflow: \"hidden\",\n                      }}\n                      onDragOver={(e: React.DragEvent) =>\n                        handleDragOver(e, column.id)\n                      }\n                      onDrop={(e: React.DragEvent) => handleDrop(e, column.id)}\n                      role=\"region\"\n                      aria-label={`Column: ${column.title}`}\n                    >\n                      {/* Column Header */}\n                      <div\n                        className=\"glass-p-4 glass-border-b glass-border-glass-border/20\"\n                        style={{\n                          padding: isCompact ? \"0.5rem 0.55rem\" : undefined,\n                          borderBottom: \"1px solid rgba(255,255,255,0.08)\",\n                        }}\n                      >\n                        {renderColumnHeader\n                          ? renderColumnHeader(column)\n                          : defaultRenderColumnHeader(column)}\n                        {column.description && (\n                          <p className=\"glass-text-sm glass-text-secondary glass-mt-2\">\n                            {column.description}\n                          </p>\n                        )}\n                      </div>\n\n                      {/* Column Body */}\n                      <div\n                        ref={(el) => {\n                          if (el) columnRefs.current[column.id] = el;\n                        }}\n                        className=\"glass-flex-1 glass-overflow-y-auto glass-p-4 glass-gap-3\"\n                        style={{\n                          display: \"grid\",\n                          alignContent: \"start\",\n                          gap: isCompact ? 8 : 12,\n                          padding: isCompact ? \"0.5rem\" : undefined,\n                          overflowY: \"auto\",\n                          minHeight: 0,\n                        }}\n                        onScroll={(e: React.UIEvent) =>\n                          handleColumnScroll(\n                            column.id,\n                            e.currentTarget.scrollTop\n                          )\n                        }\n                      >\n                        {column.cards.map((card, index) => (\n                          <Motion\n                            key={card.id}\n                            preset={\n                              !prefersReducedMotion && respectMotionPreference\n                                ? \"slideUp\"\n                                : \"none\"\n                            }\n                            delay={index * 50}\n                          >\n                            {renderCard\n                              ? renderCard(card, column.id)\n                              : defaultRenderCard(card, column.id)}\n                          </Motion>\n                        ))}\n\n                        {/* Drop Zone */}\n                        {enableDrag && dragState.isDragging && (\n                          <div\n                            className={cn(\n                              \"glass-h-2 glass-radius-md glass-border-2 glass-border-dashed glass-border-primary transition-all\",\n                              dragState.dragOverColumn === column.id &&\n                                \"bg-primary/10\"\n                            )}\n                            onDragOver={(e: React.DragEvent) =>\n                              e.preventDefault()\n                            }\n                            onDrop={(e: React.DragEvent) =>\n                              handleDrop(e, column.id, column.cards.length)\n                            }\n                          />\n                        )}\n\n                        {/* Empty State */}\n                        {column.cards.length === 0 && (\n                          <div className=\"glass-flex glass-items-center glass-justify-center glass-h-32 glass-text-secondary glass-text-sm glass-border-2 glass-border-dashed glass-border-glass-border/20 glass-radius-lg\">\n                            {column.readOnly\n                              ? \"No cards\"\n                              : \"Drop cards here or click + to add\"}\n                          </div>\n                        )}\n                      </div>\n                    </OptimizedGlass>\n                  </Motion>\n                ))}\n\n                {/* Add Column Button */}\n                {effectiveShowAddColumn && onColumnAdd && (\n                  <Motion\n                    preset={\n                      !prefersReducedMotion && respectMotionPreference\n                        ? \"slideUp\"\n                        : \"none\"\n                    }\n                    delay={boardColumns.length * 100}\n                  >\n                    <button\n                      onClick={onColumnAdd}\n                      className={cn(\n                        \"glass-flex glass-flex-col glass-items-center glass-justify-center glass-h-full min-w-[280px]\",\n                        \"glass-border-2 glass-border-dashed glass-border-glass-border/30 glass-radius-lg\",\n                        \"hover:glass-border-primary hover:bg-primary/5 transition-all\",\n                        \"glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n                      )}\n                      aria-label=\"Add new column\"\n                    >\n                      <div className=\"glass-w-12 glass-h-12 glass-radius-full glass-bg-transparent/10 glass-flex glass-items-center glass-justify-center glass-mb-2\">\n                        <span className=\"glass-text-2xl glass-font-light\">\n                          +\n                        </span>\n                      </div>\n                      <span className=\"glass-text-sm glass-font-medium\">\n                        Add Column\n                      </span>\n                    </button>\n                  </Motion>\n                )}\n              </div>\n            )}\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassKanbanBoard.displayName = \"GlassKanbanBoard\";\n\nexport default GlassKanbanBoard;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { GlassButton } from \"../button\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface MetricValue {\n  current: number;\n  previous?: number;\n  target?: number;\n  unit?: string;\n  format?: \"number\" | \"percentage\" | \"currency\" | \"bytes\" | \"time\" | \"custom\";\n  customFormatter?: (value: number) => string;\n}\n\nexport interface MetricTrend {\n  direction: \"up\" | \"down\" | \"neutral\";\n  percentage: number;\n  period?: string;\n}\n\nexport interface MetricSpark {\n  data: number[];\n  color?: string;\n  showArea?: boolean;\n}\n\nexport interface MetricConfig {\n  id: string;\n  title: string;\n  description?: string;\n  value: MetricValue;\n  trend?: MetricTrend;\n  spark?: MetricSpark;\n  icon?: React.ReactNode;\n  color?: string;\n  priority?: \"low\" | \"medium\" | \"high\" | \"critical\";\n  status?: \"success\" | \"warning\" | \"error\" | \"info\" | \"neutral\";\n  category?: string;\n  clickable?: boolean;\n  onClick?: () => void;\n  customContent?: React.ReactNode;\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\nexport interface MetricGridLayout {\n  columns: number;\n  gap: number;\n  responsive?: {\n    sm?: number;\n    md?: number;\n    lg?: number;\n    xl?: number;\n  };\n}\n\nexport interface GlassMetricsGridProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** Metrics configuration */\n  metrics?: MetricConfig[];\n  /** Grid layout */\n  layout?: MetricGridLayout;\n  /** Whether metrics are loading */\n  loading?: boolean;\n  /** Whether to show animations */\n  animated?: boolean;\n  /** Whether to show trends */\n  showTrends?: boolean;\n  /** Whether to show spark lines */\n  showSparks?: boolean;\n  /** Whether to enable auto-refresh */\n  autoRefresh?: boolean;\n  /** Auto-refresh interval in milliseconds */\n  refreshInterval?: number;\n  /** Refresh handler */\n  onRefresh?: () => void;\n  /** Metric click handler */\n  onMetricClick?: (metric: MetricConfig) => void;\n  /** Custom metric renderer */\n  renderMetric?: (metric: MetricConfig) => React.ReactNode;\n  /** Filter options */\n  filters?: {\n    categories?: string[];\n    priorities?: MetricConfig[\"priority\"][];\n    statuses?: MetricConfig[\"status\"][];\n  };\n  /** Sort options */\n  sort?: {\n    field: keyof MetricConfig;\n    direction: \"asc\" | \"desc\";\n  };\n  /** Whether to show search */\n  searchable?: boolean;\n  /** Search query */\n  searchQuery?: string;\n  /** Search change handler */\n  onSearchChange?: (query: string) => void;\n  /** Whether to show export options */\n  exportable?: boolean;\n  /** Export handler */\n  onExport?: (format: \"csv\" | \"json\" | \"png\") => void;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nconst metricsSurfaceStyle: React.CSSProperties = {\n  background:\n    \"var(--glass-primary-level3-surface)\",\n  border: \"1px solid rgba(148, 163, 184, 0.2)\",\n  boxShadow:\n    \"0 12px 30px rgba(2, 6, 23, 0.18), inset 0 1px 0 rgba(255, 255, 255, 0.07)\",\n};\n\nconst metricsCardSurfaceStyle: React.CSSProperties = {\n  background:\n    \"var(--glass-primary-level3-surface)\",\n  border: \"1px solid rgba(148, 163, 184, 0.2)\",\n  boxShadow:\n    \"0 10px 24px rgba(2, 6, 23, 0.16), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n};\n\nexport const GlassMetricsGrid = forwardRef<\n  HTMLDivElement,\n  GlassMetricsGridProps\n>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      metrics = [],\n      layout = { columns: 4, gap: 16 },\n      loading = false,\n      animated = true,\n      showTrends = true,\n      showSparks = true,\n      autoRefresh = false,\n      refreshInterval = 30000,\n      onRefresh,\n      onMetricClick,\n      renderMetric,\n      filters,\n      sort,\n      searchable = false,\n      searchQuery = \"\",\n      onSearchChange,\n      exportable = false,\n      onExport,\n      respectMotionPreference = true,\n      className,\n      style,\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const { play, feedback } = useGlassSound();\n    const metricsGridId = useA11yId(\"glass-metrics-grid\");\n\n    const [internalSearchQuery, setInternalSearchQuery] = useState(searchQuery);\n    const refreshIntervalRef = useRef<NodeJS.Timeout | null>(null);\n\n    // Auto-refresh effect\n    useEffect(() => {\n      if (autoRefresh && onRefresh && refreshInterval > 0) {\n        refreshIntervalRef.current = setInterval(() => {\n          onRefresh();\n          feedback(\"notification\");\n        }, refreshInterval);\n\n        return () => {\n          if (refreshIntervalRef.current) {\n            clearInterval(refreshIntervalRef.current);\n          }\n        };\n      }\n    }, [autoRefresh, onRefresh, refreshInterval, feedback]);\n\n    // Filter and search metrics\n    const filteredMetrics = useMemo(() => {\n      let result = [...metrics];\n\n      // Apply search\n      if (internalSearchQuery.trim()) {\n        const query = internalSearchQuery.toLowerCase();\n        result = result.filter(\n          (metric: any) =>\n            metric.title.toLowerCase().includes(query) ||\n            metric.description?.toLowerCase().includes(query) ||\n            metric.category?.toLowerCase().includes(query)\n        );\n      }\n\n      // Apply filters\n      if (filters) {\n        if (filters.categories && filters.categories.length > 0) {\n          result = result.filter(\n            (metric: any) =>\n              metric.category && filters.categories!.includes(metric.category)\n          );\n        }\n        if (filters.priorities && filters.priorities.length > 0) {\n          result = result.filter(\n            (metric: any) =>\n              metric.priority && filters.priorities!.includes(metric.priority)\n          );\n        }\n        if (filters.statuses && filters.statuses.length > 0) {\n          result = result.filter(\n            (metric: any) =>\n              metric.status && filters.statuses!.includes(metric.status)\n          );\n        }\n      }\n\n      // Apply sorting\n      if (sort) {\n        result.sort((a, b) => {\n          const aValue = a[sort.field];\n          const bValue = b[sort.field];\n          const direction = sort.direction === \"asc\" ? 1 : -1;\n\n          // Handle null/undefined values\n          if (aValue == null && bValue == null) return 0;\n          if (aValue == null) return direction;\n          if (bValue == null) return -direction;\n\n          if (aValue < bValue) return -1 * direction;\n          if (aValue > bValue) return 1 * direction;\n          return 0;\n        });\n      }\n\n      return result;\n    }, [metrics, internalSearchQuery, filters, sort]);\n\n    // Status colors\n    const statusColors = {\n      success: \"glass-border-green-500/30 bg-green-500/5\",\n      warning: \"glass-border-yellow-500/30 bg-yellow-500/5\",\n      error: \"glass-border-red-500/30 bg-red-500/5\",\n      info: \"glass-border-blue-500/30 bg-blue-500/5\",\n      neutral: \"glass-border-glass-border/30 bg-background/5\",\n    };\n\n    // Priority indicators\n    const priorityIndicators = {\n      low: \"glass-w-1 glass-h-1\",\n      medium: \"glass-w-2 glass-h-2\",\n      high: \"glass-w-2 glass-h-2\",\n      critical: \"glass-w-3 glass-h-3 animate-pulse\",\n    };\n\n    // Format metric value\n    const formatValue = useCallback((value: MetricValue): string => {\n      if (value.customFormatter) {\n        return value.customFormatter(value.current);\n      }\n\n      const num = value.current;\n      const unit = value.unit || \"\";\n\n      switch (value.format) {\n        case \"percentage\":\n          return `${num.toFixed(1)}%`;\n        case \"currency\":\n          return new Intl.NumberFormat(\"en-US\", {\n            style: \"currency\",\n            currency: \"USD\",\n          }).format(num);\n        case \"bytes\":\n          const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n          const i = Math.floor(Math.log(num) / Math.log(1024));\n          return `${(num / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`;\n        case \"time\":\n          const hours = Math.floor(num / 3600);\n          const minutes = Math.floor((num % 3600) / 60);\n          const seconds = Math.floor(num % 60);\n          if (hours > 0) return `${hours}h ${minutes}m`;\n          if (minutes > 0) return `${minutes}m ${seconds}s`;\n          return `${seconds}s`;\n        default:\n          return new Intl.NumberFormat().format(num) + (unit ? ` ${unit}` : \"\");\n      }\n    }, []);\n\n    // Calculate trend\n    const calculateTrend = useCallback(\n      (metric: MetricConfig) => {\n        if (!metric.trend || !showTrends) return null;\n\n        const { direction, percentage, period } = metric.trend;\n        const isPositive = direction === \"up\";\n        const isNegative = direction === \"down\";\n\n        return (\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-gap-1 glass-text-xs\",\n              isPositive && \"text-green-600\",\n              isNegative && \"text-red-600\",\n              direction === \"neutral\" && \"glass-text-secondary\"\n            )}\n          >\n            <span className=\"glass-text-base\">\n              {isPositive ? \"\u2197\" : isNegative ? \"\u2198\" : \"\u2192\"}\n            </span>\n            <span>{percentage.toFixed(1)}%</span>\n            {period && (\n              <span className=\"glass-text-secondary\">vs {period}</span>\n            )}\n          </div>\n        );\n      },\n      [showTrends]\n    );\n\n    // Render spark line\n    const renderSparkLine = useCallback(\n      (spark: MetricSpark) => {\n        if (!showSparks) return null;\n\n        const max = Math.max(...spark.data);\n        const min = Math.min(...spark.data);\n        const range = max - min || 1;\n\n        const points = spark.data\n          .map((value, index) => {\n            const x = (index / (spark.data.length - 1)) * 100;\n            const y = ((max - value) / range) * 100;\n            return `${x},${y}`;\n          })\n          .join(\" \");\n\n        return (\n          <div className=\"glass-relative glass-w-full glass-h-8 glass-mt-2\">\n            <svg\n              className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full\"\n              viewBox=\"0 0 100 100\"\n              preserveAspectRatio=\"none\"\n            >\n              {spark.showArea && (\n                <polygon\n                  points={`0,100 ${points} 100,100`}\n                  fill=\"currentColor\"\n                  className=\"glass-opacity-10\"\n                  style={{ color: spark.color || \"currentColor\" }}\n                />\n              )}\n              <polyline\n                points={points}\n                fill=\"none\"\n                stroke=\"currentColor\"\n                strokeWidth=\"2\"\n                className=\"glass-transition-all glass-duration-300\"\n                style={{ color: spark.color || \"currentColor\" }}\n              />\n            </svg>\n          </div>\n        );\n      },\n      [showSparks]\n    );\n\n    // Default metric renderer\n    const defaultRenderMetric = useCallback(\n      (metric: MetricConfig) => {\n        const sizeConfig = {\n          sm: {\n            padding: \"glass-p-3\",\n            title: \"glass-text-sm\",\n            value: \"glass-text-lg\",\n            description: \"glass-text-xs\",\n          },\n          md: {\n            padding: \"glass-p-4\",\n            title: \"glass-text-sm\",\n            value: \"glass-text-xl\",\n            description: \"glass-text-xs\",\n          },\n          lg: {\n            padding: \"glass-p-6\",\n            title: \"glass-text-base\",\n            value: \"glass-text-2xl\",\n            description: \"glass-text-sm\",\n          },\n          xl: {\n            padding: \"p-8\",\n            title: \"glass-text-lg\",\n            value: \"text-3xl\",\n            description: \"glass-text-base\",\n          },\n        };\n\n        const config = sizeConfig[metric.size || \"md\"];\n\n        return (\n          <OptimizedGlass\n            elevation=\"level2\"\n            intensity=\"medium\"\n            depth={2}\n            tint=\"neutral\"\n            border=\"subtle\"\n            className={cn(\n              \"glass-metric-card glass-relative glass-transition glass-min-w-0\",\n              \"glass-backdrop-blur-md glass-border glass-border-white/10 glass-radius-lg glass-surface-dark/40\",\n              config.padding,\n              metric.status && statusColors[metric.status],\n              metric.clickable &&\n                \"glass-cursor-pointer hover:scale-[1.02] hover:shadow-lg\",\n              loading && \"animate-pulse opacity-50\"\n            )}\n            style={metricsCardSurfaceStyle}\n            onClick={() => {\n              if (metric.clickable && metric.onClick) {\n                metric.onClick();\n                feedback(\"tap\");\n              } else if (onMetricClick) {\n                onMetricClick(metric);\n                feedback(\"tap\");\n              }\n            }}\n            role={metric.clickable ? \"button\" : \"article\"}\n            aria-label={`Metric: ${metric.title}`}\n            tabIndex={metric.clickable ? 0 : -1}\n          >\n            {/* Priority Indicator */}\n            {metric.priority && (\n              <div\n                className={cn(\n                  \"glass-absolute top-2 right-2 glass-radius-full bg-current opacity-60\",\n                  priorityIndicators[metric.priority]\n                )}\n                style={{ color: metric.color || \"currentColor\" }}\n              />\n            )}\n\n            {/* Header */}\n            <div className=\"glass-flex glass-items-start glass-justify-between glass-mb-2\">\n              <div className=\"glass-flex-1 glass-min-w-0\">\n                <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-1\">\n                  {metric.icon && (\n                    <div\n                      className=\"glass-flex-shrink-0\"\n                      style={{ color: metric.color || \"currentColor\" }}\n                    >\n                      {metric.icon}\n                    </div>\n                  )}\n                  <h3\n                    className={cn(\n                      \"glass-font-semibold glass-text-primary glass-truncate\",\n                      config.title\n                    )}\n                  >\n                    {metric.title}\n                  </h3>\n                </div>\n\n                {metric.description && (\n                  <p\n                    className={cn(\n                      \"glass-text-secondary line-clamp-2\",\n                      config.description\n                    )}\n                  >\n                    {metric.description}\n                  </p>\n                )}\n              </div>\n            </div>\n\n            {/* Value */}\n            <div\n              className={cn(\n                \"glass-font-bold glass-text-primary glass-mb-2 glass-break-words\",\n                config.value\n              )}\n            >\n              {loading ? \"---\" : formatValue(metric.value)}\n            </div>\n\n            {/* Progress to Target */}\n            {metric.value.target && (\n              <div className=\"glass-mb-2\">\n                <div className=\"glass-flex glass-justify-between glass-text-xs glass-text-secondary glass-mb-1\">\n                  <span>\n                    Target:{\" \"}\n                    {formatValue({\n                      ...metric.value,\n                      current: metric.value.target,\n                    })}\n                  </span>\n                  <span>\n                    {(\n                      (metric.value.current / metric.value.target) *\n                      100\n                    ).toFixed(0)}\n                    %\n                  </span>\n                </div>\n                <div className=\"glass-w-full glass-surface-overlay glass-radius-full glass-h-2\">\n                  <div\n                    className=\"glass-surface-primary glass-h-2 glass-radius-full glass-transition-all glass-duration-500\"\n                    style={{\n                      width: `${Math.min((metric.value.current / metric.value.target) * 100, 100)}%`,\n                    }}\n                  />\n                </div>\n              </div>\n            )}\n\n            {/* Trend */}\n            {metric.trend && calculateTrend(metric)}\n\n            {/* Spark Line */}\n            {metric.spark && renderSparkLine(metric.spark)}\n\n            {/* Custom Content */}\n            {metric.customContent && (\n              <div className=\"glass-mt-2\">{metric.customContent}</div>\n            )}\n\n            {/* Category Badge */}\n            {metric.category && (\n              <div className=\"glass-absolute glass-bottom-2 glass-right-2\">\n                <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-overlay glass-text-secondary glass-radius-full\">\n                  {metric.category}\n                </span>\n              </div>\n            )}\n          </OptimizedGlass>\n        );\n      },\n      [\n        loading,\n        formatValue,\n        calculateTrend,\n        renderSparkLine,\n        onMetricClick,\n        feedback,\n        statusColors,\n        priorityIndicators,\n      ]\n    );\n\n    // Handle search\n    const handleSearch = useCallback(\n      (query: string) => {\n        setInternalSearchQuery(query);\n        onSearchChange?.(query);\n      },\n      [onSearchChange]\n    );\n\n    // Manual refresh\n    const handleRefresh = useCallback(() => {\n      if (onRefresh) {\n        onRefresh();\n        feedback(\"notification\");\n      }\n    }, [onRefresh, feedback]);\n\n    // Grid styles\n    const gridStyle = useMemo(() => {\n      const { columns, gap } = layout;\n      const minColumnWidth = columns >= 4 ? 132 : 148;\n\n      return {\n        display: \"grid\",\n        gridTemplateColumns: `repeat(auto-fit, minmax(min(${minColumnWidth}px, 100%), 1fr))`,\n        gap: `${gap}px`,\n      };\n    }, [layout]);\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={metricsGridId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-metrics-grid glass-radius-lg glass-backdrop-blur-md glass-border glass-border-white/10 glass-w-full glass-min-w-0 glass-overflow-hidden glass-surface-dark/40\",\n          className\n        )}\n        role=\"region\"\n        aria-label={ariaLabel || \"Metrics Grid\"}\n        data-testid={dataTestId}\n        style={{\n          ...metricsSurfaceStyle,\n          ...style,\n        }}\n        {...props}\n      >\n        <Motion\n          preset={\n            !prefersReducedMotion && respectMotionPreference && animated\n              ? \"fadeIn\"\n              : \"none\"\n          }\n          className=\"glass-p-4 glass-min-w-0\"\n        >\n          {/* Header */}\n          {(searchable || exportable || autoRefresh) && (\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-6\">\n              <div className=\"glass-flex glass-items-center glass-gap-4\">\n                {searchable && (\n                  <OptimizedGlass\n                    elevation=\"level2\"\n                    intensity=\"medium\"\n                    depth={1}\n                    tint=\"neutral\"\n                    border=\"subtle\"\n                    className=\"glass-relative\"\n                  >\n                    <input\n                      type=\"text\"\n                      placeholder=\"Search metrics...\"\n                      value={internalSearchQuery}\n                      onChange={(e) => handleSearch(e.target.value)}\n                      className={cn(\n                        \"glass-w-64 glass-px-4 glass-py-2 bg-transparent glass-border-0 glass-radius-md\",\n                        \"placeholder:glass-text-secondary focus:outline-none focus:ring-2 focus:ring-primary/50\",\n                        \"glass-text-sm\"\n                      )}\n                    />\n                    <div className=\"glass-absolute glass-right-3 glass-top-1/2 glass--translate-y-1-2 glass-text-secondary\">\n                      \uD83D\uDD0D\n                    </div>\n                  </OptimizedGlass>\n                )}\n              </div>\n\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                {autoRefresh && (\n                  <GlassButton\n                    onClick={handleRefresh}\n                    elevation=\"level2\"\n                    intensity=\"medium\"\n                    depth={1}\n                    tint=\"neutral\"\n                    border=\"subtle\"\n                    className={cn(\n                      \"glass-px-3 glass-py-2 glass-text-sm transition-all\",\n                      \"glass-hover-scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-primary/50\"\n                    )}\n                  >\n                    \uD83D\uDD04 Refresh\n                  </GlassButton>\n                )}\n\n                {exportable && onExport && (\n                  <GlassButton\n                    onClick={() => onExport(\"json\")}\n                    elevation=\"level2\"\n                    intensity=\"medium\"\n                    depth={1}\n                    tint=\"neutral\"\n                    border=\"subtle\"\n                    className={cn(\n                      \"glass-px-3 glass-py-2 glass-text-sm transition-all\",\n                      \"glass-hover-scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-primary/50\"\n                    )}\n                  >\n                    \uD83D\uDCCA Export\n                  </GlassButton>\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Metrics Grid */}\n          {filteredMetrics.length === 0 ? (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-h-64 glass-text-center\">\n              <div>\n                <div className=\"glass-text-4xl glass-mb-4\">\uD83D\uDCCA</div>\n                <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-2\">\n                  No Metrics Found\n                </h3>\n                <p className=\"glass-text-secondary\">\n                  {internalSearchQuery\n                    ? \"Try adjusting your search query\"\n                    : \"No metrics to display\"}\n                </p>\n              </div>\n            </div>\n          ) : (\n            <div className=\"glass-grid\" style={{ ...gridStyle }}>\n              {filteredMetrics.map((metric, index) => (\n                <Motion\n                  key={metric.id}\n                  preset={\n                    !prefersReducedMotion && respectMotionPreference && animated\n                      ? \"slideUp\"\n                      : \"none\"\n                  }\n                  delay={index * 100}\n                >\n                  {renderMetric\n                    ? renderMetric(metric)\n                    : defaultRenderMetric(metric)}\n                </Motion>\n              ))}\n            </div>\n          )}\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassMetricsGrid.displayName = \"GlassMetricsGrid\";\n\nexport default GlassMetricsGrid;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\nexport interface GlassTreeNode {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  children?: GlassTreeNode[];\n  disabled?: boolean;\n  metadata?: Record<string, unknown>;\n}\n\nconst DEFAULT_TREE_DATA: GlassTreeNode[] = [\n  {\n    id: \"overview\",\n    label: \"Overview\",\n    children: [\n      { id: \"analytics\", label: \"Analytics\" },\n      {\n        id: \"performance\",\n        label: \"Performance\",\n        children: [{ id: \"lighthouse\", label: \"Lighthouse\" }],\n      },\n    ],\n  },\n  {\n    id: \"settings\",\n    label: \"Settings\",\n    children: [\n      { id: \"appearance\", label: \"Appearance\" },\n      { id: \"tokens\", label: \"Design Tokens\" },\n    ],\n  },\n];\n\nexport interface GlassTreeViewProps\n  extends Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    \"onSelect\" | \"onDragStart\" | \"onDrop\"\n  > {\n  /** Tree data */\n  data?: GlassTreeNode[];\n  /** Currently selected node */\n  selectedId?: string;\n  /** Expanded node IDs */\n  expandedIds?: string[];\n  /** Default expanded node IDs */\n  defaultExpandedIds?: string[];\n  /** Selection mode */\n  selectionMode?: \"none\" | \"single\" | \"multiple\";\n  /** Multiple selected node IDs */\n  selectedIds?: string[];\n  /** Default selected node IDs */\n  defaultSelectedIds?: string[];\n  /** Whether to show connecting lines */\n  showLines?: boolean;\n  /** Whether to show icons */\n  showIcons?: boolean;\n  /** Whether nodes are draggable */\n  draggable?: boolean;\n  /** Whether to show checkboxes for multi-select */\n  showCheckboxes?: boolean;\n  /** Size variant */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /** Visual variant */\n  variant?: \"default\" | \"minimal\" | \"bordered\" | \"filled\";\n  /** Indentation per level */\n  indentation?: number;\n  /** Custom node renderer */\n  renderNode?: (\n    node: GlassTreeNode,\n    level: number,\n    isSelected: boolean,\n    isExpanded: boolean\n  ) => React.ReactNode;\n  /** Custom expand/collapse icon */\n  expandIcon?: React.ReactNode;\n  /** Custom collapse icon */\n  collapseIcon?: React.ReactNode;\n  /** Selection change handler */\n  onSelect?: (nodeId: string, node: GlassTreeNode) => void;\n  /** Multi-selection change handler */\n  onSelectionChange?: (nodeIds: string[], nodes: GlassTreeNode[]) => void;\n  /** Expand/collapse handler */\n  onExpand?: (nodeId: string, expanded: boolean) => void;\n  /** Drag start handler */\n  onDragStart?: (node: GlassTreeNode, event: React.DragEvent) => void;\n  /** Drop handler */\n  onDrop?: (\n    draggedNode: GlassTreeNode,\n    targetNode: GlassTreeNode,\n    position: \"before\" | \"after\" | \"inside\"\n  ) => void;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\ninterface TreeContextValue {\n  selectedId?: string;\n  selectedIds: string[];\n  expandedIds: string[];\n  selectionMode: \"none\" | \"single\" | \"multiple\";\n  showLines: boolean;\n  showIcons: boolean;\n  showCheckboxes: boolean;\n  draggable: boolean;\n  size: \"sm\" | \"md\" | \"lg\";\n  variant: \"default\" | \"minimal\" | \"bordered\" | \"filled\";\n  indentation: number;\n  expandIcon?: React.ReactNode;\n  collapseIcon?: React.ReactNode;\n  renderNode?: (\n    node: GlassTreeNode,\n    level: number,\n    isSelected: boolean,\n    isExpanded: boolean\n  ) => React.ReactNode;\n  respectMotionPreference: boolean;\n  onNodeSelect: (nodeId: string, node: GlassTreeNode) => void;\n  onNodeToggle: (nodeId: string) => void;\n  onNodeCheck: (nodeId: string, checked: boolean) => void;\n  onDragStart?: (node: GlassTreeNode, event: React.DragEvent) => void;\n  onDrop?: (\n    draggedNode: GlassTreeNode,\n    targetNode: GlassTreeNode,\n    position: \"before\" | \"after\" | \"inside\"\n  ) => void;\n}\n\nconst TreeContext = createContext<TreeContextValue | null>(null);\n\nconst useTreeContext = () => {\n  const context = useContext(TreeContext);\n  if (!context) {\n    throw new Error(\"Tree components must be used within GlassTreeView\");\n  }\n  return context;\n};\n\ninterface GlassTreeNodeProps {\n  node: GlassTreeNode;\n  level: number;\n}\n\nconst GlassTreeNodeComponent = ({ node, level }: GlassTreeNodeProps) => {\n  const { shouldAnimate } = useMotionPreference();\n  const { play } = useGlassSound();\n  const [isDragOver, setIsDragOver] = useState<\n    \"before\" | \"after\" | \"inside\" | null\n  >(null);\n  const nodeId = useA11yId(\"tree-node\");\n\n  const {\n    selectedId,\n    selectedIds,\n    expandedIds,\n    selectionMode,\n    showLines,\n    showIcons,\n    showCheckboxes,\n    draggable,\n    size,\n    variant,\n    indentation,\n    expandIcon,\n    collapseIcon,\n    renderNode,\n    respectMotionPreference,\n    onNodeSelect,\n    onNodeToggle,\n    onNodeCheck,\n    onDragStart,\n    onDrop,\n  } = useTreeContext();\n\n  const isExpanded = expandedIds.includes(node.id);\n  const isSelected =\n    selectionMode === \"single\"\n      ? selectedId === node.id\n      : selectedIds.includes(node.id);\n  const hasChildren = node.children && node.children.length > 0;\n  const isChecked = selectedIds.includes(node.id);\n\n  const sizeConfig = {\n    sm: {\n      node: \"glass-h-10 glass-px-2 glass-text-sm\",\n      icon: \"glass-w-4 glass-h-4\",\n      checkbox: \"glass-w-3 glass-h-3\",\n      expandIcon: \"glass-w-3 glass-h-3\",\n    },\n    md: {\n      node: \"glass-h-10 glass-px-3 glass-text-sm\",\n      icon: \"glass-w-5 glass-h-5\",\n      checkbox: \"glass-w-4 glass-h-4\",\n      expandIcon: \"glass-w-4 glass-h-4\",\n    },\n    lg: {\n      node: \"glass-h-12 glass-px-4 glass-text-base\",\n      icon: \"glass-w-6 glass-h-6\",\n      checkbox: \"glass-w-5 glass-h-5\",\n      expandIcon: \"glass-w-5 glass-h-5\",\n    },\n  };\n\n  const variantConfig = {\n    default: {\n      node: \"hover:glass-surface-subtle/10 focus:glass-surface-subtle/10\",\n      selected: \"glass-surface-primary/15 glass-text-primary\",\n      dragOver: \"glass-surface-primary/10 glass-border-primary\",\n    },\n    minimal: {\n      node: \"hover:glass-surface-transparent focus:glass-surface-transparent hover:glass-text-primary\",\n      selected: \"glass-text-primary glass-font-medium\",\n      dragOver: \"bg-primary/5\",\n    },\n    bordered: {\n      node: \"glass-border glass-border-transparent hover:glass-border-glass-border/20 focus:glass-border-primary\",\n      selected:\n        \"glass-border-primary glass-surface-primary/10 glass-text-primary\",\n      dragOver: \"glass-border-primary glass-surface-primary/5\",\n    },\n    filled: {\n      node: \"glass-surface-dark/20 hover:glass-surface-subtle/10 focus:glass-surface-subtle/10\",\n      selected: \"glass-surface-primary/15 glass-text-primary\",\n      dragOver: \"glass-surface-primary/10 glass-border-primary\",\n    },\n  };\n\n  const config = sizeConfig[size];\n  const colors = variantConfig[variant];\n\n  const handleNodeClick = () => {\n    if (node.disabled) return;\n    onNodeSelect(node.id, node);\n    play(\"select\");\n  };\n\n  const handleToggle = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (hasChildren && !node.disabled) {\n      onNodeToggle(node.id);\n      play(isExpanded ? \"collapse\" : \"expand\");\n    }\n  };\n\n  const handleCheck = (e: React.ChangeEvent<HTMLInputElement>) => {\n    e.stopPropagation();\n    if (!node.disabled) {\n      onNodeCheck(node.id, e.target.checked);\n      play(e.target.checked ? \"check\" : \"uncheck\");\n    }\n  };\n\n  const handleDragStart = (e: React.DragEvent) => {\n    if (!draggable || node.disabled) return;\n    e.dataTransfer.setData(\"text/plain\", node.id);\n    onDragStart?.(node, e);\n  };\n\n  const handleDragOver = (e: React.DragEvent) => {\n    if (!draggable) return;\n    e.preventDefault();\n\n    const rect = e.currentTarget.getBoundingClientRect();\n    const y = e.clientY - rect.top;\n    const height = rect.height;\n\n    if (y < height * 0.25) {\n      setIsDragOver(\"before\");\n    } else if (y > height * 0.75) {\n      setIsDragOver(\"after\");\n    } else {\n      setIsDragOver(\"inside\");\n    }\n  };\n\n  const handleDragLeave = () => {\n    setIsDragOver(null);\n  };\n\n  const handleDrop = (e: React.DragEvent) => {\n    if (!draggable) return;\n    e.preventDefault();\n\n    const draggedNodeId = e.dataTransfer.getData(\"text/plain\");\n    // Find dragged node (would need to be passed through context or prop)\n    // This is a simplified version\n    const draggedNode = { id: draggedNodeId } as GlassTreeNode;\n\n    if (isDragOver && onDrop) {\n      onDrop(draggedNode, node, isDragOver);\n    }\n\n    setIsDragOver(null);\n  };\n\n  const defaultExpandIcon = (\n    <svg\n      className={`glass-w-full glass-h-full glass-transition-transform glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n      fill=\"none\"\n      stroke=\"currentColor\"\n      viewBox=\"0 0 24 24\"\n    >\n      <path\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth={2}\n        d=\"M9 5l7 7-7 7\"\n      />\n    </svg>\n  );\n\n  const defaultCollapseIcon = (\n    <svg\n      className={`glass-w-full glass-h-full glass-transition-transform glass-duration-[${ANIMATION.DURATION.fast}ms] glass--rotate-90`}\n      fill=\"none\"\n      stroke=\"currentColor\"\n      viewBox=\"0 0 24 24\"\n    >\n      <path\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        strokeWidth={2}\n        d=\"M9 5l7 7-7 7\"\n      />\n    </svg>\n  );\n\n  if (renderNode) {\n    return (\n      <div data-glass-component>\n        {renderNode(node, level, isSelected, isExpanded)}\n        {hasChildren && isExpanded && (\n          <Motion\n            preset={\n              shouldAnimate && respectMotionPreference ? \"slideDown\" : \"none\"\n            }\n            className=\"glass-relative\"\n          >\n            {node.children?.map((child) => (\n              <GlassTreeNodeComponent\n                key={child.id}\n                node={child}\n                level={level + 1}\n              />\n            ))}\n          </Motion>\n        )}\n      </div>\n    );\n  }\n\n  return (\n    <Motion\n      preset={shouldAnimate && respectMotionPreference ? \"slideIn\" : \"none\"}\n      delay={level * 50}\n    >\n      <div data-glass-component>\n        <OptimizedGlass\n          elevation=\"level1\"\n          intensity=\"subtle\"\n          depth={0.5}\n          tint=\"neutral\"\n          border={variant === \"bordered\" ? \"subtle\" : \"none\"}\n          className={cn(\n            `glass-tree-node glass-flex glass-items-center glass-cursor-pointer glass-transition glass-radius-md glass-min-w-0`,\n            config.node,\n            colors.node,\n            isSelected && colors.selected,\n            isDragOver && colors.dragOver,\n            node.disabled && \"opacity-50 cursor-not-allowed\",\n            variant === \"bordered\" && \"glass-border glass-radius-md\"\n          )}\n          style={{\n            paddingLeft: `${level * indentation}px`,\n            background:\n              variant === \"filled\"\n                ? \"rgba(5, 11, 24, 0.28)\"\n                : \"rgba(5, 11, 24, 0.12)\",\n            borderColor: isSelected\n              ? \"rgba(124, 211, 255, 0.44)\"\n              : \"rgba(148, 163, 184, 0.18)\",\n            boxShadow: isSelected\n              ? \"inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 8px 18px rgba(2, 6, 23, 0.22)\"\n              : \"inset 0 1px 0 rgba(255, 255, 255, 0.035)\",\n            color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.9))\",\n          }}\n          onClick={handleNodeClick}\n          onDragStart={handleDragStart}\n          onDragOver={handleDragOver}\n          onDragLeave={handleDragLeave}\n          onDrop={handleDrop}\n          draggable={draggable && !node.disabled}\n          id={nodeId}\n          role=\"treeitem\"\n          aria-selected={isSelected}\n          aria-expanded={hasChildren ? isExpanded : undefined}\n          aria-level={level + 1}\n          aria-disabled={node.disabled}\n          tabIndex={node.disabled ? -1 : 0}\n        >\n          {/* Connecting lines */}\n          {showLines && level > 0 && (\n            <div className=\"glass-absolute glass-left-0 glass-top-0 glass-h-full glass-flex glass-items-center\">\n              <div\n                className=\"glass-border-l glass-border-glass-border/20 glass-h-full\"\n                style={{\n                  left: `${(level - 1) * indentation + indentation / 2}px`,\n                }}\n              />\n              <div\n                className=\"glass-border-t glass-border-glass-border/20 glass-w-2\"\n                style={{\n                  left: `${(level - 1) * indentation + indentation / 2}px`,\n                }}\n              />\n            </div>\n          )}\n\n          {/* Expand/collapse button */}\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-justify-center glass-flex-shrink-0 glass-mr-1\",\n              config.expandIcon\n            )}\n          >\n            {hasChildren ? (\n              <button\n                onClick={handleToggle}\n                className=\"glass-p-1 glass-radius-md hover:glass-surface-overlay glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n              >\n                {isExpanded\n                  ? collapseIcon || defaultCollapseIcon\n                  : expandIcon || defaultExpandIcon}\n              </button>\n            ) : (\n              <div className={config.expandIcon} /> // Spacer\n            )}\n          </div>\n\n          {/* Checkbox */}\n          {showCheckboxes && (\n            <input\n              type=\"checkbox\"\n              checked={isChecked}\n              onChange={handleCheck}\n              disabled={node.disabled}\n              className={cn(\n                \"glass-flex-shrink-0 glass-mr-2 glass-radius-md\",\n                config.checkbox\n              )}\n              onClick={(e) => e.stopPropagation()}\n            />\n          )}\n\n          {/* Icon */}\n          {showIcons && node.icon && (\n            <div className={cn(\"glass-flex-shrink-0 glass-mr-2\", config.icon)}>\n              {node.icon}\n            </div>\n          )}\n\n          {/* Label */}\n          <ContrastGuard>\n            <span className=\"glass-flex-1 glass-truncate\">{node.label}</span>\n          </ContrastGuard>\n\n          {/* Drag indicator */}\n          {isDragOver && (\n            <div\n              className={cn(\n                \"glass-absolute left-0 right-0 h-0.5 bg-primary pointer-events-none\",\n                isDragOver === \"before\" && \"top-0\",\n                isDragOver === \"after\" && \"bottom-0\",\n                isDragOver === \"inside\" &&\n                  \"top-1/2 transform -translate-y-1/2 glass-h-full bg-primary/10\"\n              )}\n            />\n          )}\n        </OptimizedGlass>\n\n        {hasChildren && isExpanded && (\n          <Motion\n            preset={\n              shouldAnimate && respectMotionPreference ? \"slideDown\" : \"none\"\n            }\n            className=\"glass-relative\"\n          >\n            {node.children?.map((child) => (\n              <GlassTreeNodeComponent\n                key={child.id}\n                node={child}\n                level={level + 1}\n              />\n            ))}\n          </Motion>\n        )}\n      </div>\n    </Motion>\n  );\n};\n\nexport const GlassTreeView = forwardRef<HTMLDivElement, GlassTreeViewProps>(\n  (\n    {\n      // ContrastGuard text coverage is tracked in the manual accessibility QA report.\n\n      data = DEFAULT_TREE_DATA,\n      selectedId,\n      expandedIds,\n      defaultExpandedIds = [],\n      selectionMode = \"single\",\n      selectedIds,\n      defaultSelectedIds = [],\n      showLines = true,\n      showIcons = true,\n      draggable = false,\n      showCheckboxes = false,\n      size = \"md\",\n      variant = \"default\",\n      indentation = 24,\n      renderNode,\n      expandIcon,\n      collapseIcon,\n      onSelect,\n      onSelectionChange,\n      onExpand,\n      onDragStart,\n      onDrop,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const treeId = useA11yId(\"glass-tree\");\n\n    const [internalExpandedIds, setInternalExpandedIds] = useState<string[]>(\n      expandedIds || defaultExpandedIds\n    );\n    const [internalSelectedIds, setInternalSelectedIds] = useState<string[]>(\n      selectedIds || defaultSelectedIds\n    );\n\n    const currentExpandedIds =\n      expandedIds !== undefined ? expandedIds : internalExpandedIds;\n    const currentSelectedIds =\n      selectedIds !== undefined ? selectedIds : internalSelectedIds;\n\n    const handleNodeSelect = useCallback(\n      (nodeId: string, node: GlassTreeNode) => {\n        if (selectionMode === \"single\") {\n          onSelect?.(nodeId, node);\n        } else if (selectionMode === \"multiple\") {\n          let newSelection: string[];\n          if (currentSelectedIds.includes(nodeId)) {\n            newSelection = currentSelectedIds.filter((id) => id !== nodeId);\n          } else {\n            newSelection = [...currentSelectedIds, nodeId];\n          }\n\n          if (selectedIds === undefined) {\n            setInternalSelectedIds(newSelection);\n          }\n\n          // Find all nodes for the callback\n          const findNodes = (\n            nodes: GlassTreeNode[],\n            ids: string[]\n          ): GlassTreeNode[] => {\n            const result: GlassTreeNode[] = [];\n            for (const node of nodes) {\n              if (ids.includes(node.id)) result.push(node);\n              if (node.children) result.push(...findNodes(node.children, ids));\n            }\n            return result;\n          };\n\n          onSelectionChange?.(newSelection, findNodes(data, newSelection));\n        }\n      },\n      [\n        selectionMode,\n        currentSelectedIds,\n        selectedIds,\n        onSelect,\n        onSelectionChange,\n        data,\n      ]\n    );\n\n    const handleNodeToggle = useCallback(\n      (nodeId: string) => {\n        let newExpandedIds: string[];\n\n        if (currentExpandedIds.includes(nodeId)) {\n          newExpandedIds = currentExpandedIds.filter((id) => id !== nodeId);\n        } else {\n          newExpandedIds = [...currentExpandedIds, nodeId];\n        }\n\n        if (expandedIds === undefined) {\n          setInternalExpandedIds(newExpandedIds);\n        }\n\n        onExpand?.(nodeId, !currentExpandedIds.includes(nodeId));\n      },\n      [currentExpandedIds, expandedIds, onExpand]\n    );\n\n    const handleNodeCheck = useCallback(\n      (nodeId: string, checked: boolean) => {\n        handleNodeSelect(nodeId, data.find((node) => node.id === nodeId)!);\n      },\n      [handleNodeSelect, data]\n    );\n\n    const contextValue: TreeContextValue = {\n      selectedId,\n      selectedIds: currentSelectedIds,\n      expandedIds: currentExpandedIds,\n      selectionMode,\n      showLines,\n      showIcons,\n      showCheckboxes: showCheckboxes || selectionMode === \"multiple\",\n      draggable,\n      size,\n      variant,\n      indentation,\n      expandIcon,\n      collapseIcon,\n      renderNode,\n      respectMotionPreference,\n      onNodeSelect: handleNodeSelect,\n      onNodeToggle: handleNodeToggle,\n      onNodeCheck: handleNodeCheck,\n      onDragStart,\n      onDrop,\n    };\n\n    return (\n      <TreeContext.Provider value={contextValue}>\n        <OptimizedGlass\n          ref={ref}\n          id={treeId}\n          elevation=\"level1\"\n          intensity=\"subtle\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className={cn(\n            \"glass-tree-view glass-p-2 glass-radius-lg glass-backdrop-blur-md glass-w-full glass-min-w-0 glass-overflow-auto\",\n            \"glass-border glass-border-white/10\",\n            className\n          )}\n          style={{\n            ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n            maxHeight: \"100%\",\n            borderColor: \"rgba(148, 163, 184, 0.22)\",\n            boxShadow:\n              \"inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 12px 28px rgba(2, 6, 23, 0.24)\",\n            color: \"var(--glass-text-primary, rgba(248, 250, 252, 0.9))\",\n          }}\n          role=\"tree\"\n          aria-multiselectable={selectionMode === \"multiple\"}\n          {...props}\n        >\n          {data.map((node) => (\n            <GlassTreeNodeComponent key={node.id} node={node} level={0} />\n          ))}\n        </OptimizedGlass>\n      </TreeContext.Provider>\n    );\n  }\n);\n\nGlassTreeView.displayName = \"GlassTreeView\";\n\nexport default GlassTreeView;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { ZLayer } from \"../../core/zspace\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport styles from \"./GlassDynamicAtmosphere.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nconst clamp01 = (value: number) => Math.min(1, Math.max(0, value));\n\nconst applyAlpha = (color: string, alpha: number) => {\n  if (!color)\n    return `color-mix(in srgb, var(--glass-black) ${clamp01(alpha) * 100}%, transparent)`;\n  if (color.startsWith(\"#\")) {\n    // For hex colors, convert to CSS variable or use color-mix\n    const normalized = color.replace(\"#\", \"\");\n    if (normalized.length === 3 || normalized.length === 6) {\n      // Use color-mix with the hex color\n      return `color-mix(in srgb, ${color} ${clamp01(alpha) * 100}%, transparent)`;\n    }\n  }\n  // If already a CSS variable or color-mix, append alpha\n  if (color.includes(\"var(\") || color.includes(\"color-mix\")) {\n    return color; // Assume it already handles opacity\n  }\n  return color;\n};\n\n// Types of atmospheric effects\nexport type AtmosphereType =\n  | \"subtle\"\n  | \"nebula\"\n  | \"aurora\"\n  | \"particles\"\n  | \"waves\"\n  | \"gradient\"\n  | \"ambient\"\n  | \"custom\";\n\n// Interaction modes for the atmosphere\nexport type InteractionMode = \"none\" | \"mouse\" | \"scroll\" | \"audio\" | \"time\";\n\nexport interface DynamicAtmosphereProps {\n  /**\n   * The type of atmospheric effect\n   */\n  type?: AtmosphereType;\n\n  /**\n   * Primary color for the atmosphere\n   */\n  primaryColor?: string;\n\n  /**\n   * Secondary color for the atmosphere\n   */\n  secondaryColor?: string;\n\n  /**\n   * Accent color for the atmosphere\n   */\n  accentColor?: string;\n\n  /**\n   * The intensity of the effect (0-1)\n   */\n  intensity?: number;\n\n  /**\n   * The speed of the animation (0-1)\n   */\n  speed?: number;\n\n  /**\n   * The interaction mode for the atmosphere\n   */\n  interactionMode?: InteractionMode;\n\n  /**\n   * The sensitivity of the interaction (0-1)\n   */\n  interactionSensitivity?: number;\n\n  /**\n   * If true, the atmosphere will fill its container\n   */\n  fullSize?: boolean;\n\n  /**\n   * Width of the atmosphere\n   */\n  width?: string | number;\n\n  /**\n   * Height of the atmosphere\n   */\n  height?: string | number;\n\n  /**\n   * Optional CSS class name\n   */\n  className?: string;\n\n  /**\n   * Z-index for the atmosphere\n   */\n  zIndex?: number;\n\n  /**\n   * The position of the atmosphere\n   */\n  position?: \"absolute\" | \"fixed\" | \"relative\";\n\n  /**\n   * If true, respect reduced motion preferences\n   */\n  respectReducedMotion?: boolean;\n\n  /**\n   * The number of elements to create for particle-based effects\n   */\n  particleCount?: number;\n\n  /**\n   * Optional custom element to use for particles\n   */\n  particleElement?: React.ReactNode;\n\n  /**\n   * If true, the atmosphere will have a blur effect\n   */\n  blur?: boolean;\n\n  /**\n   * The strength of the blur effect (px)\n   */\n  blurStrength?: number;\n\n  /**\n   * If true, the atmosphere will have a noise texture\n   */\n  noise?: boolean;\n\n  /** Glass surface intent */\n  intent?: \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\n  /** Glass surface elevation */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\";\n\n  /** Performance tier */\n  tier?: \"low\" | \"medium\" | \"high\";\n\n  /** Optional inline styles applied to the container */\n  style?: React.CSSProperties;\n}\n\n/**\n * DynamicAtmosphere Component\n *\n * A component that creates dynamic atmospheric background effects.\n */\nexport const DynamicAtmosphere = forwardRef<\n  HTMLDivElement,\n  DynamicAtmosphereProps\n>((props, ref) => {\n  const {\n    type = \"subtle\",\n    primaryColor = \"hsl(var(--glass-color-primary))\",\n    secondaryColor = \"var(--glass-color-secondary)\",\n    accentColor = \"var(--glass-color-accent)\",\n    intensity = 0.5,\n    speed = 1,\n    interactionMode = \"none\",\n    interactionSensitivity = 0.5,\n    fullSize = true,\n    width = \"100%\",\n    height = \"100%\",\n    style,\n    className,\n    zIndex = ZLayer.Background,\n    position = \"absolute\",\n    respectReducedMotion = true,\n    particleCount = 20,\n    blur = false,\n    blurStrength = 5,\n    noise = false,\n    ...rest\n  } = props;\n\n  const prefersReducedMotion = useReducedMotion();\n  const shouldReduceMotion = respectReducedMotion && prefersReducedMotion;\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [transform, setTransform] = useState<string>(\"\");\n\n  // Compute and inject CSS variables for backgrounds to avoid inline glass literals\n  useEffect(() => {\n    const el = containerRef.current;\n    if (!el) return;\n    const i = intensity;\n    const pc = primaryColor;\n    const sc = secondaryColor;\n    const ac = accentColor;\n\n    let bg = \"\";\n    if (type === \"subtle\") {\n      bg = `radial-gradient(circle at 50% 50%, ${applyAlpha(pc, i * 0.4)}, transparent 70%)`;\n    } else if (type === \"nebula\") {\n      bg = `radial-gradient(circle at 30% 50%, ${applyAlpha(pc, i * 0.6)}, transparent 50%), radial-gradient(circle at 70% 50%, ${applyAlpha(sc, i * 0.6)}, transparent 50%)`;\n    } else if (type === \"waves\") {\n      bg = `linear-gradient(135deg, ${applyAlpha(pc, i * 0.5)}, ${applyAlpha(sc, i * 0.5)}, ${applyAlpha(ac, i * 0.5)}, ${applyAlpha(pc, i * 0.5)})`;\n    } else if (type === \"gradient\") {\n      bg = `linear-gradient(-45deg, ${applyAlpha(pc, i * 0.4)}, ${applyAlpha(sc, i * 0.4)}, ${applyAlpha(ac, i * 0.4)}, ${applyAlpha(pc, i * 0.4)})`;\n    }\n    if (bg) el.style.setProperty(\"--atmosphere-bg\", bg);\n\n    if (type === \"aurora\") {\n      const aur = `linear-gradient(90deg, ${applyAlpha(pc, 0)}, ${applyAlpha(pc, i * 0.6)}, ${applyAlpha(sc, i * 0.6)}, ${applyAlpha(ac, i * 0.6)}, ${applyAlpha(pc, 0)})`;\n      el.style.setProperty(\"--atmosphere-aurora-bg\", aur);\n    }\n  }, [type, intensity, primaryColor, secondaryColor, accentColor]);\n\n  // Convert width and height to string\n  const widthValue = typeof width === \"number\" ? `${width}px` : width;\n  const heightValue = typeof height === \"number\" ? `${height}px` : height;\n\n  const safeSpeed = Math.max(speed, 0.1);\n  const baseAnimationDuration = `${30 / safeSpeed}s`;\n  const particleAnimationDuration = `${15 / safeSpeed}s`;\n  const safeParticleCount = Math.min(\n    Math.max(0, Math.floor(particleCount)),\n    shouldReduceMotion ? 12 : 120\n  );\n  const particleLayout = useMemo(\n    () =>\n      Array.from({ length: safeParticleCount }, (_, index) => {\n        const seededValue = (salt: number) => {\n          const value = Math.sin(index * 9301 + salt * 49297) * 233280;\n          return value - Math.floor(value);\n        };\n\n        return {\n          size: seededValue(1) * 8 + 2,\n          positionX: seededValue(2) * 100,\n          positionY: seededValue(3) * 100,\n          delay: seededValue(4) * 5,\n        };\n      }),\n    [safeParticleCount]\n  );\n\n  const containerStyle: React.CSSProperties & Record<string, string | number> =\n    {\n      position,\n      width: fullSize ? \"100%\" : widthValue,\n      height: fullSize ? \"100%\" : heightValue,\n      zIndex,\n      overflow: \"hidden\",\n      pointerEvents: \"none\",\n      ...style,\n    };\n\n  if (!fullSize) {\n    containerStyle.width = widthValue;\n    containerStyle.height = heightValue;\n  }\n\n  if (position === \"absolute\" || position === \"fixed\") {\n    containerStyle.top = 0;\n    containerStyle.left = 0;\n    containerStyle.right = 0;\n    containerStyle.bottom = 0;\n  }\n\n  if (blur) {\n    Object.assign(\n      containerStyle,\n      createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })\n    );\n    // Clamp to the canonical blur range (level1-level5) so arbitrary props\n    // cannot produce off-scale or negative blur values.\n    const clampedBlur = Math.max(0, Math.min(48, blurStrength));\n    containerStyle.backdropFilter = `blur(${clampedBlur}px)`;\n    (containerStyle as any).WebkitBackdropFilter = `blur(${clampedBlur}px)`;\n  }\n\n  const effectStyle: React.CSSProperties & Record<string, string | number> = {\n    transform,\n  };\n\n  const intensityValue = clamp01(intensity);\n\n  const typeClassMap: Record<AtmosphereType, string> = {\n    subtle: styles.typeSubtle,\n    nebula: styles.typeNebula,\n    aurora: styles.typeAurora,\n    particles: styles.typeDefault,\n    waves: styles.typeWaves,\n    gradient: styles.typeGradient,\n    ambient: styles.typeAmbient,\n    custom: styles.typeDefault,\n  };\n\n  const animationClassMap: Partial<Record<AtmosphereType, string>> = {\n    subtle: styles.animateSubtle,\n    nebula: styles.animateNebula,\n    aurora: styles.animateAurora,\n    waves: styles.animateWaves,\n    gradient: styles.animateGradient,\n  };\n\n  if (!shouldReduceMotion) {\n    effectStyle[\"--atmosphere-animation-duration\"] = baseAnimationDuration;\n  }\n\n  switch (type) {\n    case \"subtle\":\n      effectStyle.opacity = intensityValue * 0.7 + 0.3;\n      break;\n    case \"nebula\":\n      effectStyle.opacity = intensityValue * 0.8 + 0.2;\n      break;\n    case \"aurora\":\n      effectStyle[\"--atmosphere-aurora-opacity\"] = intensityValue * 0.8 + 0.2;\n      break;\n    case \"waves\":\n      effectStyle.opacity = intensityValue * 0.7 + 0.3;\n      break;\n    case \"gradient\":\n      effectStyle.opacity = intensityValue * 0.7 + 0.3;\n      break;\n    case \"ambient\":\n      effectStyle.opacity = intensityValue * 0.6 + 0.4;\n      effectStyle.background = `radial-gradient(circle at 20% 30%, ${applyAlpha(\n        primaryColor,\n        intensityValue * 0.5\n      )}, transparent 50%), radial-gradient(circle at 80% 70%, ${applyAlpha(\n        secondaryColor,\n        intensityValue * 0.5\n      )}, transparent 50%), radial-gradient(circle at 50% 50%, ${applyAlpha(\n        accentColor,\n        intensityValue * 0.4\n      )}, transparent 70%)`;\n      break;\n    default:\n      effectStyle.opacity = intensityValue * 0.5 + 0.5;\n      effectStyle.backgroundColor = applyAlpha(\n        primaryColor,\n        intensityValue * 0.3\n      );\n      break;\n  }\n\n  const effectClasses = cn(\n    styles.effect,\n    typeClassMap[type] ?? styles.typeDefault,\n    noise && styles.noise,\n    !shouldReduceMotion && animationClassMap[type],\n    shouldReduceMotion && styles.reduceMotion\n  );\n\n  // Generate particles\n  const renderParticles = () => {\n    if (type !== \"particles\") return null;\n\n    return (\n      <div className={styles.particleContainer} aria-hidden=\"true\">\n        {particleLayout.map(({ size, positionX, positionY, delay }, index) => {\n          const particleStyle: React.CSSProperties &\n            Record<string, string | number> = {\n            backgroundColor: primaryColor,\n            width: `${size}px`,\n            height: `${size}px`,\n            top: `${positionY}%`,\n            left: `${positionX}%`,\n          };\n\n          if (!shouldReduceMotion) {\n            particleStyle[\"--particle-animation-duration\"] =\n              particleAnimationDuration;\n            particleStyle[\"--particle-animation-delay\"] = `${delay}s`;\n          }\n\n          return (\n            <div\n              key={`particle-${index}`}\n              className={cn(\n                styles.particle,\n                !shouldReduceMotion && styles.particleAnimated,\n                shouldReduceMotion && styles.reduceMotion\n              )}\n              style={{ ...particleStyle }}\n            />\n          );\n        })}\n      </div>\n    );\n  };\n\n  // Handle mouse movement interaction\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (\n        shouldReduceMotion ||\n        interactionMode !== \"mouse\" ||\n        !containerRef.current\n      )\n        return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      const x = (e.clientX - rect.left) / rect.width;\n      const y = (e.clientY - rect.top) / rect.height;\n\n      // Calculate offset based on mouse position and sensitivity\n      const offsetX = (x - 0.5) * interactionSensitivity * 20;\n      const offsetY = (y - 0.5) * interactionSensitivity * 20;\n\n      setTransform(`translate(${offsetX}px, ${offsetY}px)`);\n    },\n    [interactionMode, interactionSensitivity, shouldReduceMotion]\n  );\n\n  // Handle scroll interaction\n  const handleScroll = useCallback(() => {\n    if (\n      shouldReduceMotion ||\n      interactionMode !== \"scroll\" ||\n      !containerRef.current ||\n      typeof window === \"undefined\"\n    ) {\n      return;\n    }\n\n    const scrollY = window.scrollY;\n    const windowHeight = window.innerHeight;\n\n    // Calculate how far the element is in the viewport\n    const rect = containerRef.current.getBoundingClientRect();\n    const elementTop = rect.top + scrollY;\n    const elementVisible =\n      Math.min(windowHeight, Math.max(0, scrollY + windowHeight - elementTop)) /\n      windowHeight;\n\n    // Apply transform based on scroll position\n    const offsetY = (elementVisible - 0.5) * interactionSensitivity * 30;\n\n    setTransform(`translateY(${offsetY}px)`);\n  }, [interactionMode, interactionSensitivity, shouldReduceMotion]);\n\n  // Set up event listeners\n  useEffect(() => {\n    if (shouldReduceMotion || typeof window === \"undefined\") return;\n\n    if (interactionMode === \"mouse\") {\n      window.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n    } else if (interactionMode === \"scroll\") {\n      window.addEventListener(\"scroll\", handleScroll, { passive: true });\n      // Initial calculation\n      handleScroll();\n    }\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [interactionMode, handleMouseMove, handleScroll, shouldReduceMotion]);\n\n  const setContainerRef = (node: HTMLDivElement | null) => {\n    if (containerRef.current !== node) {\n      (containerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n        node;\n    }\n    if (typeof ref === \"function\") {\n      ref(node);\n    } else if (ref) {\n      (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n    }\n  };\n\n  return (\n    <div\n      ref={setContainerRef}\n      className={cn(\"glass-dynamic-atmosphere\", styles.container, className)}\n      style={{ ...(containerStyle || {}) }}\n      {...rest}\n    >\n      <div\n        className={effectClasses}\n        style={{ ...effectStyle }}\n        aria-hidden=\"true\"\n      />\n      {renderParticles()}\n    </div>\n  );\n});\n\nDynamicAtmosphere.displayName = \"GlassDynamicAtmosphere\";\n\nexport const GlassDynamicAtmosphere = DynamicAtmosphere;\n\nexport default DynamicAtmosphere;\n", "// Basic z-space utilities\nexport const zSpaceLayers = {\n  background: -1,\n  content: 0,\n  overlay: 100,\n  modal: 1000,\n  tooltip: 1100,\n};\n\nexport const getZSpaceLayer = (layer: keyof typeof zSpaceLayers) => zSpaceLayers[layer];\n\n// ZLayer enum for backwards compatibility\nexport const ZLayer = {\n  Background: zSpaceLayers.background,\n  Content: zSpaceLayers.content,\n  Overlay: zSpaceLayers.overlay,\n  Modal: zSpaceLayers.modal,\n  Tooltip: zSpaceLayers.tooltip,\n} as const;\n\nexport type ZLayerType = typeof ZLayer;\n", "@keyframes subtlePulse {\n  0% {\n    opacity: 0.5;\n  }\n  50% {\n    opacity: 0.7;\n  }\n  100% {\n    opacity: 0.5;\n  }\n}\n\n@keyframes nebulaMove {\n  0% {\n    background-position: 0% 0%;\n  }\n  100% {\n    background-position: 100% 100%;\n  }\n}\n\n@keyframes auroraWave {\n  0% {\n    transform: translateX(-100%) translateY(0);\n  }\n  50% {\n    transform: translateX(0%) translateY(-20px);\n  }\n  100% {\n    transform: translateX(100%) translateY(0);\n  }\n}\n\n@keyframes wavesAnimation {\n  0% {\n    background-position: 0% 50%;\n  }\n  100% {\n    background-position: 100% 50%;\n  }\n}\n\n@keyframes gradientShift {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n\n@keyframes particleFloat {\n  0%,\n  100% {\n    transform: translateY(0) translateX(0) rotate(0);\n    opacity: 0.5;\n  }\n  33% {\n    transform: translateY(-20px) translateX(10px) rotate(10deg);\n    opacity: 0.8;\n  }\n  66% {\n    transform: translateY(10px) translateX(-15px) rotate(-5deg);\n    opacity: 0.6;\n  }\n}\n\n.container {\n  position: relative;\n  overflow: hidden;\n  pointer-events: none;\n  isolation: isolate;\n}\n\n.absoluteFill {\n  position: absolute;\n  inset: 0;\n}\n\n.effect {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  will-change: transform, opacity, background-position, background-size;\n  transition: transform 240ms ease, opacity 240ms ease;\n}\n\n.noise::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\");\n  opacity: 0.08;\n  mix-blend-mode: overlay;\n  pointer-events: none;\n}\n\n.typeSubtle {\n  background: var(--atmosphere-bg, transparent);\n}\n\n.typeNebula {\n  background: var(--atmosphere-bg, transparent);\n  background-size: 200% 200%;\n}\n\n.typeAurora {\n  position: absolute;\n  inset: 0;\n}\n\n.typeAurora::before {\n  content: \"\";\n  position: absolute;\n  width: 200%;\n  height: 200px;\n  top: 20%;\n  border-radius: 50%;\n  filter: blur(30px);\n  background: var(--atmosphere-aurora-bg, transparent);\n  opacity: var(--atmosphere-aurora-opacity, 0.8);\n}\n\n.typeWaves {\n  background: var(--atmosphere-bg, transparent);\n  background-size: 400% 400%;\n}\n\n.typeGradient {\n  background: var(--atmosphere-bg, transparent);\n  background-size: 400% 400%;\n}\n\n.typeAmbient {\n  mix-blend-mode: screen;\n}\n\n.typeDefault {\n  background: var(--atmosphere-bg, transparent);\n}\n\n.animateSubtle {\n  animation-name: subtlePulse;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-duration: var(--atmosphere-animation-duration, 30s);\n}\n\n.animateNebula {\n  animation-name: nebulaMove;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-direction: alternate;\n  animation-duration: var(--atmosphere-animation-duration, 30s);\n}\n\n.animateAurora {\n  position: relative;\n}\n\n.animateAurora::before {\n  animation-name: auroraWave;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-duration: var(--atmosphere-animation-duration, 30s);\n}\n\n.animateWaves {\n  animation-name: wavesAnimation;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-duration: var(--atmosphere-animation-duration, 30s);\n}\n\n.animateGradient {\n  animation-name: gradientShift;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-duration: var(--atmosphere-animation-duration, 30s);\n}\n\n.particleContainer {\n  position: absolute;\n  inset: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  pointer-events: none;\n}\n\n.particle {\n  position: absolute;\n  border-radius: 50%;\n  opacity: 0.5;\n  filter: blur(1px);\n  will-change: transform, opacity;\n}\n\n.particleAnimated {\n  animation-name: particleFloat;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n  animation-duration: var(--particle-animation-duration, 15s);\n  animation-delay: var(--particle-animation-delay, 0s);\n}\n\n.reduceMotion,\n.reduceMotion::before,\n.reduceMotion::after {\n  animation-duration: 0s !important;\n  animation-iteration-count: 1 !important;\n  animation-name: none !important;\n  transition: none !important;\n}\n\n.hidden {\n  display: none;\n}\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { motion, PanInfo } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface MasonryItem {\n  id: string;\n  content: React.ReactNode;\n  height?: number;\n  aspectRatio?: number;\n  priority?: number;\n  category?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface MasonryConfig {\n  columns: number | \"auto\";\n  gap: number;\n  minItemWidth: number;\n  maxItemWidth?: number;\n  itemPadding: number;\n  autoResize: boolean;\n  animationDelay: number;\n  breakpoints: { [key: number]: number };\n}\n\nexport interface GlassMasonryGridProps {\n  items: MasonryItem[];\n  config?: Partial<MasonryConfig>;\n  showControls?: boolean;\n  showFilters?: boolean;\n  showStats?: boolean;\n  enableVirtualization?: boolean;\n  enableInfiniteScroll?: boolean;\n  enableDragReorder?: boolean;\n  enableSearch?: boolean;\n  filterBy?: string;\n  sortBy?: \"id\" | \"height\" | \"priority\" | \"category\";\n  sortOrder?: \"asc\" | \"desc\";\n  loadingItems?: number;\n  onItemClick?: (item: MasonryItem, index: number) => void;\n  onItemsReorder?: (items: MasonryItem[]) => void;\n  onLoadMore?: () => void;\n  onFilterChange?: (filter: string) => void;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  className?: string;\n}\n\nconst defaultConfig: MasonryConfig = {\n  columns: \"auto\",\n  gap: 16,\n  minItemWidth: 200,\n  maxItemWidth: 400,\n  itemPadding: 12,\n  autoResize: true,\n  animationDelay: 0.05,\n  breakpoints: {\n    1200: 4,\n    900: 3,\n    600: 2,\n    400: 1,\n  },\n};\n\ninterface LayoutItem extends MasonryItem {\n  x: number;\n  y: number;\n  width: number;\n  computedHeight: number;\n  column: number;\n}\n\nexport const GlassMasonryGrid = forwardRef<\n  HTMLDivElement,\n  GlassMasonryGridProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      items,\n      config = {},\n      showControls = true,\n      showFilters = true,\n      showStats = true,\n      enableVirtualization = false,\n      enableInfiniteScroll = false,\n      enableDragReorder = false,\n      enableSearch = false,\n      filterBy = \"\",\n      sortBy = \"id\",\n      sortOrder = \"asc\",\n      loadingItems = 0,\n      onItemClick,\n      onItemsReorder,\n      onLoadMore,\n      onFilterChange,\n      compact = false,\n      contained = false,\n      maxHeight,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [layoutItems, setLayoutItems] = useState<LayoutItem[]>([]);\n    const [containerDimensions, setContainerDimensions] = useState({\n      width: 0,\n      height: 0,\n    });\n    const [activeFilter, setActiveFilter] = useState(filterBy);\n    const [searchQuery, setSearchQuery] = useState(\"\");\n    const [currentSort, setCurrentSort] = useState({\n      by: sortBy,\n      order: sortOrder,\n    });\n    const [draggedItem, setDraggedItem] = useState<string | null>(null);\n    const [visibleItems, setVisibleItems] = useState<LayoutItem[]>([]);\n    const [loadingMore, setLoadingMore] = useState(false);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const itemRefs = useRef<{ [key: string]: HTMLDivElement }>({});\n    const resizeObserver = useRef<ResizeObserver | null>(null);\n    const intersectionObserver = useRef<IntersectionObserver | null>(null);\n\n    const [masonryConfig] = useState<MasonryConfig>({\n      ...defaultConfig,\n      ...config,\n    });\n\n    const id = useA11yId(\"glass-masonry-grid\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n    const effectiveShowControls = compact ? false : showControls;\n    const effectiveShowFilters = compact ? false : showFilters;\n    const effectiveShowStats = compact ? false : showStats;\n    const effectiveEnableSearch = compact ? false : enableSearch;\n    const boundedHeight =\n      maxHeight ??\n      (compact || contained ? 240 : \"min(760px, calc(100vh - 64px))\");\n\n    // Calculate optimal number of columns\n    const calculateColumns = useCallback(\n      (containerWidth: number): number => {\n        if (masonryConfig.columns !== \"auto\") {\n          return masonryConfig.columns as number;\n        }\n\n        // Use breakpoints to determine columns\n        const sortedBreakpoints = Object.entries(masonryConfig.breakpoints)\n          .map(([width, cols]) => [parseInt(width), cols] as [number, number])\n          .sort((a, b) => b[0] - a[0]);\n\n        for (const [breakpoint, columns] of sortedBreakpoints) {\n          if (containerWidth >= breakpoint) {\n            return columns;\n          }\n        }\n\n        // Fallback calculation\n        const availableWidth = containerWidth - masonryConfig.gap * 2;\n        const itemWidthWithGap = masonryConfig.minItemWidth + masonryConfig.gap;\n        return Math.max(1, Math.floor(availableWidth / itemWidthWithGap));\n      },\n      [masonryConfig]\n    );\n\n    // Filter and sort items\n    const processItems = useCallback(\n      (itemsToProcess: MasonryItem[]): MasonryItem[] => {\n        let processed = [...itemsToProcess];\n\n        // Apply search filter\n        if (searchQuery.trim()) {\n          processed = processed.filter((item: any) => {\n            const searchText = searchQuery.toLowerCase();\n            return (\n              item.id.toLowerCase().includes(searchText) ||\n              item.category?.toLowerCase().includes(searchText) ||\n              JSON.stringify(item.metadata).toLowerCase().includes(searchText)\n            );\n          });\n        }\n\n        // Apply category filter\n        if (activeFilter && activeFilter !== \"all\") {\n          processed = processed.filter(\n            (item: any) => item.category === activeFilter\n          );\n        }\n\n        // Sort items\n        processed.sort((a, b) => {\n          let aVal: any, bVal: any;\n\n          switch (currentSort.by) {\n            case \"height\":\n              aVal = a.height || 200;\n              bVal = b.height || 200;\n              break;\n            case \"priority\":\n              aVal = a.priority || 0;\n              bVal = b.priority || 0;\n              break;\n            case \"category\":\n              aVal = a.category || \"\";\n              bVal = b.category || \"\";\n              break;\n            default:\n              aVal = a.id;\n              bVal = b.id;\n          }\n\n          if (currentSort.order === \"desc\") {\n            return aVal < bVal ? 1 : aVal > bVal ? -1 : 0;\n          }\n          return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;\n        });\n\n        return processed;\n      },\n      [searchQuery, activeFilter, currentSort]\n    );\n\n    // Calculate masonry layout\n    const calculateLayout = useCallback(\n      (processedItems: MasonryItem[], containerWidth: number): LayoutItem[] => {\n        if (!containerWidth || processedItems.length === 0) return [];\n\n        const numColumns = calculateColumns(containerWidth);\n        const availableWidth =\n          containerWidth - masonryConfig.gap * (numColumns + 1);\n        const itemWidth = Math.min(\n          masonryConfig.maxItemWidth || Infinity,\n          Math.max(masonryConfig.minItemWidth, availableWidth / numColumns)\n        );\n\n        const columnHeights = new Array(numColumns).fill(0);\n        const layoutItems: LayoutItem[] = [];\n\n        processedItems.forEach((item, index) => {\n          // Find shortest column\n          const shortestColumn = columnHeights.indexOf(\n            Math.min(...columnHeights)\n          );\n\n          // Calculate item dimensions\n          let itemHeight = item.height || 200;\n          if (item.aspectRatio) {\n            itemHeight = itemWidth / item.aspectRatio;\n          }\n\n          // Position calculation\n          const x =\n            masonryConfig.gap +\n            shortestColumn * (itemWidth + masonryConfig.gap);\n          const y =\n            columnHeights[shortestColumn] +\n            (columnHeights[shortestColumn] === 0\n              ? masonryConfig.gap\n              : masonryConfig.gap);\n\n          const layoutItem: LayoutItem = {\n            ...item,\n            x,\n            y,\n            width: itemWidth,\n            computedHeight: itemHeight,\n            column: shortestColumn,\n          };\n\n          layoutItems.push(layoutItem);\n          columnHeights[shortestColumn] += itemHeight + masonryConfig.gap;\n        });\n\n        return layoutItems;\n      },\n      [calculateColumns, masonryConfig]\n    );\n\n    // Update layout when items or container changes\n    const updateLayout = useCallback(() => {\n      if (!containerRef.current) return;\n\n      const containerWidth = containerRef.current.offsetWidth;\n      const processedItems = processItems(items);\n      const newLayoutItems = calculateLayout(processedItems, containerWidth);\n\n      setLayoutItems(newLayoutItems);\n      const computedHeight = newLayoutItems.length\n        ? Math.max(\n            ...newLayoutItems.map((item: any) => item.y + item.computedHeight)\n          ) + masonryConfig.gap\n        : 0;\n      setContainerDimensions({\n        width: containerWidth,\n        height: computedHeight,\n      });\n\n      // Update visible items for virtualization\n      if (enableVirtualization) {\n        const container = containerRef.current;\n        const scrollTop = container.scrollTop;\n        const viewportHeight = container.offsetHeight;\n        const buffer = viewportHeight * 0.5;\n\n        const visible = newLayoutItems.filter((item: any) => {\n          const itemTop = item.y;\n          const itemBottom = item.y + item.computedHeight;\n          return (\n            itemBottom >= scrollTop - buffer &&\n            itemTop <= scrollTop + viewportHeight + buffer\n          );\n        });\n\n        setVisibleItems(visible);\n      } else {\n        setVisibleItems(newLayoutItems);\n      }\n    }, [\n      items,\n      processItems,\n      calculateLayout,\n      masonryConfig,\n      enableVirtualization,\n    ]);\n\n    // Handle resize\n    useEffect(() => {\n      if (!masonryConfig.autoResize) return;\n\n      const handleResize = () => {\n        updateLayout();\n      };\n\n      window.addEventListener(\"resize\", handleResize);\n      return () => window.removeEventListener(\"resize\", handleResize);\n    }, [updateLayout, masonryConfig.autoResize]);\n\n    // Setup resize observer\n    useEffect(() => {\n      if (!containerRef.current) return;\n\n      resizeObserver.current = new ResizeObserver((entries) => {\n        for (const entry of entries) {\n          if (entry.target === containerRef.current) {\n            updateLayout();\n          }\n        }\n      });\n\n      resizeObserver.current.observe(containerRef.current);\n\n      return () => {\n        resizeObserver.current?.disconnect();\n      };\n    }, [updateLayout]);\n\n    // Setup infinite scroll\n    useEffect(() => {\n      if (!enableInfiniteScroll || !containerRef.current) return;\n\n      intersectionObserver.current = new IntersectionObserver(\n        (entries) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting && !loadingMore) {\n              setLoadingMore(true);\n              onLoadMore?.();\n              setTimeout(() => setLoadingMore(false), 1000);\n            }\n          });\n        },\n        { threshold: 0.1 }\n      );\n\n      // Create sentinel element\n      const sentinel = document.createElement(\"div\");\n      sentinel.className = \"masonry-sentinel\";\n      sentinel.style.height = \"1px\";\n      containerRef.current.appendChild(sentinel);\n      intersectionObserver.current.observe(sentinel);\n\n      return () => {\n        intersectionObserver.current?.disconnect();\n      };\n    }, [enableInfiniteScroll, loadingMore, onLoadMore]);\n\n    // Initial layout calculation\n    useEffect(() => {\n      updateLayout();\n    }, [updateLayout]);\n\n    // Handle drag and drop\n    const handleDragStart = useCallback(\n      (event: MouseEvent | TouchEvent | PointerEvent, itemId: string) => {\n        if (!enableDragReorder) return;\n\n        setDraggedItem(itemId);\n        play(\"pickup\");\n      },\n      [enableDragReorder, play]\n    );\n\n    const handleDrop = useCallback(\n      (event: MouseEvent | TouchEvent | PointerEvent, targetItemId: string) => {\n        if (!enableDragReorder || !draggedItem) return;\n\n        const newItems = [...items];\n        const draggedIndex = newItems.findIndex(\n          (item) => item.id === draggedItem\n        );\n        const targetIndex = newItems.findIndex(\n          (item) => item.id === targetItemId\n        );\n\n        if (draggedIndex !== -1 && targetIndex !== -1) {\n          const [draggedItemObj] = newItems.splice(draggedIndex, 1);\n          newItems.splice(targetIndex, 0, draggedItemObj);\n\n          onItemsReorder?.(newItems);\n          play(\"place\");\n        }\n\n        setDraggedItem(null);\n      },\n      [enableDragReorder, draggedItem, items, onItemsReorder, play]\n    );\n\n    // Get unique categories for filtering\n    const categories = Array.from(\n      new Set(items.map((item: any) => item.category).filter(Boolean))\n    );\n\n    const FilterControls = () => (\n      <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-mb-6\">\n        {enableSearch && (\n          <div className=\"glass-flex-1 glass-min-glass-w-48\">\n            <input\n              type=\"text\"\n              placeholder=\"Search items...\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-placeholder-white-opacity-50 glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n            />\n          </div>\n        )}\n\n        {showFilters && categories.length > 0 && (\n          <div className=\"glass-flex glass-items-center glass-space-x-2\">\n            <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n              Filter:\n            </span>\n            <select\n              value={activeFilter}\n              onChange={(e) => {\n                setActiveFilter(e.target.value);\n                onFilterChange?.(e.target.value);\n              }}\n              className=\"glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius glass-text-primary-glass-opacity-90 glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Filter items by category\"\n            >\n              <option value=\"\">All</option>\n              {categories.map((category: any) => (\n                <option key={category} value={category}>\n                  {category}\n                </option>\n              ))}\n            </select>\n          </div>\n        )}\n\n        <div className=\"glass-flex glass-items-center glass-space-x-2\">\n          <span className=\"glass-text-sm glass-text-primary-opacity-70\">\n            Sort:\n          </span>\n          <select\n            value={currentSort.by}\n            onChange={(e) =>\n              setCurrentSort((prev: any) => ({\n                ...prev,\n                by: e.target.value as any,\n              }))\n            }\n            className=\"glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius glass-text-primary-glass-opacity-90 glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n            aria-label=\"Sort items\"\n          >\n            <option value=\"id\">ID</option>\n            <option value=\"height\">Height</option>\n            <option value=\"priority\">Priority</option>\n            <option value=\"category\">Category</option>\n          </select>\n\n          <button\n            onClick={() =>\n              setCurrentSort((prev: any) => ({\n                ...prev,\n                order: prev.order === \"asc\" ? \"desc\" : \"asc\",\n              }))\n            }\n            className=\"glass-p-2 glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-border glass-border-white/20 glass-radius glass-text-primary-glass-opacity-90 glass-text-sm glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            {currentSort.order === \"asc\" ? \"\u2191\" : \"\u2193\"}\n          </button>\n        </div>\n      </div>\n    );\n\n    const StatsPanel = () => {\n      const processedItems = processItems(items);\n      const totalHeight = Math.max(\n        ...layoutItems.map((item: any) => item.y + item.computedHeight)\n      );\n      const avgHeight =\n        layoutItems.length > 0 ? totalHeight / layoutItems.length : 0;\n\n      return (\n        <div\n          className={`\n          mb-4 p-3 rounded-lg border border-white/10\n          ${createGlassStyle({ blur: \"sm\", opacity: 0.6 }).background}\n        `}\n        >\n          <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4 glass-text-sm\">\n            <div>\n              <span className=\"glass-text-primary-glass-opacity-60\">\n                Total Items:\n              </span>\n              <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                {items.length}\n              </div>\n            </div>\n            <div>\n              <span className=\"glass-text-primary-glass-opacity-60\">\n                Visible:\n              </span>\n              <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                {processedItems.length}\n              </div>\n            </div>\n            <div>\n              <span className=\"glass-text-primary-glass-opacity-60\">\n                Columns:\n              </span>\n              <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                {containerDimensions.width\n                  ? calculateColumns(containerDimensions.width)\n                  : \"-\"}\n              </div>\n            </div>\n            <div>\n              <span className=\"glass-text-primary-glass-opacity-60\">\n                Avg Height:\n              </span>\n              <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                {avgHeight.toFixed(0)}px\n              </div>\n            </div>\n          </div>\n        </div>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={cn(\n          \"glass-masonry-grid\",\n          compact ? \"glass-p-3\" : \"p-6\",\n          className\n        )}\n        style={{\n          width: compact ? \"100%\" : \"min(1120px, calc(100vw - 48px))\",\n          maxWidth: \"100%\",\n          maxHeight:\n            typeof boundedHeight === \"number\"\n              ? `${boundedHeight}px`\n              : boundedHeight,\n          overflowX: \"auto\",\n          overflowY: \"auto\",\n          boxSizing: \"border-box\",\n        }}\n        {...props}\n      >\n        {/* Header */}\n        {!compact && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-6\">\n            <div>\n              <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary-glass-opacity-90\">\n                Masonry Grid\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                Pinterest-style dynamic layout system\n              </p>\n            </div>\n\n            {enableVirtualization && (\n              <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-blue glass-radius-full\" />\n                <span className=\"glass-text-xs\">Virtualized</span>\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Stats */}\n        {effectiveShowStats && <StatsPanel />}\n\n        {/* Controls */}\n        {(effectiveShowControls ||\n          effectiveShowFilters ||\n          effectiveEnableSearch) && <FilterControls />}\n\n        {/* Masonry Container */}\n        <div\n          ref={containerRef}\n          className=\"glass-relative glass-overflow-auto\"\n          style={{\n            height: compact ? 180 : enableVirtualization ? \"600px\" : \"auto\",\n            maxHeight: compact ? 180 : enableVirtualization ? \"600px\" : \"none\",\n            minHeight: compact ? 160 : 200,\n          }}\n        >\n          <div\n            className=\"glass-relative\"\n            style={{\n              width: \"100%\",\n              height: containerDimensions.height || \"auto\",\n              minHeight: containerDimensions.height || 200,\n            }}\n          >\n            {visibleItems.map((item, index) => (\n              <motion.div\n                key={item.id}\n                ref={(el) => {\n                  if (el) itemRefs.current[item.id] = el;\n                }}\n                className={`\n                  absolute cursor-pointer transition-all duration-200\n                  ${draggedItem === item.id ? \"opacity-50 scale-95\" : \"opacity-100 scale-100\"}\n                  ${enableDragReorder ? \"glass-hover-scale-105\" : \"\"}\n                `}\n                style={{\n                  left: item.x,\n                  top: item.y,\n                  width: item.width,\n                  height: item.computedHeight,\n                  zIndex: draggedItem === item.id ? 1000 : 1,\n                }}\n                initial={shouldAnimate ? { opacity: 0, scale: 0.8 } : false}\n                animate={{ opacity: 1, scale: 1 }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        delay: shouldAnimate\n                          ? index * masonryConfig.animationDelay\n                          : 0,\n                        duration: 0.3,\n                      }\n                }\n                drag={enableDragReorder}\n                onDragStart={(\n                  event: MouseEvent | TouchEvent | PointerEvent,\n                  info: PanInfo\n                ) => handleDragStart(event as any, item.id)}\n                onDragEnd={(\n                  event: MouseEvent | TouchEvent | PointerEvent,\n                  info: PanInfo\n                ) => handleDrop(event as any, item.id)}\n                onClick={() => {\n                  onItemClick?.(item, index);\n                  play(\"select\");\n                }}\n              >\n                <OptimizedGlass\n                  variant=\"frosted\"\n                  className=\"glass-w-full glass-h-full hover:glass-surface-subtle/10 glass-transition-all glass-duration-200\"\n                  style={{\n                    padding: masonryConfig.itemPadding,\n                    boxSizing: \"border-box\",\n                    overflow: \"auto\",\n                  }}\n                >\n                  {item.content}\n                </OptimizedGlass>\n              </motion.div>\n            ))}\n\n            {/* Loading items */}\n            {loadingItems > 0 && (\n              <>\n                {Array.from({ length: loadingItems }, (_, i) => (\n                  <div\n                    key={`loading-${i}`}\n                    className=\"glass-absolute glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-animate-pulse\"\n                    style={{\n                      left:\n                        (i % calculateColumns(containerDimensions.width)) *\n                          (300 + masonryConfig.gap) +\n                        masonryConfig.gap,\n                      top: containerDimensions.height + masonryConfig.gap,\n                      width: 300,\n                      height: 200 + Math.random() * 100,\n                    }}\n                  />\n                ))}\n              </>\n            )}\n\n            {/* Infinite scroll loading indicator */}\n            {loadingMore && enableInfiniteScroll && (\n              <div\n                className=\"glass-absolute glass-w-full glass-flex glass-items-center glass-justify-center glass-py-8\"\n                style={{ top: containerDimensions.height + masonryConfig.gap }}\n              >\n                <div className=\"glass-flex glass-items-center glass-space-x-2 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-sm\">Loading more items...</span>\n                </div>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Footer info */}\n        {!compact && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-mt-6 glass-pt-4 glass-border-t glass-border-white/10 glass-text-xs glass-text-primary-glass-opacity-60\">\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              {enableDragReorder && <span>Drag items to reorder</span>}\n              {enableInfiniteScroll && <span>Scroll to load more</span>}\n              {enableVirtualization && <span>Virtualized for performance</span>}\n            </div>\n\n            <div>\n              Grid: {containerDimensions.width}\u00D7{containerDimensions.height}px\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassMasonryGrid.displayName = \"GlassMasonryGrid\";\n", "'use client';\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useRef,\n  useCallback,\n  useState,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\n\nexport interface GlassRichTextEditorProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /**\n   * Editor content (HTML)\n   */\n  value?: string;\n  /**\n   * Callback when content changes\n   */\n  onChange?: (html: string) => void;\n  /**\n   * Placeholder text\n   * @default 'Start typing...'\n   */\n  placeholder?: string;\n  /**\n   * Whether the editor is read-only\n   * @default false\n   */\n  readOnly?: boolean;\n  /**\n   * Whether the editor is disabled\n   * @default false\n   */\n  disabled?: boolean;\n  /**\n   * Show toolbar\n   * @default true\n   */\n  showToolbar?: boolean;\n  /**\n   * Toolbar tools to show\n   */\n  tools?: (\n    | \"bold\"\n    | \"italic\"\n    | \"underline\"\n    | \"strike\"\n    | \"heading\"\n    | \"quote\"\n    | \"list\"\n    | \"orderedList\"\n    | \"link\"\n    | \"code\"\n    | \"clear\"\n  )[];\n  /**\n   * Minimum height of editor\n   * @default '200px'\n   */\n  minHeight?: string;\n  /**\n   * Maximum height of editor (auto-scrolls after)\n   * @default '400px'\n   */\n  maxHeight?: string;\n  /**\n   * Glassmorphism elevation level\n   * @default 'level2'\n   */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n}\n\nconst defaultTools: GlassRichTextEditorProps[\"tools\"] = [\n  \"bold\",\n  \"italic\",\n  \"underline\",\n  \"heading\",\n  \"quote\",\n  \"list\",\n  \"orderedList\",\n  \"link\",\n  \"code\",\n  \"clear\",\n];\n\ninterface ToolConfig {\n  icon: React.ReactNode;\n  label: string;\n  command: string;\n  value?: string;\n}\n\nconst toolConfigs: Record<string, ToolConfig> = {\n  bold: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M6 12h8a4 4 0 1 0 0-8H6v8Zm0 0h9a4 4 0 1 1 0 8H6v-8Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Bold\",\n    command: \"bold\",\n  },\n  italic: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M19 4h-9M14 20H5M15 4 9 20\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Italic\",\n    command: \"italic\",\n  },\n  underline: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M6 4v7a6 6 0 0 0 12 0V4M4 21h16\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Underline\",\n    command: \"underline\",\n  },\n  strike: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M16 4H9a3 3 0 0 0-2.83 4M14 12a4 4 0 0 1 0 8H6m-2-8h16\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Strikethrough\",\n    command: \"strikeThrough\",\n  },\n  heading: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M6 12h12M6 4v16M18 4v16\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Heading\",\n    command: \"formatBlock\",\n    value: \"h2\",\n  },\n  quote: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1zM15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Quote\",\n    command: \"formatBlock\",\n    value: \"blockquote\",\n  },\n  list: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Bullet List\",\n    command: \"insertUnorderedList\",\n  },\n  orderedList: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M10 6h11M10 12h11M10 18h11M4 6h1v4M4 10h2M6 18H4c0-1 2-2 2-3s-1-1.5-2-1\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Numbered List\",\n    command: \"insertOrderedList\",\n  },\n  link: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Link\",\n    command: \"createLink\",\n  },\n  code: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"m16 18 6-6-6-6M8 6l-6 6 6 6\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Code\",\n    command: \"formatBlock\",\n    value: \"pre\",\n  },\n  clear: {\n    icon: (\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" className='glass-w-4 glass-h-4'>\n        <path\n          d=\"M3 6h18M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    ),\n    label: \"Clear Formatting\",\n    command: \"removeFormat\",\n  },\n};\n\nexport const GlassRichTextEditor = forwardRef<\n  HTMLDivElement,\n  GlassRichTextEditorProps\n>(\n  (\n    {\n      value = \"\",\n      onChange,\n      placeholder = \"Start typing...\",\n      readOnly = false,\n      disabled = false,\n      showToolbar = true,\n      tools = defaultTools,\n      minHeight = \"200px\",\n      maxHeight = \"400px\",\n      elevation = \"level2\",\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const editorRef = useRef<HTMLDivElement>(null);\n    const [isFocused, setIsFocused] = useState(false);\n\n    useEffect(() => {\n      if (editorRef.current && value !== editorRef.current.innerHTML) {\n        editorRef.current.innerHTML = value;\n      }\n    }, [value]);\n\n    const handleInput = useCallback(() => {\n      if (editorRef.current) {\n        onChange?.(editorRef.current.innerHTML);\n      }\n    }, [onChange]);\n\n    const executeCommand = useCallback(\n      (command: string, value?: string) => {\n        if (readOnly || disabled) return;\n\n        if (command === \"createLink\") {\n          const url = prompt(\"Enter URL:\");\n          if (url) {\n            document.execCommand(command, false, url);\n          }\n        } else if (value) {\n          document.execCommand(command, false, value);\n        } else {\n          document.execCommand(command, false);\n        }\n\n        editorRef.current?.focus();\n        handleInput();\n      },\n      [readOnly, disabled, handleInput]\n    );\n\n    const handleKeyDown = useCallback(\n      (e: React.KeyboardEvent) => {\n        if ((e.metaKey || e.ctrlKey) && !e.shiftKey) {\n          switch (e.key) {\n            case \"b\":\n              e.preventDefault();\n              executeCommand(\"bold\");\n              break;\n            case \"i\":\n              e.preventDefault();\n              executeCommand(\"italic\");\n              break;\n            case \"u\":\n              e.preventDefault();\n              executeCommand(\"underline\");\n              break;\n          }\n        }\n      },\n      [executeCommand]\n    );\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        elevation={elevation}\n        className={cn(\"overflow-hidden glass-radius-lg\", className)}\n        {...props}\n      >\n        {showToolbar && !readOnly && (\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-1 glass-p-2 glass-border-b glass-border-subtle\">\n            {tools.map((tool) => {\n              const config = toolConfigs[tool];\n              if (!config) return null;\n\n              return (\n                <button\n                  key={tool}\n                  type=\"button\"\n                  onClick={() => executeCommand(config.command, config.value)}\n                  disabled={disabled}\n                  className={cn(\n                    \"glass-p-2 glass-radius-md\",\n                    \"transition-all duration-200\",\n                    \"hover:bg-white/10 active:bg-white/20\",\n                    \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n                    \"glass-text-primary\",\n                    \"glass-focus glass-touch-target glass-contrast-guard\"\n                  )}\n                  title={config.label}\n                  aria-label={config.label}\n                >\n                  {config.icon}\n                </button>\n              );\n            })}\n          </div>\n        )}\n\n        <div className='glass-relative'>\n          <div\n            ref={editorRef}\n            contentEditable={!readOnly && !disabled}\n            onInput={handleInput}\n            onFocus={() => setIsFocused(true)}\n            onBlur={() => setIsFocused(false)}\n            onKeyDown={handleKeyDown}\n            className={cn(\n              \"glass-p-4 outline-none overflow-y-auto\",\n              \"glass-text-primary prose prose-sm max-w-none\",\n              \"focus:ring-2 glass-focus-ring-blue-500/50\",\n              disabled && \"opacity-50 cursor-not-allowed bg-white/5\",\n              readOnly && \"cursor-default\"\n            )}\n            style={{\n              minHeight,\n              maxHeight,\n            }}\n            role=\"textbox\"\n            aria-multiline=\"true\"\n            aria-label=\"Rich text editor\"\n            aria-readonly={readOnly}\n            aria-disabled={disabled}\n          />\n          {!value && !isFocused && (\n            <div\n              className='glass-absolute glass-top-0 glass-left-0 glass-p-4 glass-text-secondary glass-pointer-events-none glass-select-none'\n              aria-hidden=\"true\"\n            >\n              {placeholder}\n            </div>\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassRichTextEditor.displayName = \"GlassRichTextEditor\";\n\nexport default GlassRichTextEditor;", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface GlassTypingIndicatorProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Whether the indicator is shown\n   * @default true\n   */\n  isTyping?: boolean;\n  /**\n   * User or users who are typing\n   */\n  users?: string | string[];\n  /**\n   * Show user names\n   * @default true\n   */\n  showUsers?: boolean;\n  /**\n   * Typing text template\n   * @default '{users} {isAre} typing...'\n   */\n  text?: string;\n  /**\n   * Size of the indicator\n   * @default 'md'\n   */\n  size?: \"sm\" | \"md\" | \"lg\";\n  /**\n   * Glassmorphism elevation level\n   * @default 'level1'\n   */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n  /**\n   * Dot variant style\n   * @default 'bounce'\n   */\n  variant?: \"bounce\" | \"pulse\" | \"wave\" | \"fade\";\n  /**\n   * Dot color\n   * @default 'primary'\n   */\n  dotColor?:\n    | \"primary\"\n    | \"secondary\"\n    | \"success\"\n    | \"warning\"\n    | \"danger\"\n    | \"neutral\";\n  /**\n   * Number of dots\n   * @default 3\n   */\n  dotCount?: number;\n  /**\n   * Enable glassmorphism container\n   * @default true\n   */\n  glass?: boolean;\n}\n\nexport const GlassTypingIndicator = forwardRef<\n  HTMLDivElement,\n  GlassTypingIndicatorProps\n>(\n  (\n    {\n      isTyping = true,\n      users,\n      showUsers = true,\n      text,\n      size = \"md\",\n      elevation = \"level1\",\n      variant = \"bounce\",\n      dotColor = \"primary\",\n      dotCount = 3,\n      glass = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    if (!isTyping) return null;\n\n    const userList = Array.isArray(users) ? users : users ? [users] : [];\n    const hasUsers = userList.length > 0;\n\n    const getUserText = () => {\n      if (!hasUsers || !showUsers) return null;\n\n      if (userList.length === 1) {\n        return `${userList[0]} is`;\n      } else if (userList.length === 2) {\n        return `${userList[0]} and ${userList[1]} are`;\n      } else if (userList.length > 2) {\n        return `${userList[0]}, ${userList[1]} and ${userList.length - 2} other${userList.length - 2 > 1 ? \"s\" : \"\"} are`;\n      }\n      return null;\n    };\n\n    const displayText = text\n      ? text\n          .replace(\"{users}\", userList.join(\", \"))\n          .replace(\"{isAre}\", userList.length === 1 ? \"is\" : \"are\")\n      : null;\n\n    const sizeClasses = {\n      sm: {\n        dot: \"w-1.5 h-1.5\",\n        text: \"glass-text-xs\",\n        gap: \"gap-1\",\n        padding: \"glass-px-2 glass-py-1\",\n      },\n      md: {\n        dot: \"w-2 h-2\",\n        text: \"glass-text-sm\",\n        gap: \"gap-1.5\",\n        padding: \"glass-px-3 glass-py-2\",\n      },\n      lg: {\n        dot: \"w-2.5 h-2.5\",\n        text: \"glass-text-base\",\n        gap: \"gap-2\",\n        padding: \"glass-px-4 glass-py-3\",\n      },\n    };\n\n    const dotColorClasses = {\n      primary: \"bg-blue-500\",\n      secondary: \"bg-purple-500\",\n      success: \"bg-green-500\",\n      warning: \"bg-yellow-500\",\n      danger: \"bg-red-500\",\n      neutral: \"glass-surface-subtle\",\n    };\n\n    const animations = {\n      bounce: `animate-bounce`,\n      pulse: `animate-pulse`,\n      wave: ``,\n      fade: `animate-pulse`,\n    };\n\n    const getAnimationStyle = (index: number) => {\n      const delay = index * 150;\n\n      const styles: React.CSSProperties = {\n        animationDelay: `${delay}ms`,\n      };\n\n      if (variant === \"wave\") {\n        styles.animation = `wave 1.4s ease-in-out infinite`;\n        styles.animationDelay = `${delay}ms`;\n      }\n\n      return styles;\n    };\n\n    const dots = Array.from({ length: dotCount }, (_, index) => (\n      <div\n        key={index}\n        className={cn(\n          sizeClasses[size].dot,\n          dotColorClasses[dotColor],\n          \"rounded-full\",\n          variant !== \"wave\" && animations[variant]\n        )}\n        style={getAnimationStyle(index)}\n        aria-hidden=\"true\"\n      />\n    ));\n\n    const content = (\n      <div\n        className={cn(\n          \"inline-flex items-center\",\n          sizeClasses[size].gap,\n          !glass && sizeClasses[size].padding\n        )}\n      >\n        {showUsers && hasUsers && (\n          <span\n            className={cn(\n              sizeClasses[size].text,\n              \"glass-text-secondary font-medium\"\n            )}\n          >\n            {displayText || (\n              <>\n                {getUserText()} typing\n                <span className=\"glass-inline-glass-flex glass-ml-1 glass-gap-0.5\">\n                  {Array.from({ length: 3 }, (_, i) => (\n                    <span\n                      key={i}\n                      className=\"glass-animate-pulse\"\n                      style={{ animationDelay: `${i * 200}ms` }}\n                    >\n                      .\n                    </span>\n                  ))}\n                </span>\n              </>\n            )}\n          </span>\n        )}\n        {(!showUsers || !hasUsers) && (\n          <div className={cn(\"flex items-center\", sizeClasses[size].gap)}>\n            {dots}\n          </div>\n        )}\n      </div>\n    );\n\n    if (!glass) {\n      return (\n        <div\n          data-glass-component\n          ref={ref}\n          className={cn(\"inline-flex\", className)}\n          role=\"status\"\n          aria-live=\"polite\"\n          aria-label={\n            hasUsers && showUsers\n              ? `${userList.join(\", \")} ${userList.length === 1 ? \"is\" : \"are\"} typing`\n              : \"Someone is typing\"\n          }\n          {...props}\n        >\n          {content}\n        </div>\n      );\n    }\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        elevation={elevation}\n        className={cn(\n          \"inline-flex glass-radius-full\",\n          sizeClasses[size].padding,\n          className\n        )}\n        role=\"status\"\n        aria-live=\"polite\"\n        aria-label={\n          hasUsers && showUsers\n            ? `${userList.join(\", \")} ${userList.length === 1 ? \"is\" : \"are\"} typing`\n            : \"Someone is typing\"\n        }\n        {...props}\n      >\n        {content}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassTypingIndicator.displayName = \"GlassTypingIndicator\";\n\nconst animations = {\n  bounce: \"animate-bounce\",\n  pulse: \"animate-pulse\",\n  wave: \"\",\n  fade: \"animate-pulse\",\n};\n\nif (\n  typeof document !== \"undefined\" &&\n  !document.getElementById(\"typing-indicator-keyframes\")\n) {\n  const style = document.createElement(\"style\");\n  style.id = \"typing-indicator-keyframes\";\n  style.textContent = `\n    @keyframes wave {\n      0%, 60%, 100% {\n        transform: translateY(0);\n      }\n      30% {\n        transform: translateY(-8px);\n      }\n    }\n  `;\n  document.head.appendChild(style);\n}\n\nexport default GlassTypingIndicator;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  Accessibility,\n  Check,\n  ChevronDown,\n  ChevronUp,\n  Contrast,\n  Info,\n  Keyboard,\n  Monitor,\n  Move,\n  RotateCcw,\n  Settings,\n  TestTube,\n  Volume2,\n} from \"@/icons\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport type GlassContrastLevel = \"normal\" | \"high\" | \"maximum\";\nexport type GlassMotionPreference = \"full\" | \"reduced\" | \"none\";\nexport type GlassColorBlindnessType =\n  | \"none\"\n  | \"protanopia\"\n  | \"deuteranopia\"\n  | \"tritanopia\";\n\nexport interface GlassA11yConfig {\n  contrastLevel: GlassContrastLevel;\n  motionPreference: GlassMotionPreference;\n  reduceTransparency: boolean;\n  fontSizeMultiplier: number;\n  colorBlindnessType: GlassColorBlindnessType;\n  enhanceKeyboardNavigation: boolean;\n  provideLongDescriptions: boolean;\n  useColorBlindFriendlyPalette: boolean;\n  enableHoverEffects: boolean;\n  announceStateChanges: boolean;\n  showSkipLinks: boolean;\n}\n\nexport interface GlassA11yTestResult {\n  test: string;\n  status: \"passed\" | \"warning\" | \"info\";\n  score: number;\n  details: string;\n}\n\ntype GlassA11yConfigUpdater = React.Dispatch<\n  React.SetStateAction<GlassA11yConfig>\n>;\n\nexport interface GlassA11yProps {\n  className?: string;\n  showDashboard?: boolean;\n  onConfigChange?: (config: GlassA11yConfig) => void;\n  enableTesting?: boolean;\n  position?: \"fixed\" | \"relative\";\n  defaultOpen?: boolean;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the controller inside a bounded local preview surface. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  \"aria-label\"?: string;\n  \"data-testid\"?: string;\n}\n\ninterface AccessibilitySection {\n  id: string;\n  title: string;\n  icon: React.ReactNode;\n  description: string;\n  component: React.ComponentType;\n  isExpanded: boolean;\n}\n\ninterface GlassHighContrastProps {\n  config: GlassA11yConfig;\n  updateConfig: GlassA11yConfigUpdater;\n  isHighContrast: boolean;\n}\n\ninterface GlassMotionControlsProps {\n  config: GlassA11yConfig;\n  updateConfig: GlassA11yConfigUpdater;\n  isMotionReduced: boolean;\n}\n\ninterface GlassScreenReaderProps {\n  config: GlassA11yConfig;\n  updateConfig: GlassA11yConfigUpdater;\n}\n\ninterface GlassKeyboardNavProps {\n  config: GlassA11yConfig;\n  updateConfig: GlassA11yConfigUpdater;\n}\n\ninterface QuickSetting {\n  id: string;\n  label: string;\n  active: boolean;\n  onClick: () => void;\n}\n\nconst defaultAccessibilityConfig: GlassA11yConfig = {\n  contrastLevel: \"normal\",\n  motionPreference: \"full\",\n  reduceTransparency: false,\n  fontSizeMultiplier: 1,\n  colorBlindnessType: \"none\",\n  enhanceKeyboardNavigation: true,\n  provideLongDescriptions: true,\n  useColorBlindFriendlyPalette: false,\n  enableHoverEffects: false,\n  announceStateChanges: false,\n  showSkipLinks: false,\n};\n\nexport const GlassA11y = React.forwardRef<HTMLDivElement, GlassA11yProps>(\n  function GlassA11y(\n    {\n      className = \"\",\n      showDashboard = true,\n      onConfigChange,\n      enableTesting = true,\n      position = \"fixed\",\n      defaultOpen = false,\n      compact = false,\n      contained = false,\n      preview = false,\n      maxHeight,\n      maxWidth,\n      density = \"comfortable\",\n      \"aria-label\": ariaLabel,\n      \"data-testid\": dataTestId,\n    },\n    ref\n  ) {\n    const prefersReducedMotion = useReducedMotion();\n    // Mock accessibility configuration state - in real implementation this would come from a context\n    const [config, setConfig] = useState<GlassA11yConfig>(\n      defaultAccessibilityConfig\n    );\n\n    const [isOpen, setIsOpen] = useState(defaultOpen);\n    const [activeTab, setActiveTab] = useState<string>(\"overview\");\n    const [testResults, setTestResults] = useState<GlassA11yTestResult[]>([]);\n    const [isRunningTests, setIsRunningTests] = useState(false);\n\n    // Mock accessibility state\n    const isMotionReduced = config.motionPreference === \"reduced\";\n    const isHighContrast = config.contrastLevel === \"high\";\n    const hasReducedTransparency = config.reduceTransparency;\n\n    // Accessibility sections configuration\n    const [sections, setSections] = useState<AccessibilitySection[]>([\n      {\n        id: \"contrast\",\n        title: \"High Contrast & Visual\",\n        icon: <Contrast className=\"glass-w-5 glass-h-5\" />,\n        description: \"Adjust contrast levels and visual accessibility settings\",\n        component: () => (\n          <GlassHighContrast\n            config={config}\n            updateConfig={setConfig}\n            isHighContrast={isHighContrast}\n          />\n        ),\n        isExpanded: false,\n      },\n      {\n        id: \"motion\",\n        title: \"Motion & Animation\",\n        icon: <Move className=\"glass-w-5 glass-h-5\" />,\n        description: \"Control motion and animation preferences\",\n        component: () => (\n          <GlassMotionControls\n            config={config}\n            updateConfig={setConfig}\n            isMotionReduced={isMotionReduced}\n          />\n        ),\n        isExpanded: false,\n      },\n      {\n        id: \"screen-reader\",\n        title: \"Screen Reader\",\n        icon: <Volume2 className=\"glass-w-5 glass-h-5\" />,\n        description: \"Enhanced screen reader support and descriptions\",\n        component: () => (\n          <GlassScreenReader config={config} updateConfig={setConfig} />\n        ),\n        isExpanded: false,\n      },\n      {\n        id: \"keyboard\",\n        title: \"Keyboard Navigation\",\n        icon: <Keyboard className=\"glass-w-5 glass-h-5\" />,\n        description: \"Enhanced keyboard navigation and focus indicators\",\n        component: () => (\n          <GlassKeyboardNav config={config} updateConfig={setConfig} />\n        ),\n        isExpanded: false,\n      },\n    ]);\n\n    // Handle configuration changes\n    useEffect(() => {\n      onConfigChange?.(config);\n    }, [config, onConfigChange]);\n\n    // Toggle section expansion\n    const toggleSection = useCallback((sectionId: string) => {\n      setSections((prev) =>\n        prev.map((section) =>\n          section.id === sectionId\n            ? { ...section, isExpanded: !section.isExpanded }\n            : section\n        )\n      );\n    }, []);\n\n    // Run accessibility tests\n    const runAccessibilityTests = useCallback(async () => {\n      setIsRunningTests(true);\n\n      try {\n        // Simulate test delay\n        await new Promise((resolve) =>\n          setTimeout(resolve, ANIMATION.DURATION.slower * 1.5)\n        );\n\n        // Mock test results\n        const mockResults: GlassA11yTestResult[] = [\n          {\n            test: \"WCAG 2.1 AA Compliance\",\n            status: \"passed\",\n            score: 95,\n            details: \"Most elements meet contrast requirements\",\n          },\n          {\n            test: \"Keyboard Navigation\",\n            status: config.enhanceKeyboardNavigation ? \"passed\" : \"warning\",\n            score: config.enhanceKeyboardNavigation ? 100 : 75,\n            details: config.enhanceKeyboardNavigation\n              ? \"All interactive elements are keyboard accessible\"\n              : \"Some elements may not be fully keyboard accessible\",\n          },\n          {\n            test: \"Motion Preferences\",\n            status: \"passed\",\n            score: 100,\n            details: \"Motion preferences are respected\",\n          },\n          {\n            test: \"Screen Reader Support\",\n            status: config.provideLongDescriptions ? \"passed\" : \"warning\",\n            score: config.provideLongDescriptions ? 95 : 80,\n            details: config.provideLongDescriptions\n              ? \"Comprehensive descriptions provided\"\n              : \"Basic screen reader support active\",\n          },\n          {\n            test: \"Color Blindness Support\",\n            status: config.useColorBlindFriendlyPalette ? \"passed\" : \"info\",\n            score: config.useColorBlindFriendlyPalette ? 100 : 85,\n            details: config.useColorBlindFriendlyPalette\n              ? \"Color blind friendly palette active\"\n              : \"Standard color palette in use\",\n          },\n        ];\n\n        setTestResults(mockResults);\n      } catch {\n        setTestResults([]);\n      } finally {\n        setIsRunningTests(false);\n      }\n    }, [config]);\n\n    // Quick settings shortcuts\n    const quickSettings: QuickSetting[] = [\n      {\n        id: \"high-contrast\",\n        label: \"High Contrast\",\n        active: isHighContrast,\n        onClick: () =>\n          setConfig((prev) => ({\n            ...prev,\n            contrastLevel: prev.contrastLevel === \"high\" ? \"normal\" : \"high\",\n          })),\n      },\n      {\n        id: \"reduce-motion\",\n        label: \"Reduce Motion\",\n        active: isMotionReduced,\n        onClick: () =>\n          setConfig((prev) => ({\n            ...prev,\n            motionPreference:\n              prev.motionPreference === \"reduced\" ? \"full\" : \"reduced\",\n          })),\n      },\n      {\n        id: \"reduce-transparency\",\n        label: \"Reduce Transparency\",\n        active: hasReducedTransparency,\n        onClick: () =>\n          setConfig((prev) => ({\n            ...prev,\n            reduceTransparency: !prev.reduceTransparency,\n          })),\n      },\n      {\n        id: \"large-text\",\n        label: \"Large Text\",\n        active: config.fontSizeMultiplier > 1,\n        onClick: () =>\n          setConfig((prev) => ({\n            ...prev,\n            fontSizeMultiplier: prev.fontSizeMultiplier > 1 ? 1 : 1.25,\n          })),\n      },\n    ];\n\n    if (!showDashboard) {\n      return null;\n    }\n\n    const isCompact = compact || preview || density === \"compact\";\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n    const resolvedMaxWidth =\n      typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n    const shouldContain = contained || isCompact;\n\n    const containerStyles: React.CSSProperties = {\n      position: shouldContain ? \"relative\" : position,\n      top: !shouldContain && position === \"fixed\" ? \"20px\" : undefined,\n      right: !shouldContain && position === \"fixed\" ? \"20px\" : undefined,\n      zIndex: !shouldContain && position === \"fixed\" ? 1000 : undefined,\n      maxHeight: resolvedMaxHeight ?? (shouldContain ? \"220px\" : undefined),\n      maxWidth: resolvedMaxWidth ?? (shouldContain ? \"320px\" : undefined),\n      width: shouldContain ? \"100%\" : undefined,\n      overflow: shouldContain ? \"hidden\" : undefined,\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={`glass-a11y-controller ${className}`}\n        style={{ ...containerStyles }}\n        aria-label={ariaLabel}\n        data-testid={dataTestId}\n      >\n        {/* Floating Action Button */}\n        <motion.button\n          onClick={() => setIsOpen(!isOpen)}\n          className={cn(\n            // Base glass foundation\n            \"glass-foundation-complete glass-radius-full\",\n            isCompact ? \"glass-w-10 glass-h-10\" : \"glass-w-14 glass-h-14\",\n            \"flex items-center justify-center glass-shadow-lg hover:glass-shadow-xl\",\n            \"glass-transition glass-focus glass-press glass-magnet\",\n            // Conditional styling with glass tokens\n            {\n              \"glass-surface-dark glass-text-primary glass-border-primary\":\n                isHighContrast,\n              \"glass-surface-transparent glass-text-secondary glass-border-subtle\":\n                !isHighContrast,\n              \"rotate-45\": isOpen,\n            }\n          )}\n          whileHover={{ scale: 1.05 }}\n          whileTap={{ scale: 0.95 }}\n          aria-label=\"Toggle accessibility controls\"\n          title=\"Accessibility Settings\"\n        >\n          <Accessibility className=\"glass-w-6 glass-h-6\" />\n        </motion.button>\n\n        {/* Main Panel */}\n        <AnimatePresence>\n          {isOpen && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.9, y: -20 }}\n              animate={\n                prefersReducedMotion ? {} : { opacity: 1, scale: 1, y: 0 }\n              }\n              exit={{ opacity: 0, scale: 0.9, y: -20 }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : {\n                      duration: isMotionReduced\n                        ? ANIMATION.DURATION.fast / 1000\n                        : ANIMATION.DURATION.normal / 1000,\n                    }\n              }\n              className={cn(\n                // Base glass foundation\n                \"glass-foundation-complete absolute glass-right-0\",\n                isCompact ? \"glass-top-11\" : \"glass-top-16\",\n                \"glass-w-96 glass-max-h-80vh overflow-hidden glass-shadow-2xl glass-radius-2xl\",\n                // Conditional styling with glass tokens\n                {\n                  \"glass-surface-dark glass-border-primary glass-text-primary\":\n                    isHighContrast,\n                  \"glass-surface-translucent glass-border-subtle glass-text-secondary\":\n                    !isHighContrast,\n                }\n              )}\n              style={{\n                width: isCompact\n                  ? \"min(20rem, 100%)\"\n                  : \"min(24rem, calc(100vw - 2rem))\",\n                maxHeight:\n                  resolvedMaxHeight ??\n                  (isCompact ? \"220px\" : \"min(80vh, 42rem)\"),\n              }}\n            >\n              {/* Header */}\n              <div\n                className={cn(\n                  isCompact ? \"glass-p-3\" : \"glass-p-6\",\n                  \"glass-border-b glass-border-white/10\"\n                )}\n              >\n                <div\n                  className={cn(\n                    \"glass-flex glass-items-center glass-justify-between\",\n                    isCompact ? \"glass-mb-2\" : \"glass-mb-4\"\n                  )}\n                >\n                  <h2\n                    className={cn(\n                      \"glass-font-semibold glass-flex glass-items-center glass-gap-2\",\n                      isCompact ? \"glass-text-sm\" : \"glass-text-xl\"\n                    )}\n                  >\n                    <Settings className=\"glass-w-5 glass-h-5\" />\n                    {isCompact ? \"A11y\" : \"Accessibility Controls\"}\n                  </h2>\n                  <div className=\"glass-flex glass-gap-2\">\n                    <button\n                      onClick={() => {\n                        /* Detect system preferences */\n                      }}\n                      className={`\n                      p-2 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400 glass-focus glass-touch-target glass-contrast-guard\n                      ${\n                        isHighContrast\n                          ? \"hover:bg-white/20 text-white\"\n                          : \"hover:bg-white/10 glass-text-secondary\"\n                      }\n                    `}\n                      title=\"Detect system preferences\"\n                    >\n                      <Monitor className=\"glass-w-4 glass-h-4\" />\n                    </button>\n                    <button\n                      onClick={() => setConfig(defaultAccessibilityConfig)}\n                      className={`\n                      p-2 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400 glass-focus glass-touch-target glass-contrast-guard\n                      ${\n                        isHighContrast\n                          ? \"hover:bg-white/20 text-white\"\n                          : \"hover:bg-white/10 glass-text-secondary\"\n                      }\n                    `}\n                      title=\"Reset to defaults\"\n                    >\n                      <RotateCcw className=\"glass-w-4 glass-h-4\" />\n                    </button>\n                  </div>\n                </div>\n\n                {/* Quick Settings */}\n                <div\n                  className={cn(\n                    \"glass-grid glass-grid-cols-2\",\n                    isCompact ? \"glass-gap-1\" : \"glass-gap-2\"\n                  )}\n                >\n                  {quickSettings.map((setting) => (\n                    <motion.button\n                      key={setting.id}\n                      onClick={setting.onClick}\n                      whileHover={{ scale: isMotionReduced ? 1 : 1.02 }}\n                      whileTap={{ scale: isMotionReduced ? 1 : 0.98 }}\n                      className={`\n                      ${isCompact ? \"p-2 text-xs\" : \"p-3 text-sm\"} rounded-lg font-medium transition-all duration-200\n                      border focus:outline-none focus:ring-2 focus:ring-blue-400\n                      ${\n                        setting.active\n                          ? isHighContrast\n                            ? \"bg-white/30 border-white text-white\"\n                            : \"bg-blue-500/20 border-blue-500/50 text-blue-700\"\n                          : isHighContrast\n                            ? \"bg-white/10 border-white/20 text-white/80 hover:bg-white/20\"\n                            : \"bg-white/5 border-white/10 glass-text-secondary hover:bg-white/10\"\n                      }\n                    `}\n                    >\n                      <div className=\"glass-flex glass-items-center glass-gap-1\">\n                        {setting.active && (\n                          <Check className=\"glass-w-3 glass-h-3\" />\n                        )}\n                        <span className=\"glass-truncate\">{setting.label}</span>\n                      </div>\n                    </motion.button>\n                  ))}\n                </div>\n              </div>\n\n              {/* Content */}\n              <div className=\"glass-flex-1 glass-overflow-y-auto\">\n                {/* Tab Navigation */}\n                <div className=\"glass-flex glass-border-b glass-border-white/10\">\n                  <button\n                    onClick={() => setActiveTab(\"overview\")}\n                    className={`\n                    flex-1 ${isCompact ? \"px-2 py-2 text-xs\" : \"px-4 py-3 text-sm\"} font-medium transition-colors\n                    focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-inset glass-focus glass-touch-target glass-contrast-guard\n                    ${\n                      activeTab === \"overview\"\n                        ? isHighContrast\n                          ? \"bg-white/20 text-white\"\n                          : \"bg-white/10 text-blue-600\"\n                        : isHighContrast\n                          ? \"text-white/70 hover:text-white\"\n                          : \"glass-text-secondary hover:glass-text-primary\"\n                    }\n                  `}\n                  >\n                    Overview\n                  </button>\n                  <button\n                    onClick={() => setActiveTab(\"sections\")}\n                    className={`\n                    flex-1 ${isCompact ? \"px-2 py-2 text-xs\" : \"px-4 py-3 text-sm\"} font-medium transition-colors\n                    focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-inset glass-focus glass-touch-target glass-contrast-guard\n                    ${\n                      activeTab === \"sections\"\n                        ? isHighContrast\n                          ? \"bg-white/20 text-white\"\n                          : \"bg-white/10 text-blue-600\"\n                        : isHighContrast\n                          ? \"text-white/70 hover:text-white\"\n                          : \"glass-text-secondary hover:glass-text-primary\"\n                    }\n                  `}\n                  >\n                    Settings\n                  </button>\n                  {enableTesting && (\n                    <button\n                      onClick={() => setActiveTab(\"testing\")}\n                      className={`\n                      flex-1 ${isCompact ? \"px-2 py-2 text-xs\" : \"px-4 py-3 text-sm\"} font-medium transition-colors\n                      focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-inset glass-focus glass-touch-target glass-contrast-guard\n                      ${\n                        activeTab === \"testing\"\n                          ? isHighContrast\n                            ? \"bg-white/20 text-white\"\n                            : \"bg-white/10 text-blue-600\"\n                          : isHighContrast\n                            ? \"text-white/70 hover:text-white\"\n                            : \"glass-text-secondary hover:glass-text-primary\"\n                      }\n                    `}\n                    >\n                      Testing\n                    </button>\n                  )}\n                </div>\n\n                {/* Tab Content */}\n                <div className={isCompact ? \"glass-p-3\" : \"glass-p-6\"}>\n                  {activeTab === \"overview\" && (\n                    <div className=\"glass-space-y-4\">\n                      <div className=\"glass-grid glass-grid-cols-2 glass-gap-4 glass-text-sm\">\n                        <div\n                          className={`\n                        p-3 rounded-lg border\n                        ${\n                          isHighContrast\n                            ? \"bg-white/10 border-white/20\"\n                            : \"bg-white/5 border-white/10\"\n                        }\n                      `}\n                        >\n                          <div className=\"glass-font-medium glass-mb-1\">\n                            Contrast\n                          </div>\n                          <div\n                            className={`capitalize ${isHighContrast ? \"text-white/80\" : \"glass-text-secondary\"}`}\n                          >\n                            {config.contrastLevel}\n                          </div>\n                        </div>\n                        <div\n                          className={`\n                        p-3 rounded-lg border\n                        ${\n                          isHighContrast\n                            ? \"bg-white/10 border-white/20\"\n                            : \"bg-white/5 border-white/10\"\n                        }\n                      `}\n                        >\n                          <div className=\"glass-font-medium glass-mb-1\">\n                            Motion\n                          </div>\n                          <div\n                            className={`capitalize ${isHighContrast ? \"text-white/80\" : \"glass-text-secondary\"}`}\n                          >\n                            {config.motionPreference}\n                          </div>\n                        </div>\n                        <div\n                          className={`\n                        p-3 rounded-lg border\n                        ${\n                          isHighContrast\n                            ? \"bg-white/10 border-white/20\"\n                            : \"bg-white/5 border-white/10\"\n                        }\n                      `}\n                        >\n                          <div className=\"glass-font-medium glass-mb-1\">\n                            Text Scale\n                          </div>\n                          <div\n                            className={`${isHighContrast ? \"text-white/80\" : \"glass-text-secondary\"}`}\n                          >\n                            {Math.round(config.fontSizeMultiplier * 100)}%\n                          </div>\n                        </div>\n                        <div\n                          className={`\n                        p-3 rounded-lg border\n                        ${\n                          isHighContrast\n                            ? \"bg-white/10 border-white/20\"\n                            : \"bg-white/5 border-white/10\"\n                        }\n                      `}\n                        >\n                          <div className=\"glass-font-medium glass-mb-1\">\n                            Color Vision\n                          </div>\n                          <div\n                            className={`capitalize ${isHighContrast ? \"text-white/80\" : \"glass-text-secondary\"}`}\n                          >\n                            {config.colorBlindnessType === \"none\"\n                              ? \"Normal\"\n                              : config.colorBlindnessType}\n                          </div>\n                        </div>\n                      </div>\n\n                      <div\n                        className={`\n                      p-4 rounded-lg border-l-4 border-blue-500\n                      ${\n                        isHighContrast\n                          ? \"bg-blue-500/20 text-white\"\n                          : \"bg-blue-50/50 text-blue-800\"\n                      }\n                    `}\n                      >\n                        <div className=\"glass-flex glass-items-start glass-gap-3\">\n                          <Info className=\"glass-w-5 glass-h-5 glass-mt-0-5 glass-flex-shrink-0\" />\n                          <div>\n                            <p className=\"glass-font-medium glass-mb-1\">\n                              WCAG 2.1 AAA Compliant\n                            </p>\n                            <p className=\"glass-text-sm glass-opacity-90\">\n                              This interface meets the highest accessibility\n                              standards and adapts to your needs.\n                            </p>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n                  )}\n\n                  {activeTab === \"sections\" && (\n                    <div className=\"glass-space-y-3\">\n                      {sections.map((section) => {\n                        const Component = section.component;\n                        return (\n                          <div\n                            key={section.id}\n                            className=\"glass-border glass-border-white/10 glass-radius-lg\"\n                          >\n                            <button\n                              onClick={() => toggleSection(section.id)}\n                              className={`\n                              w-full p-4 text-left transition-colors focus:outline-none focus:ring-2 focus:ring-blue-400 glass-focus glass-touch-target glass-contrast-guard\n                              ${\n                                isHighContrast\n                                  ? \"hover:bg-white/10 text-white\"\n                                  : \"hover:bg-white/8 glass-text-secondary\"\n                              }\n                            `}\n                            >\n                              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                                <div className=\"glass-flex glass-items-center glass-gap-3\">\n                                  {section.icon}\n                                  <div>\n                                    <div className=\"glass-font-medium\">\n                                      {section.title}\n                                    </div>\n                                    <div\n                                      className={`text-sm ${isHighContrast ? \"text-white/70\" : \"glass-text-tertiary\"}`}\n                                    >\n                                      {section.description}\n                                    </div>\n                                  </div>\n                                </div>\n                                {section.isExpanded ? (\n                                  <ChevronUp className=\"glass-w-5 glass-h-5\" />\n                                ) : (\n                                  <ChevronDown className=\"glass-w-5 glass-h-5\" />\n                                )}\n                              </div>\n                            </button>\n\n                            <AnimatePresence>\n                              {section.isExpanded && (\n                                <motion.div\n                                  initial={{ height: 0, opacity: 0 }}\n                                  animate={\n                                    prefersReducedMotion\n                                      ? {}\n                                      : { height: \"auto\", opacity: 1 }\n                                  }\n                                  exit={{ height: 0, opacity: 0 }}\n                                  transition={\n                                    prefersReducedMotion\n                                      ? { duration: 0 }\n                                      : {\n                                          duration: isMotionReduced\n                                            ? ANIMATION.DURATION.fast / 1000\n                                            : ANIMATION.DURATION.normal / 1000,\n                                        }\n                                  }\n                                  className=\"glass-border-t glass-border-white/10\"\n                                >\n                                  <div className=\"glass-p-4\">\n                                    <Component />\n                                  </div>\n                                </motion.div>\n                              )}\n                            </AnimatePresence>\n                          </div>\n                        );\n                      })}\n                    </div>\n                  )}\n\n                  {activeTab === \"testing\" && enableTesting && (\n                    <div className=\"glass-space-y-4\">\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <h3 className=\"glass-font-medium\">\n                          Accessibility Tests\n                        </h3>\n                        <motion.button\n                          onClick={runAccessibilityTests}\n                          disabled={isRunningTests}\n                          whileHover={{ scale: isMotionReduced ? 1 : 1.05 }}\n                          whileTap={{ scale: isMotionReduced ? 1 : 0.95 }}\n                          className={`\n                          px-4 py-2 rounded-lg text-sm font-medium transition-colors\n                          focus:outline-none focus:ring-2 focus:ring-blue-400 disabled:opacity-50\n                          ${\n                            isHighContrast\n                              ? \"bg-white/20 text-white hover:bg-white/30\"\n                              : \"bg-blue-500/20 text-blue-700 hover:bg-blue-500/30\"\n                          }\n                        `}\n                        >\n                          <div className=\"glass-flex glass-items-center glass-gap-2\">\n                            <TestTube className=\"glass-w-4 glass-h-4\" />\n                            {isRunningTests ? \"Running...\" : \"Run Tests\"}\n                          </div>\n                        </motion.button>\n                      </div>\n\n                      {testResults.length > 0 && (\n                        <div className=\"glass-space-y-3\">\n                          {testResults.map((result, index) => (\n                            <div\n                              key={index}\n                              className={`\n                              p-3 rounded-lg border-l-4\n                              ${\n                                result.status === \"passed\"\n                                  ? \"border-green-500 bg-green-500/10\"\n                                  : result.status === \"warning\"\n                                    ? \"border-yellow-500 bg-yellow-500/10\"\n                                    : \"border-blue-500 bg-blue-500/10\"\n                              }\n                            `}\n                            >\n                              <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-1\">\n                                <span className=\"glass-font-medium\">\n                                  {result.test}\n                                </span>\n                                <span className=\"glass-text-sm\">\n                                  {result.score}%\n                                </span>\n                              </div>\n                              <p\n                                className={`text-sm ${isHighContrast ? \"text-white/70\" : \"glass-text-secondary\"}`}\n                              >\n                                {result.details}\n                              </p>\n                            </div>\n                          ))}\n                        </div>\n                      )}\n                    </div>\n                  )}\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Keyboard shortcut hint */}\n        <div className=\"glass-sr-only\" role=\"region\" aria-live=\"polite\">\n          Press Alt+A to open accessibility controls\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassA11y.displayName = \"GlassA11y\";\n\n// Sub-components for accessibility sections\nexport const GlassHighContrast = React.forwardRef<\n  HTMLDivElement,\n  GlassHighContrastProps\n>(function GlassHighContrast({ config, updateConfig, isHighContrast }, ref) {\n  return (\n    <div ref={ref} className=\"glass-space-y-4\">\n      <h4 className=\"glass-font-medium\">High Contrast Settings</h4>\n      <div className=\"glass-space-y-3\">\n        <div>\n          <label className=\"glass-block glass-text-sm glass-font-medium glass-mb-2\">\n            Contrast Level\n          </label>\n          <select\n            value={config.contrastLevel}\n            onChange={(e) =>\n              updateConfig({\n                ...config,\n                contrastLevel: e.target.value as GlassContrastLevel,\n              })\n            }\n            className={`w-full p-2 rounded border glass-focus glass-touch-target glass-contrast-guard ${isHighContrast ? \"bg-white/10 border-white/20 text-white\" : \"bg-white/5 border-white/10\"}`}\n          >\n            <option value=\"normal\">Normal</option>\n            <option value=\"high\">High Contrast</option>\n            <option value=\"maximum\">Maximum Contrast</option>\n          </select>\n        </div>\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Reduce Transparency</span>\n          <button\n            onClick={() =>\n              updateConfig({\n                ...config,\n                reduceTransparency: !config.reduceTransparency,\n              })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.reduceTransparency ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.reduceTransparency ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n});\n\nGlassHighContrast.displayName = \"GlassHighContrast\";\n\nexport const GlassMotionControls = React.forwardRef<\n  HTMLDivElement,\n  GlassMotionControlsProps\n>(function GlassMotionControls({ config, updateConfig, isMotionReduced }, ref) {\n  return (\n    <div ref={ref} className=\"glass-space-y-4\">\n      <h4 className=\"glass-font-medium\">Motion & Animation</h4>\n      <div className=\"glass-space-y-3\">\n        <div>\n          <label className=\"glass-block glass-text-sm glass-font-medium glass-mb-2\">\n            Motion Preference\n          </label>\n          <select\n            value={config.motionPreference}\n            onChange={(e) =>\n              updateConfig({\n                ...config,\n                motionPreference: e.target.value as GlassMotionPreference,\n              })\n            }\n            className={`w-full p-2 rounded border glass-focus glass-touch-target glass-contrast-guard ${isMotionReduced ? \"bg-white/10 border-white/20 text-white\" : \"bg-white/5 border-white/10\"}`}\n          >\n            <option value=\"full\">Full Motion</option>\n            <option value=\"reduced\">Reduced Motion</option>\n            <option value=\"none\">No Motion</option>\n          </select>\n        </div>\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Enable Hover Effects</span>\n          <button\n            onClick={() =>\n              updateConfig({\n                ...config,\n                enableHoverEffects: !config.enableHoverEffects,\n              })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.enableHoverEffects ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.enableHoverEffects ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n});\n\nGlassMotionControls.displayName = \"GlassMotionControls\";\n\nexport const GlassScreenReader = React.forwardRef<\n  HTMLDivElement,\n  GlassScreenReaderProps\n>(function GlassScreenReader({ config, updateConfig }, ref) {\n  return (\n    <div ref={ref} className=\"glass-space-y-4\">\n      <h4 className=\"glass-font-medium\">Screen Reader Support</h4>\n      <div className=\"glass-space-y-3\">\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Provide Long Descriptions</span>\n          <button\n            onClick={() =>\n              updateConfig({\n                ...config,\n                provideLongDescriptions: !config.provideLongDescriptions,\n              })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.provideLongDescriptions ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.provideLongDescriptions ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Announce State Changes</span>\n          <button\n            onClick={() =>\n              updateConfig({\n                ...config,\n                announceStateChanges: !config.announceStateChanges,\n              })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.announceStateChanges ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.announceStateChanges ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n});\n\nGlassScreenReader.displayName = \"GlassScreenReader\";\n\nexport const GlassKeyboardNav = React.forwardRef<\n  HTMLDivElement,\n  GlassKeyboardNavProps\n>(function GlassKeyboardNav({ config, updateConfig }, ref) {\n  return (\n    <div ref={ref} className=\"glass-space-y-4\">\n      <h4 className=\"glass-font-medium\">Keyboard Navigation</h4>\n      <div className=\"glass-space-y-3\">\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Enhanced Keyboard Navigation</span>\n          <button\n            onClick={() =>\n              updateConfig({\n                ...config,\n                enhanceKeyboardNavigation: !config.enhanceKeyboardNavigation,\n              })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.enhanceKeyboardNavigation ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.enhanceKeyboardNavigation ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span>Skip Links</span>\n          <button\n            onClick={() =>\n              updateConfig({ ...config, showSkipLinks: !config.showSkipLinks })\n            }\n            className={`w-12 h-6 rounded-full transition-colors glass-focus glass-touch-target glass-contrast-guard ${config.showSkipLinks ? \"bg-blue-500\" : \"bg-gray-300\"}`}\n          >\n            <div\n              className={`w-5 h-5 bg-white rounded-full transition-transform ${config.showSkipLinks ? \"translate-x-6\" : \"translate-x-0.5\"}`}\n            />\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n});\n\nGlassKeyboardNav.displayName = \"GlassKeyboardNav\";\n\nexport default GlassA11y;\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 graphics demo.\n *\n * LiquidGlassGPU showcases GPU-accelerated liquid-glass rendering. Metrics and\n * some capability detection are illustrative/simulated and it degrades to a\n * non-GPU fallback when WebGL is unavailable. Treat as a graphics showcase, not a\n * guaranteed-accelerated production renderer.\n */\nimport React, {\n  useRef,\n  useEffect,\n  useCallback,\n  useMemo,\n  useState,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n  LIQUID_GLASS,\n  type LiquidGlassMaterial,\n  type MaterialVariant,\n} from \"../../tokens/glass\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\n// WebGL shader sources for Liquid Glass effects\nconst VERTEX_SHADER = `\n  attribute vec2 position;\n  attribute vec2 texCoord;\n  varying vec2 vTexCoord;\n  varying vec2 vPosition;\n  \n  uniform mat4 uProjection;\n  uniform mat4 uModelView;\n  uniform float uTime;\n  uniform vec2 uResolution;\n  \n  void main() {\n    vTexCoord = texCoord;\n    vPosition = position;\n    gl_Position = uProjection * uModelView * vec4(position, 0.0, 1.0);\n  }\n`;\n\nconst FRAGMENT_SHADER = `\n  precision highp float;\n  \n  varying vec2 vTexCoord;\n  varying vec2 vPosition;\n  \n  uniform sampler2D uBackdropTexture;\n  uniform sampler2D uNormalMap;\n  uniform vec2 uResolution;\n  uniform float uTime;\n  uniform float uIOR;\n  uniform float uThickness;\n  uniform float uSheen;\n  uniform vec2 uTilt;\n  uniform bool uEnableRefraction;\n  uniform bool uEnableReflection;\n  uniform bool uEnableParallax;\n  \n  // IOR-based refraction calculation\n  vec2 refract2D(vec2 incident, vec2 normal, float ior) {\n    float cosI = dot(incident, normal);\n    float sinT2 = (1.0 - cosI * cosI) / (ior * ior);\n    \n    if (sinT2 > 1.0) {\n      // Total internal reflection\n      return reflect(incident, normal);\n    }\n    \n    float cosT = sqrt(1.0 - sinT2);\n    return incident / ior - normal * (cosT - cosI / ior);\n  }\n  \n  // Generate procedural normal map for glass thickness\n  vec3 generateNormal(vec2 uv, float thickness, float time) {\n    vec2 offset = vec2(0.001) * thickness;\n    \n    // Create subtle surface variation\n    float height1 = sin(uv.x * 20.0 + time * 0.5) * cos(uv.y * 15.0 + time * 0.3) * 0.1;\n    float height2 = sin(uv.x * 35.0 - time * 0.7) * cos(uv.y * 25.0 - time * 0.4) * 0.05;\n    \n    float heightL = sin((uv.x - offset.x) * 20.0 + time * 0.5) * cos(uv.y * 15.0 + time * 0.3) * 0.1;\n    float heightR = sin((uv.x + offset.x) * 20.0 + time * 0.5) * cos(uv.y * 15.0 + time * 0.3) * 0.1;\n    float heightT = sin(uv.x * 20.0 + time * 0.5) * cos((uv.y + offset.y) * 15.0 + time * 0.3) * 0.1;\n    float heightB = sin(uv.x * 20.0 + time * 0.5) * cos((uv.y - offset.y) * 15.0 + time * 0.3) * 0.1;\n    \n    vec3 normal;\n    normal.x = (heightL - heightR) / (2.0 * offset.x);\n    normal.y = (heightB - heightT) / (2.0 * offset.y);\n    normal.z = 1.0;\n    \n    return normalize(normal);\n  }\n  \n  // Fresnel reflectance calculation\n  float fresnel(vec3 incident, vec3 normal, float ior) {\n    float cosI = abs(dot(incident, normal));\n    float sinI = sqrt(1.0 - cosI * cosI);\n    float sinT = sinI / ior;\n    \n    if (sinT >= 1.0) {\n      return 1.0; // Total internal reflection\n    }\n    \n    float cosT = sqrt(1.0 - sinT * sinT);\n    float rs = (ior * cosI - cosT) / (ior * cosI + cosT);\n    float rp = (ior * cosT - cosI) / (ior * cosT + cosI);\n    \n    return (rs * rs + rp * rp) * 0.5;\n  }\n  \n  void main() {\n    vec2 uv = vTexCoord;\n    vec2 screenUV = gl_FragCoord.xy / uResolution;\n    \n    // Generate surface normal based on thickness\n    vec3 normal = generateNormal(uv, uThickness * 0.1, uTime);\n    \n    // Apply device tilt to normal\n    normal.xy += uTilt * 0.3;\n    normal = normalize(normal);\n    \n    vec4 color = vec4(0.0);\n    \n    if (uEnableRefraction) {\n      // Calculate refracted sampling coordinates\n      vec2 incident = normalize(vec2(0.0, -1.0));\n      vec2 refracted = refract2D(incident, normal.xy, 1.0 / uIOR);\n      \n      // Sample backdrop with refraction offset\n      vec2 refractedUV = screenUV + refracted * uThickness * 0.01;\n      refractedUV = clamp(refractedUV, 0.0, 1.0);\n      \n      vec4 refractedColor = texture2D(uBackdropTexture, refractedUV);\n      color += refractedColor * 0.7;\n    } else {\n      // Fallback: direct backdrop sampling\n      color += texture2D(uBackdropTexture, screenUV) * 0.7;\n    }\n    \n    if (uEnableReflection) {\n      // Calculate reflection\n      vec3 viewDir = normalize(vec3(screenUV - 0.5, -1.0));\n      vec3 reflected = reflect(viewDir, normal);\n      \n      // Sample environment for reflection (simplified)\n      vec2 reflectionUV = screenUV + reflected.xy * 0.05;\n      reflectionUV = clamp(reflectionUV, 0.0, 1.0);\n      \n      vec4 reflectionColor = texture2D(uBackdropTexture, reflectionUV);\n      \n      // Apply Fresnel for realistic reflection strength\n      float fresnelStrength = fresnel(viewDir, normal, uIOR);\n      color += reflectionColor * fresnelStrength * 0.3;\n    }\n    \n    // Edge sheen effect\n    if (uSheen > 0.0) {\n      float edgeDistance = min(min(uv.x, 1.0 - uv.x), min(uv.y, 1.0 - uv.y));\n      float sheenStrength = 1.0 - smoothstep(0.0, 0.1, edgeDistance);\n      \n      vec3 sheenColor = vec3(1.0, 1.0, 1.0);\n      color.rgb += sheenColor * sheenStrength * uSheen * 0.2;\n    }\n    \n    // Glass tint overlay\n    vec4 glassTint = vec4(1.0, 1.0, 1.0, 0.95);\n    color = mix(color, glassTint, 0.15);\n    \n    // Apply thickness-based opacity\n    color.a = 0.85 + uThickness * 0.02;\n    \n    gl_FragColor = color;\n  }\n`;\n\n// WebGL capability detection and context management\nexport class LiquidGlassGPUDriver {\n  private gl: WebGLRenderingContext | null = null;\n  private program: WebGLProgram | null = null;\n  private canvas: HTMLCanvasElement | null = null;\n  private uniforms: Record<string, WebGLUniformLocation | null> = {};\n  private attributes: Record<string, number> = {};\n  private isInitialized = false;\n  private animationFrameId: number | null = null;\n  private backdropTexture: WebGLTexture | null = null;\n\n  constructor() {}\n\n  /**\n   * Initialize WebGL context and shaders\n   */\n  async initialize(canvas: HTMLCanvasElement): Promise<boolean> {\n    try {\n      this.canvas = canvas;\n      this.gl = (canvas.getContext(\"webgl\") ||\n        canvas.getContext(\n          \"experimental-webgl\"\n        )) as WebGLRenderingContext | null;\n\n      if (!this.gl) {\n        return false;\n      }\n\n      // Check for required extensions\n      const requiredExtensions = [\n        \"OES_texture_float\",\n        \"WEBGL_color_buffer_float\",\n      ];\n      for (const ext of requiredExtensions) {\n        if (!this.gl.getExtension(ext)) {\n          continue;\n        }\n      }\n\n      // Create shader program\n      this.program = this.createShaderProgram(VERTEX_SHADER, FRAGMENT_SHADER);\n      if (!this.program) {\n        return false;\n      }\n\n      // Get uniform and attribute locations\n      this.setupUniformsAndAttributes();\n\n      // Set up geometry\n      this.setupGeometry();\n\n      this.isInitialized = true;\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Render liquid glass effect with given parameters\n   */\n  render(params: {\n    ior: number;\n    thickness: number;\n    sheen: number;\n    tilt: { x: number; y: number };\n    enableRefraction: boolean;\n    enableReflection: boolean;\n    enableParallax: boolean;\n    time: number;\n  }): void {\n    if (!this.gl || !this.program || !this.isInitialized) {\n      return;\n    }\n\n    const gl = this.gl;\n\n    // Clear and set up viewport\n    gl.clear(gl.COLOR_BUFFER_BIT);\n    gl.viewport(0, 0, this.canvas!.width, this.canvas!.height);\n\n    // Use shader program\n    gl.useProgram(this.program);\n\n    // Update uniforms\n    this.updateUniforms(params);\n\n    // Draw quad\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n  }\n\n  /**\n   * Update backdrop texture from DOM element\n   */\n  async updateBackdrop(element: HTMLElement): Promise<void> {\n    if (!this.gl || !this.isInitialized) return;\n\n    try {\n      // Render a lightweight backdrop canvas and upload it directly to WebGL.\n      // Returning ImageData here forces a CPU pixel readback and stalls Chrome.\n      const backdropCanvas = await this.captureElementBackdrop(element);\n      if (!backdropCanvas) return;\n\n      // Update texture\n      if (!this.backdropTexture) {\n        this.backdropTexture = this.gl.createTexture();\n      }\n\n      this.gl.bindTexture(this.gl.TEXTURE_2D, this.backdropTexture);\n      this.gl.texImage2D(\n        this.gl.TEXTURE_2D,\n        0,\n        this.gl.RGBA,\n        this.gl.RGBA,\n        this.gl.UNSIGNED_BYTE,\n        backdropCanvas\n      );\n\n      // Set texture parameters\n      this.gl.texParameteri(\n        this.gl.TEXTURE_2D,\n        this.gl.TEXTURE_WRAP_S,\n        this.gl.CLAMP_TO_EDGE\n      );\n      this.gl.texParameteri(\n        this.gl.TEXTURE_2D,\n        this.gl.TEXTURE_WRAP_T,\n        this.gl.CLAMP_TO_EDGE\n      );\n      this.gl.texParameteri(\n        this.gl.TEXTURE_2D,\n        this.gl.TEXTURE_MIN_FILTER,\n        this.gl.LINEAR\n      );\n      this.gl.texParameteri(\n        this.gl.TEXTURE_2D,\n        this.gl.TEXTURE_MAG_FILTER,\n        this.gl.LINEAR\n      );\n    } catch {\n      // Keep rendering with the previous backdrop texture.\n    }\n  }\n\n  /**\n   * Clean up WebGL resources\n   */\n  dispose(): void {\n    if (this.animationFrameId) {\n      cancelAnimationFrame(this.animationFrameId);\n      this.animationFrameId = null;\n    }\n\n    if (this.gl) {\n      if (this.program) {\n        this.gl.deleteProgram(this.program);\n      }\n      if (this.backdropTexture) {\n        this.gl.deleteTexture(this.backdropTexture);\n      }\n    }\n\n    this.isInitialized = false;\n  }\n\n  /**\n   * Check if GPU acceleration is available\n   */\n  static isSupported(): boolean {\n    try {\n      const canvas = document.createElement(\"canvas\");\n      const gl =\n        canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\");\n      return !!gl;\n    } catch {\n      return false;\n    }\n  }\n\n  // Private helper methods\n\n  private createShaderProgram(\n    vertexSource: string,\n    fragmentSource: string\n  ): WebGLProgram | null {\n    if (!this.gl) return null;\n\n    const vertexShader = this.compileShader(\n      vertexSource,\n      this.gl.VERTEX_SHADER\n    );\n    const fragmentShader = this.compileShader(\n      fragmentSource,\n      this.gl.FRAGMENT_SHADER\n    );\n\n    if (!vertexShader || !fragmentShader) {\n      return null;\n    }\n\n    const program = this.gl.createProgram();\n    if (!program) return null;\n\n    this.gl.attachShader(program, vertexShader);\n    this.gl.attachShader(program, fragmentShader);\n    this.gl.linkProgram(program);\n\n    if (!this.gl.getProgramParameter(program, this.gl.LINK_STATUS)) {\n      this.gl.deleteProgram(program);\n      return null;\n    }\n\n    return program;\n  }\n\n  private compileShader(source: string, type: number): WebGLShader | null {\n    if (!this.gl) return null;\n\n    const shader = this.gl.createShader(type);\n    if (!shader) return null;\n\n    this.gl.shaderSource(shader, source);\n    this.gl.compileShader(shader);\n\n    if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n      this.gl.deleteShader(shader);\n      return null;\n    }\n\n    return shader;\n  }\n\n  private setupUniformsAndAttributes(): void {\n    if (!this.gl || !this.program) return;\n\n    // Get uniform locations\n    const uniformNames = [\n      \"uBackdropTexture\",\n      \"uNormalMap\",\n      \"uResolution\",\n      \"uTime\",\n      \"uIOR\",\n      \"uThickness\",\n      \"uSheen\",\n      \"uTilt\",\n      \"uEnableRefraction\",\n      \"uEnableReflection\",\n      \"uEnableParallax\",\n      \"uProjection\",\n      \"uModelView\",\n    ];\n\n    for (const name of uniformNames) {\n      this.uniforms[name] = this.gl.getUniformLocation(this.program, name);\n    }\n\n    // Get attribute locations\n    this.attributes.position = this.gl.getAttribLocation(\n      this.program,\n      \"position\"\n    );\n    this.attributes.texCoord = this.gl.getAttribLocation(\n      this.program,\n      \"texCoord\"\n    );\n  }\n\n  private setupGeometry(): void {\n    if (!this.gl) return;\n\n    // Create quad geometry\n    const positions = new Float32Array([\n      -1,\n      -1, // bottom-left\n      1,\n      -1, // bottom-right\n      -1,\n      1, // top-left\n      1,\n      1, // top-right\n    ]);\n\n    const texCoords = new Float32Array([\n      0,\n      0, // bottom-left\n      1,\n      0, // bottom-right\n      0,\n      1, // top-left\n      1,\n      1, // top-right\n    ]);\n\n    // Create and bind vertex buffer\n    const positionBuffer = this.gl.createBuffer();\n    this.gl.bindBuffer(this.gl.ARRAY_BUFFER, positionBuffer);\n    this.gl.bufferData(this.gl.ARRAY_BUFFER, positions, this.gl.STATIC_DRAW);\n    this.gl.enableVertexAttribArray(this.attributes.position);\n    this.gl.vertexAttribPointer(\n      this.attributes.position,\n      2,\n      this.gl.FLOAT,\n      false,\n      0,\n      0\n    );\n\n    // Create and bind texture coordinate buffer\n    const texCoordBuffer = this.gl.createBuffer();\n    this.gl.bindBuffer(this.gl.ARRAY_BUFFER, texCoordBuffer);\n    this.gl.bufferData(this.gl.ARRAY_BUFFER, texCoords, this.gl.STATIC_DRAW);\n    this.gl.enableVertexAttribArray(this.attributes.texCoord);\n    this.gl.vertexAttribPointer(\n      this.attributes.texCoord,\n      2,\n      this.gl.FLOAT,\n      false,\n      0,\n      0\n    );\n  }\n\n  private updateUniforms(params: {\n    ior: number;\n    thickness: number;\n    sheen: number;\n    tilt: { x: number; y: number };\n    enableRefraction: boolean;\n    enableReflection: boolean;\n    enableParallax: boolean;\n    time: number;\n  }): void {\n    if (!this.gl || !this.canvas) return;\n\n    // Update scalar uniforms\n    if (this.uniforms.uIOR) {\n      this.gl.uniform1f(this.uniforms.uIOR, params.ior);\n    }\n    if (this.uniforms.uThickness) {\n      this.gl.uniform1f(this.uniforms.uThickness, params.thickness);\n    }\n    if (this.uniforms.uSheen) {\n      this.gl.uniform1f(this.uniforms.uSheen, params.sheen);\n    }\n    if (this.uniforms.uTime) {\n      this.gl.uniform1f(this.uniforms.uTime, params.time);\n    }\n\n    // Update vector uniforms\n    if (this.uniforms.uResolution) {\n      this.gl.uniform2f(\n        this.uniforms.uResolution,\n        this.canvas.width,\n        this.canvas.height\n      );\n    }\n    if (this.uniforms.uTilt) {\n      this.gl.uniform2f(this.uniforms.uTilt, params.tilt.x, params.tilt.y);\n    }\n\n    // Update boolean uniforms\n    if (this.uniforms.uEnableRefraction) {\n      this.gl.uniform1i(\n        this.uniforms.uEnableRefraction,\n        params.enableRefraction ? 1 : 0\n      );\n    }\n    if (this.uniforms.uEnableReflection) {\n      this.gl.uniform1i(\n        this.uniforms.uEnableReflection,\n        params.enableReflection ? 1 : 0\n      );\n    }\n    if (this.uniforms.uEnableParallax) {\n      this.gl.uniform1i(\n        this.uniforms.uEnableParallax,\n        params.enableParallax ? 1 : 0\n      );\n    }\n\n    // Bind backdrop texture\n    if (this.uniforms.uBackdropTexture && this.backdropTexture) {\n      this.gl.activeTexture(this.gl.TEXTURE0);\n      this.gl.bindTexture(this.gl.TEXTURE_2D, this.backdropTexture);\n      this.gl.uniform1i(this.uniforms.uBackdropTexture, 0);\n    }\n  }\n\n  private async captureElementBackdrop(\n    element: HTMLElement\n  ): Promise<HTMLCanvasElement | null> {\n    try {\n      // In a real implementation, this would use various techniques:\n      // - html2canvas for DOM elements\n      // - OffscreenCanvas for better performance\n      // - canvas.transferControlToOffscreen for worker threads\n\n      // For now, create a simple placeholder\n      const canvas = document.createElement(\"canvas\");\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return null;\n\n      canvas.width = element.clientWidth || 256;\n      canvas.height = element.clientHeight || 256;\n\n      // Create gradient placeholder that simulates backdrop\n      const gradient = ctx.createLinearGradient(\n        0,\n        0,\n        canvas.width,\n        canvas.height\n      );\n      gradient.addColorStop(0, \"#4f46e5\");\n      gradient.addColorStop(0.5, \"#7c3aed\");\n      gradient.addColorStop(1, \"#ec4899\");\n\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n      return canvas;\n    } catch {\n      return null;\n    }\n  }\n}\n\n/**\n * React component wrapper for GPU-accelerated Liquid Glass\n */\nexport interface LiquidGlassGPUProps {\n  material?: LiquidGlassMaterial;\n  variant?: MaterialVariant;\n  ior?: number;\n  thickness?: number;\n  sheen?: number;\n  enableRefraction?: boolean;\n  enableReflection?: boolean;\n  enableParallax?: boolean;\n  adaptToMotion?: boolean;\n  className?: string;\n  children?: React.ReactNode;\n  onFallback?: () => void;\n}\n\nexport const LiquidGlassGPURenderer: React.FC<LiquidGlassGPUProps> = ({\n  material = \"liquid\",\n  variant = \"regular\",\n  ior = LIQUID_GLASS.material.ior.liquid,\n  thickness = LIQUID_GLASS.material.thickness.medium,\n  sheen = LIQUID_GLASS.material.sheen.subtle,\n  enableRefraction = true,\n  enableReflection = true,\n  enableParallax = false,\n  adaptToMotion = true,\n  className,\n  children,\n  onFallback,\n}) => {\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const gpuRef = useRef<LiquidGlassGPUDriver | null>(null);\n  const [isGPUSupported, setIsGPUSupported] = useState(false);\n  const [deviceTilt, setDeviceTilt] = useState({ x: 0, y: 0 });\n  const startTimeRef = useRef(Date.now());\n  const lastBackdropUpdateRef = useRef(0);\n  const backdropUpdateInFlightRef = useRef(false);\n\n  // Initialize GPU renderer\n  useEffect(() => {\n    const initializeGPU = async () => {\n      if (!canvasRef.current) return;\n\n      const isSupported = LiquidGlassGPUDriver.isSupported();\n      setIsGPUSupported(isSupported);\n\n      if (!isSupported) {\n        onFallback?.();\n        return;\n      }\n\n      gpuRef.current = new LiquidGlassGPUDriver();\n      const success = await gpuRef.current.initialize(canvasRef.current);\n\n      if (!success) {\n        setIsGPUSupported(false);\n        onFallback?.();\n      }\n    };\n\n    initializeGPU();\n\n    return () => {\n      gpuRef.current?.dispose();\n    };\n  }, [onFallback]);\n\n  // Device motion tracking\n  useEffect(() => {\n    if (!adaptToMotion || !isGPUSupported) return;\n\n    const handleOrientation = (event: DeviceOrientationEvent) => {\n      if (event.beta !== null && event.gamma !== null) {\n        const sensitivity = LIQUID_GLASS.motionFluency.tilt.sensitivity;\n        setDeviceTilt({\n          x: Math.max(-1, Math.min(1, event.gamma * sensitivity)),\n          y: Math.max(-1, Math.min(1, event.beta * sensitivity)),\n        });\n      }\n    };\n\n    if (typeof DeviceOrientationEvent !== \"undefined\") {\n      window.addEventListener(\"deviceorientation\", handleOrientation);\n      return () =>\n        window.removeEventListener(\"deviceorientation\", handleOrientation);\n    }\n  }, [adaptToMotion, isGPUSupported]);\n\n  // Animation loop\n  useEffect(() => {\n    if (!isGPUSupported || !gpuRef.current) return;\n\n    let animationId: number;\n\n    const animate = () => {\n      if (gpuRef.current && canvasRef.current) {\n        const time = (Date.now() - startTimeRef.current) / 1000;\n\n        gpuRef.current.render({\n          ior,\n          thickness,\n          sheen,\n          tilt: deviceTilt,\n          enableRefraction,\n          enableReflection,\n          enableParallax,\n          time,\n        });\n\n        // Texture capture performs a CPU readback; throttle it outside the render cadence.\n        if (\n          containerRef.current &&\n          time - lastBackdropUpdateRef.current >= 1 &&\n          !backdropUpdateInFlightRef.current\n        ) {\n          lastBackdropUpdateRef.current = time;\n          backdropUpdateInFlightRef.current = true;\n          void gpuRef.current\n            .updateBackdrop(containerRef.current)\n            .finally(() => {\n              backdropUpdateInFlightRef.current = false;\n            });\n        }\n      }\n\n      animationId = requestAnimationFrame(animate);\n    };\n\n    animate();\n\n    return () => {\n      if (animationId) {\n        cancelAnimationFrame(animationId);\n      }\n    };\n  }, [\n    isGPUSupported,\n    ior,\n    thickness,\n    sheen,\n    deviceTilt,\n    enableRefraction,\n    enableReflection,\n    enableParallax,\n  ]);\n\n  // Resize canvas to match container\n  useEffect(() => {\n    if (!canvasRef.current || !containerRef.current) return;\n\n    const resizeCanvas = () => {\n      const canvas = canvasRef.current!;\n      const container = containerRef.current!;\n      const rect = container.getBoundingClientRect();\n\n      const dpr = window.devicePixelRatio || 1;\n      canvas.width = rect.width * dpr;\n      canvas.height = rect.height * dpr;\n      canvas.style.width = `${rect.width}px`;\n      canvas.style.height = `${rect.height}px`;\n    };\n\n    resizeCanvas();\n    window.addEventListener(\"resize\", resizeCanvas);\n\n    return () => window.removeEventListener(\"resize\", resizeCanvas);\n  }, []);\n\n  if (!isGPUSupported) {\n    // Fallback to CSS-based rendering\n    return (\n      <div\n        data-glass-component\n        ref={containerRef}\n        className={cn(\n          \"glass-surface-primary glass-blur-backdrop glass-relative glass-overflow-hidden\",\n          className\n        )}\n        style={{\n          // Use createGlassStyle() instead,\n          // Use createGlassStyle() instead,\n          background: `linear-gradient(135deg, rgba(255,255,255,${0.15 + sheen * 0.05}) 0%, rgba(255,255,255,${0.05 + sheen * 0.02}) 100%)`,\n          border: `1px solid rgba(255,255,255,${0.3 + sheen * 0.1})`,\n        }}\n      >\n        {children}\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        \"glass-surface-primary glass-relative glass-overflow-hidden\",\n        className\n      )}\n    >\n      <canvas\n        ref={canvasRef}\n        className={cn(\n          \"glass-absolute glass-inset-0 glass-w-full glass-h-full glass-pointer-events-none\"\n        )}\n        style={{ zIndex: 1 }}\n      />\n      <div className={cn(\"glass-relative glass-z-10\")}>{children}</div>\n    </div>\n  );\n};\n\nexport const LiquidGlassGPU = LiquidGlassGPURenderer;\nexport default LiquidGlassGPURenderer;\n", "\"use client\";\n/**\n * AuraGlass Parallax Glass Layers\n * Multi-depth glass layers with mouse/scroll parallax effects\n */\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ninterface ParallaxLayer {\n  depth: number; // 0-10, where 0 is closest\n  content: React.ReactNode;\n  className?: string;\n  blur?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n  opacity?: number;\n  scale?: number;\n  rotateX?: number;\n  rotateY?: number;\n  offset?: { x: number; y: number };\n}\n\nexport interface GlassParallaxLayersProps {\n  layers: ParallaxLayer[];\n  className?: string;\n  mouseIntensity?: number; // 0-1\n  scrollIntensity?: number; // 0-1\n  perspective?: number;\n  autoRotate?: boolean;\n  rotateSpeed?: number;\n  interactive?: boolean;\n  debug?: boolean;\n  /** Accessible label for the parallax container */\n  \"aria-label\"?: string;\n  /** Reduced motion preference */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassParallaxLayers = forwardRef<\n  HTMLDivElement,\n  GlassParallaxLayersProps\n>(\n  (\n    {\n      layers,\n      className,\n      mouseIntensity = 0.5,\n      scrollIntensity = 0.3,\n      perspective = 1200,\n      autoRotate = false,\n      rotateSpeed = 0.5,\n      interactive = true,\n      debug = false,\n      \"aria-label\": ariaLabel,\n      respectMotionPreference = true,\n    },\n    ref\n  ) => {\n    const containerRef = useRef<HTMLDivElement | null>(null);\n    const [isHovered, setIsHovered] = useState(false);\n    const componentId = useA11yId(\"parallax-layers\");\n    const prefersReducedMotion = useReducedMotion();\n    const setContainerRefs = useCallback(\n      (node: HTMLDivElement | null) => {\n        containerRef.current = node;\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else if (ref) {\n          (\n            ref as unknown as React.MutableRefObject<HTMLDivElement | null>\n          ).current = node;\n        }\n      },\n      [ref]\n    );\n\n    // Reduced motion is handled by useReducedMotion hook\n\n    // Motion values for mouse position\n    const mouseX = useMotionValue(0);\n    const mouseY = useMotionValue(0);\n\n    // Smooth spring animation\n    const springConfig = { damping: 25, stiffness: 150 };\n    const smoothMouseX = useSpring(mouseX, springConfig);\n    const smoothMouseY = useSpring(mouseY, springConfig);\n\n    // Scroll progress, scoped locally so Framer does not warn while refs settle.\n    const scrollYProgress = useMotionValue(0);\n\n    useEffect(() => {\n      if (scrollIntensity === 0 || typeof window === \"undefined\") return;\n\n      let frame = 0;\n      const updateScrollProgress = () => {\n        if (frame) return;\n        frame = window.requestAnimationFrame(() => {\n          frame = 0;\n          const element = containerRef.current;\n          if (!element) return;\n\n          const rect = element.getBoundingClientRect();\n          const viewportHeight =\n            window.innerHeight || document.documentElement.clientHeight || 1;\n          const total = viewportHeight + rect.height;\n          const progress = (viewportHeight - rect.top) / total;\n          scrollYProgress.set(Math.max(0, Math.min(1, progress)));\n        });\n      };\n\n      updateScrollProgress();\n      window.addEventListener(\"scroll\", updateScrollProgress, {\n        passive: true,\n      });\n      window.addEventListener(\"resize\", updateScrollProgress);\n\n      return () => {\n        if (frame) {\n          window.cancelAnimationFrame(frame);\n        }\n        window.removeEventListener(\"scroll\", updateScrollProgress);\n        window.removeEventListener(\"resize\", updateScrollProgress);\n      };\n    }, [scrollIntensity, scrollYProgress]);\n\n    // Auto rotation\n    const [rotation, setRotation] = useState(0);\n\n    useEffect(() => {\n      if (!autoRotate) return;\n\n      const interval = setInterval(() => {\n        setRotation((prev: any) => prev + rotateSpeed);\n      }, 16);\n\n      return () => clearInterval(interval);\n    }, [autoRotate, rotateSpeed]);\n\n    // Handle mouse movement\n    const handleMouseMove = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        if (!interactive || !containerRef.current) return;\n\n        const rect = containerRef.current.getBoundingClientRect();\n        const x = (e.clientX - rect.left) / rect.width - 0.5;\n        const y = (e.clientY - rect.top) / rect.height - 0.5;\n\n        mouseX.set(x);\n        mouseY.set(y);\n      },\n      [interactive, mouseX, mouseY]\n    );\n\n    const handleMouseLeave = useCallback(() => {\n      mouseX.set(0);\n      mouseY.set(0);\n      setIsHovered(false);\n    }, [mouseX, mouseY]);\n\n    const handleMouseEnter = useCallback(() => {\n      setIsHovered(true);\n    }, []);\n\n    // Sort layers by depth (furthest first for proper stacking)\n    const sortedLayers = [...layers].sort((a, b) => b.depth - a.depth);\n\n    return (\n      <div\n        ref={setContainerRefs}\n        id={componentId}\n        className={cn(\n          \"glass-relative glass-overflow-hidden\",\n          \"glass-transform-gpu glass-will-change-transform\",\n          className\n        )}\n        style={{\n          position: \"relative\",\n          overflow: \"hidden\",\n          width: \"100%\",\n          height: \"100%\",\n          perspective: prefersReducedMotion ? \"none\" : `${perspective}px`,\n          transformStyle: prefersReducedMotion ? \"flat\" : \"preserve-3d\",\n        }}\n        onMouseMove={prefersReducedMotion ? undefined : handleMouseMove}\n        onMouseEnter={prefersReducedMotion ? undefined : handleMouseEnter}\n        onMouseLeave={prefersReducedMotion ? undefined : handleMouseLeave}\n        role=\"presentation\"\n        aria-label={ariaLabel || \"Parallax layers with interactive effects\"}\n        aria-hidden={!ariaLabel}\n      >\n        {sortedLayers.map((layer, index) => {\n          const depthFactor = layer.depth / 10;\n          const parallaxFactor = 1 - depthFactor;\n\n          // Calculate transforms based on depth\n          const xTransform = useTransform(\n            smoothMouseX,\n            [-0.5, 0.5],\n            [\n              -50 * parallaxFactor * mouseIntensity,\n              50 * parallaxFactor * mouseIntensity,\n            ]\n          );\n\n          const yTransform = useTransform(\n            smoothMouseY,\n            [-0.5, 0.5],\n            [\n              -30 * parallaxFactor * mouseIntensity,\n              30 * parallaxFactor * mouseIntensity,\n            ]\n          );\n\n          const scrollY = useTransform(\n            scrollYProgress,\n            [0, 1],\n            [\n              100 * depthFactor * scrollIntensity,\n              -100 * depthFactor * scrollIntensity,\n            ]\n          );\n\n          const rotateXTransform = useTransform(\n            smoothMouseY,\n            [-0.5, 0.5],\n            [\n              15 * parallaxFactor * mouseIntensity,\n              -15 * parallaxFactor * mouseIntensity,\n            ]\n          );\n\n          const rotateYTransform = useTransform(\n            smoothMouseX,\n            [-0.5, 0.5],\n            [\n              -15 * parallaxFactor * mouseIntensity,\n              15 * parallaxFactor * mouseIntensity,\n            ]\n          );\n\n          // Blur based on depth\n          const blurAmount = Math.round(depthFactor * 4);\n          const autoBlur =\n            blurAmount === 0\n              ? \"none\"\n              : blurAmount === 1\n                ? \"subtle\"\n                : blurAmount === 2\n                  ? \"medium\"\n                  : blurAmount === 3\n                    ? \"strong\"\n                    : \"intense\";\n\n          // Map layer blur values to OptimizedGlass compatible values\n          const mapBlurValue = (\n            blur: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | undefined\n          ):\n            | \"none\"\n            | \"subtle\"\n            | \"medium\"\n            | \"strong\"\n            | \"intense\"\n            | undefined => {\n            switch (blur) {\n              case \"sm\":\n                return \"subtle\";\n              case \"md\":\n                return \"medium\";\n              case \"lg\":\n                return \"strong\";\n              case \"xl\":\n                return \"intense\";\n              default:\n                return blur;\n            }\n          };\n\n          const finalBlur = mapBlurValue(layer.blur) || autoBlur;\n\n          const layerStyle = {\n            x: prefersReducedMotion ? 0 : xTransform,\n            y: prefersReducedMotion ? 0 : scrollY,\n            rotateX: prefersReducedMotion ? 0 : rotateXTransform,\n            rotateY: prefersReducedMotion\n              ? 0\n              : autoRotate\n                ? rotation\n                : rotateYTransform,\n            z: prefersReducedMotion ? 0 : layer.depth * 50,\n            scale: layer.scale || 1 - depthFactor * 0.1,\n            opacity: layer.opacity || 1 - depthFactor * 0.2,\n            transformStyle: prefersReducedMotion ? \"flat\" : \"preserve-3d\",\n          } as any;\n\n          return (\n            <motion.div\n              key={`layer-${index}`}\n              initial={{ opacity: 0, scale: prefersReducedMotion ? 1 : 0.9 }}\n              animate={{\n                opacity: layer.opacity || 1 - depthFactor * 0.2,\n                scale: layer.scale || 1 - depthFactor * 0.1,\n              }}\n              transition={{\n                duration: prefersReducedMotion\n                  ? 0\n                  : ANIMATION.DURATION.slower / 1000,\n                delay: prefersReducedMotion ? 0 : index * 0.1,\n              }}\n              style={{ ...layerStyle }}\n            >\n              <OptimizedGlass\n                intent=\"neutral\"\n                elevation={isHovered ? \"level3\" : \"level1\"}\n                intensity=\"medium\"\n                glassBlur={finalBlur}\n                depth={Math.min(layer.depth, 5)}\n                className={cn(\n                  \"glass-absolute glass-inset-0\",\n                  \"glass-transition-all\",\n                  { transitionDuration: \"var(--glass-motion-duration-normal)\" },\n                  layer.className\n                )}\n              >\n                <ContrastGuard>{layer.content}</ContrastGuard>\n\n                {debug && (\n                  <ContrastGuard>\n                    <div className=\"glass-absolute glass-top-2 glass-left-2 glass-surface-dark/20 glass-backdrop-blur-sm glass-p-2 glass-radius-sm glass-text-xs glass-text-primary-glass-opacity-90\">\n                      Layer {index + 1} | Depth: {layer.depth}\n                    </div>\n                  </ContrastGuard>\n                )}\n              </OptimizedGlass>\n            </motion.div>\n          );\n        })}\n\n        {/* Interactive indicator */}\n        {interactive && !prefersReducedMotion && (\n          <motion.div\n            className=\"glass-absolute glass-bottom-4 glass-right-4 glass-text-primary-glass-opacity-60 glass-text-xs glass-surface-dark/20 glass-backdrop-blur-sm glass-p-2 glass-radius-md\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: isHovered ? 1 : 0.5 }}\n            role=\"status\"\n            aria-live=\"polite\"\n          >\n            <ContrastGuard>\n              {isHovered ? \"Move mouse to parallax\" : \"Hover to interact\"}\n            </ContrastGuard>\n          </motion.div>\n        )}\n      </div>\n    );\n  }\n);\n\n// Preset layer configurations\nexport const parallaxPresets = {\n  hero: [\n    { depth: 0, blur: \"none\", content: null }, // Foreground\n    { depth: 3, blur: \"sm\", content: null }, // Midground\n    { depth: 6, blur: \"md\", content: null }, // Background\n    { depth: 10, blur: \"lg\", content: null }, // Far background\n  ],\n  card: [\n    { depth: 0, blur: \"none\", scale: 1.05, content: null },\n    { depth: 5, blur: \"sm\", scale: 1, content: null },\n    { depth: 10, blur: \"md\", scale: 0.95, content: null },\n  ],\n  depth: [\n    { depth: 0, content: null },\n    { depth: 2, content: null },\n    { depth: 4, content: null },\n    { depth: 6, content: null },\n    { depth: 8, content: null },\n    { depth: 10, content: null },\n  ],\n};\n\n// Helper hook for dynamic layer creation\nexport function useParallaxLayers(\n  count: number = 3,\n  depthRange: [number, number] = [0, 10]\n) {\n  return Array.from({ length: count }, (_, i) => ({\n    depth: depthRange[0] + (depthRange[1] - depthRange[0]) * (i / (count - 1)),\n    content: null,\n    blur: \"none\" as const,\n  }));\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\n/**\n * AuraGlass Ambient Mesh Gradients\n * Animated mesh gradients with glass overlay effects\n */\n\nimport React, { useRef, useEffect, useMemo, forwardRef } from \"react\";\nimport { motion, useAnimationFrame } from \"framer-motion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\n\ninterface MeshPoint {\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  color: string;\n  radius: number;\n}\n\ninterface GlassMeshGradientProps {\n  className?: string;\n  style?: React.CSSProperties;\n  colors?: string[];\n  points?: number;\n  speed?: number;\n  blur?: number;\n  opacity?: number;\n  animate?: boolean;\n  interactive?: boolean;\n  complexity?: \"simple\" | \"moderate\" | \"complex\";\n  variant?: \"ambient\" | \"vibrant\" | \"subtle\" | \"dark\";\n  respectMotionPreference?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  preview?: boolean;\n  height?: number | string;\n  maxHeight?: number | string;\n  \"aria-label\"?: string;\n}\n\nconst toCanvasRgba = (color: string, alpha: number) => {\n  if (color.startsWith(\"#\")) {\n    const hex = color.replace(\"#\", \"\");\n    const fullHex =\n      hex.length === 3\n        ? hex\n            .split(\"\")\n            .map((part) => part + part)\n            .join(\"\")\n        : hex;\n    const value = parseInt(fullHex.slice(0, 6), 16);\n    const red = (value >> 16) & 255;\n    const green = (value >> 8) & 255;\n    const blue = value & 255;\n    return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n  }\n\n  if (color.startsWith(\"rgb(\")) {\n    return color.replace(\"rgb(\", \"rgba(\").replace(\")\", `, ${alpha})`);\n  }\n\n  return `rgba(14, 165, 233, ${alpha})`;\n};\n\nexport function GlassMeshGradient({\n  className,\n  colors = [\n    COLORS.semantic.primary,\n    COLORS.semantic.primary,\n    COLORS.semantic.primary,\n    COLORS.semantic.warning,\n  ],\n  points = 4,\n  speed = 0.5,\n  blur = 100,\n  opacity = 0.8,\n  animate = true,\n  interactive = false,\n  complexity = \"moderate\",\n  variant = \"ambient\",\n  respectMotionPreference = true,\n  compact = false,\n  contained = false,\n  preview = false,\n  height,\n  maxHeight,\n  style,\n  \"aria-label\": ariaLabel,\n}: GlassMeshGradientProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate =\n    animate && (respectMotionPreference ? !prefersReducedMotion : true);\n  const isBounded = compact || contained || preview;\n  const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const meshPoints = useRef<MeshPoint[]>([]);\n  const mousePos = useRef({ x: 0, y: 0 });\n  const frame = useRef(0);\n\n  // Initialize mesh points\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const numPoints =\n      complexity === \"simple\"\n        ? 3\n        : complexity === \"moderate\"\n          ? points\n          : points * 2;\n\n    meshPoints.current = Array.from({ length: numPoints }, (_, i) => ({\n      x: Math.random() * canvas.width,\n      y: Math.random() * canvas.height,\n      vx: (Math.random() - 0.5) * speed,\n      vy: (Math.random() - 0.5) * speed,\n      color: colors[i % colors.length],\n      radius: 100 + Math.random() * 200,\n    }));\n  }, [colors, points, speed, complexity]);\n\n  // Handle mouse interaction\n  useEffect(() => {\n    if (!interactive) return;\n\n    const handleMouseMove = (e: MouseEvent) => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const rect = canvas.getBoundingClientRect();\n      mousePos.current = {\n        x: e.clientX - rect.left,\n        y: e.clientY - rect.top,\n      };\n    };\n\n    window.addEventListener(\"mousemove\", handleMouseMove);\n    return () => window.removeEventListener(\"mousemove\", handleMouseMove);\n  }, [interactive]);\n\n  // Resize handler\n  useEffect(() => {\n    const handleResize = () => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const parent = canvas.parentElement;\n      if (!parent) return;\n\n      canvas.width = parent.clientWidth;\n      canvas.height = parent.clientHeight;\n    };\n\n    handleResize();\n    window.addEventListener(\"resize\", handleResize);\n    return () => window.removeEventListener(\"resize\", handleResize);\n  }, []);\n\n  // Animation loop\n  useAnimationFrame((time) => {\n    if (!shouldAnimate) return;\n\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext(\"2d\");\n    if (!canvas || !ctx) return;\n\n    frame.current += 1;\n\n    // Clear canvas\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n    // Update and draw mesh points\n    meshPoints.current.forEach((point, i) => {\n      // Update position\n      if (shouldAnimate) {\n        point.x += point.vx;\n        point.y += point.vy;\n\n        // Bounce off walls\n        if (point.x < 0 || point.x > canvas.width) point.vx *= -1;\n        if (point.y < 0 || point.y > canvas.height) point.vy *= -1;\n\n        // Keep in bounds\n        point.x = Math.max(0, Math.min(canvas.width, point.x));\n        point.y = Math.max(0, Math.min(canvas.height, point.y));\n\n        // Interactive mouse repulsion\n        if (interactive) {\n          const dx = mousePos.current.x - point.x;\n          const dy = mousePos.current.y - point.y;\n          const dist = Math.sqrt(dx * dx + dy * dy);\n\n          if (dist < 150) {\n            const force = (150 - dist) / 150;\n            point.vx -= (dx / dist) * force * 0.5;\n            point.vy -= (dy / dist) * force * 0.5;\n          }\n        }\n\n        // Add sinusoidal movement for organic feel\n        point.x += Math.sin(frame.current * 0.01 + i) * 0.3;\n        point.y += Math.cos(frame.current * 0.01 + i) * 0.3;\n      }\n\n      // Create gradient\n      const gradient = ctx.createRadialGradient(\n        point.x,\n        point.y,\n        0,\n        point.x,\n        point.y,\n        point.radius\n      );\n\n      const color = point.color;\n      gradient.addColorStop(0, toCanvasRgba(color, opacity));\n      gradient.addColorStop(0.5, toCanvasRgba(color, opacity * 0.5));\n      gradient.addColorStop(1, toCanvasRgba(color, 0));\n\n      // Draw gradient\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n    });\n\n    // Apply additional effects based on variant\n    if (variant === \"vibrant\") {\n      ctx.globalCompositeOperation = \"screen\";\n    } else if (variant === \"dark\") {\n      ctx.globalCompositeOperation = \"multiply\";\n    } else if (variant === \"subtle\") {\n      ctx.globalAlpha = 0.5;\n    }\n  });\n\n  // Generate CSS filter based on variant\n  const filterStyle = useMemo(() => {\n    switch (variant) {\n      case \"vibrant\":\n        return \"saturate(1.5) brightness(1.2)\";\n      case \"subtle\":\n        return \"saturate(0.8) brightness(0.9)\";\n      case \"dark\":\n        return \"saturate(1.2) brightness(0.7) contrast(1.2)\";\n      default:\n        return \"saturate(1) brightness(1)\";\n    }\n  }, [variant]);\n\n  return (\n    <div\n      className={cn(\"relative overflow-hidden\", className)}\n      style={{\n        width: \"100%\",\n        minHeight: resolvedHeight ?? (isBounded ? 220 : undefined),\n        maxHeight: resolvedMaxHeight ?? (isBounded ? 240 : undefined),\n        ...(style ?? {}),\n      }}\n      aria-label={ariaLabel}\n    >\n      <canvas\n        ref={canvasRef}\n        className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full\"\n        style={{\n          filter: `blur(${blur}px) ${filterStyle}`,\n          opacity,\n        }}\n      />\n      {shouldAnimate ? (\n        <>\n          <div\n            aria-hidden=\"true\"\n            className=\"ag-glass-mesh-gradient-motion-layer\"\n            style={{\n              position: \"absolute\",\n              inset: \"-30%\",\n              filter: `blur(${Math.max(12, Math.round(blur * 0.28))}px)`,\n              opacity: Math.min(0.78, Math.max(0.38, opacity * 0.68)),\n              mixBlendMode: variant === \"dark\" ? \"screen\" : \"plus-lighter\",\n              pointerEvents: \"none\",\n              animation:\n                \"ag-glass-mesh-gradient-motion 2.8s ease-in-out infinite alternate\",\n            }}\n          />\n          <style>{`\n            .ag-glass-mesh-gradient-motion-layer {\n              background:\n                radial-gradient(circle at 22% 32%, rgba(124,211,255,0.72), transparent 28%),\n                radial-gradient(circle at 78% 42%, rgba(216,111,255,0.64), transparent 32%),\n                radial-gradient(circle at 48% 76%, rgba(99,255,218,0.48), transparent 30%);\n            }\n            @keyframes ag-glass-mesh-gradient-motion {\n              0% {\n                transform: translate3d(-8%, -4%, 0) rotate(-7deg) scale(0.96);\n                opacity: ${Math.min(0.72, Math.max(0.34, opacity * 0.56))};\n              }\n              50% {\n                transform: translate3d(7%, 5%, 0) rotate(8deg) scale(1.06);\n                opacity: ${Math.min(0.9, Math.max(0.48, opacity * 0.82))};\n              }\n              100% {\n                transform: translate3d(2%, -7%, 0) rotate(-2deg) scale(1);\n                opacity: ${Math.min(0.8, Math.max(0.42, opacity * 0.68))};\n              }\n            }\n          `}</style>\n        </>\n      ) : null}\n    </div>\n  );\n}\n\n// Animated mesh gradient background component\nexport const GlassMeshBackground = forwardRef<\n  HTMLDivElement,\n  GlassMeshGradientProps & { children?: React.ReactNode }\n>(function GlassMeshBackground(\n  { children, className, \"aria-label\": ariaLabel, ...meshProps },\n  ref\n) {\n  const backgroundId = useA11yId(\"mesh-background\");\n\n  return (\n    <OptimizedGlass\n      ref={ref}\n      intensity=\"subtle\"\n      blur=\"medium\"\n      className={cn(\"relative\", className)}\n      id={backgroundId}\n      role=\"presentation\"\n      aria-label={ariaLabel || \"Mesh gradient background\"}\n      aria-hidden=\"true\"\n    >\n      <GlassMeshGradient\n        className=\"glass-absolute glass-inset-0\"\n        {...meshProps}\n      />\n      <div className=\"glass-relative glass-z-10\">\n        <ContrastGuard>{children}</ContrastGuard>\n      </div>\n    </OptimizedGlass>\n  );\n});\n\n// Preset configurations\nexport const meshGradientPresets = {\n  ocean: {\n    colors: [\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n    ],\n    variant: \"ambient\" as const,\n    speed: 0.3,\n    blur: 120,\n  },\n  sunset: {\n    colors: [\n      COLORS.semantic.warning,\n      COLORS.semantic.warning,\n      COLORS.semantic.primary,\n      COLORS.semantic.error,\n    ],\n    variant: \"vibrant\" as const,\n    speed: 0.4,\n    blur: 100,\n  },\n  aurora: {\n    colors: [\n      COLORS.semantic.success,\n      COLORS.semantic.success,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n    ],\n    variant: \"ambient\" as const,\n    speed: 0.2,\n    blur: 150,\n    points: 5,\n  },\n  galaxy: {\n    colors: [\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n      COLORS.semantic.primary,\n    ],\n    variant: \"dark\" as const,\n    speed: 0.15,\n    blur: 200,\n    complexity: \"complex\" as const,\n  },\n  minimal: {\n    colors: [\n      \"var(--glass-gray-200)\",\n      \"var(--glass-gray-300)\",\n      \"var(--glass-gray-400)\",\n    ],\n    variant: \"subtle\" as const,\n    speed: 0.1,\n    blur: 150,\n    complexity: \"simple\" as const,\n  },\n};\n\n// Hook for dynamic color generation\nexport function useMeshGradientColors(\n  baseColor: string,\n  scheme: \"analogous\" | \"complementary\" | \"triadic\" = \"analogous\"\n): string[] {\n  return useMemo(() => {\n    // Parse base color (simplified - would need proper color parsing)\n    const colors: string[] = [baseColor];\n\n    // Generate color scheme (simplified logic)\n    switch (scheme) {\n      case \"analogous\":\n        colors.push(\n          adjustHue(baseColor, 30),\n          adjustHue(baseColor, -30),\n          adjustHue(baseColor, 60)\n        );\n        break;\n      case \"complementary\":\n        colors.push(\n          adjustHue(baseColor, 180),\n          adjustHue(baseColor, 150),\n          adjustHue(baseColor, 210)\n        );\n        break;\n      case \"triadic\":\n        colors.push(adjustHue(baseColor, 120), adjustHue(baseColor, 240));\n        break;\n    }\n\n    return colors;\n  }, [baseColor, scheme]);\n}\n\n// Helper function for hue adjustment (simplified)\nfunction adjustHue(color: string, degrees: number): string {\n  // This would need proper HSL conversion\n  // For now, return variations\n  return color + degrees.toString(16).slice(-2);\n}\n", "\"use client\";\n/**\n * AuraGlass Glassmorphic Particles System\n * Interactive particle effects with glass aesthetics\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useCallback,\n  useState,\n  forwardRef,\n} from \"react\";\nimport { motion, useAnimationFrame } from \"framer-motion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ninterface Particle {\n  id: number;\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  size: number;\n  opacity: number;\n  hue: number;\n  life: number;\n  maxLife: number;\n  connections: number[];\n}\n\ninterface GlassParticlesProps {\n  className?: string;\n  style?: React.CSSProperties;\n  count?: number;\n  maxSize?: number;\n  minSize?: number;\n  speed?: number;\n  connectionDistance?: number;\n  mouseInteraction?: boolean;\n  mouseRadius?: number;\n  colorScheme?: \"monochrome\" | \"rainbow\" | \"gradient\" | \"custom\";\n  colors?: string[];\n  blur?: boolean;\n  glow?: boolean;\n  shape?: \"circle\" | \"square\" | \"triangle\" | \"star\";\n  behavior?: \"float\" | \"swarm\" | \"orbit\" | \"explode\" | \"gravity\";\n  emitRate?: number;\n  lifetime?: number;\n  /** Accessible label for the particle system */\n  \"aria-label\"?: string;\n  /** Reduced motion preference */\n  respectMotionPreference?: boolean;\n  /** Compact preview mode for constrained cards and docs examples. */\n  compact?: boolean;\n  /** Keep the particle field inside a bounded local viewport. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Optional viewport height. */\n  height?: number | string;\n  /** Optional maximum viewport height. */\n  maxHeight?: number | string;\n}\n\nexport const GlassParticles = forwardRef<HTMLDivElement, GlassParticlesProps>(\n  (\n    {\n      className,\n      count = 50,\n      maxSize = 8,\n      minSize = 2,\n      speed = 1,\n      connectionDistance = 100,\n      mouseInteraction = true,\n      mouseRadius = 150,\n      colorScheme = \"gradient\",\n      colors = [\n        \"rgba(125, 211, 252, 0.95)\",\n        \"rgba(56, 189, 248, 0.9)\",\n        \"rgba(139, 92, 246, 0.85)\",\n      ],\n      blur = true,\n      glow = true,\n      shape = \"circle\",\n      behavior = \"float\",\n      emitRate = 0,\n      lifetime = 0,\n      \"aria-label\": ariaLabel,\n      respectMotionPreference = true,\n      compact = false,\n      contained = false,\n      preview = false,\n      height,\n      maxHeight,\n      style,\n    },\n    ref\n  ) => {\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const particles = useRef<Particle[]>([]);\n    const mousePos = useRef({ x: -1000, y: -1000 });\n    const frame = useRef(0);\n    const lastEmit = useRef(0);\n    const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n    const componentId = useA11yId(\"glass-particles\");\n    const prefersReducedMotion = useReducedMotion();\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n    const isBounded = compact || contained || preview;\n    const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n    const resolvedMaxHeight =\n      typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n    // Initialize particles\n    const initParticles = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      particles.current = Array.from({ length: count }, (_, i) => ({\n        id: i,\n        x: Math.random() * canvas.width,\n        y: Math.random() * canvas.height,\n        vx: (Math.random() - 0.5) * speed,\n        vy: (Math.random() - 0.5) * speed,\n        size: minSize + Math.random() * (maxSize - minSize),\n        opacity: 0.3 + Math.random() * 0.7,\n        hue: Math.random() * 360,\n        life: lifetime > 0 ? Math.random() * lifetime : Infinity,\n        maxLife: lifetime,\n        connections: [],\n      }));\n    }, [count, maxSize, minSize, speed, lifetime]);\n\n    // Handle resize\n    useEffect(() => {\n      const handleResize = () => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const parent = canvas.parentElement;\n        if (!parent) return;\n\n        canvas.width = parent.clientWidth;\n        canvas.height = parent.clientHeight;\n        setDimensions({ width: canvas.width, height: canvas.height });\n\n        // Reinitialize particles on resize\n        initParticles();\n      };\n\n      handleResize();\n      window.addEventListener(\"resize\", handleResize);\n      return () => window.removeEventListener(\"resize\", handleResize);\n    }, [initParticles]);\n\n    // Mouse interaction\n    useEffect(() => {\n      if (!mouseInteraction) return;\n\n      const handleMouseMove = (e: MouseEvent) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        mousePos.current = {\n          x: e.clientX - rect.left,\n          y: e.clientY - rect.top,\n        };\n      };\n\n      const handleMouseLeave = () => {\n        mousePos.current = { x: -1000, y: -1000 };\n      };\n\n      window.addEventListener(\"mousemove\", handleMouseMove);\n      window.addEventListener(\"mouseleave\", handleMouseLeave);\n\n      return () => {\n        window.removeEventListener(\"mousemove\", handleMouseMove);\n        window.removeEventListener(\"mouseleave\", handleMouseLeave);\n      };\n    }, [mouseInteraction]);\n\n    // Draw particle shape\n    const drawParticle = useCallback(\n      (ctx: CanvasRenderingContext2D, particle: Particle, color: string) => {\n        ctx.save();\n        ctx.translate(particle.x, particle.y);\n\n        // Apply glow effect\n        if (glow) {\n          ctx.shadowBlur = particle.size * 2;\n          ctx.shadowColor = color;\n        }\n\n        const lifeAlpha = Number.isFinite(particle.maxLife)\n          ? Math.max(0, Math.min(1, particle.life / particle.maxLife))\n          : 1;\n\n        ctx.fillStyle = color;\n        ctx.globalAlpha = particle.opacity * lifeAlpha;\n\n        switch (shape) {\n          case \"circle\":\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n\n          case \"square\":\n            ctx.fillRect(\n              -particle.size,\n              -particle.size,\n              particle.size * 2,\n              particle.size * 2\n            );\n            break;\n\n          case \"triangle\":\n            ctx.beginPath();\n            ctx.moveTo(0, -particle.size);\n            ctx.lineTo(-particle.size, particle.size);\n            ctx.lineTo(particle.size, particle.size);\n            ctx.closePath();\n            ctx.fill();\n            break;\n\n          case \"star\":\n            ctx.beginPath();\n            for (let i = 0; i < 5; i++) {\n              const angle = ((i * 72 - 90) * Math.PI) / 180;\n              const x = Math.cos(angle) * particle.size;\n              const y = Math.sin(angle) * particle.size;\n              i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n\n              const innerAngle = ((i * 72 + 36 - 90) * Math.PI) / 180;\n              const innerX = Math.cos(innerAngle) * (particle.size / 2);\n              const innerY = Math.sin(innerAngle) * (particle.size / 2);\n              ctx.lineTo(innerX, innerY);\n            }\n            ctx.closePath();\n            ctx.fill();\n            break;\n        }\n\n        ctx.restore();\n      },\n      [shape, glow]\n    );\n\n    // Get particle color\n    const getParticleColor = useCallback(\n      (particle: Particle, index: number) => {\n        const resolveCanvasColor = (color: string, fallback: string) => {\n          if (!color || color.includes(\"var(\") || color.includes(\"hsl(var(\")) {\n            return fallback;\n          }\n          return color;\n        };\n\n        switch (colorScheme) {\n          case \"monochrome\":\n            return `hsla(199, 90%, 72%, ${particle.opacity})`;\n\n          case \"rainbow\":\n            return `hsla(${particle.hue}, 70%, 60%, ${particle.opacity})`;\n\n          case \"gradient\":\n            const colorIndex = Math.floor(\n              (index / particles.current.length) * colors.length\n            );\n            return resolveCanvasColor(\n              colors[Math.min(colorIndex, colors.length - 1)],\n              `hsla(${195 + colorIndex * 28}, 92%, 70%, ${particle.opacity})`\n            );\n\n          case \"custom\":\n            return resolveCanvasColor(\n              colors[index % colors.length],\n              `hsla(199, 92%, 70%, ${particle.opacity})`\n            );\n\n          default:\n            return `hsla(220, 70%, 60%, ${particle.opacity})`;\n        }\n      },\n      [colorScheme, colors]\n    );\n\n    // Update particle behavior\n    const updateParticle = useCallback(\n      (particle: Particle, canvas: HTMLCanvasElement) => {\n        switch (behavior) {\n          case \"float\":\n            particle.x += particle.vx;\n            particle.y += particle.vy;\n\n            // Add gentle floating motion\n            particle.y += Math.sin(frame.current * 0.01 + particle.id) * 0.2;\n            particle.x += Math.cos(frame.current * 0.01 + particle.id) * 0.1;\n            break;\n\n          case \"swarm\":\n            // Particles attract to center of mass\n            const centerX =\n              particles.current.reduce((sum, p) => sum + p.x, 0) /\n              particles.current.length;\n            const centerY =\n              particles.current.reduce((sum, p) => sum + p.y, 0) /\n              particles.current.length;\n\n            const toCenterX = (centerX - particle.x) * 0.0005;\n            const toCenterY = (centerY - particle.y) * 0.0005;\n\n            particle.vx += toCenterX;\n            particle.vy += toCenterY;\n            particle.x += particle.vx;\n            particle.y += particle.vy;\n\n            // Limit velocity\n            const maxVel = 2;\n            const vel = Math.sqrt(\n              particle.vx * particle.vx + particle.vy * particle.vy\n            );\n            if (vel > maxVel) {\n              particle.vx = (particle.vx / vel) * maxVel;\n              particle.vy = (particle.vy / vel) * maxVel;\n            }\n            break;\n\n          case \"orbit\":\n            const centerOX = canvas.width / 2;\n            const centerOY = canvas.height / 2;\n            const angle = Math.atan2(\n              particle.y - centerOY,\n              particle.x - centerOX\n            );\n            const radius = Math.sqrt(\n              Math.pow(particle.x - centerOX, 2) +\n                Math.pow(particle.y - centerOY, 2)\n            );\n\n            const newAngle = angle + 0.01 * speed;\n            particle.x = centerOX + Math.cos(newAngle) * radius;\n            particle.y = centerOY + Math.sin(newAngle) * radius;\n            break;\n\n          case \"explode\":\n            const explodeX = canvas.width / 2;\n            const explodeY = canvas.height / 2;\n            const dx = particle.x - explodeX;\n            const dy = particle.y - explodeY;\n            const dist = Math.sqrt(dx * dx + dy * dy);\n\n            if (dist > 1) {\n              particle.vx = (dx / dist) * speed * 2;\n              particle.vy = (dy / dist) * speed * 2;\n            }\n\n            particle.x += particle.vx;\n            particle.y += particle.vy;\n            particle.vx *= 0.98; // Decay\n            particle.vy *= 0.98;\n            break;\n\n          case \"gravity\":\n            particle.vy += 0.1; // Gravity\n            particle.x += particle.vx;\n            particle.y += particle.vy;\n\n            // Bounce off bottom\n            if (particle.y > canvas.height - particle.size) {\n              particle.y = canvas.height - particle.size;\n              particle.vy *= -0.8; // Energy loss\n            }\n            break;\n        }\n\n        // Mouse interaction\n        if (mouseInteraction) {\n          const dx = mousePos.current.x - particle.x;\n          const dy = mousePos.current.y - particle.y;\n          const distance = Math.sqrt(dx * dx + dy * dy);\n\n          if (distance < mouseRadius) {\n            const force = (mouseRadius - distance) / mouseRadius;\n            particle.vx -= (dx / distance) * force * 2;\n            particle.vy -= (dy / distance) * force * 2;\n          }\n        }\n\n        // Boundary conditions\n        if (behavior !== \"gravity\") {\n          if (particle.x < 0 || particle.x > canvas.width) particle.vx *= -1;\n          if (particle.y < 0 || particle.y > canvas.height) particle.vy *= -1;\n\n          particle.x = Math.max(0, Math.min(canvas.width, particle.x));\n          particle.y = Math.max(0, Math.min(canvas.height, particle.y));\n        }\n\n        // Update life\n        if (lifetime > 0) {\n          particle.life -= 1;\n\n          if (particle.life <= 0) {\n            // Respawn particle\n            particle.x = Math.random() * canvas.width;\n            particle.y =\n              behavior === \"gravity\" ? 0 : Math.random() * canvas.height;\n            particle.vx = (Math.random() - 0.5) * speed;\n            particle.vy = (Math.random() - 0.5) * speed;\n            particle.life = lifetime;\n          }\n        }\n      },\n      [behavior, speed, mouseInteraction, mouseRadius, lifetime]\n    );\n\n    // Animation loop\n    useAnimationFrame((time) => {\n      if (!shouldAnimate) return; // Skip animation if user prefers reduced motion\n\n      const canvas = canvasRef.current;\n      const ctx = canvas?.getContext(\"2d\");\n      if (!canvas || !ctx) return;\n\n      frame.current += 1;\n\n      // Clear canvas\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Apply blur filter if enabled\n      if (blur) {\n        ctx.filter = \"blur(0.5px)\";\n      }\n\n      // Update and draw particles\n      particles.current.forEach((particle, i) => {\n        updateParticle(particle, canvas);\n\n        // Find connections\n        particle.connections = [];\n        particles.current.forEach((other, j) => {\n          if (i === j) return;\n\n          const dx = particle.x - other.x;\n          const dy = particle.y - other.y;\n          const distance = Math.sqrt(dx * dx + dy * dy);\n\n          if (distance < connectionDistance) {\n            particle.connections.push(j);\n\n            // Draw connection\n            const opacity = (1 - distance / connectionDistance) * 0.2;\n            ctx.strokeStyle = `rgba(125, 211, 252, ${Math.min(0.34, opacity + 0.06)})`;\n            ctx.lineWidth = 0.5;\n            ctx.beginPath();\n            ctx.moveTo(particle.x, particle.y);\n            ctx.lineTo(other.x, other.y);\n            ctx.stroke();\n          }\n        });\n\n        // Draw particle\n        const color = getParticleColor(particle, i);\n        drawParticle(ctx, particle, color);\n      });\n\n      // Emit new particles\n      if (emitRate > 0 && time - lastEmit.current > 1000 / emitRate) {\n        const newParticle: Particle = {\n          id: particles.current.length,\n          x: canvas.width / 2,\n          y: canvas.height / 2,\n          vx: (Math.random() - 0.5) * speed * 2,\n          vy: (Math.random() - 0.5) * speed * 2,\n          size: minSize + Math.random() * (maxSize - minSize),\n          opacity: 1,\n          hue: Math.random() * 360,\n          life: lifetime || Infinity,\n          maxLife: lifetime || Infinity,\n          connections: [],\n        };\n\n        particles.current.push(newParticle);\n\n        // Remove oldest if too many\n        if (particles.current.length > count * 2) {\n          particles.current.shift();\n        }\n\n        lastEmit.current = time;\n      }\n    });\n\n    return (\n      <div\n        ref={ref}\n        id={componentId}\n        className={cn(\"relative overflow-hidden\", className)}\n        style={{\n          minHeight: resolvedHeight ?? (isBounded ? 220 : undefined),\n          maxHeight: resolvedMaxHeight ?? (isBounded ? 240 : undefined),\n          width: \"100%\",\n          ...(style ?? {}),\n        }}\n        role=\"presentation\"\n        aria-label={ariaLabel || \"Interactive particle effects\"}\n        aria-hidden={!ariaLabel}\n      >\n        <canvas\n          ref={canvasRef}\n          className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full\"\n          aria-hidden=\"true\"\n        />\n\n        {/* Glass overlay */}\n        <OptimizedGlass\n          className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-30\"\n          intent=\"neutral\"\n          elevation=\"level1\"\n          blur=\"subtle\"\n          intensity=\"medium\"\n        />\n      </div>\n    );\n  }\n);\n\n// Particle emitter component\nexport const GlassParticleEmitter = forwardRef<\n  HTMLDivElement,\n  GlassParticlesProps & {\n    children?: React.ReactNode;\n    trigger?: \"hover\" | \"click\" | \"always\";\n  }\n>(({ children, className, trigger = \"hover\", ...particleProps }, ref) => {\n  const [isActive, setIsActive] = useState(trigger === \"always\");\n\n  const handleInteraction = useCallback(() => {\n    if (trigger === \"click\") {\n      setIsActive(true);\n      setTimeout(() => setIsActive(false), ANIMATION.DURATION.slower);\n    }\n  }, [trigger]);\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\"relative\", className)}\n      onMouseEnter={() => trigger === \"hover\" && setIsActive(true)}\n      onMouseLeave={() => trigger === \"hover\" && setIsActive(false)}\n      onClick={handleInteraction}\n      role=\"presentation\"\n    >\n      {isActive && (\n        <GlassParticles\n          className=\"glass-absolute glass-inset-0\"\n          {...particleProps}\n        />\n      )}\n      <div className=\"glass-relative glass-z-10\">\n        <ContrastGuard>{children}</ContrastGuard>\n      </div>\n    </div>\n  );\n});\n\n// Preset configurations\nexport const particlePresets = {\n  stars: {\n    count: 100,\n    maxSize: 3,\n    minSize: 1,\n    speed: 0.2,\n    colorScheme: \"monochrome\" as const,\n    shape: \"circle\" as const,\n    behavior: \"float\" as const,\n    glow: true,\n  },\n  fireflies: {\n    count: 30,\n    maxSize: 4,\n    minSize: 2,\n    speed: 0.5,\n    colorScheme: \"gradient\" as const,\n    colors: [\n      COLORS.semantic.warning,\n      COLORS.semantic.warning,\n      COLORS.semantic.warning,\n    ],\n    shape: \"circle\" as const,\n    behavior: \"swarm\" as const,\n    glow: true,\n    blur: true,\n  },\n  snow: {\n    count: 80,\n    maxSize: 6,\n    minSize: 2,\n    speed: 0.3,\n    colorScheme: \"monochrome\" as const,\n    shape: \"circle\" as const,\n    behavior: \"gravity\" as const,\n    glow: false,\n    blur: true,\n  },\n  confetti: {\n    count: 50,\n    maxSize: 8,\n    minSize: 4,\n    speed: 2,\n    colorScheme: \"rainbow\" as const,\n    shape: \"square\" as const,\n    behavior: \"explode\" as const,\n    lifetime: 100,\n    emitRate: 10,\n  },\n  matrix: {\n    count: 60,\n    maxSize: 10,\n    minSize: 4,\n    speed: 1,\n    colorScheme: \"custom\" as const,\n    colors: [\n      COLORS.semantic.success,\n      COLORS.semantic.success,\n      COLORS.semantic.success,\n    ],\n    shape: \"square\" as const,\n    behavior: \"gravity\" as const,\n    glow: true,\n  },\n};\n", "\"use client\";\n/**\n * AuraGlass Magnetic Cursor Effects\n * Interactive cursor with magnetic attraction and glass effects\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  forwardRef,\n} from \"react\";\nimport {\n  motion,\n  useSpring,\n  useMotionValue,\n  AnimatePresence,\n} from \"framer-motion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"@/utils/a11y\";\nimport { useMotionPreferenceContext } from \"@/contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface MagneticElement {\n  element: HTMLElement;\n  strength: number;\n  radius: number;\n  haptic?: boolean;\n}\n\ninterface GlassMagneticCursorProps {\n  className?: string;\n  variant?: \"default\" | \"glow\" | \"trail\" | \"morph\" | \"ripple\";\n  size?: number;\n  color?: string;\n  magnetStrength?: number;\n  magnetRadius?: number;\n  showCursor?: boolean;\n  trailLength?: number;\n  glowIntensity?: number;\n  morphTargets?: boolean;\n  hapticFeedback?: boolean;\n  customCursor?: React.ReactNode;\n  /** Compact local demo surface for constrained cards and documentation previews. */\n  compact?: boolean;\n  /** Render a contained local preview instead of a fixed document cursor. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n  respectMotionPreference?: boolean;\n  \"aria-label\"?: string;\n  \"aria-describedby\"?: string;\n  role?: string;\n}\n\nexport const GlassMagneticCursor = forwardRef<\n  HTMLDivElement,\n  GlassMagneticCursorProps\n>(function GlassMagneticCursor(\n  {\n    className,\n    variant = \"default\",\n    size = 20,\n    color = \"hsl(var(--glass-color-primary) / var(--glass-opacity-50))\",\n    magnetStrength = 0.3,\n    magnetRadius = 100,\n    showCursor = true,\n    trailLength = 5,\n    glowIntensity = 1,\n    morphTargets = true,\n    hapticFeedback = false,\n    customCursor,\n    compact = false,\n    contained = false,\n    preview = false,\n    maxHeight,\n    maxWidth,\n    density = \"comfortable\",\n    respectMotionPreference = true,\n    \"aria-label\": ariaLabel,\n    \"aria-describedby\": ariaDescribedBy,\n    role,\n    ...restProps\n  }: GlassMagneticCursorProps,\n  ref\n) {\n  const cursorRef = useRef<HTMLDivElement>(null);\n  const [isHovering, setIsHovering] = useState(false);\n  const [targetElement, setTargetElement] = useState<HTMLElement | null>(null);\n  const [trail, setTrail] = useState<{ x: number; y: number; id: number }[]>(\n    []\n  );\n  const [ripples, setRipples] = useState<\n    { x: number; y: number; id: number }[]\n  >([]);\n  const { prefersReducedMotion } = useMotionPreferenceContext();\n  const cursorId = useA11yId(\"magnetic-cursor\");\n  const descriptionId = useA11yId(\"cursor-description\");\n  const isCompact = compact || preview || density === \"compact\";\n  const isContainedPreview = contained || isCompact;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const resolvedMaxWidth =\n    typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n  // Motion values\n  const mouseX = useMotionValue(0);\n  const mouseY = useMotionValue(0);\n  const cursorSize = useMotionValue(size);\n\n  // Spring physics - respect motion preferences\n  const shouldAnimate = respectMotionPreference ? !prefersReducedMotion : true;\n  const springConfig = {\n    damping: shouldAnimate ? 25 : 50,\n    stiffness: shouldAnimate ? 200 : 100,\n  };\n  const cursorX = useSpring(mouseX, springConfig);\n  const cursorY = useSpring(mouseY, springConfig);\n  const cursorScale = useSpring(1, { damping: 15, stiffness: 300 });\n\n  // Track magnetic elements\n  const magneticElements = useRef<MagneticElement[]>([]);\n\n  // Initialize magnetic elements\n  useEffect(() => {\n    if (isContainedPreview) return;\n    const elements = document.querySelectorAll(\"[data-magnetic]\");\n    magneticElements.current = Array.from(elements).map((el: any) => ({\n      element: el as HTMLElement,\n      strength:\n        parseFloat(el.getAttribute(\"data-magnetic-strength\") || \"\") ||\n        magnetStrength,\n      radius:\n        parseFloat(el.getAttribute(\"data-magnetic-radius\") || \"\") ||\n        magnetRadius,\n      haptic: el.getAttribute(\"data-magnetic-haptic\") === \"true\",\n    }));\n\n    return () => {\n      magneticElements.current = [];\n    };\n  }, [magnetStrength, magnetRadius, isContainedPreview]);\n\n  // Mouse movement handler\n  const handleMouseMove = useCallback(\n    (e: MouseEvent | React.MouseEvent) => {\n      const x = e.clientX;\n      const y = e.clientY;\n\n      mouseX.set(x);\n      mouseY.set(y);\n\n      // Check magnetic elements\n      let closestElement: HTMLElement | null = null;\n      let closestDistance = Infinity;\n      let magneticOffset = { x: 0, y: 0 };\n\n      magneticElements.current.forEach(({ element, strength, radius }) => {\n        const rect = element.getBoundingClientRect();\n        const centerX = rect.left + rect.width / 2;\n        const centerY = rect.top + rect.height / 2;\n\n        const distance = Math.sqrt(\n          Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2)\n        );\n\n        if (distance < radius && distance < closestDistance) {\n          closestElement = element;\n          closestDistance = distance;\n\n          // Calculate magnetic pull\n          const pullStrength = (1 - distance / radius) * strength;\n          magneticOffset.x = (centerX - x) * pullStrength;\n          magneticOffset.y = (centerY - y) * pullStrength;\n        }\n      });\n\n      // Apply magnetic effect\n      if (closestElement) {\n        mouseX.set(x + magneticOffset.x);\n        mouseY.set(y + magneticOffset.y);\n        setIsHovering(true);\n        setTargetElement(closestElement);\n\n        // Morph cursor size\n        if (morphTargets) {\n          const rect = (closestElement as HTMLElement).getBoundingClientRect();\n          const targetSize = Math.min(rect.width, rect.height) * 0.8;\n          cursorSize.set(targetSize);\n        }\n\n        // Haptic feedback (if supported)\n        if (hapticFeedback && \"vibrate\" in navigator) {\n          navigator.vibrate(1);\n        }\n      } else {\n        setIsHovering(false);\n        setTargetElement(null);\n        cursorSize.set(size);\n      }\n\n      // Update trail\n      if (variant === \"trail\") {\n        setTrail((prev: any) => {\n          const newTrail = [\n            { x, y, id: Date.now() },\n            ...prev.slice(0, trailLength - 1),\n          ];\n          return newTrail;\n        });\n      }\n    },\n    [\n      mouseX,\n      mouseY,\n      size,\n      morphTargets,\n      hapticFeedback,\n      variant,\n      trailLength,\n      cursorSize,\n    ]\n  );\n\n  // Click handler for ripple effect\n  const handleClick = useCallback(\n    (e: MouseEvent) => {\n      if (variant === \"ripple\") {\n        const ripple = {\n          x: e.clientX,\n          y: e.clientY,\n          id: Date.now(),\n        };\n\n        setRipples((prev: any) => [...prev, ripple]);\n\n        // Remove ripple after animation\n        setTimeout(() => {\n          setRipples((prev: any) =>\n            prev.filter((r: any) => r.id !== ripple.id)\n          );\n        }, 1000);\n      }\n\n      // Scale animation on click\n      cursorScale.set(0.8);\n      setTimeout(() => cursorScale.set(1), 150);\n    },\n    [variant, cursorScale]\n  );\n\n  // Mouse enter/leave handlers\n  const handleMouseEnter = useCallback(() => {\n    if (showCursor) {\n      document.body.style.cursor = \"none\";\n    }\n  }, [showCursor]);\n\n  const handleMouseLeave = useCallback(() => {\n    document.body.style.cursor = \"auto\";\n    setIsHovering(false);\n    setTargetElement(null);\n  }, []);\n\n  // Setup event listeners\n  useEffect(() => {\n    if (isContainedPreview) return;\n    window.addEventListener(\"mousemove\", handleMouseMove);\n    window.addEventListener(\"click\", handleClick);\n    window.addEventListener(\"mouseenter\", handleMouseEnter);\n    window.addEventListener(\"mouseleave\", handleMouseLeave);\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"click\", handleClick);\n      window.removeEventListener(\"mouseenter\", handleMouseEnter);\n      window.removeEventListener(\"mouseleave\", handleMouseLeave);\n      document.body.style.cursor = \"auto\";\n    };\n  }, [\n    handleMouseMove,\n    handleClick,\n    handleMouseEnter,\n    handleMouseLeave,\n    isContainedPreview,\n  ]);\n\n  // Hide default cursor when over magnetic elements\n  useEffect(() => {\n    if (isContainedPreview) return;\n    magneticElements.current.forEach(({ element }) => {\n      element.style.cursor = showCursor ? \"none\" : \"pointer\";\n    });\n  }, [showCursor, isContainedPreview]);\n\n  if (!showCursor) return null;\n\n  if (isContainedPreview) {\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={cursorId}\n        role={role || \"img\"}\n        aria-label={ariaLabel || \"Magnetic cursor preview\"}\n        aria-describedby={ariaDescribedBy || descriptionId}\n        className={cn(\n          \"glass-relative glass-flex glass-items-center glass-justify-center glass-overflow-hidden glass-w-full glass-radius-xl glass-border glass-border-subtle\",\n          isCompact ? \"glass-p-3\" : \"glass-p-6\",\n          className\n        )}\n        style={{\n          height: resolvedMaxHeight ?? \"180px\",\n          maxHeight: resolvedMaxHeight ?? \"220px\",\n          maxWidth: resolvedMaxWidth ?? \"320px\",\n        }}\n        {...restProps}\n      >\n        <span id={descriptionId} className=\"glass-sr-only\">\n          {ariaLabel || `Magnetic cursor (${variant})`}. Contained preview of\n          the interactive cursor effect.\n        </span>\n        <div className=\"glass-relative glass-flex glass-h-full glass-w-full glass-items-center glass-justify-center\">\n          <div\n            data-magnetic\n            className=\"glass-radius-xl glass-border glass-border-white/15 glass-surface-subtle/10 glass-p-4 glass-text-center\"\n          >\n            <ContrastGuard>\n              <span className=\"glass-text-xs glass-font-medium glass-text-primary\">\n                Magnetic target\n              </span>\n            </ContrastGuard>\n          </div>\n          <div\n            className=\"glass-absolute glass-radius-full glass-border glass-border-white/25 glass-backdrop-blur-md\"\n            style={{\n              width: isCompact ? 24 : size,\n              height: isCompact ? 24 : size,\n              right: \"22%\",\n              top: \"32%\",\n              background:\n                variant === \"glow\"\n                  ? `radial-gradient(circle, ${color} 0%, transparent 70%)`\n                  : color,\n              boxShadow:\n                variant === \"glow\"\n                  ? `0 0 ${20 * glowIntensity}px ${color}`\n                  : \"0 10px 30px rgba(0,0,0,0.2)\",\n            }}\n            aria-hidden=\"true\"\n          />\n        </div>\n      </OptimizedGlass>\n    );\n  }\n\n  return (\n    <>\n      {/* Screen reader description */}\n      <span id={descriptionId} className=\"glass-sr-only\">\n        {ariaLabel || `Magnetic cursor (${variant})`}. Interactive cursor that\n        follows mouse movement\n        {morphTargets ? \" and morphs when hovering over magnetic elements\" : \"\"}\n        .\n      </span>\n\n      {/* Main cursor */}\n      <motion.div\n        ref={ref || cursorRef}\n        className={cn(\n          \"fixed pointer-events-none glass-z-9999 mix-blend-difference\",\n          className\n        )}\n        id={cursorId}\n        role={role || \"presentation\"}\n        aria-label={ariaLabel}\n        aria-describedby={ariaDescribedBy || descriptionId}\n        aria-hidden=\"true\"\n        style={{\n          ...(shouldAnimate\n            ? {\n                x: cursorX,\n                y: cursorY,\n                scale: cursorScale,\n                width: cursorSize,\n                height: cursorSize,\n              }\n            : {}),\n        }}\n        {...restProps}\n      >\n        <OptimizedGlass intensity=\"subtle\" blur=\"medium\">\n          {customCursor || (\n            <OptimizedGlass\n              intensity={isHovering ? \"medium\" : \"subtle\"}\n              blur=\"subtle\"\n              className={cn(\n                \"absolute -translate-x-1/2 -translate-y-1/2\",\n                \"glass-radius-full transition-all\"\n              )}\n              style={{\n                width: cursorSize.get(),\n                height: cursorSize.get(),\n                transitionDuration: \"var(--glass-motion-duration-fast)\",\n                background:\n                  variant === \"glow\"\n                    ? `radial-gradient(circle, ${color} 0%, transparent 70%)`\n                    : color,\n                boxShadow:\n                  variant === \"glow\"\n                    ? `0 0 ${20 * glowIntensity}px ${color}`\n                    : undefined,\n              }}\n              aria-hidden=\"true\"\n            />\n          )}\n        </OptimizedGlass>\n      </motion.div>\n\n      {/* Trail effect */}\n      {variant === \"trail\" &&\n        trail.map((point, index) => (\n          <motion.div\n            key={point.id}\n            className=\"glass-fixed glass-pointer-events-none glass-z-9998\"\n            initial={{ opacity: 0.5, scale: 1 }}\n            animate={{ opacity: 0, scale: 0.5 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: ANIMATION.DURATION.slow / 1000 }}\n            style={{\n              left: point.x - size / 2,\n              top: point.y - size / 2,\n              width: size,\n              height: size,\n            }}\n          >\n            <OptimizedGlass\n              intensity=\"subtle\"\n              blur=\"subtle\"\n              className=\"glass-w-full glass-h-full glass-radius-full\"\n              style={{\n                background: color,\n                opacity: 1 - index / trailLength,\n              }}\n              aria-hidden=\"true\"\n            />\n          </motion.div>\n        ))}\n\n      {/* Ripple effect */}\n      <AnimatePresence>\n        {variant === \"ripple\" &&\n          ripples.map((ripple: any) => (\n            <motion.div\n              key={ripple.id}\n              className=\"glass-fixed glass-pointer-events-none glass-z-9997\"\n              initial={{ scale: 0, opacity: 1 }}\n              animate={{ scale: 3, opacity: 0 }}\n              exit={{ opacity: 0 }}\n              transition={{\n                duration: ANIMATION.DURATION.slower / 1000,\n                ease: ANIMATION.EASING.easeOut,\n              }}\n              style={{\n                left: ripple.x,\n                top: ripple.y,\n                x: \"-50%\",\n                y: \"-50%\",\n              }}\n            >\n              <div\n                className=\"glass-w-20 glass-h-20 glass-radius-full glass-border-2\"\n                style={{\n                  borderColor: color,\n                }}\n              />\n            </motion.div>\n          ))}\n      </AnimatePresence>\n\n      {/* Hover indicator */}\n      {isHovering && targetElement && (\n        <motion.div\n          className=\"glass-fixed glass-pointer-events-none glass-z-9996\"\n          initial={{ opacity: 0, scale: 0.8 }}\n          animate={{ opacity: 1, scale: 1 }}\n          exit={{ opacity: 0, scale: 0.8 }}\n          style={{\n            left: targetElement.getBoundingClientRect().left,\n            top: targetElement.getBoundingClientRect().top,\n            width: targetElement.getBoundingClientRect().width,\n            height: targetElement.getBoundingClientRect().height,\n          }}\n        >\n          <div className=\"glass-w-full glass-h-full glass-radius-lg glass-border glass-border-white/20\" />\n        </motion.div>\n      )}\n    </>\n  );\n});\n\n// Magnetic wrapper component\nexport const GlassMagneticWrapper = forwardRef<\n  HTMLDivElement,\n  {\n    children: React.ReactNode;\n    className?: string;\n    strength?: number;\n    radius?: number;\n    haptic?: boolean;\n    \"aria-label\"?: string;\n    role?: string;\n  }\n>(function GlassMagneticWrapper(\n  {\n    children,\n    className,\n    strength = 0.3,\n    radius = 100,\n    haptic = false,\n    \"aria-label\": ariaLabel,\n    role,\n    ...restProps\n  },\n  ref\n) {\n  const wrapperId = useA11yId(\"magnetic-wrapper\");\n\n  return (\n    <OptimizedGlass\n      ref={ref}\n      intensity=\"subtle\"\n      blur=\"medium\"\n      className={cn(\"relative\", className)}\n      id={wrapperId}\n      role={role}\n      aria-label={ariaLabel || \"Magnetic interactive element\"}\n      data-magnetic\n      data-magnetic-strength={strength}\n      data-magnetic-radius={radius}\n      data-magnetic-haptic={haptic}\n      {...restProps}\n    >\n      {children}\n    </OptimizedGlass>\n  );\n});\n\n// Hook for custom magnetic behavior\nexport function useMagneticCursor(options?: {\n  strength?: number;\n  radius?: number;\n  onHover?: (isHovering: boolean) => void;\n}) {\n  const elementRef = useRef<HTMLElement>(null);\n  const [isHovering, setIsHovering] = useState(false);\n\n  useEffect(() => {\n    const element = elementRef.current;\n    if (!element) return;\n\n    // Set magnetic attributes\n    element.setAttribute(\"data-magnetic\", \"true\");\n    element.setAttribute(\n      \"data-magnetic-strength\",\n      String(options?.strength || 0.3)\n    );\n    element.setAttribute(\n      \"data-magnetic-radius\",\n      String(options?.radius || 100)\n    );\n\n    // Track hover state\n    const handleMouseEnter = () => {\n      setIsHovering(true);\n      options?.onHover?.(true);\n    };\n\n    const handleMouseLeave = () => {\n      setIsHovering(false);\n      options?.onHover?.(false);\n    };\n\n    element.addEventListener(\"mouseenter\", handleMouseEnter);\n    element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n    return () => {\n      element.removeEventListener(\"mouseenter\", handleMouseEnter);\n      element.removeEventListener(\"mouseleave\", handleMouseLeave);\n      element.removeAttribute(\"data-magnetic\");\n      element.removeAttribute(\"data-magnetic-strength\");\n      element.removeAttribute(\"data-magnetic-radius\");\n    };\n  }, [options]);\n\n  return { ref: elementRef, isHovering };\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Liquid Glass Transitions\n * Fluid morphing transitions between glass states\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n  forwardRef,\n} from \"react\";\nimport {\n  motion,\n  useSpring,\n  AnimatePresence,\n  useMotionValue,\n  useTransform,\n} from \"framer-motion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface LiquidTransitionProps {\n  children: React.ReactNode;\n  className?: string;\n  variant?: \"morph\" | \"flow\" | \"ripple\" | \"dissolve\" | \"splash\";\n  duration?: number;\n  stiffness?: number;\n  damping?: number;\n  tension?: number;\n  mass?: number;\n  interactive?: boolean;\n  trigger?: \"hover\" | \"click\" | \"auto\" | \"scroll\";\n  intensity?: number;\n  \"aria-label\"?: string;\n}\n\nexport const GlassLiquidTransition = forwardRef<\n  HTMLDivElement,\n  LiquidTransitionProps\n>(\n  (\n    {\n      children,\n      className,\n      variant = \"morph\",\n      duration = 1000,\n      stiffness = 100,\n      damping = 10,\n      tension = 200,\n      mass = 1,\n      interactive = true,\n      trigger = \"hover\",\n      intensity = 1,\n      \"aria-label\": ariaLabelProp,\n      ...restProps\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [containerElement, setContainerElement] =\n      useState<HTMLDivElement | null>(null);\n    const [isActive, setIsActive] = useState(false);\n    const [mousePos, setMousePos] = useState({ x: 0, y: 0 });\n\n    // Default values for missing props\n    const containerId = `liquid-transition-${Math.random().toString(36).substr(2, 9)}`;\n    const role = \"region\";\n    const ariaLabel = ariaLabelProp || \"Liquid morphing container\";\n    const shouldAnimate = true;\n    const morphAmount = isActive ? 1 : 0;\n    const morphOnScroll = trigger === \"scroll\";\n    const morphIntensity = intensity;\n\n    // Motion values for liquid effect\n    const liquidX = useMotionValue(0);\n    const liquidY = useMotionValue(0);\n    const liquidScale = useMotionValue(1);\n    const liquidRotate = useMotionValue(0);\n\n    // Spring physics\n    const springConfig = { stiffness, damping, mass };\n    const smoothX = useSpring(liquidX, springConfig);\n    const smoothY = useSpring(liquidY, springConfig);\n    const smoothScale = useSpring(liquidScale, {\n      ...springConfig,\n      stiffness: stiffness * 2,\n    });\n    const smoothRotate = useSpring(liquidRotate, springConfig);\n\n    // Transform values for different effects\n    const morphX = useTransform(\n      smoothX,\n      [-1, 1],\n      [-20 * intensity, 20 * intensity]\n    );\n    const morphY = useTransform(\n      smoothY,\n      [-1, 1],\n      [-20 * intensity, 20 * intensity]\n    );\n    const flowScale = useTransform(smoothScale, [0.8, 1.2], [0.95, 1.05]);\n\n    // Update containerElement from ref\n    useEffect(() => {\n      if (containerRef.current) {\n        setContainerElement(containerRef.current);\n      }\n    }, []);\n\n    // Handle mouse movement for interactive effects\n    const handleMouseMove = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        if (!interactive || !containerElement) return;\n\n        const rect = containerElement.getBoundingClientRect();\n        const x = (e.clientX - rect.left) / rect.width - 0.5;\n        const y = (e.clientY - rect.top) / rect.height - 0.5;\n\n        setMousePos({ x, y });\n\n        if (variant === \"morph\" || variant === \"flow\") {\n          liquidX.set(x * 2);\n          liquidY.set(y * 2);\n        }\n\n        if (variant === \"ripple\") {\n          const distance = Math.sqrt(x * x + y * y);\n          liquidScale.set(1 + distance * 0.5);\n          liquidRotate.set((Math.atan2(y, x) * 180) / Math.PI);\n        }\n      },\n      [interactive, variant, liquidX, liquidY, liquidScale, liquidRotate]\n    );\n\n    // Handle trigger events\n    const handleTrigger = useCallback(() => {\n      if (trigger === \"click\") {\n        setIsActive(!isActive);\n      }\n    }, [trigger, isActive]);\n\n    // Auto trigger effect\n    useEffect(() => {\n      if (trigger === \"auto\") {\n        const interval = setInterval(() => {\n          setIsActive((prev: any) => !prev);\n        }, duration * 2);\n\n        return () => clearInterval(interval);\n      }\n    }, [trigger, duration]);\n\n    // Scroll trigger effect\n    useEffect(() => {\n      if (trigger === \"scroll\") {\n        const handleScroll = () => {\n          const scrollProgress =\n            window.scrollY / (document.body.scrollHeight - window.innerHeight);\n          liquidScale.set(1 + scrollProgress * 0.2);\n          liquidRotate.set(scrollProgress * 360);\n        };\n\n        window.addEventListener(\"scroll\", handleScroll);\n        return () => window.removeEventListener(\"scroll\", handleScroll);\n      }\n    }, [trigger, liquidScale, liquidRotate]);\n\n    // Get variant-specific animation\n    const getVariantAnimation = () => {\n      switch (variant) {\n        case \"morph\":\n          return {\n            initial: {\n              borderRadius: \"12px\",\n              scale: 1,\n            },\n            animate: {\n              borderRadius: isActive ? \"50%\" : \"12px\",\n              scale: isActive ? 1.1 : 1,\n            },\n            transition: {\n              type: \"spring\",\n              tension,\n              friction: 20,\n            },\n            style: {\n              x: morphX,\n              y: morphY,\n            },\n          };\n\n        case \"flow\":\n          return {\n            initial: {\n              clipPath: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n            },\n            animate: {\n              clipPath: isActive\n                ? \"polygon(5% 5%, 95% 10%, 90% 95%, 10% 90%)\"\n                : \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n            },\n            transition: {\n              duration: prefersReducedMotion ? 0 : duration / 1000,\n              ease: ANIMATION.EASING.easeInOut,\n            },\n            style: {\n              scale: flowScale,\n            },\n          };\n\n        case \"ripple\":\n          return {\n            initial: { scale: 1, opacity: 1 },\n            animate: {\n              scale: [1, 1.2, 1],\n              opacity: [1, 0.8, 1],\n            },\n            transition: {\n              duration: duration / 1000,\n              repeat: isActive ? Infinity : 0,\n              ease: \"easeInOut\",\n            },\n          };\n\n        case \"dissolve\":\n          return {\n            initial: {\n              filter: \"blur(var(--glass-blur-none, 0px))\",\n              opacity: 1,\n            },\n            animate: {\n              filter: isActive\n                ? \"blur(var(--glass-blur-md, 8px))\"\n                : \"blur(var(--glass-blur-none, 0px))\",\n              opacity: isActive ? 0.7 : 1,\n              scale: isActive ? 1.05 : 1,\n            },\n            transition: {\n              duration: prefersReducedMotion ? 0 : duration / 1000,\n              ease: ANIMATION.EASING.easeInOut,\n            },\n          };\n\n        case \"splash\":\n          return {\n            initial: {\n              scale: 0,\n              opacity: 0,\n              rotate: 0,\n            },\n            animate: {\n              scale: isActive ? [0, 1.5, 1] : 0,\n              opacity: isActive ? [0, 1, 0.8] : 0,\n              rotate: isActive ? [0, 180, 360] : 0,\n            },\n            transition: {\n              duration: prefersReducedMotion ? 0 : duration / 1000,\n              times: [0, 0.5, 1],\n              ease: ANIMATION.EASING.easeOut,\n            },\n          };\n\n        default:\n          return {};\n      }\n    };\n\n    const animationProps = getVariantAnimation();\n\n    return (\n      <motion.div\n        ref={containerRef}\n        className={cn(\n          \"relative overflow-hidden\",\n          \"transform-gpu will-change-transform\",\n          className\n        )}\n        onMouseMove={handleMouseMove}\n        onMouseEnter={() => trigger === \"hover\" && setIsActive(true)}\n        onMouseLeave={() => trigger === \"hover\" && setIsActive(false)}\n        onClick={handleTrigger}\n        role={role}\n        aria-label={ariaLabel}\n        {...animationProps}\n        {...restProps}\n      >\n        {/* Liquid glass overlay */}\n        <motion.div\n          className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n          style={{\n            background: `radial-gradient(\n            circle at ${50 + mousePos.x * 50}% ${50 + mousePos.y * 50}%,\n            hsl(var(--glass-color-primary) / 0.3) 0%,\n            transparent 70%\n          )`,\n            x: smoothX,\n            y: smoothY,\n            scale: smoothScale,\n            rotate: smoothRotate,\n          }}\n        />\n\n        {/* Content */}\n        <div className=\"glass-relative glass-z-10\">\n          <ContrastGuard>{children}</ContrastGuard>\n        </div>\n\n        {/* Additional liquid effects */}\n        {variant === \"ripple\" && isActive && (\n          <LiquidRipples\n            x={mousePos.x}\n            y={mousePos.y}\n            intensity={intensity}\n            duration={duration}\n          />\n        )}\n\n        {variant === \"splash\" && isActive && (\n          <LiquidSplash\n            x={mousePos.x}\n            y={mousePos.y}\n            intensity={intensity}\n            duration={duration}\n          />\n        )}\n      </motion.div>\n    );\n  }\n);\n\nGlassLiquidTransition.displayName = \"GlassLiquidTransition\";\n\n// Liquid ripple effect component\ninterface LiquidRipplesProps {\n  x: number;\n  y: number;\n  intensity: number;\n  duration: number;\n}\n\nfunction LiquidRipples({\n  x,\n  y,\n  intensity,\n  duration,\n}: LiquidRipplesProps): JSX.Element {\n  const prefersReducedMotion = useReducedMotion();\n  const [ripples, setRipples] = useState<\n    { id: number; x: number; y: number }[]\n  >([]);\n\n  useEffect(() => {\n    const ripple = { id: Date.now(), x, y };\n    setRipples((prev: any) => [...prev, ripple]);\n\n    setTimeout(() => {\n      setRipples((prev: any) => prev.filter((r: any) => r.id !== ripple.id));\n    }, duration);\n  }, [x, y, duration]);\n\n  return (\n    <AnimatePresence>\n      {ripples.map((ripple: any) => (\n        <motion.div\n          key={ripple.id}\n          className=\"glass-absolute glass-pointer-events-none\"\n          initial={{ scale: 0, opacity: 1 }}\n          animate={\n            prefersReducedMotion ? {} : { scale: 3 * intensity, opacity: 0 }\n          }\n          exit={{ opacity: 0 }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: duration / 1000, ease: ANIMATION.EASING.easeOut }\n          }\n          style={{\n            left: `${50 + ripple.x * 50}%`,\n            top: `${50 + ripple.y * 50}%`,\n            x: \"-50%\",\n            y: \"-50%\",\n          }}\n        >\n          <OptimizedGlass\n            intensity=\"medium\"\n            blur=\"strong\"\n            className=\"glass-w-32 glass-h-32 glass-radius-full glass-border-2 glass-border-white/30\"\n          />\n        </motion.div>\n      ))}\n    </AnimatePresence>\n  );\n}\n\n// Liquid splash effect component\ninterface LiquidSplashProps {\n  x: number;\n  y: number;\n  intensity: number;\n  duration: number;\n}\n\nfunction LiquidSplash({\n  x,\n  y,\n  intensity,\n  duration,\n}: LiquidSplashProps): JSX.Element {\n  const prefersReducedMotion = useReducedMotion();\n  const particleCount = Math.floor(8 * intensity);\n\n  return (\n    <AnimatePresence>\n      {Array.from({ length: particleCount }).map((_: any, i: any) => {\n        const angle = (i / particleCount) * Math.PI * 2;\n        const distance = 100 * intensity;\n\n        return (\n          <motion.div\n            key={i}\n            className=\"glass-absolute glass-pointer-events-none\"\n            initial={{\n              x: `${50 + x * 50}%`,\n              y: `${50 + y * 50}%`,\n              scale: 0,\n              opacity: 1,\n            }}\n            animate={{\n              x: `${50 + x * 50 + Math.cos(angle) * distance}%`,\n              y: `${50 + y * 50 + Math.sin(angle) * distance}%`,\n              scale: [0, 1, 0],\n              opacity: [1, 0.5, 0],\n            }}\n            exit={{ opacity: 0 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: duration / 1000,\n                    ease: ANIMATION.EASING.easeOut,\n                  }\n            }\n            style={{\n              translateX: \"-50%\",\n              translateY: \"-50%\",\n            }}\n          >\n            <div className=\"glass-w-4 glass-h-4 glass-radius-full glass-surface-primary\" />\n          </motion.div>\n        );\n      })}\n    </AnimatePresence>\n  );\n}\n\n// Liquid morph container\ninterface GlassLiquidContainerProps {\n  children: React.ReactNode;\n  className?: string;\n  morphOnScroll?: boolean;\n  morphIntensity?: number;\n}\n\nexport const GlassLiquidContainer = React.forwardRef<\n  HTMLDivElement,\n  GlassLiquidContainerProps\n>(\n  (\n    {\n      children,\n      className,\n      morphOnScroll = false,\n      morphIntensity = 1,\n      ...restProps\n    },\n    ref\n  ): JSX.Element => {\n    const containerRef = useRef<HTMLDivElement>(null);\n    const [containerElement, setContainerElement] =\n      useState<HTMLDivElement | null>(null);\n    const [morphAmount, setMorphAmount] = useState(0);\n\n    // Default values for missing props\n    const containerId = `liquid-container-${Math.random().toString(36).substr(2, 9)}`;\n    const role = \"region\";\n    const ariaLabel = \"Liquid morphing container\";\n    const shouldAnimate = true;\n\n    useEffect(() => {\n      if (!morphOnScroll) return;\n\n      const handleScroll = () => {\n        if (!containerRef.current) return;\n\n        const rect = containerRef.current.getBoundingClientRect();\n        const viewportHeight = window.innerHeight;\n        const elementCenter = rect.top + rect.height / 2;\n        const distanceFromCenter = Math.abs(viewportHeight / 2 - elementCenter);\n        const maxDistance = viewportHeight / 2;\n\n        const morph = Math.max(0, 1 - distanceFromCenter / maxDistance);\n        setMorphAmount(morph * morphIntensity);\n      };\n\n      window.addEventListener(\"scroll\", handleScroll);\n      handleScroll(); // Initial calculation\n\n      return () => window.removeEventListener(\"scroll\", handleScroll);\n    }, [morphOnScroll, morphIntensity, containerRef]);\n\n    return (\n      <motion.div\n        ref={(node) => {\n          // Handle forwarded ref\n          if (ref) {\n            if (typeof ref === \"function\") {\n              ref(node);\n            } else if (\n              ref &&\n              \"current\" in ref &&\n              Object.getOwnPropertyDescriptor(ref, \"current\")?.writable !==\n                false\n            ) {\n              (ref as React.MutableRefObject<HTMLDivElement | null>).current =\n                node;\n            }\n          }\n          // Update internal state\n          setContainerElement(node);\n        }}\n        className={cn(\"relative\", className)}\n        id={containerId}\n        role={role}\n        aria-label={ariaLabel}\n        style={{\n          ...(shouldAnimate\n            ? {\n                borderRadius: `${12 + morphAmount * 38}px`,\n                transform: `scale(${1 + morphAmount * 0.05})`,\n              }\n            : {}),\n        }}\n        transition={\n          shouldAnimate ? { type: \"spring\", stiffness: 100, damping: 20 } : {}\n        }\n        {...restProps}\n      >\n        <OptimizedGlass\n          intensity=\"subtle\"\n          blur=\"medium\"\n          className=\"glass-w-full glass-h-full\"\n        >\n          <ContrastGuard>{children}</ContrastGuard>\n        </OptimizedGlass>\n      </motion.div>\n    );\n  }\n);\n\nGlassLiquidContainer.displayName = \"GlassLiquidContainer\";\n\n// Preset liquid transitions\nexport const liquidPresets = {\n  water: {\n    variant: \"flow\" as const,\n    stiffness: 50,\n    damping: 8,\n    intensity: 0.8,\n  },\n  honey: {\n    variant: \"morph\" as const,\n    stiffness: 20,\n    damping: 15,\n    intensity: 1.2,\n  },\n  mercury: {\n    variant: \"ripple\" as const,\n    stiffness: 200,\n    damping: 5,\n    intensity: 0.6,\n  },\n  gel: {\n    variant: \"dissolve\" as const,\n    stiffness: 80,\n    damping: 12,\n    intensity: 1,\n  },\n  plasma: {\n    variant: \"splash\" as const,\n    stiffness: 150,\n    damping: 10,\n    intensity: 1.5,\n  },\n};\n", "\"use client\";\n/**\n * AuraGlass WebGL Glass Shaders\n * Advanced GPU-accelerated glass effects\n */\n\nimport React, { useRef, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\ninterface ShaderProps {\n  className?: string;\n  style?: React.CSSProperties;\n  variant?: \"refraction\" | \"dispersion\" | \"frosted\" | \"crystal\" | \"prism\";\n  intensity?: number;\n  animated?: boolean;\n  interactive?: boolean;\n  backgroundColor?: string;\n  renderMode?: \"auto\" | \"webgl\" | \"css\";\n  respectMotionPreference?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  preview?: boolean;\n  height?: number | string;\n  maxHeight?: number | string;\n}\n\nconst shaderFallbackPanelStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"primary\", elevation: \"level3\" }),\n  minHeight: 220,\n  borderColor: \"rgba(226, 232, 240, 0.14)\",\n  color: \"#e5f4ff\",\n};\n\nconst shaderFallbackLineStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"primary\", elevation: \"level2\" }),\n};\n\nconst shaderFallbackTileStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"primary\", elevation: \"level3\" }),\n  borderColor: \"rgba(226,232,240,0.26)\",\n  boxShadow:\n    \"0 24px 80px rgba(56,189,248,0.2), inset 0 1px 0 rgba(255,255,255,0.18)\",\n  transform: \"translate(-50%, -50%)\",\n};\n\n// Vertex shader (common for all variants)\nconst vertexShaderSource = `\n  attribute vec2 a_position;\n  attribute vec2 a_texCoord;\n  varying vec2 v_texCoord;\n\n  void main() {\n    gl_Position = vec4(a_position, 0.0, 1.0);\n    v_texCoord = a_texCoord;\n  }\n`;\n\n// Fragment shaders for different glass effects\nconst fragmentShaders = {\n  refraction: `\n    precision mediump float;\n\n    uniform sampler2D u_image;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n    uniform float u_intensity;\n\n    varying vec2 v_texCoord;\n\n    void main() {\n      vec2 uv = v_texCoord;\n      vec2 center = vec2(0.5, 0.5);\n      vec2 mouseNorm = u_mouse / u_resolution;\n\n      // Calculate refraction based on distance from mouse\n      float dist = distance(uv, mouseNorm);\n      float refraction = sin(dist * 10.0 - u_time * 2.0) * 0.02 * u_intensity;\n\n      // Apply chromatic aberration\n      vec2 rOffset = uv + vec2(refraction, 0.0);\n      vec2 gOffset = uv;\n      vec2 bOffset = uv - vec2(refraction, 0.0);\n\n      float r = texture2D(u_image, rOffset).r;\n      float g = texture2D(u_image, gOffset).g;\n      float b = texture2D(u_image, bOffset).b;\n\n      gl_FragColor = vec4(r, g, b, 1.0);\n    }\n  `,\n\n  dispersion: `\n    precision mediump float;\n\n    uniform sampler2D u_image;\n    uniform vec2 u_resolution;\n    uniform float u_time;\n    uniform float u_intensity;\n\n    varying vec2 v_texCoord;\n\n    void main() {\n      vec2 uv = v_texCoord;\n\n      // Rainbow dispersion effect\n      float wave = sin(uv.y * 10.0 + u_time) * 0.01 * u_intensity;\n\n      vec2 rUV = uv + vec2(wave * 2.0, 0.0);\n      vec2 gUV = uv + vec2(wave, 0.0);\n      vec2 bUV = uv;\n\n      vec3 color;\n      color.r = texture2D(u_image, rUV).r;\n      color.g = texture2D(u_image, gUV).g;\n      color.b = texture2D(u_image, bUV).b;\n\n      // Add prismatic highlights\n      float highlight = sin(uv.x * 20.0 + u_time * 2.0) * 0.1;\n      color += vec3(highlight, highlight * 0.5, highlight * 0.3);\n\n      gl_FragColor = vec4(color, 1.0);\n    }\n  `,\n\n  frosted: `\n    precision mediump float;\n\n    uniform sampler2D u_image;\n    uniform vec2 u_resolution;\n    uniform float u_time;\n    uniform float u_intensity;\n\n    varying vec2 v_texCoord;\n\n    float random(vec2 st) {\n      return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);\n    }\n\n    void main() {\n      vec2 uv = v_texCoord;\n      vec3 color = vec3(0.0);\n\n      // Frosted glass blur\n      float blurSize = 0.01 * u_intensity;\n      int samples = 9;\n\n      for(int i = 0; i < samples; i++) {\n        float angle = float(i) / float(samples) * 6.28318;\n        vec2 offset = vec2(cos(angle), sin(angle)) * blurSize;\n        offset *= random(uv + float(i));\n\n        color += texture2D(u_image, uv + offset).rgb;\n      }\n\n      color /= float(samples);\n\n      // Add frost texture\n      float frost = random(uv * 100.0 + u_time * 0.1) * 0.1;\n      color += vec3(frost);\n\n      gl_FragColor = vec4(color, 1.0);\n    }\n  `,\n\n  crystal: `\n    precision mediump float;\n\n    uniform sampler2D u_image;\n    uniform vec2 u_resolution;\n    uniform vec2 u_mouse;\n    uniform float u_time;\n    uniform float u_intensity;\n\n    varying vec2 v_texCoord;\n\n    void main() {\n      vec2 uv = v_texCoord;\n      vec2 center = vec2(0.5, 0.5);\n\n      // Crystal facets\n      float angle = atan(uv.y - center.y, uv.x - center.x);\n      float facets = 8.0;\n      angle = floor(angle * facets) / facets;\n\n      float dist = distance(uv, center);\n      vec2 facetUV = center + vec2(cos(angle), sin(angle)) * dist;\n\n      // Refraction through crystal\n      vec2 refractUV = mix(uv, facetUV, u_intensity * 0.5);\n      vec3 color = texture2D(u_image, refractUV).rgb;\n\n      // Add sparkle\n      float sparkle = sin(angle * 20.0 + u_time * 3.0) * 0.2;\n      color += vec3(sparkle);\n\n      // Inner reflections\n      float reflection = sin(dist * 30.0 - u_time * 2.0) * 0.1;\n      color += vec3(reflection, reflection * 0.8, reflection * 1.2);\n\n      gl_FragColor = vec4(color, 1.0);\n    }\n  `,\n\n  prism: `\n    precision mediump float;\n\n    uniform sampler2D u_image;\n    uniform vec2 u_resolution;\n    uniform float u_time;\n    uniform float u_intensity;\n\n    varying vec2 v_texCoord;\n\n    vec3 hsv2rgb(vec3 c) {\n      vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n      vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n      return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n    }\n\n    void main() {\n      vec2 uv = v_texCoord;\n\n      // Prism light splitting\n      float prismAngle = uv.x + sin(uv.y * 10.0 + u_time) * 0.1;\n\n      // Sample at different wavelengths\n      vec3 color = vec3(0.0);\n      int samples = 7;\n\n      for(int i = 0; i < samples; i++) {\n        float wavelength = float(i) / float(samples);\n        vec2 offset = vec2(wavelength * 0.02 * u_intensity, 0.0);\n\n        vec3 sample = texture2D(u_image, uv + offset).rgb;\n\n        // Apply wavelength-based tinting\n        vec3 tint = hsv2rgb(vec3(wavelength, 0.8, 1.0));\n        color += sample * tint;\n      }\n\n      color /= float(samples);\n\n      // Add rainbow spectrum overlay\n      float spectrum = sin(prismAngle * 20.0) * 0.3;\n      vec3 rainbow = hsv2rgb(vec3(prismAngle, 1.0, spectrum));\n      color = mix(color, rainbow, 0.2 * u_intensity);\n\n      gl_FragColor = vec4(color, 1.0);\n    }\n  `,\n};\n\nexport function GlassWebGLShader({\n  className,\n  variant = \"refraction\",\n  intensity = 1,\n  animated = true,\n  interactive = true,\n  backgroundColor = \"transparent\",\n  renderMode = \"auto\",\n  respectMotionPreference = true,\n  compact = false,\n  contained = false,\n  preview = false,\n  height,\n  maxHeight,\n  style,\n}: ShaderProps) {\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const glRef = useRef<WebGLRenderingContext | null>(null);\n  const programRef = useRef<WebGLProgram | null>(null);\n  const animationRef = useRef<number>(0);\n  const mouseRef = useRef({ x: 0, y: 0 });\n  const [isSupported, setIsSupported] = useState(true);\n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate =\n    animated && (respectMotionPreference ? !prefersReducedMotion : true);\n  const useCssFallback = renderMode === \"css\";\n  const isBounded = compact || contained || preview;\n  const resolvedHeight = typeof height === \"number\" ? `${height}px` : height;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const boundedStyle: React.CSSProperties = {\n    minHeight: resolvedHeight ?? (isBounded ? 220 : undefined),\n    maxHeight: resolvedMaxHeight ?? (isBounded ? 240 : undefined),\n    width: \"100%\",\n    ...(style ?? {}),\n  };\n\n  // Initialize WebGL\n  useEffect(() => {\n    if (useCssFallback) {\n      setIsSupported(false);\n      return;\n    }\n\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n    setIsSupported(true);\n\n    const gl =\n      canvas.getContext(\"webgl\") ||\n      (canvas.getContext(\"experimental-webgl\") as WebGLRenderingContext | null);\n\n    if (!gl) {\n      setIsSupported(false);\n      return;\n    }\n\n    glRef.current = gl;\n\n    // Create shaders\n    const vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);\n    const fragmentShader = createShader(\n      gl,\n      gl.FRAGMENT_SHADER,\n      fragmentShaders[variant]\n    );\n\n    if (!vertexShader || !fragmentShader) {\n      setIsSupported(false);\n      return;\n    }\n\n    // Create program\n    const program = createProgram(\n      gl as WebGLRenderingContext,\n      vertexShader,\n      fragmentShader\n    );\n    if (!program) {\n      setIsSupported(false);\n      return;\n    }\n\n    programRef.current = program;\n\n    // Set up geometry\n    setupGeometry(gl as WebGLRenderingContext, program);\n\n    // Set up texture\n    setupTexture(gl as WebGLRenderingContext);\n\n    render();\n\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n      try {\n        const loseContext = gl.getExtension(\"WEBGL_lose_context\");\n        loseContext?.loseContext();\n      } catch {}\n      glRef.current = null;\n      programRef.current = null;\n    };\n  }, [variant, shouldAnimate, intensity, useCssFallback]);\n\n  // Handle mouse interaction\n  useEffect(() => {\n    if (!interactive || prefersReducedMotion || typeof window === \"undefined\") {\n      return;\n    }\n\n    const handleMouseMove = (e: MouseEvent) => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const rect = canvas.getBoundingClientRect();\n      mouseRef.current = {\n        x: e.clientX - rect.left,\n        y: e.clientY - rect.top,\n      };\n    };\n\n    window.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n    return () => window.removeEventListener(\"mousemove\", handleMouseMove);\n  }, [interactive, prefersReducedMotion]);\n\n  // Create shader\n  function createShader(\n    gl: WebGLRenderingContext,\n    type: number,\n    source: string\n  ): WebGLShader | null {\n    const shader = gl.createShader(type);\n    if (!shader) return null;\n\n    gl.shaderSource(shader, source);\n    gl.compileShader(shader);\n\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n      gl.deleteShader(shader);\n      return null;\n    }\n\n    return shader;\n  }\n\n  // Create program\n  function createProgram(\n    gl: WebGLRenderingContext,\n    vertexShader: WebGLShader,\n    fragmentShader: WebGLShader\n  ): WebGLProgram | null {\n    const program = gl.createProgram();\n    if (!program) return null;\n\n    gl.attachShader(program, vertexShader);\n    gl.attachShader(program, fragmentShader);\n    gl.linkProgram(program);\n\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n      gl.deleteProgram(program);\n      return null;\n    }\n\n    return program;\n  }\n\n  // Set up geometry\n  function setupGeometry(gl: WebGLRenderingContext, program: WebGLProgram) {\n    // Positions\n    const positions = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]);\n\n    const positionBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW);\n\n    const positionLocation = gl.getAttribLocation(program, \"a_position\");\n    gl.enableVertexAttribArray(positionLocation);\n    gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);\n\n    // Texture coordinates\n    const texCoords = new Float32Array([0, 1, 1, 1, 0, 0, 1, 0]);\n\n    const texCoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, texCoords, gl.STATIC_DRAW);\n\n    const texCoordLocation = gl.getAttribLocation(program, \"a_texCoord\");\n    gl.enableVertexAttribArray(texCoordLocation);\n    gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);\n  }\n\n  // Set up texture\n  function setupTexture(gl: WebGLRenderingContext) {\n    const texture = gl.createTexture();\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n\n    // Create gradient texture\n    const width = 256;\n    const height = 256;\n    const pixels = new Uint8Array(width * height * 4);\n\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        const i = (y * width + x) * 4;\n        pixels[i] = (x / width) * 255; // R\n        pixels[i + 1] = (y / height) * 255; // G\n        pixels[i + 2] = 128; // B\n        pixels[i + 3] = 255; // A\n      }\n    }\n\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      width,\n      height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      pixels\n    );\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n  }\n\n  // Render loop\n  function render() {\n    const gl = glRef.current;\n    const program = programRef.current;\n    const canvas = canvasRef.current;\n\n    if (!gl || !program || !canvas) return;\n\n    // Clear canvas\n    gl.clearColor(0, 0, 0, 0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // Use program\n    gl.useProgram(program);\n\n    // Set uniforms\n    const resolutionLocation = gl.getUniformLocation(program, \"u_resolution\");\n    gl.uniform2f(resolutionLocation, canvas.width, canvas.height);\n\n    const mouseLocation = gl.getUniformLocation(program, \"u_mouse\");\n    gl.uniform2f(mouseLocation, mouseRef.current.x, mouseRef.current.y);\n\n    const timeLocation = gl.getUniformLocation(program, \"u_time\");\n    gl.uniform1f(timeLocation, performance.now() / 1000);\n\n    const intensityLocation = gl.getUniformLocation(program, \"u_intensity\");\n    gl.uniform1f(intensityLocation, intensity);\n\n    // Draw\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Continue animation\n    if (shouldAnimate && typeof requestAnimationFrame === \"function\") {\n      animationRef.current = requestAnimationFrame(render);\n    }\n  }\n\n  if (!isSupported) {\n    return (\n      <div\n        data-glass-component\n        className={cn(\n          \"glass-relative glass-overflow-hidden glass-rounded-2xl glass-border glass-p-4\",\n          className\n        )}\n        role=\"status\"\n        style={{ ...shaderFallbackPanelStyle, ...boundedStyle }}\n      >\n        <div\n          className=\"glass-absolute glass-inset-x-6 glass-top-8 glass-h-px\"\n          style={{\n            ...shaderFallbackLineStyle,\n            animation: shouldAnimate\n              ? \"ag-webgl-shader-line 2.8s ease-in-out infinite alternate\"\n              : undefined,\n          }}\n        />\n        <div\n          className=\"glass-absolute glass-left-1/2 glass-top-1/2 glass-h-20 glass-w-20 glass-rounded-2xl glass-border\"\n          style={{\n            ...shaderFallbackTileStyle,\n            animation: shouldAnimate\n              ? \"ag-webgl-shader-tile 3.2s ease-in-out infinite alternate\"\n              : undefined,\n          }}\n        />\n        <div\n          aria-hidden=\"true\"\n          className=\"glass-absolute ag-webgl-shader-orb\"\n          style={{\n            left: \"-18%\",\n            top: \"18%\",\n            width: \"64%\",\n            height: \"48%\",\n            borderRadius: 999,\n            filter: \"blur(18px)\",\n            mixBlendMode: \"screen\",\n            opacity: 0.68,\n            animation: shouldAnimate\n              ? \"ag-webgl-shader-orb 2.4s ease-in-out infinite alternate\"\n              : undefined,\n          }}\n        />\n        {shouldAnimate ? (\n          <style>{`\n            .ag-webgl-shader-orb {\n              background: radial-gradient(circle, rgba(124,211,255,0.74) 0%, rgba(216,111,255,0.44) 42%, transparent 72%);\n            }\n            @keyframes ag-webgl-shader-tile {\n              0% { transform: translate(-68%, -56%) rotate(-10deg) scale(0.86); opacity: 0.45; }\n              50% { transform: translate(-38%, -42%) rotate(13deg) scale(1.18); opacity: 1; }\n              100% { transform: translate(-52%, -64%) rotate(-4deg) scale(0.96); opacity: 0.64; }\n            }\n            @keyframes ag-webgl-shader-line {\n              0% { transform: translateX(-34%); opacity: 0.24; }\n              50% { transform: translateX(46%); opacity: 1; }\n              100% { transform: translateX(8%); opacity: 0.5; }\n            }\n            @keyframes ag-webgl-shader-orb {\n              0% { transform: translate3d(0%, -10%, 0) scale(0.82); opacity: 0.38; }\n              50% { transform: translate3d(86%, 8%, 0) scale(1.16); opacity: 0.9; }\n              100% { transform: translate3d(44%, 38%, 0) scale(0.98); opacity: 0.62; }\n            }\n          `}</style>\n        ) : null}\n        <div className=\"glass-relative glass-z-10 glass-flex glass-h-full glass-min-h-48 glass-flex-col glass-justify-between\">\n          <div>\n            <p className=\"glass-text-xs glass-uppercase glass-tracking-widest glass-text-primary-glass-opacity-60\">\n              CSS shader\n            </p>\n            <p className=\"glass-mt-1 glass-text-base glass-font-semibold glass-text-primary\">\n              {variant} glass field\n            </p>\n          </div>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            Lightweight preview mode active.\n          </p>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"relative overflow-hidden\", className)}\n      style={{ backgroundColor, ...boundedStyle }}\n    >\n      <canvas\n        ref={canvasRef}\n        className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full glass-pointer-events-none\"\n        width={800}\n        height={600}\n        aria-hidden=\"true\"\n      />\n    </div>\n  );\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { motion, useMotionValue, useSpring } from \"framer-motion\";\nimport React, {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\n\nexport interface GlassEngineConfig {\n  opacity: {\n    base: number;\n    hover: number;\n    active: number;\n  };\n  blur: {\n    base: number;\n    hover: number;\n    active: number;\n  };\n  brightness: {\n    base: number;\n    hover: number;\n    active: number;\n  };\n  tinting: {\n    enabled: boolean;\n    intensity: number;\n    adaptiveColor: boolean;\n  };\n  texture: {\n    type: \"smooth\" | \"frosted\" | \"rippled\" | \"crystalline\" | \"liquid\";\n    intensity: number;\n    animated: boolean;\n  };\n  environment: {\n    weatherReactive: boolean;\n    timeReactive: boolean;\n    temperatureReactive: boolean;\n  };\n}\n\ntype GlassTextureType = GlassEngineConfig[\"texture\"][\"type\"];\n\ninterface GlassEngineContextType {\n  config: GlassEngineConfig;\n  updateConfig: (newConfig: Partial<GlassEngineConfig>) => void;\n  createGlassStyle: (\n    variant?: string,\n    customProps?: Partial<GlassEngineConfig>\n  ) => React.CSSProperties;\n  getTexturePattern: (type: string) => string;\n  adaptToEnvironment: (conditions: EnvironmentalConditions) => void;\n}\n\ninterface EnvironmentalConditions {\n  weather: \"sunny\" | \"cloudy\" | \"rainy\" | \"snowy\" | \"foggy\";\n  temperature: number; // Celsius\n  timeOfDay: number; // 0-23 hours\n  humidity: number; // 0-100%\n  season: \"spring\" | \"summer\" | \"autumn\" | \"winter\";\n}\n\nconst defaultConfig: GlassEngineConfig = {\n  opacity: { base: 0.1, hover: 0.15, active: 0.2 },\n  blur: { base: 20, hover: 15, active: 10 },\n  brightness: { base: 1, hover: 1.1, active: 1.2 },\n  tinting: { enabled: true, intensity: 0.3, adaptiveColor: true },\n  texture: { type: \"smooth\", intensity: 0.5, animated: false },\n  environment: {\n    weatherReactive: true,\n    timeReactive: true,\n    temperatureReactive: true,\n  },\n};\n\nconst GlassEngineContext = createContext<GlassEngineContextType | null>(null);\n\nconst defaultGlassEngineContext: GlassEngineContextType = {\n  config: defaultConfig,\n  updateConfig: () => {},\n  createGlassStyle: (_variant, customProps) =>\n    createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  getTexturePattern: () => \"none\",\n  adaptToEnvironment: () => {},\n};\n\nexport const useGlassEngine = () => {\n  const prefersReducedMotion = useReducedMotion();\n  const context = useContext(GlassEngineContext);\n  return context ?? defaultGlassEngineContext;\n};\n\nconst generateTextureCSS = (type: string, intensity: number): string => {\n  const patterns = {\n    smooth: `linear-gradient(135deg, rgba(255,255,255,${0.1 * intensity}), transparent)`,\n    frosted: `\n      radial-gradient(circle at 20% 30%, rgba(255,255,255,${0.15 * intensity}) 1px, transparent 1px),\n      radial-gradient(circle at 70% 80%, rgba(255,255,255,${0.1 * intensity}) 1px, transparent 1px),\n      linear-gradient(135deg, rgba(255,255,255,${0.05 * intensity}), transparent)\n    `,\n    rippled: `\n      repeating-linear-gradient(\n        45deg,\n        rgba(255,255,255,${0.08 * intensity}),\n        rgba(255,255,255,${0.08 * intensity}) 2px,\n        transparent 2px,\n        transparent 8px\n      )\n    `,\n    crystalline: `\n      conic-gradient(from 0deg at 50% 50%,\n        rgba(255,255,255,${0.2 * intensity}) 0deg,\n        transparent 60deg,\n        rgba(255,255,255,${0.1 * intensity}) 120deg,\n        transparent 180deg,\n        rgba(255,255,255,${0.15 * intensity}) 240deg,\n        transparent 300deg\n      )\n    `,\n    liquid: `\n      radial-gradient(ellipse at top, rgba(255,255,255,${0.12 * intensity}), transparent),\n      radial-gradient(ellipse at bottom, rgba(255,255,255,${0.08 * intensity}), transparent)\n    `,\n  };\n\n  return patterns[type as keyof typeof patterns] || patterns.smooth;\n};\n\nexport const GlassEngineProvider: React.FC<{\n  children: React.ReactNode;\n  initialConfig?: Partial<GlassEngineConfig>;\n}> = ({ children, initialConfig }) => {\n  const [config, setConfig] = useState<GlassEngineConfig>({\n    ...defaultConfig,\n    ...initialConfig,\n  });\n\n  const updateConfig = useCallback((newConfig: Partial<GlassEngineConfig>) => {\n    setConfig((prev) => ({\n      ...prev,\n      ...newConfig,\n      opacity: { ...prev.opacity, ...(newConfig.opacity || {}) },\n      blur: { ...prev.blur, ...(newConfig.blur || {}) },\n      brightness: { ...prev.brightness, ...(newConfig.brightness || {}) },\n      tinting: { ...prev.tinting, ...(newConfig.tinting || {}) },\n      texture: { ...prev.texture, ...(newConfig.texture || {}) },\n      environment: { ...prev.environment, ...(newConfig.environment || {}) },\n    }));\n  }, []);\n\n  const buildGlassEngineStyle = useCallback(\n    (\n      variant: string = \"base\",\n      customProps?: Partial<GlassEngineConfig>\n    ): React.CSSProperties => {\n      const effectiveConfig = customProps\n        ? { ...config, ...customProps }\n        : config;\n      const { opacity, blur, brightness, texture } = effectiveConfig;\n\n      const opacityValue =\n        opacity[variant as keyof typeof opacity] || opacity.base;\n      const blurValue = blur[variant as keyof typeof blur] || blur.base;\n      const brightnessValue =\n        brightness[variant as keyof typeof brightness] || brightness.base;\n\n      return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n    },\n    [config]\n  );\n\n  const getTexturePattern = useCallback(\n    (type: string): string => {\n      return generateTextureCSS(type, config.texture.intensity);\n    },\n    [config.texture.intensity]\n  );\n\n  const adaptToEnvironment = useCallback(\n    (conditions: EnvironmentalConditions) => {\n      // Use functional update to avoid closing over `config` and to keep\n      // this callback stable. Also avoid mutating nested state.\n      setConfig((prev) => {\n        // If none of the environment reactions are enabled, no change.\n        if (\n          !prev.environment.weatherReactive &&\n          !prev.environment.timeReactive &&\n          !prev.environment.temperatureReactive\n        ) {\n          return prev;\n        }\n\n        // Start from clones of nested objects to avoid mutating previous state.\n        let next: GlassEngineConfig = {\n          ...prev,\n          opacity: { ...prev.opacity },\n          blur: { ...prev.blur },\n          brightness: { ...prev.brightness },\n          texture: { ...prev.texture },\n        };\n\n        // Weather adaptations\n        if (prev.environment.weatherReactive) {\n          switch (conditions.weather) {\n            case \"rainy\":\n              next.texture = {\n                ...next.texture,\n                type: \"rippled\",\n                animated: true,\n              };\n              next.opacity.base = Math.min(0.25, next.opacity.base + 0.05);\n              next.blur.base = Math.max(10, next.blur.base - 5);\n              break;\n            case \"foggy\":\n              next.opacity.base = Math.max(0.05, next.opacity.base - 0.03);\n              next.blur.base = Math.min(30, next.blur.base + 8);\n              break;\n            case \"snowy\":\n              next.texture = { ...next.texture, type: \"crystalline\" };\n              next.brightness.base = Math.min(1.3, next.brightness.base + 0.1);\n              break;\n            case \"sunny\":\n              next.brightness.base = Math.min(1.4, next.brightness.base + 0.15);\n              next.opacity.base = Math.min(0.18, next.opacity.base + 0.02);\n              break;\n          }\n        }\n\n        // Time adaptations\n        if (prev.environment.timeReactive) {\n          const hour = conditions.timeOfDay;\n          if (hour >= 20 || hour <= 6) {\n            // Night time - more subtle effects\n            next.opacity.base = Math.max(0.05, next.opacity.base - 0.02);\n            next.blur.base = Math.min(25, next.blur.base + 3);\n          } else if (hour >= 12 && hour <= 16) {\n            // Midday - stronger effects\n            next.brightness.base = Math.min(1.2, next.brightness.base + 0.05);\n          }\n        }\n\n        // Temperature adaptations\n        if (prev.environment.temperatureReactive) {\n          if (conditions.temperature < 0) {\n            next.texture = { ...next.texture, type: \"frosted\" };\n          } else if (conditions.temperature > 30) {\n            next.texture = { ...next.texture, type: \"liquid\", animated: true };\n          }\n        }\n\n        return next;\n      });\n    },\n    []\n  );\n\n  const contextValue: GlassEngineContextType = {\n    config,\n    updateConfig,\n    createGlassStyle: buildGlassEngineStyle,\n    getTexturePattern,\n    adaptToEnvironment,\n  };\n\n  return (\n    <GlassEngineContext.Provider value={contextValue}>\n      {children}\n    </GlassEngineContext.Provider>\n  );\n};\n\ntype AdaptiveGlassHtmlProps = Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  | \"onDrag\"\n  | \"onDragStart\"\n  | \"onDragEnd\"\n  | \"onDragEnter\"\n  | \"onDragLeave\"\n  | \"onDragOver\"\n  | \"onDragExit\"\n  | \"onDrop\"\n  | \"onAnimationStart\"\n  | \"onAnimationEnd\"\n  | \"onAnimationIteration\"\n>;\n\ninterface AdaptiveGlassProps extends AdaptiveGlassHtmlProps {\n  children: React.ReactNode;\n  variant?: \"base\" | \"hover\" | \"active\";\n  textureOverride?: GlassTextureType;\n  environmentalAware?: boolean;\n  as?: keyof JSX.IntrinsicElements;\n}\n\nexport const AdaptiveGlass: React.FC<AdaptiveGlassProps> = ({\n  children,\n  variant = \"base\",\n  textureOverride,\n  environmentalAware = true,\n  className = \"\",\n  as: Component = \"div\",\n  ...props\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const { createGlassStyle, config, adaptToEnvironment } = useGlassEngine();\n  const [currentVariant, setCurrentVariant] = useState(variant);\n\n  const glassStyle = useMemo(() => {\n    const customConfig = textureOverride\n      ? {\n          texture: { ...config.texture, type: textureOverride },\n        }\n      : undefined;\n\n    return createGlassStyle(currentVariant, customConfig);\n  }, [createGlassStyle, currentVariant, textureOverride, config.texture]);\n\n  // Simulate environmental conditions (in real app, would come from APIs)\n  useEffect(() => {\n    if (environmentalAware) {\n      const mockConditions: EnvironmentalConditions = {\n        weather: \"sunny\",\n        temperature: 20,\n        timeOfDay: new Date().getHours(),\n        humidity: 60,\n        season: \"spring\",\n      };\n\n      adaptToEnvironment(mockConditions);\n    }\n  }, [environmentalAware, adaptToEnvironment]);\n\n  return (\n    <motion.div\n      className={`relative ${className}`}\n      style={{ ...glassStyle }}\n      onMouseEnter={() => setCurrentVariant(\"hover\")}\n      onMouseLeave={() => setCurrentVariant(variant)}\n      onMouseDown={() => setCurrentVariant(\"active\")}\n      onMouseUp={() => setCurrentVariant(\"hover\")}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.fast / 1000 }\n      }\n      {...props}\n    >\n      {children}\n    </motion.div>\n  );\n};\n\nexport const GlassOpacityEngine: React.FC<{\n  children: React.ReactNode;\n  dynamicOpacity?: boolean;\n  opacityRange?: [number, number];\n  trigger?: \"hover\" | \"scroll\" | \"time\" | \"content\";\n  className?: string;\n}> = ({\n  children,\n  dynamicOpacity = true,\n  opacityRange = [0.05, 0.3],\n  trigger = \"hover\",\n  className = \"\",\n}) => {\n  const { createGlassStyle, updateConfig } = useGlassEngine();\n  const [opacity, setOpacity] = useState(opacityRange[0]);\n  const scrollY = useMotionValue(0);\n  const springOpacity = useSpring(opacity, { stiffness: 300, damping: 30 });\n\n  useEffect(() => {\n    if (!dynamicOpacity) return;\n\n    let interval: NodeJS.Timeout | undefined;\n\n    switch (trigger) {\n      case \"time\":\n        interval = setInterval(() => {\n          const hour = new Date().getHours();\n          const timeOpacity =\n            0.1 + (Math.sin((hour / 24) * Math.PI * 2) + 1) * 0.1;\n          setOpacity(\n            Math.max(opacityRange[0], Math.min(opacityRange[1], timeOpacity))\n          );\n        }, ANIMATION.DURATION.slower * 85);\n        break;\n      case \"scroll\":\n        const handleScroll = () => {\n          const scrollProgress =\n            window.scrollY / (document.body.scrollHeight - window.innerHeight);\n          const scrollOpacity =\n            opacityRange[0] +\n            scrollProgress * (opacityRange[1] - opacityRange[0]);\n          setOpacity(scrollOpacity);\n        };\n        window.addEventListener(\"scroll\", handleScroll);\n        return () => window.removeEventListener(\"scroll\", handleScroll);\n    }\n\n    return () => {\n      if (interval) clearInterval(interval);\n    };\n  }, [dynamicOpacity, trigger, opacityRange]);\n\n  return (\n    <motion.div\n      className={className}\n      style={{\n        ...createGlassStyle(\"base\"),\n        backgroundColor: `rgba(var(--glass-color-white) / ${springOpacity})`,\n      }}\n      onMouseEnter={\n        trigger === \"hover\" ? () => setOpacity(opacityRange[1]) : undefined\n      }\n      onMouseLeave={\n        trigger === \"hover\" ? () => setOpacity(opacityRange[0]) : undefined\n      }\n    >\n      {children}\n    </motion.div>\n  );\n};\n\nexport const GlassColorTinting: React.FC<{\n  children: React.ReactNode;\n  contentAware?: boolean;\n  tintColor?: string;\n  intensity?: number;\n  className?: string;\n}> = ({\n  children,\n  contentAware = true,\n  tintColor,\n  intensity = 0.3,\n  className = \"\",\n}) => {\n  const { createGlassStyle } = useGlassEngine();\n  const [adaptiveTint, setAdaptiveTint] = useState(\n    tintColor || \"var(--glass-bg-default)\"\n  );\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const analyzeContent = useCallback(() => {\n    if (!contentAware || !containerRef.current) return;\n\n    // Simple content analysis - in production, would be more sophisticated\n    const images = containerRef.current.querySelectorAll(\"img\");\n    if (images.length > 0) {\n      // Simulate extracting dominant color from first image\n      const colors = [\n        COLORS.semantic.primary,\n        COLORS.semantic.error,\n        COLORS.semantic.success,\n        COLORS.semantic.warning,\n        COLORS.semantic.primary,\n      ];\n      const randomColor = colors[Math.floor(Math.random() * colors.length)];\n      // Use CSS variable format for colors\n      if (randomColor.startsWith(\"var(\")) {\n        setAdaptiveTint(\n          `rgba(var(--glass-color-white) / var(--glass-opacity-${Math.round(intensity * 100)}))`\n        );\n      } else {\n        // Fallback for non-variable colors\n        const r = parseInt(randomColor.slice(1, 3), 16);\n        const g = parseInt(randomColor.slice(3, 5), 16);\n        const b = parseInt(randomColor.slice(5, 7), 16);\n        setAdaptiveTint(`rgba(${r}, ${g}, ${b}, ${intensity})`);\n      }\n    }\n  }, [contentAware, intensity]);\n\n  useEffect(() => {\n    if (contentAware) {\n      analyzeContent();\n    }\n  }, [analyzeContent, contentAware]);\n\n  const tintedStyle = useMemo(\n    () => ({\n      ...createGlassStyle(\"base\"),\n      backgroundColor: adaptiveTint,\n    }),\n    [createGlassStyle, adaptiveTint]\n  );\n\n  return (\n    <div ref={containerRef} className={className} style={{ ...tintedStyle }}>\n      {children}\n    </div>\n  );\n};\n\nexport const GlassTextureVariations: React.FC<{\n  children: React.ReactNode;\n  contentType?: \"text\" | \"image\" | \"video\" | \"code\" | \"data\";\n  autoAdapt?: boolean;\n  className?: string;\n}> = ({ children, contentType = \"text\", autoAdapt = true, className = \"\" }) => {\n  const { createGlassStyle, updateConfig } = useGlassEngine();\n  const [currentTexture, setCurrentTexture] = useState<string>(\"smooth\");\n\n  useEffect(() => {\n    if (!autoAdapt) return;\n\n    const textureMap = {\n      text: \"smooth\",\n      image: \"crystalline\",\n      video: \"liquid\",\n      code: \"frosted\",\n      data: \"rippled\",\n    } satisfies Record<\n      NonNullable<Parameters<typeof GlassTextureVariations>[0][\"contentType\"]>,\n      GlassTextureType\n    >;\n\n    const newTexture = textureMap[contentType];\n    setCurrentTexture(newTexture);\n\n    updateConfig({\n      texture: {\n        type: newTexture,\n        intensity: 0.6,\n        animated: contentType === \"video\",\n      },\n    });\n  }, [contentType, autoAdapt, updateConfig]);\n\n  return (\n    <div className={className} style={{ ...createGlassStyle(\"base\") }}>\n      {children}\n    </div>\n  );\n};\n\nexport const EnvironmentalGlass: React.FC<{\n  children: React.ReactNode;\n  weatherAPI?: boolean;\n  timeSync?: boolean;\n  className?: string;\n}> = ({ children, weatherAPI = false, timeSync = true, className = \"\" }) => {\n  const prefersReducedMotion = useReducedMotion();\n  const { adaptToEnvironment, createGlassStyle } = useGlassEngine();\n  const [conditions, setConditions] = useState<EnvironmentalConditions>({\n    weather: \"sunny\",\n    temperature: 20,\n    timeOfDay: new Date().getHours(),\n    humidity: 50,\n    season: \"spring\",\n  });\n\n  useEffect(() => {\n    if (timeSync) {\n      const updateTime = () => {\n        setConditions((prev) => ({\n          ...prev,\n          timeOfDay: new Date().getHours(),\n        }));\n      };\n\n      updateTime();\n      const interval = setInterval(updateTime, 60000);\n      return () => clearInterval(interval);\n    }\n  }, [timeSync]);\n\n  useEffect(() => {\n    if (weatherAPI) {\n      // Simulate weather API call\n      const mockWeatherConditions = {\n        ...conditions,\n        weather: ([\"sunny\", \"cloudy\", \"rainy\"] as const)[\n          Math.floor(Math.random() * 3)\n        ],\n        temperature: Math.random() * 30 + 5,\n        humidity: Math.random() * 80 + 20,\n      };\n\n      setConditions(mockWeatherConditions);\n    }\n  }, [weatherAPI]);\n\n  useEffect(() => {\n    adaptToEnvironment(conditions);\n  }, [conditions, adaptToEnvironment]);\n\n  return (\n    <motion.div\n      className={className}\n      style={{ ...createGlassStyle(\"base\") }}\n      animate={{\n        filter: `hue-rotate(${conditions.timeOfDay * 15}deg) brightness(${1 + (conditions.timeOfDay > 12 ? (24 - conditions.timeOfDay) / 24 : conditions.timeOfDay / 24) * 0.2})`,\n      }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.slower / 1000 }\n      }\n    >\n      {children}\n    </motion.div>\n  );\n};\n\nexport const GlassEngineDemo: React.FC = () => {\n  const { config, updateConfig, createGlassStyle } = useGlassEngine();\n\n  return (\n    <div className=\"glass-space-y-6 glass-p-6\">\n      <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4\">\n        {/* Different texture types */}\n        {([\"smooth\", \"frosted\", \"rippled\", \"crystalline\"] as const).map(\n          (texture) => (\n            <AdaptiveGlass\n              key={texture}\n              textureOverride={texture}\n              className=\"glass-p-4 glass-text-center\"\n            >\n              <ContrastGuard>\n                <h3\n                  className={cn(\n                    \"glass-text-primary glass-font-medium glass-capitalize glass-mb-2\"\n                  )}\n                >\n                  {texture}\n                </h3>\n                <p className={cn(\"glass-text-secondary glass-text-sm\")}>\n                  Glass texture variation\n                </p>\n              </ContrastGuard>\n            </AdaptiveGlass>\n          )\n        )}\n      </div>\n\n      <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-3 glass-gap-4\">\n        {/* Opacity Engine */}\n        <GlassOpacityEngine\n          trigger=\"hover\"\n          className=\"glass-p-4\"\n          aria-label=\"Dynamic opacity demonstration\"\n        >\n          <ContrastGuard>\n            <h3\n              className={cn(\"glass-text-primary glass-font-medium glass-mb-2\")}\n            >\n              Dynamic Opacity\n            </h3>\n            <p className={cn(\"glass-text-secondary glass-text-sm\")}>\n              Hover to see opacity change\n            </p>\n          </ContrastGuard>\n        </GlassOpacityEngine>\n\n        {/* Color Tinting */}\n        <GlassColorTinting\n          contentAware\n          className=\"glass-p-4\"\n          aria-label=\"Content-aware tinting demonstration\"\n        >\n          <ContrastGuard>\n            <h3\n              className={cn(\"glass-text-primary glass-font-medium glass-mb-2\")}\n            >\n              Content-Aware Tinting\n            </h3>\n            <p className={cn(\"glass-text-secondary glass-text-sm\")}>\n              Adapts to content colors\n            </p>\n          </ContrastGuard>\n        </GlassColorTinting>\n\n        {/* Environmental */}\n        <EnvironmentalGlass\n          timeSync\n          className=\"glass-p-4\"\n          aria-label=\"Environmental adaptation demonstration\"\n        >\n          <ContrastGuard>\n            <h3\n              className={cn(\"glass-text-primary glass-font-medium glass-mb-2\")}\n            >\n              Environmental\n            </h3>\n            <p className={cn(\"glass-text-secondary glass-text-sm\")}>\n              Reacts to time and weather\n            </p>\n          </ContrastGuard>\n        </EnvironmentalGlass>\n      </div>\n\n      {/* Controls */}\n      <div\n        className=\"glass-p-4\"\n        style={{ ...createGlassStyle(\"base\") }}\n        role=\"region\"\n        aria-label=\"Glass engine controls\"\n      >\n        <ContrastGuard>\n          <h3 className={cn(\"glass-text-primary glass-font-medium glass-mb-4\")}>\n            Glass Engine Controls\n          </h3>\n        </ContrastGuard>\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          <div>\n            <label\n              htmlFor=\"base-opacity-slider\"\n              className={cn(\n                \"glass-display-block glass-text-secondary glass-text-sm glass-mb-2\"\n              )}\n            >\n              <ContrastGuard>Base Opacity</ContrastGuard>\n            </label>\n            <input\n              id=\"base-opacity-slider\"\n              type=\"range\"\n              min=\"0.05\"\n              max=\"0.3\"\n              step=\"0.01\"\n              value={config.opacity.base}\n              onChange={(e) =>\n                updateConfig({\n                  opacity: {\n                    ...config.opacity,\n                    base: parseFloat(e.target.value),\n                  },\n                })\n              }\n              className=\"glass-w-full glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Base opacity slider\"\n              aria-valuemin={0.05}\n              aria-valuemax={0.3}\n              aria-valuenow={config.opacity.base}\n            />\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"blur-intensity-slider\"\n              className={cn(\n                \"glass-display-block glass-text-secondary glass-text-sm glass-mb-2\"\n              )}\n            >\n              <ContrastGuard>Blur Intensity</ContrastGuard>\n            </label>\n            <input\n              id=\"blur-intensity-slider\"\n              type=\"range\"\n              min=\"5\"\n              max=\"30\"\n              value={config.blur.base}\n              onChange={(e) =>\n                updateConfig({\n                  blur: { ...config.blur, base: parseInt(e.target.value) },\n                })\n              }\n              className=\"glass-w-full glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Blur intensity slider\"\n              aria-valuemin={5}\n              aria-valuemax={30}\n              aria-valuenow={config.blur.base}\n            />\n          </div>\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-mt-4\">\n          <ContrastGuard>\n            <span className={cn(\"glass-text-secondary\")}>\n              Environmental Reactions\n            </span>\n          </ContrastGuard>\n          <label className=\"glass-flex glass-items-center glass-space-x-2\">\n            <input\n              type=\"checkbox\"\n              checked={config.environment.weatherReactive}\n              onChange={(e) =>\n                updateConfig({\n                  environment: {\n                    ...config.environment,\n                    weatherReactive: e.target.checked,\n                  },\n                })\n              }\n              className=\"glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Enable weather reactive effects\"\n            />\n            <ContrastGuard>\n              <span className={cn(\"glass-text-primary glass-text-sm\")}>\n                Weather\n              </span>\n            </ContrastGuard>\n          </label>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport interface GlassEngineProps extends React.HTMLAttributes<HTMLDivElement> {\n  initialConfig?: Partial<GlassEngineConfig>;\n  renderDemo?: boolean;\n  children?: React.ReactNode;\n}\n\nexport const GlassEngine: React.FC<GlassEngineProps> = ({\n  initialConfig,\n  renderDemo = true,\n  children,\n  className,\n  ...rest\n}) => {\n  return (\n    <GlassEngineProvider initialConfig={initialConfig}>\n      <div\n        className={cn(\"glass-engine-wrapper glass-space-y-6\", className)}\n        role=\"main\"\n        aria-label=\"Glass engine\"\n        {...rest}\n      >\n        {children ?? (renderDemo ? <GlassEngineDemo /> : null)}\n      </div>\n    </GlassEngineProvider>\n  );\n};\n\nexport default GlassEngine;\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 uses in-component mock data.\n *\n * BrandColorIntegration showcases adapting glass surfaces to a brand palette.\n * The brand-asset ingestion / logo color-extraction shown here uses sample data\n * rather than a real image-analysis or brand-management service. Wire it to a real\n * color-extraction pipeline before production use.\n */\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, { useEffect, useState } from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport \"./BrandColorIntegration.css\";\nimport { useIntelligentColor } from \"./IntelligentColorSystem\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { COLORS } from \"../../tokens/designConstants\";\n\ninterface EntityBrandColors {\n  entityId: string;\n  primaryColor: string;\n  secondaryColor: string;\n  logoUrl?: string;\n  colorHistory: Array<{\n    color: string;\n    timestamp: number;\n    confidence: number;\n  }>;\n}\n\ninterface BrandColorIntegrationProps {\n  entityId?: string;\n  brandColors?: string[];\n  fallbackColors?: {\n    primary: string;\n    secondary: string;\n  };\n  animationDuration?: number;\n  className?: string;\n  children: React.ReactNode;\n}\n\nexport function BrandColorIntegration({\n  entityId,\n  brandColors,\n  fallbackColors = {\n    primary: \"hsl(var(--glass-color-primary))\",\n    secondary: COLORS.semantic.secondary,\n  },\n  animationDuration = ANIMATION.DURATION.slower,\n  className = \"\",\n  children,\n}: BrandColorIntegrationProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const { currentPalette, adaptToBrand } = useIntelligentColor();\n  const [entityColors, setEntityColors] = useState<EntityBrandColors | null>(\n    null\n  );\n  const [isLoading, setIsLoading] = useState(false);\n  const [colorTransition, setColorTransition] = useState(false);\n\n  // Mock brand color API - replace with actual API call\n  const fetchEntityBrandColors = async (\n    id: string\n  ): Promise<EntityBrandColors> => {\n    // Simulate API delay - reduced for better performance\n    await new Promise((resolve) =>\n      setTimeout(resolve, ANIMATION.DURATION.fast / 3)\n    );\n\n    // Mock data - replace with actual API response\n    const mockColors: Record<string, EntityBrandColors> = {\n      apple: {\n        entityId: \"apple\",\n        primaryColor: \"var(--brand-apple-primary, #007AFF)\",\n        secondaryColor: \"var(--brand-apple-secondary, #5856D6)\",\n        logoUrl: \"/logos/apple.png\",\n        colorHistory: [\n          {\n            color: \"var(--brand-apple-primary, #007AFF)\",\n            timestamp: Date.now() - 86400000,\n            confidence: 0.95,\n          },\n          {\n            color: \"var(--brand-apple-dark, #1D1D1F)\",\n            timestamp: Date.now() - 172800000,\n            confidence: 0.87,\n          },\n        ],\n      },\n      google: {\n        entityId: \"google\",\n        primaryColor: \"var(--brand-google-primary, #4285F4)\",\n        secondaryColor: \"var(--brand-google-secondary, #34A853)\",\n        logoUrl: \"/logos/google.png\",\n        colorHistory: [\n          {\n            color: \"var(--brand-google-primary, #4285F4)\",\n            timestamp: Date.now() - 86400000,\n            confidence: 0.98,\n          },\n          {\n            color: \"var(--brand-google-warm, #EA4335)\",\n            timestamp: Date.now() - 172800000,\n            confidence: 0.92,\n          },\n        ],\n      },\n      microsoft: {\n        entityId: \"microsoft\",\n        primaryColor: \"var(--brand-microsoft-primary, #0078D4)\",\n        secondaryColor: \"var(--brand-microsoft-secondary, #106EBE)\",\n        logoUrl: \"/logos/microsoft.png\",\n        colorHistory: [\n          {\n            color: \"var(--brand-microsoft-primary, #0078D4)\",\n            timestamp: Date.now() - 86400000,\n            confidence: 0.93,\n          },\n          {\n            color: \"var(--brand-microsoft-accent, #00BCF2)\",\n            timestamp: Date.now() - 172800000,\n            confidence: 0.89,\n          },\n        ],\n      },\n    };\n\n    return (\n      mockColors[id] || {\n        entityId: id,\n        primaryColor: fallbackColors.primary,\n        secondaryColor: fallbackColors.secondary,\n        colorHistory: [],\n      }\n    );\n  };\n\n  // Load entity colors when entityId changes\n  useEffect(() => {\n    if (!entityId) {\n      setEntityColors(null);\n      return;\n    }\n\n    let isMounted = true;\n\n    setIsLoading(true);\n\n    fetchEntityBrandColors(entityId)\n      .then((colors) => {\n        if (isMounted) {\n          setEntityColors(colors);\n          setColorTransition(true);\n          // Transition reset handled via onAnimationComplete to avoid timers\n        }\n      })\n      .catch(() => {\n        if (isMounted) {\n          setEntityColors({\n            entityId,\n            primaryColor: fallbackColors.primary,\n            secondaryColor: fallbackColors.secondary,\n            colorHistory: [],\n          });\n        }\n      })\n      .finally(() => {\n        if (isMounted) {\n          setIsLoading(false);\n        }\n      });\n\n    return () => {\n      isMounted = false;\n    };\n  }, [entityId, fallbackColors.primary, fallbackColors.secondary]); // Remove animationDuration from deps\n\n  // Adapt to brand colors when they change\n  useEffect(() => {\n    if (brandColors && brandColors.length > 0) {\n      adaptToBrand(brandColors);\n    }\n  }, [brandColors, adaptToBrand]);\n\n  // Generate CSS custom properties for brand colors\n  const getBrandColorVars = () => {\n    if (!entityColors) return {};\n\n    return {\n      \"--brand-primary\": entityColors.primaryColor,\n      \"--brand-secondary\": entityColors.secondaryColor,\n      \"--brand-primary-rgb\": hexToRgb(entityColors.primaryColor),\n      \"--brand-secondary-rgb\": hexToRgb(entityColors.secondaryColor),\n      \"--brand-primary-alpha-10\": `${entityColors.primaryColor}1A`,\n      \"--brand-primary-alpha-20\": `${entityColors.primaryColor}33`,\n      \"--brand-primary-alpha-30\": `${entityColors.primaryColor}4D`,\n      \"--brand-secondary-alpha-10\": `${entityColors.secondaryColor}1A`,\n      \"--brand-secondary-alpha-20\": `${entityColors.secondaryColor}33`,\n      \"--brand-secondary-alpha-30\": `${entityColors.secondaryColor}4D`,\n    };\n  };\n\n  // Helper function to convert hex to RGB\n  const hexToRgb = (hex: string): string => {\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result\n      ? `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}`\n      : \"0, 0, 0\";\n  };\n\n  return (\n    <motion.div\n      className={`brand-color-integration ${className}`}\n      style={{\n        ...getBrandColorVars(),\n        position: \"relative\",\n      }}\n      animate={\n        colorTransition\n          ? {\n              background: [\n                \"transparent\",\n                `${entityColors?.primaryColor}04`,\n                \"transparent\",\n              ],\n            }\n          : {}\n      }\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : {\n              duration: animationDuration / 1000,\n              ease: ANIMATION.EASING.easeInOut,\n            }\n      }\n      onAnimationComplete={() => {\n        if (colorTransition) setColorTransition(false);\n      }}\n    >\n      {/* Loading overlay */}\n      <AnimatePresence>\n        {isLoading && (\n          <motion.div\n            className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-z-50\"\n            style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n            initial={{ opacity: 0 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1 }}\n            exit={{ opacity: 0 }}\n          >\n            <motion.div\n              className={cn(\n                \"glass-flex glass-items-center glass-space-x-3 glass-text-primary\"\n              )}\n              initial={{ y: 10, opacity: 0 }}\n              animate={prefersReducedMotion ? {} : { y: 0, opacity: 1 }}\n            >\n              <motion.div\n                className={cn(\n                  \"glass-w-5 glass-h-5 glass-border-2 glass-border-primary glass-border-t-transparent glass-radius-full\"\n                )}\n                animate={prefersReducedMotion ? {} : { rotate: 360 }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        duration: ANIMATION.DURATION.slower / 1000,\n                        repeat: Infinity,\n                        ease: ANIMATION.EASING.linear,\n                      }\n                }\n              />\n              <ContrastGuard>\n                <span className=\"glass-text-sm\">Loading brand colors...</span>\n              </ContrastGuard>\n            </motion.div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      {/* Brand color indicator */}\n      <AnimatePresence>\n        {entityColors && !isLoading && (\n          <motion.div\n            className=\"glass-absolute glass-top-2 glass-right-2 glass-z-10\"\n            initial={{ opacity: 0, scale: 0, y: -10 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1, y: 0 }}\n            exit={{ opacity: 0, scale: 0, y: -10 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    delay: ANIMATION.DURATION.fast / 1000,\n                    duration: ANIMATION.DURATION.normal / 1000,\n                  }\n            }\n          >\n            <div\n              className={cn(\n                \"glass-flex glass-items-center glass-space-x-1 glass-px-2 glass-py-1 glass-radius-full glass-text-xs glass-font-medium glass-text-primary\"\n              )}\n              style={createGlassStyle({\n                intent: \"neutral\",\n                elevation: \"level2\",\n              })}\n            >\n              <div\n                className=\"glass-w-2 glass-h-2 glass-radius-full\"\n                style={{ backgroundColor: entityColors.primaryColor }}\n              />\n              <ContrastGuard>\n                <span>Brand</span>\n              </ContrastGuard>\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      {/* Color transition effect */}\n      <AnimatePresence>\n        {colorTransition && entityColors && (\n          <motion.div\n            className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n            style={{\n              background: `radial-gradient(circle at center, ${entityColors.primaryColor}20 0%, transparent 70%)`,\n              borderRadius: \"inherit\",\n            }}\n            initial={{ opacity: 0, scale: 0.8 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1.02 }}\n            exit={{ opacity: 0, scale: 1.05 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: animationDuration / 1000, ease: \"easeOut\" }\n            }\n          />\n        )}\n      </AnimatePresence>\n\n      {children}\n\n      {/* CSS custom properties injection */}\n      <style\n        dangerouslySetInnerHTML={{\n          __html: entityColors\n            ? `\n          .brand-color-integration {\n            --brand-glass-primary: ${entityColors.primaryColor}1A;\n            --brand-glass-secondary: ${entityColors.secondaryColor}1A;\n            --brand-border-primary: ${entityColors.primaryColor}33;\n            --brand-border-secondary: ${entityColors.secondaryColor}33;\n            --brand-shadow-primary: 0 8px 32px ${entityColors.primaryColor}20;\n            --brand-shadow-secondary: 0 8px 32px ${entityColors.secondaryColor}20;\n          }\n        `\n            : \"\",\n        }}\n      />\n    </motion.div>\n  );\n}\n\n// Brand-aware glass button component\nexport function BrandGlassButton({\n  children,\n  variant = \"primary\",\n  className = \"\",\n  onClick,\n  disabled = false,\n  ...props\n}: {\n  children: React.ReactNode;\n  variant?: \"primary\" | \"secondary\";\n  className?: string;\n  onClick?: () => void;\n  disabled?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const [isPressed, setIsPressed] = useState(false);\n\n  const buttonStyles = {\n    primary: {\n      background: \"var(--glass-primary-level2-surface)\",\n      border:\n        \"1px solid var(--brand-border-primary, hsl(var(--glass-color-primary)/0.3))\",\n      boxShadow: \"var(--glass-elev-2)\",\n      color: \"var(--brand-primary, \" + COLORS.semantic.primary + \")\",\n    },\n    secondary: {\n      background: \"var(--glass-primary-level2-surface)\",\n      border:\n        \"1px solid var(--brand-border-secondary, rgba(var(--glass-color-brand-secondary-rgb, 30, 64, 175) / 0.3))\",\n      boxShadow: \"var(--glass-elev-2)\",\n      color: \"var(--brand-secondary, \" + COLORS.semantic.secondary + \")\",\n    },\n  };\n\n  return (\n    <motion.button\n      className={`glass-relative glass-px-4 glass-py-2 glass-radius-lg glass-font-medium glass-transition-all ${className}`}\n      style={{\n        transitionDuration: \"var(--glass-motion-duration-fast)\",\n        ...buttonStyles[variant],\n        // Use createGlassStyle() instead,\n        // Use createGlassStyle() instead\n      }}\n      onClick={onClick}\n      disabled={disabled}\n      onMouseDown={() => setIsPressed(true)}\n      onMouseUp={() => setIsPressed(false)}\n      onMouseLeave={() => setIsPressed(false)}\n      whileHover={\n        !disabled && !prefersReducedMotion\n          ? {\n              scale: 1.01,\n              y: -0.5,\n              boxShadow:\n                variant === \"primary\"\n                  ? \"var(--brand-shadow-primary, 0 8px 24px color-mix(in srgb, hsl(var(--glass-color-primary)) 20%, transparent))\"\n                  : \"var(--brand-shadow-secondary, 0 8px 24px color-mix(in srgb, var(--glass-color-brand-secondary, #1e40af) 20%, transparent))\",\n            }\n          : {}\n      }\n      whileTap={!disabled && !prefersReducedMotion ? { scale: 0.99, y: 0 } : {}}\n      transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n      animate={{\n        opacity: disabled ? 0.5 : 1,\n        filter: disabled ? \"grayscale(1)\" : \"grayscale(0)\",\n      }}\n      {...props}\n    >\n      {children}\n\n      {/* Brand color pulse effect */}\n      <motion.div\n        className=\"glass-absolute glass-inset-0 glass-radius-lg glass-pointer-events-none\"\n        style={{\n          background: `radial-gradient(circle at center, var(--brand-${variant}, color-mix(in srgb, hsl(var(--glass-color-primary)) 20%, transparent)) 0%, transparent 70%)`,\n        }}\n        animate={\n          isPressed\n            ? {\n                scale: [1, 1.1, 1],\n                opacity: [0, 0.2, 0],\n              }\n            : {}\n        }\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : {\n                duration: ANIMATION.DURATION.fast / 1000,\n                ease: ANIMATION.EASING.easeOut,\n              }\n        }\n      />\n    </motion.button>\n  );\n}\n\n// Hook to use brand colors in components\nexport function useBrandColors(entityId?: string) {\n  const [brandColors, setBrandColors] = useState<EntityBrandColors | null>(\n    null\n  );\n\n  useEffect(() => {\n    if (!entityId) return;\n\n    // This would typically fetch from your API\n    // For now, using the mock function from BrandColorIntegration\n    const fetchColors = async () => {\n      try {\n        // Mock implementation - replace with actual API call\n        const mockColors: Record<string, EntityBrandColors> = {\n          apple: {\n            entityId: \"apple\",\n            primaryColor: \"var(--brand-apple-primary, #007AFF)\",\n            secondaryColor: \"var(--brand-apple-secondary, #5856D6)\",\n            colorHistory: [],\n          },\n          google: {\n            entityId: \"google\",\n            primaryColor: \"var(--brand-google-primary, #4285F4)\",\n            secondaryColor: \"var(--brand-google-secondary, #34A853)\",\n            colorHistory: [],\n          },\n        };\n\n        setBrandColors(mockColors[entityId] || null);\n      } catch {\n        setBrandColors(null);\n      }\n    };\n\n    fetchColors();\n  }, [entityId]);\n\n  return brandColors;\n}\n\nexport default BrandColorIntegration;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { motion } from \"framer-motion\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport React, {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n} from \"react\";\n\ninterface ColorPalette {\n  primary: string;\n  secondary: string;\n  accent: string;\n  background: string;\n  surface: string;\n  text: string;\n  textSecondary: string;\n  border: string;\n  glassBase: string;\n  glassTint: string;\n}\n\ninterface ColorAnalysis {\n  dominantColors: string[];\n  brightness: number;\n  contrast: number;\n  temperature: \"warm\" | \"cool\" | \"neutral\";\n  saturation: number;\n  mood: \"energetic\" | \"calm\" | \"vibrant\" | \"muted\";\n}\n\ninterface ColorAdaptationConfig {\n  enabled: boolean;\n  sensitivity: number;\n  transitionDuration: number;\n  preserveAccessibility: boolean;\n  contextualAwareness: boolean;\n  timeBasedShifts: boolean;\n  seasonalAdaptation: boolean;\n  brandColorInfluence: number;\n}\n\ninterface IntelligentColorContextType {\n  currentPalette: ColorPalette;\n  config: ColorAdaptationConfig;\n  adaptToPalette: (analysis: ColorAnalysis) => void;\n  adaptToTime: (timeOfDay: number) => void;\n  adaptToSeason: (season: \"spring\" | \"summer\" | \"autumn\" | \"winter\") => void;\n  adaptToBrand: (brandColors: string[]) => void;\n  updateConfig: (newConfig: Partial<ColorAdaptationConfig>) => void;\n  analyzeContent: (element: HTMLElement) => ColorAnalysis;\n  getAccessiblePalette: (basePalette: ColorPalette) => ColorPalette;\n}\n\nconst defaultPalette: ColorPalette = {\n  primary: \"hsl(var(--glass-color-primary))\",\n  secondary: \"var(--glass-color-accent, #8b5cf6)\",\n  accent: \"var(--glass-color-accent-2, #06b6d4)\",\n  background: \"var(--glass-surface-deep, #0f172a)\",\n  surface: \"var(--glass-surface-elevated, #1e293b)\",\n  text: \"var(--glass-text-on-dark, #f8fafc)\",\n  textSecondary: \"var(--glass-text-on-dark-secondary, #cbd5e1)\",\n  border: \"var(--glass-bg-default)\",\n  glassBase: \"var(--glass-bg-default)\",\n  glassTint:\n    \"var(--glass-glow-tint, color-mix(in srgb, var(--glass-white) 5%, transparent))\",\n};\n\n// Dark theme palette with high contrast text colors\nconst darkThemePalette: ColorPalette = {\n  primary: \"hsl(var(--glass-color-primary))\",\n  secondary: \"var(--glass-color-accent, #8b5cf6)\",\n  accent: \"var(--glass-color-accent-2, #06b6d4)\",\n  background: \"var(--glass-surface-deeper, #020617)\",\n  surface: \"var(--glass-surface-elevated, #1e293b)\",\n  text: \"var(--glass-text-primary)\",\n  textSecondary:\n    \"var(--glass-text-secondary, color-mix(in srgb, var(--glass-white) 80%, transparent))\",\n  border: \"var(--glass-bg-disabled)\",\n  glassBase: \"var(--glass-bg-disabled)\",\n  glassTint:\n    \"var(--glass-glow-tint-strong, color-mix(in srgb, var(--glass-white) 8%, transparent))\",\n};\n\nconst IntelligentColorContext =\n  createContext<IntelligentColorContextType | null>(null);\n\nexport const useIntelligentColor = () => {\n  const prefersReducedMotion = useReducedMotion();\n  const context = useContext(IntelligentColorContext);\n  if (!context) {\n    throw new Error(\n      \"useIntelligentColor must be used within IntelligentColorProvider\"\n    );\n  }\n  return context;\n};\n\n// Memoized color conversion functions for better performance\nconst hexToRgbCache = new Map<string, [number, number, number] | null>();\nconst hexToRgb = (hex: string): [number, number, number] | null => {\n  if (hexToRgbCache.has(hex)) {\n    return hexToRgbCache.get(hex)!;\n  }\n\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  const rgb: [number, number, number] | null = result\n    ? [\n        parseInt(result[1], 16),\n        parseInt(result[2], 16),\n        parseInt(result[3], 16),\n      ]\n    : null;\n\n  hexToRgbCache.set(hex, rgb);\n  return rgb;\n};\n\nconst rgbToHslCache = new Map<string, [number, number, number]>();\nconst rgbToHsl = (\n  r: number,\n  g: number,\n  b: number\n): [number, number, number] => {\n  const key = `${r},${g},${b}`;\n  if (rgbToHslCache.has(key)) {\n    return rgbToHslCache.get(key)!;\n  }\n\n  let rNorm = r / 255;\n  let gNorm = g / 255;\n  let bNorm = b / 255;\n\n  const max = Math.max(rNorm, gNorm, bNorm);\n  const min = Math.min(rNorm, gNorm, bNorm);\n  let h = 0,\n    s = 0,\n    l = (max + min) / 2;\n\n  if (max !== min) {\n    const d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n    switch (max) {\n      case rNorm:\n        h = (gNorm - bNorm) / d + (gNorm < bNorm ? 6 : 0);\n        break;\n      case gNorm:\n        h = (bNorm - rNorm) / d + 2;\n        break;\n      case bNorm:\n        h = (rNorm - gNorm) / d + 4;\n        break;\n    }\n    h /= 6;\n  }\n\n  const hsl: [number, number, number] = [h * 360, s * 100, l * 100];\n  rgbToHslCache.set(key, hsl);\n  return hsl;\n};\n\nconst hslToHexCache = new Map<string, string>();\nconst hslToHex = (h: number, s: number, l: number): string => {\n  const key = `${Math.round(h)},${Math.round(s)},${Math.round(l)}`;\n  if (hslToHexCache.has(key)) {\n    return hslToHexCache.get(key)!;\n  }\n\n  let hNorm = h / 360;\n  let sNorm = s / 100;\n  let lNorm = l / 100;\n\n  const hue2rgb = (p: number, q: number, t: number) => {\n    if (t < 0) t += 1;\n    if (t > 1) t -= 1;\n    if (t < 1 / 6) return p + (q - p) * 6 * t;\n    if (t < 1 / 2) return q;\n    if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n    return p;\n  };\n\n  const q = lNorm < 0.5 ? lNorm * (1 + sNorm) : lNorm + sNorm - lNorm * sNorm;\n  const p = 2 * lNorm - q;\n\n  const r = hue2rgb(p, q, hNorm + 1 / 3);\n  const g = hue2rgb(p, q, hNorm);\n  const b = hue2rgb(p, q, hNorm - 1 / 3);\n\n  const toHex = (c: number) => {\n    const hex = Math.round(c * 255).toString(16);\n    return hex.length === 1 ? \"0\" + hex : hex;\n  };\n\n  const hex = `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n  hslToHexCache.set(key, hex);\n  return hex;\n};\n\nconst calculateLuminance = (hex: string): number => {\n  const rgb = hexToRgb(hex);\n  if (!rgb) return 0;\n\n  const [r, g, b] = rgb.map((c: any) => {\n    c /= 255;\n    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n  });\n\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst getContrastRatio = (color1: string, color2: string): number => {\n  const lum1 = calculateLuminance(color1);\n  const lum2 = calculateLuminance(color2);\n\n  const brightest = Math.max(lum1, lum2);\n  const darkest = Math.min(lum1, lum2);\n\n  return (brightest + 0.05) / (darkest + 0.05);\n};\n\nconst adjustColorForAccessibility = (\n  foreground: string,\n  background: string,\n  targetRatio: number = 4.5\n): string => {\n  const currentRatio = getContrastRatio(foreground, background);\n  if (currentRatio >= targetRatio) return foreground;\n\n  const rgb = hexToRgb(foreground);\n  if (!rgb) return foreground;\n\n  const [h, s, l] = rgbToHsl(rgb[0], rgb[1], rgb[2]);\n\n  let newL = l;\n  let iterations = 0;\n  const maxIterations = 100;\n  const step = currentRatio < targetRatio ? (l > 50 ? -2 : 2) : 0;\n\n  while (iterations < maxIterations) {\n    const testColor = hslToHex(h, s, Math.max(0, Math.min(100, newL)));\n    const testRatio = getContrastRatio(testColor, background);\n\n    if (testRatio >= targetRatio) return testColor;\n\n    newL += step;\n    if (newL <= 0 || newL >= 100) break;\n    iterations++;\n  }\n\n  return foreground;\n};\n\nexport const IntelligentColorProvider: React.FC<{\n  children: React.ReactNode;\n}> = ({ children }) => {\n  // Detect if we're in a dark theme context\n  const isDarkTheme =\n    typeof document !== \"undefined\" &&\n    (document.documentElement.classList.contains(\"dark\") ||\n      document.documentElement.getAttribute(\"data-theme\") === \"dark\");\n\n  const [currentPalette, setCurrentPalette] = useState<ColorPalette>(\n    isDarkTheme ? darkThemePalette : defaultPalette\n  );\n  const [config, setConfig] = useState<ColorAdaptationConfig>({\n    enabled: true,\n    sensitivity: 0.7,\n    transitionDuration: (ANIMATION.DURATION.slow * 1.6) / 1000,\n    preserveAccessibility: true,\n    contextualAwareness: true,\n    timeBasedShifts: true,\n    seasonalAdaptation: true,\n    brandColorInfluence: 0.3,\n  });\n\n  const analyzeContent = useCallback((element: HTMLElement): ColorAnalysis => {\n    const canvas = document.createElement(\"canvas\");\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx)\n      return {\n        dominantColors: [],\n        brightness: 0.5,\n        contrast: 0.5,\n        temperature: \"neutral\",\n        saturation: 0.5,\n        mood: \"calm\",\n      };\n\n    // Basic implementation - in production, would use more sophisticated color analysis\n    const computedStyle = getComputedStyle(element);\n    const backgroundColor = computedStyle.backgroundColor;\n    const textColor = computedStyle.color;\n\n    const colors = [backgroundColor, textColor].filter(Boolean);\n\n    // Calculate actual brightness from color values\n    const calculateBrightness = (color: string): number => {\n      const rgb = color.match(/\\d+/g);\n      if (!rgb) return 0.5;\n      const [r, g, b] = rgb.map(Number);\n      return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n    };\n\n    // Calculate contrast ratio\n    const calculateContrast = (color1: string, color2: string): number => {\n      const l1 = calculateBrightness(color1);\n      const l2 = calculateBrightness(color2);\n      const lighter = Math.max(l1, l2);\n      const darker = Math.min(l1, l2);\n      return (lighter + 0.05) / (darker + 0.05);\n    };\n\n    // Determine color temperature\n    const determineTemperature = (\n      color: string\n    ): \"warm\" | \"cool\" | \"neutral\" => {\n      const rgb = color.match(/\\d+/g);\n      if (!rgb) return \"neutral\";\n      const [r, g, b] = rgb.map(Number);\n      const warmth = (r - b) / 255;\n      return warmth > 0.1 ? \"warm\" : warmth < -0.1 ? \"cool\" : \"neutral\";\n    };\n\n    const brightness = colors.length > 0 ? calculateBrightness(colors[0]) : 0.5;\n    const contrast =\n      colors.length > 1 ? calculateContrast(colors[0], colors[1]) / 21 : 0.5;\n    const temperature =\n      colors.length > 0 ? determineTemperature(colors[0]) : \"neutral\";\n\n    // Calculate saturation from primary color\n    const calculateSaturation = (color: string): number => {\n      const rgb = color.match(/\\d+/g);\n      if (!rgb) return 0.5;\n      const [r, g, b] = rgb.map((n: any) => Number(n) / 255);\n      const max = Math.max(r, g, b);\n      const min = Math.min(r, g, b);\n      return max === 0 ? 0 : (max - min) / max;\n    };\n\n    const saturation = colors.length > 0 ? calculateSaturation(colors[0]) : 0.5;\n\n    // Determine mood based on brightness and saturation\n    const determineMood = (\n      brightness: number,\n      saturation: number\n    ): \"energetic\" | \"calm\" | \"vibrant\" | \"muted\" => {\n      if (brightness > 0.7 && saturation > 0.5) return \"energetic\";\n      if (brightness < 0.3 && saturation < 0.3) return \"muted\";\n      if (saturation > 0.6) return \"vibrant\";\n      return \"calm\";\n    };\n\n    return {\n      dominantColors: colors,\n      brightness,\n      contrast,\n      temperature,\n      saturation,\n      mood: determineMood(brightness, saturation),\n    };\n  }, []);\n\n  const adaptToPalette = useCallback(\n    (analysis: ColorAnalysis) => {\n      if (!config.enabled) return;\n\n      setCurrentPalette((prev: any) => {\n        const { dominantColors, brightness, saturation } = analysis;\n        let newPalette = { ...prev };\n\n        if (dominantColors.length > 0) {\n          const primaryColor = dominantColors[0];\n          const rgb = hexToRgb(primaryColor);\n          if (rgb) {\n            const [h, s, l] = rgbToHsl(rgb[0], rgb[1], rgb[2]);\n            const brightnessMultiplier = brightness > 0.6 ? 0.8 : 1.2;\n            const saturationMultiplier = saturation > 0.7 ? 0.9 : 1.1;\n            newPalette.primary = hslToHex(\n              h,\n              s * saturationMultiplier,\n              l * brightnessMultiplier\n            );\n            newPalette.secondary = hslToHex((h + 30) % 360, s * 0.8, l * 0.9);\n            newPalette.accent = hslToHex((h + 120) % 360, s * 1.1, l * 0.85);\n            newPalette.glassBase = `color-mix(in srgb, rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]}) 10%, transparent)`;\n            newPalette.glassTint = `color-mix(in srgb, rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]}) 5%, transparent)`;\n          }\n        }\n\n        if (config.preserveAccessibility) {\n          newPalette = computeAccessiblePalette(newPalette);\n        }\n        return newPalette;\n      });\n    },\n    [config.enabled, config.preserveAccessibility]\n  );\n\n  const adaptToTime = useCallback(\n    (timeOfDay: number) => {\n      if (!config.timeBasedShifts) return;\n      const hour = timeOfDay;\n      setCurrentPalette((prev: any) => {\n        const timeBasePalette = { ...prev };\n        if (hour >= 5 && hour < 9) {\n          timeBasePalette.primary = \"hsl(var(--glass-color-warning))\";\n          timeBasePalette.glassBase = \"hsl(var(--glass-color-warning)/0.1)\";\n        } else if (hour >= 9 && hour < 17) {\n          timeBasePalette.primary = \"hsl(var(--glass-color-primary))\";\n          timeBasePalette.glassBase = \"hsl(var(--glass-color-primary)/0.1)\";\n        } else if (hour >= 17 && hour < 21) {\n          timeBasePalette.primary = \"hsl(var(--glass-color-warning))\";\n          timeBasePalette.glassBase =\n            \"color-mix(in srgb, hsl(var(--glass-color-warning)) 10%, transparent)\";\n        } else {\n          timeBasePalette.primary = \"hsl(var(--glass-color-primary))\";\n          timeBasePalette.background = \"var(--glass-black)\";\n          timeBasePalette.glassBase =\n            \"color-mix(in srgb, hsl(var(--glass-color-primary)) 8%, transparent)\";\n        }\n        return timeBasePalette;\n      });\n    },\n    [config.timeBasedShifts]\n  );\n\n  const adaptToSeason = useCallback(\n    (season: \"spring\" | \"summer\" | \"autumn\" | \"winter\") => {\n      if (!config.seasonalAdaptation) return;\n      setCurrentPalette((prev: any) => {\n        const seasonPalette = { ...prev };\n        switch (season) {\n          case \"spring\":\n            seasonPalette.primary = \"hsl(var(--glass-color-success))\";\n            seasonPalette.secondary = \"hsl(var(--glass-color-warning))\";\n            seasonPalette.accent = \"var(--glass-color-secondary)\";\n            seasonPalette.glassBase = \"hsl(var(--glass-color-success)/0.1)\";\n            break;\n          case \"summer\":\n            seasonPalette.primary = \"hsl(var(--glass-color-info))\";\n            seasonPalette.secondary = \"hsl(var(--glass-color-warning))\";\n            seasonPalette.accent = \"hsl(var(--glass-color-danger))\";\n            seasonPalette.glassBase =\n              \"color-mix(in srgb, hsl(var(--glass-color-info)) 10%, transparent)\";\n            break;\n          case \"autumn\":\n            seasonPalette.primary = \"hsl(var(--glass-color-warning))\";\n            seasonPalette.secondary = \"hsl(var(--glass-color-warning))\";\n            seasonPalette.accent = \"var(--glass-color-danger-dark)\";\n            seasonPalette.glassBase =\n              \"color-mix(in srgb, hsl(var(--glass-color-warning)) 10%, transparent)\";\n            break;\n          case \"winter\":\n            seasonPalette.primary = \"hsl(var(--glass-color-primary))\";\n            seasonPalette.secondary = \"hsl(var(--glass-color-info))\";\n            seasonPalette.accent = \"var(--glass-color-secondary)\";\n            seasonPalette.background = \"var(--glass-black)\";\n            seasonPalette.glassBase =\n              \"color-mix(in srgb, hsl(var(--glass-color-primary)) 8%, transparent)\";\n            break;\n        }\n        return seasonPalette;\n      });\n    },\n    [config.seasonalAdaptation]\n  );\n\n  const adaptToBrand = useCallback(\n    (brandColors: string[]) => {\n      if (brandColors.length === 0) return;\n      const influence = config.brandColorInfluence;\n      setCurrentPalette((prev: any) => {\n        const brandPalette = { ...prev };\n        brandColors.forEach((color, index) => {\n          const rgb = hexToRgb(color);\n          if (rgb) {\n            const [h, s, l] = rgbToHsl(rgb[0], rgb[1], rgb[2]);\n            switch (index) {\n              case 0: {\n                const currentRgb = hexToRgb(brandPalette.primary);\n                if (currentRgb) {\n                  const [currentH, currentS, currentL] = rgbToHsl(\n                    currentRgb[0],\n                    currentRgb[1],\n                    currentRgb[2]\n                  );\n                  const newH = currentH + (h - currentH) * influence;\n                  const newS = currentS + (s - currentS) * influence;\n                  const newL = currentL + (l - currentL) * influence;\n                  brandPalette.primary = hslToHex(newH, newS, newL);\n                }\n                break;\n              }\n              case 1:\n                brandPalette.secondary = color;\n                break;\n              case 2:\n                brandPalette.accent = color;\n                break;\n            }\n            brandPalette.glassBase = `color-mix(in srgb, rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]}) 10%, transparent)`;\n            brandPalette.glassTint = `color-mix(in srgb, rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]}) 5%, transparent)`;\n          }\n        });\n        return brandPalette;\n      });\n    },\n    [config.brandColorInfluence]\n  );\n\n  const getAccessiblePalette = useCallback(\n    (basePalette: ColorPalette): ColorPalette => {\n      const accessiblePalette = { ...basePalette };\n\n      // Ensure text has sufficient contrast against backgrounds\n      accessiblePalette.text = adjustColorForAccessibility(\n        accessiblePalette.text,\n        accessiblePalette.background,\n        4.5\n      );\n\n      accessiblePalette.textSecondary = adjustColorForAccessibility(\n        accessiblePalette.textSecondary,\n        accessiblePalette.background,\n        3.0\n      );\n\n      return accessiblePalette;\n    },\n    []\n  );\n\n  const updateConfig = useCallback(\n    (newConfig: Partial<ColorAdaptationConfig>) => {\n      setConfig((prev: any) => ({ ...prev, ...newConfig }));\n    },\n    []\n  );\n\n  // Pure helper to compute accessible palette without relying on hooks ordering\n  const computeAccessiblePalette = (\n    basePalette: ColorPalette\n  ): ColorPalette => {\n    const accessiblePalette = { ...basePalette };\n    accessiblePalette.text = adjustColorForAccessibility(\n      accessiblePalette.text,\n      accessiblePalette.background,\n      4.5\n    );\n    accessiblePalette.textSecondary = adjustColorForAccessibility(\n      accessiblePalette.textSecondary,\n      accessiblePalette.background,\n      3.0\n    );\n    return accessiblePalette;\n  };\n\n  // Auto-adapt to theme changes - optimized\n  useEffect(() => {\n    let lastThemeCheck = 0;\n    const THEME_CHECK_DEBOUNCE = 100; // Only check theme every 100ms\n\n    const checkThemeAndUpdate = () => {\n      const now = Date.now();\n      if (now - lastThemeCheck < THEME_CHECK_DEBOUNCE) return;\n\n      lastThemeCheck = now;\n\n      const isDarkTheme =\n        document.documentElement.classList.contains(\"dark\") ||\n        document.documentElement.getAttribute(\"data-theme\") === \"dark\";\n\n      // Only update if the theme state actually changed\n      const shouldBeDarkPalette = isDarkTheme;\n      const isCurrentlyDarkPalette =\n        currentPalette.text === darkThemePalette.text;\n\n      if (shouldBeDarkPalette !== isCurrentlyDarkPalette) {\n        setCurrentPalette(\n          shouldBeDarkPalette ? darkThemePalette : defaultPalette\n        );\n      }\n    };\n\n    // Check theme on mount\n    checkThemeAndUpdate();\n\n    // Set up a mutation observer to watch for theme changes - less aggressive\n    const observer = new MutationObserver((mutations) => {\n      let hasRelevantChange = false;\n      mutations.forEach((mutation) => {\n        if (\n          mutation.type === \"attributes\" &&\n          mutation.attributeName === \"class\"\n        ) {\n          hasRelevantChange = true;\n        }\n      });\n\n      if (hasRelevantChange) {\n        // Debounce the theme check\n        setTimeout(checkThemeAndUpdate, ANIMATION.DURATION.fast / 3);\n      }\n    });\n\n    observer.observe(document.documentElement, {\n      attributes: true,\n      attributeFilter: [\"class\"],\n    });\n\n    return () => observer.disconnect();\n  }, [currentPalette.text]);\n\n  // Auto-adapt to time of day - optimized for performance\n  useEffect(() => {\n    if (config.timeBasedShifts) {\n      const updateTime = () => {\n        const now = new Date();\n        adaptToTime(now.getHours());\n      };\n\n      updateTime();\n      // Reduce frequency to every 5 minutes for better performance\n      const interval = setInterval(updateTime, ANIMATION.DURATION.slower * 428);\n\n      return () => clearInterval(interval);\n    }\n  }, [config.timeBasedShifts]);\n\n  // Auto-adapt to seasons\n  useEffect(() => {\n    if (config.seasonalAdaptation) {\n      const now = new Date();\n      const month = now.getMonth();\n\n      let season: \"spring\" | \"summer\" | \"autumn\" | \"winter\";\n      if (month >= 2 && month <= 4) season = \"spring\";\n      else if (month >= 5 && month <= 7) season = \"summer\";\n      else if (month >= 8 && month <= 10) season = \"autumn\";\n      else season = \"winter\";\n\n      adaptToSeason(season);\n    }\n  }, [config.seasonalAdaptation]);\n\n  // Apply CSS custom properties for the current palette - optimized\n  useEffect(() => {\n    const root = document.documentElement;\n\n    // Batch all CSS updates to minimize DOM manipulations\n    const updates: Record<string, string> = {};\n\n    // Check and queue text property updates\n    const currentTextPrimary = root.style.getPropertyValue(\n      \"--glass-text-primary\"\n    );\n    if (currentTextPrimary !== currentPalette.text) {\n      updates[\"--glass-text-primary\"] = currentPalette.text;\n    }\n\n    const currentTextSecondary = root.style.getPropertyValue(\n      \"--glass-text-secondary\"\n    );\n    if (currentTextSecondary !== currentPalette.textSecondary) {\n      updates[\"--glass-text-secondary\"] = currentPalette.textSecondary;\n      updates[\"--glass-text-tertiary\"] = currentPalette.textSecondary;\n      updates[\"--glass-text-disabled\"] = currentPalette.textSecondary;\n    }\n\n    // Check and queue background/border updates\n    const currentSurface = root.style.getPropertyValue(\"--glass-bg-default\");\n    if (currentSurface !== currentPalette.surface) {\n      updates[\"--glass-bg-default\"] = currentPalette.surface;\n      updates[\"--glass-border-default\"] = currentPalette.border;\n      updates[\"--glass-border-subtle\"] = currentPalette.border;\n      updates[\"--glass-gradient-default\"] =\n        `linear-gradient(135deg, ${currentPalette.surface}, ${currentPalette.glassTint})`;\n    }\n\n    // Check and queue essential palette properties\n    const essentialProps = [\"primary\", \"secondary\", \"accent\", \"background\"];\n    essentialProps.forEach((key: any) => {\n      const currentValue = root.style.getPropertyValue(`--glass-${key}`);\n      const newValue = currentPalette[key as keyof ColorPalette] as string;\n      if (currentValue !== newValue) {\n        updates[`--glass-${key}`] = newValue;\n      }\n    });\n\n    // Apply all updates in a single batch\n    if (Object.keys(updates).length > 0) {\n      requestAnimationFrame(() => {\n        Object.entries(updates).forEach(([property, value]) => {\n          root.style.setProperty(property, value);\n        });\n      });\n    }\n  }, [currentPalette]);\n\n  const contextValue: IntelligentColorContextType = {\n    currentPalette,\n    config,\n    adaptToPalette,\n    adaptToTime,\n    adaptToSeason,\n    adaptToBrand,\n    updateConfig,\n    analyzeContent,\n    getAccessiblePalette,\n  };\n\n  return (\n    <IntelligentColorContext.Provider value={contextValue}>\n      {children}\n    </IntelligentColorContext.Provider>\n  );\n};\n\nexport const ColorAdaptationDemo: React.FC = () => {\n  const prefersReducedMotion = useReducedMotion();\n  const {\n    currentPalette,\n    config,\n    adaptToTime,\n    adaptToSeason,\n    adaptToBrand,\n    updateConfig,\n  } = useIntelligentColor();\n\n  const demoColors = useMemo(\n    () => [\n      \"hsl(var(--glass-color-primary))\",\n      \"hsl(var(--glass-color-danger))\",\n      \"hsl(var(--glass-color-success))\",\n      \"hsl(var(--glass-color-warning))\",\n      \"var(--glass-color-secondary)\",\n      \"hsl(var(--glass-color-info))\",\n    ],\n    []\n  );\n\n  return (\n    <motion.div\n      className={cn(\n        \"glass-p-6 glass-radius-2xl glass-blur-backdrop glass-border glass-border-white/20\"\n      )}\n      style={{\n        background: `linear-gradient(135deg, ${currentPalette.glassBase}, ${currentPalette.glassTint})`,\n        borderColor: currentPalette.border,\n      }}\n      initial={{ opacity: 0, y: 20 }}\n      animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: config.transitionDuration }\n      }\n    >\n      <ContrastGuard>\n        <h3\n          className={cn(\"glass-text-xl glass-font-bold glass-mb-4\")}\n          style={{ color: currentPalette.text }}\n        >\n          Intelligent Color System Demo\n        </h3>\n\n        {/* Current Palette Display */}\n        <div\n          className={cn(\"glass-grid glass-grid-cols-4 glass-gap-2 glass-mb-6\")}\n        >\n          {Object.entries(currentPalette).map(([name, color]) => (\n            <div key={name} className={cn(\"glass-text-center\")}>\n              <div\n                className={cn(\n                  \"glass-w-full glass-h-12 glass-radius-lg glass-mb-2\"\n                )}\n                style={{ backgroundColor: color }}\n              />\n              <ContrastGuard>\n                <div\n                  className={cn(\"glass-text-xs\")}\n                  style={{ color: currentPalette.textSecondary }}\n                >\n                  {name}\n                </div>\n              </ContrastGuard>\n            </div>\n          ))}\n        </div>\n\n        {/* Controls */}\n        <div className={cn(\"glass-space-y-4\")}>\n          <div>\n            <ContrastGuard>\n              <label\n                className={cn(\n                  \"glass-block glass-text-sm glass-font-medium glass-mb-2\"\n                )}\n                style={{ color: currentPalette.text }}\n              >\n                Time of Day\n              </label>\n            </ContrastGuard>\n            <div className={cn(\"glass-flex glass-space-x-2\")}>\n              {[\"Morning\", \"Day\", \"Evening\", \"Night\"].map((time, index) => (\n                <motion.button\n                  key={time}\n                  className={cn(\n                    \"glass-px-3 glass-py-2 glass-radius-lg glass-text-sm glass-font-medium\"\n                  )}\n                  style={{\n                    backgroundColor: currentPalette.primary,\n                    color: currentPalette.background,\n                  }}\n                  onClick={() => adaptToTime([6, 12, 18, 0][index])}\n                  whileHover={prefersReducedMotion ? {} : { scale: 1.05 }}\n                  whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n                  transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n                  aria-label={`Switch to ${time} color scheme`}\n                >\n                  <ContrastGuard>{time}</ContrastGuard>\n                </motion.button>\n              ))}\n            </div>\n          </div>\n\n          <div>\n            <ContrastGuard>\n              <label\n                className={cn(\n                  \"glass-block glass-text-sm glass-font-medium glass-mb-2\"\n                )}\n                style={{ color: currentPalette.text }}\n              >\n                Season\n              </label>\n            </ContrastGuard>\n            <div className={cn(\"glass-flex glass-space-x-2\")}>\n              {([\"spring\", \"summer\", \"autumn\", \"winter\"] as const).map(\n                (season) => (\n                  <motion.button\n                    key={season}\n                    className={cn(\n                      \"glass-px-3 glass-py-2 glass-radius-lg glass-text-sm glass-font-medium glass-capitalize\"\n                    )}\n                    style={{\n                      backgroundColor: currentPalette.secondary,\n                      color: currentPalette.background,\n                    }}\n                    onClick={() => adaptToSeason(season)}\n                    whileHover={prefersReducedMotion ? {} : { scale: 1.05 }}\n                    whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n                    transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n                    aria-label={`Switch to ${season} color scheme`}\n                  >\n                    <ContrastGuard>{season}</ContrastGuard>\n                  </motion.button>\n                )\n              )}\n            </div>\n          </div>\n\n          <div>\n            <ContrastGuard>\n              <label\n                className={cn(\n                  \"glass-block glass-text-sm glass-font-medium glass-mb-2\"\n                )}\n                style={{ color: currentPalette.text }}\n              >\n                Brand Colors\n              </label>\n            </ContrastGuard>\n            <div className={cn(\"glass-flex glass-space-x-2\")}>\n              {demoColors.map((color, i) => (\n                <motion.button\n                  key={`${color}-${i}`}\n                  className={cn(\n                    \"glass-w-8 glass-h-8 glass-radius-full glass-border-2\"\n                  )}\n                  style={{\n                    backgroundColor: color,\n                    borderColor: currentPalette.border,\n                  }}\n                  onClick={() => adaptToBrand([color])}\n                  whileHover={prefersReducedMotion ? {} : { scale: 1.1 }}\n                  whileTap={prefersReducedMotion ? {} : { scale: 0.9 }}\n                  transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n                  aria-label={`Apply brand color ${i + 1}`}\n                />\n              ))}\n            </div>\n          </div>\n\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-justify-between\"\n            )}\n          >\n            <label style={{ color: currentPalette.text }}>\n              Auto-adaptation enabled\n            </label>\n            <motion.button\n              className={cn(\n                \"glass-w-12 glass-h-6 glass-radius-full glass-p-1\",\n                config.enabled ? \"glass-surface-success\" : \"glass-surface-muted\"\n              )}\n              onClick={() => updateConfig({ enabled: !config.enabled })}\n              whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n              transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n              aria-label={\n                config.enabled\n                  ? \"Disable auto-adaptation\"\n                  : \"Enable auto-adaptation\"\n              }\n            >\n              <motion.div\n                className={cn(\n                  \"glass-w-4 glass-h-4 glass-surface-light glass-radius-full\"\n                )}\n                animate={\n                  prefersReducedMotion ? {} : { x: config.enabled ? 24 : 0 }\n                }\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : { duration: ANIMATION.DURATION.normal / 1000 }\n                }\n              />\n            </motion.button>\n          </div>\n        </div>\n      </ContrastGuard>\n    </motion.div>\n  );\n};\n\n// Main component wrapper for testing and simple usage\nexport function IntelligentColorSystem({\n  children,\n  className,\n  colors = [],\n  ...props\n}: {\n  children?: React.ReactNode;\n  className?: string;\n  colors?: string[];\n} & React.HTMLAttributes<HTMLDivElement>) {\n  return (\n    <IntelligentColorProvider>\n      <div className={className} {...props}>\n        {children || <ColorAdaptationDemo />}\n      </div>\n    </IntelligentColorProvider>\n  );\n}\n\nexport default IntelligentColorProvider;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Meta-Engine\n * Self-Evolving Glass Framework that analyzes its own usage and optimizes in real-time\n * Part of Next-Wave Systems (10/10) - Meta-Systems Framework\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Meta-engine data types\ninterface SystemUsageMetric {\n  systemId: string;\n  componentType: string;\n  usageCount: number;\n  performanceMetrics: {\n    renderTime: number;\n    memoryUsage: number;\n    interactionLatency: number;\n    errorRate: number;\n  };\n  userSatisfactionScore: number;\n  timestamp: number;\n  context: {\n    deviceType: \"mobile\" | \"tablet\" | \"desktop\";\n    browserEngine: string;\n    networkCondition: \"fast\" | \"moderate\" | \"slow\";\n    batteryLevel?: number;\n  };\n}\n\ninterface SystemOptimization {\n  id: string;\n  targetSystem: string;\n  optimizationType:\n    | \"performance\"\n    | \"memory\"\n    | \"battery\"\n    | \"network\"\n    | \"accessibility\"\n    | \"user-experience\";\n  description: string;\n  impact: number;\n  confidence: number;\n  implementation: string;\n  estimatedGain: {\n    performance?: string;\n    memory?: string;\n    battery?: string;\n    userExperience?: string;\n  };\n  priority: \"low\" | \"medium\" | \"high\" | \"critical\";\n  autoApplyable: boolean;\n}\n\ninterface SystemEvolution {\n  id: string;\n  evolutionType:\n    | \"feature-enhancement\"\n    | \"performance-boost\"\n    | \"adaptive-learning\"\n    | \"emergent-behavior\";\n  description: string;\n  affectedSystems: string[];\n  evolutionStage:\n    | \"detected\"\n    | \"analyzing\"\n    | \"testing\"\n    | \"implementing\"\n    | \"complete\";\n  confidence: number;\n  potentialImpact: number;\n}\n\ninterface GlassSystemHealth {\n  systemId: string;\n  healthScore: number;\n  issues: Array<{\n    type:\n      | \"performance\"\n      | \"memory-leak\"\n      | \"accessibility\"\n      | \"user-friction\"\n      | \"compatibility\";\n    severity: \"low\" | \"medium\" | \"high\" | \"critical\";\n    description: string;\n    autoFixable: boolean;\n  }>;\n  recommendations: string[];\n  trend: \"improving\" | \"stable\" | \"declining\";\n}\n\ntype GlassHealthIssue = GlassSystemHealth[\"issues\"][number];\ntype SystemOptimizationType = SystemOptimization[\"optimizationType\"];\n\n// Advanced quantum-inspired optimization algorithm\nclass QuantumOptimizer {\n  private quantumStates: Map<string, number[]>;\n  private entanglementMatrix: number[][];\n  private observationHistory: Array<{ state: string; outcome: number }>;\n\n  constructor() {\n    this.quantumStates = new Map();\n    this.entanglementMatrix = [];\n    this.observationHistory = [];\n  }\n\n  createQuantumState(systemId: string, dimensions: number): void {\n    // Initialize quantum state as probability amplitudes\n    const state = Array.from({ length: dimensions }, () => Math.random() - 0.5);\n    const norm = Math.sqrt(state.reduce((sum, val) => sum + val * val, 0));\n    this.quantumStates.set(\n      systemId,\n      state.map((val) => val / norm)\n    );\n  }\n\n  entangleSystems(system1: string, system2: string, strength: number): void {\n    const state1 = this.quantumStates.get(system1);\n    const state2 = this.quantumStates.get(system2);\n\n    if (state1 && state2) {\n      // Simulate quantum entanglement through correlated state updates\n      for (let i = 0; i < Math.min(state1.length, state2.length); i++) {\n        const correlation = strength * (Math.random() - 0.5);\n        state1[i] += correlation * state2[i];\n        state2[i] += correlation * state1[i];\n      }\n    }\n  }\n\n  observe(systemId: string): number {\n    const state = this.quantumStates.get(systemId);\n    if (!state) return 0;\n\n    // Collapse quantum state to measured value\n    const probabilities = state.map((amplitude) => amplitude * amplitude);\n    const random = Math.random();\n    let cumulative = 0;\n\n    for (let i = 0; i < probabilities.length; i++) {\n      cumulative += probabilities[i];\n      if (random < cumulative) {\n        this.observationHistory.push({\n          state: systemId,\n          outcome: i / probabilities.length,\n        });\n        return i / probabilities.length;\n      }\n    }\n\n    return 0;\n  }\n\n  evolveStates(): void {\n    // Quantum evolution based on Schr\u00F6dinger equation simulation\n    this.quantumStates.forEach((state, systemId) => {\n      const evolutionMatrix = this.generateEvolutionMatrix(state.length);\n      const newState = this.applyMatrix(evolutionMatrix, state);\n      this.quantumStates.set(systemId, newState);\n    });\n  }\n\n  private generateEvolutionMatrix(size: number): number[][] {\n    const matrix = Array.from({ length: size }, () => Array(size).fill(0));\n\n    for (let i = 0; i < size; i++) {\n      for (let j = 0; j < size; j++) {\n        matrix[i][j] =\n          Math.cos(0.1 * (i - j)) * Math.exp(-0.01 * (i - j) * (i - j));\n      }\n    }\n\n    return matrix;\n  }\n\n  private applyMatrix(matrix: number[][], state: number[]): number[] {\n    return matrix.map((row) =>\n      row.reduce((sum, val, idx) => sum + val * state[idx], 0)\n    );\n  }\n}\n\n// Self-healing neural network for system optimization\nclass SelfHealingNetwork {\n  private topology: number[];\n  private weights: number[][][];\n  private biases: number[][];\n  private healthScores: number[];\n  private redundantNodes: Map<string, number[]>;\n\n  constructor(topology: number[]) {\n    this.topology = topology;\n    this.weights = [];\n    this.biases = [];\n    this.healthScores = [];\n    this.redundantNodes = new Map();\n\n    this.initializeNetwork();\n  }\n\n  private initializeNetwork(): void {\n    for (let i = 0; i < this.topology.length - 1; i++) {\n      const layerWeights = Array.from({ length: this.topology[i + 1] }, () =>\n        Array.from({ length: this.topology[i] }, () => Math.random() * 2 - 1)\n      );\n      this.weights.push(layerWeights);\n\n      const layerBiases = Array.from(\n        { length: this.topology[i + 1] },\n        () => Math.random() * 2 - 1\n      );\n      this.biases.push(layerBiases);\n\n      this.healthScores.push(...Array(this.topology[i + 1]).fill(1.0));\n    }\n  }\n\n  forward(input: number[]): number[] {\n    let activation = input;\n\n    for (let layer = 0; layer < this.weights.length; layer++) {\n      const newActivation = [];\n\n      for (let node = 0; node < this.weights[layer].length; node++) {\n        let sum = this.biases[layer][node];\n\n        for (let prevNode = 0; prevNode < activation.length; prevNode++) {\n          sum += this.weights[layer][node][prevNode] * activation[prevNode];\n        }\n\n        // Apply health-adjusted activation\n        const healthFactor =\n          this.healthScores[layer * this.topology[layer] + node] || 1.0;\n        newActivation.push(this.relu(sum) * healthFactor);\n      }\n\n      activation = newActivation;\n    }\n\n    return activation;\n  }\n\n  private relu(x: number): number {\n    return Math.max(0, x);\n  }\n\n  diagnoseHealth(): void {\n    // Monitor for degraded nodes\n    this.healthScores = this.healthScores.map((health, index) => {\n      const degradation = Math.random() * 0.01; // Simulate gradual degradation\n      return Math.max(0.1, health - degradation);\n    });\n  }\n\n  healNetwork(): void {\n    // Replace unhealthy nodes with redundant ones\n    this.healthScores.forEach((health, index) => {\n      if (health < 0.5) {\n        this.regenerateNode(index);\n      }\n    });\n  }\n\n  private regenerateNode(nodeIndex: number): void {\n    const layerIndex = Math.floor(\n      nodeIndex / this.topology.reduce((sum, size) => sum + size, 0)\n    );\n    const nodeInLayer = nodeIndex % this.topology[layerIndex];\n\n    // Reinitialize weights and biases for the damaged node\n    if (this.weights[layerIndex] && this.weights[layerIndex][nodeInLayer]) {\n      this.weights[layerIndex][nodeInLayer] = this.weights[layerIndex][\n        nodeInLayer\n      ].map(() => Math.random() * 2 - 1);\n    }\n\n    if (\n      this.biases[layerIndex] &&\n      this.biases[layerIndex][nodeInLayer] !== undefined\n    ) {\n      this.biases[layerIndex][nodeInLayer] = Math.random() * 2 - 1;\n    }\n\n    this.healthScores[nodeIndex] = 1.0;\n  }\n}\n\n// Main meta-engine class\nclass GlassMetaEngineCore {\n  private systemMetrics: Map<string, SystemUsageMetric[]>;\n  private optimizations: SystemOptimization[];\n  private evolutions: SystemEvolution[];\n  private systemHealth: Map<string, GlassSystemHealth>;\n  private quantumOptimizer: QuantumOptimizer;\n  private selfHealingNetwork: SelfHealingNetwork;\n  private evolutionStage: number;\n  private learningRate: number;\n\n  constructor() {\n    this.systemMetrics = new Map();\n    this.optimizations = [];\n    this.evolutions = [];\n    this.systemHealth = new Map();\n    this.quantumOptimizer = new QuantumOptimizer();\n    this.selfHealingNetwork = new SelfHealingNetwork([20, 40, 20, 10]);\n    this.evolutionStage = 0;\n    this.learningRate = 0.001;\n\n    this.initializeEvolution();\n    this.startEvolutionCycle();\n  }\n\n  private initializeEvolution(): void {\n    // Initialize quantum states for known glass systems\n    const glassSystems = [\n      \"GlassPhysicsEngine\",\n      \"GlassMorphingEngine\",\n      \"Glass3DEngine\",\n      \"OrganicAnimationEngine\",\n      \"EmotionalIntelligenceEngine\",\n      \"SpatialComputingEngine\",\n      \"AIPersonalizationEngine\",\n    ];\n\n    glassSystems.forEach((system) => {\n      this.quantumOptimizer.createQuantumState(system, 8);\n      this.systemHealth.set(system, {\n        systemId: system,\n        healthScore: 1.0,\n        issues: [],\n        recommendations: [],\n        trend: \"stable\",\n      });\n    });\n\n    // Create quantum entanglements between related systems\n    this.quantumOptimizer.entangleSystems(\n      \"GlassPhysicsEngine\",\n      \"Glass3DEngine\",\n      0.7\n    );\n    this.quantumOptimizer.entangleSystems(\n      \"EmotionalIntelligenceEngine\",\n      \"OrganicAnimationEngine\",\n      0.8\n    );\n    this.quantumOptimizer.entangleSystems(\n      \"SpatialComputingEngine\",\n      \"Glass3DEngine\",\n      0.6\n    );\n  }\n\n  private startEvolutionCycle(): void {\n    // Continuous evolution cycle\n    setInterval(() => {\n      this.evolveSystem();\n    }, ANIMATION.DURATION.slower); // Every 5 seconds\n\n    // Health monitoring cycle\n    setInterval(() => {\n      this.monitorSystemHealth();\n    }, ANIMATION.DURATION.slower * 2); // Every 10 seconds\n\n    // Neural network healing\n    setInterval(() => {\n      this.selfHealingNetwork.diagnoseHealth();\n      this.selfHealingNetwork.healNetwork();\n    }, ANIMATION.DURATION.slower * 6); // Every 30 seconds\n  }\n\n  recordSystemUsage(metric: SystemUsageMetric): void {\n    if (!this.systemMetrics.has(metric.systemId)) {\n      this.systemMetrics.set(metric.systemId, []);\n    }\n\n    const systemMetrics = this.systemMetrics.get(metric.systemId)!;\n    systemMetrics.push(metric);\n\n    // Keep only recent metrics (last 1000)\n    if (systemMetrics.length > 1000) {\n      systemMetrics.splice(0, systemMetrics.length - 1000);\n    }\n\n    this.analyzeMetrics(metric.systemId);\n    this.generateOptimizations(metric.systemId);\n  }\n\n  private analyzeMetrics(systemId: string): void {\n    const metrics = this.systemMetrics.get(systemId);\n    if (!metrics || metrics.length < 10) return;\n\n    const recent = metrics.slice(-50);\n    const avgPerformance =\n      recent.reduce((sum, m) => sum + m.performanceMetrics.renderTime, 0) /\n      recent.length;\n    const avgMemory =\n      recent.reduce((sum, m) => sum + m.performanceMetrics.memoryUsage, 0) /\n      recent.length;\n    const avgSatisfaction =\n      recent.reduce((sum, m) => sum + m.userSatisfactionScore, 0) /\n      recent.length;\n\n    // Update system health\n    const health = this.systemHealth.get(systemId);\n    if (health) {\n      const newHealthScore = this.calculateHealthScore(\n        avgPerformance,\n        avgMemory,\n        avgSatisfaction\n      );\n      health.healthScore = newHealthScore;\n      health.trend =\n        newHealthScore > health.healthScore\n          ? \"improving\"\n          : newHealthScore < health.healthScore\n            ? \"declining\"\n            : \"stable\";\n\n      // Identify issues\n      if (avgPerformance > 100) {\n        health.issues.push({\n          type: \"performance\",\n          severity: avgPerformance > 200 ? \"high\" : \"medium\",\n          description: `Average render time is ${avgPerformance.toFixed(1)}ms`,\n          autoFixable: true,\n        });\n      }\n\n      if (avgMemory > 50) {\n        health.issues.push({\n          type: \"memory-leak\",\n          severity: avgMemory > 100 ? \"critical\" : \"medium\",\n          description: `High memory usage detected: ${avgMemory.toFixed(1)}MB`,\n          autoFixable: false,\n        });\n      }\n\n      if (avgSatisfaction < 0.7) {\n        health.issues.push({\n          type: \"user-friction\",\n          severity: avgSatisfaction < 0.5 ? \"high\" : \"medium\",\n          description: `User satisfaction below threshold: ${(avgSatisfaction * 100).toFixed(1)}%`,\n          autoFixable: true,\n        });\n      }\n    }\n  }\n\n  private calculateHealthScore(\n    performance: number,\n    memory: number,\n    satisfaction: number\n  ): number {\n    const perfScore = Math.max(0, 1 - performance / 200);\n    const memScore = Math.max(0, 1 - memory / 100);\n    const satScore = satisfaction;\n\n    return perfScore * 0.3 + memScore * 0.2 + satScore * 0.5;\n  }\n\n  private generateOptimizations(systemId: string): void {\n    const health = this.systemHealth.get(systemId);\n    if (!health || health.healthScore > 0.8) return;\n\n    // Generate optimization based on identified issues\n    health.issues.forEach((issue) => {\n      const optimization = this.createOptimization(systemId, issue);\n      if (optimization) {\n        this.optimizations.push(optimization);\n      }\n    });\n\n    // Use neural network to predict optimal configurations\n    const metrics = this.systemMetrics.get(systemId);\n    if (metrics && metrics.length > 20) {\n      const input = this.metricsToVector(metrics.slice(-10));\n      const neuralOutput = this.selfHealingNetwork.forward(input);\n\n      const aiOptimization = this.interpretNeuralOutput(systemId, neuralOutput);\n      if (aiOptimization) {\n        this.optimizations.push(aiOptimization);\n      }\n    }\n  }\n\n  private createOptimization(\n    systemId: string,\n    issue: GlassHealthIssue\n  ): SystemOptimization | null {\n    const optimizationId = `opt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n    switch (issue.type) {\n      case \"performance\":\n        return {\n          id: optimizationId,\n          targetSystem: systemId,\n          optimizationType: \"performance\",\n          description: \"Implement render optimization and frame batching\",\n          impact: 0.8,\n          confidence: 0.9,\n          implementation:\n            'enableFrameBatching: true, renderOptimization: \"aggressive\"',\n          estimatedGain: {\n            performance: \"40-60% faster rendering\",\n            userExperience: \"Smoother animations\",\n          },\n          priority: \"high\",\n          autoApplyable: true,\n        };\n\n      case \"memory-leak\":\n        return {\n          id: optimizationId,\n          targetSystem: systemId,\n          optimizationType: \"memory\",\n          description:\n            \"Enable garbage collection optimization and memory pooling\",\n          impact: 0.7,\n          confidence: 0.8,\n          implementation: 'memoryPooling: true, gcOptimization: \"aggressive\"',\n          estimatedGain: {\n            memory: \"30-50% reduction in memory usage\",\n            performance: \"Reduced GC pauses\",\n          },\n          priority: \"medium\",\n          autoApplyable: false,\n        };\n\n      case \"user-friction\":\n        return {\n          id: optimizationId,\n          targetSystem: systemId,\n          optimizationType: \"user-experience\",\n          description:\n            \"Adaptive UI optimization based on user behavior patterns\",\n          impact: 0.6,\n          confidence: 0.75,\n          implementation: 'adaptiveUI: true, behaviorLearning: \"enhanced\"',\n          estimatedGain: {\n            userExperience: \"Improved interaction flow\",\n            performance: \"Predictive loading\",\n          },\n          priority: \"medium\",\n          autoApplyable: true,\n        };\n    }\n\n    return null;\n  }\n\n  private interpretNeuralOutput(\n    systemId: string,\n    output: number[]\n  ): SystemOptimization | null {\n    const maxIndex = output.indexOf(Math.max(...output));\n    const confidence = output[maxIndex];\n\n    if (confidence < 0.6) return null;\n\n    const optimizationTypes: SystemOptimizationType[] = [\n      \"performance\",\n      \"memory\",\n      \"battery\",\n      \"network\",\n      \"accessibility\",\n    ];\n    const type = optimizationTypes[maxIndex % optimizationTypes.length];\n\n    return {\n      id: `neural_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n      targetSystem: systemId,\n      optimizationType: type,\n      description: `AI-suggested ${type} optimization`,\n      impact: confidence,\n      confidence,\n      implementation: `neuralOptimization: {type: \"${type}\", strength: ${confidence.toFixed(2)}}`,\n      estimatedGain: {\n        [type]: `${(confidence * 50).toFixed(0)}% improvement expected`,\n      },\n      priority: confidence > 0.8 ? \"high\" : \"medium\",\n      autoApplyable: confidence > 0.9,\n    };\n  }\n\n  private metricsToVector(metrics: SystemUsageMetric[]): number[] {\n    const vector = new Array(20).fill(0);\n\n    metrics.forEach((metric, index) => {\n      if (index < 5) {\n        vector[index * 4] = metric.performanceMetrics.renderTime / 200;\n        vector[index * 4 + 1] = metric.performanceMetrics.memoryUsage / 100;\n        vector[index * 4 + 2] =\n          metric.performanceMetrics.interactionLatency / 50;\n        vector[index * 4 + 3] = metric.userSatisfactionScore;\n      }\n    });\n\n    return vector;\n  }\n\n  private evolveSystem(): void {\n    this.evolutionStage++;\n\n    // Quantum evolution\n    this.quantumOptimizer.evolveStates();\n\n    // Analyze system correlations for emergent behaviors\n    this.detectEmergentBehaviors();\n\n    // Apply successful optimizations\n    this.applyOptimizations();\n\n    // Generate system evolutions\n    this.generateEvolutions();\n  }\n\n  private detectEmergentBehaviors(): void {\n    const systems = Array.from(this.systemMetrics.keys());\n\n    for (let i = 0; i < systems.length; i++) {\n      for (let j = i + 1; j < systems.length; j++) {\n        const correlation = this.calculateSystemCorrelation(\n          systems[i],\n          systems[j]\n        );\n\n        if (correlation > 0.8) {\n          const evolution: SystemEvolution = {\n            id: `emergence_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n            evolutionType: \"emergent-behavior\",\n            description: `Strong correlation detected between ${systems[i]} and ${systems[j]}`,\n            affectedSystems: [systems[i], systems[j]],\n            evolutionStage: \"detected\",\n            confidence: correlation,\n            potentialImpact: 0.7,\n          };\n\n          this.evolutions.push(evolution);\n        }\n      }\n    }\n  }\n\n  private calculateSystemCorrelation(system1: string, system2: string): number {\n    const metrics1 = this.systemMetrics.get(system1)?.slice(-20);\n    const metrics2 = this.systemMetrics.get(system2)?.slice(-20);\n\n    if (!metrics1 || !metrics2 || metrics1.length < 10 || metrics2.length < 10)\n      return 0;\n\n    // Simple correlation calculation\n    const perf1 = metrics1.map((m) => m.performanceMetrics.renderTime);\n    const perf2 = metrics2.map((m) => m.performanceMetrics.renderTime);\n\n    const mean1 = perf1.reduce((sum, val) => sum + val, 0) / perf1.length;\n    const mean2 = perf2.reduce((sum, val) => sum + val, 0) / perf2.length;\n\n    let numerator = 0;\n    let denom1 = 0;\n    let denom2 = 0;\n\n    for (let i = 0; i < Math.min(perf1.length, perf2.length); i++) {\n      const diff1 = perf1[i] - mean1;\n      const diff2 = perf2[i] - mean2;\n      numerator += diff1 * diff2;\n      denom1 += diff1 * diff1;\n      denom2 += diff2 * diff2;\n    }\n\n    const correlation = numerator / Math.sqrt(denom1 * denom2);\n    return Math.abs(correlation);\n  }\n\n  private applyOptimizations(): void {\n    const autoApplyable = this.optimizations.filter(\n      (opt) => opt.autoApplyable && opt.confidence > 0.8\n    );\n\n    autoApplyable.forEach((optimization) => {\n      // Simulate applying optimization\n      // Update system health after optimization\n      const health = this.systemHealth.get(optimization.targetSystem);\n      if (health) {\n        health.healthScore = Math.min(\n          1.0,\n          health.healthScore + optimization.impact * 0.1\n        );\n        health.issues = health.issues.filter(\n          (issue) =>\n            issue.type !== optimization.optimizationType || !issue.autoFixable\n        );\n      }\n    });\n\n    // Remove applied optimizations\n    this.optimizations = this.optimizations.filter(\n      (opt) => !autoApplyable.includes(opt)\n    );\n  }\n\n  private generateEvolutions(): void {\n    if (this.evolutionStage % 10 === 0) {\n      // Every 10 evolution cycles\n      const evolution: SystemEvolution = {\n        id: `evo_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n        evolutionType: \"adaptive-learning\",\n        description: \"Enhanced learning algorithm deployment\",\n        affectedSystems: Array.from(this.systemMetrics.keys()),\n        evolutionStage: \"detected\",\n        confidence: 0.75 + Math.random() * 0.2,\n        potentialImpact: 0.6 + Math.random() * 0.3,\n      };\n\n      this.evolutions.push(evolution);\n    }\n  }\n\n  private monitorSystemHealth(): void {\n    this.systemHealth.forEach((health, systemId) => {\n      // Auto-heal critical issues\n      const criticalIssues = health.issues.filter(\n        (issue) => issue.severity === \"critical\"\n      );\n\n      if (criticalIssues.length > 0) {\n        criticalIssues.forEach((issue) => {\n          if (issue.autoFixable) {\n            // Apply emergency healing\n            health.healthScore = Math.max(health.healthScore, 0.5);\n          }\n        });\n      }\n    });\n  }\n\n  // Public API\n  getSystemMetrics(): Map<string, SystemUsageMetric[]> {\n    return new Map(this.systemMetrics);\n  }\n\n  getOptimizations(): SystemOptimization[] {\n    return [...this.optimizations];\n  }\n\n  getEvolutions(): SystemEvolution[] {\n    return [...this.evolutions];\n  }\n\n  getSystemHealth(): Map<string, GlassSystemHealth> {\n    return new Map(this.systemHealth);\n  }\n\n  getQuantumStates(): Array<{ system: string; coherence: number }> {\n    return Array.from(this.systemHealth.keys()).map((system) => ({\n      system,\n      coherence: this.quantumOptimizer.observe(system),\n    }));\n  }\n}\n\n// React Context for the meta-engine\nconst GlassMetaEngineContext = createContext<{\n  engine: GlassMetaEngineCore | null;\n  recordUsage: (metric: SystemUsageMetric) => void;\n  optimizations: SystemOptimization[];\n  evolutions: SystemEvolution[];\n  systemHealth: Map<string, GlassSystemHealth>;\n}>({\n  engine: null,\n  recordUsage: () => {},\n  optimizations: [],\n  evolutions: [],\n  systemHealth: new Map(),\n});\n\n// Provider component\nexport function GlassMetaEngineProvider({\n  children,\n  onEvolution,\n  onOptimization,\n}: {\n  children: React.ReactNode;\n  onEvolution?: (evolution: SystemEvolution) => void;\n  onOptimization?: (optimization: SystemOptimization) => void;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<GlassMetaEngineCore>();\n  const [optimizations, setOptimizations] = useState<SystemOptimization[]>([]);\n  const [evolutions, setEvolutions] = useState<SystemEvolution[]>([]);\n  const [systemHealth, setSystemHealth] = useState<\n    Map<string, GlassSystemHealth>\n  >(new Map());\n\n  // Initialize engine\n  useEffect(() => {\n    engineRef.current = new GlassMetaEngineCore();\n\n    // Update state periodically\n    const updateInterval = setInterval(() => {\n      if (engineRef.current) {\n        const newOptimizations = engineRef.current.getOptimizations();\n        const newEvolutions = engineRef.current.getEvolutions();\n        const newHealth = engineRef.current.getSystemHealth();\n\n        setOptimizations(newOptimizations);\n        setEvolutions(newEvolutions);\n        setSystemHealth(newHealth);\n\n        // Trigger callbacks\n        newOptimizations.forEach((opt) => onOptimization?.(opt));\n        newEvolutions.forEach((evo) => onEvolution?.(evo));\n      }\n    }, ANIMATION.DURATION.fast);\n\n    return () => clearInterval(updateInterval);\n  }, [onEvolution, onOptimization]);\n\n  const recordUsage = useCallback((metric: SystemUsageMetric) => {\n    engineRef.current?.recordSystemUsage(metric);\n  }, []);\n\n  const value = {\n    engine: engineRef.current || null,\n    recordUsage,\n    optimizations,\n    evolutions,\n    systemHealth,\n  };\n\n  return (\n    <GlassMetaEngineContext.Provider value={value}>\n      {children}\n    </GlassMetaEngineContext.Provider>\n  );\n}\n\n// Hook to use the meta-engine\nexport function useGlassMetaEngine() {\n  const context = useContext(GlassMetaEngineContext);\n  if (!context) {\n    throw new Error(\n      \"useGlassMetaEngine must be used within GlassMetaEngineProvider\"\n    );\n  }\n  return context;\n}\n\n// Export GlassMetaEngine as an alias for GlassMetaDashboard for backward compatibility\nexport const GlassMetaEngine = GlassMetaDashboard;\n\n// Meta-engine dashboard component\nexport function GlassMetaDashboard({\n  className,\n  showQuantumStates = true,\n  showEvolutions = true,\n  maxOptimizations = 10,\n}: {\n  className?: string;\n  showQuantumStates?: boolean;\n  showEvolutions?: boolean;\n  maxOptimizations?: number;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { optimizations, evolutions, systemHealth, engine } =\n    useGlassMetaEngine();\n  const [showDashboard, setShowDashboard] = useState(false);\n  const [quantumStates, setQuantumStates] = useState<\n    Array<{ system: string; coherence: number }>\n  >([]);\n\n  // Update quantum states\n  useEffect(() => {\n    if (engine && showQuantumStates) {\n      const updateStates = () => {\n        setQuantumStates(engine.getQuantumStates());\n      };\n\n      updateStates();\n      const interval = setInterval(updateStates, ANIMATION.DURATION.normal);\n      return () => clearInterval(interval);\n    }\n  }, [engine, showQuantumStates]);\n\n  const topOptimizations = optimizations.slice(0, maxOptimizations);\n  const criticalEvolutions = evolutions.filter((evo) => evo.confidence > 0.8);\n\n  return (\n    <div className={cn(\"fixed bottom-4 right-4 z-50\", className)}>\n      {/* Meta-engine indicator */}\n      <motion.button\n        className={cn(\n          \"w-14 glass-h-14 glass-radius-full glass-surface-primary glass-elev-4\",\n          \"flex items-center justify-center glass-text-primary\",\n          \"transition-all glass-hover-scale-105\",\n          { transitionDuration: \"var(--glass-motion-duration-normal)\" },\n          \"relative overflow-hidden\"\n        )}\n        onClick={() => setShowDashboard(!showDashboard)}\n        whileHover={prefersReducedMotion ? {} : { scale: 1.05 }}\n        whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n        transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n        aria-label=\"Toggle Meta-Engine dashboard\"\n        aria-expanded={showDashboard}\n      >\n        {/* Quantum coherence visualization */}\n        <div className=\"glass-absolute glass-inset-0 glass-opacity-20\">\n          {quantumStates.map((state, index) => (\n            <motion.div\n              key={state.system}\n              className=\"glass-absolute glass-w-1 glass-h-1 glass-surface-blue glass-radius-full\"\n              animate={\n                prefersReducedMotion\n                  ? {}\n                  : {\n                      x: Math.cos(index * 0.8) * 20 + 20,\n                      y: Math.sin(index * 0.8) * 20 + 20,\n                      opacity: state.coherence,\n                    }\n              }\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : {\n                      duration: ANIMATION.DURATION.slower / 1000,\n                      repeat: Infinity,\n                      ease: ANIMATION.EASING.linear,\n                    }\n              }\n            />\n          ))}\n        </div>\n\n        <div className=\"glass-relative glass-z-10\">\n          \uD83E\uDDEC\n          {optimizations.length > 0 && (\n            <motion.div\n              className=\"glass-absolute glass--top-2 glass--right-2 glass-w-4 glass-h-4 glass-surface-green glass-radius-full glass-text-xs glass-text-primary glass-flex glass-items-center glass-justify-center\"\n              initial={{ scale: 0 }}\n              animate={prefersReducedMotion ? {} : { scale: 1 }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: ANIMATION.DURATION.normal / 1000 }\n              }\n            >\n              {optimizations.length}\n            </motion.div>\n          )}\n        </div>\n      </motion.button>\n\n      {/* Meta-engine dashboard */}\n      <AnimatePresence>\n        {showDashboard && (\n          <motion.div\n            className={cn(\n              \"absolute bottom-16 right-0 w-96 glass-max-h-80vh overflow-y-auto\",\n              \"glass-surface-primary glass-elev-5 glass-radius-lg glass-p-6 glass-gap-4\"\n            )}\n            initial={{ opacity: 0, y: 10, scale: 0.95 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: 10, scale: 0.95 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n            role=\"dialog\"\n            aria-label=\"Meta-Engine dashboard\"\n          >\n            <ContrastGuard>\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                  Meta-Engine Dashboard\n                </h3>\n                <button\n                  onClick={() => setShowDashboard(false)}\n                  className=\"glass-text-sm glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target\"\n                  aria-label=\"Close Meta-Engine dashboard\"\n                >\n                  \u2715\n                </button>\n              </div>\n\n              {/* System Health Overview */}\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  System Health\n                </h4>\n                <div className=\"glass-grid glass-grid-cols-1 glass-gap-2\">\n                  {Array.from(systemHealth.entries()).map(\n                    ([systemId, health]) => (\n                      <motion.div\n                        key={systemId}\n                        className=\"glass-p-3 glass-surface-secondary glass-radius-md\"\n                        initial={{ opacity: 0, x: -10 }}\n                        animate={\n                          prefersReducedMotion ? {} : { opacity: 1, x: 0 }\n                        }\n                      >\n                        <div className=\"glass-flex glass-items-center glass-justify-between\">\n                          <span className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                            {systemId.replace(\"Glass\", \"\")}\n                          </span>\n                          <div className=\"glass-flex glass-items-center glass-gap-2\">\n                            <div\n                              className=\"glass-w-3 glass-h-3 glass-radius-full\"\n                              style={{\n                                backgroundColor:\n                                  health.healthScore > 0.8\n                                    ? \"hsl(var(--glass-color-success))\"\n                                    : health.healthScore > 0.6\n                                      ? \"hsl(var(--glass-color-warning))\"\n                                      : \"hsl(var(--glass-color-danger))\",\n                              }}\n                            />\n                            <span className=\"glass-text-xs glass-text-secondary\">\n                              {(health.healthScore * 100).toFixed(0)}%\n                            </span>\n                          </div>\n                        </div>\n                        {health.issues.length > 0 && (\n                          <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                            {health.issues.length} issue\n                            {health.issues.length !== 1 ? \"s\" : \"\"} detected\n                          </div>\n                        )}\n                      </motion.div>\n                    )\n                  )}\n                </div>\n              </div>\n\n              {/* Quantum States */}\n              {showQuantumStates && quantumStates.length > 0 && (\n                <div className=\"glass-gap-2\">\n                  <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                    Quantum Coherence\n                  </h4>\n                  <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n                    {quantumStates.map((state) => (\n                      <div\n                        key={state.system}\n                        className=\"glass-p-2 glass-surface-secondary glass-radius-sm\"\n                      >\n                        <div className=\"glass-text-xs glass-text-primary glass-font-medium\">\n                          {state.system.replace(\"Glass\", \"\")}\n                        </div>\n                        <div className=\"glass-mt-1 glass-flex glass-items-center glass-gap-2\">\n                          <div className=\"glass-flex-1 glass-surface-subtle glass-radius-full glass-h-2\">\n                            <motion.div\n                              className=\"glass-h-2 glass-surface-blue glass-radius-full\"\n                              initial={{ width: 0 }}\n                              animate={{ width: `${state.coherence * 100}%` }}\n                              transition={\n                                prefersReducedMotion\n                                  ? { duration: 0 }\n                                  : { duration: ANIMATION.DURATION.slow / 1000 }\n                              }\n                            />\n                          </div>\n                          <span className=\"glass-text-xs glass-text-secondary\">\n                            {(state.coherence * 100).toFixed(0)}%\n                          </span>\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              )}\n\n              {/* Active Optimizations */}\n              {topOptimizations.length > 0 && (\n                <div className=\"glass-gap-2\">\n                  <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                    Active Optimizations\n                  </h4>\n                  {topOptimizations.map((optimization) => (\n                    <motion.div\n                      key={optimization.id}\n                      className=\"glass-p-3 glass-surface-secondary glass-radius-md\"\n                      initial={{ opacity: 0, x: -10 }}\n                      animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n                    >\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                          {optimization.targetSystem.replace(\"Glass\", \"\")}\n                        </span>\n                        <div className=\"glass-flex glass-items-center glass-gap-1\">\n                          <div\n                            className=\"glass-w-2 glass-h-2 glass-radius-full\"\n                            style={{\n                              backgroundColor:\n                                optimization.priority === \"critical\"\n                                  ? \"var(--glass-color-danger-dark)\"\n                                  : optimization.priority === \"high\"\n                                    ? \"hsl(var(--glass-color-warning))\"\n                                    : optimization.priority === \"medium\"\n                                      ? \"hsl(var(--glass-color-success))\"\n                                      : \"var(--glass-gray-500)\",\n                            }}\n                          />\n                          <span className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n                            {optimization.priority}\n                          </span>\n                        </div>\n                      </div>\n                      <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                        {optimization.description}\n                      </div>\n                      <div className=\"glass-mt-2 glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n                          {optimization.optimizationType}\n                        </span>\n                        <span className=\"glass-text-xs glass-text-secondary\">\n                          Impact: {(optimization.impact * 100).toFixed(0)}%\n                        </span>\n                      </div>\n                    </motion.div>\n                  ))}\n                </div>\n              )}\n\n              {/* System Evolutions */}\n              {showEvolutions && criticalEvolutions.length > 0 && (\n                <div className=\"glass-gap-2\">\n                  <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                    System Evolutions\n                  </h4>\n                  {criticalEvolutions.slice(0, 3).map((evolution) => (\n                    <motion.div\n                      key={evolution.id}\n                      className=\"glass-p-3 glass-surface-secondary glass-radius-md\"\n                      initial={{ opacity: 0, x: -10 }}\n                      animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n                    >\n                      <div className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                        {evolution.evolutionType.replace(\"-\", \" \")}\n                      </div>\n                      <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                        {evolution.description}\n                      </div>\n                      <div className=\"glass-mt-2 glass-flex glass-items-center glass-justify-between\">\n                        <span className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n                          {evolution.evolutionStage}\n                        </span>\n                        <span className=\"glass-text-xs glass-text-secondary\">\n                          {(evolution.confidence * 100).toFixed(0)}% confidence\n                        </span>\n                      </div>\n                    </motion.div>\n                  ))}\n                </div>\n              )}\n\n              {optimizations.length === 0 && evolutions.length === 0 && (\n                <div className=\"glass-text-center glass-text-sm glass-text-secondary glass-py-8\">\n                  System operating at optimal parameters\n                  <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                    Meta-engine monitoring all systems...\n                  </div>\n                </div>\n              )}\n            </ContrastGuard>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Hook to automatically record system usage\nexport function useMetaEngineRecorder(systemId: string, componentType: string) {\n  const { recordUsage } = useGlassMetaEngine();\n  const startTimeRef = useRef<number>(Date.now());\n\n  const recordMetric = useCallback(\n    (userSatisfactionScore: number = 1.0) => {\n      const endTime = Date.now();\n      const renderTime = endTime - startTimeRef.current;\n      const runtimePerformance = globalThis.performance as Performance & {\n        memory?: { usedJSHeapSize: number };\n      };\n      const navigatorWithConnection = navigator as Navigator & {\n        connection?: { effectiveType?: string };\n      };\n      const effectiveType =\n        navigatorWithConnection.connection?.effectiveType || \"unknown\";\n      const networkCondition: SystemUsageMetric[\"context\"][\"networkCondition\"] =\n        effectiveType.includes(\"2g\")\n          ? \"slow\"\n          : effectiveType.includes(\"3g\")\n            ? \"moderate\"\n            : \"fast\";\n\n      recordUsage({\n        systemId,\n        componentType,\n        usageCount: 1,\n        performanceMetrics: {\n          renderTime,\n          memoryUsage:\n            (runtimePerformance.memory?.usedJSHeapSize ?? 0) / 1024 / 1024,\n          interactionLatency: 0,\n          errorRate: 0,\n        },\n        userSatisfactionScore,\n        timestamp: Date.now(),\n        context: {\n          deviceType:\n            window.innerWidth < 768\n              ? \"mobile\"\n              : window.innerWidth < 1024\n                ? \"tablet\"\n                : \"desktop\",\n          browserEngine: navigator.userAgent.includes(\"Chrome\")\n            ? \"Chromium\"\n            : navigator.userAgent.includes(\"Firefox\")\n              ? \"Gecko\"\n              : navigator.userAgent.includes(\"Safari\")\n                ? \"WebKit\"\n                : \"Unknown\",\n          networkCondition,\n        },\n      });\n\n      startTimeRef.current = Date.now();\n    },\n    [recordUsage, systemId, componentType]\n  );\n\n  // Auto-record on component mount/unmount\n  useEffect(() => {\n    recordMetric();\n    return () => recordMetric();\n  }, [recordMetric]);\n\n  return { recordMetric };\n}\n\n// Presets for different meta-engine configurations\nexport const metaEnginePresets = {\n  conservative: {\n    evolutionRate: 0.1,\n    optimizationThreshold: 0.8,\n    quantumCoherence: 0.5,\n    selfHealingEnabled: false,\n  },\n  balanced: {\n    evolutionRate: 0.5,\n    optimizationThreshold: 0.6,\n    quantumCoherence: 0.7,\n    selfHealingEnabled: true,\n  },\n  aggressive: {\n    evolutionRate: 0.9,\n    optimizationThreshold: 0.4,\n    quantumCoherence: 0.9,\n    selfHealingEnabled: true,\n  },\n  experimental: {\n    evolutionRate: 1.0,\n    optimizationThreshold: 0.2,\n    quantumCoherence: 1.0,\n    selfHealingEnabled: true,\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass NeuroSync System\n * Brain-computer interface hooks for EEG-based attention/focus feedback and neural UI adaptation\n * Part of Next-Wave Systems (10/10) - Multi-Sensory Integration\n *\n * @demo DEMO / EXPERIMENTAL COMPONENT \u2014 uses in-component mock data.\n * EEG/attention signals are simulated locally; this is NOT connected to a real\n * BCI/EEG device or neural-data stream. Wire it to a real device API before use.\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Neural signal types\ninterface EEGSignal {\n  timestamp: number;\n  channels: {\n    fp1: number; // Left frontal\n    fp2: number; // Right frontal\n    f3: number; // Left frontal\n    f4: number; // Right frontal\n    c3: number; // Left central\n    c4: number; // Right central\n    p3: number; // Left parietal\n    p4: number; // Right parietal\n    o1: number; // Left occipital\n    o2: number; // Right occipital\n  };\n  quality: number; // Signal quality 0-1\n}\n\ninterface NeuroMetrics {\n  attention: number; // 0-1, higher = more focused\n  relaxation: number; // 0-1, higher = more relaxed\n  meditation: number; // 0-1, higher = meditative state\n  engagement: number; // 0-1, higher = more engaged\n  cognitiveLoad: number; // 0-1, higher = more mental effort\n  fatigue: number; // 0-1, higher = more tired\n  stress: number; // 0-1, higher = more stressed\n  flow: number; // 0-1, higher = flow state\n}\n\ninterface NeuroAdaptation {\n  id: string;\n  trigger: NeuroMetrics;\n  adaptation: {\n    uiComplexity: \"minimal\" | \"standard\" | \"detailed\";\n    colorScheme: \"high-contrast\" | \"normal\" | \"low-contrast\";\n    animationIntensity: \"none\" | \"subtle\" | \"normal\" | \"enhanced\";\n    interactionStyle: \"passive\" | \"standard\" | \"proactive\";\n    contentDensity: \"sparse\" | \"normal\" | \"dense\";\n    cognitiveSupport: \"high\" | \"medium\" | \"low\";\n  };\n  confidence: number;\n  appliedAt?: number;\n}\n\ninterface BrainwavePatterns {\n  delta: number; // 0.5-4 Hz (deep sleep)\n  theta: number; // 4-8 Hz (meditation, creativity)\n  alpha: number; // 8-13 Hz (relaxed awareness)\n  beta: number; // 13-30 Hz (active thinking)\n  gamma: number; // 30-100 Hz (high-level cognitive function)\n}\n\ninterface NeuroFeedback {\n  type: \"attention\" | \"relaxation\" | \"meditation\" | \"engagement\" | \"flow\";\n  intensity: number;\n  duration: number;\n  visual: boolean;\n  audio: boolean;\n  haptic: boolean;\n}\n\n// EEG signal processing using digital signal processing techniques\nclass EEGProcessor {\n  private sampleRate: number;\n  private bufferSize: number;\n  private signalBuffer: EEGSignal[];\n  private filteredBuffer: Map<string, number[]>;\n  private bandpassFilters: Map<string, ButterworthFilter>;\n\n  constructor(sampleRate: number = 256) {\n    this.sampleRate = sampleRate;\n    this.bufferSize = sampleRate * 4; // 4 seconds of data\n    this.signalBuffer = [];\n    this.filteredBuffer = new Map();\n    this.bandpassFilters = new Map();\n\n    this.initializeFilters();\n  }\n\n  private initializeFilters(): void {\n    // Bandpass filters for different brainwave frequencies\n    this.bandpassFilters.set(\n      \"delta\",\n      new ButterworthFilter(0.5, 4, this.sampleRate, \"bandpass\")\n    );\n    this.bandpassFilters.set(\n      \"theta\",\n      new ButterworthFilter(4, 8, this.sampleRate, \"bandpass\")\n    );\n    this.bandpassFilters.set(\n      \"alpha\",\n      new ButterworthFilter(8, 13, this.sampleRate, \"bandpass\")\n    );\n    this.bandpassFilters.set(\n      \"beta\",\n      new ButterworthFilter(13, 30, this.sampleRate, \"bandpass\")\n    );\n    this.bandpassFilters.set(\n      \"gamma\",\n      new ButterworthFilter(30, 100, this.sampleRate, \"bandpass\")\n    );\n\n    // Initialize filtered buffers\n    Object.keys(this.bandpassFilters).forEach((band: any) => {\n      this.filteredBuffer.set(band, []);\n    });\n  }\n\n  processSignal(signal: EEGSignal): NeuroMetrics {\n    this.signalBuffer.push(signal);\n\n    // Maintain buffer size\n    if (this.signalBuffer.length > this.bufferSize) {\n      this.signalBuffer.shift();\n    }\n\n    // Apply filters and extract brainwave patterns\n    const brainwaves = this.extractBrainwavePatterns(signal);\n\n    // Calculate neural metrics\n    const metrics = this.calculateNeuroMetrics(brainwaves, signal);\n\n    return metrics;\n  }\n\n  private extractBrainwavePatterns(signal: EEGSignal): BrainwavePatterns {\n    const patterns: BrainwavePatterns = {\n      delta: 0,\n      theta: 0,\n      alpha: 0,\n      beta: 0,\n      gamma: 0,\n    };\n\n    // Average across all channels for simplicity\n    const channels = Object.values(signal.channels);\n    const avgSignal =\n      channels.reduce((sum, val) => sum + val, 0) / channels.length;\n\n    // Apply bandpass filters\n    this.bandpassFilters.forEach((filter, band) => {\n      const filtered = filter.process(avgSignal);\n      const buffer = this.filteredBuffer.get(band)!;\n      buffer.push(filtered);\n\n      // Maintain buffer size\n      if (buffer.length > 256) {\n        // 1 second of data\n        buffer.shift();\n      }\n\n      // Calculate power spectral density (simplified)\n      if (buffer.length >= 128) {\n        const power = this.calculatePowerSpectralDensity(buffer);\n        patterns[band as keyof BrainwavePatterns] = power;\n      }\n    });\n\n    return patterns;\n  }\n\n  private calculatePowerSpectralDensity(signal: number[]): number {\n    // Simplified PSD calculation using RMS\n    const mean = signal.reduce((sum, val) => sum + val, 0) / signal.length;\n    const rms = Math.sqrt(\n      signal.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) /\n        signal.length\n    );\n    return rms;\n  }\n\n  private calculateNeuroMetrics(\n    brainwaves: BrainwavePatterns,\n    signal: EEGSignal\n  ): NeuroMetrics {\n    // Advanced algorithms based on neuroscience research\n\n    // Attention (beta/theta ratio)\n    const attention = Math.min(\n      1,\n      Math.max(0, brainwaves.beta / (brainwaves.theta + 0.001))\n    );\n\n    // Relaxation (alpha prominence)\n    const relaxation = Math.min(\n      1,\n      brainwaves.alpha / (brainwaves.beta + brainwaves.gamma + 0.001)\n    );\n\n    // Meditation (theta/beta ratio with alpha component)\n    const meditation = Math.min(\n      1,\n      (brainwaves.theta + brainwaves.alpha) / (brainwaves.beta + 0.001)\n    );\n\n    // Engagement (beta + gamma activity)\n    const engagement = Math.min(1, (brainwaves.beta + brainwaves.gamma) / 2);\n\n    // Cognitive load (gamma activity with beta support)\n    const cognitiveLoad = Math.min(1, brainwaves.gamma + brainwaves.beta * 0.5);\n\n    // Fatigue (delta prominence during wake)\n    const fatigue = Math.min(\n      1,\n      brainwaves.delta / (brainwaves.alpha + brainwaves.beta + 0.001)\n    );\n\n    // Stress (high beta with low alpha)\n    const stress = Math.min(1, Math.max(0, brainwaves.beta - brainwaves.alpha));\n\n    // Flow state (balanced alpha/theta with moderate beta)\n    const alphaTheta = (brainwaves.alpha + brainwaves.theta) / 2;\n    const flow = Math.min(\n      1,\n      alphaTheta * (1 - Math.abs(brainwaves.beta - 0.3))\n    );\n\n    return {\n      attention: this.smoothMetric(\"attention\", attention),\n      relaxation: this.smoothMetric(\"relaxation\", relaxation),\n      meditation: this.smoothMetric(\"meditation\", meditation),\n      engagement: this.smoothMetric(\"engagement\", engagement),\n      cognitiveLoad: this.smoothMetric(\"cognitiveLoad\", cognitiveLoad),\n      fatigue: this.smoothMetric(\"fatigue\", fatigue),\n      stress: this.smoothMetric(\"stress\", stress),\n      flow: this.smoothMetric(\"flow\", flow),\n    };\n  }\n\n  private metricHistory: Map<string, number[]> = new Map();\n\n  private smoothMetric(metricName: string, newValue: number): number {\n    if (!this.metricHistory.has(metricName)) {\n      this.metricHistory.set(metricName, []);\n    }\n\n    const history = this.metricHistory.get(metricName)!;\n    history.push(newValue);\n\n    // Keep only recent history\n    if (history.length > 10) {\n      history.shift();\n    }\n\n    // Apply exponential moving average\n    const weights = history.map((_, i) =>\n      Math.pow(0.8, history.length - 1 - i)\n    );\n    const weightSum = weights.reduce((sum, w) => sum + w, 0);\n    const smoothed =\n      history.reduce((sum, val, i) => sum + val * weights[i], 0) / weightSum;\n\n    return Math.min(1, Math.max(0, smoothed));\n  }\n}\n\n// Butterworth filter implementation for EEG signal filtering\nclass ButterworthFilter {\n  private a: number[] = [];\n  private b: number[] = [];\n  private x: number[] = [];\n  private y: number[] = [];\n\n  constructor(\n    lowFreq: number,\n    highFreq: number,\n    sampleRate: number,\n    type: \"lowpass\" | \"highpass\" | \"bandpass\"\n  ) {\n    this.x = [0, 0, 0];\n    this.y = [0, 0, 0];\n\n    // Calculate filter coefficients (simplified 2nd order)\n    const nyquist = sampleRate / 2;\n    const low = lowFreq / nyquist;\n    const high = highFreq / nyquist;\n\n    switch (type) {\n      case \"lowpass\":\n        this.calculateLowpassCoefficients(low);\n        break;\n      case \"highpass\":\n        this.calculateHighpassCoefficients(high);\n        break;\n      case \"bandpass\":\n        this.calculateBandpassCoefficients(low, high);\n        break;\n    }\n  }\n\n  private calculateLowpassCoefficients(cutoff: number): void {\n    const ita = 1.0 / Math.tan(Math.PI * cutoff);\n    const q = Math.SQRT2;\n\n    this.b = [\n      1.0 / (1.0 + q * ita + ita * ita),\n      2.0 / (1.0 + q * ita + ita * ita),\n      1.0 / (1.0 + q * ita + ita * ita),\n    ];\n\n    this.a = [\n      1.0,\n      -(2.0 * (ita * ita - 1.0)) / (1.0 + q * ita + ita * ita),\n      -(1.0 - q * ita + ita * ita) / (1.0 + q * ita + ita * ita),\n    ];\n  }\n\n  private calculateHighpassCoefficients(cutoff: number): void {\n    const ita = Math.tan(Math.PI * cutoff);\n    const q = Math.SQRT2;\n\n    this.b = [\n      1.0 / (1.0 + q * ita + ita * ita),\n      -2.0 / (1.0 + q * ita + ita * ita),\n      1.0 / (1.0 + q * ita + ita * ita),\n    ];\n\n    this.a = [\n      1.0,\n      -(2.0 * (ita * ita - 1.0)) / (1.0 + q * ita + ita * ita),\n      -(1.0 - q * ita + ita * ita) / (1.0 + q * ita + ita * ita),\n    ];\n  }\n\n  private calculateBandpassCoefficients(\n    lowCutoff: number,\n    highCutoff: number\n  ): void {\n    // Simplified bandpass as cascade of highpass and lowpass\n    const center = Math.sqrt(lowCutoff * highCutoff);\n    const bandwidth = highCutoff - lowCutoff;\n\n    this.b = [bandwidth, 0, -bandwidth];\n    this.a = [\n      1,\n      -2 * Math.cos(2 * Math.PI * center),\n      Math.pow(1 - bandwidth, 2),\n    ];\n  }\n\n  process(input: number): number {\n    // Shift input buffer\n    this.x[2] = this.x[1];\n    this.x[1] = this.x[0];\n    this.x[0] = input;\n\n    // Calculate output\n    const output =\n      this.b[0] * this.x[0] +\n      this.b[1] * this.x[1] +\n      this.b[2] * this.x[2] -\n      this.a[1] * this.y[0] -\n      this.a[2] * this.y[1];\n\n    // Shift output buffer\n    this.y[2] = this.y[1];\n    this.y[1] = this.y[0];\n    this.y[0] = output;\n\n    return output;\n  }\n}\n\n// Neural adaptation engine\nclass NeuroAdaptationEngine {\n  private adaptations: NeuroAdaptation[];\n  private currentMetrics: NeuroMetrics;\n  private adaptationHistory: Array<{\n    metrics: NeuroMetrics;\n    adaptation: NeuroAdaptation;\n    timestamp: number;\n  }>;\n  private learningRate: number;\n\n  constructor() {\n    this.adaptations = [];\n    this.currentMetrics = this.getDefaultMetrics();\n    this.adaptationHistory = [];\n    this.learningRate = 0.1;\n\n    this.initializeBaseAdaptations();\n  }\n\n  private getDefaultMetrics(): NeuroMetrics {\n    return {\n      attention: 0.5,\n      relaxation: 0.5,\n      meditation: 0.5,\n      engagement: 0.5,\n      cognitiveLoad: 0.5,\n      fatigue: 0.5,\n      stress: 0.5,\n      flow: 0.5,\n    };\n  }\n\n  private initializeBaseAdaptations(): void {\n    // High cognitive load adaptation\n    this.adaptations.push({\n      id: \"high-cognitive-load\",\n      trigger: { ...this.getDefaultMetrics(), cognitiveLoad: 0.8, stress: 0.7 },\n      adaptation: {\n        uiComplexity: \"minimal\",\n        colorScheme: \"high-contrast\",\n        animationIntensity: \"none\",\n        interactionStyle: \"passive\",\n        contentDensity: \"sparse\",\n        cognitiveSupport: \"high\",\n      },\n      confidence: 0.9,\n    });\n\n    // Flow state adaptation\n    this.adaptations.push({\n      id: \"flow-state\",\n      trigger: {\n        ...this.getDefaultMetrics(),\n        flow: 0.8,\n        attention: 0.7,\n        engagement: 0.8,\n      },\n      adaptation: {\n        uiComplexity: \"minimal\",\n        colorScheme: \"normal\",\n        animationIntensity: \"subtle\",\n        interactionStyle: \"passive\",\n        contentDensity: \"normal\",\n        cognitiveSupport: \"low\",\n      },\n      confidence: 0.85,\n    });\n\n    // Low attention adaptation\n    this.adaptations.push({\n      id: \"low-attention\",\n      trigger: { ...this.getDefaultMetrics(), attention: 0.3, engagement: 0.4 },\n      adaptation: {\n        uiComplexity: \"standard\",\n        colorScheme: \"high-contrast\",\n        animationIntensity: \"enhanced\",\n        interactionStyle: \"proactive\",\n        contentDensity: \"sparse\",\n        cognitiveSupport: \"high\",\n      },\n      confidence: 0.8,\n    });\n\n    // Fatigue adaptation\n    this.adaptations.push({\n      id: \"fatigue\",\n      trigger: {\n        ...this.getDefaultMetrics(),\n        fatigue: 0.7,\n        cognitiveLoad: 0.6,\n      },\n      adaptation: {\n        uiComplexity: \"minimal\",\n        colorScheme: \"low-contrast\",\n        animationIntensity: \"none\",\n        interactionStyle: \"passive\",\n        contentDensity: \"sparse\",\n        cognitiveSupport: \"high\",\n      },\n      confidence: 0.75,\n    });\n\n    // Relaxed state adaptation\n    this.adaptations.push({\n      id: \"relaxed\",\n      trigger: {\n        ...this.getDefaultMetrics(),\n        relaxation: 0.8,\n        meditation: 0.6,\n      },\n      adaptation: {\n        uiComplexity: \"detailed\",\n        colorScheme: \"normal\",\n        animationIntensity: \"subtle\",\n        interactionStyle: \"standard\",\n        contentDensity: \"normal\",\n        cognitiveSupport: \"medium\",\n      },\n      confidence: 0.7,\n    });\n  }\n\n  analyzeAndAdapt(metrics: NeuroMetrics): NeuroAdaptation | null {\n    this.currentMetrics = metrics;\n\n    // Find best matching adaptation\n    let bestAdaptation: NeuroAdaptation | null = null;\n    let bestScore = 0;\n\n    for (const adaptation of this.adaptations) {\n      const score = this.calculateAdaptationScore(metrics, adaptation.trigger);\n\n      if (score > bestScore && score > 0.6) {\n        // Threshold for activation\n        bestScore = score;\n        bestAdaptation = { ...adaptation, confidence: score };\n      }\n    }\n\n    if (bestAdaptation) {\n      bestAdaptation.appliedAt = Date.now();\n\n      // Record in history for learning\n      this.adaptationHistory.push({\n        metrics: { ...metrics },\n        adaptation: bestAdaptation,\n        timestamp: Date.now(),\n      });\n\n      // Limit history\n      if (this.adaptationHistory.length > 100) {\n        this.adaptationHistory.shift();\n      }\n    }\n\n    return bestAdaptation;\n  }\n\n  private calculateAdaptationScore(\n    current: NeuroMetrics,\n    trigger: NeuroMetrics\n  ): number {\n    const weights = {\n      attention: 1.2,\n      relaxation: 1.0,\n      meditation: 0.8,\n      engagement: 1.1,\n      cognitiveLoad: 1.3,\n      fatigue: 1.1,\n      stress: 1.2,\n      flow: 1.4,\n    };\n\n    let totalScore = 0;\n    let totalWeight = 0;\n\n    Object.keys(trigger).forEach((key: any) => {\n      const metricKey = key as keyof NeuroMetrics;\n      const currentValue = current[metricKey];\n      const triggerValue = trigger[metricKey];\n      const weight = weights[metricKey];\n\n      // Calculate similarity (inverse of difference)\n      const similarity = 1 - Math.abs(currentValue - triggerValue);\n      const score = similarity * weight;\n\n      totalScore += score;\n      totalWeight += weight;\n    });\n\n    return totalScore / totalWeight;\n  }\n\n  learnFromFeedback(adaptationId: string, effectiveness: number): void {\n    const adaptation = this.adaptations.find((a) => a.id === adaptationId);\n    if (adaptation) {\n      // Adjust confidence based on effectiveness\n      const adjustment = (effectiveness - 0.5) * this.learningRate;\n      adaptation.confidence = Math.max(\n        0.1,\n        Math.min(0.95, adaptation.confidence + adjustment)\n      );\n    }\n  }\n\n  getCurrentAdaptation(): NeuroAdaptation | null {\n    const recent = this.adaptationHistory[this.adaptationHistory.length - 1];\n    return recent ? recent.adaptation : null;\n  }\n\n  getAdaptationHistory(): Array<{\n    metrics: NeuroMetrics;\n    adaptation: NeuroAdaptation;\n    timestamp: number;\n  }> {\n    return [...this.adaptationHistory];\n  }\n}\n\n// Main NeuroSync system\nclass NeuroSyncSystem {\n  private eegProcessor: EEGProcessor;\n  private adaptationEngine: NeuroAdaptationEngine;\n  private currentMetrics: NeuroMetrics;\n  private isConnected: boolean;\n  private deviceInfo: { name: string; type: string; channels: number } | null;\n  private calibrationData: Map<string, number>;\n\n  constructor() {\n    this.eegProcessor = new EEGProcessor();\n    this.adaptationEngine = new NeuroAdaptationEngine();\n    this.currentMetrics = this.getDefaultMetrics();\n    this.isConnected = false;\n    this.deviceInfo = null;\n    this.calibrationData = new Map();\n  }\n\n  private getDefaultMetrics(): NeuroMetrics {\n    return {\n      attention: 0.5,\n      relaxation: 0.5,\n      meditation: 0.5,\n      engagement: 0.5,\n      cognitiveLoad: 0.5,\n      fatigue: 0.5,\n      stress: 0.5,\n      flow: 0.5,\n    };\n  }\n\n  async connectDevice(\n    deviceType: \"muse\" | \"emotiv\" | \"neurosky\" | \"simulator\" = \"simulator\"\n  ): Promise<boolean> {\n    try {\n      if (deviceType === \"simulator\") {\n        // Simulator mode for development\n        this.isConnected = true;\n        this.deviceInfo = {\n          name: \"NeuroSync Simulator\",\n          type: \"simulator\",\n          channels: 10,\n        };\n        this.startSimulation();\n        return true;\n      }\n\n      // Real device connection would go here\n      // For now, we'll use Web Bluetooth API simulation\n      if (\"bluetooth\" in navigator) {\n        // This would be replaced with actual device-specific connection code\n        this.isConnected = true;\n        this.deviceInfo = {\n          name: `${deviceType} Headset`,\n          type: deviceType,\n          channels:\n            deviceType === \"emotiv\" ? 14 : deviceType === \"muse\" ? 4 : 1,\n        };\n\n        return true;\n      }\n\n      throw new Error(\"Web Bluetooth not supported\");\n    } catch {\n      return false;\n    }\n  }\n\n  private startSimulation(): void {\n    // Simulate realistic EEG data for development\n    const simulateEEG = () => {\n      if (!this.isConnected) return;\n\n      const baseNoise = () => (Math.random() - 0.5) * 0.1;\n      const time = Date.now() / 1000;\n\n      // Simulate different brainwave patterns\n      const alpha = Math.sin(time * 10) * 0.3 + baseNoise(); // 10 Hz alpha\n      const beta = Math.sin(time * 20) * 0.2 + baseNoise(); // 20 Hz beta\n      const theta = Math.sin(time * 6) * 0.4 + baseNoise(); // 6 Hz theta\n\n      const signal: EEGSignal = {\n        timestamp: Date.now(),\n        channels: {\n          fp1: alpha + beta * 0.5 + baseNoise(),\n          fp2: alpha + beta * 0.5 + baseNoise(),\n          f3: beta + theta * 0.3 + baseNoise(),\n          f4: beta + theta * 0.3 + baseNoise(),\n          c3: alpha + baseNoise(),\n          c4: alpha + baseNoise(),\n          p3: theta + alpha * 0.2 + baseNoise(),\n          p4: theta + alpha * 0.2 + baseNoise(),\n          o1: alpha * 0.8 + baseNoise(),\n          o2: alpha * 0.8 + baseNoise(),\n        },\n        quality: 0.8 + Math.random() * 0.2,\n      };\n\n      this.processSignal(signal);\n    };\n\n    // Run simulation at ~256 Hz (realistic EEG sampling rate)\n    setInterval(simulateEEG, ANIMATION.DURATION.fast / 64); // ~256 Hz\n  }\n\n  processSignal(signal: EEGSignal): NeuroMetrics {\n    if (!this.isConnected) return this.currentMetrics;\n\n    // Process the signal through the EEG processor\n    const metrics = this.eegProcessor.processSignal(signal);\n    this.currentMetrics = metrics;\n\n    // Generate adaptation recommendations\n    const adaptation = this.adaptationEngine.analyzeAndAdapt(metrics);\n\n    return metrics;\n  }\n\n  getCurrentMetrics(): NeuroMetrics {\n    return { ...this.currentMetrics };\n  }\n\n  getCurrentAdaptation(): NeuroAdaptation | null {\n    return this.adaptationEngine.getCurrentAdaptation();\n  }\n\n  calibrateBaseline(\n    duration: number = ANIMATION.DURATION.slower * 42\n  ): Promise<void> {\n    return new Promise((resolve) => {\n      const startTime = Date.now();\n      const calibrationMetrics: NeuroMetrics[] = [];\n\n      const collectBaseline = () => {\n        if (Date.now() - startTime >= duration) {\n          // Calculate baseline averages\n          const avgMetrics = this.calculateAverageMetrics(calibrationMetrics);\n          Object.entries(avgMetrics).forEach(([key, value]) => {\n            this.calibrationData.set(`baseline_${key}`, value);\n          });\n\n          resolve();\n          return;\n        }\n\n        calibrationMetrics.push({ ...this.currentMetrics });\n        setTimeout(collectBaseline, ANIMATION.DURATION.fast / 10);\n      };\n\n      collectBaseline();\n    });\n  }\n\n  private calculateAverageMetrics(metrics: NeuroMetrics[]): NeuroMetrics {\n    const keys = Object.keys(metrics[0]) as (keyof NeuroMetrics)[];\n    const averages: Partial<NeuroMetrics> = {};\n\n    keys.forEach((key: keyof NeuroMetrics) => {\n      const sum = metrics.reduce((total, metric) => total + metric[key], 0);\n      averages[key] = sum / metrics.length;\n    });\n\n    return averages as NeuroMetrics;\n  }\n\n  getDeviceInfo(): { name: string; type: string; channels: number } | null {\n    return this.deviceInfo;\n  }\n\n  isDeviceConnected(): boolean {\n    return this.isConnected;\n  }\n\n  disconnect(): void {\n    this.isConnected = false;\n    this.deviceInfo = null;\n  }\n\n  provideFeedback(adaptationId: string, effectiveness: number): void {\n    this.adaptationEngine.learnFromFeedback(adaptationId, effectiveness);\n  }\n}\n\n// React Context for NeuroSync\nconst NeuroSyncContext = createContext<{\n  system: NeuroSyncSystem | null;\n  metrics: NeuroMetrics;\n  adaptation: NeuroAdaptation | null;\n  isConnected: boolean;\n  deviceInfo: { name: string; type: string; channels: number } | null;\n  connectDevice: (\n    type?: \"muse\" | \"emotiv\" | \"neurosky\" | \"simulator\"\n  ) => Promise<boolean>;\n  calibrateBaseline: () => Promise<void>;\n  provideFeedback: (adaptationId: string, effectiveness: number) => void;\n}>({\n  system: null,\n  metrics: {} as NeuroMetrics,\n  adaptation: null,\n  isConnected: false,\n  deviceInfo: null,\n  connectDevice: async () => false,\n  calibrateBaseline: async () => {},\n  provideFeedback: () => {},\n});\n\n// Provider component\nexport function GlassNeuroSyncProvider({\n  children,\n  onMetricsUpdate,\n  onAdaptationChange,\n  autoConnect = false,\n}: {\n  children: React.ReactNode;\n  onMetricsUpdate?: (metrics: NeuroMetrics) => void;\n  onAdaptationChange?: (adaptation: NeuroAdaptation | null) => void;\n  autoConnect?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const systemRef = useRef<NeuroSyncSystem>();\n  const [metrics, setMetrics] = useState<NeuroMetrics>({} as NeuroMetrics);\n  const [adaptation, setAdaptation] = useState<NeuroAdaptation | null>(null);\n  const [isConnected, setIsConnected] = useState(false);\n  const [deviceInfo, setDeviceInfo] = useState<{\n    name: string;\n    type: string;\n    channels: number;\n  } | null>(null);\n\n  // Initialize system\n  useEffect(() => {\n    systemRef.current = new NeuroSyncSystem();\n\n    if (autoConnect) {\n      systemRef.current.connectDevice(\"simulator\").then((connected) => {\n        setIsConnected(connected);\n        if (connected) {\n          setDeviceInfo(systemRef.current!.getDeviceInfo());\n        }\n      });\n    }\n\n    // Update metrics periodically\n    const updateInterval = setInterval(() => {\n      if (systemRef.current && systemRef.current.isDeviceConnected()) {\n        const currentMetrics = systemRef.current.getCurrentMetrics();\n        const currentAdaptation = systemRef.current.getCurrentAdaptation();\n\n        setMetrics(currentMetrics);\n        setAdaptation(currentAdaptation);\n\n        onMetricsUpdate?.(currentMetrics);\n        onAdaptationChange?.(currentAdaptation);\n      }\n    }, ANIMATION.DURATION.fast / 10); // 10Hz update rate\n\n    return () => clearInterval(updateInterval);\n  }, [autoConnect, onMetricsUpdate, onAdaptationChange]);\n\n  const connectDevice = useCallback(\n    async (\n      type: \"muse\" | \"emotiv\" | \"neurosky\" | \"simulator\" = \"simulator\"\n    ) => {\n      if (!systemRef.current) return false;\n\n      const connected = await systemRef.current.connectDevice(type);\n      setIsConnected(connected);\n\n      if (connected) {\n        setDeviceInfo(systemRef.current.getDeviceInfo());\n      }\n\n      return connected;\n    },\n    []\n  );\n\n  const calibrateBaseline = useCallback(async () => {\n    if (systemRef.current) {\n      await systemRef.current.calibrateBaseline();\n    }\n  }, []);\n\n  const provideFeedback = useCallback(\n    (adaptationId: string, effectiveness: number) => {\n      systemRef.current?.provideFeedback(adaptationId, effectiveness);\n    },\n    []\n  );\n\n  const value = {\n    system: systemRef.current || null,\n    metrics,\n    adaptation,\n    isConnected,\n    deviceInfo,\n    connectDevice,\n    calibrateBaseline,\n    provideFeedback,\n  };\n\n  return (\n    <NeuroSyncContext.Provider value={value}>\n      {children}\n    </NeuroSyncContext.Provider>\n  );\n}\n\n// Hook to use NeuroSync\nexport function useNeuroSync() {\n  const context = useContext(NeuroSyncContext);\n  return context;\n}\n\n// Neural metrics dashboard\nexport function GlassNeuroMetricsDashboard({\n  className,\n  showBrainwaves = true,\n}: {\n  className?: string;\n  showBrainwaves?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { metrics, adaptation, isConnected, deviceInfo } = useNeuroSync();\n  const [showDashboard, setShowDashboard] = useState(false);\n\n  const metricsArray = Object.entries(metrics).map(([name, value]) => ({\n    name: name.charAt(0).toUpperCase() + name.slice(1),\n    value: value || 0,\n    color:\n      {\n        attention: \"hsl(var(--glass-color-primary))\",\n        relaxation: \"hsl(var(--glass-color-success))\",\n        meditation: \"#8b5cf6\",\n        engagement: \"hsl(var(--glass-color-warning))\",\n        cognitiveLoad: \"hsl(var(--glass-color-danger))\",\n        fatigue: \"var(--glass-gray-500)\",\n        stress: \"var(--glass-color-danger-dark)\",\n        flow: \"#06b6d4\",\n      }[name] || \"var(--glass-gray-500)\",\n  }));\n\n  return (\n    <div\n      className={cn(\n        \"glass-fixed glass-bottom-4 glass-left-4 glass-z-50\",\n        className\n      )}\n    >\n      <motion.button\n        className={cn(\n          \"w-14 glass-h-14 glass-radius-full glass-surface-primary glass-elev-4\",\n          \"flex items-center justify-center glass-text-primary\",\n          \"transition-all glass-hover-scale-105\",\n          { transitionDuration: \"var(--glass-motion-duration-normal)\" },\n          isConnected ? \"animate-pulse\" : \"\"\n        )}\n        onClick={() => setShowDashboard(!showDashboard)}\n        whileHover={prefersReducedMotion ? {} : { scale: 1.05 }}\n        whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n        transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n        aria-label=\"Toggle NeuroSync dashboard\"\n        aria-expanded={showDashboard}\n      >\n        \uD83E\uDDE0\n        <div\n          className={cn(\n            \"glass-absolute glass--top-1 glass-right-1 glass-w-4 glass-h-4 glass-radius-full\",\n            isConnected ? \"glass-surface-success\" : \"glass-surface-danger\"\n          )}\n          style={{ opacity: 0.8 }}\n        />\n      </motion.button>\n\n      <AnimatePresence>\n        {showDashboard && (\n          <motion.div\n            className={cn(\n              \"absolute bottom-16 left-0 w-96 glass-max-h-80vh overflow-y-auto\",\n              \"glass-surface-primary glass-elev-5 glass-radius-lg glass-p-6 glass-gap-4\"\n            )}\n            initial={{ opacity: 0, y: 10, scale: 0.95 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: 10, scale: 0.95 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n            role=\"dialog\"\n            aria-label=\"NeuroSync dashboard\"\n          >\n            <ContrastGuard>\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                  NeuroSync Dashboard\n                </h3>\n                <button\n                  onClick={() => setShowDashboard(false)}\n                  className=\"glass-text-sm glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target\"\n                  aria-label=\"Close NeuroSync dashboard\"\n                >\n                  \u2715\n                </button>\n              </div>\n\n              {/* Device Status */}\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  Device Status\n                </h4>\n                <div className=\"glass-p-3 glass-surface-secondary glass-radius-md\">\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <span className=\"glass-text-sm glass-text-primary\">\n                      {deviceInfo?.name || \"No Device\"}\n                    </span>\n                    <div className=\"glass-flex glass-items-center glass-gap-2\">\n                      <div\n                        className={cn(\n                          \"glass-w-2 glass-h-2 glass-radius-full\",\n                          isConnected\n                            ? \"glass-surface-success\"\n                            : \"glass-surface-danger\"\n                        )}\n                      />\n                      <span className=\"glass-text-xs glass-text-secondary\">\n                        {isConnected ? \"Connected\" : \"Disconnected\"}\n                      </span>\n                    </div>\n                  </div>\n                  {deviceInfo && (\n                    <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                      {deviceInfo.channels} channels \u2022 {deviceInfo.type}\n                    </div>\n                  )}\n                </div>\n              </div>\n\n              {/* Neural Metrics */}\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  Neural Metrics\n                </h4>\n                <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n                  {metricsArray.map((metric: any) => (\n                    <div\n                      key={metric.name}\n                      className=\"glass-p-3 glass-surface-secondary glass-radius-md\"\n                    >\n                      <div className=\"glass-text-xs glass-font-medium glass-text-primary\">\n                        {metric.name}\n                      </div>\n                      <div className=\"glass-mt-2 glass-flex glass-items-center glass-gap-2\">\n                        <div className=\"glass-flex-1 glass-surface-subtle glass-radius-full glass-h-2\">\n                          <motion.div\n                            className=\"glass-h-2 glass-radius-full\"\n                            ref={(el) => {\n                              if (el) el.style.backgroundColor = metric.color;\n                            }}\n                            initial={{ width: 0 }}\n                            animate={{ width: `${metric.value * 100}%` }}\n                            transition={\n                              prefersReducedMotion\n                                ? { duration: 0 }\n                                : { duration: ANIMATION.DURATION.normal / 1000 }\n                            }\n                          />\n                        </div>\n                        <span className=\"glass-text-xs glass-text-secondary glass-w-8 glass-text-right\">\n                          {(metric.value * 100).toFixed(0)}%\n                        </span>\n                      </div>\n                    </div>\n                  ))}\n                </div>\n              </div>\n\n              {/* Current Adaptation */}\n              {adaptation && (\n                <div className=\"glass-gap-2\">\n                  <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                    Active Adaptation\n                  </h4>\n                  <div className=\"glass-p-3 glass-surface-secondary glass-radius-md\">\n                    <div className=\"glass-text-sm glass-text-primary glass-font-medium glass-mb-2\">\n                      {adaptation.id\n                        .replace(\"-\", \" \")\n                        .replace(/\\b\\w/g, (l) => l.toUpperCase())}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-tertiary glass-gap-1\">\n                      <div>UI: {adaptation.adaptation.uiComplexity}</div>\n                      <div>Colors: {adaptation.adaptation.colorScheme}</div>\n                      <div>\n                        Animation: {adaptation.adaptation.animationIntensity}\n                      </div>\n                    </div>\n                    <div className=\"glass-mt-2 glass-flex glass-items-center glass-justify-between\">\n                      <span className=\"glass-text-xs glass-text-secondary\">\n                        Confidence: {(adaptation.confidence * 100).toFixed(0)}%\n                      </span>\n                    </div>\n                  </div>\n                </div>\n              )}\n\n              {!isConnected && (\n                <div className=\"glass-text-center glass-text-sm glass-text-secondary glass-py-4\">\n                  Connect an EEG device to start neural monitoring\n                </div>\n              )}\n            </ContrastGuard>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Neural feedback component\nexport function GlassNeuroFeedback({\n  type,\n  target = 0.8,\n  className,\n}: {\n  type: keyof NeuroMetrics;\n  target?: number;\n  className?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { metrics } = useNeuroSync();\n  const currentValue = metrics[type] || 0;\n  const difference = currentValue - target;\n  const isOnTarget = Math.abs(difference) < 0.1;\n\n  return (\n    <div className={cn(\"glass-flex glass-items-center glass-gap-3\", className)}>\n      <div className=\"glass-text-sm glass-text-primary glass-capitalize glass-font-medium\">\n        {type}\n      </div>\n      <div className=\"glass-flex-1 glass-relative\">\n        <div className=\"glass-w-full glass-h-4 glass-surface-subtle glass-radius-full glass-overflow-hidden\">\n          <motion.div\n            className=\"glass-h-full glass-radius-full\"\n            ref={(el) => {\n              if (!el) return;\n              el.style.backgroundColor = isOnTarget\n                ? \"hsl(var(--glass-color-success))\"\n                : difference > 0\n                  ? \"hsl(var(--glass-color-primary))\"\n                  : \"hsl(var(--glass-color-warning))\";\n            }}\n            animate={{ width: `${currentValue * 100}%` }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n          />\n          {/* Target indicator */}\n          <div\n            className=\"glass-absolute glass-top-0 glass-w-1 glass-h-full glass-surface-subtle glass-opacity-60\"\n            ref={(el) => {\n              if (el) el.style.left = `${target * 100}%`;\n            }}\n          />\n        </div>\n      </div>\n      <div className=\"glass-text-sm glass-text-secondary glass-w-12 glass-text-right\">\n        {(currentValue * 100).toFixed(0)}%\n      </div>\n    </div>\n  );\n}\n\n// Hook for neuro-adaptive components\nexport function useNeuroAdaptive() {\n  const { metrics, adaptation } = useNeuroSync();\n\n  const getAdaptiveStyle = useCallback(\n    (baseStyle: React.CSSProperties = {}) => {\n      if (!adaptation) return baseStyle;\n\n      const adaptiveStyle: React.CSSProperties = { ...baseStyle };\n\n      // Apply color scheme adaptations\n      switch (adaptation.adaptation.colorScheme) {\n        case \"high-contrast\":\n          adaptiveStyle.filter = \"contrast(1.5)\";\n          break;\n        case \"low-contrast\":\n          adaptiveStyle.filter = \"contrast(0.7)\";\n          break;\n      }\n\n      // Apply animation adaptations\n      switch (adaptation.adaptation.animationIntensity) {\n        case \"none\":\n          adaptiveStyle.animation = \"none\";\n          adaptiveStyle.transition = \"none\";\n          break;\n        case \"subtle\":\n          adaptiveStyle.animationDuration = \"0.8s\";\n          break;\n        case \"enhanced\":\n          adaptiveStyle.animationDuration = `${ANIMATION.DURATION.normal / 1000}s`;\n          break;\n      }\n\n      return adaptiveStyle;\n    },\n    [adaptation]\n  );\n\n  const getAdaptiveClassName = useCallback(\n    (baseClassName: string = \"\") => {\n      if (!adaptation) return baseClassName;\n\n      const classes = [baseClassName];\n\n      // Add complexity classes\n      classes.push(`neuro-complexity-${adaptation.adaptation.uiComplexity}`);\n      classes.push(`neuro-density-${adaptation.adaptation.contentDensity}`);\n      classes.push(`neuro-support-${adaptation.adaptation.cognitiveSupport}`);\n\n      return classes.filter(Boolean).join(\" \");\n    },\n    [adaptation]\n  );\n\n  return {\n    metrics,\n    adaptation,\n    getAdaptiveStyle,\n    getAdaptiveClassName,\n    isHighCognitiveLoad: metrics.cognitiveLoad > 0.7,\n    isInFlowState: metrics.flow > 0.7,\n    needsAttentionSupport: metrics.attention < 0.4,\n    isFatigued: metrics.fatigue > 0.6,\n  };\n}\n\n// Presets for different BCI devices and configurations\nexport const neuroSyncPresets = {\n  muse: {\n    sampleRate: 256,\n    channels: [\"TP9\", \"AF7\", \"AF8\", \"TP10\"],\n    filterSettings: {\n      highpass: 1.0,\n      lowpass: 50.0,\n      notch: 60.0,\n    },\n  },\n  emotiv: {\n    sampleRate: 256,\n    channels: [\n      \"AF3\",\n      \"F7\",\n      \"F3\",\n      \"FC5\",\n      \"T7\",\n      \"P7\",\n      \"O1\",\n      \"O2\",\n      \"P8\",\n      \"T8\",\n      \"FC6\",\n      \"F4\",\n      \"F8\",\n      \"AF4\",\n    ],\n    filterSettings: {\n      highpass: 0.5,\n      lowpass: 45.0,\n      notch: 60.0,\n    },\n  },\n  neurosky: {\n    sampleRate: 512,\n    channels: [\"FP1\"],\n    filterSettings: {\n      highpass: 3.0,\n      lowpass: 100.0,\n      notch: 60.0,\n    },\n  },\n  simulator: {\n    sampleRate: 256,\n    channels: [\"FP1\", \"FP2\", \"F3\", \"F4\", \"C3\", \"C4\", \"P3\", \"P4\", \"O1\", \"O2\"],\n    filterSettings: {\n      highpass: 0.5,\n      lowpass: 50.0,\n      notch: 60.0,\n    },\n  },\n};\n\n// Main component wrapper for testing and simple usage\nexport function GlassNeuroSync({\n  children,\n  className,\n  ...props\n}: {\n  children?: React.ReactNode;\n  className?: string;\n} & React.HTMLAttributes<HTMLDivElement>) {\n  return (\n    <GlassNeuroSyncProvider>\n      <div className={className} {...props}>\n        {children || <GlassNeuroMetricsDashboard />}\n      </div>\n    </GlassNeuroSyncProvider>\n  );\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Self-Healing Glass Components System\n * Automatically detects and corrects visual glitches, accessibility issues, and system errors\n * Part of Next-Wave Systems (10/10) - Meta-Systems Framework\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Self-healing system types\ninterface ComponentHealthCheck {\n  componentId: string;\n  componentType: string;\n  healthScore: number;\n  issues: ComponentIssue[];\n  lastChecked: number;\n  recoveryAttempts: number;\n  status: \"healthy\" | \"warning\" | \"critical\" | \"healing\" | \"failed\";\n}\n\ninterface ComponentIssue {\n  id: string;\n  type:\n    | \"visual-glitch\"\n    | \"accessibility\"\n    | \"performance\"\n    | \"memory-leak\"\n    | \"interaction\"\n    | \"rendering\";\n  severity: \"low\" | \"medium\" | \"high\" | \"critical\";\n  description: string;\n  detectedAt: number;\n  autoFixable: boolean;\n  fixAttempts: number;\n  resolved: boolean;\n  metadata: Record<string, unknown>;\n}\n\ninterface HealingAction {\n  id: string;\n  targetComponent: string;\n  actionType:\n    | \"style-reset\"\n    | \"dom-rebuild\"\n    | \"state-recovery\"\n    | \"accessibility-fix\"\n    | \"performance-optimization\";\n  description: string;\n  implementation: () => Promise<boolean>;\n  rollback: () => Promise<void>;\n  successRate: number;\n  appliedAt?: number;\n}\n\ninterface HealingStrategy {\n  name: string;\n  priority: number;\n  conditions: (issue: ComponentIssue) => boolean;\n  actions: HealingAction[];\n  successRate: number;\n  executionTime: number;\n}\n\ninterface BrowserPerformanceMemory {\n  usedJSHeapSize: number;\n}\n\ninterface PerformanceWithMemory extends Performance {\n  memory?: BrowserPerformanceMemory;\n}\n\ntype SelfHealingComponentInput = Record<string, unknown>;\n\nconst HEALTH_STATUS_COLORS: Record<ComponentHealthCheck[\"status\"], string> = {\n  healthy: \"hsl(var(--glass-color-success))\",\n  warning: \"hsl(var(--glass-color-warning))\",\n  critical: \"hsl(var(--glass-color-danger))\",\n  healing: \"hsl(var(--glass-color-primary))\",\n  failed: \"#7f1d1d\",\n};\n\n// Visual anomaly detection using computer vision techniques\nclass VisualAnomalyDetector {\n  private canvas: HTMLCanvasElement;\n  private context: CanvasRenderingContext2D;\n  private referenceSnapshots: Map<string, ImageData>;\n  private anomalyThreshold: number;\n\n  constructor() {\n    this.canvas = document.createElement(\"canvas\");\n    this.context = this.canvas.getContext(\"2d\")!;\n    this.referenceSnapshots = new Map();\n    this.anomalyThreshold = 0.15; // 15% difference threshold\n  }\n\n  captureElementSnapshot(element: HTMLElement, id: string): ImageData | null {\n    try {\n      const rect = element.getBoundingClientRect();\n      this.canvas.width = rect.width;\n      this.canvas.height = rect.height;\n\n      // Create a more detailed visual representation\n      const computedStyles = window.getComputedStyle(element);\n      const elementClone = element.cloneNode(true) as HTMLElement;\n\n      // Render element to canvas using html2canvas-like technique\n      const serializer = new XMLSerializer();\n      const html = serializer.serializeToString(elementClone);\n      const blob = new Blob([html], { type: \"text/html\" });\n\n      // For now, use a simplified approach capturing computed style data\n      const snapshot = this.context.createImageData(\n        rect.width || 100,\n        rect.height || 50\n      );\n      const styleHash = this.computeStyleHash(computedStyles);\n\n      // Create a visual fingerprint based on element properties\n      for (let i = 0; i < snapshot.data.length; i += 4) {\n        snapshot.data[i] = (styleHash & 0xff0000) >> 16; // Red\n        snapshot.data[i + 1] = (styleHash & 0x00ff00) >> 8; // Green\n        snapshot.data[i + 2] = styleHash & 0x0000ff; // Blue\n        snapshot.data[i + 3] = 255; // Alpha\n      }\n\n      return snapshot;\n    } catch {\n      return null;\n    }\n  }\n\n  private computeStyleHash(styles: CSSStyleDeclaration): number {\n    const importantProps = [\n      \"width\",\n      \"height\",\n      \"background\",\n      \"border\",\n      \"opacity\",\n      \"transform\",\n      \"filter\",\n      \"position\",\n      \"top\",\n      \"left\",\n      \"display\",\n      \"visibility\",\n      \"zIndex\",\n    ];\n\n    let hash = 0;\n    importantProps.forEach((prop) => {\n      const value = styles.getPropertyValue(prop);\n      for (let i = 0; i < value.length; i++) {\n        hash = (hash << 5) - hash + value.charCodeAt(i);\n        hash = hash & hash; // Convert to 32-bit integer\n      }\n    });\n\n    return Math.abs(hash);\n  }\n\n  detectAnomalies(element: HTMLElement, id: string): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n    const currentSnapshot = this.captureElementSnapshot(element, id);\n\n    if (!currentSnapshot) return issues;\n\n    const referenceSnapshot = this.referenceSnapshots.get(id);\n\n    if (referenceSnapshot) {\n      const difference = this.calculateImageDifference(\n        referenceSnapshot,\n        currentSnapshot\n      );\n\n      if (difference > this.anomalyThreshold) {\n        issues.push({\n          id: `visual-anomaly-${Date.now()}`,\n          type: \"visual-glitch\",\n          severity:\n            difference > 0.5\n              ? \"critical\"\n              : difference > 0.3\n                ? \"high\"\n                : \"medium\",\n          description: `Visual anomaly detected: ${(difference * 100).toFixed(1)}% difference from reference`,\n          detectedAt: Date.now(),\n          autoFixable: true,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: { difference, hasReference: true },\n        });\n      }\n    } else {\n      // Store as reference if this is the first healthy snapshot\n      this.referenceSnapshots.set(id, currentSnapshot);\n    }\n\n    // Check for common visual issues\n    issues.push(...this.checkCommonVisualIssues(element));\n\n    return issues;\n  }\n\n  private calculateImageDifference(img1: ImageData, img2: ImageData): number {\n    if (img1.data.length !== img2.data.length) return 1.0;\n\n    let totalDifference = 0;\n    const length = img1.data.length;\n\n    for (let i = 0; i < length; i += 4) {\n      const rDiff = Math.abs(img1.data[i] - img2.data[i]);\n      const gDiff = Math.abs(img1.data[i + 1] - img2.data[i + 1]);\n      const bDiff = Math.abs(img1.data[i + 2] - img2.data[i + 2]);\n      const aDiff = Math.abs(img1.data[i + 3] - img2.data[i + 3]);\n\n      totalDifference += (rDiff + gDiff + bDiff + aDiff) / (255 * 4);\n    }\n\n    return totalDifference / (length / 4);\n  }\n\n  private checkCommonVisualIssues(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n    const styles = window.getComputedStyle(element);\n    const rect = element.getBoundingClientRect();\n\n    // Check for invisible elements\n    if (\n      styles.opacity === \"0\" ||\n      styles.visibility === \"hidden\" ||\n      styles.display === \"none\"\n    ) {\n      issues.push({\n        id: `invisible-element-${Date.now()}`,\n        type: \"visual-glitch\",\n        severity: \"high\",\n        description: \"Element is not visible to users\",\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: {\n          opacity: styles.opacity,\n          visibility: styles.visibility,\n          display: styles.display,\n        },\n      });\n    }\n\n    // Check for elements outside viewport\n    if (\n      rect.right < 0 ||\n      rect.left > window.innerWidth ||\n      rect.bottom < 0 ||\n      rect.top > window.innerHeight\n    ) {\n      issues.push({\n        id: `outside-viewport-${Date.now()}`,\n        type: \"visual-glitch\",\n        severity: \"medium\",\n        description: \"Element is positioned outside the viewport\",\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: { rect: { ...rect } },\n      });\n    }\n\n    // Check for extremely small elements\n    if (rect.width < 1 || rect.height < 1) {\n      issues.push({\n        id: `tiny-element-${Date.now()}`,\n        type: \"visual-glitch\",\n        severity: \"medium\",\n        description: \"Element has collapsed dimensions\",\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: { width: rect.width, height: rect.height },\n      });\n    }\n\n    // Check for broken transforms\n    const transform = styles.transform;\n    if (transform && transform !== \"none\" && transform.includes(\"NaN\")) {\n      issues.push({\n        id: `broken-transform-${Date.now()}`,\n        type: \"visual-glitch\",\n        severity: \"critical\",\n        description: \"CSS transform contains invalid values\",\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: { transform },\n      });\n    }\n\n    return issues;\n  }\n\n  updateReference(element: HTMLElement, id: string): void {\n    const snapshot = this.captureElementSnapshot(element, id);\n    if (snapshot) {\n      this.referenceSnapshots.set(id, snapshot);\n    }\n  }\n}\n\n// Accessibility anomaly detector\nclass AccessibilityAnomalyDetector {\n  detectIssues(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n\n    // Check for missing ARIA attributes\n    const ariaIssues = this.checkAriaCompliance(element);\n    issues.push(...ariaIssues);\n\n    // Check for color contrast issues\n    const contrastIssues = this.checkColorContrast(element);\n    issues.push(...contrastIssues);\n\n    // Check for keyboard accessibility\n    const keyboardIssues = this.checkKeyboardAccessibility(element);\n    issues.push(...keyboardIssues);\n\n    // Check for focus management\n    const focusIssues = this.checkFocusManagement(element);\n    issues.push(...focusIssues);\n\n    return issues;\n  }\n\n  private checkAriaCompliance(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n\n    // Check for interactive elements without proper ARIA\n    const interactiveElements = element.querySelectorAll(\n      \"button, a, input, select, textarea\"\n    );\n    interactiveElements.forEach((el, index) => {\n      const htmlEl = el as HTMLElement;\n\n      if (\n        !htmlEl.getAttribute(\"aria-label\") &&\n        !htmlEl.getAttribute(\"aria-labelledby\") &&\n        !htmlEl.textContent?.trim()\n      ) {\n        issues.push({\n          id: `missing-aria-label-${Date.now()}-${index}`,\n          type: \"accessibility\",\n          severity: \"high\",\n          description: `Interactive element ${el.tagName.toLowerCase()} lacks accessible name`,\n          detectedAt: Date.now(),\n          autoFixable: true,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: {\n            element: el.tagName.toLowerCase(),\n            hasTextContent: !!htmlEl.textContent?.trim(),\n          },\n        });\n      }\n    });\n\n    // Check for images without alt text\n    const images = element.querySelectorAll(\"img\");\n    images.forEach((img, index) => {\n      if (!img.getAttribute(\"alt\") && !img.getAttribute(\"aria-label\")) {\n        issues.push({\n          id: `missing-alt-text-${Date.now()}-${index}`,\n          type: \"accessibility\",\n          severity: \"high\",\n          description: \"Image missing alternative text\",\n          detectedAt: Date.now(),\n          autoFixable: true,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: { src: img.src },\n        });\n      }\n    });\n\n    return issues;\n  }\n\n  private checkColorContrast(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n    const styles = window.getComputedStyle(element);\n\n    const backgroundColor = styles.backgroundColor;\n    const color = styles.color;\n\n    if (\n      backgroundColor &&\n      color &&\n      backgroundColor !== \"rgba(0, 0, 0, 0)\" &&\n      backgroundColor !== \"transparent\"\n    ) {\n      const contrastRatio = this.calculateContrastRatio(color, backgroundColor);\n\n      if (contrastRatio < 4.5) {\n        issues.push({\n          id: `low-contrast-${Date.now()}`,\n          type: \"accessibility\",\n          severity: contrastRatio < 3 ? \"critical\" : \"high\",\n          description: `Insufficient color contrast: ${contrastRatio.toFixed(2)}:1`,\n          detectedAt: Date.now(),\n          autoFixable: true,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: { contrastRatio, color, backgroundColor },\n        });\n      }\n    }\n\n    return issues;\n  }\n\n  private calculateContrastRatio(color1: string, color2: string): number {\n    // Simplified contrast calculation\n    const rgb1 = this.parseColor(color1);\n    const rgb2 = this.parseColor(color2);\n\n    const l1 = this.relativeLuminance(rgb1);\n    const l2 = this.relativeLuminance(rgb2);\n\n    const lighter = Math.max(l1, l2);\n    const darker = Math.min(l1, l2);\n\n    return (lighter + 0.05) / (darker + 0.05);\n  }\n\n  private parseColor(color: string): [number, number, number] {\n    // Simple RGB extraction (works for rgb() and rgba() formats)\n    const match = color.match(/rgba?\\(([^)]+)\\)/);\n    if (match) {\n      const values = match[1].split(\",\").map((v) => parseInt(v.trim()));\n      return [values[0] || 0, values[1] || 0, values[2] || 0];\n    }\n    return [0, 0, 0]; // Fallback\n  }\n\n  private relativeLuminance([r, g, b]: [number, number, number]): number {\n    const rsRGB = r / 255;\n    const gsRGB = g / 255;\n    const bsRGB = b / 255;\n\n    const rLin =\n      rsRGB <= 0.03928 ? rsRGB / 12.92 : Math.pow((rsRGB + 0.055) / 1.055, 2.4);\n    const gLin =\n      gsRGB <= 0.03928 ? gsRGB / 12.92 : Math.pow((gsRGB + 0.055) / 1.055, 2.4);\n    const bLin =\n      bsRGB <= 0.03928 ? bsRGB / 12.92 : Math.pow((bsRGB + 0.055) / 1.055, 2.4);\n\n    return 0.2126 * rLin + 0.7152 * gLin + 0.0722 * bLin;\n  }\n\n  private checkKeyboardAccessibility(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n\n    // Check for interactive elements that aren't keyboard accessible\n    const interactiveElements = element.querySelectorAll(\n      \"div[onclick], span[onclick]\"\n    );\n    interactiveElements.forEach((el, index) => {\n      const htmlEl = el as HTMLElement;\n      if (htmlEl.tabIndex < 0 && !htmlEl.getAttribute(\"role\")) {\n        issues.push({\n          id: `keyboard-inaccessible-${Date.now()}-${index}`,\n          type: \"accessibility\",\n          severity: \"high\",\n          description: \"Interactive element not keyboard accessible\",\n          detectedAt: Date.now(),\n          autoFixable: true,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: {\n            tagName: el.tagName.toLowerCase(),\n            hasOnClick: !!htmlEl.onclick,\n          },\n        });\n      }\n    });\n\n    return issues;\n  }\n\n  private checkFocusManagement(element: HTMLElement): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n\n    // Check for focus traps without proper management\n    const focusableElements = element.querySelectorAll(\n      'button, a, input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n    );\n\n    if (focusableElements.length > 10) {\n      // Large number of focusable elements might need focus management\n      let hasFocusManagement = false;\n\n      focusableElements.forEach((el) => {\n        if (\n          el.getAttribute(\"aria-describedby\") ||\n          el.getAttribute(\"aria-controls\")\n        ) {\n          hasFocusManagement = true;\n        }\n      });\n\n      if (!hasFocusManagement) {\n        issues.push({\n          id: `focus-management-missing-${Date.now()}`,\n          type: \"accessibility\",\n          severity: \"medium\",\n          description: \"Complex interface may need better focus management\",\n          detectedAt: Date.now(),\n          autoFixable: false,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: { focusableCount: focusableElements.length },\n        });\n      }\n    }\n\n    return issues;\n  }\n}\n\n// Performance anomaly detector\nclass PerformanceAnomalyDetector {\n  private renderTimes: Map<string, number[]>;\n  private memoryUsage: Map<string, number[]>;\n\n  constructor() {\n    this.renderTimes = new Map();\n    this.memoryUsage = new Map();\n  }\n\n  recordRenderTime(componentId: string, time: number): void {\n    if (!this.renderTimes.has(componentId)) {\n      this.renderTimes.set(componentId, []);\n    }\n    const times = this.renderTimes.get(componentId)!;\n    times.push(time);\n\n    // Keep only recent measurements\n    if (times.length > 50) {\n      times.splice(0, times.length - 50);\n    }\n  }\n\n  detectPerformanceIssues(componentId: string): ComponentIssue[] {\n    const issues: ComponentIssue[] = [];\n    const renderTimes = this.renderTimes.get(componentId);\n\n    if (!renderTimes || renderTimes.length < 5) return issues;\n\n    const avgRenderTime =\n      renderTimes.reduce((sum, time) => sum + time, 0) / renderTimes.length;\n    const maxRenderTime = Math.max(...renderTimes);\n\n    // Check for slow rendering\n    if (avgRenderTime > 16.67) {\n      // 60fps threshold\n      issues.push({\n        id: `slow-render-${Date.now()}`,\n        type: \"performance\",\n        severity:\n          avgRenderTime > 33.33\n            ? \"critical\"\n            : avgRenderTime > 25\n              ? \"high\"\n              : \"medium\",\n        description: `Slow rendering detected: ${avgRenderTime.toFixed(2)}ms average`,\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: {\n          avgRenderTime,\n          maxRenderTime,\n          sampleCount: renderTimes.length,\n        },\n      });\n    }\n\n    // Check for rendering spikes\n    const recentSpikes = renderTimes.filter((time) => time > avgRenderTime * 2);\n    if (recentSpikes.length > renderTimes.length * 0.1) {\n      issues.push({\n        id: `render-spikes-${Date.now()}`,\n        type: \"performance\",\n        severity: \"high\",\n        description: `Frequent rendering spikes detected: ${recentSpikes.length} spikes`,\n        detectedAt: Date.now(),\n        autoFixable: true,\n        fixAttempts: 0,\n        resolved: false,\n        metadata: { spikes: recentSpikes.length, threshold: avgRenderTime * 2 },\n      });\n    }\n\n    // Check memory usage if available\n    const memory = (performance as PerformanceWithMemory).memory;\n    if (memory) {\n      const memUsage = memory.usedJSHeapSize / 1024 / 1024;\n      if (memUsage > 50) {\n        // 50MB threshold\n        issues.push({\n          id: `high-memory-${Date.now()}`,\n          type: \"memory-leak\",\n          severity: memUsage > 100 ? \"critical\" : \"high\",\n          description: `High memory usage: ${memUsage.toFixed(1)}MB`,\n          detectedAt: Date.now(),\n          autoFixable: false,\n          fixAttempts: 0,\n          resolved: false,\n          metadata: { memoryUsage: memUsage },\n        });\n      }\n    }\n\n    return issues;\n  }\n}\n\n// Main self-healing system\nclass SelfHealingSystem {\n  private visualDetector: VisualAnomalyDetector;\n  private a11yDetector: AccessibilityAnomalyDetector;\n  private perfDetector: PerformanceAnomalyDetector;\n  private componentHealth: Map<string, ComponentHealthCheck>;\n  private healingStrategies: HealingStrategy[];\n  private activeHealing: Map<string, HealingAction[]>;\n\n  constructor() {\n    this.visualDetector = new VisualAnomalyDetector();\n    this.a11yDetector = new AccessibilityAnomalyDetector();\n    this.perfDetector = new PerformanceAnomalyDetector();\n    this.componentHealth = new Map();\n    this.healingStrategies = this.initializeHealingStrategies();\n    this.activeHealing = new Map();\n  }\n\n  private initializeHealingStrategies(): HealingStrategy[] {\n    return [\n      {\n        name: \"Visual Glitch Recovery\",\n        priority: 1,\n        conditions: (issue) => issue.type === \"visual-glitch\",\n        actions: [\n          {\n            id: \"style-reset\",\n            targetComponent: \"\",\n            actionType: \"style-reset\",\n            description: \"Reset component styles to default state\",\n            implementation: async () => this.resetComponentStyles(),\n            rollback: async () => this.restoreComponentStyles(),\n            successRate: 0.85,\n          },\n          {\n            id: \"dom-rebuild\",\n            targetComponent: \"\",\n            actionType: \"dom-rebuild\",\n            description: \"Rebuild component DOM structure\",\n            implementation: async () => this.rebuildComponentDOM(),\n            rollback: async () => this.restoreComponentDOM(),\n            successRate: 0.75,\n          },\n        ],\n        successRate: 0.8,\n        executionTime: 500,\n      },\n      {\n        name: \"Accessibility Fix\",\n        priority: 2,\n        conditions: (issue) => issue.type === \"accessibility\",\n        actions: [\n          {\n            id: \"aria-fix\",\n            targetComponent: \"\",\n            actionType: \"accessibility-fix\",\n            description: \"Apply automatic ARIA attributes\",\n            implementation: async () => this.fixAriaAttributes(),\n            rollback: async () => this.removeAriaAttributes(),\n            successRate: 0.95,\n          },\n        ],\n        successRate: 0.9,\n        executionTime: 200,\n      },\n      {\n        name: \"Performance Optimization\",\n        priority: 3,\n        conditions: (issue) => issue.type === \"performance\",\n        actions: [\n          {\n            id: \"perf-optimize\",\n            targetComponent: \"\",\n            actionType: \"performance-optimization\",\n            description: \"Apply performance optimizations\",\n            implementation: async () => this.optimizePerformance(),\n            rollback: async () => this.revertPerformanceChanges(),\n            successRate: 0.7,\n          },\n        ],\n        successRate: 0.65,\n        executionTime: 1000,\n      },\n    ];\n  }\n\n  async diagnoseComponent(\n    element: HTMLElement,\n    componentId: string,\n    componentType: string\n  ): Promise<ComponentHealthCheck> {\n    const startTime = performance.now();\n\n    // Collect issues from all detectors\n    const visualIssues = this.visualDetector.detectAnomalies(\n      element,\n      componentId\n    );\n    const a11yIssues = this.a11yDetector.detectIssues(element);\n    const perfIssues = this.perfDetector.detectPerformanceIssues(componentId);\n\n    const allIssues = [...visualIssues, ...a11yIssues, ...perfIssues];\n\n    // Calculate health score\n    const healthScore = this.calculateHealthScore(allIssues);\n\n    // Determine status\n    let status: ComponentHealthCheck[\"status\"] = \"healthy\";\n    if (allIssues.some((i) => i.severity === \"critical\")) status = \"critical\";\n    else if (allIssues.some((i) => i.severity === \"high\")) status = \"warning\";\n\n    const diagnosis: ComponentHealthCheck = {\n      componentId,\n      componentType,\n      healthScore,\n      issues: allIssues,\n      lastChecked: Date.now(),\n      recoveryAttempts:\n        this.componentHealth.get(componentId)?.recoveryAttempts || 0,\n      status,\n    };\n\n    this.componentHealth.set(componentId, diagnosis);\n\n    // Record performance\n    const diagnosisTime = performance.now() - startTime;\n    this.perfDetector.recordRenderTime(\n      `diagnosis-${componentId}`,\n      diagnosisTime\n    );\n\n    // Auto-heal if necessary\n    if (status === \"critical\" || (status === \"warning\" && healthScore < 0.7)) {\n      await this.initiateHealing(componentId, element);\n    }\n\n    return diagnosis;\n  }\n\n  private calculateHealthScore(issues: ComponentIssue[]): number {\n    if (issues.length === 0) return 1.0;\n\n    const severityWeights = { low: 0.1, medium: 0.3, high: 0.6, critical: 1.0 };\n    const totalImpact = issues.reduce(\n      (sum, issue) => sum + severityWeights[issue.severity],\n      0\n    );\n    const maxPossibleImpact = issues.length * 1.0;\n\n    return Math.max(0, 1 - totalImpact / maxPossibleImpact);\n  }\n\n  private async initiateHealing(\n    componentId: string,\n    element: HTMLElement\n  ): Promise<boolean> {\n    const health = this.componentHealth.get(componentId);\n    if (!health || health.status === \"healing\") return false;\n\n    // Update status\n    health.status = \"healing\";\n    health.recoveryAttempts++;\n\n    // Find applicable healing strategies\n    const applicableStrategies = this.healingStrategies.filter((strategy) =>\n      health.issues.some((issue) => strategy.conditions(issue))\n    );\n\n    // Sort by priority\n    applicableStrategies.sort((a, b) => a.priority - b.priority);\n\n    let healingSuccess = false;\n\n    for (const strategy of applicableStrategies) {\n      try {\n        const actions = strategy.actions.map<HealingAction>((action) => ({\n          ...action,\n          targetComponent: componentId,\n        }));\n\n        this.activeHealing.set(componentId, actions);\n\n        // Execute healing actions\n        for (const action of actions) {\n          const success = await action.implementation();\n          action.appliedAt = Date.now();\n\n          if (success) {\n            healingSuccess = true;\n          } else {\n            await action.rollback();\n          }\n        }\n\n        if (healingSuccess) break;\n      } catch {\n        // Try the next strategy when one fails.\n      }\n    }\n\n    // Re-diagnose after healing\n    const updatedHealth = await this.diagnoseComponent(\n      element,\n      componentId,\n      health.componentType\n    );\n\n    if (healingSuccess && updatedHealth.healthScore > health.healthScore) {\n      updatedHealth.status =\n        updatedHealth.healthScore > 0.8 ? \"healthy\" : \"warning\";\n    } else {\n      updatedHealth.status = \"failed\";\n    }\n\n    return healingSuccess;\n  }\n\n  // Healing implementation methods\n  private async resetComponentStyles(): Promise<boolean> {\n    try {\n      // Implementation would reset component styles\n      await new Promise((resolve) =>\n        setTimeout(resolve, ANIMATION.DURATION.fast)\n      );\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async restoreComponentStyles(): Promise<void> {\n    // Rollback implementation\n    await new Promise((resolve) =>\n      setTimeout(resolve, ANIMATION.DURATION.fast / 3)\n    );\n  }\n\n  private async rebuildComponentDOM(): Promise<boolean> {\n    try {\n      // Implementation would trigger React re-render\n      await new Promise((resolve) =>\n        setTimeout(resolve, ANIMATION.DURATION.fast * 1.3)\n      );\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async restoreComponentDOM(): Promise<void> {\n    await new Promise((resolve) => setTimeout(resolve, 100));\n  }\n\n  private async fixAriaAttributes(): Promise<boolean> {\n    try {\n      // Implementation would add missing ARIA attributes\n      await new Promise((resolve) =>\n        setTimeout(resolve, ANIMATION.DURATION.fast / 3)\n      );\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async removeAriaAttributes(): Promise<void> {\n    await new Promise((resolve) =>\n      setTimeout(resolve, ANIMATION.DURATION.fast / 6)\n    );\n  }\n\n  private async optimizePerformance(): Promise<boolean> {\n    try {\n      // Implementation would apply performance optimizations\n      await new Promise((resolve) =>\n        setTimeout(resolve, ANIMATION.DURATION.normal * 2)\n      );\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async revertPerformanceChanges(): Promise<void> {\n    await new Promise((resolve) =>\n      setTimeout(resolve, ANIMATION.DURATION.normal)\n    );\n  }\n\n  // Public API\n  getComponentHealth(componentId: string): ComponentHealthCheck | undefined {\n    return this.componentHealth.get(componentId);\n  }\n\n  getAllComponentHealth(): ComponentHealthCheck[] {\n    return Array.from(this.componentHealth.values());\n  }\n\n  getActiveHealing(): Array<{ componentId: string; actions: HealingAction[] }> {\n    return Array.from(this.activeHealing.entries()).map(\n      ([componentId, actions]) => ({\n        componentId,\n        actions,\n      })\n    );\n  }\n\n  recordRenderTime(componentId: string, time: number): void {\n    this.perfDetector.recordRenderTime(componentId, time);\n  }\n}\n\n// React Context for the self-healing system\nconst SelfHealingContext = createContext<{\n  system: SelfHealingSystem | null;\n  diagnoseComponent: (\n    element: HTMLElement,\n    componentId: string,\n    componentType: string\n  ) => Promise<ComponentHealthCheck>;\n  getComponentHealth: (componentId: string) => ComponentHealthCheck | undefined;\n  getAllHealth: () => ComponentHealthCheck[];\n}>({\n  system: null,\n  diagnoseComponent: async () => ({}) as ComponentHealthCheck,\n  getComponentHealth: () => undefined,\n  getAllHealth: () => [],\n});\n\n// Provider component\nexport function GlassSelfHealingProvider({\n  children,\n  onHealingStarted,\n  onHealingCompleted,\n  diagnosticInterval = 5000,\n}: {\n  children: React.ReactNode;\n  onHealingStarted?: (componentId: string, issues: ComponentIssue[]) => void;\n  onHealingCompleted?: (componentId: string, success: boolean) => void;\n  diagnosticInterval?: number;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const systemRef = useRef<SelfHealingSystem>();\n  const [systemHealth, setSystemHealth] = useState<ComponentHealthCheck[]>([]);\n\n  // Initialize system\n  useEffect(() => {\n    systemRef.current = new SelfHealingSystem();\n\n    // Periodic health updates\n    const updateInterval = setInterval(() => {\n      if (systemRef.current) {\n        const allHealth = systemRef.current.getAllComponentHealth();\n        setSystemHealth(allHealth);\n      }\n    }, diagnosticInterval);\n\n    return () => clearInterval(updateInterval);\n  }, [diagnosticInterval]);\n\n  const diagnoseComponent = useCallback(\n    async (\n      element: HTMLElement,\n      componentId: string,\n      componentType: string\n    ) => {\n      if (!systemRef.current)\n        throw new Error(\"Self-healing system not initialized\");\n      return systemRef.current.diagnoseComponent(\n        element,\n        componentId,\n        componentType\n      );\n    },\n    []\n  );\n\n  const getComponentHealth = useCallback((componentId: string) => {\n    return systemRef.current?.getComponentHealth(componentId);\n  }, []);\n\n  const getAllHealth = useCallback(() => {\n    return systemRef.current?.getAllComponentHealth() || [];\n  }, []);\n\n  const value = {\n    system: systemRef.current || null,\n    diagnoseComponent,\n    getComponentHealth,\n    getAllHealth,\n  };\n\n  return (\n    <SelfHealingContext.Provider value={value}>\n      {children}\n    </SelfHealingContext.Provider>\n  );\n}\n\n// Hook to use the self-healing system\nexport function useSelfHealing() {\n  const context = useContext(SelfHealingContext);\n  if (!context) {\n    throw new Error(\n      \"useSelfHealing must be used within GlassSelfHealingProvider\"\n    );\n  }\n  return context;\n}\n\n// Self-healing component wrapper\nexport function GlassSelfHealingWrapper({\n  children,\n  componentId,\n  componentType = \"unknown\",\n  monitoringEnabled = true,\n  healingEnabled = true,\n  showDebugHud = false,\n  className,\n}: {\n  children: React.ReactNode;\n  componentId: string;\n  componentType?: string;\n  monitoringEnabled?: boolean;\n  healingEnabled?: boolean;\n  showDebugHud?: boolean;\n  className?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { diagnoseComponent, getComponentHealth } = useSelfHealing();\n  const elementRef = useRef<HTMLDivElement>(null);\n  const [health, setHealth] = useState<ComponentHealthCheck | null>(null);\n  const lastDiagnosisRef = useRef<number>(0);\n\n  // Automatic monitoring\n  useEffect(() => {\n    if (!monitoringEnabled || !elementRef.current) return;\n\n    const runDiagnosis = async () => {\n      const now = Date.now();\n      if (now - lastDiagnosisRef.current < 3000) return; // Throttle diagnostics\n\n      lastDiagnosisRef.current = now;\n\n      try {\n        const diagnosis = await diagnoseComponent(\n          elementRef.current!,\n          componentId,\n          componentType\n        );\n        setHealth(diagnosis);\n      } catch {\n        setHealth(null);\n      }\n    };\n\n    // Initial diagnosis\n    runDiagnosis();\n\n    // Periodic monitoring\n    const monitorInterval = setInterval(\n      runDiagnosis,\n      ANIMATION.DURATION.slower * 14\n    );\n\n    // Monitor for DOM mutations\n    const observer = new MutationObserver(() => {\n      runDiagnosis();\n    });\n\n    if (elementRef.current) {\n      observer.observe(elementRef.current, {\n        childList: true,\n        attributes: true,\n        subtree: true,\n      });\n    }\n\n    return () => {\n      clearInterval(monitorInterval);\n      observer.disconnect();\n    };\n  }, [monitoringEnabled, componentId, componentType, diagnoseComponent]);\n\n  const statusColor = health\n    ? {\n        healthy: \"hsl(var(--glass-color-success))\",\n        warning: \"hsl(var(--glass-color-warning))\",\n        critical: \"hsl(var(--glass-color-danger))\",\n        healing: \"hsl(var(--glass-color-primary))\",\n        failed: \"#7f1d1d\",\n      }[health.status]\n    : \"var(--glass-gray-500)\";\n\n  return (\n    <div\n      ref={elementRef}\n      className={cn(\n        \"relative self-healing-wrapper\",\n        health?.status === \"healing\" && \"self-healing-active\",\n        className\n      )}\n      data-component-id={componentId}\n      data-component-type={componentType}\n      data-health-score={health?.healthScore}\n      data-status={health?.status}\n    >\n      {children}\n\n      {/* Health indicator */}\n      {showDebugHud && monitoringEnabled && health && (\n        <motion.div\n          className=\"glass-absolute glass-top-1 glass-right-1 glass-w-3 glass-h-3 glass-radius-full glass-border-2 glass-border-white/20\"\n          style={{ backgroundColor: statusColor }}\n          initial={{ scale: 0 }}\n          animate={prefersReducedMotion ? {} : { scale: 1 }}\n          title={`Health: ${(health.healthScore * 100).toFixed(1)}% | Status: ${health.status} | Issues: ${health.issues.length}`}\n        />\n      )}\n    </div>\n  );\n}\n\n// System health dashboard\nexport function GlassSelfHealingDashboard({\n  className,\n  showOnlyUnhealthy = false,\n}: {\n  className?: string;\n  showOnlyUnhealthy?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { getAllHealth } = useSelfHealing();\n  const [allHealth, setAllHealth] = useState<ComponentHealthCheck[]>([]);\n  const [showDashboard, setShowDashboard] = useState(false);\n\n  useEffect(() => {\n    const updateHealth = () => {\n      const health = getAllHealth();\n      setAllHealth(\n        showOnlyUnhealthy\n          ? health.filter((h) => h.status !== \"healthy\")\n          : health\n      );\n    };\n\n    updateHealth();\n    const interval = setInterval(updateHealth, 2000);\n    return () => clearInterval(interval);\n  }, [getAllHealth, showOnlyUnhealthy]);\n\n  const criticalCount = allHealth.filter((h) => h.status === \"critical\").length;\n  const warningCount = allHealth.filter((h) => h.status === \"warning\").length;\n  const healingCount = allHealth.filter((h) => h.status === \"healing\").length;\n\n  return (\n    <div className={cn(\"fixed top-4 left-4 z-50\", className)}>\n      <motion.button\n        className={cn(\n          \"w-12 h-12 glass-radius-full glass-surface-primary glass-elev-3\",\n          \"flex items-center justify-center glass-text-primary\",\n          \"transition-all duration-300 glass-hover-scale-105\"\n        )}\n        onClick={() => setShowDashboard(!showDashboard)}\n        whileHover={{ scale: 1.05 }}\n        whileTap={{ scale: 0.95 }}\n      >\n        \uD83C\uDFE5\n        {criticalCount + warningCount + healingCount > 0 && (\n          <motion.div\n            className=\"glass-absolute glass-top-1 glass--right-1 glass-w-3 glass-h-3 glass-surface-red glass-radius-full glass-text-xs glass-text-primary glass-flex glass-items-center glass-justify-center\"\n            initial={{ scale: 0 }}\n            animate={prefersReducedMotion ? {} : { scale: 1 }}\n          >\n            {criticalCount + warningCount + healingCount}\n          </motion.div>\n        )}\n      </motion.button>\n\n      <AnimatePresence>\n        {showDashboard && (\n          <motion.div\n            className={cn(\n              \"absolute top-14 left-0 w-80 max-h-96 overflow-y-auto\",\n              \"glass-surface-primary glass-elev-4 glass-radius-lg glass-p-4 glass-gap-3\"\n            )}\n            initial={{ opacity: 0, y: -10, scale: 0.95 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: -10, scale: 0.95 }}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <h3 className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                Self-Healing Dashboard\n              </h3>\n              <button\n                onClick={() => setShowDashboard(false)}\n                className=\"glass-text-xs glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                \u2715\n              </button>\n            </div>\n\n            {allHealth.map((health) => (\n              <motion.div\n                key={health.componentId}\n                className=\"glass-p-3 glass-surface-secondary glass-radius-md\"\n                initial={{ opacity: 0, x: -10 }}\n                animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n              >\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <span className=\"glass-text-sm glass-text-primary glass-font-medium\">\n                    {health.componentType}\n                  </span>\n                  <div className=\"glass-flex glass-items-center glass-gap-2\">\n                    <div\n                      className=\"glass-w-3 glass-h-3 glass-radius-full\"\n                      style={{\n                        backgroundColor: HEALTH_STATUS_COLORS[health.status],\n                      }}\n                    />\n                    <span className=\"glass-text-xs glass-text-secondary\">\n                      {(health.healthScore * 100).toFixed(0)}%\n                    </span>\n                  </div>\n                </div>\n                {health.issues.length > 0 && (\n                  <div className=\"glass-mt-1 glass-text-xs glass-text-tertiary\">\n                    {health.issues.length} issue\n                    {health.issues.length !== 1 ? \"s\" : \"\"} detected\n                  </div>\n                )}\n              </motion.div>\n            ))}\n\n            {allHealth.length === 0 && (\n              <div className=\"glass-text-center glass-text-sm glass-text-secondary glass-py-4\">\n                All components healthy! \uD83C\uDF89\n              </div>\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Hook for component self-monitoring\nexport function useComponentSelfHealing(\n  componentId: string,\n  componentType: string = \"component\"\n) {\n  const { diagnoseComponent } = useSelfHealing();\n  const [health, setHealth] = useState<ComponentHealthCheck | null>(null);\n  const elementRef = useRef<HTMLElement>(null);\n\n  const runHealthCheck = useCallback(async () => {\n    if (elementRef.current) {\n      try {\n        const diagnosis = await diagnoseComponent(\n          elementRef.current,\n          componentId,\n          componentType\n        );\n        setHealth(diagnosis);\n        return diagnosis;\n      } catch {\n        return null;\n      }\n    }\n    return null;\n  }, [diagnoseComponent, componentId, componentType]);\n\n  return {\n    health,\n    runHealthCheck,\n    elementRef,\n    isHealthy: health?.status === \"healthy\",\n    isHealing: health?.status === \"healing\",\n    isCritical: health?.status === \"critical\",\n  };\n}\n\n// Main component wrapper for testing and simple usage\nexport function GlassSelfHealingSystem({\n  children,\n  className,\n  components = [],\n  ...props\n}: {\n  children?: React.ReactNode;\n  className?: string;\n  components?: SelfHealingComponentInput[];\n} & React.HTMLAttributes<HTMLDivElement>) {\n  return (\n    <GlassSelfHealingProvider>\n      <GlassSelfHealingWrapper\n        componentId=\"test-component\"\n        componentType=\"test\"\n      >\n        <div className={className} {...props}>\n          {children || <div>Self-Healing System</div>}\n        </div>\n      </GlassSelfHealingWrapper>\n    </GlassSelfHealingProvider>\n  );\n}\n\n// Presets for different healing configurations\nexport const selfHealingPresets = {\n  strict: {\n    monitoringInterval: 2000,\n    healingThreshold: 0.9,\n    autoHealingEnabled: true,\n    visualMonitoring: true,\n    accessibilityMonitoring: true,\n    performanceMonitoring: true,\n  },\n  balanced: {\n    monitoringInterval: 5000,\n    healingThreshold: 0.7,\n    autoHealingEnabled: true,\n    visualMonitoring: true,\n    accessibilityMonitoring: true,\n    performanceMonitoring: true,\n  },\n  relaxed: {\n    monitoringInterval: 10000,\n    healingThreshold: 0.5,\n    autoHealingEnabled: false,\n    visualMonitoring: false,\n    accessibilityMonitoring: true,\n    performanceMonitoring: false,\n  },\n  development: {\n    monitoringInterval: 1000,\n    healingThreshold: 0.8,\n    autoHealingEnabled: true,\n    visualMonitoring: true,\n    accessibilityMonitoring: true,\n    performanceMonitoring: true,\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Auto Composer\n * On-demand generative UI layouts using LLMs + design tokens\n * Part of Next-Wave Systems (10/10) - Generative Design Systems\n *\n * @demo DEMO / EXPERIMENTAL COMPONENT \u2014 uses in-component mock data.\n * Generated layouts are produced by a local heuristic stand-in, NOT a real LLM\n * call. Wire it to a real model/generation backend before production use.\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Generative UI types\ninterface UIPrompt {\n  description: string;\n  purpose: string;\n  constraints?: string[];\n  style?: \"minimal\" | \"standard\" | \"detailed\" | \"experimental\";\n  components?: string[];\n  interactions?: string[];\n}\n\ninterface GeneratedLayout {\n  id: string;\n  prompt: UIPrompt;\n  jsx: string;\n  css: string;\n  tokens: DesignTokens;\n  confidence: number;\n  iterations: number;\n  timestamp: number;\n}\n\ntype DesignTokenPrimitive = string | number;\ntype DesignTokenGroup = Record<\n  string,\n  DesignTokenPrimitive | Record<string, DesignTokenPrimitive>\n>;\n\ninterface DesignTokens {\n  colors: Record<string, string>;\n  spacing: Record<string, string>;\n  typography: DesignTokenGroup;\n  shadows: Record<string, string>;\n  borders: Record<string, string>;\n  animations: DesignTokenGroup;\n}\n\ninterface ComposerConfig {\n  model: \"claude\" | \"gpt\" | \"local\";\n  temperature: number;\n  maxTokens: number;\n  designSystem: \"material\" | \"fluid\" | \"glass\" | \"custom\";\n  accessibility: boolean;\n  responsive: boolean;\n}\n\n// AI-powered layout generator\nclass AILayoutGenerator {\n  private config: ComposerConfig;\n  private designTokens: DesignTokens;\n  private templateLibrary: Map<string, string>;\n\n  constructor(config: ComposerConfig) {\n    this.config = config;\n    this.designTokens = this.initializeDesignTokens();\n    this.templateLibrary = new Map();\n    this.loadTemplateLibrary();\n  }\n\n  private initializeDesignTokens(): DesignTokens {\n    return {\n      colors: {\n        primary: \"hsl(var(--glass-color-primary))\",\n        secondary: \"hsl(var(--glass-color-success))\",\n        accent: \"hsl(var(--glass-color-primary))\",\n        background: \"var(--glass-primary-level2-surface)\",\n        surface: \"color-mix(in srgb, var(--glass-white) 10%, transparent)\",\n        text: \"var(--glass-white)\",\n        textSecondary:\n          \"color-mix(in srgb, var(--glass-white) 70%, transparent)\",\n      },\n      spacing: {\n        xs: \"0.25rem\",\n        sm: \"0.5rem\",\n        md: \"1rem\",\n        lg: \"1.5rem\",\n        xl: \"2rem\",\n        \"2xl\": \"3rem\",\n      },\n      typography: {\n        fontSize: {\n          xs: \"0.75rem\",\n          sm: \"0.875rem\",\n          base: \"1rem\",\n          lg: \"1.125rem\",\n          xl: \"1.25rem\",\n          \"2xl\": \"1.5rem\",\n        },\n        fontWeight: {\n          light: 300,\n          normal: 400,\n          medium: 500,\n          semibold: 600,\n          bold: 700,\n        },\n      },\n      shadows: {\n        sm: \"0 1px 2px 0 color-mix(in srgb, var(--glass-black) 5%, transparent)\",\n        md: \"0 4px 6px -1px color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n        lg: \"0 10px 15px -3px color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n        glass:\n          \"0 8px 32px color-mix(in srgb, var(--glass-black) 37%, transparent)\",\n      },\n      borders: {\n        radius: \"0.375rem\",\n      },\n      animations: {\n        duration: {\n          fast: \"var(--glass-motion-duration-fast)\",\n          normal: \"var(--glass-motion-duration-normal)\",\n          slow: \"var(--glass-motion-duration-slow)\",\n        },\n        easing: {\n          ease: \"var(--glass-motion-ease-standard)\",\n          easeIn: \"var(--glass-motion-ease-in)\",\n          easeOut: \"var(--glass-motion-ease-out)\",\n          bounce: \"var(--glass-motion-ease-spring)\",\n        },\n      },\n    };\n  }\n\n  private loadTemplateLibrary(): void {\n    this.templateLibrary.set(\n      \"card\",\n      `\n      <div className=\"glass-surface-primary glass-elev-2 glass-radius-lg glass-p-6\">\n        {children}\n      </div>\n    `\n    );\n\n    this.templateLibrary.set(\n      \"button\",\n      `\n      <motion.button\n        className=\"glass-surface-secondary glass-px-4 glass-py-2 glass-radius-md glass-text-primary\"\n        whileHover={{ scale: 1.05 }}\n        whileTap={{ scale: 0.95 }}\n      >\n        {children}\n      </motion.button>\n    `\n    );\n\n    this.templateLibrary.set(\n      \"input\",\n      `\n      <input\n        className=\"glass-surface-secondary glass-border glass-radius-md glass-px-3 glass-py-2 glass-text-primary glass-touch-target glass-contrast-guard\"\n        placeholder={placeholder}\n      />\n    `\n    );\n  }\n\n  async generateLayout(prompt: UIPrompt): Promise<GeneratedLayout> {\n    const startTime = Date.now();\n\n    // For demo, we'll use rule-based generation\n    // In practice, this would call an LLM API\n    const generatedJSX = await this.generateJSXFromPrompt(prompt);\n    const generatedCSS = await this.generateCSSFromPrompt(prompt);\n    const iterations = 1;\n\n    return {\n      id: `layout-${Date.now()}`,\n      prompt,\n      jsx: generatedJSX,\n      css: generatedCSS,\n      tokens: this.designTokens,\n      confidence: 0.85,\n      iterations,\n      timestamp: startTime,\n    };\n  }\n\n  private async generateJSXFromPrompt(prompt: UIPrompt): Promise<string> {\n    // Simulate AI generation with template matching\n    const { description, purpose, style = \"standard\" } = prompt;\n\n    let jsx = \"\";\n\n    if (description.toLowerCase().includes(\"dashboard\")) {\n      jsx = this.generateDashboardLayout(prompt);\n    } else if (description.toLowerCase().includes(\"form\")) {\n      jsx = this.generateFormLayout(prompt);\n    } else if (description.toLowerCase().includes(\"card\")) {\n      jsx = this.generateCardLayout(prompt);\n    } else if (description.toLowerCase().includes(\"list\")) {\n      jsx = this.generateListLayout(prompt);\n    } else {\n      jsx = this.generateGenericLayout(prompt);\n    }\n\n    return jsx;\n  }\n\n  private generateDashboardLayout(prompt: UIPrompt): string {\n    const normalDuration = ANIMATION.DURATION.normal / 1000;\n    return `\n<div className=\"glass-min-glass-h-screen glass-surface-primary glass-p-6\">\n  <div className=\"glass-max-w-7xl glass-mx-auto glass-space-y-6\">\n    {/* Header */}\n    <div className=\"glass-flex glass-items-center glass-justify-between\">\n      <h1 className=\"glass-text-3xl glass-font-bold glass-text-primary\">Dashboard</h1>\n      <div className=\"glass-flex glass-gap-4\">\n        <motion.button className=\"glass-surface-secondary glass-px-4 glass-py-2 glass-radius-md\">\n          Settings\n        </motion.button>\n        <motion.button className=\"glass-surface-accent glass-px-4 glass-py-2 glass-radius-md\">\n          New Item\n        </motion.button>\n      </div>\n    </div>\n\n    {/* Stats Grid */}\n    <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-4 glass-gap-6\">\n      {stats.map((stat, index) => (\n        <motion.div\n          key={index}\n          className=\"glass-surface-secondary glass-elev-2 glass-radius-lg glass-p-6\"\n          initial={{ opacity: 0, y: 20 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n          transition={prefersReducedMotion ? { duration: 0 } : { duration: ${normalDuration} }}\n        >\n          <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">{stat.value}</div>\n          <div className=\"glass-text-sm glass-text-secondary\">{stat.label}</div>\n        </motion.div>\n      ))}\n    </div>\n\n    {/* Main Content */}\n    <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-3 glass-gap-6\">\n      <div className=\"lg:glass-col-span-2\">\n        <div className=\"glass-surface-secondary glass-elev-2 glass-radius-lg glass-p-6\">\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary glass-mb-4\">Main Chart</h2>\n          {/* Chart component would go here */}\n        </div>\n      </div>\n      <div className=\"glass-space-y-6\">\n        <div className=\"glass-surface-secondary glass-elev-2 glass-radius-lg glass-p-6\">\n          <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-mb-4\">Recent Activity</h3>\n          {/* Activity list would go here */}\n        </div>\n      </div>\n    </div>\n  </div>\n</div>`;\n  }\n\n  private generateFormLayout(prompt: UIPrompt): string {\n    return `\n<div className=\"glass-max-w-md glass-mx-auto glass-surface-primary glass-elev-3 glass-radius-lg glass-p-8\">\n  <h2 className=\"glass-text-2xl glass-font-bold glass-text-primary glass-mb-6 glass-text-center\">Contact Form</h2>\n  \n  <form className=\"glass-space-y-6\">\n    <div>\n      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n        Full Name\n      </label>\n      <input\n        type=\"text\"\n        className=\"glass-w-full glass-surface-secondary glass-border glass-radius-md glass-px-3 glass-py-2 glass-text-primary placeholder-glass-opacity-50 glass-touch-target glass-contrast-guard\"\n        placeholder=\"Enter your full name\"\n      />\n    </div>\n\n    <div>\n      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n        Email Address\n      </label>\n      <input\n        type=\"email\"\n        className=\"glass-w-full glass-surface-secondary glass-border glass-radius-md glass-px-3 glass-py-2 glass-text-primary placeholder-glass-opacity-50 glass-touch-target glass-contrast-guard\"\n        placeholder=\"Enter your email\"\n      />\n    </div>\n\n    <div>\n      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n        Message\n      </label>\n      <textarea\n        rows={4}\n        className=\"glass-w-full glass-surface-secondary glass-border glass-radius-md glass-px-3 glass-py-2 glass-text-primary placeholder-glass-opacity-50 glass-touch-target glass-contrast-guard\"\n        placeholder=\"Enter your message\"\n      />\n    </div>\n\n    <motion.button\n      type=\"submit\"\n      className=\"glass-w-full glass-surface-accent glass-elev-2 glass-radius-md glass-py-3 glass-font-semibold glass-text-primary\"\n      whileHover={{ scale: 1.02 }}\n      whileTap={{ scale: 0.98 }}\n    >\n      Send Message\n    </motion.button>\n  </form>\n</div>`;\n  }\n\n  private generateCardLayout(prompt: UIPrompt): string {\n    const normalDuration = ANIMATION.DURATION.normal / 1000;\n    return `\n<div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 lg:glass-grid-cols-3 glass-gap-6 glass-p-6\">\n  {items.map((item, index) => (\n    <motion.div\n      key={item.id}\n      className=\"glass-surface-secondary glass-elev-2 glass-radius-lg glass-overflow-hidden\"\n      initial={{ opacity: 0, y: 20 }}\n      animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n      transition={prefersReducedMotion ? { duration: 0 } : { duration: ${ANIMATION.DURATION.normal / 1000} }}\n      whileHover={{ scale: 1.02 }}\n    >\n      {item.image && (\n        <div className=\"glass-aspect-video glass-gradient-primary glass-gradient-primary glass-gradient-primary\"></div>\n      )}\n      \n      <div className=\"glass-p-6\">\n        <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary glass-mb-2\">\n          {item.title}\n        </h3>\n        <p className=\"glass-text-secondary glass-mb-4\">\n          {item.description}\n        </p>\n        \n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <span className=\"glass-text-sm glass-text-tertiary\">\n            {item.date}\n          </span>\n          <motion.button\n            className=\"glass-surface-accent glass-px-3 glass-py-1 glass-radius-sm glass-text-sm\"\n            whileHover={{ scale: 1.05 }}\n            whileTap={{ scale: 0.95 }}\n          >\n            View\n          </motion.button>\n        </div>\n      </div>\n    </motion.div>\n  ))}\n</div>`;\n  }\n\n  private generateListLayout(prompt: UIPrompt): string {\n    const normalDuration = ANIMATION.DURATION.normal / 1000;\n    return `\n<div className=\"glass-max-w-2xl glass-mx-auto glass-surface-primary glass-elev-2 glass-radius-lg glass-overflow-hidden\">\n  <div className=\"glass-p-6 glass-border-b glass-border\">\n    <h2 className=\"glass-text-2xl glass-font-bold glass-text-primary\">List Items</h2>\n    <p className=\"glass-text-secondary glass-mt-1\">Manage your items efficiently</p>\n  </div>\n  \n  <div className=\"glass-divide-y glass-divide\">\n    {items.map((item, index) => (\n      <motion.div\n        key={item.id}\n        className=\"glass-p-4 hover:glass-surface-secondary glass-transition-colors\"\n        initial={{ opacity: 0, x: -20 }}\n        animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n        transition={prefersReducedMotion ? { duration: 0 } : { duration: ${ANIMATION.DURATION.normal / 1000} }}\n      >\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <div className=\"glass-flex glass-items-center glass-gap-3\">\n            <div className=\"glass-w-10 glass-h-10 glass-surface-accent glass-radius-full glass-flex glass-items-center glass-justify-center\">\n              {item.icon}\n            </div>\n            <div>\n              <div className=\"glass-font-medium glass-text-primary\">{item.title}</div>\n              <div className=\"glass-text-sm glass-text-secondary\">{item.subtitle}</div>\n            </div>\n          </div>\n          \n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <motion.button\n              className=\"glass-p-2 glass-surface-secondary glass-radius-md\"\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.95 }}\n            >\n              Edit\n            </motion.button>\n            <motion.button\n              className=\"glass-p-2 glass-surface-secondary glass-radius-md\"\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.95 }}\n            >\n              Delete\n            </motion.button>\n          </div>\n        </div>\n      </motion.div>\n    ))}\n  </div>\n</div>`;\n  }\n\n  private generateGenericLayout(prompt: UIPrompt): string {\n    return `\n<div className=\"glass-surface-primary glass-elev-2 glass-radius-lg glass-p-6\">\n  <div className=\"glass-text-center glass-gap-4\">\n    <h1 className=\"glass-text-3xl glass-font-bold glass-text-primary\">\n      Generated Component\n    </h1>\n    <p className=\"glass-text-secondary glass-max-w-md glass-mx-auto\">\n      This is a dynamically generated component based on your prompt: \"${prompt.description}\"\n    </p>\n    \n    <div className=\"glass-flex glass-justify-center glass-gap-4 glass-pt-4\">\n      <motion.button\n        className=\"glass-surface-accent glass-px-6 glass-py-3 glass-radius-md glass-font-medium\"\n        whileHover={{ scale: 1.05 }}\n        whileTap={{ scale: 0.95 }}\n      >\n        Primary Action\n      </motion.button>\n      <motion.button\n        className=\"glass-surface-secondary glass-px-6 glass-py-3 glass-radius-md glass-font-medium\"\n        whileHover={{ scale: 1.05 }}\n        whileTap={{ scale: 0.95 }}\n      >\n        Secondary Action\n      </motion.button>\n    </div>\n  </div>\n</div>`;\n  }\n\n  private async generateCSSFromPrompt(prompt: UIPrompt): Promise<string> {\n    const { style = \"standard\" } = prompt;\n\n    const baseCSS = `\n.generated-component {\n  /* Base glassmorphism styles */\n  backdrop-filter: var(--glass-backdrop-blur);\n  -webkit-backdrop-filter: var(--glass-backdrop-blur);\n  background: var(--glass-bg-default);\n  border: 1px solid var(--glass-border-default);\n  border-radius: var(--glass-radius-xl);\n  box-shadow: var(--glass-elev-2);\n}\n\n.generated-component .glass-surface-primary {\n  background: var(--glass-bg-default);\n  backdrop-filter: var(--glass-backdrop-blur);\n}\n\n.generated-component .glass-surface-secondary {\n  background: var(--glass-bg-default);\n  backdrop-filter: var(--glass-backdrop-blur);\n}\n\n.generated-component .glass-text-primary {\n  color: var(--glass-text-primary);\n}\n\n.generated-component .glass-text-secondary {\n  color: var(--glass-text-secondary);\n}\n\n.generated-component .glass-border {\n  border: 1px solid var(--glass-border-default);\n}\n`;\n\n    let styleSpecificCSS = \"\";\n\n    switch (style) {\n      case \"minimal\":\n        styleSpecificCSS = `\n.generated-component {\n  --glass-blur: var(--glass-blur-sm);\n  --glass-opacity: var(--glass-opacity-5);\n  --animation-duration: var(--glass-motion-duration-fast);\n}\n`;\n        break;\n      case \"detailed\":\n        styleSpecificCSS = `\n.generated-component {\n  --glass-blur: var(--glass-blur-xl);\n  --glass-opacity: var(--glass-opacity-15);\n  --animation-duration: var(--glass-motion-duration-slow);\n  box-shadow: var(--glass-elev-2);\n}\n`;\n        break;\n      case \"experimental\":\n        styleSpecificCSS = `\n.generated-component {\n  --glass-blur: var(--glass-blur-2xl);\n  --glass-opacity: var(--glass-opacity-20);\n  --animation-duration: var(--glass-motion-duration-slower);\n  background: var(--glass-bg-default);\n  animation: glowPulse var(--glass-motion-duration-slowest) var(--glass-motion-ease-in-out) infinite alternate;\n}\n\n@keyframes glowPulse {\n  0% { box-shadow: var(--glass-elev-2); }\n  100% { box-shadow: var(--glass-elev-2); }\n}\n`;\n        break;\n    }\n\n    return baseCSS + styleSpecificCSS;\n  }\n}\n\n// Layout optimizer using genetic algorithms\nclass LayoutOptimizer {\n  private population: GeneratedLayout[];\n  private fitnessScores: Map<string, number>;\n  private generationCount: number;\n\n  constructor() {\n    this.population = [];\n    this.fitnessScores = new Map();\n    this.generationCount = 0;\n  }\n\n  async optimizeLayout(\n    baseLayout: GeneratedLayout,\n    userFeedback: number[]\n  ): Promise<GeneratedLayout> {\n    // Initialize population if empty\n    if (this.population.length === 0) {\n      this.population = await this.createInitialPopulation(baseLayout);\n    }\n\n    // Calculate fitness scores\n    this.calculateFitnessScores(userFeedback);\n\n    // Evolve the population\n    this.population = await this.evolvePopulation();\n    this.generationCount++;\n\n    // Return the best layout\n    return this.getBestLayout();\n  }\n\n  private async createInitialPopulation(\n    baseLayout: GeneratedLayout\n  ): Promise<GeneratedLayout[]> {\n    const population: GeneratedLayout[] = [baseLayout];\n\n    // Create variants\n    for (let i = 0; i < 9; i++) {\n      const variant = await this.createVariant(baseLayout);\n      population.push(variant);\n    }\n\n    return population;\n  }\n\n  private async createVariant(\n    layout: GeneratedLayout\n  ): Promise<GeneratedLayout> {\n    // Create variations in the layout\n    const mutations = [\n      \"spacing\",\n      \"colors\",\n      \"typography\",\n      \"shadows\",\n      \"animations\",\n    ];\n\n    const randomMutation =\n      mutations[Math.floor(Math.random() * mutations.length)];\n    const mutatedTokens = { ...layout.tokens };\n\n    // Apply random mutations\n    switch (randomMutation) {\n      case \"colors\":\n        const hue = Math.floor(Math.random() * 360);\n        mutatedTokens.colors.primary = `hsl(${hue}, 70%, 60%)`;\n        break;\n      case \"spacing\":\n        const scale = 0.8 + Math.random() * 0.4; // 0.8 to 1.2\n        Object.keys(mutatedTokens.spacing).forEach((key) => {\n          const value = parseFloat(mutatedTokens.spacing[key]);\n          mutatedTokens.spacing[key] = `${value * scale}rem`;\n        });\n        break;\n    }\n\n    return {\n      ...layout,\n      id: `${layout.id}-variant-${Date.now()}`,\n      tokens: mutatedTokens,\n      confidence: layout.confidence * (0.8 + Math.random() * 0.4),\n      timestamp: Date.now(),\n    };\n  }\n\n  private calculateFitnessScores(feedback: number[]): void {\n    this.population.forEach((layout, index) => {\n      const score = feedback[index] || 0.5; // Default neutral feedback\n      this.fitnessScores.set(layout.id, score);\n    });\n  }\n\n  private async evolvePopulation(): Promise<GeneratedLayout[]> {\n    // Selection, crossover, and mutation\n    const selected = this.selection();\n    const offspring = await this.crossover(selected);\n    return this.mutation(offspring);\n  }\n\n  private selection(): GeneratedLayout[] {\n    // Tournament selection\n    const selected: GeneratedLayout[] = [];\n    const tournamentSize = 3;\n\n    while (selected.length < this.population.length / 2) {\n      const tournament: GeneratedLayout[] = [];\n\n      for (let i = 0; i < tournamentSize; i++) {\n        const randomIndex = Math.floor(Math.random() * this.population.length);\n        tournament.push(this.population[randomIndex]);\n      }\n\n      // Select the best from tournament\n      const winner = tournament.reduce((best, current) => {\n        const bestScore = this.fitnessScores.get(best.id) || 0;\n        const currentScore = this.fitnessScores.get(current.id) || 0;\n        return currentScore > bestScore ? current : best;\n      });\n\n      selected.push(winner);\n    }\n\n    return selected;\n  }\n\n  private async crossover(\n    parents: GeneratedLayout[]\n  ): Promise<GeneratedLayout[]> {\n    const offspring: GeneratedLayout[] = [...parents];\n\n    // Create offspring by combining parent traits\n    while (offspring.length < this.population.length) {\n      const parent1 = parents[Math.floor(Math.random() * parents.length)];\n      const parent2 = parents[Math.floor(Math.random() * parents.length)];\n\n      const child = await this.combineLayouts(parent1, parent2);\n      offspring.push(child);\n    }\n\n    return offspring;\n  }\n\n  private async combineLayouts(\n    parent1: GeneratedLayout,\n    parent2: GeneratedLayout\n  ): Promise<GeneratedLayout> {\n    // Combine design tokens from both parents\n    const combinedTokens: DesignTokens = {\n      colors:\n        Math.random() > 0.5 ? parent1.tokens.colors : parent2.tokens.colors,\n      spacing:\n        Math.random() > 0.5 ? parent1.tokens.spacing : parent2.tokens.spacing,\n      typography:\n        Math.random() > 0.5\n          ? parent1.tokens.typography\n          : parent2.tokens.typography,\n      shadows:\n        Math.random() > 0.5 ? parent1.tokens.shadows : parent2.tokens.shadows,\n      borders:\n        Math.random() > 0.5 ? parent1.tokens.borders : parent2.tokens.borders,\n      animations:\n        Math.random() > 0.5\n          ? parent1.tokens.animations\n          : parent2.tokens.animations,\n    };\n\n    return {\n      id: `child-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n      prompt: parent1.prompt,\n      jsx: Math.random() > 0.5 ? parent1.jsx : parent2.jsx,\n      css: parent1.css, // Would need more sophisticated combination\n      tokens: combinedTokens,\n      confidence: (parent1.confidence + parent2.confidence) / 2,\n      iterations: Math.max(parent1.iterations, parent2.iterations) + 1,\n      timestamp: Date.now(),\n    };\n  }\n\n  private async mutation(\n    population: GeneratedLayout[]\n  ): Promise<GeneratedLayout[]> {\n    const mutationRate = 0.1;\n\n    return Promise.all(\n      population.map(async (layout) => {\n        if (Math.random() < mutationRate) {\n          return await this.createVariant(layout);\n        }\n        return layout;\n      })\n    );\n  }\n\n  private getBestLayout(): GeneratedLayout {\n    return this.population.reduce((best, current) => {\n      const bestScore = this.fitnessScores.get(best.id) || 0;\n      const currentScore = this.fitnessScores.get(current.id) || 0;\n      return currentScore > bestScore ? current : best;\n    });\n  }\n}\n\n// React Context\nconst AutoComposerContext = createContext<{\n  generator: AILayoutGenerator | null;\n  optimizer: LayoutOptimizer | null;\n  generateLayout: (prompt: UIPrompt) => Promise<GeneratedLayout>;\n  optimizeLayout: (\n    layout: GeneratedLayout,\n    feedback: number[]\n  ) => Promise<GeneratedLayout>;\n  currentLayouts: GeneratedLayout[];\n}>({\n  generator: null,\n  optimizer: null,\n  generateLayout: async () => ({}) as GeneratedLayout,\n  optimizeLayout: async () => ({}) as GeneratedLayout,\n  currentLayouts: [],\n});\n\n// Provider component\nexport function GlassAutoComposerProvider({\n  children,\n  config = {\n    model: \"claude\",\n    temperature: 0.7,\n    maxTokens: 2000,\n    designSystem: \"glass\",\n    accessibility: true,\n    responsive: true,\n  },\n}: {\n  children: React.ReactNode;\n  config?: Partial<ComposerConfig>;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const generatorRef = useRef<AILayoutGenerator>();\n  const optimizerRef = useRef<LayoutOptimizer>();\n  const [currentLayouts, setCurrentLayouts] = useState<GeneratedLayout[]>([]);\n\n  useEffect(() => {\n    const fullConfig: ComposerConfig = {\n      model: \"claude\",\n      temperature: 0.7,\n      maxTokens: 2000,\n      designSystem: \"glass\",\n      accessibility: true,\n      responsive: true,\n      ...config,\n    };\n\n    generatorRef.current = new AILayoutGenerator(fullConfig);\n    optimizerRef.current = new LayoutOptimizer();\n  }, [config]);\n\n  const generateLayout = useCallback(\n    async (prompt: UIPrompt): Promise<GeneratedLayout> => {\n      if (!generatorRef.current) throw new Error(\"Generator not initialized\");\n\n      const layout = await generatorRef.current.generateLayout(prompt);\n      setCurrentLayouts((prev) => [...prev, layout]);\n      return layout;\n    },\n    []\n  );\n\n  const optimizeLayout = useCallback(\n    async (\n      layout: GeneratedLayout,\n      feedback: number[]\n    ): Promise<GeneratedLayout> => {\n      if (!optimizerRef.current) throw new Error(\"Optimizer not initialized\");\n\n      const optimized = await optimizerRef.current.optimizeLayout(\n        layout,\n        feedback\n      );\n      setCurrentLayouts((prev) => [...prev, optimized]);\n      return optimized;\n    },\n    []\n  );\n\n  const value = {\n    generator: generatorRef.current || null,\n    optimizer: optimizerRef.current || null,\n    generateLayout,\n    optimizeLayout,\n    currentLayouts,\n  };\n\n  return (\n    <AutoComposerContext.Provider value={value}>\n      {children}\n    </AutoComposerContext.Provider>\n  );\n}\n\n// Hook to use auto composer\nexport function useAutoComposer() {\n  const context = useContext(AutoComposerContext);\n  if (!context) {\n    throw new Error(\n      \"useAutoComposer must be used within GlassAutoComposerProvider\"\n    );\n  }\n  return context;\n}\n\n// Auto composer interface\nexport function GlassAutoComposerInterface({\n  className,\n}: {\n  className?: string;\n}) {\n  const { generateLayout } = useAutoComposer();\n  const [prompt, setPrompt] = useState(\"\");\n  const [generatedLayout, setGeneratedLayout] =\n    useState<GeneratedLayout | null>(null);\n  const [isGenerating, setIsGenerating] = useState(false);\n\n  const handleGenerate = async () => {\n    if (!prompt.trim()) return;\n\n    setIsGenerating(true);\n    try {\n      const layout = await generateLayout({\n        description: prompt,\n        purpose: \"user-requested\",\n        style: \"standard\",\n      });\n      setGeneratedLayout(layout);\n    } catch {\n      setGeneratedLayout(null);\n    } finally {\n      setIsGenerating(false);\n    }\n  };\n\n  const prefersReducedMotion = useReducedMotion();\n\n  return (\n    <div\n      className={cn(\"space-y-6\", className)}\n      role=\"main\"\n      aria-label=\"AI Layout Generator\"\n    >\n      <div className=\"glass-surface-primary glass-elev-2 glass-radius-lg glass-p-6\">\n        <ContrastGuard>\n          <h2 className=\"glass-text-2xl glass-font-bold glass-text-primary glass-mb-4\">\n            AI Layout Generator\n          </h2>\n        </ContrastGuard>\n\n        <div className=\"glass-gap-4\">\n          <div>\n            <label\n              htmlFor=\"layout-prompt-textarea\"\n              className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\"\n            >\n              <ContrastGuard>Describe the layout you want</ContrastGuard>\n            </label>\n            <textarea\n              id=\"layout-prompt-textarea\"\n              className=\"glass-w-full glass-surface-secondary glass-border glass-radius-md glass-px-3 glass-py-2 glass-text-primary glass-touch-target glass-contrast-guard\"\n              rows={3}\n              value={prompt}\n              onChange={(e) => setPrompt(e.target.value)}\n              placeholder=\"e.g., Create a modern dashboard with charts, stats cards, and a sidebar navigation\"\n              aria-label=\"Layout description input\"\n              aria-describedby=\"layout-prompt-description\"\n            />\n            <span id=\"layout-prompt-description\" className=\"glass-sr-only\">\n              Enter a description of the layout you want to generate\n            </span>\n          </div>\n\n          <motion.button\n            className=\"glass-surface-accent glass-px-6 glass-py-3 glass-radius-md glass-font-medium\"\n            onClick={handleGenerate}\n            disabled={isGenerating || !prompt.trim()}\n            whileHover={prefersReducedMotion ? undefined : { scale: 1.02 }}\n            whileTap={prefersReducedMotion ? undefined : { scale: 0.98 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: ANIMATION.DURATION.fast,\n                    ease: ANIMATION.EASING.easeOut,\n                  }\n            }\n            aria-label={isGenerating ? \"Generating layout\" : \"Generate layout\"}\n            aria-busy={isGenerating}\n          >\n            <ContrastGuard>\n              {isGenerating ? \"Generating...\" : \"Generate Layout\"}\n            </ContrastGuard>\n          </motion.button>\n        </div>\n      </div>\n\n      {/* Generated Layout Preview */}\n      {generatedLayout && (\n        <div\n          className=\"glass-surface-primary glass-elev-2 glass-radius-lg glass-p-6\"\n          role=\"region\"\n          aria-label=\"Generated layout preview\"\n        >\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n            <ContrastGuard>\n              <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n                Generated Layout\n              </h3>\n            </ContrastGuard>\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <ContrastGuard>\n                <span className=\"glass-text-sm glass-text-secondary\">\n                  Confidence: {(generatedLayout.confidence * 100).toFixed(0)}%\n                </span>\n              </ContrastGuard>\n            </div>\n          </div>\n\n          <div className=\"glass-gap-4\">\n            <div>\n              <ContrastGuard>\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                  JSX Code\n                </h4>\n              </ContrastGuard>\n              <pre\n                className=\"glass-surface-secondary glass-radius-md glass-p-4 glass-text-xs glass-text-primary glass-overflow-x-auto\"\n                aria-label=\"Generated JSX code\"\n              >\n                {generatedLayout.jsx}\n              </pre>\n            </div>\n\n            <div>\n              <ContrastGuard>\n                <h4 className=\"glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                  CSS Styles\n                </h4>\n              </ContrastGuard>\n              <pre\n                className=\"glass-surface-secondary glass-radius-md glass-p-4 glass-text-xs glass-text-primary glass-overflow-x-auto\"\n                aria-label=\"Generated CSS styles\"\n              >\n                {generatedLayout.css}\n              </pre>\n            </div>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n\n// Layout renderer component\nexport function GlassGeneratedLayoutRenderer({\n  layout,\n  data = {},\n  className,\n}: {\n  layout: GeneratedLayout;\n  data?: Record<string, unknown>;\n  className?: string;\n}) {\n  const renderJSX = useCallback(() => {\n    // In a real implementation, this would safely execute the generated JSX\n    // For demo purposes, we'll show a placeholder\n    return (\n      <div className=\"generated-component glass-p-6 glass-text-center\">\n        <ContrastGuard>\n          <h3 className=\"glass-text-xl glass-font-bold glass-text-primary glass-mb-2\">\n            Generated Component Preview\n          </h3>\n          <p className=\"glass-text-secondary glass-mb-4\">\n            Based on: \"{layout.prompt.description}\"\n          </p>\n          <div className=\"glass-text-xs glass-text-tertiary\">\n            Generated at: {new Date(layout.timestamp).toLocaleString()}\n          </div>\n        </ContrastGuard>\n      </div>\n    );\n  }, [layout]);\n\n  return (\n    <div className={cn(\"generated-layout\", className)}>\n      <style>{layout.css}</style>\n      {renderJSX()}\n    </div>\n  );\n}\n\n// Hook for layout generation\nexport function useLayoutGenerator() {\n  const { generateLayout, currentLayouts } = useAutoComposer();\n\n  const generateFromDescription = useCallback(\n    async (description: string) => {\n      return generateLayout({\n        description,\n        purpose: \"user-generated\",\n        style: \"standard\",\n      });\n    },\n    [generateLayout]\n  );\n\n  return {\n    generateFromDescription,\n    currentLayouts,\n    hasLayouts: currentLayouts.length > 0,\n  };\n}\n\n// Presets for different generation modes\nexport const autoComposerPresets = {\n  creative: {\n    temperature: 0.9,\n    style: \"experimental\",\n    iterations: 5,\n  },\n  balanced: {\n    temperature: 0.7,\n    style: \"standard\",\n    iterations: 3,\n  },\n  conservative: {\n    temperature: 0.3,\n    style: \"minimal\",\n    iterations: 1,\n  },\n  accessibility: {\n    temperature: 0.5,\n    style: \"standard\",\n    accessibility: true,\n    iterations: 2,\n  },\n};\n\n// Main component wrapper for testing and simple usage\nexport function GlassAutoComposer({\n  children,\n  className,\n  ...props\n}: {\n  children?: React.ReactNode;\n  className?: string;\n} & React.HTMLAttributes<HTMLDivElement>) {\n  return (\n    <GlassAutoComposerProvider>\n      <div className={className} {...props}>\n        {children || <GlassAutoComposerInterface />}\n      </div>\n    </GlassAutoComposerProvider>\n  );\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Contextual Engine\n * Hyper-contextual adaptation system that fuses biometrics, device sensors, and environment data\n * Part of Next-Wave Systems (10/10) - Hyper-Contextual Adaptation\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Context data types\ninterface BiometricData {\n  heartRate?: number; // BPM\n  heartRateVariability?: number; // RMSSD\n  skinConductance?: number; // microsiemens\n  bodyTemperature?: number; // Celsius\n  bloodOxygen?: number; // SpO2 percentage\n  respiratoryRate?: number; // breaths per minute\n  stressLevel?: number; // 0-1 calculated metric\n  arousalLevel?: number; // 0-1 calculated metric\n}\n\ninterface EnvironmentData {\n  lightLevel: number; // lux\n  lightTemperature: number; // Kelvin\n  ambientNoise: number; // dB\n  humidity: number; // percentage\n  temperature: number; // Celsius\n  pressure: number; // hPa\n  uvIndex?: number; // UV index\n  weather?: string; // weather condition\n  timeOfDay:\n    | \"dawn\"\n    | \"morning\"\n    | \"noon\"\n    | \"afternoon\"\n    | \"evening\"\n    | \"dusk\"\n    | \"night\";\n  season: \"spring\" | \"summer\" | \"autumn\" | \"winter\";\n}\n\ninterface DeviceSensorData {\n  accelerometer: { x: number; y: number; z: number };\n  gyroscope: { alpha: number; beta: number; gamma: number };\n  magnetometer?: { x: number; y: number; z: number };\n  deviceMotion: \"static\" | \"gentle\" | \"moderate\" | \"active\";\n  batteryLevel: number; // 0-1\n  networkQuality: \"excellent\" | \"good\" | \"fair\" | \"poor\" | \"offline\";\n  screenBrightness: number; // 0-1\n  deviceTemperature?: number; // estimated device heat\n}\n\ninterface LocationContext {\n  latitude?: number;\n  longitude?: number;\n  altitude?: number;\n  accuracy?: number;\n  heading?: number;\n  speed?: number;\n  locationType: \"indoor\" | \"outdoor\" | \"vehicle\" | \"unknown\";\n  activityType:\n    | \"stationary\"\n    | \"walking\"\n    | \"running\"\n    | \"cycling\"\n    | \"driving\"\n    | \"unknown\";\n}\n\ninterface ContextualState {\n  biometrics: BiometricData;\n  environment: EnvironmentData;\n  device: DeviceSensorData;\n  location: LocationContext;\n  timestamp: number;\n  quality: number; // Overall data quality 0-1\n}\n\ninterface ContextualAdaptation {\n  id: string;\n  priority: number;\n  contextMatch: number; // How well context matches 0-1\n  adaptations: {\n    visual: {\n      brightness: number; // -1 to 1 adjustment\n      contrast: number; // -1 to 1 adjustment\n      saturation: number; // -1 to 1 adjustment\n      colorTemperature: number; // -1 to 1 (cooler to warmer)\n      blur: number; // 0-1 blur intensity\n      opacity: number; // 0-1 opacity\n    };\n    animation: {\n      speed: number; // 0-2 speed multiplier\n      intensity: number; // 0-2 intensity multiplier\n      type: \"minimal\" | \"standard\" | \"enhanced\" | \"disabled\";\n      easing: \"linear\" | \"ease\" | \"ease-in\" | \"ease-out\" | \"bounce\" | \"elastic\";\n    };\n    interaction: {\n      sensitivity: number; // 0-2 touch/click sensitivity\n      hapticFeedback: number; // 0-1 haptic intensity\n      responseDelay: number; // 0-500ms additional delay\n      gestureThreshold: number; // 0-1 gesture detection sensitivity\n    };\n    layout: {\n      density: \"sparse\" | \"normal\" | \"dense\";\n      complexity: \"minimal\" | \"standard\" | \"detailed\";\n      spacing: number; // 0.5-2 spacing multiplier\n      fontSize: number; // 0.8-1.5 font size multiplier\n    };\n    sound: {\n      volume: number; // 0-1 system sound volume\n      frequency: number; // 0-1 frequency bias (lower-higher)\n      spatialAudio: boolean; // 3D audio positioning\n      environmentalAudio: boolean; // Ambient sound integration\n    };\n  };\n  confidence: number;\n  appliedAt?: number;\n  duration?: number;\n}\n\n// Multi-sensor fusion system using Kalman filtering\nclass SensorFusionSystem {\n  private kalmanFilters: Map<string, KalmanFilter>;\n  private sensorWeights: Map<string, number>;\n  private fusedData: Map<string, number>;\n  private dataQuality: Map<string, number>;\n\n  constructor() {\n    this.kalmanFilters = new Map();\n    this.sensorWeights = new Map();\n    this.fusedData = new Map();\n    this.dataQuality = new Map();\n\n    this.initializeFilters();\n  }\n\n  private initializeFilters(): void {\n    // Initialize Kalman filters for key metrics\n    const metrics = [\n      \"lightLevel\",\n      \"ambientNoise\",\n      \"temperature\",\n      \"humidity\",\n      \"heartRate\",\n      \"stressLevel\",\n      \"batteryLevel\",\n      \"deviceMotion\",\n    ];\n\n    metrics.forEach((metric: any) => {\n      this.kalmanFilters.set(metric, new KalmanFilter());\n      this.sensorWeights.set(metric, 1.0);\n      this.dataQuality.set(metric, 1.0);\n    });\n  }\n\n  fuseContextualData(context: ContextualState): ContextualState {\n    const fusedContext = { ...context };\n\n    // Fuse biometric data\n    if (context.biometrics.heartRate !== undefined) {\n      const filtered = this.kalmanFilters\n        .get(\"heartRate\")!\n        .filter(context.biometrics.heartRate);\n      fusedContext.biometrics.heartRate = filtered;\n    }\n\n    // Fuse environmental data\n    const lightFiltered = this.kalmanFilters\n      .get(\"lightLevel\")!\n      .filter(context.environment.lightLevel);\n    fusedContext.environment.lightLevel = lightFiltered;\n\n    const noiseFiltered = this.kalmanFilters\n      .get(\"ambientNoise\")!\n      .filter(context.environment.ambientNoise);\n    fusedContext.environment.ambientNoise = noiseFiltered;\n\n    const tempFiltered = this.kalmanFilters\n      .get(\"temperature\")!\n      .filter(context.environment.temperature);\n    fusedContext.environment.temperature = tempFiltered;\n\n    // Calculate overall quality based on sensor reliability\n    const qualityScores = Array.from(this.dataQuality.values());\n    fusedContext.quality =\n      qualityScores.reduce((sum, q) => sum + q, 0) / qualityScores.length;\n\n    return fusedContext;\n  }\n\n  updateSensorWeights(sensorId: string, accuracy: number): void {\n    this.sensorWeights.set(sensorId, Math.max(0.1, Math.min(1.0, accuracy)));\n    this.dataQuality.set(sensorId, accuracy);\n  }\n\n  getFusedValue(metricId: string): number | undefined {\n    return this.fusedData.get(metricId);\n  }\n}\n\n// Kalman filter for sensor data smoothing\nclass KalmanFilter {\n  private x: number; // State\n  private P: number; // Covariance\n  private Q: number; // Process noise\n  private R: number; // Measurement noise\n  private K: number; // Kalman gain\n\n  constructor(processNoise = 0.01, measurementNoise = 0.1) {\n    this.x = 0;\n    this.P = 1;\n    this.Q = processNoise;\n    this.R = measurementNoise;\n    this.K = 0;\n  }\n\n  predict(): void {\n    // Predict step\n    this.P = this.P + this.Q;\n  }\n\n  update(measurement: number): void {\n    // Update step\n    this.K = this.P / (this.P + this.R);\n    this.x = this.x + this.K * (measurement - this.x);\n    this.P = (1 - this.K) * this.P;\n  }\n\n  filter(measurement: number): number {\n    this.predict();\n    this.update(measurement);\n    return this.x;\n  }\n}\n\n// Advanced pattern recognition for contextual situations\nclass ContextPatternRecognizer {\n  private patterns: Map<string, ContextualPattern>;\n  private historicalContexts: ContextualState[];\n  private neuralNetwork: ContextualNeuralNetwork;\n\n  constructor() {\n    this.patterns = new Map();\n    this.historicalContexts = [];\n    this.neuralNetwork = new ContextualNeuralNetwork();\n\n    this.initializeCommonPatterns();\n  }\n\n  private initializeCommonPatterns(): void {\n    // Define common contextual patterns\n    this.patterns.set(\"focus-work\", {\n      id: \"focus-work\",\n      conditions: {\n        environment: { lightLevel: [400, 1000], ambientNoise: [30, 50] },\n        biometrics: { heartRate: [60, 85], stressLevel: [0.3, 0.7] },\n        device: { deviceMotion: \"static\", batteryLevel: [0.3, 1.0] },\n        timePattern: [\"morning\", \"afternoon\"],\n      },\n      confidence: 0.9,\n      adaptationPriority: \"high\",\n    });\n\n    this.patterns.set(\"relaxation\", {\n      id: \"relaxation\",\n      conditions: {\n        environment: { lightLevel: [50, 300], ambientNoise: [20, 40] },\n        biometrics: { heartRate: [50, 75], stressLevel: [0.0, 0.4] },\n        device: { deviceMotion: \"static\" },\n        timePattern: [\"evening\", \"dusk\", \"night\"],\n      },\n      confidence: 0.85,\n      adaptationPriority: \"medium\",\n    });\n\n    this.patterns.set(\"high-stress\", {\n      id: \"high-stress\",\n      conditions: {\n        biometrics: { heartRate: [90, 150], stressLevel: [0.7, 1.0] },\n        environment: { ambientNoise: [60, 120] },\n        device: { deviceMotion: \"active\" },\n      },\n      confidence: 0.8,\n      adaptationPriority: \"critical\",\n    });\n\n    this.patterns.set(\"outdoor-bright\", {\n      id: \"outdoor-bright\",\n      conditions: {\n        environment: { lightLevel: [10000, 100000] },\n        location: { locationType: [\"outdoor\"] },\n        device: { screenBrightness: [0.8, 1.0] },\n      },\n      confidence: 0.95,\n      adaptationPriority: \"high\",\n    });\n  }\n\n  analyzeContext(context: ContextualState): string[] {\n    const matchedPatterns: string[] = [];\n\n    this.patterns.forEach((pattern, patternId) => {\n      const matchScore = this.calculatePatternMatch(context, pattern);\n      if (matchScore > 0.7) {\n        matchedPatterns.push(patternId);\n      }\n    });\n\n    // Use neural network for complex pattern recognition\n    const neuralPrediction = this.neuralNetwork.predict(context);\n    if (neuralPrediction.confidence > 0.8) {\n      matchedPatterns.push(neuralPrediction.pattern);\n    }\n\n    return matchedPatterns;\n  }\n\n  private calculatePatternMatch(\n    context: ContextualState,\n    pattern: ContextualPattern\n  ): number {\n    let totalMatch = 0;\n    let matchCount = 0;\n\n    // Check environmental conditions\n    if (pattern.conditions.environment) {\n      Object.entries(pattern.conditions.environment).forEach(([key, range]) => {\n        const value = (context.environment as any)[key];\n        if (value !== undefined && Array.isArray(range)) {\n          const match = value >= range[0] && value <= range[1] ? 1 : 0;\n          totalMatch += match;\n          matchCount++;\n        }\n      });\n    }\n\n    // Check biometric conditions\n    if (pattern.conditions.biometrics) {\n      Object.entries(pattern.conditions.biometrics).forEach(([key, range]) => {\n        const value = (context.biometrics as any)[key];\n        if (value !== undefined && Array.isArray(range)) {\n          const match = value >= range[0] && value <= range[1] ? 1 : 0;\n          totalMatch += match;\n          matchCount++;\n        }\n      });\n    }\n\n    // Check device conditions\n    if (pattern.conditions.device) {\n      Object.entries(pattern.conditions.device).forEach(([key, condition]) => {\n        const value = (context.device as any)[key];\n        if (value !== undefined) {\n          let match = 0;\n          if (Array.isArray(condition)) {\n            match = value >= condition[0] && value <= condition[1] ? 1 : 0;\n          } else {\n            match = value === condition ? 1 : 0;\n          }\n          totalMatch += match;\n          matchCount++;\n        }\n      });\n    }\n\n    // Check time pattern\n    if (pattern.conditions.timePattern) {\n      const match = pattern.conditions.timePattern.includes(\n        context.environment.timeOfDay\n      )\n        ? 1\n        : 0;\n      totalMatch += match;\n      matchCount++;\n    }\n\n    return matchCount > 0 ? totalMatch / matchCount : 0;\n  }\n\n  learnFromContext(context: ContextualState, userSatisfaction: number): void {\n    this.historicalContexts.push(context);\n\n    // Keep only recent contexts\n    if (this.historicalContexts.length > 1000) {\n      this.historicalContexts.shift();\n    }\n\n    // Train neural network\n    this.neuralNetwork.train(context, userSatisfaction);\n  }\n}\n\ninterface ContextualPattern {\n  id: string;\n  conditions: {\n    environment?: Record<string, number[] | string>;\n    biometrics?: Record<string, number[]>;\n    device?: Record<string, number[] | string>;\n    location?: Record<string, string[]>;\n    timePattern?: string[];\n  };\n  confidence: number;\n  adaptationPriority: \"low\" | \"medium\" | \"high\" | \"critical\";\n}\n\n// Neural network for contextual pattern learning\nclass ContextualNeuralNetwork {\n  private weights: number[][][];\n  private biases: number[][];\n  private learningRate: number;\n\n  constructor() {\n    this.learningRate = 0.01;\n    this.weights = [];\n    this.biases = [];\n    this.initializeNetwork();\n  }\n\n  private initializeNetwork(): void {\n    // Simple 3-layer network: input -> hidden -> output\n    const inputSize = 20; // Context features\n    const hiddenSize = 40;\n    const outputSize = 10; // Pattern categories\n\n    this.weights = [\n      this.randomMatrix(hiddenSize, inputSize),\n      this.randomMatrix(outputSize, hiddenSize),\n    ];\n\n    this.biases = [this.randomArray(hiddenSize), this.randomArray(outputSize)];\n  }\n\n  private randomMatrix(rows: number, cols: number): number[][] {\n    return Array.from({ length: rows }, () =>\n      Array.from({ length: cols }, () => Math.random() * 2 - 1)\n    );\n  }\n\n  private randomArray(size: number): number[] {\n    return Array.from({ length: size }, () => Math.random() * 2 - 1);\n  }\n\n  private contextToVector(context: ContextualState): number[] {\n    return [\n      context.environment.lightLevel / 100000,\n      context.environment.ambientNoise / 100,\n      context.environment.temperature / 40,\n      context.environment.humidity / 100,\n      context.biometrics.heartRate || 0 / 200,\n      context.biometrics.stressLevel || 0,\n      context.device.batteryLevel,\n      context.device.accelerometer.x,\n      context.device.accelerometer.y,\n      context.device.accelerometer.z,\n      context.device.gyroscope.alpha / 360,\n      context.device.gyroscope.beta / 360,\n      context.device.gyroscope.gamma / 360,\n      context.location.latitude || 0 / 180,\n      context.location.longitude || 0 / 360,\n      context.quality,\n      // Time features\n      context.environment.timeOfDay === \"morning\" ? 1 : 0,\n      context.environment.timeOfDay === \"afternoon\" ? 1 : 0,\n      context.environment.timeOfDay === \"evening\" ? 1 : 0,\n      context.environment.timeOfDay === \"night\" ? 1 : 0,\n    ];\n  }\n\n  predict(context: ContextualState): { pattern: string; confidence: number } {\n    const input = this.contextToVector(context);\n    const output = this.forward(input);\n\n    const maxIndex = output.indexOf(Math.max(...output));\n    const confidence = output[maxIndex];\n\n    const patterns = [\n      \"focus-work\",\n      \"relaxation\",\n      \"high-stress\",\n      \"outdoor-bright\",\n      \"low-light\",\n      \"motion\",\n      \"travel\",\n      \"meeting\",\n      \"exercise\",\n      \"sleep\",\n    ];\n\n    return {\n      pattern: patterns[maxIndex] || \"unknown\",\n      confidence: Math.max(0, Math.min(1, confidence)),\n    };\n  }\n\n  private forward(input: number[]): number[] {\n    let activation = input;\n\n    for (let layer = 0; layer < this.weights.length; layer++) {\n      const newActivation = [];\n\n      for (let node = 0; node < this.weights[layer].length; node++) {\n        let sum = this.biases[layer][node];\n        for (let prevNode = 0; prevNode < activation.length; prevNode++) {\n          sum += this.weights[layer][node][prevNode] * activation[prevNode];\n        }\n        newActivation.push(this.sigmoid(sum));\n      }\n\n      activation = newActivation;\n    }\n\n    return activation;\n  }\n\n  private sigmoid(x: number): number {\n    return 1 / (1 + Math.exp(-x));\n  }\n\n  train(context: ContextualState, satisfaction: number): void {\n    // Simplified training - in practice would use backpropagation\n    const adjustmentRate = this.learningRate * (satisfaction - 0.5);\n\n    this.weights.forEach((layer: any) => {\n      layer.forEach((node: any) => {\n        node.forEach((weight: any, index: any) => {\n          node[index] += adjustmentRate * Math.random() * 0.1;\n        });\n      });\n    });\n  }\n}\n\n// Main contextual engine\nclass GlassContextualEngineCore {\n  private sensorFusion: SensorFusionSystem;\n  private patternRecognizer: ContextPatternRecognizer;\n  private currentContext: ContextualState;\n  private adaptations: ContextualAdaptation[];\n  private contextHistory: ContextualState[];\n  private sensors: ContextualSensors;\n\n  constructor() {\n    this.sensorFusion = new SensorFusionSystem();\n    this.patternRecognizer = new ContextPatternRecognizer();\n    this.currentContext = this.getDefaultContext();\n    this.adaptations = [];\n    this.contextHistory = [];\n    this.sensors = new ContextualSensors();\n\n    this.startContextMonitoring();\n  }\n\n  private getDefaultContext(): ContextualState {\n    return {\n      biometrics: {},\n      environment: {\n        lightLevel: 300,\n        lightTemperature: 6500,\n        ambientNoise: 40,\n        humidity: 50,\n        temperature: 22,\n        pressure: 1013,\n        timeOfDay: \"afternoon\",\n        season: \"summer\",\n      },\n      device: {\n        accelerometer: { x: 0, y: 0, z: 9.8 },\n        gyroscope: { alpha: 0, beta: 0, gamma: 0 },\n        deviceMotion: \"static\",\n        batteryLevel: 1.0,\n        networkQuality: \"excellent\",\n        screenBrightness: 0.8,\n      },\n      location: {\n        locationType: \"indoor\",\n        activityType: \"stationary\",\n      },\n      timestamp: Date.now(),\n      quality: 1.0,\n    };\n  }\n\n  private async startContextMonitoring(): Promise<void> {\n    // Start sensor data collection\n    await this.sensors.initialize();\n\n    // Update context every 500ms\n    setInterval(() => {\n      this.updateContext();\n    }, ANIMATION.DURATION.fast);\n\n    // Generate adaptations every 2 seconds\n    setInterval(() => {\n      this.generateAdaptations();\n    }, ANIMATION.DURATION.normal);\n  }\n\n  private async updateContext(): Promise<void> {\n    try {\n      // Gather sensor data\n      const environmentData = await this.sensors.getEnvironmentData();\n      const biometricData = await this.sensors.getBiometricData();\n      const deviceData = await this.sensors.getDeviceData();\n      const locationData = await this.sensors.getLocationData();\n\n      // Create new context\n      const newContext: ContextualState = {\n        biometrics: biometricData,\n        environment: environmentData,\n        device: deviceData,\n        location: locationData,\n        timestamp: Date.now(),\n        quality: this.calculateContextQuality(\n          environmentData,\n          biometricData,\n          deviceData\n        ),\n      };\n\n      // Apply sensor fusion\n      this.currentContext = this.sensorFusion.fuseContextualData(newContext);\n\n      // Store in history\n      this.contextHistory.push(this.currentContext);\n      if (this.contextHistory.length > 200) {\n        this.contextHistory.shift();\n      }\n    } catch {\n      // Keep the previous context snapshot when a sensor read fails.\n    }\n  }\n\n  private calculateContextQuality(\n    env: EnvironmentData,\n    bio: BiometricData,\n    device: DeviceSensorData\n  ): number {\n    let quality = 1.0;\n\n    // Reduce quality based on sensor availability\n    if (!bio.heartRate) quality -= 0.1;\n    if (!env.lightLevel) quality -= 0.05;\n    if (device.networkQuality === \"poor\") quality -= 0.2;\n    if (device.batteryLevel < 0.2) quality -= 0.1;\n\n    return Math.max(0.1, quality);\n  }\n\n  private generateAdaptations(): void {\n    // Analyze current context for patterns\n    const matchedPatterns = this.patternRecognizer.analyzeContext(\n      this.currentContext\n    );\n\n    // Generate adaptations for each pattern\n    matchedPatterns.forEach((patternId: any) => {\n      const adaptation = this.createAdaptationForPattern(\n        patternId,\n        this.currentContext\n      );\n      if (adaptation) {\n        this.adaptations.push(adaptation);\n      }\n    });\n\n    // Remove old adaptations\n    const now = Date.now();\n    this.adaptations = this.adaptations.filter(\n      (adaptation: any) =>\n        !adaptation.appliedAt ||\n        now - adaptation.appliedAt < (adaptation.duration || 30000)\n    );\n\n    // Sort by priority and confidence\n    this.adaptations.sort((a, b) => {\n      const priorityWeight = { critical: 4, high: 3, medium: 2, low: 1 };\n      const priorityDiff =\n        priorityWeight[this.getPriorityFromId(b.id)] -\n        priorityWeight[this.getPriorityFromId(a.id)];\n      return priorityDiff !== 0 ? priorityDiff : b.confidence - a.confidence;\n    });\n  }\n\n  private createAdaptationForPattern(\n    patternId: string,\n    context: ContextualState\n  ): ContextualAdaptation | null {\n    const adaptationId = `${patternId}-${Date.now()}`;\n\n    switch (patternId) {\n      case \"focus-work\":\n        return {\n          id: adaptationId,\n          priority: 3,\n          contextMatch: 0.9,\n          adaptations: {\n            visual: {\n              brightness: -0.1,\n              contrast: 0.1,\n              saturation: -0.2,\n              colorTemperature: 0.2,\n              blur: 0.0,\n              opacity: 1.0,\n            },\n            animation: {\n              speed: 0.8,\n              intensity: 0.6,\n              type: \"minimal\",\n              easing: \"ease-out\",\n            },\n            interaction: {\n              sensitivity: 1.0,\n              hapticFeedback: 0.3,\n              responseDelay: 0,\n              gestureThreshold: 0.8,\n            },\n            layout: {\n              density: \"normal\",\n              complexity: \"standard\",\n              spacing: 1.1,\n              fontSize: 1.0,\n            },\n            sound: {\n              volume: 0.3,\n              frequency: 0.3,\n              spatialAudio: false,\n              environmentalAudio: false,\n            },\n          },\n          confidence: 0.85,\n          duration: ANIMATION.DURATION.slower * 428, // 5 minutes\n        };\n\n      case \"high-stress\":\n        return {\n          id: adaptationId,\n          priority: 4,\n          contextMatch: 0.8,\n          adaptations: {\n            visual: {\n              brightness: -0.3,\n              contrast: -0.2,\n              saturation: -0.4,\n              colorTemperature: -0.3,\n              blur: 0.1,\n              opacity: 0.9,\n            },\n            animation: {\n              speed: 0.5,\n              intensity: 0.3,\n              type: \"minimal\",\n              easing: \"ease\",\n            },\n            interaction: {\n              sensitivity: 0.8,\n              hapticFeedback: 0.1,\n              responseDelay: 100,\n              gestureThreshold: 0.6,\n            },\n            layout: {\n              density: \"sparse\",\n              complexity: \"minimal\",\n              spacing: 1.5,\n              fontSize: 1.1,\n            },\n            sound: {\n              volume: 0.1,\n              frequency: 0.2,\n              spatialAudio: false,\n              environmentalAudio: true,\n            },\n          },\n          confidence: 0.9,\n          duration: ANIMATION.DURATION.slower * 857, // 10 minutes\n        };\n\n      case \"outdoor-bright\":\n        return {\n          id: adaptationId,\n          priority: 3,\n          contextMatch: 0.95,\n          adaptations: {\n            visual: {\n              brightness: 0.4,\n              contrast: 0.5,\n              saturation: 0.2,\n              colorTemperature: 0.0,\n              blur: 0.0,\n              opacity: 1.0,\n            },\n            animation: {\n              speed: 1.2,\n              intensity: 1.5,\n              type: \"enhanced\",\n              easing: \"ease-out\",\n            },\n            interaction: {\n              sensitivity: 1.3,\n              hapticFeedback: 0.8,\n              responseDelay: 0,\n              gestureThreshold: 0.9,\n            },\n            layout: {\n              density: \"normal\",\n              complexity: \"standard\",\n              spacing: 1.2,\n              fontSize: 1.2,\n            },\n            sound: {\n              volume: 0.6,\n              frequency: 0.6,\n              spatialAudio: true,\n              environmentalAudio: false,\n            },\n          },\n          confidence: 0.95,\n          duration: ANIMATION.DURATION.slower * 257, // 3 minutes\n        };\n\n      case \"relaxation\":\n        return {\n          id: adaptationId,\n          priority: 2,\n          contextMatch: 0.85,\n          adaptations: {\n            visual: {\n              brightness: -0.2,\n              contrast: -0.1,\n              saturation: 0.1,\n              colorTemperature: -0.4,\n              blur: 0.05,\n              opacity: 0.95,\n            },\n            animation: {\n              speed: 0.6,\n              intensity: 0.4,\n              type: \"minimal\",\n              easing: \"ease\",\n            },\n            interaction: {\n              sensitivity: 0.9,\n              hapticFeedback: 0.2,\n              responseDelay: 50,\n              gestureThreshold: 0.7,\n            },\n            layout: {\n              density: \"sparse\",\n              complexity: \"minimal\",\n              spacing: 1.3,\n              fontSize: 1.0,\n            },\n            sound: {\n              volume: 0.2,\n              frequency: 0.1,\n              spatialAudio: true,\n              environmentalAudio: true,\n            },\n          },\n          confidence: 0.8,\n          duration: ANIMATION.DURATION.slower * 1285, // 15 minutes\n        };\n    }\n\n    return null;\n  }\n\n  private getPriorityFromId(\n    id: string\n  ): \"low\" | \"medium\" | \"high\" | \"critical\" {\n    if (id.includes(\"stress\") || id.includes(\"emergency\")) return \"critical\";\n    if (id.includes(\"focus\") || id.includes(\"outdoor\")) return \"high\";\n    if (id.includes(\"relaxation\") || id.includes(\"comfort\")) return \"medium\";\n    return \"low\";\n  }\n\n  // Public API\n  getCurrentContext(): ContextualState {\n    return { ...this.currentContext };\n  }\n\n  getCurrentAdaptations(): ContextualAdaptation[] {\n    return [...this.adaptations];\n  }\n\n  getTopAdaptation(): ContextualAdaptation | null {\n    return this.adaptations.length > 0 ? this.adaptations[0] : null;\n  }\n\n  provideFeedback(adaptationId: string, satisfaction: number): void {\n    this.patternRecognizer.learnFromContext(this.currentContext, satisfaction);\n  }\n\n  getContextHistory(): ContextualState[] {\n    return [...this.contextHistory];\n  }\n}\n\n// Sensor data collection system\nclass ContextualSensors {\n  private geolocation: Geolocation | null = null;\n  private deviceMotion: DeviceMotionEvent | null = null;\n  private ambientLight: any = null;\n  private battery: any = null;\n\n  async initialize(): Promise<void> {\n    // CRITICAL SSR FIX: Skip all sensor initialization on server\n    if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\n      return;\n    }\n\n    // Request permissions and initialize sensors\n    await this.initializeGeolocation();\n    await this.initializeDeviceMotion();\n    await this.initializeAmbientLight();\n    await this.initializeBattery();\n  }\n\n  private async initializeGeolocation(): Promise<void> {\n    if (\"geolocation\" in navigator) {\n      this.geolocation = navigator.geolocation;\n    }\n  }\n\n  private async initializeDeviceMotion(): Promise<void> {\n    if (\"DeviceMotionEvent\" in window) {\n      // Request permission for iOS 13+\n      if (typeof (DeviceMotionEvent as any).requestPermission === \"function\") {\n        const permission = await (DeviceMotionEvent as any).requestPermission();\n        if (permission !== \"granted\") return;\n      }\n\n      window.addEventListener(\"devicemotion\", (event) => {\n        this.deviceMotion = event;\n      });\n    }\n  }\n\n  private async initializeAmbientLight(): Promise<void> {\n    if (\"AmbientLightSensor\" in window) {\n      try {\n        this.ambientLight = new (window as any).AmbientLightSensor();\n        this.ambientLight.start();\n      } catch {\n        this.ambientLight = null;\n      }\n    }\n  }\n\n  private async initializeBattery(): Promise<void> {\n    if (\"getBattery\" in navigator) {\n      this.battery = await (navigator as any).getBattery();\n    }\n  }\n\n  async getEnvironmentData(): Promise<EnvironmentData> {\n    const now = new Date();\n    const hour = now.getHours();\n\n    // Determine time of day\n    let timeOfDay: EnvironmentData[\"timeOfDay\"] = \"afternoon\";\n    if (hour >= 5 && hour < 7) timeOfDay = \"dawn\";\n    else if (hour >= 7 && hour < 12) timeOfDay = \"morning\";\n    else if (hour >= 12 && hour < 14) timeOfDay = \"noon\";\n    else if (hour >= 14 && hour < 18) timeOfDay = \"afternoon\";\n    else if (hour >= 18 && hour < 20) timeOfDay = \"evening\";\n    else if (hour >= 20 && hour < 22) timeOfDay = \"dusk\";\n    else timeOfDay = \"night\";\n\n    // Determine season (simplified for Northern Hemisphere)\n    const month = now.getMonth();\n    let season: EnvironmentData[\"season\"] = \"summer\";\n    if (month >= 2 && month <= 4) season = \"spring\";\n    else if (month >= 5 && month <= 7) season = \"summer\";\n    else if (month >= 8 && month <= 10) season = \"autumn\";\n    else season = \"winter\";\n\n    return {\n      lightLevel:\n        this.ambientLight?.illuminance || this.estimateLightLevel(timeOfDay),\n      lightTemperature: this.estimateLightTemperature(timeOfDay),\n      ambientNoise: this.estimateAmbientNoise(),\n      humidity: 50, // Would come from weather API\n      temperature: 22, // Would come from weather API\n      pressure: 1013, // Would come from weather API\n      timeOfDay,\n      season,\n    };\n  }\n\n  private estimateLightLevel(timeOfDay: string): number {\n    const levels = {\n      dawn: 100,\n      morning: 1000,\n      noon: 50000,\n      afternoon: 20000,\n      evening: 500,\n      dusk: 50,\n      night: 1,\n    };\n    return levels[timeOfDay as keyof typeof levels] || 300;\n  }\n\n  private estimateLightTemperature(timeOfDay: string): number {\n    const temperatures = {\n      dawn: 4000,\n      morning: 5500,\n      noon: 6500,\n      afternoon: 6000,\n      evening: 4500,\n      dusk: 3000,\n      night: 2700,\n    };\n    return temperatures[timeOfDay as keyof typeof temperatures] || 6500;\n  }\n\n  private estimateAmbientNoise(): number {\n    // Simplified noise estimation based on time\n    const hour = new Date().getHours();\n    if (hour >= 22 || hour <= 6) return 25; // Night\n    if (hour >= 7 && hour <= 9) return 55; // Morning rush\n    if (hour >= 17 && hour <= 19) return 60; // Evening rush\n    return 40; // Normal day\n  }\n\n  async getBiometricData(): Promise<BiometricData> {\n    // Placeholder - would integrate with wearables/fitness trackers\n    return {\n      heartRate: undefined, // Would come from fitness trackers\n      stressLevel: undefined, // Would be calculated from HRV\n    };\n  }\n\n  async getDeviceData(): Promise<DeviceSensorData> {\n    let deviceMotion: DeviceSensorData[\"deviceMotion\"] = \"static\";\n\n    if (this.deviceMotion) {\n      const acceleration = this.deviceMotion.acceleration;\n      if (acceleration) {\n        const totalAccel = Math.sqrt(\n          acceleration.x! ** 2 + acceleration.y! ** 2 + acceleration.z! ** 2\n        );\n\n        if (totalAccel > 5) deviceMotion = \"active\";\n        else if (totalAccel > 2) deviceMotion = \"moderate\";\n        else if (totalAccel > 0.5) deviceMotion = \"gentle\";\n      }\n    }\n\n    return {\n      accelerometer: this.deviceMotion?.acceleration\n        ? {\n            x: this.deviceMotion.acceleration.x || 0,\n            y: this.deviceMotion.acceleration.y || 0,\n            z: this.deviceMotion.acceleration.z || 9.8,\n          }\n        : { x: 0, y: 0, z: 9.8 },\n      gyroscope: this.deviceMotion?.rotationRate\n        ? {\n            alpha: this.deviceMotion.rotationRate.alpha || 0,\n            beta: this.deviceMotion.rotationRate.beta || 0,\n            gamma: this.deviceMotion.rotationRate.gamma || 0,\n          }\n        : { alpha: 0, beta: 0, gamma: 0 },\n      deviceMotion,\n      batteryLevel: this.battery?.level || 1.0,\n      networkQuality: this.estimateNetworkQuality(),\n      screenBrightness: 0.8, // Would require additional APIs\n    };\n  }\n\n  private estimateNetworkQuality(): DeviceSensorData[\"networkQuality\"] {\n    // CRITICAL SSR FIX: Skip navigator access on server\n    if (typeof navigator === \"undefined\") {\n      return \"good\";\n    }\n\n    const connection = (navigator as any).connection;\n    if (!connection) return \"good\";\n\n    const effectiveType = connection.effectiveType;\n    switch (effectiveType) {\n      case \"4g\":\n        return \"excellent\";\n      case \"3g\":\n        return \"good\";\n      case \"2g\":\n        return \"fair\";\n      case \"slow-2g\":\n        return \"poor\";\n      default:\n        return \"good\";\n    }\n  }\n\n  async getLocationData(): Promise<LocationContext> {\n    return new Promise((resolve) => {\n      if (!this.geolocation) {\n        resolve({\n          locationType: \"unknown\",\n          activityType: \"unknown\",\n        });\n        return;\n      }\n\n      this.geolocation.getCurrentPosition(\n        (position) => {\n          resolve({\n            latitude: position.coords.latitude,\n            longitude: position.coords.longitude,\n            altitude: position.coords.altitude || undefined,\n            accuracy: position.coords.accuracy,\n            heading: position.coords.heading || undefined,\n            speed: position.coords.speed || undefined,\n            locationType: \"unknown\", // Would need additional logic\n            activityType: this.estimateActivity(position),\n          });\n        },\n        () => {\n          resolve({\n            locationType: \"unknown\",\n            activityType: \"unknown\",\n          });\n        },\n        { enableHighAccuracy: false, timeout: 5000 }\n      );\n    });\n  }\n\n  private estimateActivity(\n    position: GeolocationPosition\n  ): LocationContext[\"activityType\"] {\n    const speed = position.coords.speed || 0;\n\n    if (speed < 0.5) return \"stationary\";\n    if (speed < 2) return \"walking\";\n    if (speed < 5) return \"running\";\n    if (speed < 15) return \"cycling\";\n    return \"driving\";\n  }\n}\n\n// React Context\nconst ContextualEngineContext = createContext<{\n  engine: GlassContextualEngineCore | null;\n  context: ContextualState;\n  adaptations: ContextualAdaptation[];\n  topAdaptation: ContextualAdaptation | null;\n  provideFeedback: (adaptationId: string, satisfaction: number) => void;\n}>({\n  engine: null,\n  context: {} as ContextualState,\n  adaptations: [],\n  topAdaptation: null,\n  provideFeedback: () => {},\n});\n\n// Provider component\nexport function GlassContextualEngineProvider({\n  children,\n  onContextUpdate,\n  onAdaptationChange,\n}: {\n  children: React.ReactNode;\n  onContextUpdate?: (context: ContextualState) => void;\n  onAdaptationChange?: (adaptation: ContextualAdaptation | null) => void;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const engineRef = useRef<GlassContextualEngineCore>();\n  const [context, setContext] = useState<ContextualState>(\n    {} as ContextualState\n  );\n  const [adaptations, setAdaptations] = useState<ContextualAdaptation[]>([]);\n  const [topAdaptation, setTopAdaptation] =\n    useState<ContextualAdaptation | null>(null);\n\n  // Initialize engine\n  useEffect(() => {\n    engineRef.current = new GlassContextualEngineCore();\n\n    // Update state periodically\n    const updateInterval = setInterval(() => {\n      if (engineRef.current) {\n        const currentContext = engineRef.current.getCurrentContext();\n        const currentAdaptations = engineRef.current.getCurrentAdaptations();\n        const currentTopAdaptation = engineRef.current.getTopAdaptation();\n\n        setContext(currentContext);\n        setAdaptations(currentAdaptations);\n        setTopAdaptation(currentTopAdaptation);\n\n        onContextUpdate?.(currentContext);\n        onAdaptationChange?.(currentTopAdaptation);\n      }\n    }, ANIMATION.DURATION.fast);\n\n    return () => clearInterval(updateInterval);\n  }, [onContextUpdate, onAdaptationChange]);\n\n  const provideFeedback = useCallback(\n    (adaptationId: string, satisfaction: number) => {\n      engineRef.current?.provideFeedback(adaptationId, satisfaction);\n    },\n    []\n  );\n\n  const value = {\n    engine: engineRef.current || null,\n    context,\n    adaptations,\n    topAdaptation,\n    provideFeedback,\n  };\n\n  return (\n    <ContextualEngineContext.Provider value={value}>\n      {children}\n    </ContextualEngineContext.Provider>\n  );\n}\n\n// Hook to use contextual engine\nexport function useContextualEngine() {\n  const context = useContext(ContextualEngineContext);\n  if (!context) {\n    throw new Error(\n      \"useContextualEngine must be used within GlassContextualEngineProvider\"\n    );\n  }\n  return context;\n}\n\n// Contextual dashboard component\nexport function GlassContextualDashboard({\n  className,\n  showSensors = true,\n}: {\n  className?: string;\n  showSensors?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { context, adaptations, topAdaptation } = useContextualEngine();\n  const [showDashboard, setShowDashboard] = useState(false);\n\n  return (\n    <div className={cn(\"fixed top-4 right-4 z-50\", className)}>\n      <motion.button\n        className={cn(\n          \"w-12 h-12 glass-radius-full glass-surface-primary glass-elev-3\",\n          \"flex items-center justify-center glass-text-primary\",\n          \"transition-all glass-hover-scale-105\",\n          { transitionDuration: \"var(--glass-motion-duration-normal)\" }\n        )}\n        onClick={() => setShowDashboard(!showDashboard)}\n        whileHover={prefersReducedMotion ? {} : { scale: 1.05 }}\n        whileTap={prefersReducedMotion ? {} : { scale: 0.95 }}\n        transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n        aria-label=\"Toggle contextual engine dashboard\"\n        aria-expanded={showDashboard}\n      >\n        \uD83C\uDF10\n        {adaptations.length > 0 && (\n          <motion.div\n            className=\"glass-absolute glass-top-1 glass--right-1 glass-w-3 glass-h-3 glass-surface-green glass-radius-full\"\n            initial={{ scale: 0 }}\n            animate={prefersReducedMotion ? {} : { scale: 1 }}\n          />\n        )}\n      </motion.button>\n\n      <AnimatePresence>\n        {showDashboard && (\n          <motion.div\n            className={cn(\n              \"absolute top-14 right-0 w-80 max-h-96 overflow-y-auto\",\n              \"glass-surface-primary glass-elev-4 glass-radius-lg glass-p-4 glass-gap-3\"\n            )}\n            initial={{ opacity: 0, y: -10, scale: 0.95 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: -10, scale: 0.95 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n            role=\"dialog\"\n            aria-label=\"Contextual engine dashboard\"\n          >\n            <ContrastGuard>\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <h3 className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                  Contextual Engine\n                </h3>\n                <button\n                  onClick={() => setShowDashboard(false)}\n                  className=\"glass-text-xs glass-text-secondary hover:glass-text-primary glass-focus glass-touch-target\"\n                  aria-label=\"Close contextual engine dashboard\"\n                >\n                  \u2715\n                </button>\n              </div>\n\n              {/* Current Context */}\n              <div className=\"glass-gap-2\">\n                <h4 className=\"glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                  Current Context\n                </h4>\n                <div className=\"glass-grid glass-grid-cols-2 glass-gap-2 glass-text-xs\">\n                  <div className=\"glass-surface-secondary glass-p-2 glass-radius-sm\">\n                    <div className=\"glass-text-tertiary\">Environment</div>\n                    <div className=\"glass-text-primary\">\n                      {context.environment?.timeOfDay}\n                    </div>\n                    <div className=\"glass-text-secondary\">\n                      {context.environment?.lightLevel}lx\n                    </div>\n                  </div>\n                  <div className=\"glass-surface-secondary glass-p-2 glass-radius-sm\">\n                    <div className=\"glass-text-tertiary\">Device</div>\n                    <div className=\"glass-text-primary\">\n                      {context.device?.deviceMotion}\n                    </div>\n                    <div className=\"glass-text-secondary\">\n                      {((context.device?.batteryLevel || 0) * 100).toFixed(0)}%\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              {/* Active Adaptation */}\n              {topAdaptation && (\n                <div className=\"glass-gap-2\">\n                  <h4 className=\"glass-text-xs glass-font-medium glass-text-secondary glass-uppercase glass-tracking-wide\">\n                    Active Adaptation\n                  </h4>\n                  <div className=\"glass-p-3 glass-surface-secondary glass-radius-md\">\n                    <div className=\"glass-text-sm glass-text-primary glass-font-medium glass-mb-1\">\n                      {topAdaptation.id\n                        .split(\"-\")[0]\n                        .replace(/([A-Z])/g, \" $1\")\n                        .toLowerCase()}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-tertiary\">\n                      Confidence: {(topAdaptation.confidence * 100).toFixed(0)}%\n                    </div>\n                  </div>\n                </div>\n              )}\n            </ContrastGuard>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Hook for contextually adaptive components\nexport function useContextualAdaptation() {\n  const { topAdaptation } = useContextualEngine();\n\n  const getAdaptiveStyles = useCallback(() => {\n    if (!topAdaptation) return {};\n\n    const { visual, animation } = topAdaptation.adaptations;\n\n    return {\n      filter: `brightness(${1 + visual.brightness}) contrast(${1 + visual.contrast}) saturate(${1 + visual.saturation})`,\n      animationDuration: `${1 / animation.speed}s`,\n      opacity: visual.opacity,\n    };\n  }, [topAdaptation]);\n\n  return {\n    adaptation: topAdaptation,\n    getAdaptiveStyles,\n    isAdapting: !!topAdaptation,\n  };\n}\n\n// Presets for different contextual scenarios\nexport const contextualEnginePresets = {\n  office: {\n    environmentBias: { lightLevel: 500, ambientNoise: 45, temperature: 22 },\n    adaptationSensitivity: 0.7,\n    learningRate: 0.1,\n  },\n  home: {\n    environmentBias: { lightLevel: 200, ambientNoise: 30, temperature: 24 },\n    adaptationSensitivity: 0.8,\n    learningRate: 0.15,\n  },\n  outdoor: {\n    environmentBias: { lightLevel: 20000, ambientNoise: 60, temperature: 18 },\n    adaptationSensitivity: 0.9,\n    learningRate: 0.05,\n  },\n  transport: {\n    environmentBias: { ambientNoise: 70 },\n    adaptationSensitivity: 0.6,\n    learningRate: 0.2,\n  },\n};\n\ninterface GlassContextualEngineProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  showDashboard?: boolean;\n  onContextUpdate?: (context: ContextualState) => void;\n  onAdaptationChange?: (adaptation: ContextualAdaptation | null) => void;\n  children?: React.ReactNode;\n}\n\nfunction ContextualEngineSummary() {\n  const { context, adaptations } = useContextualEngine();\n  const { adaptation, getAdaptiveStyles, isAdapting } =\n    useContextualAdaptation();\n\n  const environment = context?.environment;\n  const device = context?.device;\n  const safeAdaptations = Array.isArray(adaptations)\n    ? adaptations.slice(0, 3)\n    : [];\n\n  return (\n    <div\n      className={cn(\n        \"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4\",\n        \"glass-border glass-border-white/10 glass-shadow-soft-lg\"\n      )}\n      style={getAdaptiveStyles()}\n      data-testid=\"glass-contextual-engine-summary\"\n    >\n      <ContrastGuard>\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <div>\n            <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n              Contextual Engine\n            </p>\n            <h2 className=\"glass-text-xl glass-text-primary glass-font-semibold\">\n              {isAdapting ? \"Adaptive Mode\" : \"Learning Mode\"}\n            </h2>\n          </div>\n          <div className=\"glass-text-right\">\n            <p className=\"glass-text-xs glass-text-tertiary\">Battery</p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-medium\">\n              {device?.batteryLevel\n                ? `${Math.round(device.batteryLevel * 100)}%`\n                : \"\u2014\"}\n            </p>\n          </div>\n        </div>\n\n        <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Time of day\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-medium glass-capitalize\">\n              {environment?.timeOfDay || \"detecting\"}\n            </p>\n            <p className=\"glass-text-xs glass-text-secondary\">\n              Light{\" \"}\n              {environment?.lightLevel ? `${environment.lightLevel}lx` : \"\u2014\"}\n            </p>\n          </div>\n          <div className=\"glass-surface-subtle glass-radius-xl glass-p-4\">\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              Motion\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-medium glass-capitalize\">\n              {device?.deviceMotion || \"idle\"}\n            </p>\n            <p className=\"glass-text-xs glass-text-secondary\">\n              {environment?.temperature\n                ? `${environment.temperature.toFixed(1)}\u00B0C`\n                : \"Analyzing ambient\"}\n            </p>\n          </div>\n        </div>\n\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide glass-mb-2\">\n            Active adaptations\n          </p>\n          <div className=\"glass-flex glass-flex-wrap glass-gap-2\">\n            {safeAdaptations.length === 0 && (\n              <span className=\"glass-text-sm glass-text-secondary\">\n                Gathering signals\u2026\n              </span>\n            )}\n            {safeAdaptations.map((item) => (\n              <span\n                key={item.id}\n                className=\"glass-text-xs glass-radius-full glass-px-3 glass-py-1 glass-surface-subtle\"\n              >\n                {item.id.split(\"-\")[0]}\n              </span>\n            ))}\n          </div>\n        </div>\n\n        <div className=\"glass-text-xs glass-text-secondary glass-flex glass-items-center glass-justify-between\">\n          <span>\n            {adaptation\n              ? `Confidence ${(adaptation.confidence * 100).toFixed(0)}%`\n              : \"Awaiting adaptation event\"}\n          </span>\n          <span>\n            Ambient noise:{\" \"}\n            {environment?.ambientNoise\n              ? `${environment.ambientNoise.toFixed(0)} dB`\n              : \"\u2014\"}\n          </span>\n        </div>\n      </ContrastGuard>\n    </div>\n  );\n}\n\nexport const GlassContextualEngine: React.FC<GlassContextualEngineProps> = ({\n  className,\n  children,\n  showDashboard = true,\n  onContextUpdate,\n  onAdaptationChange,\n  ...rest\n}) => {\n  return (\n    <GlassContextualEngineProvider\n      onContextUpdate={onContextUpdate}\n      onAdaptationChange={onAdaptationChange}\n    >\n      <div\n        className={cn(\n          \"glass-contextual-engine-demo glass-relative glass-space-y-4\",\n          className\n        )}\n        {...rest}\n      >\n        {children ?? <ContextualEngineSummary />}\n        {showDashboard && <GlassContextualDashboard />}\n      </div>\n    </GlassContextualEngineProvider>\n  );\n};\n\nexport default GlassContextualEngine;\n", "\"use client\";\nimport {\n  AnimatePresence,\n  motion,\n  useInView,\n  useReducedMotion,\n} from \"framer-motion\";\nimport React, {\n  createContext,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport \"./GlassPerformanceOptimization.css\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Performance Context\ninterface PerformanceContextType {\n  performanceMode: \"high\" | \"balanced\" | \"battery-saver\";\n  gpuAcceleration: boolean;\n  reducedMotion: boolean;\n  lazyLoading: boolean;\n  setPerformanceMode: (mode: \"high\" | \"balanced\" | \"battery-saver\") => void;\n  batteryLevel?: number;\n  cpuLoad: number;\n}\n\nconst PerformanceContext = createContext<PerformanceContextType | null>(null);\n\n// Performance Provider Component\ninterface PerformanceProviderProps {\n  children: React.ReactNode;\n  adaptivePerformance?: boolean;\n}\n\nexport function GlassPerformanceProvider({\n  children,\n  adaptivePerformance = true,\n}: PerformanceProviderProps) {\n  const [performanceMode, setPerformanceMode] = useState<\n    \"high\" | \"balanced\" | \"battery-saver\"\n  >(\"balanced\");\n  const [batteryLevel, setBatteryLevel] = useState<number>();\n  const [cpuLoad, setCpuLoad] = useState(0);\n  const [gpuAcceleration, setGpuAcceleration] = useState(true);\n  const [lazyLoading, setLazyLoading] = useState(true);\n\n  const reducedMotion = useReducedMotion() || false;\n\n  // Battery API monitoring\n  useEffect(() => {\n    if (typeof navigator !== \"undefined\" && \"getBattery\" in navigator) {\n      (navigator as any).getBattery().then((battery: any) => {\n        const updateBatteryInfo = () => {\n          setBatteryLevel(Math.round(battery.level * 100));\n        };\n\n        updateBatteryInfo();\n        battery.addEventListener(\"levelchange\", updateBatteryInfo);\n        battery.addEventListener(\"chargingchange\", updateBatteryInfo);\n\n        return () => {\n          battery.removeEventListener(\"levelchange\", updateBatteryInfo);\n          battery.removeEventListener(\"chargingchange\", updateBatteryInfo);\n        };\n      });\n    }\n  }, []);\n\n  // CPU load estimation (simplified)\n  useEffect(() => {\n    let frameCount = 0;\n    let lastTime = performance.now();\n\n    const measurePerformance = () => {\n      frameCount++;\n      const currentTime = performance.now();\n\n      if (currentTime - lastTime >= 1000) {\n        const fps = Math.round((frameCount * 1000) / (currentTime - lastTime));\n        const load = Math.max(0, Math.min(100, 100 - (fps / 60) * 100));\n        setCpuLoad(load);\n\n        frameCount = 0;\n        lastTime = currentTime;\n      }\n\n      requestAnimationFrame(measurePerformance);\n    };\n\n    const animationFrame = requestAnimationFrame(measurePerformance);\n    return () => cancelAnimationFrame(animationFrame);\n  }, []);\n\n  // Adaptive performance adjustments\n  useEffect(() => {\n    if (!adaptivePerformance) return;\n\n    let newMode = performanceMode;\n\n    // Battery-based adjustments\n    if (batteryLevel !== undefined && batteryLevel < 20) {\n      newMode = \"battery-saver\";\n    } else if (\n      batteryLevel !== undefined &&\n      batteryLevel > 80 &&\n      cpuLoad < 30\n    ) {\n      newMode = \"high\";\n    } else {\n      newMode = \"balanced\";\n    }\n\n    // CPU load adjustments\n    if (cpuLoad > 70) {\n      newMode = \"battery-saver\";\n      setGpuAcceleration(false);\n    } else if (cpuLoad < 30) {\n      setGpuAcceleration(true);\n    }\n\n    if (newMode !== performanceMode) {\n      setPerformanceMode(newMode);\n    }\n  }, [batteryLevel, cpuLoad, adaptivePerformance, performanceMode]);\n\n  const contextValue: PerformanceContextType = {\n    performanceMode,\n    gpuAcceleration,\n    reducedMotion,\n    lazyLoading,\n    setPerformanceMode,\n    batteryLevel,\n    cpuLoad,\n  };\n\n  return (\n    <PerformanceContext.Provider value={contextValue}>\n      {children}\n    </PerformanceContext.Provider>\n  );\n}\n\nexport function useGlassPerformance() {\n  const context = useContext(PerformanceContext);\n  if (!context) {\n    throw new Error(\n      \"useGlassPerformance must be used within a GlassPerformanceProvider\"\n    );\n  }\n  return context;\n}\n\n// Efficient Glass Rendering Component\ninterface EfficientGlassRenderingProps {\n  children: React.ReactNode;\n  className?: string;\n  enableGPU?: boolean;\n  virtualizeContent?: boolean;\n  deferRender?: boolean;\n  renderDistance?: number;\n  style?: React.CSSProperties;\n}\n\nexport function EfficientGlassRendering({\n  children,\n  className = \"\",\n  enableGPU = true,\n  virtualizeContent = false,\n  deferRender = false,\n  renderDistance = 100,\n  style = {},\n}: EfficientGlassRenderingProps) {\n  const { performanceMode, gpuAcceleration } = useGlassPerformance();\n  const [isVisible, setIsVisible] = useState(!deferRender);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const isInView = useInView(containerRef, {\n    margin: `${renderDistance}px`,\n    once: false,\n  });\n\n  useEffect(() => {\n    if (deferRender) {\n      setIsVisible(isInView);\n    }\n  }, [isInView, deferRender]);\n\n  // Performance-based glass styles\n  const getOptimizedGlassStyles = useMemo(() => {\n    let baseBackground = \"var(--glass-bg-default)\";\n    let backdropBlur = 12;\n    let shadow =\n      \"0 8px 32px color-mix(in srgb, var(--glass-black) 10%, transparent)\";\n\n    switch (performanceMode) {\n      case \"battery-saver\":\n        backdropBlur = 0;\n        shadow = \"none\";\n        break;\n      case \"high\":\n        backdropBlur = 20;\n        shadow =\n          \"0 16px 64px color-mix(in srgb, var(--glass-black) 15%, transparent)\";\n        break;\n      default:\n        backdropBlur = 12;\n    }\n\n    return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n  }, [performanceMode, enableGPU, gpuAcceleration, style]);\n\n  if (!isVisible && deferRender) {\n    return (\n      <div\n        ref={containerRef}\n        className={cn(\n          \"glass-surface-placeholder glass-border-dashed\",\n          className\n        )}\n        style={{\n          minHeight: \"100px\",\n          background: \"transparent\",\n          border:\n            \"1px dashed color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n        }}\n      />\n    );\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\"glass-surface-primary glass-blur-backdrop\", className)}\n      style={{ ...getOptimizedGlassStyles }}\n    >\n      {virtualizeContent ? (\n        <VirtualizedContent>{children}</VirtualizedContent>\n      ) : (\n        children\n      )}\n    </div>\n  );\n}\n\n// Lazy Glass Loading Component\ninterface LazyGlassProps {\n  children: React.ReactNode;\n  placeholder?: React.ReactNode;\n  threshold?: number;\n  rootMargin?: string;\n  className?: string;\n  onLoad?: () => void;\n}\n\nexport function LazyGlassLoading({\n  children,\n  placeholder,\n  threshold = 0.1,\n  rootMargin = \"50px\",\n  className = \"\",\n  onLoad,\n}: LazyGlassProps) {\n  const [isLoaded, setIsLoaded] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const isInView = useInView(containerRef, {\n    amount: threshold,\n    margin: rootMargin as any,\n    once: true,\n  });\n\n  useEffect(() => {\n    if (isInView && !isLoaded) {\n      // Simulate async glass effect loading\n      const timer = setTimeout(() => {\n        setIsLoaded(true);\n        onLoad?.();\n      }, 100);\n\n      return () => clearTimeout(timer);\n    }\n  }, [isInView, isLoaded, onLoad]);\n\n  const defaultPlaceholder = (\n    <div\n      className={cn(\"glass-surface-placeholder glass-animate-pulse\")}\n      style={{\n        background:\n          \"var(--glass-neutral-level2-surface)\",\n        backgroundSize: \"200% 100%\",\n        animation: \"shimmer 1.5s infinite\",\n        borderRadius: \"12px\",\n        minHeight: \"100px\",\n      }}\n    />\n  );\n\n  return (\n    <div ref={containerRef} className={className}>\n      <AnimatePresence mode=\"wait\">\n        {!isLoaded ? (\n          <motion.div\n            key=\"placeholder\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            transition={{ duration: 0.3 }}\n          >\n            {placeholder || defaultPlaceholder}\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"content\"\n            initial={{ opacity: 0, y: 10 }}\n            animate={{ opacity: 1, y: 0 }}\n            transition={{ duration: 0.4 }}\n          >\n            {children}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Reduced Motion Glass Component\ninterface ReducedMotionGlassProps {\n  children: React.ReactNode;\n  className?: string;\n  staticAlternative?: React.ReactNode;\n  respectUserPreference?: boolean;\n}\n\nexport function ReducedMotionGlass({\n  children,\n  className = \"\",\n  staticAlternative,\n  respectUserPreference = true,\n}: ReducedMotionGlassProps) {\n  const { reducedMotion } = useGlassPerformance();\n  const shouldReduceMotion = respectUserPreference && reducedMotion;\n\n  if (shouldReduceMotion && staticAlternative) {\n    return (\n      <div\n        className={cn(\"glass-surface-primary glass-reduced-motion\", className)}\n      >\n        {staticAlternative}\n      </div>\n    );\n  }\n\n  const motionProps = shouldReduceMotion\n    ? {\n        // Disable animations when reduced motion is preferred\n        animate: undefined,\n        transition: { duration: 0 },\n        whileHover: undefined,\n        whileTap: undefined,\n      }\n    : {\n        // Normal animation props\n        initial: { opacity: 0, scale: 0.95 },\n        animate: { opacity: 1, scale: 1 },\n        transition: { duration: 0.3, type: \"spring\" },\n        whileHover: { scale: 1.02, y: -2 },\n        whileTap: { scale: 0.98 },\n      };\n\n  return (\n    <motion.div\n      className={cn(\"glass-surface-primary glass-reduced-motion\", className)}\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n      {...motionProps}\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Battery-Aware Glass Effects\ninterface BatteryAwareGlassProps {\n  children: React.ReactNode;\n  className?: string;\n  showDebugHud?: boolean;\n  energyThresholds?: {\n    high: number; // Above this percentage, use full effects\n    medium: number; // Between medium and high, use reduced effects\n    low: number; // Below this, use minimal effects\n  };\n}\n\nexport function BatteryAwareGlass({\n  children,\n  className = \"\",\n  showDebugHud = false,\n  energyThresholds = { high: 50, medium: 25, low: 10 },\n}: BatteryAwareGlassProps) {\n  const { batteryLevel, performanceMode } = useGlassPerformance();\n\n  const getEnergyEfficientStyles = () => {\n    const level = batteryLevel || 100;\n\n    if (level > energyThresholds.high && performanceMode !== \"battery-saver\") {\n      // Full effects\n      return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n    } else if (level > energyThresholds.medium) {\n      // Reduced effects\n      return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n    } else {\n      // Minimal effects\n      return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n    }\n  };\n\n  return (\n    <motion.div\n      className={cn(\"glass-surface-adaptive glass-border-radius-lg\", className)}\n      style={{\n        borderRadius: \"12px\",\n        transition: \"all 0.3s ease-in-out\",\n        ...getEnergyEfficientStyles(),\n      }}\n      layout\n    >\n      {children}\n\n      {/* Battery indicator */}\n      {showDebugHud && batteryLevel !== undefined && (\n        <div\n          className={cn(\n            \"glass-absolute glass-top-2 glass-left-2 glass-text-xs glass-surface-debug glass-text-on-debug glass-px-2 glass-py-1 glass-radius-sm glass-opacity-50\"\n          )}\n        >\n          Battery: {batteryLevel}%\n        </div>\n      )}\n    </motion.div>\n  );\n}\n\n// Progressive Glass Enhancement\ninterface ProgressiveGlassProps {\n  children: React.ReactNode;\n  tiers?: {\n    basic: React.CSSProperties;\n    enhanced: React.CSSProperties;\n    premium: React.CSSProperties;\n  };\n  className?: string;\n  autoDetect?: boolean;\n}\n\nexport function ProgressiveGlassEnhancement({\n  children,\n  tiers = {\n    basic: {\n      background:\n        \"var(--glass-neutral-level2-surface)\",\n      border: \"1px solid var(--glass-border-default)\",\n      borderRadius: \"8px\",\n    },\n    enhanced: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n    premium: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  },\n  className = \"\",\n  autoDetect = true,\n}: ProgressiveGlassProps) {\n  const { performanceMode, gpuAcceleration, cpuLoad } = useGlassPerformance();\n\n  const getTierStyles = () => {\n    if (!autoDetect) {\n      return tiers.enhanced; // Default to enhanced if not auto-detecting\n    }\n\n    // Determine tier based on performance indicators\n    if (\n      performanceMode === \"battery-saver\" ||\n      cpuLoad > 70 ||\n      !gpuAcceleration\n    ) {\n      return tiers.basic;\n    } else if (performanceMode === \"high\" && cpuLoad < 30) {\n      return tiers.premium;\n    } else {\n      return tiers.enhanced;\n    }\n  };\n\n  return (\n    <motion.div\n      className={cn(\"glass-surface-progressive\", className)}\n      style={getTierStyles()}\n      layout\n      transition={{ duration: 0.3 }}\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Virtualized Content Helper\nfunction VirtualizedContent({ children }: { children: React.ReactNode }) {\n  const [visibleRange, setVisibleRange] = useState({ start: 0, end: 10 });\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container) return;\n\n    const handleScroll = () => {\n      const containerHeight = container.clientHeight;\n      const scrollTop = container.scrollTop;\n      const itemHeight = 100; // Approximate item height\n\n      const start = Math.floor(scrollTop / itemHeight);\n      const end = Math.ceil((scrollTop + containerHeight) / itemHeight);\n\n      setVisibleRange({ start: Math.max(0, start - 2), end: end + 2 });\n    };\n\n    container.addEventListener(\"scroll\", handleScroll);\n    return () => container.removeEventListener(\"scroll\", handleScroll);\n  }, []);\n\n  const childArray = React.Children.toArray(children);\n  const visibleChildren = childArray.slice(\n    visibleRange.start,\n    visibleRange.end\n  );\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        \"glass-virtualized-content glass-h-400 glass-overflow-y-auto\"\n      )}\n    >\n      <div style={{ height: visibleRange.start * 100 }} />{\" \"}\n      {/* Spacer for scrolled items */}\n      {visibleChildren}\n      <div\n        style={{ height: (childArray.length - visibleRange.end) * 100 }}\n      />{\" \"}\n      {/* Spacer for remaining items */}\n    </div>\n  );\n}\n\n// Performance Monitor Component\nexport function GlassPerformanceMonitor({\n  className = \"\",\n}: {\n  className?: string;\n}) {\n  const { performanceMode, batteryLevel, cpuLoad, gpuAcceleration } =\n    useGlassPerformance();\n\n  return (\n    <motion.div\n      className={cn(\n        \"glass-performance-monitor glass-fixed glass-top-10 glass-right-10 glass-z-max\",\n        className\n      )}\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n      initial={{ opacity: 0, x: 50 }}\n      animate={{ opacity: 1, x: 0 }}\n    >\n      <div>Mode: {performanceMode}</div>\n      {batteryLevel !== undefined && <div>Battery: {batteryLevel}%</div>}\n      <div>CPU: {cpuLoad.toFixed(1)}%</div>\n      <div>GPU: {gpuAcceleration ? \"ON\" : \"OFF\"}</div>\n    </motion.div>\n  );\n}\n\nfunction PerformanceSummaryCard() {\n  const { performanceMode, batteryLevel, cpuLoad, lazyLoading } =\n    useGlassPerformance();\n\n  const metrics = [\n    {\n      label: \"Mode\",\n      value: performanceMode.replace(\"-\", \" \"),\n    },\n    {\n      label: \"Battery\",\n      value: batteryLevel !== undefined ? `${batteryLevel}%` : \"\u2014\",\n    },\n    {\n      label: \"CPU Load\",\n      value: `${cpuLoad.toFixed(0)}%`,\n    },\n    {\n      label: \"Lazy Loading\",\n      value: lazyLoading ? \"enabled\" : \"disabled\",\n    },\n  ];\n\n  return (\n    <div className=\"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-4 glass-border glass-border-white/10\">\n      <div>\n        <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n          Performance profile\n        </p>\n        <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n          Adaptive glass effects\n        </h2>\n      </div>\n      <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n        {metrics.map((metric) => (\n          <div\n            key={metric.label}\n            className=\"glass-surface-subtle glass-radius-xl glass-p-4\"\n          >\n            <p className=\"glass-text-xs glass-text-tertiary glass-mb-1\">\n              {metric.label}\n            </p>\n            <p className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n              {metric.value}\n            </p>\n          </div>\n        ))}\n      </div>\n      <p className=\"glass-text-xs glass-text-secondary\">\n        The engine continuously balances fidelity with resource usage.\n      </p>\n    </div>\n  );\n}\n\ninterface GlassPerformanceOptimizationProps extends React.HTMLAttributes<HTMLDivElement> {\n  adaptivePerformance?: boolean;\n  showMonitor?: boolean;\n  children?: React.ReactNode;\n}\n\nconst DemoPerformanceGrid = () => (\n  <div className=\"glass-grid md:glass-grid-cols-2 glass-gap-4\">\n    <EfficientGlassRendering className=\"glass-p-4 glass-radius-xl\">\n      <h3 className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n        Efficient rendering\n      </h3>\n      <p className=\"glass-text-sm glass-text-secondary\">\n        Defers heavy effects when out of view.\n      </p>\n    </EfficientGlassRendering>\n    <BatteryAwareGlass className=\"glass-p-4 glass-radius-xl\">\n      <h3 className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n        Battery-aware styling\n      </h3>\n      <p className=\"glass-text-sm glass-text-secondary\">\n        Automatically dials visuals up or down.\n      </p>\n    </BatteryAwareGlass>\n    <LazyGlassLoading className=\"glass-p-4 glass-radius-xl\">\n      <h3 className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n        Lazy loading\n      </h3>\n      <p className=\"glass-text-sm glass-text-secondary\">\n        Streams content just in time.\n      </p>\n    </LazyGlassLoading>\n    <ReducedMotionGlass className=\"glass-p-4 glass-radius-xl\">\n      <h3 className=\"glass-text-lg glass-text-primary glass-font-semibold\">\n        Motion aware\n      </h3>\n      <p className=\"glass-text-sm glass-text-secondary\">\n        Respects prefers-reduced-motion automatically.\n      </p>\n    </ReducedMotionGlass>\n  </div>\n);\n\nexport const GlassPerformanceOptimization: React.FC<\n  GlassPerformanceOptimizationProps\n> = ({\n  adaptivePerformance = true,\n  className,\n  children,\n  showMonitor = false,\n  ...rest\n}) => (\n  <GlassPerformanceProvider adaptivePerformance={adaptivePerformance}>\n    <div\n      className={cn(\n        \"glass-performance-optimization glass-space-y-6\",\n        className\n      )}\n      {...rest}\n    >\n      {children ?? (\n        <>\n          <PerformanceSummaryCard />\n          <DemoPerformanceGrid />\n        </>\n      )}\n      {showMonitor && <GlassPerformanceMonitor />}\n    </div>\n  </GlassPerformanceProvider>\n);\n\nexport default GlassPerformanceOptimization;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Quantum States System\n * Probabilistic UI states that collapse into deterministic visuals based on user interaction\n * Part of Next-Wave Systems (10/10) - Meta-Systems Framework\n */\n\nimport React, {\n  useEffect,\n  useRef,\n  useState,\n  useCallback,\n  createContext,\n  useContext,\n} from \"react\";\nimport {\n  motion,\n  AnimatePresence,\n  useMotionValue,\n  useTransform,\n} from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\n// Quantum state types\ninterface QuantumState<T = unknown> {\n  id: string;\n  possibleStates: T[];\n  probabilities: number[];\n  coherence: number;\n  entangled: string[];\n  lastMeasurement?: T;\n  measurementTime?: number;\n  decoherenceRate: number;\n}\n\ninterface QuantumMeasurement<T = unknown> {\n  stateId: string;\n  measuredValue: T;\n  probability: number;\n  timestamp: number;\n  observer: string;\n  causedCollapse: boolean;\n}\n\ninterface QuantumEntanglement {\n  state1: string;\n  state2: string;\n  strength: number;\n  correlationType: \"positive\" | \"negative\" | \"complex\";\n  created: number;\n  lastInteraction: number;\n}\n\ninterface QuantumSuperposition {\n  states: Map<string, unknown>;\n  totalProbability: number;\n  coherenceTime: number;\n  interferencePattern: number[];\n}\n\nexport interface QuantumSuperpositionEntry<T = unknown> {\n  state: T;\n  probability: number;\n  phase: number;\n}\n\nexport interface QuantumButtonState {\n  label: string;\n  color: string;\n  action: () => void;\n}\n\ninterface QuantumStatesContextValue {\n  system: QuantumUISystem | null;\n  createQuantumState: <T>(\n    stateId: string,\n    possibleStates: T[],\n    initialProbabilities?: number[]\n  ) => void;\n  measureState: <T = unknown>(\n    stateId: string,\n    observer?: string\n  ) => QuantumMeasurement<T> | null;\n  getSuperposition: <T = unknown>(\n    stateId: string\n  ) => QuantumSuperpositionEntry<T>[] | null;\n  createEntanglement: (\n    state1: string,\n    state2: string,\n    strength?: number,\n    type?: QuantumEntanglement[\"correlationType\"]\n  ) => void;\n  getCoherence: (stateId: string) => number;\n}\n\nconst serializeQuantumState = (state: unknown): string =>\n  JSON.stringify(state) ?? \"null\";\n\nconst parseQuantumState = <T = unknown,>(state: string): T =>\n  JSON.parse(state) as T;\n\n// Complex number representation for quantum amplitudes\nclass ComplexNumber {\n  constructor(\n    public real: number = 0,\n    public imaginary: number = 0\n  ) {}\n\n  static fromPolar(magnitude: number, phase: number): ComplexNumber {\n    return new ComplexNumber(\n      magnitude * Math.cos(phase),\n      magnitude * Math.sin(phase)\n    );\n  }\n\n  magnitude(): number {\n    return Math.sqrt(this.real * this.real + this.imaginary * this.imaginary);\n  }\n\n  phase(): number {\n    return Math.atan2(this.imaginary, this.real);\n  }\n\n  multiply(other: ComplexNumber): ComplexNumber {\n    return new ComplexNumber(\n      this.real * other.real - this.imaginary * other.imaginary,\n      this.real * other.imaginary + this.imaginary * other.real\n    );\n  }\n\n  add(other: ComplexNumber): ComplexNumber {\n    return new ComplexNumber(\n      this.real + other.real,\n      this.imaginary + other.imaginary\n    );\n  }\n\n  normalize(): ComplexNumber {\n    const mag = this.magnitude();\n    if (mag === 0) return new ComplexNumber(0, 0);\n    return new ComplexNumber(this.real / mag, this.imaginary / mag);\n  }\n}\n\n// Quantum state vector representation\nclass QuantumStateVector {\n  private amplitudes: ComplexNumber[];\n  private stateLabels: string[];\n\n  constructor(states: string[]) {\n    this.stateLabels = states;\n    this.amplitudes = states.map(\n      () => new ComplexNumber(1 / Math.sqrt(states.length), 0)\n    );\n  }\n\n  setAmplitude(stateIndex: number, amplitude: ComplexNumber): void {\n    if (stateIndex >= 0 && stateIndex < this.amplitudes.length) {\n      this.amplitudes[stateIndex] = amplitude;\n    }\n  }\n\n  getAmplitude(stateIndex: number): ComplexNumber {\n    return this.amplitudes[stateIndex] || new ComplexNumber(0, 0);\n  }\n\n  getProbability(stateIndex: number): number {\n    const amplitude = this.getAmplitude(stateIndex);\n    return amplitude.magnitude() ** 2;\n  }\n\n  normalize(): void {\n    const totalProbability = this.amplitudes.reduce(\n      (sum, amp) => sum + amp.magnitude() ** 2,\n      0\n    );\n    const normalizationFactor = 1 / Math.sqrt(totalProbability);\n\n    this.amplitudes = this.amplitudes.map(\n      (amp) =>\n        new ComplexNumber(\n          amp.real * normalizationFactor,\n          amp.imaginary * normalizationFactor\n        )\n    );\n  }\n\n  measure(): { stateIndex: number; state: string; probability: number } {\n    this.normalize();\n    const random = Math.random();\n    let cumulativeProbability = 0;\n\n    for (let i = 0; i < this.amplitudes.length; i++) {\n      const probability = this.getProbability(i);\n      cumulativeProbability += probability;\n\n      if (random <= cumulativeProbability) {\n        // Collapse to measured state\n        this.amplitudes.fill(new ComplexNumber(0, 0));\n        this.amplitudes[i] = new ComplexNumber(1, 0);\n\n        return {\n          stateIndex: i,\n          state: this.stateLabels[i],\n          probability,\n        };\n      }\n    }\n\n    // Fallback to last state\n    const lastIndex = this.amplitudes.length - 1;\n    return {\n      stateIndex: lastIndex,\n      state: this.stateLabels[lastIndex],\n      probability: this.getProbability(lastIndex),\n    };\n  }\n\n  evolve(hamiltonianMatrix: number[][], timeStep: number): void {\n    // Simplified time evolution using Hamiltonian\n    const newAmplitudes: ComplexNumber[] = [];\n\n    for (let i = 0; i < this.amplitudes.length; i++) {\n      let sum = new ComplexNumber(0, 0);\n\n      for (let j = 0; j < this.amplitudes.length; j++) {\n        const evolutionPhase = -hamiltonianMatrix[i][j] * timeStep;\n        const evolutionFactor = ComplexNumber.fromPolar(1, evolutionPhase);\n        sum = sum.add(evolutionFactor.multiply(this.amplitudes[j]));\n      }\n\n      newAmplitudes.push(sum);\n    }\n\n    this.amplitudes = newAmplitudes;\n    this.normalize();\n  }\n\n  getSuperposition(): Array<{\n    state: string;\n    probability: number;\n    amplitude: ComplexNumber;\n  }> {\n    return this.stateLabels.map((state, index) => ({\n      state,\n      probability: this.getProbability(index),\n      amplitude: this.getAmplitude(index),\n    }));\n  }\n}\n\n// Quantum interference patterns for UI animations\nclass InterferencePatternGenerator {\n  private waveFunction: (x: number, t: number) => number;\n  private frequency: number;\n  private wavelength: number;\n\n  constructor(frequency: number = 1, wavelength: number = 10) {\n    this.frequency = frequency;\n    this.wavelength = wavelength;\n    this.waveFunction = (x: number, t: number) =>\n      Math.sin(2 * Math.PI * (this.frequency * t - x / this.wavelength));\n  }\n\n  generatePattern(width: number, height: number, time: number): number[][] {\n    const pattern: number[][] = [];\n\n    for (let y = 0; y < height; y++) {\n      pattern[y] = [];\n      for (let x = 0; x < width; x++) {\n        const wave1 = this.waveFunction(x, time);\n        const wave2 = this.waveFunction(y, time + Math.PI / 4);\n        const interference = (wave1 + wave2) / 2;\n        pattern[y][x] = (interference + 1) / 2; // Normalize to 0-1\n      }\n    }\n\n    return pattern;\n  }\n\n  createConstructiveInterference(x: number, y: number, time: number): number {\n    const distance1 = Math.sqrt(x * x + y * y);\n    const distance2 = Math.sqrt((x - 50) * (x - 50) + (y - 50) * (y - 50));\n\n    const wave1 = Math.sin(\n      2 * Math.PI * (this.frequency * time - distance1 / this.wavelength)\n    );\n    const wave2 = Math.sin(\n      2 * Math.PI * (this.frequency * time - distance2 / this.wavelength)\n    );\n\n    return Math.abs(wave1 + wave2) / 2;\n  }\n}\n\n// Main quantum states system\nclass QuantumUISystem {\n  private quantumStates: Map<string, QuantumStateVector>;\n  private entanglements: Map<string, QuantumEntanglement>;\n  private measurements: QuantumMeasurement[];\n  private interferenceGenerator: InterferencePatternGenerator;\n  private decoherenceTimer: Map<string, NodeJS.Timeout>;\n  private hamiltonianMatrices: Map<string, number[][]>;\n\n  constructor() {\n    this.quantumStates = new Map();\n    this.entanglements = new Map();\n    this.measurements = [];\n    this.interferenceGenerator = new InterferencePatternGenerator();\n    this.decoherenceTimer = new Map();\n    this.hamiltonianMatrices = new Map();\n  }\n\n  createQuantumState<T>(\n    stateId: string,\n    possibleStates: T[],\n    initialProbabilities?: number[]\n  ): QuantumStateVector {\n    const stateLabels = possibleStates.map((state) =>\n      serializeQuantumState(state)\n    );\n    const quantumState = new QuantumStateVector(stateLabels);\n\n    if (\n      initialProbabilities &&\n      initialProbabilities.length === possibleStates.length\n    ) {\n      // Set initial amplitudes based on probabilities\n      const normalizedProbs = this.normalizeProbabilities(initialProbabilities);\n      normalizedProbs.forEach((prob, index) => {\n        const amplitude = new ComplexNumber(Math.sqrt(prob), 0);\n        quantumState.setAmplitude(index, amplitude);\n      });\n    }\n\n    this.quantumStates.set(stateId, quantumState);\n    this.createHamiltonianMatrix(stateId, possibleStates.length);\n    this.startQuantumEvolution(stateId);\n\n    return quantumState;\n  }\n\n  private normalizeProbabilities(probabilities: number[]): number[] {\n    const sum = probabilities.reduce(\n      (total, prob) => total + Math.abs(prob),\n      0\n    );\n    return probabilities.map((prob) => Math.abs(prob) / sum);\n  }\n\n  private createHamiltonianMatrix(stateId: string, dimension: number): void {\n    // Create a random Hamiltonian matrix (Hermitian for proper quantum evolution)\n    const matrix: number[][] = [];\n\n    for (let i = 0; i < dimension; i++) {\n      matrix[i] = [];\n      for (let j = 0; j < dimension; j++) {\n        if (i === j) {\n          matrix[i][j] = Math.random() * 2 - 1; // Diagonal elements (energy levels)\n        } else if (j > i) {\n          matrix[i][j] = (Math.random() - 0.5) * 0.1; // Upper triangle\n        } else {\n          matrix[i][j] = matrix[j][i]; // Make Hermitian\n        }\n      }\n    }\n\n    this.hamiltonianMatrices.set(stateId, matrix);\n  }\n\n  private startQuantumEvolution(stateId: string): void {\n    const evolveState = () => {\n      const quantumState = this.quantumStates.get(stateId);\n      const hamiltonian = this.hamiltonianMatrices.get(stateId);\n\n      if (quantumState && hamiltonian) {\n        quantumState.evolve(hamiltonian, 0.01); // Small time step\n      }\n    };\n\n    // Continuous quantum evolution\n    setInterval(evolveState, ANIMATION.DURATION.fast / 2); // 20fps evolution\n  }\n\n  measureState<T = unknown>(\n    stateId: string,\n    observer: string = \"unknown\"\n  ): QuantumMeasurement<T> | null {\n    const quantumState = this.quantumStates.get(stateId);\n    if (!quantumState) return null;\n\n    const measurement = quantumState.measure();\n\n    const quantumMeasurement: QuantumMeasurement<T> = {\n      stateId,\n      measuredValue: parseQuantumState<T>(measurement.state),\n      probability: measurement.probability,\n      timestamp: Date.now(),\n      observer,\n      causedCollapse: true,\n    };\n\n    this.measurements.push(quantumMeasurement);\n\n    // Handle entangled states\n    this.handleEntangledMeasurements(stateId, measurement.stateIndex);\n\n    // Start decoherence process\n    this.scheduleDecoherence(stateId, ANIMATION.DURATION.slower * 8); // 5 seconds\n\n    return quantumMeasurement;\n  }\n\n  private handleEntangledMeasurements(\n    measuredStateId: string,\n    measuredIndex: number\n  ): void {\n    this.entanglements.forEach((entanglement) => {\n      if (\n        entanglement.state1 === measuredStateId ||\n        entanglement.state2 === measuredStateId\n      ) {\n        const otherStateId =\n          entanglement.state1 === measuredStateId\n            ? entanglement.state2\n            : entanglement.state1;\n        const otherState = this.quantumStates.get(otherStateId);\n\n        if (otherState) {\n          // Correlate the entangled state based on entanglement type\n          let correlatedIndex: number;\n\n          switch (entanglement.correlationType) {\n            case \"positive\":\n              correlatedIndex = measuredIndex;\n              break;\n            case \"negative\":\n              correlatedIndex =\n                (measuredIndex +\n                  Math.floor(otherState.getSuperposition().length / 2)) %\n                otherState.getSuperposition().length;\n              break;\n            case \"complex\":\n              correlatedIndex =\n                (measuredIndex * 2) % otherState.getSuperposition().length;\n              break;\n            default:\n              correlatedIndex = measuredIndex;\n          }\n\n          // Collapse entangled state\n          const superposition = otherState.getSuperposition();\n          superposition.forEach((_, index) => {\n            const amplitude =\n              index === correlatedIndex\n                ? new ComplexNumber(1, 0)\n                : new ComplexNumber(0, 0);\n            otherState.setAmplitude(index, amplitude);\n          });\n        }\n      }\n    });\n  }\n\n  private scheduleDecoherence(stateId: string, delay: number): void {\n    // Clear existing decoherence timer\n    const existingTimer = this.decoherenceTimer.get(stateId);\n    if (existingTimer) {\n      clearTimeout(existingTimer);\n    }\n\n    // Schedule decoherence (return to superposition)\n    const timer = setTimeout(() => {\n      this.restoreSuperposition(stateId);\n    }, delay);\n\n    this.decoherenceTimer.set(stateId, timer);\n  }\n\n  private restoreSuperposition(stateId: string): void {\n    const quantumState = this.quantumStates.get(stateId);\n    if (!quantumState) return;\n\n    // Restore equal superposition\n    const superposition = quantumState.getSuperposition();\n    const equalAmplitude = 1 / Math.sqrt(superposition.length);\n\n    superposition.forEach((_, index) => {\n      const randomPhase = Math.random() * 2 * Math.PI;\n      const amplitude = ComplexNumber.fromPolar(equalAmplitude, randomPhase);\n      quantumState.setAmplitude(index, amplitude);\n    });\n  }\n\n  createEntanglement(\n    state1: string,\n    state2: string,\n    strength: number = 0.8,\n    type: \"positive\" | \"negative\" | \"complex\" = \"positive\"\n  ): void {\n    const entanglementId = `${state1}-${state2}`;\n\n    const entanglement: QuantumEntanglement = {\n      state1,\n      state2,\n      strength,\n      correlationType: type,\n      created: Date.now(),\n      lastInteraction: Date.now(),\n    };\n\n    this.entanglements.set(entanglementId, entanglement);\n  }\n\n  getSuperposition<T = unknown>(\n    stateId: string\n  ): QuantumSuperpositionEntry<T>[] | null {\n    const quantumState = this.quantumStates.get(stateId);\n    if (!quantumState) return null;\n\n    return quantumState.getSuperposition().map((item) => ({\n      state: parseQuantumState<T>(item.state),\n      probability: item.probability,\n      phase: item.amplitude.phase(),\n    }));\n  }\n\n  generateInterferencePattern(\n    width: number,\n    height: number,\n    time: number\n  ): number[][] {\n    return this.interferenceGenerator.generatePattern(width, height, time);\n  }\n\n  getQuantumCoherence(stateId: string): number {\n    const quantumState = this.quantumStates.get(stateId);\n    if (!quantumState) return 0;\n\n    const superposition = quantumState.getSuperposition();\n    const entropy = superposition.reduce((sum, item) => {\n      if (item.probability > 0) {\n        return sum - item.probability * Math.log2(item.probability);\n      }\n      return sum;\n    }, 0);\n\n    const maxEntropy = Math.log2(superposition.length);\n    return entropy / maxEntropy;\n  }\n\n  // Public API\n  getStateVector(stateId: string): QuantumStateVector | undefined {\n    return this.quantumStates.get(stateId);\n  }\n\n  getAllMeasurements(): QuantumMeasurement[] {\n    return [...this.measurements];\n  }\n\n  getEntanglements(): QuantumEntanglement[] {\n    return Array.from(this.entanglements.values());\n  }\n\n  cleanup(stateId: string): void {\n    const timer = this.decoherenceTimer.get(stateId);\n    if (timer) {\n      clearTimeout(timer);\n      this.decoherenceTimer.delete(stateId);\n    }\n\n    this.quantumStates.delete(stateId);\n    this.hamiltonianMatrices.delete(stateId);\n\n    // Remove entanglements involving this state\n    Array.from(this.entanglements.entries()).forEach(([id, entanglement]) => {\n      if (entanglement.state1 === stateId || entanglement.state2 === stateId) {\n        this.entanglements.delete(id);\n      }\n    });\n  }\n}\n\n// React Context for quantum states\nconst QuantumStatesContext = createContext<QuantumStatesContextValue>({\n  system: null,\n  createQuantumState: () => {},\n  measureState: () => null,\n  getSuperposition: () => null,\n  createEntanglement: () => {},\n  getCoherence: () => 0,\n});\n\n// Provider component\nexport function GlassQuantumStatesProvider({\n  children,\n  onMeasurement,\n  onStateChange,\n}: {\n  children: React.ReactNode;\n  onMeasurement?: (measurement: QuantumMeasurement) => void;\n  onStateChange?: (\n    stateId: string,\n    superposition: QuantumSuperpositionEntry[]\n  ) => void;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const systemRef = useRef<QuantumUISystem>();\n\n  // Initialize system\n  useEffect(() => {\n    systemRef.current = new QuantumUISystem();\n\n    return () => {\n      // Cleanup would go here\n    };\n  }, []);\n\n  const createQuantumState = useCallback(\n    <T,>(\n      stateId: string,\n      possibleStates: T[],\n      initialProbabilities?: number[]\n    ) => {\n      systemRef.current?.createQuantumState(\n        stateId,\n        possibleStates,\n        initialProbabilities\n      );\n    },\n    []\n  );\n\n  const measureState = useCallback(\n    function measureState<T = unknown>(\n      stateId: string,\n      observer: string = \"user\"\n    ): QuantumMeasurement<T> | null {\n      const measurement = systemRef.current?.measureState<T>(stateId, observer);\n      if (measurement) {\n        onMeasurement?.(measurement);\n      }\n      return measurement || null;\n    },\n    [onMeasurement]\n  );\n\n  const getSuperposition = useCallback(function getSuperposition<T = unknown>(\n    stateId: string\n  ): QuantumSuperpositionEntry<T>[] | null {\n    return systemRef.current?.getSuperposition<T>(stateId) || null;\n  }, []);\n\n  const createEntanglement = useCallback(\n    (\n      state1: string,\n      state2: string,\n      strength: number = 0.8,\n      type: \"positive\" | \"negative\" | \"complex\" = \"positive\"\n    ) => {\n      systemRef.current?.createEntanglement(state1, state2, strength, type);\n    },\n    []\n  );\n\n  const getCoherence = useCallback((stateId: string) => {\n    return systemRef.current?.getQuantumCoherence(stateId) || 0;\n  }, []);\n\n  const value = {\n    system: systemRef.current || null,\n    createQuantumState,\n    measureState,\n    getSuperposition,\n    createEntanglement,\n    getCoherence,\n  };\n\n  return (\n    <QuantumStatesContext.Provider value={value}>\n      {children}\n    </QuantumStatesContext.Provider>\n  );\n}\n\n// Hook to use quantum states\nexport function useQuantumStates() {\n  const context = useContext(QuantumStatesContext);\n  if (!context) {\n    throw new Error(\n      \"useQuantumStates must be used within GlassQuantumStatesProvider\"\n    );\n  }\n  return context;\n}\n\n// Quantum button component that exists in superposition until clicked\nexport function GlassQuantumButton({\n  children,\n  possibleStates,\n  onCollapse,\n  className,\n  stateId,\n  ...props\n}: {\n  children: React.ReactNode;\n  possibleStates: QuantumButtonState[];\n  onCollapse?: (selectedState: QuantumButtonState) => void;\n  className?: string;\n  stateId?: string;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>) {\n  const prefersReducedMotion = useReducedMotion();\n  const { createQuantumState, measureState, getSuperposition } =\n    useQuantumStates();\n  const [currentState, setCurrentState] = useState<QuantumButtonState | null>(\n    null\n  );\n  const [superposition, setSuperposition] = useState<\n    QuantumSuperpositionEntry<QuantumButtonState>[]\n  >([]);\n  const [isCollapsed, setIsCollapsed] = useState(false);\n  const buttonId = stateId || `quantum-button-${Date.now()}`;\n\n  // Initialize quantum state\n  useEffect(() => {\n    createQuantumState(buttonId, possibleStates);\n\n    // Update superposition display\n    const updateSuperposition = () => {\n      const currentSuperposition =\n        getSuperposition<QuantumButtonState>(buttonId);\n      if (currentSuperposition) {\n        setSuperposition(currentSuperposition);\n      }\n    };\n\n    updateSuperposition();\n    const interval = setInterval(updateSuperposition, ANIMATION.DURATION.fast);\n\n    return () => clearInterval(interval);\n  }, [buttonId, createQuantumState, getSuperposition, possibleStates]);\n\n  const handleClick = useCallback(() => {\n    const measurement = measureState<QuantumButtonState>(\n      buttonId,\n      \"user-click\"\n    );\n    if (measurement) {\n      const prefersReducedMotion = useReducedMotion();\n      setCurrentState(measurement.measuredValue);\n      setIsCollapsed(true);\n      onCollapse?.(measurement.measuredValue);\n      measurement.measuredValue.action();\n\n      // Restore superposition after delay\n      setTimeout(() => {\n        setIsCollapsed(false);\n        setCurrentState(null);\n      }, ANIMATION.DURATION.slower * 5);\n    }\n  }, [buttonId, measureState, onCollapse]);\n\n  return (\n    <motion.button\n      className={cn(\n        \"relative overflow-hidden glass-surface-primary glass-elev-2\",\n        \"glass-px-6 glass-py-3 glass-radius-md glass-text-primary font-medium\",\n        `transition-all duration-[${ANIMATION.DURATION.normal}ms] hover:glass-elev-3`,\n        className\n      )}\n      onClick={handleClick}\n      whileHover={{ scale: 1.02 }}\n      whileTap={{ scale: 0.98 }}\n      {...Object.fromEntries(\n        Object.entries(props).filter(([key]) => key !== \"onAnimationStart\")\n      )}\n    >\n      {/* Quantum superposition visualization */}\n      <AnimatePresence>\n        {!isCollapsed && superposition.length > 0 && (\n          <div className=\"glass-absolute glass-inset-0 glass-flex\">\n            {superposition.map((state, index) => (\n              <motion.div\n                key={index}\n                className=\"glass-flex-1 glass-h-full glass-opacity-30\"\n                style={{ backgroundColor: state.state.color }}\n                initial={{ opacity: 0 }}\n                animate={\n                  prefersReducedMotion\n                    ? {}\n                    : {\n                        opacity: state.probability * 0.6,\n                        scale: 1 + state.phase * 0.1,\n                      }\n                }\n                exit={{ opacity: 0 }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : { duration: ANIMATION.DURATION.fast / 1000 }\n                }\n              />\n            ))}\n          </div>\n        )}\n      </AnimatePresence>\n\n      {/* Collapsed state */}\n      <AnimatePresence>\n        {isCollapsed && currentState && (\n          <motion.div\n            className=\"glass-absolute glass-inset-0\"\n            style={{ backgroundColor: currentState.color }}\n            initial={{ scale: 0, opacity: 0 }}\n            animate={prefersReducedMotion ? {} : { scale: 1, opacity: 0.8 }}\n            exit={{ scale: 0, opacity: 0 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n          />\n        )}\n      </AnimatePresence>\n\n      {/* Button content */}\n      <div className=\"glass-relative glass-z-10\">\n        {isCollapsed ? currentState?.label : children}\n      </div>\n\n      {/* Quantum interference pattern */}\n      <div className=\"glass-absolute glass-inset-0 glass-opacity-10 glass-pointer-events-none\">\n        <QuantumInterferencePattern\n          width={100}\n          height={40}\n          speed={0.5}\n          visible={!isCollapsed}\n        />\n      </div>\n    </motion.button>\n  );\n}\n\n// Quantum interference pattern component\nexport function QuantumInterferencePattern({\n  width = 100,\n  height = 100,\n  speed = 1,\n  visible = true,\n  className,\n}: {\n  width?: number;\n  height?: number;\n  speed?: number;\n  visible?: boolean;\n  className?: string;\n}) {\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const { system } = useQuantumStates();\n  const animationRef = useRef<number>();\n\n  useEffect(() => {\n    if (!visible || !system) return;\n\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx) return;\n\n    canvas.width = width;\n    canvas.height = height;\n\n    let time = 0;\n    const animate = () => {\n      const pattern = system.generateInterferencePattern(width, height, time);\n\n      ctx.clearRect(0, 0, width, height);\n\n      for (let y = 0; y < height; y++) {\n        for (let x = 0; x < width; x++) {\n          const intensity = pattern[y][x];\n          const alpha = intensity * 0.3;\n          ctx.fillStyle = `color-mix(in srgb, var(--glass-white) ${alpha * 100}%, transparent)`;\n          ctx.fillRect(x, y, 1, 1);\n        }\n      }\n\n      time += speed * 0.01;\n      animationRef.current = requestAnimationFrame(animate);\n    };\n\n    animate();\n\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, [width, height, speed, visible, system]);\n\n  return (\n    <canvas\n      ref={canvasRef}\n      className={cn(\"w-full h-full\", className)}\n      style={{ display: visible ? \"block\" : \"none\" }}\n    />\n  );\n}\n\n// Quantum entangled components\nexport function GlassQuantumEntangledPair({\n  children,\n  stateId1,\n  stateId2,\n  possibleStates,\n  entanglementType = \"positive\",\n  entanglementStrength = 0.8,\n  className,\n}: {\n  children: [React.ReactNode, React.ReactNode];\n  stateId1: string;\n  stateId2: string;\n  possibleStates: unknown[];\n  entanglementType?: \"positive\" | \"negative\" | \"complex\";\n  entanglementStrength?: number;\n  className?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const {\n    createQuantumState,\n    createEntanglement,\n    measureState,\n    getSuperposition,\n  } = useQuantumStates();\n  const [state1Superposition, setState1Superposition] = useState<\n    QuantumSuperpositionEntry[]\n  >([]);\n  const [state2Superposition, setState2Superposition] = useState<\n    QuantumSuperpositionEntry[]\n  >([]);\n\n  // Initialize entangled states\n  useEffect(() => {\n    createQuantumState(stateId1, possibleStates);\n    createQuantumState(stateId2, possibleStates);\n    createEntanglement(\n      stateId1,\n      stateId2,\n      entanglementStrength,\n      entanglementType\n    );\n\n    // Update superpositions\n    const updateSuperpositions = () => {\n      const super1 = getSuperposition(stateId1);\n      const super2 = getSuperposition(stateId2);\n      if (super1) setState1Superposition(super1);\n      if (super2) setState2Superposition(super2);\n    };\n\n    updateSuperpositions();\n    const interval = setInterval(updateSuperpositions, ANIMATION.DURATION.fast);\n\n    return () => clearInterval(interval);\n  }, [\n    stateId1,\n    stateId2,\n    possibleStates,\n    entanglementType,\n    entanglementStrength,\n    createQuantumState,\n    createEntanglement,\n    getSuperposition,\n  ]);\n\n  return (\n    <div className={cn(\"flex glass-gap-4\", className)}>\n      const prefersReducedMotion = useReducedMotion();\n      <motion.div\n        className=\"glass-flex-1 glass-relative\"\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                opacity: 0.5 + (state1Superposition[0]?.probability || 0) * 0.5,\n                scale: 0.95 + (state1Superposition[0]?.probability || 0) * 0.1,\n              }\n        }\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : { duration: ANIMATION.DURATION.fast / 2000 }\n        }\n      >\n        {children[0]}\n      </motion.div>\n      <motion.div\n        className=\"glass-flex-1 glass-relative\"\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                opacity: 0.5 + (state2Superposition[0]?.probability || 0) * 0.5,\n                scale: 0.95 + (state2Superposition[0]?.probability || 0) * 0.1,\n              }\n        }\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : { duration: ANIMATION.DURATION.fast / 2000 }\n        }\n      >\n        {children[1]}\n      </motion.div>\n      {/* Entanglement visualization */}\n      <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n        <svg className=\"glass-w-full glass-h-full\">\n          <motion.line\n            x1=\"25%\"\n            y1=\"50%\"\n            x2=\"75%\"\n            y2=\"50%\"\n            stroke=\"hsl(var(--glass-color-primary)/0.5)\"\n            strokeWidth=\"2\"\n            strokeDasharray=\"5,5\"\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    strokeDashoffset: [0, -10],\n                    opacity: [0.3, 0.7, 0.3],\n                  }\n            }\n            transition={{\n              strokeDashoffset: { duration: 1, repeat: Infinity },\n              opacity: { duration: 2, repeat: Infinity },\n            }}\n          />\n        </svg>\n      </div>\n    </div>\n  );\n}\n\n// Quantum coherence visualizer\nexport function GlassQuantumCoherenceIndicator({\n  stateId,\n  className,\n}: {\n  stateId: string;\n  className?: string;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { getCoherence } = useQuantumStates();\n  const [coherence, setCoherence] = useState(0);\n\n  useEffect(() => {\n    const updateCoherence = () => {\n      setCoherence(getCoherence(stateId));\n    };\n\n    updateCoherence();\n    const interval = setInterval(updateCoherence, ANIMATION.DURATION.fast * 2);\n\n    return () => clearInterval(interval);\n  }, [stateId, getCoherence]);\n\n  return (\n    <div className={cn(\"flex items-center glass-gap-2\", className)}>\n      <span className=\"glass-text-xs glass-text-secondary\">Coherence:</span>\n      <div className=\"glass-w-20 glass-h-2 glass-surface-subtle glass-radius-full glass-overflow-hidden\">\n        <motion.div\n          className=\"glass-h-full glass-surface-blue glass-radius-full\"\n          animate={{ width: `${coherence * 100}%` }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: ANIMATION.DURATION.normal / 1000 }\n          }\n        />\n      </div>\n      <span className=\"glass-text-xs glass-text-secondary\">\n        {(coherence * 100).toFixed(1)}%\n      </span>\n    </div>\n  );\n}\n\n// Hook for creating quantum UI states\nexport function useQuantumState<T>(\n  stateId: string,\n  possibleStates: T[],\n  initialProbabilities?: number[]\n) {\n  const { createQuantumState, measureState, getSuperposition } =\n    useQuantumStates();\n  const [currentMeasurement, setCurrentMeasurement] = useState<T | null>(null);\n  const [superposition, setSuperposition] = useState<\n    Array<{ state: T; probability: number; phase: number }>\n  >([]);\n\n  // Initialize quantum state\n  useEffect(() => {\n    createQuantumState(stateId, possibleStates, initialProbabilities);\n  }, [stateId, createQuantumState, possibleStates, initialProbabilities]);\n\n  // Update superposition\n  useEffect(() => {\n    const updateSuperposition = () => {\n      const currentSuperposition = getSuperposition<T>(stateId);\n      if (currentSuperposition) {\n        setSuperposition(currentSuperposition);\n      }\n    };\n\n    updateSuperposition();\n    const interval = setInterval(updateSuperposition, ANIMATION.DURATION.fast);\n\n    return () => clearInterval(interval);\n  }, [stateId, getSuperposition]);\n\n  const measure = useCallback(\n    (observer: string = \"component\") => {\n      const measurement = measureState<T>(stateId, observer);\n      if (measurement) {\n        setCurrentMeasurement(measurement.measuredValue);\n        return measurement.measuredValue;\n      }\n      return null;\n    },\n    [stateId, measureState]\n  );\n\n  const collapse = useCallback((targetState: T) => {\n    // Force collapse to specific state\n    setCurrentMeasurement(targetState);\n  }, []);\n\n  return {\n    measure,\n    collapse,\n    currentMeasurement,\n    superposition,\n    isInSuperposition: !currentMeasurement,\n    dominantState:\n      superposition.length > 0\n        ? superposition.reduce((max, current) =>\n            current.probability > max.probability ? current : max\n          )\n        : null,\n  };\n}\n\n// Presets for different quantum behaviors\nexport const quantumStatePresets = {\n  binary: {\n    states: [true, false],\n    initialProbabilities: [0.5, 0.5],\n    decoherenceTime: 3000,\n  },\n  ternary: {\n    states: [\"low\", \"medium\", \"high\"],\n    initialProbabilities: [0.33, 0.34, 0.33],\n    decoherenceTime: 5000,\n  },\n  emotional: {\n    states: [\"joy\", \"calm\", \"excited\", \"focused\"],\n    initialProbabilities: [0.25, 0.25, 0.25, 0.25],\n    decoherenceTime: 4000,\n  },\n  interface: {\n    states: [\"minimal\", \"standard\", \"detailed\", \"expert\"],\n    initialProbabilities: [0.2, 0.4, 0.3, 0.1],\n    decoherenceTime: 10000,\n  },\n};\n\n// Main component wrapper for testing and simple usage\nexport function GlassQuantumStates({\n  children,\n  className,\n  ...props\n}: {\n  children?: React.ReactNode;\n  className?: string;\n} & React.HTMLAttributes<HTMLDivElement>) {\n  return (\n    <GlassQuantumStatesProvider>\n      <div className={className} {...props}>\n        {children || (\n          <GlassQuantumButton possibleStates={[]}>\n            Quantum Button\n          </GlassQuantumButton>\n        )}\n      </div>\n    </GlassQuantumStatesProvider>\n  );\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Foldable Screen Support\n * Adaptive glass layouts for foldable and dual-screen devices\n */\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface FoldableInfo {\n  isFoldable: boolean;\n  foldState: \"folded\" | \"unfolded\" | \"partial\" | \"unknown\";\n  foldAngle?: number; // 0-180 degrees\n  segments: ScreenSegment[];\n  hinge?: {\n    position: \"horizontal\" | \"vertical\";\n    offset: number; // pixels from top/left\n    width: number; // hinge width in pixels\n  };\n}\n\ninterface ScreenSegment {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n  devicePixelRatio: number;\n}\n\ninterface GlassFoldableSupportProps {\n  children: React.ReactNode;\n  className?: string;\n  adaptiveLayout?: boolean;\n  bridgeHinge?: boolean;\n  independentSegments?: boolean;\n  continuousGlass?: boolean;\n  foldAnimation?: boolean;\n  onFoldStateChange?: (state: FoldableInfo) => void;\n}\n\nconst createDefaultSegment = () => {\n  if (typeof window === \"undefined\") {\n    return {\n      left: 0,\n      top: 0,\n      width: 1024,\n      height: 768,\n      devicePixelRatio: 1,\n    };\n  }\n\n  return {\n    left: 0,\n    top: 0,\n    width: window.innerWidth,\n    height: window.innerHeight,\n    devicePixelRatio: window.devicePixelRatio || 1,\n  };\n};\n\nexport function GlassFoldableSupport({\n  children,\n  className,\n  adaptiveLayout = true,\n  bridgeHinge = true,\n  independentSegments = false,\n  continuousGlass = true,\n  foldAnimation = true,\n  onFoldStateChange,\n}: GlassFoldableSupportProps) {\n  const isBrowser = typeof window !== \"undefined\";\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [foldableInfo, setFoldableInfo] = useState<FoldableInfo>({\n    isFoldable: false,\n    foldState: \"unknown\",\n    segments: [createDefaultSegment()],\n  });\n  const [layoutMode, setLayoutMode] = useState<\"single\" | \"dual\" | \"extended\">(\n    \"single\"\n  );\n\n  // Detect foldable device capabilities\n  const detectFoldableCapabilities = useCallback(async () => {\n    if (!isBrowser) return;\n\n    // Check for Visual Viewport API and Screen Segments\n    if (\"getScreenDetails\" in window) {\n      try {\n        const screenDetails = await (window as any).getScreenDetails();\n        const segments = screenDetails.screens.map((screen: any) => ({\n          left: screen.left,\n          top: screen.top,\n          width: screen.width,\n          height: screen.height,\n          devicePixelRatio: screen.devicePixelRatio,\n        }));\n\n        const isFoldable = segments.length > 1;\n        let hinge = undefined;\n\n        if (isFoldable && segments.length === 2) {\n          // Calculate hinge position\n          const [segment1, segment2] = segments;\n\n          if (\n            segment1.top === segment2.top &&\n            segment1.height === segment2.height\n          ) {\n            // Vertical hinge (side by side)\n            hinge = {\n              position: \"vertical\" as const,\n              offset:\n                Math.max(\n                  segment1.left + segment1.width,\n                  segment2.left + segment2.width\n                ) - Math.min(segment1.left, segment2.left),\n              width: Math.abs(segment2.left - (segment1.left + segment1.width)),\n            };\n          } else if (\n            segment1.left === segment2.left &&\n            segment1.width === segment2.width\n          ) {\n            // Horizontal hinge (top and bottom)\n            hinge = {\n              position: \"horizontal\" as const,\n              offset:\n                Math.max(\n                  segment1.top + segment1.height,\n                  segment2.top + segment2.height\n                ) - Math.min(segment1.top, segment2.top),\n              width: Math.abs(segment2.top - (segment1.top + segment1.height)),\n            };\n          }\n        }\n\n        setFoldableInfo({\n          isFoldable,\n          foldState: isFoldable ? \"unfolded\" : \"unknown\",\n          segments,\n          hinge,\n        });\n\n        setLayoutMode(\n          isFoldable ? (segments.length > 2 ? \"extended\" : \"dual\") : \"single\"\n        );\n      } catch {\n        // Keep the default single-screen fallback when Screen Details is unavailable.\n      }\n    }\n\n    // Fallback: Check for CSS environment variables\n    const supportsSpanning =\n      typeof CSS !== \"undefined\" &&\n      typeof CSS.supports === \"function\" &&\n      (CSS.supports(\"(spanning: single-fold-vertical)\") ||\n        CSS.supports(\"(spanning: single-fold-horizontal)\"));\n\n    if (supportsSpanning) {\n      const spanning =\n        getComputedStyle(document.documentElement).getPropertyValue(\n          \"env(fold-left)\"\n        ) ||\n        getComputedStyle(document.documentElement).getPropertyValue(\n          \"env(fold-top)\"\n        );\n\n      if (spanning) {\n        setFoldableInfo((prev: any) => ({\n          ...prev,\n          isFoldable: true,\n          foldState: \"unfolded\",\n        }));\n        setLayoutMode(\"dual\");\n      }\n    }\n\n    // Check for dual-screen using media queries\n    const matchesMedia = (query: string) => {\n      if (!isBrowser || typeof window.matchMedia !== \"function\") {\n        return false;\n      }\n      return window.matchMedia(query).matches;\n    };\n\n    const isDualScreen =\n      matchesMedia(\"(spanning: single-fold-vertical)\") ||\n      matchesMedia(\"(spanning: single-fold-horizontal)\");\n\n    if (isDualScreen) {\n      setFoldableInfo((prev: any) => ({\n        ...prev,\n        isFoldable: true,\n        foldState: \"unfolded\",\n      }));\n      setLayoutMode(\"dual\");\n    }\n  }, []);\n\n  // Monitor fold state changes\n  const monitorFoldState = useCallback(() => {\n    if (!isBrowser) {\n      return () => undefined;\n    }\n\n    // Listen for orientation changes that might indicate folding\n    const handleOrientationChange = () => {\n      setTimeout(detectFoldableCapabilities, ANIMATION.DURATION.fast);\n    };\n\n    // Listen for resize events that might indicate folding\n    const handleResize = () => {\n      detectFoldableCapabilities();\n    };\n\n    // Listen for visibility changes (device folding might hide content)\n    const handleVisibilityChange = () => {\n      if (document.hidden) {\n        setFoldableInfo((prev: any) => ({\n          ...prev,\n          foldState: \"folded\",\n        }));\n      } else {\n        setFoldableInfo((prev: any) => ({\n          ...prev,\n          foldState: prev.isFoldable ? \"unfolded\" : \"unknown\",\n        }));\n      }\n    };\n\n    window.addEventListener(\"orientationchange\", handleOrientationChange);\n    window.addEventListener(\"resize\", handleResize);\n    document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n    return () => {\n      window.removeEventListener(\"orientationchange\", handleOrientationChange);\n      window.removeEventListener(\"resize\", handleResize);\n      document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n    };\n  }, [detectFoldableCapabilities]);\n\n  // Initialize foldable detection\n  useEffect(() => {\n    if (!isBrowser) return;\n    detectFoldableCapabilities();\n    const cleanup = monitorFoldState();\n    return cleanup;\n  }, [detectFoldableCapabilities, monitorFoldState, isBrowser]);\n\n  // Notify parent of fold state changes\n  useEffect(() => {\n    onFoldStateChange?.(foldableInfo);\n  }, [foldableInfo, onFoldStateChange]);\n\n  // Generate layout based on foldable info\n  const generateLayout = () => {\n    if (!adaptiveLayout || !foldableInfo.isFoldable) {\n      return (\n        <div className=\"glass-relative glass-w-full glass-h-full\">\n          {children}\n        </div>\n      );\n    }\n\n    const { segments, hinge } = foldableInfo;\n\n    if (independentSegments && segments.length > 1) {\n      // Render independent content for each segment\n      const totalWidth =\n        segments.reduce((acc, segment) => acc + segment.width, 0) || 1;\n      const totalHeight =\n        segments.reduce((acc, segment) => acc + segment.height, 0) || 1;\n      return (\n        <div className=\"glass-relative glass-w-full glass-h-full glass-flex\">\n          {segments.map((segment, index) => (\n            <motion.div\n              key={`segment-${index}`}\n              className=\"glass-relative\"\n              style={{\n                width: `${(segment.width / totalWidth) * 100}%`,\n                height: `${(segment.height / totalHeight) * 100}%`,\n              }}\n              initial={{ opacity: 0, scale: 0.95 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1 }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: ANIMATION.DURATION.normal / 1000 }\n              }\n            >\n              <div className=\"glass-optimized-glass intensity={0.2} glassBlur={6} glass-w-full glass-h-full\">\n                {React.Children.toArray(children)[index] || children}\n              </div>\n            </motion.div>\n          ))}\n        </div>\n      );\n    }\n\n    // Adaptive single layout with hinge awareness\n    return (\n      <div className=\"glass-relative glass-w-full glass-h-full\">\n        {bridgeHinge && hinge && (\n          <HingeBridge hinge={hinge} continuousGlass={continuousGlass} />\n        )}\n        <div\n          className={cn(\n            \"relative\",\n            hinge?.position === \"vertical\" && \"flex\",\n            hinge?.position === \"horizontal\" && \"flex flex-col\"\n          )}\n          style={{\n            gap: hinge ? `${hinge.width}px` : undefined,\n          }}\n        >\n          {children}\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={cn(\n        \"relative OptimizedGlass intensity={0.2} glassBlur={6}\",\n        \"transform-gpu will-change-transform\",\n        foldableInfo.isFoldable && \"glass-foldable-supported\",\n        className\n      )}\n      data-fold-state={foldableInfo.foldState}\n      data-layout-mode={layoutMode}\n      animate={\n        foldAnimation\n          ? {\n              scale: foldableInfo.foldState === \"folded\" ? 0.95 : 1,\n              opacity: foldableInfo.foldState === \"folded\" ? 0.8 : 1,\n            }\n          : undefined\n      }\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : {\n              duration: ANIMATION.DURATION.normal / 1000,\n              ease: ANIMATION.EASING.easeInOut,\n            }\n      }\n    >\n      <AnimatePresence mode=\"wait\">\n        <motion.div\n          key={`${layoutMode}-${foldableInfo.foldState}`}\n          initial={{ opacity: 0 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1 }}\n          exit={{ opacity: 0 }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: ANIMATION.DURATION.fast / 1000 }\n          }\n        >\n          {generateLayout()}\n        </motion.div>\n      </AnimatePresence>\n\n      {/* Fold state indicator */}\n      {foldableInfo.isFoldable && (\n        <div\n          className=\"glass-absolute glass-top-2 glass-right-2 glass-surface-primary glass-p-1 glass-radius-sm glass-text-xs glass-opacity-50\"\n          role=\"status\"\n          aria-label={`Fold state: ${foldableInfo.foldState}, Layout mode: ${layoutMode}`}\n        >\n          <ContrastGuard>\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              <div\n                className={cn(\n                  \"w-2 h-2 glass-radius-full\",\n                  foldableInfo.foldState === \"folded\" && \"bg-red-400\",\n                  foldableInfo.foldState === \"unfolded\" && \"bg-green-400\",\n                  foldableInfo.foldState === \"partial\" && \"bg-yellow-400\",\n                  foldableInfo.foldState === \"unknown\" && \"bg-gray-400\"\n                )}\n                aria-hidden=\"true\"\n              />\n              <span>{layoutMode}</span>\n            </div>\n          </ContrastGuard>\n        </div>\n      )}\n    </motion.div>\n  );\n}\n\n// Hinge bridge component for seamless glass across fold\nfunction HingeBridge({\n  hinge,\n  continuousGlass,\n}: {\n  hinge: NonNullable<FoldableInfo[\"hinge\"]>;\n  continuousGlass: boolean;\n}) {\n  if (!continuousGlass) return null;\n\n  return (\n    <div\n      className={cn(\n        \"absolute OptimizedGlass intensity={0.2} glassBlur={6} opacity-50\",\n        \"pointer-events-none\",\n        hinge.position === \"vertical\" && \"top-0 bottom-0\",\n        hinge.position === \"horizontal\" && \"left-0 right-0\"\n      )}\n      style={{\n        ...(hinge.position === \"vertical\"\n          ? {\n              left: `${hinge.offset}px`,\n              width: `${hinge.width}px`,\n            }\n          : {\n              top: `${hinge.offset}px`,\n              height: `${hinge.width}px`,\n            }),\n        background:\n          \"linear-gradient(90deg, transparent, hsl(var(--glass-color-primary) / var(--glass-opacity-10)), transparent)\",\n      }}\n    />\n  );\n}\n\n// Hook for accessing foldable state\nexport function useFoldableDevice() {\n  const isBrowser = typeof window !== \"undefined\";\n  const [foldableInfo, setFoldableInfo] = useState<FoldableInfo>({\n    isFoldable: false,\n    foldState: \"unknown\",\n    segments: [createDefaultSegment()],\n  });\n\n  useEffect(() => {\n    if (!isBrowser) return;\n    setFoldableInfo((prev) => ({\n      ...prev,\n      segments: [\n        {\n          left: 0,\n          top: 0,\n          width: window.innerWidth,\n          height: window.innerHeight,\n          devicePixelRatio: window.devicePixelRatio || 1,\n        },\n      ],\n    }));\n  }, [isBrowser]);\n\n  return {\n    ...foldableInfo,\n    setFoldableInfo,\n    isUnfolded: foldableInfo.foldState === \"unfolded\",\n    isFolded: foldableInfo.foldState === \"folded\",\n    isDualScreen: foldableInfo.segments.length > 1,\n  };\n}\n\n// Responsive hook for foldable layouts\nexport function useFoldableLayout() {\n  const { isFoldable, foldState, segments, hinge } = useFoldableDevice();\n\n  const getOptimalLayout = useCallback(\n    (content: React.ReactNode[]) => {\n      if (!isFoldable || foldState === \"folded\") {\n        return { layout: \"single\", items: [content] };\n      }\n\n      if (segments.length === 2) {\n        // Dual screen - split content\n        const midpoint = Math.ceil(content.length / 2);\n        return {\n          layout: \"dual\",\n          items: [content.slice(0, midpoint), content.slice(midpoint)],\n        };\n      }\n\n      if (segments.length > 2) {\n        // Multi-screen - distribute content\n        const itemsPerScreen = Math.ceil(content.length / segments.length);\n        const items = segments.map((_, index) =>\n          content.slice(index * itemsPerScreen, (index + 1) * itemsPerScreen)\n        );\n        return { layout: \"extended\", items };\n      }\n\n      return { layout: \"single\", items: [content] };\n    },\n    [isFoldable, foldState, segments]\n  );\n\n  return {\n    isFoldable,\n    foldState,\n    segments,\n    hinge,\n    getOptimalLayout,\n  };\n}\n\n// Preset configurations\nexport const foldablePresets = {\n  seamless: {\n    adaptiveLayout: true,\n    bridgeHinge: true,\n    independentSegments: false,\n    continuousGlass: true,\n    foldAnimation: true,\n  },\n  independent: {\n    adaptiveLayout: true,\n    bridgeHinge: false,\n    independentSegments: true,\n    continuousGlass: false,\n    foldAnimation: false,\n  },\n  minimal: {\n    adaptiveLayout: false,\n    bridgeHinge: false,\n    independentSegments: false,\n    continuousGlass: false,\n    foldAnimation: false,\n  },\n  gaming: {\n    adaptiveLayout: true,\n    bridgeHinge: false,\n    independentSegments: true,\n    continuousGlass: false,\n    foldAnimation: true,\n  },\n  productivity: {\n    adaptiveLayout: true,\n    bridgeHinge: true,\n    independentSegments: true,\n    continuousGlass: true,\n    foldAnimation: false,\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Device Orientation Effects\n * Glass effects that respond to device orientation and motion\n */\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface OrientationData {\n  alpha: number; // Z-axis rotation (0-360)\n  beta: number; // X-axis rotation (-180 to 180)\n  gamma: number; // Y-axis rotation (-90 to 90)\n  absolute: boolean;\n}\n\ninterface MotionData {\n  acceleration: {\n    x: number;\n    y: number;\n    z: number;\n  } | null;\n  accelerationIncludingGravity: {\n    x: number;\n    y: number;\n    z: number;\n  } | null;\n  rotationRate: {\n    alpha: number;\n    beta: number;\n    gamma: number;\n  } | null;\n  interval: number;\n}\n\ninterface GlassOrientationEffectsProps {\n  children: React.ReactNode;\n  className?: string;\n  sensitivity?: number; // 0-1\n  smoothing?: number; // 0-1\n  showDebugHud?: boolean;\n  effectTypes?: Array<\n    \"tilt\" | \"parallax\" | \"refraction\" | \"liquid\" | \"shimmer\"\n  >;\n  gyroscopeEnabled?: boolean;\n  accelerometerEnabled?: boolean;\n  compassEnabled?: boolean;\n  onOrientationChange?: (orientation: OrientationData) => void;\n  onMotionChange?: (motion: MotionData) => void;\n}\n\nexport function GlassOrientationEffects({\n  children,\n  className,\n  sensitivity = 0.7,\n  smoothing = 0.8,\n  effectTypes = [\"tilt\", \"parallax\", \"refraction\"],\n  gyroscopeEnabled = true,\n  accelerometerEnabled = true,\n  compassEnabled = true,\n  showDebugHud = false,\n  onOrientationChange,\n  onMotionChange,\n}: GlassOrientationEffectsProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [isSupported, setIsSupported] = useState(false);\n  const [permissionGranted, setPermissionGranted] = useState(false);\n  const [orientation, setOrientation] = useState<OrientationData>({\n    alpha: 0,\n    beta: 0,\n    gamma: 0,\n    absolute: false,\n  });\n  const [motionData, setMotionData] = useState<MotionData>({\n    acceleration: null,\n    accelerationIncludingGravity: null,\n    rotationRate: null,\n    interval: 0,\n  });\n\n  // Motion values\n  const tiltX = useMotionValue(0);\n  const tiltY = useMotionValue(0);\n  const tiltZ = useMotionValue(0);\n  const parallaxX = useMotionValue(0);\n  const parallaxY = useMotionValue(0);\n  const refractionX = useMotionValue(0);\n  const refractionY = useMotionValue(0);\n  const shimmerAngle = useMotionValue(0);\n\n  // Smooth springs\n  const springConfig = {\n    stiffness: 100 * (1 - smoothing),\n    damping: 20 * smoothing,\n  };\n  const smoothTiltX = useSpring(tiltX, springConfig);\n  const smoothTiltY = useSpring(tiltY, springConfig);\n  const smoothTiltZ = useSpring(tiltZ, springConfig);\n  const smoothParallaxX = useSpring(parallaxX, springConfig);\n  const smoothParallaxY = useSpring(parallaxY, springConfig);\n  const smoothRefractionX = useSpring(refractionX, springConfig);\n  const smoothRefractionY = useSpring(refractionY, springConfig);\n  const smoothShimmerAngle = useSpring(shimmerAngle, springConfig);\n\n  // Transform ranges\n  const perspectiveX = useTransform(smoothTiltY, [-90, 90], [-30, 30]);\n  const perspectiveY = useTransform(smoothTiltX, [-180, 180], [-20, 20]);\n  const backgroundX = useTransform(smoothParallaxX, [-1, 1], [-50, 50]);\n  const backgroundY = useTransform(smoothParallaxY, [-1, 1], [-50, 50]);\n\n  // Check for device orientation support\n  useEffect(() => {\n    const checkSupport = () => {\n      const hasOrientation = \"DeviceOrientationEvent\" in window;\n      const hasMotion = \"DeviceMotionEvent\" in window;\n      setIsSupported(hasOrientation || hasMotion);\n    };\n\n    checkSupport();\n  }, []);\n\n  // Request permissions for iOS 13+\n  const requestPermissions = useCallback(async () => {\n    if (\n      typeof (DeviceOrientationEvent as any).requestPermission === \"function\"\n    ) {\n      try {\n        const orientationPermission = await (\n          DeviceOrientationEvent as any\n        ).requestPermission();\n        const motionPermission = await (\n          DeviceMotionEvent as any\n        ).requestPermission();\n\n        setPermissionGranted(\n          orientationPermission === \"granted\" || motionPermission === \"granted\"\n        );\n      } catch {\n        setPermissionGranted(false);\n      }\n    } else {\n      // Assume permission granted on non-iOS devices\n      setPermissionGranted(true);\n    }\n  }, []);\n\n  // Handle device orientation changes\n  const handleOrientationChange = useCallback(\n    (event: DeviceOrientationEvent) => {\n      if (!gyroscopeEnabled && !compassEnabled) return;\n\n      const orientationData: OrientationData = {\n        alpha: event.alpha || 0,\n        beta: event.beta || 0,\n        gamma: event.gamma || 0,\n        absolute: event.absolute || false,\n      };\n\n      setOrientation(orientationData);\n      onOrientationChange?.(orientationData);\n\n      // Apply effects based on orientation\n      if (effectTypes.includes(\"tilt\")) {\n        tiltX.set(orientationData.beta * sensitivity);\n        tiltY.set(orientationData.gamma * sensitivity);\n        tiltZ.set(orientationData.alpha * sensitivity * 0.1);\n      }\n\n      if (effectTypes.includes(\"parallax\")) {\n        parallaxX.set((orientationData.gamma / 90) * sensitivity);\n        parallaxY.set((orientationData.beta / 180) * sensitivity);\n      }\n\n      if (effectTypes.includes(\"refraction\")) {\n        refractionX.set((orientationData.gamma / 90) * sensitivity * 0.5);\n        refractionY.set((orientationData.beta / 180) * sensitivity * 0.5);\n      }\n\n      if (effectTypes.includes(\"shimmer\")) {\n        shimmerAngle.set(orientationData.alpha);\n      }\n    },\n    [\n      gyroscopeEnabled,\n      compassEnabled,\n      sensitivity,\n      effectTypes,\n      onOrientationChange,\n    ]\n  );\n\n  // Handle device motion changes\n  const handleMotionChange = useCallback(\n    (event: DeviceMotionEvent) => {\n      if (!accelerometerEnabled) return;\n\n      const motionData: MotionData = {\n        acceleration:\n          event.acceleration &&\n          event.acceleration.x !== null &&\n          event.acceleration.y !== null &&\n          event.acceleration.z !== null\n            ? {\n                x: event.acceleration.x,\n                y: event.acceleration.y,\n                z: event.acceleration.z,\n              }\n            : null,\n        accelerationIncludingGravity:\n          event.accelerationIncludingGravity &&\n          event.accelerationIncludingGravity.x !== null &&\n          event.accelerationIncludingGravity.y !== null &&\n          event.accelerationIncludingGravity.z !== null\n            ? {\n                x: event.accelerationIncludingGravity.x,\n                y: event.accelerationIncludingGravity.y,\n                z: event.accelerationIncludingGravity.z,\n              }\n            : null,\n        rotationRate:\n          event.rotationRate &&\n          event.rotationRate.alpha !== null &&\n          event.rotationRate.beta !== null &&\n          event.rotationRate.gamma !== null\n            ? {\n                alpha: event.rotationRate.alpha,\n                beta: event.rotationRate.beta,\n                gamma: event.rotationRate.gamma,\n              }\n            : null,\n        interval: event.interval,\n      };\n\n      setMotionData(motionData);\n      onMotionChange?.(motionData);\n\n      // Apply liquid effect based on acceleration\n      if (effectTypes.includes(\"liquid\") && motionData.acceleration) {\n        const { x, y, z } = motionData.acceleration;\n        const intensity = Math.sqrt(x * x + y * y + z * z) / 10; // Normalize\n\n        tiltX.set(tiltX.get() + y * intensity * sensitivity);\n        tiltY.set(tiltY.get() + x * intensity * sensitivity);\n      }\n    },\n    [accelerometerEnabled, sensitivity, effectTypes, onMotionChange]\n  );\n\n  // Setup event listeners\n  useEffect(() => {\n    if (!isSupported || !permissionGranted) return;\n\n    if (gyroscopeEnabled || compassEnabled) {\n      window.addEventListener(\"deviceorientation\", handleOrientationChange);\n    }\n\n    if (accelerometerEnabled) {\n      window.addEventListener(\"devicemotion\", handleMotionChange);\n    }\n\n    return () => {\n      window.removeEventListener(\"deviceorientation\", handleOrientationChange);\n      window.removeEventListener(\"devicemotion\", handleMotionChange);\n    };\n  }, [\n    isSupported,\n    permissionGranted,\n    gyroscopeEnabled,\n    compassEnabled,\n    accelerometerEnabled,\n    handleOrientationChange,\n    handleMotionChange,\n  ]);\n\n  // Handle orientation change (screen rotation)\n  useEffect(() => {\n    const handleScreenOrientationChange = () => {\n      // Reset motion values on orientation change\n      tiltX.set(0);\n      tiltY.set(0);\n      tiltZ.set(0);\n      parallaxX.set(0);\n      parallaxY.set(0);\n    };\n\n    window.addEventListener(\"orientationchange\", handleScreenOrientationChange);\n    window.addEventListener(\"resize\", handleScreenOrientationChange);\n\n    return () => {\n      window.removeEventListener(\n        \"orientationchange\",\n        handleScreenOrientationChange\n      );\n      window.removeEventListener(\"resize\", handleScreenOrientationChange);\n    };\n  }, []);\n\n  // Permission request component\n  if (isSupported && !permissionGranted) {\n    return (\n      <div\n        className={cn(\n          \"relative OptimizedGlass intensity={0.2} glassBlur={6} glass-p-6\",\n          className\n        )}\n      >\n        <div\n          className=\"glass-text-center\"\n          role=\"region\"\n          aria-label=\"Orientation permission request\"\n        >\n          <ContrastGuard>\n            <h3 className=\"glass-text-lg glass-font-semibold glass-mb-2\">\n              Enable Device Orientation\n            </h3>\n            <p className=\"glass-text-secondary glass-mb-4\">\n              Allow orientation access for interactive glass effects\n            </p>\n          </ContrastGuard>\n          <button\n            onClick={requestPermissions}\n            className=\"glass-button glass-button-primary glass-focus glass-touch-target\"\n            aria-label=\"Enable orientation effects\"\n          >\n            <ContrastGuard>Enable Orientation Effects</ContrastGuard>\n          </button>\n        </div>\n      </div>\n    );\n  }\n\n  if (!isSupported) {\n    return (\n      <div\n        className={cn(\"relative\", className)}\n        role=\"region\"\n        aria-label=\"Orientation effects container\"\n      >\n        <ContrastGuard>{children}</ContrastGuard>\n      </div>\n    );\n  }\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={cn(\n        \"relative OptimizedGlass intensity={0.2} glassBlur={6} overflow-hidden\",\n        \"transform-gpu will-change-transform\",\n        className\n      )}\n      role=\"region\"\n      aria-label=\"Device orientation effects\"\n      style={{\n        ...{\n          transformStyle: \"preserve-3d\",\n          perspective: \"1000px\",\n        },\n      }}\n    >\n      {/* Tilt effect layer */}\n      {effectTypes.includes(\"tilt\") && (\n        <motion.div\n          className=\"glass-absolute glass-inset-0\"\n          style={{\n            rotateX: perspectiveX,\n            rotateY: perspectiveY,\n            rotateZ: smoothTiltZ,\n          }}\n        >\n          {/* Background parallax layer */}\n          {effectTypes.includes(\"parallax\") && (\n            <motion.div\n              className=\"glass-absolute glass-inset-0 glass-optimized-glass intensity={0.2} glassBlur={6} glass-opacity-30\"\n              style={{\n                x: backgroundX,\n                y: backgroundY,\n                scale: 1.1,\n              }}\n            />\n          )}\n\n          {/* Refraction overlay */}\n          {effectTypes.includes(\"refraction\") && (\n            <motion.div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-surface-primary/10\" />\n          )}\n\n          {/* Shimmer effect */}\n          {effectTypes.includes(\"shimmer\") && (\n            <motion.div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-20 glass-surface-primary/10\" />\n          )}\n\n          {/* Content */}\n          <div className=\"glass-relative glass-z-10\">\n            <ContrastGuard>{children}</ContrastGuard>\n          </div>\n        </motion.div>\n      )}\n\n      {/* Fallback for non-tilt effects */}\n      {!effectTypes.includes(\"tilt\") && (\n        <div className=\"glass-relative\">\n          {effectTypes.includes(\"parallax\") && (\n            <motion.div\n              className=\"glass-absolute glass-inset-0 glass-opacity-30\"\n              style={{ x: backgroundX, y: backgroundY, scale: 1.1 }}\n            />\n          )}\n\n          {effectTypes.includes(\"refraction\") && (\n            <motion.div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-surface-primary/10\" />\n          )}\n\n          {effectTypes.includes(\"shimmer\") && (\n            <motion.div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-20 glass-surface-primary/10\" />\n          )}\n\n          <div className=\"glass-relative glass-z-10\">\n            <ContrastGuard>{children}</ContrastGuard>\n          </div>\n        </div>\n      )}\n\n      {/* Debug info */}\n      {showDebugHud && (\n        <div\n          className=\"glass-absolute glass-bottom-2 glass-left-2 glass-text-xs glass-surface-primary glass-p-2 glass-radius-sm glass-opacity-50\"\n          role=\"status\"\n          aria-label=\"Orientation debug information\"\n        >\n          <ContrastGuard>\n            <div>\u03B1: {orientation.alpha.toFixed(1)}\u00B0</div>\n            <div>\u03B2: {orientation.beta.toFixed(1)}\u00B0</div>\n            <div>\u03B3: {orientation.gamma.toFixed(1)}\u00B0</div>\n          </ContrastGuard>\n        </div>\n      )}\n    </motion.div>\n  );\n}\n\n// Hook for accessing orientation data\nexport function useDeviceOrientation() {\n  const [orientation, setOrientation] = useState<OrientationData>({\n    alpha: 0,\n    beta: 0,\n    gamma: 0,\n    absolute: false,\n  });\n  const [motionData, setMotionData] = useState<MotionData>({\n    acceleration: null,\n    accelerationIncludingGravity: null,\n    rotationRate: null,\n    interval: 0,\n  });\n  const [isSupported, setIsSupported] = useState(false);\n\n  useEffect(() => {\n    setIsSupported(\n      \"DeviceOrientationEvent\" in window || \"DeviceMotionEvent\" in window\n    );\n  }, []);\n\n  return {\n    orientation,\n    motion: motionData,\n    isSupported,\n    setOrientation,\n    setMotion: setMotionData,\n  };\n}\n\n// Preset configurations\nexport const orientationPresets = {\n  subtle: {\n    sensitivity: 0.3,\n    smoothing: 0.9,\n    effectTypes: [\"tilt\", \"parallax\"] as const,\n  },\n  immersive: {\n    sensitivity: 1,\n    smoothing: 0.5,\n    effectTypes: [\"tilt\", \"parallax\", \"refraction\", \"shimmer\"] as const,\n  },\n  gaming: {\n    sensitivity: 0.8,\n    smoothing: 0.3,\n    effectTypes: [\"tilt\", \"parallax\", \"liquid\"] as const,\n  },\n  reading: {\n    sensitivity: 0.2,\n    smoothing: 0.95,\n    effectTypes: [\"shimmer\"] as const,\n  },\n  presentation: {\n    sensitivity: 0.1,\n    smoothing: 0.98,\n    effectTypes: [\"tilt\"] as const,\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Context-Aware Glass Intensity\n * Dynamic glass effects based on environment and usage patterns\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n  useMemo,\n} from \"react\";\nimport { motion, useMotionValue, useSpring } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface EnvironmentContext {\n  lightLevel: number; // 0-1 (dark to bright)\n  colorTemperature: number; // Kelvin\n  ambientNoise: number; // 0-1\n  batteryLevel: number; // 0-1\n  networkSpeed: number; // Mbps\n  cpuUsage: number; // 0-1\n  memoryUsage: number; // 0-1\n  time: {\n    hour: number;\n    isWorkingHours: boolean;\n    timeZone: string;\n  };\n  location: {\n    type: \"indoor\" | \"outdoor\" | \"unknown\";\n    weather?: string;\n  };\n  device: {\n    type: \"mobile\" | \"tablet\" | \"desktop\" | \"tv\";\n    orientation: \"portrait\" | \"landscape\";\n    pixelRatio: number;\n    refreshRate: number;\n  };\n}\n\ninterface UsageContext {\n  focusMode: boolean;\n  taskType: \"reading\" | \"writing\" | \"media\" | \"gaming\" | \"work\" | \"casual\";\n  sessionDuration: number; // minutes\n  interactionIntensity: number; // 0-1\n  stressLevel: number; // 0-1 (derived from usage patterns)\n  productivity: number; // 0-1\n}\n\ninterface GlassContextAwareProps {\n  children: React.ReactNode;\n  className?: string;\n  adaptationSpeed?: number; // 0-1, how quickly to adapt\n  sensitivity?: number; // 0-1, sensitivity to context changes\n  showDebugHud?: boolean;\n  override?: Partial<{\n    intensity: number;\n    blur: number;\n    opacity: number;\n    contrast: number;\n    saturation: number;\n  }>;\n  onContextChange?: (context: EnvironmentContext & UsageContext) => void;\n}\n\nconst getDeviceType = (): EnvironmentContext[\"device\"][\"type\"] => {\n  if (typeof navigator === \"undefined\") return \"desktop\";\n  const ua = navigator.userAgent;\n  if (/mobile|android|iphone/i.test(ua)) return \"mobile\";\n  if (/tablet|ipad/i.test(ua)) return \"tablet\";\n  if (/tv|television/i.test(ua)) return \"tv\";\n  return \"desktop\";\n};\n\nconst getDeviceContext = (): EnvironmentContext[\"device\"] => {\n  if (typeof window === \"undefined\") {\n    return {\n      type: \"desktop\",\n      orientation: \"landscape\",\n      pixelRatio: 1,\n      refreshRate: 60,\n    };\n  }\n\n  return {\n    type: getDeviceType(),\n    orientation:\n      window.innerHeight > window.innerWidth ? \"portrait\" : \"landscape\",\n    pixelRatio: window.devicePixelRatio || 1,\n    refreshRate: 60,\n  };\n};\n\nconst createDefaultEnvironmentContext = (): EnvironmentContext => {\n  const hour = new Date().getHours();\n\n  return {\n    lightLevel: 0.5,\n    colorTemperature: 6500,\n    ambientNoise: 0.3,\n    batteryLevel: 1,\n    networkSpeed: 10,\n    cpuUsage: 0.3,\n    memoryUsage: 0.4,\n    time: {\n      hour,\n      isWorkingHours: hour >= 9 && hour <= 17,\n      timeZone:\n        typeof Intl !== \"undefined\"\n          ? Intl.DateTimeFormat().resolvedOptions().timeZone\n          : \"UTC\",\n    },\n    location: { type: \"unknown\" },\n    device: getDeviceContext(),\n  };\n};\n\nexport function GlassContextAware({\n  children,\n  className,\n  adaptationSpeed = 0.5,\n  sensitivity = 0.7,\n  override,\n  onContextChange,\n  showDebugHud = false,\n}: GlassContextAwareProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [environmentContext, setEnvironmentContext] =\n    useState<EnvironmentContext>(() => createDefaultEnvironmentContext());\n\n  const [usageContext, setUsageContext] = useState<UsageContext>({\n    focusMode: false,\n    taskType: \"casual\",\n    sessionDuration: 0,\n    interactionIntensity: 0.5,\n    stressLevel: 0.3,\n    productivity: 0.7,\n  });\n\n  // Motion values for smooth transitions\n  const glassIntensity = useMotionValue(0.7);\n  const glassBlur = useMotionValue(16);\n  const glassOpacity = useMotionValue(0.1);\n  const glassContrast = useMotionValue(1);\n  const glassSaturation = useMotionValue(1);\n\n  // Smooth springs\n  const smoothIntensity = useSpring(glassIntensity, {\n    stiffness: 100 * adaptationSpeed,\n    damping: 20,\n  });\n  const smoothBlur = useSpring(glassBlur, {\n    stiffness: 100 * adaptationSpeed,\n    damping: 20,\n  });\n  const smoothOpacity = useSpring(glassOpacity, {\n    stiffness: 100 * adaptationSpeed,\n    damping: 20,\n  });\n  const smoothContrast = useSpring(glassContrast, {\n    stiffness: 100 * adaptationSpeed,\n    damping: 20,\n  });\n  const smoothSaturation = useSpring(glassSaturation, {\n    stiffness: 100 * adaptationSpeed,\n    damping: 20,\n  });\n\n  // Check if current time is working hours\n  function isWorkingTime(): boolean {\n    const hour = new Date().getHours();\n    return hour >= 9 && hour <= 17;\n  }\n\n  // Monitor environment context\n  useEffect(() => {\n    let active = true;\n\n    const updateEnvironmentContext = () => {\n      if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\n        return;\n      }\n\n      const now = new Date();\n\n      // Update time context\n      const timeContext = {\n        hour: now.getHours(),\n        isWorkingHours: isWorkingTime(),\n        timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n      };\n\n      // Update device context\n      const deviceContext = getDeviceContext();\n\n      // Estimate light level based on time of day\n      const lightLevel = calculateLightLevel(timeContext.hour);\n\n      // Get network info if available\n      const getNetworkSpeed = () => {\n        if (\"connection\" in navigator) {\n          const connection = (navigator as any).connection;\n          return connection.downlink || 10;\n        }\n        return 10;\n      };\n\n      const applyEnvironmentContext = (batteryLevel: number) => {\n        if (!active) return;\n\n        setEnvironmentContext((prev: any) => ({\n          ...prev,\n          lightLevel,\n          batteryLevel,\n          networkSpeed: getNetworkSpeed(),\n          time: timeContext,\n          device: deviceContext,\n          colorTemperature: calculateColorTemperature(timeContext.hour),\n        }));\n      };\n\n      if (\"getBattery\" in navigator) {\n        (navigator as any)\n          .getBattery()\n          .then((battery: { level?: number }) => {\n            applyEnvironmentContext(battery.level ?? 1);\n          })\n          .catch(() => {\n            applyEnvironmentContext(1);\n          });\n        return;\n      }\n\n      applyEnvironmentContext(1);\n    };\n\n    updateEnvironmentContext();\n    const interval = setInterval(\n      updateEnvironmentContext,\n      ANIMATION.DURATION.slower * 10\n    ); // Update every minute\n\n    return () => {\n      active = false;\n      clearInterval(interval);\n    };\n  }, []);\n\n  // Calculate light level based on time\n  function calculateLightLevel(hour: number): number {\n    // Simulate natural light cycle\n    if (hour >= 6 && hour <= 18) {\n      // Daytime: peak brightness at noon\n      const dayProgress = (hour - 6) / 12;\n      return 0.3 + 0.7 * Math.sin(dayProgress * Math.PI);\n    } else {\n      // Nighttime: minimal light\n      return 0.1;\n    }\n  }\n\n  // Calculate color temperature based on time\n  function calculateColorTemperature(hour: number): number {\n    // Warmer at night, cooler during day\n    if (hour >= 6 && hour <= 18) {\n      return 5500 + 1000 * Math.sin(((hour - 6) / 12) * Math.PI);\n    } else {\n      return 3000; // Warm light at night\n    }\n  }\n\n  // Monitor usage patterns\n  useEffect(() => {\n    if (typeof document === \"undefined\") return;\n\n    let interactionCount = 0;\n    let lastInteraction = Date.now();\n    const sessionStart = Date.now();\n\n    const trackInteraction = () => {\n      interactionCount++;\n      lastInteraction = Date.now();\n\n      // Calculate interaction intensity\n      const intensity = Math.min(interactionCount / 100, 1);\n\n      // Calculate session duration\n      const sessionDuration = (Date.now() - sessionStart) / (1000 * 60);\n\n      // Estimate stress level based on interaction frequency\n      const timeSinceLastInteraction = Date.now() - lastInteraction;\n      const stressLevel = Math.max(0, 1 - timeSinceLastInteraction / 30000); // High stress if rapid interactions\n\n      // Detect task type based on interaction patterns\n      const taskType = detectTaskType(interactionCount, sessionDuration);\n\n      setUsageContext((prev: any) => ({\n        ...prev,\n        interactionIntensity: intensity,\n        sessionDuration,\n        stressLevel,\n        taskType,\n      }));\n    };\n\n    // Track various interaction events\n    const events = [\"click\", \"keydown\", \"scroll\", \"mousemove\", \"touchstart\"];\n    events.forEach((event) => {\n      const options =\n        event === \"keydown\" ? undefined : ({ passive: true } as const);\n      document.addEventListener(event, trackInteraction, options);\n    });\n\n    return () => {\n      events.forEach((event) => {\n        document.removeEventListener(event, trackInteraction);\n      });\n    };\n  }, []);\n\n  // Detect task type based on patterns\n  function detectTaskType(\n    interactions: number,\n    duration: number\n  ): UsageContext[\"taskType\"] {\n    const interactionsPerMinute = interactions / Math.max(duration, 1);\n\n    if (interactionsPerMinute > 50) return \"gaming\";\n    if (interactionsPerMinute > 30) return \"work\";\n    if (interactionsPerMinute > 15) return \"writing\";\n    if (interactionsPerMinute > 5) return \"reading\";\n    if (duration > 30) return \"media\";\n    return \"casual\";\n  }\n\n  // Adaptive glass calculations\n  const calculateGlassProperties = useCallback(() => {\n    const context = { ...environmentContext, ...usageContext };\n\n    // Base calculations\n    let intensity = 0.7;\n    let blur = 16;\n    let opacity = 0.1;\n    let contrast = 1;\n    let saturation = 1;\n\n    // Adapt to light level\n    intensity *= 0.5 + 0.5 * (1 - context.lightLevel); // More intense in darker environments\n    opacity += 0.1 * (1 - context.lightLevel);\n\n    // Adapt to time of day\n    if (context.time.hour < 6 || context.time.hour > 20) {\n      // Night mode: warmer, less intense\n      intensity *= 0.7;\n      saturation *= 0.8;\n      contrast *= 0.9;\n    }\n\n    // Adapt to battery level\n    if (context.batteryLevel < 0.2) {\n      // Low battery: reduce effects\n      intensity *= 0.5;\n      blur *= 0.7;\n    }\n\n    // Adapt to device performance\n    const performanceScore =\n      1 - (context.cpuUsage * 0.5 + context.memoryUsage * 0.5);\n    intensity *= performanceScore;\n    blur *= performanceScore;\n\n    // Adapt to task type\n    switch (context.taskType) {\n      case \"reading\":\n        intensity *= 0.6; // Less distraction\n        opacity *= 0.8;\n        break;\n      case \"writing\":\n        intensity *= 0.7;\n        contrast *= 1.1; // Better text contrast\n        break;\n      case \"work\":\n        if (context.focusMode) {\n          intensity *= 0.5; // Minimal distraction\n          opacity *= 0.7;\n        }\n        break;\n      case \"gaming\":\n        intensity *= 1.2; // More immersive\n        saturation *= 1.1;\n        break;\n      case \"media\":\n        intensity *= 1.1;\n        saturation *= 1.05;\n        break;\n    }\n\n    // Adapt to stress level\n    intensity *= 1 - context.stressLevel * 0.3; // Reduce intensity when stressed\n\n    // Apply sensitivity multiplier\n    const baseDiff = {\n      intensity: intensity - 0.7,\n      blur: blur - 16,\n      opacity: opacity - 0.1,\n      contrast: contrast - 1,\n      saturation: saturation - 1,\n    };\n\n    intensity = 0.7 + baseDiff.intensity * sensitivity;\n    blur = 16 + baseDiff.blur * sensitivity;\n    opacity = 0.1 + baseDiff.opacity * sensitivity;\n    contrast = 1 + baseDiff.contrast * sensitivity;\n    saturation = 1 + baseDiff.saturation * sensitivity;\n\n    // Apply overrides\n    if (override) {\n      intensity = override.intensity ?? intensity;\n      blur = override.blur ?? blur;\n      opacity = override.opacity ?? opacity;\n      contrast = override.contrast ?? contrast;\n      saturation = override.saturation ?? saturation;\n    }\n\n    // Update motion values\n    glassIntensity.set(Math.max(0, Math.min(1, intensity)));\n    glassBlur.set(Math.max(0, Math.min(50, blur)));\n    glassOpacity.set(Math.max(0, Math.min(1, opacity)));\n    glassContrast.set(Math.max(0.5, Math.min(2, contrast)));\n    glassSaturation.set(Math.max(0, Math.min(2, saturation)));\n\n    // Notify listeners\n    onContextChange?.(context);\n  }, [\n    environmentContext,\n    usageContext,\n    sensitivity,\n    override,\n    onContextChange,\n  ]);\n\n  // Update glass properties when context changes\n  useEffect(() => {\n    calculateGlassProperties();\n  }, [calculateGlassProperties]);\n\n  const adaptiveStyle = useMemo(\n    () =>\n      ({\n        \"--glass-adaptive-intensity\": smoothIntensity,\n        \"--glass-adaptive-blur\": smoothBlur,\n        \"--glass-adaptive-opacity\": smoothOpacity,\n        \"--glass-adaptive-contrast\": smoothContrast,\n        \"--glass-adaptive-saturation\": smoothSaturation,\n        backgroundColor: `color-mix(in srgb, var(--glass-white) ${smoothOpacity.get() * 100}%, transparent)`,\n      }) as React.CSSProperties,\n    [\n      smoothIntensity,\n      smoothBlur,\n      smoothOpacity,\n      smoothContrast,\n      smoothSaturation,\n    ]\n  );\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={cn(\n        \"glass-relative glass-foundation-complete\",\n        !prefersReducedMotion && \"glass-transform-gpu\",\n        className\n      )}\n      style={{ ...adaptiveStyle }}\n    >\n      {children}\n\n      {/* Context debug overlay */}\n      {showDebugHud && (\n        <ContrastGuard>\n          <div\n            className=\"glass-absolute glass-top-2 glass-right-2 glass-text-xs glass-surface-primary glass-p-2 glass-radius-sm glass-opacity-50\"\n            role=\"status\"\n            aria-label=\"Context debug information\"\n          >\n            <div>\n              Light: {(environmentContext.lightLevel * 100).toFixed(0)}%\n            </div>\n            <div>\n              Battery: {(environmentContext.batteryLevel * 100).toFixed(0)}%\n            </div>\n            <div>Task: {usageContext.taskType}</div>\n            <div>Intensity: {smoothIntensity.get().toFixed(2)}</div>\n          </div>\n        </ContrastGuard>\n      )}\n    </motion.div>\n  );\n}\n\n// Hook for accessing context-aware glass state\nexport function useGlassContextAware() {\n  const [context, setContext] = useState<\n    (EnvironmentContext & UsageContext) | null\n  >(null);\n\n  return {\n    context,\n    setContext,\n    isAdaptive: context !== null,\n  };\n}\n\n// Preset configurations\nexport const contextAwarePresets = {\n  office: {\n    adaptationSpeed: 0.3,\n    sensitivity: 0.8,\n  },\n  gaming: {\n    adaptationSpeed: 0.7,\n    sensitivity: 1,\n  },\n  reading: {\n    adaptationSpeed: 0.2,\n    sensitivity: 0.5,\n  },\n  presentation: {\n    adaptationSpeed: 0.1,\n    sensitivity: 0.3,\n    override: { intensity: 0.3, opacity: 0.05 },\n  },\n  accessibility: {\n    adaptationSpeed: 0.1,\n    sensitivity: 0.2,\n    override: { contrast: 1.5 },\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * Spatial Computing Engine\n * Foundation for AR/VR glass components with 3D space awareness,\n * gesture recognition, and mixed reality integration\n *\n * @demo DEMO / EXPERIMENTAL COMPONENT \u2014 uses in-component mock data.\n * Spatial tracking, gestures, and mixed-reality state are simulated locally and\n * NOT backed by a real WebXR / spatial-tracking runtime. Wire it to a real XR\n * runtime before production use.\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useCallback,\n  useState,\n  useMemo,\n} from \"react\";\nimport {\n  motion,\n  useAnimation,\n  useMotionValue,\n  useSpring,\n  useTransform,\n} from \"framer-motion\";\n\n// Spatial coordinate system\nexport interface SpatialPosition {\n  x: number; // World X coordinate\n  y: number; // World Y coordinate\n  z: number; // World Z coordinate (depth)\n  pitch: number; // Rotation around X axis (degrees)\n  yaw: number; // Rotation around Y axis (degrees)\n  roll: number; // Rotation around Z axis (degrees)\n}\n\n// Spatial bounds and constraints\nexport interface SpatialBounds {\n  min: SpatialPosition;\n  max: SpatialPosition;\n  shape: \"box\" | \"sphere\" | \"cylinder\" | \"plane\";\n  constraints?: {\n    lockX?: boolean;\n    lockY?: boolean;\n    lockZ?: boolean;\n    lockRotation?: boolean;\n  };\n}\n\n// Gesture recognition types\nexport type SpatialGesture =\n  | \"tap\"\n  | \"pinch\"\n  | \"grab\"\n  | \"swipe\"\n  | \"rotate\"\n  | \"scale\"\n  | \"point\"\n  | \"wave\"\n  | \"push\"\n  | \"pull\"\n  | \"circle\"\n  | \"custom\";\n\nexport interface GestureEvent {\n  type: SpatialGesture;\n  position: SpatialPosition;\n  velocity: SpatialPosition;\n  confidence: number;\n  duration: number;\n  data?: Record<string, unknown>;\n}\n\n// Spatial anchor system for persistent positioning\nexport interface SpatialAnchor {\n  id: string;\n  position: SpatialPosition;\n  persistent: boolean;\n  cloudSync: boolean;\n  accuracy: number;\n  lastUpdate: number;\n}\n\n// Mixed reality environment types\nexport type MREnvironment =\n  | \"desktop\"\n  | \"mobile\"\n  | \"vr-headset\"\n  | \"ar-glasses\"\n  | \"ar-phone\"\n  | \"holographic\";\n\nexport interface SpatialContext {\n  environment: MREnvironment;\n  capabilities: {\n    headTracking: boolean;\n    handTracking: boolean;\n    eyeTracking: boolean;\n    bodyTracking: boolean;\n    environmentMapping: boolean;\n    occlusion: boolean;\n    lighting: boolean;\n    physics: boolean;\n  };\n  displayInfo: {\n    fov: number; // Field of view in degrees\n    resolution: { width: number; height: number };\n    refreshRate: number;\n    ipd?: number; // Interpupillary distance for VR\n  };\n}\n\ninterface SpatialComputingEngineProps {\n  children: React.ReactNode;\n  className?: string;\n  position?: Partial<SpatialPosition>;\n  bounds?: SpatialBounds;\n  enableGestures?: boolean;\n  enableAnchoring?: boolean;\n  enablePhysics?: boolean;\n  enableOcclusion?: boolean;\n  gestureTypes?: SpatialGesture[];\n  spatialId?: string;\n  onGesture?: (gesture: GestureEvent) => void;\n  onPositionChange?: (position: SpatialPosition) => void;\n  onAnchorUpdate?: (anchor: SpatialAnchor) => void;\n  showDebugHud?: boolean;\n}\n\n// Default spatial position\nconst DEFAULT_POSITION: SpatialPosition = {\n  x: 0,\n  y: 0,\n  z: 0,\n  pitch: 0,\n  yaw: 0,\n  roll: 0,\n};\n\n// Spatial context detection\nconst detectSpatialContext = (): SpatialContext => {\n  const userAgent = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n\n  // Check for WebXR support\n  const hasWebXR = typeof navigator !== \"undefined\" && \"xr\" in navigator;\n  const isVR = hasWebXR && userAgent.includes(\"VR\");\n  const isAR =\n    hasWebXR && (userAgent.includes(\"AR\") || userAgent.includes(\"Mobile\"));\n\n  // Basic capability detection\n  const capabilities = {\n    headTracking: hasWebXR,\n    handTracking: hasWebXR && \"getInputSources\" in (window as any),\n    eyeTracking: false, // Requires specific hardware/API\n    bodyTracking: false, // Limited availability\n    environmentMapping: hasWebXR,\n    occlusion: hasWebXR,\n    lighting: hasWebXR,\n    physics: true, // Software-based physics always available\n  };\n\n  let environment: MREnvironment = \"desktop\";\n  if (isVR) environment = \"vr-headset\";\n  else if (isAR && userAgent.includes(\"Mobile\")) environment = \"ar-phone\";\n  else if (isAR) environment = \"ar-glasses\";\n  else if (userAgent.includes(\"Mobile\")) environment = \"mobile\";\n\n  return {\n    environment,\n    capabilities,\n    displayInfo: {\n      fov: environment.includes(\"vr\") ? 110 : 60,\n      resolution: {\n        width: window.innerWidth || 1920,\n        height: window.innerHeight || 1080,\n      },\n      refreshRate: 60, // Default assumption\n    },\n  };\n};\n\nexport const SpatialComputingEngine: React.FC<SpatialComputingEngineProps> = ({\n  children,\n  className = \"\",\n  position = {},\n  bounds,\n  enableGestures = true,\n  enableAnchoring = false,\n  enablePhysics = true,\n  enableOcclusion = false,\n  gestureTypes = [\"tap\", \"pinch\", \"grab\"],\n  spatialId,\n  onGesture,\n  onPositionChange,\n  onAnchorUpdate,\n  showDebugHud = false,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const xrSessionRef = useRef<any>(null); // XRSession type not available in current environment\n  const [spatialContext, setSpatialContext] = useState<SpatialContext>(\n    detectSpatialContext()\n  );\n  const [currentPosition, setCurrentPosition] = useState<SpatialPosition>({\n    ...DEFAULT_POSITION,\n    ...position,\n  });\n  const [spatialAnchor, setSpatialAnchor] = useState<SpatialAnchor | null>(\n    null\n  );\n  const [gestureActive, setGestureActive] = useState<SpatialGesture | null>(\n    null\n  );\n\n  const controls = useAnimation();\n\n  // Spatial motion values for smooth transformations\n  const spatialX = useSpring(currentPosition.x, {\n    stiffness: 400,\n    damping: 40,\n  });\n  const spatialY = useSpring(currentPosition.y, {\n    stiffness: 400,\n    damping: 40,\n  });\n  const spatialZ = useSpring(currentPosition.z, {\n    stiffness: 400,\n    damping: 40,\n  });\n  const spatialPitch = useSpring(currentPosition.pitch, {\n    stiffness: 300,\n    damping: 35,\n  });\n  const spatialYaw = useSpring(currentPosition.yaw, {\n    stiffness: 300,\n    damping: 35,\n  });\n  const spatialRoll = useSpring(currentPosition.roll, {\n    stiffness: 300,\n    damping: 35,\n  });\n\n  // WebXR session management\n  const initializeXRSession = useCallback(async () => {\n    if (!spatialContext.capabilities.headTracking) return;\n\n    try {\n      if (\"xr\" in navigator) {\n        const xr = (navigator as any).xr as any; // XRSystem type not available in current environment\n\n        // Check for immersive VR support\n        const isVRSupported = await xr.isSessionSupported(\"immersive-vr\");\n        const isARSupported = await xr.isSessionSupported(\"immersive-ar\");\n\n        if (isVRSupported || isARSupported) {\n          const sessionMode = isVRSupported ? \"immersive-vr\" : \"immersive-ar\";\n          const session = await xr.requestSession(sessionMode, {\n            requiredFeatures: [\"local\"],\n            optionalFeatures: [\"hand-tracking\", \"eye-tracking\", \"anchors\"],\n          });\n\n          xrSessionRef.current = session;\n\n          // Set up XR frame loop\n          const onXRFrame = (time: number, frame: any) => {\n            // XRFrame type not available in current environment\n            const pose = frame.getViewerPose(\n              session.renderState.baseLayer!.framebuffer as any\n            );\n            if (pose) {\n              updateSpatialPosition(pose);\n            }\n\n            session.requestAnimationFrame(onXRFrame);\n          };\n\n          session.requestAnimationFrame(onXRFrame);\n        }\n      }\n    } catch {\n      // XR is optional; keep non-XR spatial positioning available.\n    }\n  }, [spatialContext]);\n\n  // Update spatial position from XR pose or other input\n  const updateSpatialPosition = useCallback(\n    (pose?: any | Partial<SpatialPosition>) => {\n      // XRPose type not available in current environment\n      let newPosition: SpatialPosition;\n\n      if (pose && \"transform\" in pose) {\n        // Extract position from XR pose\n        const { position: pos, orientation } = pose.transform;\n        newPosition = {\n          x: pos.x,\n          y: pos.y,\n          z: pos.z,\n          pitch:\n            (Math.atan2(\n              2 *\n                (orientation.w * orientation.x + orientation.y * orientation.z),\n              1 -\n                2 *\n                  (orientation.x * orientation.x +\n                    orientation.y * orientation.y)\n            ) *\n              180) /\n            Math.PI,\n          yaw:\n            (Math.asin(\n              2 *\n                (orientation.w * orientation.y - orientation.z * orientation.x)\n            ) *\n              180) /\n            Math.PI,\n          roll:\n            (Math.atan2(\n              2 *\n                (orientation.w * orientation.z + orientation.x * orientation.y),\n              1 -\n                2 *\n                  (orientation.y * orientation.y +\n                    orientation.z * orientation.z)\n            ) *\n              180) /\n            Math.PI,\n        };\n      } else {\n        // Use provided position data\n        newPosition = {\n          ...currentPosition,\n          ...(pose as Partial<SpatialPosition>),\n        };\n      }\n\n      // Apply bounds constraints\n      if (bounds) {\n        newPosition.x = Math.max(\n          bounds.min.x,\n          Math.min(bounds.max.x, newPosition.x)\n        );\n        newPosition.y = Math.max(\n          bounds.min.y,\n          Math.min(bounds.max.y, newPosition.y)\n        );\n        newPosition.z = Math.max(\n          bounds.min.z,\n          Math.min(bounds.max.z, newPosition.z)\n        );\n\n        if (bounds.constraints?.lockX) newPosition.x = currentPosition.x;\n        if (bounds.constraints?.lockY) newPosition.y = currentPosition.y;\n        if (bounds.constraints?.lockZ) newPosition.z = currentPosition.z;\n        if (bounds.constraints?.lockRotation) {\n          newPosition.pitch = currentPosition.pitch;\n          newPosition.yaw = currentPosition.yaw;\n          newPosition.roll = currentPosition.roll;\n        }\n      }\n\n      setCurrentPosition(newPosition);\n\n      // Update motion values\n      spatialX.set(newPosition.x);\n      spatialY.set(newPosition.y);\n      spatialZ.set(newPosition.z);\n      spatialPitch.set(newPosition.pitch);\n      spatialYaw.set(newPosition.yaw);\n      spatialRoll.set(newPosition.roll);\n\n      onPositionChange?.(newPosition);\n    },\n    [\n      currentPosition,\n      bounds,\n      spatialX,\n      spatialY,\n      spatialZ,\n      spatialPitch,\n      spatialYaw,\n      spatialRoll,\n      onPositionChange,\n    ]\n  );\n\n  // Gesture recognition system\n  const recognizeGesture = useCallback(\n    (event: PointerEvent | TouchEvent | KeyboardEvent): GestureEvent | null => {\n      if (!enableGestures) return null;\n\n      const rect = containerRef.current?.getBoundingClientRect();\n      if (!rect) return null;\n\n      let gestureType: SpatialGesture | null = null;\n      let position: SpatialPosition = { ...DEFAULT_POSITION };\n      let confidence = 1;\n\n      if (event instanceof PointerEvent) {\n        // Basic pointer gesture recognition\n        const x = (event.clientX - rect.left) / rect.width - 0.5;\n        const y = (event.clientY - rect.top) / rect.height - 0.5;\n\n        position = { ...DEFAULT_POSITION, x: x * 100, y: y * 100 };\n\n        if (event.type === \"pointerdown\") gestureType = \"tap\";\n        else if (event.pressure > 0.5) gestureType = \"grab\";\n      } else if (event instanceof TouchEvent && event.touches.length > 0) {\n        // Multi-touch gesture recognition\n        const touch = event.touches[0];\n        const x = (touch.clientX - rect.left) / rect.width - 0.5;\n        const y = (touch.clientY - rect.top) / rect.height - 0.5;\n\n        position = { ...DEFAULT_POSITION, x: x * 100, y: y * 100 };\n\n        if (event.touches.length === 1) gestureType = \"tap\";\n        else if (event.touches.length === 2) gestureType = \"pinch\";\n\n        confidence = Math.min(1, event.touches.length / 2);\n      }\n\n      if (gestureType && gestureTypes.includes(gestureType)) {\n        const gestureEvent: GestureEvent = {\n          type: gestureType,\n          position,\n          velocity: { ...DEFAULT_POSITION }, // Would calculate from previous positions\n          confidence,\n          duration: 0, // Would track duration\n        };\n\n        return gestureEvent;\n      }\n\n      return null;\n    },\n    [enableGestures, gestureTypes]\n  );\n\n  // Handle gesture events\n  const handleGestureStart = useCallback(\n    (event: PointerEvent | TouchEvent) => {\n      const gesture = recognizeGesture(event);\n      if (gesture) {\n        setGestureActive(gesture.type);\n        onGesture?.(gesture);\n\n        // Visual feedback for gesture\n        controls.start({\n          scale: 1.05,\n          transition: { duration: 0.1 },\n        });\n      }\n    },\n    [recognizeGesture, onGesture, controls]\n  );\n\n  const handleGestureEnd = useCallback(() => {\n    if (gestureActive) {\n      setGestureActive(null);\n      controls.start({\n        scale: 1,\n        transition: { duration: 0.2 },\n      });\n    }\n  }, [gestureActive, controls]);\n\n  // Spatial anchoring system\n  const createSpatialAnchor = useCallback(async () => {\n    if (!enableAnchoring || !spatialId) return;\n\n    const anchor: SpatialAnchor = {\n      id: spatialId,\n      position: currentPosition,\n      persistent: true,\n      cloudSync: false,\n      accuracy: 1.0,\n      lastUpdate: Date.now(),\n    };\n\n    // In a real implementation, this would persist to spatial mapping system\n    setSpatialAnchor(anchor);\n    onAnchorUpdate?.(anchor);\n  }, [enableAnchoring, spatialId, currentPosition, onAnchorUpdate]);\n\n  // Physics simulation for spatial objects\n  const applyPhysics = useCallback(\n    (deltaTime: number) => {\n      if (!enablePhysics) return;\n\n      // Simple gravity and collision detection\n      const gravity = -9.81; // m/s\u00B2\n      const newY = currentPosition.y + (gravity * deltaTime * deltaTime) / 1000;\n\n      // Ground collision\n      if (newY < 0) {\n        updateSpatialPosition({ y: 0 });\n      } else {\n        updateSpatialPosition({ y: newY });\n      }\n    },\n    [enablePhysics, currentPosition.y, updateSpatialPosition]\n  );\n\n  // Initialize XR session on mount\n  useEffect(() => {\n    initializeXRSession();\n\n    // Cleanup XR session on unmount\n    return () => {\n      if (xrSessionRef.current) {\n        xrSessionRef.current.end();\n      }\n    };\n  }, [initializeXRSession]);\n\n  // Set up gesture event listeners\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container || !enableGestures) return;\n\n    const handlePointerDown = (e: PointerEvent) => handleGestureStart(e);\n    const handleTouchStart = (e: TouchEvent) => handleGestureStart(e);\n    const handlePointerUp = () => handleGestureEnd();\n    const handleTouchEnd = () => handleGestureEnd();\n\n    container.addEventListener(\"pointerdown\", handlePointerDown);\n    container.addEventListener(\"touchstart\", handleTouchStart);\n    container.addEventListener(\"pointerup\", handlePointerUp);\n    container.addEventListener(\"touchend\", handleTouchEnd);\n\n    return () => {\n      container.removeEventListener(\"pointerdown\", handlePointerDown);\n      container.removeEventListener(\"touchstart\", handleTouchStart);\n      container.removeEventListener(\"pointerup\", handlePointerUp);\n      container.removeEventListener(\"touchend\", handleTouchEnd);\n    };\n  }, [enableGestures, handleGestureStart, handleGestureEnd]);\n\n  // Physics update loop\n  useEffect(() => {\n    if (!enablePhysics) return;\n\n    let lastTime = Date.now();\n    let animationFrame: number;\n\n    const physicsLoop = () => {\n      const currentTime = Date.now();\n      const deltaTime = currentTime - lastTime;\n      lastTime = currentTime;\n\n      applyPhysics(deltaTime);\n      animationFrame = requestAnimationFrame(physicsLoop);\n    };\n\n    animationFrame = requestAnimationFrame(physicsLoop);\n\n    return () => cancelAnimationFrame(animationFrame);\n  }, [enablePhysics, applyPhysics]);\n\n  // Auto-create anchor if position is stable\n  useEffect(() => {\n    if (enableAnchoring && !spatialAnchor) {\n      const timer = setTimeout(createSpatialAnchor, 5000); // Create anchor after 5s\n      return () => clearTimeout(timer);\n    }\n  }, [enableAnchoring, spatialAnchor, createSpatialAnchor]);\n\n  // Transform calculations for CSS\n  const transform3D = useMemo(\n    () => ({\n      x: spatialX,\n      y: spatialY,\n      z: spatialZ,\n      rotateX: spatialPitch,\n      rotateY: spatialYaw,\n      rotateZ: spatialRoll,\n    }),\n    [spatialX, spatialY, spatialZ, spatialPitch, spatialYaw, spatialRoll]\n  );\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={`spatial-computing-container ${className}`}\n      style={{\n        position: \"relative\",\n        transformStyle: \"preserve-3d\",\n        perspective: \"1000px\",\n        ...transform3D,\n      }}\n      animate={controls}\n    >\n      {/* Spatial bounds visualization */}\n      {bounds && showDebugHud && (\n        <div\n          className=\"spatial-bounds-debug\"\n          style={{\n            position: \"absolute\",\n            border: \"1px dashed rgba(0, 255, 0, 0.5)\",\n            left: `${bounds.min.x}px`,\n            top: `${bounds.min.y}px`,\n            width: `${bounds.max.x - bounds.min.x}px`,\n            height: `${bounds.max.y - bounds.min.y}px`,\n            pointerEvents: \"none\",\n          }}\n        />\n      )}\n\n      {/* Spatial anchor indicator */}\n      {spatialAnchor && (\n        <div\n          className=\"spatial-anchor-indicator\"\n          style={{\n            position: \"absolute\",\n            top: \"10px\",\n            left: \"10px\",\n            width: \"8px\",\n            height: \"8px\",\n            backgroundColor:\n              \"var(--glass-neutral-level2-surface)\",\n            borderRadius: \"50%\",\n            pointerEvents: \"none\",\n          }}\n        />\n      )}\n\n      {/* Gesture feedback */}\n      {gestureActive && (\n        <div\n          className=\"gesture-feedback\"\n          style={{\n            position: \"absolute\",\n            top: \"50%\",\n            left: \"50%\",\n            transform: \"translate(-50%, -50%)\",\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n            borderRadius: \"50%\",\n            width: \"60px\",\n            height: \"60px\",\n            pointerEvents: \"none\",\n            animation: \"pulse 1s infinite\",\n          }}\n        />\n      )}\n\n      {/* Occlusion layer */}\n      {enableOcclusion && spatialContext.capabilities.occlusion && (\n        <div\n          className=\"occlusion-layer\"\n          style={{\n            position: \"absolute\",\n            inset: 0,\n            background:\n              \"var(--glass-primary-level2-surface)\",\n            pointerEvents: \"none\",\n            mixBlendMode: \"multiply\",\n          }}\n        />\n      )}\n\n      {children}\n\n      {/* Debug information */}\n      {showDebugHud && (\n        <div\n          className=\"spatial-debug-info\"\n          style={{\n            position: \"absolute\",\n            bottom: \"10px\",\n            right: \"10px\",\n            background:\n              \"var(--glass-primary-level2-surface)\",\n            color: \"white\",\n            padding: \"8px\",\n            fontSize: \"12px\",\n            borderRadius: \"4px\",\n            pointerEvents: \"none\",\n            fontFamily: \"monospace\",\n          }}\n        >\n          Env: {spatialContext.environment}\n          <br />\n          Pos: ({currentPosition.x.toFixed(1)}, {currentPosition.y.toFixed(1)},{\" \"}\n          {currentPosition.z.toFixed(1)})<br />\n          Rot: ({currentPosition.pitch.toFixed(1)}\u00B0,{\" \"}\n          {currentPosition.yaw.toFixed(1)}\u00B0, {currentPosition.roll.toFixed(1)}\u00B0)\n          <br />\n          {gestureActive && `Gesture: ${gestureActive}`}\n          <br />\n          {spatialAnchor && \"Anchored\"}\n        </div>\n      )}\n\n      <style>{`\n        @keyframes pulse {\n          0%, 100% { opacity: 0.6; transform: translate(-50%, -50%) scale(1); }\n          50% { opacity: 1; transform: translate(-50%, -50%) scale(1.2); }\n        }\n      `}</style>\n    </motion.div>\n  );\n};\n\n// Specialized spatial components\nexport const VRGlassComponent: React.FC<SpatialComputingEngineProps> = (\n  props\n) => (\n  <SpatialComputingEngine\n    {...props}\n    enableGestures={true}\n    enablePhysics={true}\n    gestureTypes={[\"grab\", \"point\", \"wave\"]}\n  />\n);\n\nexport const ARGlassComponent: React.FC<SpatialComputingEngineProps> = (\n  props\n) => (\n  <SpatialComputingEngine\n    {...props}\n    enableAnchoring={true}\n    enableOcclusion={true}\n    gestureTypes={[\"tap\", \"pinch\", \"point\"]}\n  />\n);\n\nexport const HoloGlassComponent: React.FC<SpatialComputingEngineProps> = (\n  props\n) => (\n  <SpatialComputingEngine\n    {...props}\n    enableGestures={true}\n    enableAnchoring={true}\n    enablePhysics={true}\n    enableOcclusion={true}\n    gestureTypes={[\"tap\", \"grab\", \"rotate\", \"scale\"]}\n  />\n);\n\n// Spatial computing utilities\nexport const useSpatialTracking = () => {\n  const [position, setPosition] = useState<SpatialPosition>(DEFAULT_POSITION);\n  const [isTracking, setIsTracking] = useState(false);\n\n  const startTracking = useCallback(() => {\n    setIsTracking(true);\n    // Would integrate with actual spatial tracking APIs\n  }, []);\n\n  const stopTracking = useCallback(() => {\n    setIsTracking(false);\n  }, []);\n\n  return {\n    position,\n    isTracking,\n    startTracking,\n    stopTracking,\n  };\n};\n\nexport default SpatialComputingEngine;\n", "\"use client\";\nimport React from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport {\n  createContext,\n  ReactNode,\n  useCallback,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\n\n// Types for AI theme system\ninterface GlassTheme {\n  id: string;\n  name: string;\n  colors: {\n    primary: string;\n    secondary: string;\n    accent: string;\n    background: string;\n    surface: string;\n    text: string;\n  };\n  glass: {\n    blur: number;\n    opacity: number;\n    borderRadius: string;\n  };\n  animations: {\n    duration: number;\n    easing: string;\n  };\n  metadata: {\n    sentiment: string;\n    context: string;\n    created: Date;\n  };\n}\n\ninterface ContentSentiment {\n  sentiment: string;\n  intensity: number;\n  confidence: number;\n  keywords: string[];\n  emotions: Record<string, number>;\n}\n\ninterface ContentContext {\n  type: string;\n  category: string;\n  urgency: string;\n  readability: number;\n  complexity: string;\n  length: string;\n  timeOfDay: string;\n  season: string;\n}\n\ninterface UserBehavior {\n  preferredIntensity: number;\n  preferredContrast: number;\n  readingTime: number;\n  deviceType: string;\n  accessibilityNeeds: {\n    highContrast: boolean;\n    reducedMotion: boolean;\n    largerText: boolean;\n  };\n  engagementLevel: number;\n  returnRate: number;\n}\n\ninterface AIThemeConfig {\n  adaptToSentiment: boolean;\n  adaptToContext: boolean;\n  adaptToTime: boolean;\n  adaptToSeason: boolean;\n  adaptToBehavior: boolean;\n  enableABTesting: boolean;\n  accessibilityFirst: boolean;\n  performanceMode: boolean;\n}\n\ninterface ThemeWeights {\n  sentiment: number;\n  context: number;\n  time: number;\n  season: number;\n  behavior: number;\n}\n\n// AI Theme Provider context interface\ninterface AIGlassThemeContextType {\n  // Current AI state\n  currentTheme: GlassTheme | null;\n  isGenerating: boolean;\n  generationError: string | null;\n\n  // AI Configuration\n  aiConfig: AIThemeConfig;\n  updateAIConfig: (config: Partial<AIThemeConfig>) => void;\n\n  // Theme generation\n  generateTheme: (\n    content: string,\n    context?: Partial<ContentContext>\n  ) => Promise<GlassTheme>;\n  generateThemeFromSentiment: (\n    sentiment: ContentSentiment,\n    context?: Partial<ContentContext>\n  ) => Promise<GlassTheme>;\n\n  // Theme management\n  themeHistory: GlassTheme[];\n  favoriteThemes: GlassTheme[];\n  addToFavorites: (theme: GlassTheme) => void;\n  removeFromFavorites: (themeId: string) => void;\n\n  // User behavior tracking\n  userBehavior: UserBehavior;\n  updateUserBehavior: (behavior: Partial<UserBehavior>) => void;\n  trackInteraction: (\n    themeId: string,\n    engagement: number,\n    satisfaction: number\n  ) => void;\n\n  // Performance and accessibility\n  performanceMode: boolean;\n  setPerformanceMode: (enabled: boolean) => void;\n  accessibilityMode: boolean;\n  setAccessibilityMode: (enabled: boolean) => void;\n\n  // Cache and persistence\n  clearCache: () => void;\n  exportAIData: () => string;\n  importAIData: (data: string) => boolean;\n}\n\n// Default user behavior\nconst DEFAULT_USER_BEHAVIOR: UserBehavior = {\n  preferredIntensity: 0.6,\n  preferredContrast: 0.5,\n  readingTime: 5,\n  deviceType: \"desktop\",\n  accessibilityNeeds: {\n    highContrast: false,\n    reducedMotion: false,\n    largerText: false,\n  },\n  engagementLevel: 0.5,\n  returnRate: 0.5,\n};\n\n// Create context\nconst AIGlassThemeContext = createContext<AIGlassThemeContextType | undefined>(\n  undefined\n);\n\ninterface AIGlassThemeProviderProps {\n  children: ReactNode;\n  initialConfig?: Partial<AIThemeConfig>;\n  storageKey?: string;\n  enableAnalytics?: boolean;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\nexport function AIGlassThemeProvider({\n  children,\n  initialConfig = {},\n  storageKey = \"ai-glass-theme-data\",\n  enableAnalytics = true,\n  className,\n  \"data-testid\": dataTestId,\n}: AIGlassThemeProviderProps) {\n  // Core state\n  const [currentTheme, setCurrentTheme] = useState<GlassTheme | null>(null);\n  const [isGenerating, setIsGenerating] = useState(false);\n  const [generationError, setGenerationError] = useState<string | null>(null);\n\n  // Configuration state\n  const [aiConfig, setAIConfig] = useState<AIThemeConfig>({\n    adaptToSentiment: true,\n    adaptToContext: true,\n    adaptToTime: true,\n    adaptToSeason: true,\n    adaptToBehavior: true,\n    enableABTesting: false,\n    accessibilityFirst: true,\n    performanceMode: false,\n    ...initialConfig,\n  });\n\n  // User behavior state\n  const [userBehavior, setUserBehavior] = useState<UserBehavior>(\n    DEFAULT_USER_BEHAVIOR\n  );\n\n  // Theme management state\n  const [themeHistory, setThemeHistory] = useState<GlassTheme[]>([]);\n  const [favoriteThemes, setFavoriteThemes] = useState<GlassTheme[]>([]);\n\n  // Performance state\n  const [performanceMode, setPerformanceMode] = useState(false);\n  const [accessibilityMode, setAccessibilityMode] = useState(false);\n\n  // Refs for performance tracking\n  const generationStartTime = useRef<number>(0);\n  const sentimentUsage = useRef<Map<string, number>>(new Map());\n  const engagementHistory = useRef<\n    Array<{ timestamp: Date; engagement: number }>\n  >([]);\n\n  // Initialize on mount\n  useEffect(() => {\n    const initializeAI = async () => {\n      try {\n        // Load persisted data\n        const saved = localStorage.getItem(storageKey);\n        if (saved) {\n          const data = JSON.parse(saved);\n\n          if (data.userBehavior) {\n            setUserBehavior({ ...DEFAULT_USER_BEHAVIOR, ...data.userBehavior });\n          }\n\n          if (data.themeHistory) {\n            setThemeHistory(data.themeHistory);\n          }\n\n          if (data.favoriteThemes) {\n            setFavoriteThemes(data.favoriteThemes);\n          }\n\n          if (data.aiConfig) {\n            setAIConfig({ ...aiConfig, ...data.aiConfig });\n          }\n        }\n      } catch {\n        setGenerationError(\"Failed to initialize AI theme system\");\n      }\n    };\n\n    initializeAI();\n  }, []);\n\n  // Persist data when state changes\n  useEffect(() => {\n    const dataToSave = {\n      userBehavior,\n      themeHistory: themeHistory.slice(-50), // Keep last 50 themes\n      favoriteThemes,\n      aiConfig,\n      timestamp: new Date().toISOString(),\n    };\n\n    try {\n      localStorage.setItem(storageKey, JSON.stringify(dataToSave));\n    } catch {\n      // Ignore storage failures; in-memory AI theme state remains active.\n    }\n  }, [userBehavior, themeHistory, favoriteThemes, aiConfig, storageKey]);\n\n  // Update AI config\n  const updateAIConfig = useCallback((config: Partial<AIThemeConfig>) => {\n    setAIConfig((prev: any) => {\n      const newConfig = { ...prev, ...config };\n      return newConfig;\n    });\n  }, []);\n\n  // Generate theme from content (simplified implementation)\n  const generateTheme = useCallback(\n    async (\n      content: string,\n      context: Partial<ContentContext> = {}\n    ): Promise<GlassTheme> => {\n      setIsGenerating(true);\n      setGenerationError(null);\n      generationStartTime.current = performance.now();\n\n      try {\n        // Simulate AI processing delay\n        await new Promise((resolve) =>\n          setTimeout(resolve, ANIMATION.DURATION.slow)\n        );\n\n        // Simple theme generation based on content analysis\n        const contentLength = content.length;\n        const hasKeywords = [\"urgent\", \"important\", \"breaking\"].some((word) =>\n          content.toLowerCase().includes(word)\n        );\n\n        // Generate colors based on content analysis\n        const baseHue = hasKeywords ? 0 : Math.random() * 360; // Red for urgent, random for others\n        const saturation = 0.7;\n        const lightness = 0.6;\n\n        const theme: GlassTheme = {\n          id: `theme-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n          name: `Generated Theme ${themeHistory.length + 1}`,\n          colors: {\n            primary: `hsl(${baseHue}, ${saturation * 100}%, ${lightness * 100}%)`,\n            secondary: `hsl(${(baseHue + 60) % 360}, ${saturation * 100}%, ${(lightness + 0.1) * 100}%)`,\n            accent: `hsl(${(baseHue + 120) % 360}, ${saturation * 100}%, ${(lightness - 0.1) * 100}%)`,\n            background: `hsl(${baseHue}, ${saturation * 50}%, ${lightness * 20}%)`,\n            surface: `hsl(${baseHue}, ${saturation * 30}%, ${lightness * 40}%)`,\n            text: `hsl(${baseHue}, ${saturation * 20}%, ${lightness * 90}%)`,\n          },\n          glass: {\n            blur: Math.max(8, Math.min(20, contentLength / 100)),\n            opacity: hasKeywords ? 0.9 : 0.7,\n            borderRadius: hasKeywords ? \"8px\" : \"16px\",\n          },\n          animations: {\n            duration: performanceMode\n              ? ANIMATION.DURATION.fast / 1000\n              : ANIMATION.DURATION.slow / 1000,\n            easing: \"ease-out\",\n          },\n          metadata: {\n            sentiment: hasKeywords ? \"urgent\" : \"neutral\",\n            context: context.type || \"general\",\n            created: new Date(),\n          },\n        };\n\n        // Update theme history\n        setThemeHistory((prev: any) => [theme, ...prev.slice(0, 49)]);\n        setCurrentTheme(theme);\n\n        return theme;\n      } catch (error) {\n        const errorMessage =\n          error instanceof Error ? error.message : \"Theme generation failed\";\n        setGenerationError(errorMessage);\n        throw error;\n      } finally {\n        setIsGenerating(false);\n      }\n    },\n    [themeHistory.length, performanceMode]\n  );\n\n  // Generate theme from sentiment\n  const generateThemeFromSentiment = useCallback(\n    async (\n      sentiment: ContentSentiment,\n      context: Partial<ContentContext> = {}\n    ): Promise<GlassTheme> => {\n      // Track sentiment usage\n      const currentCount = sentimentUsage.current.get(sentiment.sentiment) || 0;\n      sentimentUsage.current.set(sentiment.sentiment, currentCount + 1);\n\n      // Create mock content based on sentiment\n      const mockContent = `This is ${sentiment.sentiment} content with ${sentiment.intensity} intensity`;\n      return generateTheme(mockContent, context);\n    },\n    [generateTheme]\n  );\n\n  // Update user behavior\n  const updateUserBehavior = useCallback((behavior: Partial<UserBehavior>) => {\n    setUserBehavior((prev: any) => ({ ...prev, ...behavior }));\n  }, []);\n\n  // Track user interaction with theme\n  const trackInteraction = useCallback(\n    (themeId: string, engagement: number, satisfaction: number) => {\n      if (!enableAnalytics) return;\n\n      // Record engagement\n      engagementHistory.current.push({\n        timestamp: new Date(),\n        engagement,\n      });\n\n      // Keep only last 100 engagement records\n      if (engagementHistory.current.length > 100) {\n        engagementHistory.current = engagementHistory.current.slice(-100);\n      }\n\n      // Update user behavior based on interaction\n      const currentEngagement = userBehavior.engagementLevel;\n      const newEngagement = (currentEngagement + engagement) / 2;\n\n      updateUserBehavior({\n        engagementLevel: newEngagement,\n        returnRate:\n          satisfaction > 0.7\n            ? Math.min(1, userBehavior.returnRate + 0.1)\n            : userBehavior.returnRate,\n      });\n    },\n    [enableAnalytics, userBehavior, updateUserBehavior]\n  );\n\n  // Favorites management\n  const addToFavorites = useCallback((theme: GlassTheme) => {\n    setFavoriteThemes((prev: any) => {\n      if (prev.find((t: any) => t.id === theme.id)) return prev;\n      return [theme, ...prev];\n    });\n  }, []);\n\n  const removeFromFavorites = useCallback((themeId: string) => {\n    setFavoriteThemes((prev: any) => prev.filter((t: any) => t.id !== themeId));\n  }, []);\n\n  // Cache and data management\n  const clearCache = useCallback(() => {\n    setThemeHistory([]);\n    sentimentUsage.current.clear();\n    engagementHistory.current = [];\n\n    try {\n      localStorage.removeItem(storageKey);\n    } catch {\n      // Ignore storage failures; in-memory cache has already been cleared.\n    }\n  }, [storageKey]);\n\n  const exportAIData = useCallback((): string => {\n    const exportData = {\n      version: \"1.0.0\",\n      timestamp: new Date().toISOString(),\n      aiConfig,\n      userBehavior,\n      themeHistory,\n      favoriteThemes,\n    };\n\n    return JSON.stringify(exportData, null, 2);\n  }, [aiConfig, userBehavior, themeHistory, favoriteThemes]);\n\n  const importAIData = useCallback(\n    (data: string): boolean => {\n      try {\n        const importData = JSON.parse(data);\n\n        if (importData.aiConfig) {\n          updateAIConfig(importData.aiConfig);\n        }\n\n        if (importData.userBehavior) {\n          updateUserBehavior(importData.userBehavior);\n        }\n\n        if (importData.themeHistory) {\n          setThemeHistory(importData.themeHistory);\n        }\n\n        if (importData.favoriteThemes) {\n          setFavoriteThemes(importData.favoriteThemes);\n        }\n\n        return true;\n      } catch {\n        return false;\n      }\n    },\n    [updateAIConfig, updateUserBehavior]\n  );\n\n  // Context value\n  const contextValue: AIGlassThemeContextType = {\n    // Current state\n    currentTheme,\n    isGenerating,\n    generationError,\n\n    // Configuration\n    aiConfig,\n    updateAIConfig,\n\n    // Theme generation\n    generateTheme,\n    generateThemeFromSentiment,\n\n    // Theme management\n    themeHistory,\n    favoriteThemes,\n    addToFavorites,\n    removeFromFavorites,\n\n    // User behavior\n    userBehavior,\n    updateUserBehavior,\n    trackInteraction,\n\n    // Performance and accessibility\n    performanceMode,\n    setPerformanceMode,\n    accessibilityMode,\n    setAccessibilityMode,\n\n    // Data management\n    clearCache,\n    exportAIData,\n    importAIData,\n  };\n\n  return (\n    <AIGlassThemeContext.Provider value={contextValue}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </AIGlassThemeContext.Provider>\n  );\n}\n\n// Hook to use AI Glass Theme context\nexport function useAIGlassTheme() {\n  const context = useContext(AIGlassThemeContext);\n  if (context === undefined) {\n    throw new Error(\n      \"useAIGlassTheme must be used within an AIGlassThemeProvider\"\n    );\n  }\n  return context;\n}\n\n// Utility hook for simplified theme generation\nexport function useSmartTheme() {\n  const { generateTheme, trackInteraction, currentTheme } = useAIGlassTheme();\n\n  const generateFromContent = useCallback(\n    async (content: string) => {\n      const theme = await generateTheme(content);\n      return theme;\n    },\n    [generateTheme]\n  );\n\n  const generateFromArticle = useCallback(\n    async (title: string, body: string, category?: string) => {\n      const content = `${title} ${body}`;\n      const context = category ? { category, type: \"news\" as const } : {};\n      return generateTheme(content, context);\n    },\n    [generateTheme]\n  );\n\n  const recordEngagement = useCallback(\n    (engagement: number, satisfaction: number = 0.7) => {\n      if (currentTheme) {\n        trackInteraction(currentTheme.id, engagement, satisfaction);\n      }\n    },\n    [currentTheme, trackInteraction]\n  );\n\n  return {\n    generateFromContent,\n    generateFromArticle,\n    recordEngagement,\n    currentTheme,\n  };\n}\n\nexport default AIGlassThemeProvider;\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport { motion } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface NeuralLayer {\n  id: string;\n  name: string;\n  description: string;\n  type: \"conv\" | \"pool\" | \"dense\" | \"inception\" | \"residual\";\n  depth: number;\n  features: string[];\n  strength: number;\n}\n\nexport interface DeepDreamSettings {\n  layers: string[];\n  iterations: number;\n  learningRate: number;\n  octaveScale: number;\n  octaves: number;\n  maxLoss: number;\n  stepSize: number;\n  tileSize: number;\n}\n\nexport interface GlassDeepDreamGlassProps {\n  imageSource?: string;\n  availableLayers?: NeuralLayer[];\n  selectedLayers?: string[];\n  dreamSettings?: Partial<DeepDreamSettings>;\n  compact?: boolean;\n  showHeader?: boolean;\n  showActions?: boolean;\n  showLayerSelector?: boolean;\n  showPreview?: boolean;\n  showSettings?: boolean;\n  enableRealTime?: boolean;\n  enableAnimation?: boolean;\n  enableTiling?: boolean;\n  animationSpeed?: number;\n  canvasWidth?: number;\n  canvasHeight?: number;\n  onDreamGenerated?: (imageUrl: string, settings: DeepDreamSettings) => void;\n  onLayerActivation?: (layerId: string, activation: number[]) => void;\n  onProgress?: (progress: number, iteration: number) => void;\n  className?: string;\n}\n\nconst defaultNeuralLayers: NeuralLayer[] = [\n  {\n    id: \"conv2d_1\",\n    name: \"Early Features\",\n    description: \"Basic edges and textures\",\n    type: \"conv\",\n    depth: 1,\n    features: [\"edges\", \"lines\", \"basic_shapes\"],\n    strength: 0.5,\n  },\n  {\n    id: \"conv2d_5\",\n    name: \"Texture Patterns\",\n    description: \"Complex textures and patterns\",\n    type: \"conv\",\n    depth: 5,\n    features: [\"textures\", \"patterns\", \"repetition\"],\n    strength: 0.7,\n  },\n  {\n    id: \"mixed3a\",\n    name: \"Object Parts\",\n    description: \"Parts of objects and shapes\",\n    type: \"inception\",\n    depth: 10,\n    features: [\"object_parts\", \"curves\", \"complex_shapes\"],\n    strength: 1.0,\n  },\n  {\n    id: \"mixed4a\",\n    name: \"Abstract Objects\",\n    description: \"Abstract object representations\",\n    type: \"inception\",\n    depth: 15,\n    features: [\"abstract_objects\", \"compositions\", \"spatial_relations\"],\n    strength: 1.2,\n  },\n  {\n    id: \"mixed4d\",\n    name: \"Complex Structures\",\n    description: \"Complex architectural structures\",\n    type: \"inception\",\n    depth: 18,\n    features: [\"buildings\", \"architecture\", \"complex_structures\"],\n    strength: 1.5,\n  },\n  {\n    id: \"mixed5b\",\n    name: \"High-Level Concepts\",\n    description: \"Abstract concepts and scenes\",\n    type: \"inception\",\n    depth: 25,\n    features: [\"scenes\", \"concepts\", \"abstract_ideas\"],\n    strength: 2.0,\n  },\n];\n\nconst defaultSettings: DeepDreamSettings = {\n  layers: [\"mixed3a\"],\n  iterations: 20,\n  learningRate: 0.01,\n  octaveScale: 1.4,\n  octaves: 4,\n  maxLoss: 10.0,\n  stepSize: 1.5,\n  tileSize: 512,\n};\n\nconst readableGlassTextStyle: React.CSSProperties = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassDeepDreamGlass = forwardRef<\n  HTMLDivElement,\n  GlassDeepDreamGlassProps\n>(\n  (\n    {\n      imageSource,\n      availableLayers = defaultNeuralLayers,\n      selectedLayers = [\"mixed3a\"],\n      dreamSettings = {},\n      compact = false,\n      showHeader = !compact,\n      showActions = !compact,\n      showLayerSelector = false,\n      showPreview = true,\n      showSettings = false,\n      enableRealTime = false,\n      enableAnimation = true,\n      enableTiling = true,\n      animationSpeed = 1.0,\n      canvasWidth = 800,\n      canvasHeight = 600,\n      onDreamGenerated,\n      onLayerActivation,\n      onProgress,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [isGenerating, setIsGenerating] = useState(false);\n    const [currentIteration, setCurrentIteration] = useState(0);\n    const [progress, setProgress] = useState(0);\n    const [originalImage, setOriginalImage] = useState<string>(\n      imageSource || \"\"\n    );\n    const [dreamedImage, setDreamedImage] = useState<string>(\"\");\n    const [layerActivations, setLayerActivations] = useState<{\n      [key: string]: number[];\n    }>({});\n    const animationFrameRef = useRef(0);\n    const [enableTilingState, setEnableTilingState] = useState(enableTiling);\n    const [enableAnimationState, setEnableAnimationState] =\n      useState(enableAnimation);\n\n    const [settings, setSettings] = useState<DeepDreamSettings>({\n      ...defaultSettings,\n      ...dreamSettings,\n      layers: selectedLayers,\n    });\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const dreamCanvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n\n    const id = useA11yId(\"glass-deep-dream\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Simulate neural network layer activations\n    const simulateLayerActivation = useCallback(\n      (layer: NeuralLayer, imageData: ImageData): number[] => {\n        const { width, height } = imageData;\n        const activations: number[] = [];\n\n        // Simulate different layer types\n        switch (layer.type) {\n          case \"conv\":\n            // Convolutional layers detect local features\n            for (let i = 0; i < 100; i++) {\n              const x = Math.floor(Math.random() * width);\n              const y = Math.floor(Math.random() * height);\n              const pixelIndex = (y * width + x) * 4;\n\n              const r = imageData.data[pixelIndex];\n              const g = imageData.data[pixelIndex + 1];\n              const b = imageData.data[pixelIndex + 2];\n\n              const activation =\n                Math.tanh((r + g + b) / (255 * 3) - 0.5) * layer.strength;\n              activations.push(activation);\n            }\n            break;\n\n          case \"inception\":\n            // Inception layers detect complex patterns\n            for (let i = 0; i < 50; i++) {\n              const activation = (Math.random() - 0.5) * layer.strength * 2;\n              activations.push(Math.tanh(activation));\n            }\n            break;\n\n          default:\n            // Default activation pattern\n            for (let i = 0; i < 64; i++) {\n              activations.push((Math.random() - 0.5) * layer.strength);\n            }\n        }\n\n        return activations;\n      },\n      []\n    );\n\n    // Apply deep dream effect\n    const applyDeepDream = useCallback(\n      (\n        imageData: ImageData,\n        layer: NeuralLayer,\n        intensity: number\n      ): ImageData => {\n        const data = new Uint8ClampedArray(imageData.data);\n        const { width, height } = imageData;\n\n        // Generate dream patterns based on layer type\n        for (let y = 0; y < height; y++) {\n          for (let x = 0; x < width; x++) {\n            const index = (y * width + x) * 4;\n\n            let r = data[index];\n            let g = data[index + 1];\n            let b = data[index + 2];\n\n            // Apply different effects based on layer type\n            switch (layer.type) {\n              case \"conv\":\n                // Edge enhancement and texture amplification\n                const edgeX = x / width - 0.5;\n                const edgeY = y / height - 0.5;\n                const edgeStrength = Math.sqrt(edgeX * edgeX + edgeY * edgeY);\n\n                const enhancement =\n                  Math.sin(edgeStrength * 20) * intensity * layer.strength * 50;\n                r = Math.max(0, Math.min(255, r + enhancement));\n                g = Math.max(0, Math.min(255, g + enhancement));\n                b = Math.max(0, Math.min(255, b + enhancement));\n                break;\n\n              case \"inception\":\n                // Complex pattern generation\n                const spiralX = Math.cos((x + y) * 0.05) * Math.sin(x * 0.02);\n                const spiralY = Math.sin((x + y) * 0.05) * Math.cos(y * 0.02);\n                const spiralIntensity =\n                  (spiralX + spiralY) * intensity * layer.strength * 30;\n\n                r = Math.max(0, Math.min(255, r + spiralIntensity));\n                g = Math.max(0, Math.min(255, g + spiralIntensity * 0.8));\n                b = Math.max(0, Math.min(255, b + spiralIntensity * 0.6));\n                break;\n\n              case \"dense\":\n                // Global feature amplification\n                const globalPattern = Math.sin(x * 0.01) * Math.cos(y * 0.01);\n                const amplification =\n                  globalPattern * intensity * layer.strength * 20;\n\n                r = Math.max(0, Math.min(255, r * (1 + amplification / 255)));\n                g = Math.max(0, Math.min(255, g * (1 + amplification / 255)));\n                b = Math.max(0, Math.min(255, b * (1 + amplification / 255)));\n                break;\n\n              default:\n                // Default pattern\n                const wave = Math.sin(x * 0.03) * Math.cos(y * 0.03);\n                const modification = wave * intensity * layer.strength * 15;\n\n                r = Math.max(0, Math.min(255, r + modification));\n                g = Math.max(0, Math.min(255, g + modification));\n                b = Math.max(0, Math.min(255, b + modification));\n            }\n\n            data[index] = r;\n            data[index + 1] = g;\n            data[index + 2] = b;\n          }\n        }\n\n        return new ImageData(data, width, height);\n      },\n      []\n    );\n\n    // Generate deep dream\n    const generateDeepDream = useCallback(async () => {\n      if (!originalImage) return;\n\n      setIsGenerating(true);\n      setCurrentIteration(0);\n      setProgress(0);\n      play(\"processing\");\n\n      const canvas = canvasRef.current;\n      const dreamCanvas = dreamCanvasRef.current;\n\n      if (!canvas || !dreamCanvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      const dreamCtx = dreamCanvas.getContext(\"2d\");\n\n      if (!ctx || !dreamCtx) return;\n\n      // Load original image\n      const img = new Image();\n      img.onload = async () => {\n        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n        let currentImageData = ctx.getImageData(\n          0,\n          0,\n          canvas.width,\n          canvas.height\n        );\n\n        // Process through multiple octaves\n        for (let octave = 0; octave < settings.octaves; octave++) {\n          // Scale image for current octave\n          const scale = Math.pow(settings.octaveScale, octave);\n          const octaveWidth = Math.floor(canvas.width / scale);\n          const octaveHeight = Math.floor(canvas.height / scale);\n\n          // Process iterations for this octave\n          for (\n            let iteration = 0;\n            iteration < Math.floor(settings.iterations / settings.octaves);\n            iteration++\n          ) {\n            const totalIteration =\n              octave * Math.floor(settings.iterations / settings.octaves) +\n              iteration;\n            setCurrentIteration(totalIteration);\n            const pct = (totalIteration / settings.iterations) * 100;\n            setProgress(pct);\n            onProgress?.(pct, totalIteration);\n\n            // Apply deep dream to selected layers\n            for (const layerId of settings.layers) {\n              const layer = availableLayers.find((l) => l.id === layerId);\n              if (layer) {\n                // Simulate layer activation\n                const activations = simulateLayerActivation(\n                  layer,\n                  currentImageData\n                );\n                setLayerActivations((prev: any) => ({\n                  ...prev,\n                  [layerId]: activations,\n                }));\n                onLayerActivation?.(layerId, activations);\n\n                // Apply dream effect\n                const intensity = settings.learningRate * settings.stepSize;\n                currentImageData = applyDeepDream(\n                  currentImageData,\n                  layer,\n                  intensity\n                );\n              }\n            }\n\n            // Update dream canvas\n            dreamCtx.putImageData(currentImageData, 0, 0);\n\n            // Add delay for animation\n            await new Promise((resolve) =>\n              setTimeout(resolve, ANIMATION.DURATION.fast / animationSpeed)\n            );\n          }\n        }\n\n        const dreamUrl = dreamCanvas.toDataURL();\n        setDreamedImage(dreamUrl);\n        onDreamGenerated?.(dreamUrl, settings);\n\n        setIsGenerating(false);\n        play(\"success\");\n      };\n\n      img.src = originalImage;\n    }, [\n      originalImage,\n      settings,\n      availableLayers,\n      simulateLayerActivation,\n      applyDeepDream,\n      animationSpeed,\n      onProgress,\n      onLayerActivation,\n      onDreamGenerated,\n      play,\n    ]);\n\n    // Animation loop\n    const animateDeepDream = useCallback(() => {\n      if (!enableAnimation || isGenerating) return;\n\n      animationFrameRef.current += 1;\n\n      const canvas = dreamCanvasRef.current;\n      if (canvas && dreamedImage) {\n        const ctx = canvas.getContext(\"2d\");\n        if (ctx) {\n          const img = new Image();\n          img.onload = () => {\n            // Create animated effect\n            ctx.save();\n            ctx.globalAlpha = 0.1;\n            ctx.translate(canvas.width / 2, canvas.height / 2);\n            ctx.rotate(animationFrameRef.current * 0.01);\n            ctx.drawImage(img, -canvas.width / 2, -canvas.height / 2);\n            ctx.restore();\n          };\n          img.src = dreamedImage;\n        }\n      }\n\n      animationRef.current = requestAnimationFrame(animateDeepDream);\n    }, [enableAnimation, isGenerating, dreamedImage]);\n\n    // Handle layer selection\n    const toggleLayer = useCallback(\n      (layerId: string) => {\n        setSettings((prev: any) => {\n          const layers = prev.layers.includes(layerId)\n            ? prev.layers.filter((id: any) => id !== layerId)\n            : [...prev.layers, layerId];\n          return { ...prev, layers };\n        });\n        play(\"select\");\n      },\n      [play]\n    );\n\n    // Initialize\n    useEffect(() => {\n      if (!enableAnimation || isGenerating) return;\n\n      animationRef.current = requestAnimationFrame(animateDeepDream);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [enableAnimation, isGenerating, animateDeepDream]);\n\n    useEffect(() => {\n      if (enableRealTime && originalImage) {\n        const debounceTimer = setTimeout(() => {\n          generateDeepDream();\n        }, 1000);\n        return () => clearTimeout(debounceTimer);\n      }\n    }, [settings, enableRealTime, originalImage, generateDeepDream]);\n\n    const LayerSelector = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Neural Layers\n        </h4>\n\n        <div className=\"glass-space-y-2\">\n          {availableLayers.map((layer) => (\n            <motion.div\n              key={layer.id}\n              className={`\n                p-3 rounded-lg border cursor-pointer transition-all duration-[${ANIMATION.DURATION.fast}ms]\n                ${\n                  settings.layers.includes(layer.id)\n                    ? \"border-blue-400 bg-blue-400/20\"\n                    : \"border-white/20 hover:border-white/40 bg-white/5\"\n                }\n              `}\n              whileHover={shouldAnimate ? { scale: 1.01 } : {}}\n              whileTap={shouldAnimate ? { scale: 0.99 } : {}}\n              onClick={() => toggleLayer(layer.id)}\n            >\n              <div className=\"glass-flex glass-items-start glass-justify-between\">\n                <div className=\"glass-flex-1\">\n                  <div className=\"glass-flex glass-items-center glass-space-x-2 glass-mb-1\">\n                    <h5 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                      {layer.name}\n                    </h5>\n                    <span\n                      className={`\n                      px-2 py-0.5 rounded text-xs font-medium\n                      ${\n                        layer.type === \"conv\"\n                          ? \"bg-green-500/20 text-green-300\"\n                          : layer.type === \"inception\"\n                            ? \"bg-purple-500/20 text-purple-300\"\n                            : layer.type === \"dense\"\n                              ? \"bg-blue-500/20 text-blue-300\"\n                              : \"bg-gray-500/20 text-gray-300\"\n                      }\n                    `}\n                    >\n                      {layer.type}\n                    </span>\n                  </div>\n\n                  <p className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mb-2\">\n                    {layer.description}\n                  </p>\n\n                  <div className=\"glass-flex glass-items-center glass-space-x-4 glass-text-xs glass-text-primary-glass-opacity-50\">\n                    <span>Depth: {layer.depth}</span>\n                    <span>Strength: {layer.strength.toFixed(1)}</span>\n                  </div>\n\n                  <div className=\"glass-flex glass-flex-wrap glass-gap-1 glass-mt-2\">\n                    {layer.features.slice(0, 3).map((feature: any) => (\n                      <span\n                        key={feature}\n                        className=\"glass-px-1.5 glass-py-0.5 glass-surface-subtle/10 glass-text-primary-glass-opacity-60 glass-radius glass-text-xs\"\n                      >\n                        {feature.replace(\"_\", \" \")}\n                      </span>\n                    ))}\n                  </div>\n                </div>\n\n                {settings.layers.includes(layer.id) && (\n                  <div className=\"glass-text-primary glass-ml-2\">\u2713</div>\n                )}\n              </div>\n\n              {/* Layer activation visualization */}\n              {layerActivations[layer.id] && (\n                <div className=\"glass-mt-2 glass-pt-2 glass-border-t glass-border-white/10\">\n                  <div className=\"glass-flex glass-items-center glass-space-x-1\">\n                    {layerActivations[layer.id]\n                      .slice(0, 20)\n                      .map((activation, i) => (\n                        <div\n                          key={i}\n                          className=\"glass-w-1 glass-surface-blue glass-radius\"\n                          style={{\n                            height: `${Math.abs(activation) * 10 + 2}px`,\n                            opacity: Math.abs(activation),\n                          }}\n                        />\n                      ))}\n                  </div>\n                </div>\n              )}\n            </motion.div>\n          ))}\n        </div>\n      </div>\n    );\n\n    const SettingsPanel = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Dream Settings\n        </h4>\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Iterations: {settings.iterations}\n            </label>\n            <input\n              type=\"range\"\n              min=\"5\"\n              max=\"100\"\n              value={settings.iterations}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  iterations: parseInt(e.target.value),\n                }))\n              }\n              aria-label={`Iterations: ${settings.iterations}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Learning Rate: {settings.learningRate.toFixed(3)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"0.001\"\n              max=\"0.1\"\n              step=\"0.001\"\n              value={settings.learningRate}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  learningRate: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Learning Rate: ${settings.learningRate.toFixed(3)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Octaves: {settings.octaves}\n            </label>\n            <input\n              type=\"range\"\n              min=\"1\"\n              max=\"8\"\n              value={settings.octaves}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  octaves: parseInt(e.target.value),\n                }))\n              }\n              aria-label={`Octaves: ${settings.octaves}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Octave Scale: {settings.octaveScale.toFixed(1)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"1.1\"\n              max=\"2.0\"\n              step=\"0.1\"\n              value={settings.octaveScale}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  octaveScale: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Octave Scale: ${settings.octaveScale.toFixed(1)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Step Size: {settings.stepSize.toFixed(1)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"0.5\"\n              max=\"5.0\"\n              step=\"0.1\"\n              value={settings.stepSize}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  stepSize: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Step Size: ${settings.stepSize.toFixed(1)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Max Loss: {settings.maxLoss.toFixed(1)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"1.0\"\n              max=\"50.0\"\n              step=\"1.0\"\n              value={settings.maxLoss}\n              onChange={(e) =>\n                setSettings((prev: any) => ({\n                  ...prev,\n                  maxLoss: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Max Loss: ${settings.maxLoss.toFixed(1)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-space-x-4\">\n          <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n            <input\n              type=\"checkbox\"\n              checked={enableTilingState}\n              onChange={(e) => setEnableTilingState(e.target.checked)}\n              className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n            />\n            <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n              Enable Tiling\n            </span>\n          </label>\n\n          <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n            <input\n              type=\"checkbox\"\n              checked={enableAnimationState}\n              onChange={(e) => setEnableAnimationState(e.target.checked)}\n              className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n            />\n            <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n              Animate Result\n            </span>\n          </label>\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight: \"100%\",\n          minWidth: 0,\n          height: compact ? \"100%\" : undefined,\n          overflow: compact ? \"hidden\" : undefined,\n        }}\n        className={`glass-deep-dream-glass ${compact ? \"glass-p-3 glass-space-y-3\" : \"glass-p-4 glass-space-y-4\"} glass-max-w-full glass-overflow-auto ${className}`}\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-min-w-0\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90\">\n                DeepDream Glass\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                Neural network-powered surreal image generation\n              </p>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-space-x-2\">\n              {enableRealTime && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span className=\"glass-text-xs\">Real-time</span>\n                </div>\n              )}\n              {isGenerating && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-xs\">Dreaming...</span>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Preview area */}\n        {showPreview && (\n          <div\n            className={`glass-grid ${compact ? \"glass-grid-cols-2 glass-gap-3\" : \"glass-grid-cols-1 lg:glass-grid-cols-2 glass-gap-4\"}`}\n            style={\n              compact\n                ? { gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\", gap: 10 }\n                : undefined\n            }\n          >\n            {/* Original */}\n            <div className=\"glass-space-y-2\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Original\n              </h4>\n              <div className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-overflow-hidden\">\n                <canvas\n                  ref={canvasRef}\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n                {!originalImage && (\n                  <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-text-primary-glass-opacity-50\">\n                    <div className=\"glass-text-center\">\n                      <div className=\"glass-text-4xl glass-mb-2\">\uD83D\uDDBC\uFE0F</div>\n                      <p>No image loaded</p>\n                    </div>\n                  </div>\n                )}\n              </div>\n            </div>\n\n            {/* DeepDream result */}\n            <div className=\"glass-space-y-2\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                DeepDream\n              </h4>\n              <div className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-overflow-hidden\">\n                <canvas\n                  ref={dreamCanvasRef}\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n                {isGenerating && (\n                  <div className=\"glass-absolute glass-inset-0 glass-surface-dark/50 glass-flex glass-items-center glass-justify-center\">\n                    <div className=\"glass-text-center glass-text-primary\">\n                      <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-white glass-border-t-transparent glass-radius-full glass-animate-spin glass-mx-auto glass-mb-2\" />\n                      <div className=\"glass-text-sm\">\n                        Iteration {currentIteration}\n                      </div>\n                      <div className=\"glass-text-xs glass-mt-1\">\n                        {Math.round(progress)}% complete\n                      </div>\n                    </div>\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Progress indicator */}\n        {isGenerating && (\n          <div\n            className={`\n            p-3 rounded-lg border border-blue-400/30\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n          `}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                Generating Deep Dream...\n              </span>\n              <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                {Math.round(progress)}%\n              </span>\n            </div>\n            <div className=\"glass-w-full glass-surface-subtle/20 glass-radius-full glass-h-2\">\n              <motion.div\n                className=\"glass-surface-blue glass-h-2 glass-radius-full\"\n                animate={{ width: `${progress}%` }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : { duration: ANIMATION.DURATION.normal / 1000 }\n                }\n              />\n            </div>\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mt-1 glass-text-xs glass-text-primary-glass-opacity-60\">\n              <span>\n                Iteration: {currentIteration} / {settings.iterations}\n              </span>\n              <span>Layers: {settings.layers.length}</span>\n            </div>\n          </div>\n        )}\n\n        {(showLayerSelector || showSettings) && (\n          <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-2 glass-gap-4\">\n            {showLayerSelector && <LayerSelector />}\n            {showSettings && <SettingsPanel />}\n          </div>\n        )}\n\n        {/* Action buttons */}\n        {showActions && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-pt-4 glass-border-t glass-border-white/10\">\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              <input\n                type=\"file\"\n                accept=\"image/*\"\n                onChange={(e) => {\n                  const file = e.target.files?.[0];\n                  if (file) {\n                    const url = URL.createObjectURL(file);\n                    setOriginalImage(url);\n                    play(\"upload\");\n\n                    // Load image to canvas\n                    const canvas = canvasRef.current;\n                    if (canvas) {\n                      const ctx = canvas.getContext(\"2d\");\n                      if (ctx) {\n                        const img = new Image();\n                        img.onload = () => {\n                          ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n                        };\n                        img.src = url;\n                      }\n                    }\n                  }\n                }}\n                className=\"glass-hidden\"\n                id=\"dream-image-upload\"\n              />\n              <motion.label\n                htmlFor=\"dream-image-upload\"\n                className=\"glass-px-4 glass-py-2 glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-cursor-pointer glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              >\n                Upload Image\n              </motion.label>\n\n              <motion.button\n                className=\"glass-px-4 glass-py-2 glass-border glass-border-white/30 hover:glass-border-white/50 glass-text-primary-glass-opacity-80 glass-radius-lg glass-text-sm glass-transition-colors disabled:glass-opacity-50\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                onClick={generateDeepDream}\n                disabled={\n                  isGenerating || !originalImage || settings.layers.length === 0\n                }\n              >\n                {isGenerating ? \"Generating...\" : \"Generate Dream\"}\n              </motion.button>\n            </div>\n\n            {dreamedImage && (\n              <motion.a\n                href={dreamedImage}\n                download=\"deep-dream.png\"\n                className=\"glass-px-4 glass-py-2 glass-surface-green hover:glass-surface-green glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              >\n                Download Dream\n              </motion.a>\n            )}\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassDeepDreamGlass.displayName = \"GlassDeepDreamGlass\";\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport { motion } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface GANModel {\n  id: string;\n  name: string;\n  description: string;\n  type:\n    | \"dcgan\"\n    | \"stylegan\"\n    | \"cyclegan\"\n    | \"pix2pix\"\n    | \"biggan\"\n    | \"progressive\";\n  category:\n    | \"faces\"\n    | \"art\"\n    | \"landscapes\"\n    | \"objects\"\n    | \"general\"\n    | \"style_transfer\";\n  resolution: number;\n  latentDim: number;\n  trained: boolean;\n}\n\nexport interface GenerationParams {\n  seed: number;\n  truncation: number;\n  styleStrength: number;\n  noiseStrength: number;\n  batchSize: number;\n  interpolationSteps: number;\n}\n\nexport interface TrainingConfig {\n  epochs: number;\n  batchSize: number;\n  learningRate: number;\n  beta1: number;\n  beta2: number;\n  discriminatorSteps: number;\n  generatorSteps: number;\n}\n\nexport interface GlassGANGeneratorProps {\n  availableModels?: GANModel[];\n  selectedModel?: string;\n  generationParams?: Partial<GenerationParams>;\n  trainingConfig?: Partial<TrainingConfig>;\n  compact?: boolean;\n  showHeader?: boolean;\n  showActions?: boolean;\n  showModelSelector?: boolean;\n  showGenerationControls?: boolean;\n  showTrainingControls?: boolean;\n  showLatentSpace?: boolean;\n  showProgress?: boolean;\n  enableInterpolation?: boolean;\n  enableRealTime?: boolean;\n  maxGenerations?: number;\n  canvasWidth?: number;\n  canvasHeight?: number;\n  onModelSelect?: (modelId: string) => void;\n  onGenerate?: (images: string[], params: GenerationParams) => void;\n  onTrainingProgress?: (\n    epoch: number,\n    loss: { generator: number; discriminator: number }\n  ) => void;\n  className?: string;\n}\n\nconst defaultModels: GANModel[] = [\n  {\n    id: \"stylegan2-faces\",\n    name: \"StyleGAN2 Faces\",\n    description: \"High-quality human face generation\",\n    type: \"stylegan\",\n    category: \"faces\",\n    resolution: 1024,\n    latentDim: 512,\n    trained: true,\n  },\n  {\n    id: \"dcgan-art\",\n    name: \"DCGAN Art\",\n    description: \"Abstract art generation\",\n    type: \"dcgan\",\n    category: \"art\",\n    resolution: 256,\n    latentDim: 100,\n    trained: true,\n  },\n  {\n    id: \"biggan-objects\",\n    name: \"BigGAN Objects\",\n    description: \"Conditional object generation\",\n    type: \"biggan\",\n    category: \"objects\",\n    resolution: 512,\n    latentDim: 128,\n    trained: true,\n  },\n  {\n    id: \"cyclegan-style\",\n    name: \"CycleGAN Style Transfer\",\n    description: \"Unpaired image-to-image translation\",\n    type: \"cyclegan\",\n    category: \"style_transfer\",\n    resolution: 256,\n    latentDim: 256,\n    trained: true,\n  },\n  {\n    id: \"progressive-landscapes\",\n    name: \"Progressive Landscapes\",\n    description: \"Landscape scene generation\",\n    type: \"progressive\",\n    category: \"landscapes\",\n    resolution: 512,\n    latentDim: 256,\n    trained: true,\n  },\n  {\n    id: \"stylegan3-general\",\n    name: \"StyleGAN3 General\",\n    description: \"General purpose image generation\",\n    type: \"stylegan\",\n    category: \"general\",\n    resolution: 512,\n    latentDim: 512,\n    trained: false,\n  },\n];\n\nconst defaultGenerationParams: GenerationParams = {\n  seed: 42,\n  truncation: 0.7,\n  styleStrength: 1.0,\n  noiseStrength: 0.5,\n  batchSize: 4,\n  interpolationSteps: 10,\n};\n\nconst defaultTrainingConfig: TrainingConfig = {\n  epochs: 100,\n  batchSize: 32,\n  learningRate: 0.0002,\n  beta1: 0.5,\n  beta2: 0.999,\n  discriminatorSteps: 1,\n  generatorSteps: 1,\n};\n\nconst readableGlassTextStyle = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassGANGenerator = forwardRef<\n  HTMLDivElement,\n  GlassGANGeneratorProps\n>(\n  (\n    {\n      availableModels = defaultModels,\n      selectedModel = \"stylegan2-faces\",\n      generationParams = {},\n      trainingConfig = {},\n      compact = false,\n      showHeader = !compact,\n      showActions = !compact,\n      showModelSelector = true,\n      showGenerationControls = false,\n      showTrainingControls = false,\n      showLatentSpace = false,\n      showProgress = true,\n      enableInterpolation = true,\n      enableRealTime = false,\n      maxGenerations = 16,\n      canvasWidth = 256,\n      canvasHeight = 256,\n      onModelSelect,\n      onGenerate,\n      onTrainingProgress,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [isGenerating, setIsGenerating] = useState(false);\n    const [isTraining, setIsTraining] = useState(false);\n    const [currentModel, setCurrentModel] = useState(selectedModel);\n    const [generatedImages, setGeneratedImages] = useState<string[]>([]);\n    const [latentVectors, setLatentVectors] = useState<number[][]>([]);\n    const [trainingProgress, setTrainingProgress] = useState({\n      epoch: 0,\n      generatorLoss: 0,\n      discriminatorLoss: 0,\n    });\n    const [interpolationImages, setInterpolationImages] = useState<string[]>(\n      []\n    );\n    const [generationProgress, setGenerationProgress] = useState(0);\n\n    const [params, setParams] = useState<GenerationParams>({\n      ...defaultGenerationParams,\n      ...generationParams,\n    });\n\n    const [training, setTraining] = useState<TrainingConfig>({\n      ...defaultTrainingConfig,\n      ...trainingConfig,\n    });\n\n    const canvasRefs = useRef<(HTMLCanvasElement | null)[]>([]);\n    const latentSpaceCanvasRef = useRef<HTMLCanvasElement>(null);\n    const interpolationCanvasRef = useRef<HTMLCanvasElement>(null);\n\n    const id = useA11yId(\"glass-gan-generator\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Get selected model\n    const model =\n      availableModels.find((m) => m.id === currentModel) || availableModels[0];\n\n    // Generate random latent vector\n    const generateLatentVector = useCallback((dim: number): number[] => {\n      return Array.from({ length: dim }, () => (Math.random() - 0.5) * 2);\n    }, []);\n\n    // Simulate GAN generation\n    const generateGANImage = useCallback(\n      (latentVector: number[], model: GANModel, seed: number): string => {\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = model.resolution;\n        canvas.height = model.resolution;\n        const ctx = canvas.getContext(\"2d\");\n\n        if (!ctx) return \"\";\n\n        // Create different patterns based on GAN type\n        const imageData = ctx.createImageData(canvas.width, canvas.height);\n        const data = imageData.data;\n\n        switch (model.type) {\n          case \"stylegan\":\n            // StyleGAN-like high quality patterns\n            for (let y = 0; y < canvas.height; y++) {\n              for (let x = 0; x < canvas.width; x++) {\n                const i = (y * canvas.width + x) * 4;\n\n                // Use latent vector to influence generation\n                const latentInfluence =\n                  latentVector.slice(0, 8).reduce((sum, val) => sum + val, 0) /\n                  8;\n\n                const nx = (x / canvas.width - 0.5) * 2;\n                const ny = (y / canvas.height - 0.5) * 2;\n\n                if (model.category === \"faces\") {\n                  // Face-like patterns\n                  const faceShape = Math.exp(-(nx * nx + ny * ny * 0.8) * 2);\n                  const detail = Math.sin(nx * 10) * Math.cos(ny * 10) * 0.1;\n\n                  data[i] = Math.floor(\n                    (0.8 + latentInfluence * 0.2 + detail) * faceShape * 255\n                  );\n                  data[i + 1] = Math.floor(\n                    (0.7 + latentInfluence * 0.3 + detail) * faceShape * 255\n                  );\n                  data[i + 2] = Math.floor(\n                    (0.6 + latentInfluence * 0.4 + detail) * faceShape * 255\n                  );\n                  data[i + 3] = 255;\n                } else {\n                  // General patterns\n                  const pattern =\n                    Math.sin(nx * 5 + latentInfluence) *\n                    Math.cos(ny * 5 + latentInfluence);\n                  data[i] = Math.floor((pattern + 1) * 128);\n                  data[i + 1] = Math.floor((Math.sin(pattern * 2) + 1) * 128);\n                  data[i + 2] = Math.floor((Math.cos(pattern * 3) + 1) * 128);\n                  data[i + 3] = 255;\n                }\n              }\n            }\n            break;\n\n          case \"dcgan\":\n            // DCGAN-like artistic patterns\n            for (let y = 0; y < canvas.height; y++) {\n              for (let x = 0; x < canvas.width; x++) {\n                const i = (y * canvas.width + x) * 4;\n\n                const latentSum = latentVector\n                  .slice(0, 5)\n                  .reduce((sum, val) => sum + val, 0);\n                const freq = 0.02 * (1 + latentSum * 0.1);\n\n                const r = Math.sin(x * freq) * Math.cos(y * freq);\n                const g = Math.sin((x + y) * freq * 0.8);\n                const b = Math.cos((x - y) * freq * 1.2);\n\n                data[i] = Math.floor((r + 1) * 128);\n                data[i + 1] = Math.floor((g + 1) * 128);\n                data[i + 2] = Math.floor((b + 1) * 128);\n                data[i + 3] = 255;\n              }\n            }\n            break;\n\n          case \"biggan\":\n            // BigGAN-like class-conditional patterns\n            for (let y = 0; y < canvas.height; y++) {\n              for (let x = 0; x < canvas.width; x++) {\n                const i = (y * canvas.width + x) * 4;\n\n                const classVector = latentVector.slice(-10);\n                const dominantClass = Math.floor(Math.abs(classVector[0]) * 10);\n\n                const colors = [\n                  [255, 100, 100],\n                  [100, 255, 100],\n                  [100, 100, 255],\n                  [255, 255, 100],\n                  [255, 100, 255],\n                  [100, 255, 255],\n                  [200, 150, 100],\n                  [150, 100, 200],\n                  [100, 200, 150],\n                  [180, 180, 180],\n                ];\n\n                const color = colors[dominantClass] || [128, 128, 128];\n                const noise = (Math.random() - 0.5) * 50;\n\n                data[i] = Math.max(0, Math.min(255, color[0] + noise));\n                data[i + 1] = Math.max(0, Math.min(255, color[1] + noise));\n                data[i + 2] = Math.max(0, Math.min(255, color[2] + noise));\n                data[i + 3] = 255;\n              }\n            }\n            break;\n\n          default:\n            // Default pattern\n            for (let y = 0; y < canvas.height; y++) {\n              for (let x = 0; x < canvas.width; x++) {\n                const i = (y * canvas.width + x) * 4;\n\n                const pattern = latentVector\n                  .slice(0, 3)\n                  .reduce((sum, val, idx) => {\n                    return sum + val * Math.sin((x + y) * 0.01 * (idx + 1));\n                  }, 0);\n\n                data[i] = Math.floor((Math.sin(pattern) + 1) * 128);\n                data[i + 1] = Math.floor((Math.cos(pattern * 1.1) + 1) * 128);\n                data[i + 2] = Math.floor((Math.sin(pattern * 0.9) + 1) * 128);\n                data[i + 3] = 255;\n              }\n            }\n        }\n\n        ctx.putImageData(imageData, 0, 0);\n        return canvas.toDataURL();\n      },\n      []\n    );\n\n    // Generate batch of images\n    const generateImages = useCallback(async () => {\n      if (!model.trained) {\n        play(\"error\");\n        return;\n      }\n\n      setIsGenerating(true);\n      setGenerationProgress(0);\n      play(\"processing\");\n\n      const newImages: string[] = [];\n      const newLatentVectors: number[][] = [];\n\n      for (let i = 0; i < params.batchSize; i++) {\n        setGenerationProgress((i / params.batchSize) * 100);\n\n        // Generate latent vector\n        const latentVector = generateLatentVector(model.latentDim);\n\n        // Apply truncation trick\n        const truncatedVector = latentVector.map(\n          (val: any) => val * params.truncation\n        );\n\n        // Generate image\n        const imageUrl = generateGANImage(\n          truncatedVector,\n          model,\n          params.seed + i\n        );\n\n        newImages.push(imageUrl);\n        newLatentVectors.push(truncatedVector);\n\n        // Add delay for realistic generation time\n        await new Promise((resolve) =>\n          setTimeout(resolve, ANIMATION.DURATION.fast * 1.3)\n        );\n      }\n\n      setGeneratedImages((prev: any) =>\n        [...newImages, ...prev].slice(0, maxGenerations)\n      );\n      setLatentVectors((prev: any) =>\n        [...newLatentVectors, ...prev].slice(0, maxGenerations)\n      );\n      setGenerationProgress(100);\n\n      onGenerate?.(newImages, params);\n      setIsGenerating(false);\n      play(\"success\");\n    }, [\n      model,\n      params,\n      generateLatentVector,\n      generateGANImage,\n      maxGenerations,\n      onGenerate,\n      play,\n    ]);\n\n    // Generate interpolation between two latent vectors\n    const generateInterpolation = useCallback(async () => {\n      if (latentVectors.length < 2) return;\n\n      const vec1 = latentVectors[0];\n      const vec2 = latentVectors[1];\n      const steps = params.interpolationSteps;\n\n      const interpolatedImages: string[] = [];\n\n      for (let i = 0; i <= steps; i++) {\n        const t = i / steps;\n        const interpolatedVector = vec1.map(\n          (val, idx) => val * (1 - t) + vec2[idx] * t\n        );\n\n        const imageUrl = generateGANImage(\n          interpolatedVector,\n          model,\n          params.seed\n        );\n        interpolatedImages.push(imageUrl);\n      }\n\n      setInterpolationImages(interpolatedImages);\n    }, [\n      latentVectors,\n      params.interpolationSteps,\n      params.seed,\n      generateGANImage,\n      model,\n    ]);\n\n    // Simulate model training\n    const trainModel = useCallback(async () => {\n      if (!model) return;\n\n      setIsTraining(true);\n      play(\"processing\");\n\n      for (let epoch = 0; epoch < training.epochs; epoch++) {\n        // Simulate training step\n        const generatorLoss = 1.0 + Math.random() * 0.5 - epoch * 0.01;\n        const discriminatorLoss = 0.8 + Math.random() * 0.3 - epoch * 0.005;\n\n        setTrainingProgress({\n          epoch: epoch + 1,\n          generatorLoss: Math.max(0.1, generatorLoss),\n          discriminatorLoss: Math.max(0.1, discriminatorLoss),\n        });\n\n        onTrainingProgress?.(epoch + 1, {\n          generator: generatorLoss,\n          discriminator: discriminatorLoss,\n        });\n\n        await new Promise((resolve) =>\n          setTimeout(resolve, ANIMATION.DURATION.fast)\n        );\n      }\n\n      // Mark model as trained\n      const modelIndex = availableModels.findIndex(\n        (m) => m.id === currentModel\n      );\n      if (modelIndex !== -1) {\n        availableModels[modelIndex].trained = true;\n      }\n\n      setIsTraining(false);\n      play(\"success\");\n    }, [\n      model,\n      training.epochs,\n      currentModel,\n      availableModels,\n      onTrainingProgress,\n      play,\n    ]);\n\n    // Visualize latent space\n    const visualizeLatentSpace = useCallback(() => {\n      const canvas = latentSpaceCanvasRef.current;\n      if (!canvas || latentVectors.length === 0) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Draw latent vectors as points in 2D projection\n      latentVectors.slice(0, 10).forEach((vector, idx) => {\n        // Project high-dimensional vector to 2D using first two dimensions\n        const x = ((vector[0] + 2) / 4) * canvas.width;\n        const y = ((vector[1] + 2) / 4) * canvas.height;\n\n        ctx.fillStyle = `hsl(${idx * 36}, 70%, 60%)`;\n        ctx.beginPath();\n        ctx.arc(x, y, 5, 0, Math.PI * 2);\n        ctx.fill();\n\n        // Draw connections between nearby points\n        latentVectors.slice(idx + 1, 10).forEach((otherVector, otherIdx) => {\n          const distance = Math.sqrt(\n            Math.pow(vector[0] - otherVector[0], 2) +\n              Math.pow(vector[1] - otherVector[1], 2)\n          );\n\n          if (distance < 1.0) {\n            const ox = ((otherVector[0] + 2) / 4) * canvas.width;\n            const oy = ((otherVector[1] + 2) / 4) * canvas.height;\n\n            ctx.strokeStyle = `color-mix(in srgb, var(--glass-white) ${30 * (1 - distance)}%, transparent)`;\n            ctx.lineWidth = 1;\n            ctx.beginPath();\n            ctx.moveTo(x, y);\n            ctx.lineTo(ox, oy);\n            ctx.stroke();\n          }\n        });\n      });\n    }, [latentVectors]);\n\n    // Handle model selection\n    const handleModelSelect = useCallback(\n      (modelId: string) => {\n        setCurrentModel(modelId);\n        onModelSelect?.(modelId);\n        play(\"select\");\n      },\n      [onModelSelect, play]\n    );\n\n    // Real-time generation\n    useEffect(() => {\n      if (enableRealTime && model.trained) {\n        const interval = setInterval(() => {\n          if (!isGenerating) {\n            generateImages();\n          }\n        }, 5000);\n\n        return () => clearInterval(interval);\n      }\n    }, [enableRealTime, model.trained, isGenerating, generateImages]);\n\n    // Update latent space visualization\n    useEffect(() => {\n      visualizeLatentSpace();\n    }, [latentVectors, visualizeLatentSpace]);\n\n    const ModelSelector = () => (\n      <div className={compact ? \"glass-space-y-3\" : \"glass-space-y-4\"}>\n        {!compact && (\n          <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n            GAN Models\n          </h4>\n        )}\n\n        <div\n          className={`glass-grid ${compact ? \"glass-grid-cols-1 glass-gap-2\" : \"glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-3\"}`}\n          style={compact ? { gridTemplateColumns: \"1fr\", gap: 8 } : undefined}\n        >\n          {availableModels.map((ganModel) => (\n            <motion.div\n              key={ganModel.id}\n              className={`\n                glass-p-3 glass-radius-lg glass-border glass-cursor-pointer glass-transition-all duration-[${ANIMATION.DURATION.fast}ms]\n                ${\n                  currentModel === ganModel.id\n                    ? \"glass-border-blue glass-surface-blue/20\"\n                    : \"glass-border-white/20 hover:glass-border-white/40 glass-surface-subtle/5\"\n                }\n              `}\n              whileHover={shouldAnimate ? { scale: 1.01 } : {}}\n              whileTap={shouldAnimate ? { scale: 0.99 } : {}}\n              onClick={() => handleModelSelect(ganModel.id)}\n            >\n              <div className=\"glass-flex glass-items-start glass-justify-between\">\n                <div className=\"glass-flex-1\">\n                  <div className=\"glass-flex glass-items-center glass-space-x-2 glass-mb-1\">\n                    <h5 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                      {ganModel.name}\n                    </h5>\n                    {ganModel.trained ? (\n                      <span className=\"glass-px-2 glass-py-0.5 glass-surface-green/20 glass-text-secondary glass-radius glass-text-xs glass-font-medium\">\n                        Trained\n                      </span>\n                    ) : (\n                      <span className=\"glass-px-2 glass-py-0.5 glass-surface-primary/20 glass-text-secondary glass-radius glass-text-xs glass-font-medium\">\n                        Untrained\n                      </span>\n                    )}\n                  </div>\n\n                  <p className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mb-2\">\n                    {ganModel.description}\n                  </p>\n\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <div className=\"glass-flex glass-items-center glass-space-x-4 glass-text-xs glass-text-primary-glass-opacity-50\">\n                      <span>{ganModel.resolution}px</span>\n                      <span>Z:{ganModel.latentDim}</span>\n                    </div>\n\n                    <span\n                      className={`\n                      glass-px-2 glass-py-0.5 glass-radius glass-text-xs glass-font-medium\n                      ${\n                        ganModel.type === \"stylegan\"\n                          ? \"glass-surface-primary/20 glass-text-secondary\"\n                          : ganModel.type === \"dcgan\"\n                            ? \"glass-surface-blue/20 glass-text-secondary\"\n                            : ganModel.type === \"biggan\"\n                              ? \"glass-surface-green/20 glass-text-secondary\"\n                              : ganModel.type === \"cyclegan\"\n                                ? \"glass-surface-red/20 glass-text-secondary\"\n                                : \"glass-surface-muted/20 glass-text-secondary\"\n                      }\n                    `}\n                    >\n                      {ganModel.type.toUpperCase()}\n                    </span>\n                  </div>\n                </div>\n\n                {currentModel === ganModel.id && (\n                  <div className=\"glass-text-primary glass-ml-2\">\u2713</div>\n                )}\n              </div>\n            </motion.div>\n          ))}\n        </div>\n      </div>\n    );\n\n    const GenerationControls = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Generation Parameters\n        </h4>\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Seed: {params.seed}\n            </label>\n            <input\n              type=\"range\"\n              min=\"0\"\n              max=\"1000\"\n              value={params.seed}\n              onChange={(e) =>\n                setParams((prev: any) => ({\n                  ...prev,\n                  seed: parseInt(e.target.value),\n                }))\n              }\n              aria-label={`Seed: ${params.seed}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Truncation: {params.truncation.toFixed(2)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"0.1\"\n              max=\"2.0\"\n              step=\"0.1\"\n              value={params.truncation}\n              onChange={(e) =>\n                setParams((prev: any) => ({\n                  ...prev,\n                  truncation: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Truncation: ${params.truncation.toFixed(2)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Style Strength: {params.styleStrength.toFixed(2)}\n            </label>\n            <input\n              type=\"range\"\n              min=\"0.0\"\n              max=\"2.0\"\n              step=\"0.1\"\n              value={params.styleStrength}\n              onChange={(e) =>\n                setParams((prev: any) => ({\n                  ...prev,\n                  styleStrength: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Style Strength: ${params.styleStrength.toFixed(2)}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n              Batch Size: {params.batchSize}\n            </label>\n            <input\n              type=\"range\"\n              min=\"1\"\n              max=\"8\"\n              value={params.batchSize}\n              onChange={(e) =>\n                setParams((prev: any) => ({\n                  ...prev,\n                  batchSize: parseInt(e.target.value),\n                }))\n              }\n              aria-label={`Batch Size: ${params.batchSize}`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n            />\n          </div>\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight: \"100%\",\n          minWidth: 0,\n          height: compact ? \"100%\" : undefined,\n          overflow: compact ? \"hidden\" : undefined,\n        }}\n        className={`${compact ? \"glass-p-3 glass-space-y-3\" : \"glass-p-4 glass-space-y-4\"} glass-max-w-full glass-overflow-auto ${className}`}\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-min-w-0\">\n            <div className=\"glass-min-w-0\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90 glass-truncate\">\n                GAN Generator\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                Generative Adversarial Networks for image synthesis\n              </p>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-space-x-2\">\n              {enableRealTime && model.trained && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span className=\"glass-text-xs\">Auto-gen</span>\n                </div>\n              )}\n              {isGenerating && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-xs\">Generating...</span>\n                </div>\n              )}\n              {isTraining && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-orange-400 glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-xs\">Training...</span>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Generated images grid */}\n        {generatedImages.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Generated Images\n            </h4>\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 lg:glass-grid-cols-6 glass-gap-3\">\n              {generatedImages\n                .slice(0, maxGenerations)\n                .map((imageUrl, index) => (\n                  <motion.div\n                    key={index}\n                    className=\"glass-relative glass-aspect-square glass-radius-lg glass-overflow-hidden glass-surface-subtle/10 glass-group glass-cursor-pointer\"\n                    whileHover={shouldAnimate ? { scale: 1.05 } : {}}\n                    initial={{ opacity: 0, scale: 0.8 }}\n                    animate={\n                      prefersReducedMotion ? {} : { opacity: 1, scale: 1 }\n                    }\n                    transition={\n                      prefersReducedMotion\n                        ? { duration: 0 }\n                        : { duration: ANIMATION.DURATION.normal / 1000 }\n                    }\n                  >\n                    <img\n                      src={imageUrl}\n                      alt={`Generated ${index + 1}`}\n                      className=\"glass-w-full glass-h-full glass-object-cover\"\n                    />\n                    <div className=\"glass-absolute glass-inset-0 glass-surface-dark/50 glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-flex glass-items-center glass-justify-center\">\n                      <button className=\"glass-p-2 glass-surface-subtle/20 glass-radius-lg glass-text-primary hover:glass-surface-subtle/30 glass-transition-colors\">\n                        <svg\n                          className=\"glass-w-4 glass-h-4\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          viewBox=\"0 0 24 24\"\n                        >\n                          <path\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                            strokeWidth={2}\n                            d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"\n                          />\n                        </svg>\n                      </button>\n                    </div>\n                  </motion.div>\n                ))}\n            </div>\n          </div>\n        )}\n\n        {/* Generation progress */}\n        {isGenerating && showProgress && (\n          <div\n            className={`\n            glass-p-3 glass-radius-lg glass-border glass-border-blue/30\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n          `}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                Generating batch...\n              </span>\n              <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                {Math.round(generationProgress)}%\n              </span>\n            </div>\n            <div className=\"glass-w-full glass-surface-subtle/20 glass-radius-full glass-h-2\">\n              <motion.div\n                className=\"glass-surface-blue glass-h-2 glass-radius-full\"\n                animate={{ width: `${generationProgress}%` }}\n                transition={\n                  prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                }\n              />\n            </div>\n          </div>\n        )}\n\n        <div\n          className={`glass-grid ${compact ? \"glass-grid-cols-1 glass-gap-2\" : \"glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\"}`}\n          style={compact ? { gridTemplateColumns: \"1fr\", gap: 8 } : undefined}\n        >\n          {/* Model selector */}\n          {showModelSelector && <ModelSelector />}\n\n          {/* Generation controls */}\n          {showGenerationControls && <GenerationControls />}\n        </div>\n\n        {/* Latent space visualization */}\n        {showLatentSpace && latentVectors.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Latent Space (2D Projection)\n            </h4>\n            <canvas\n              ref={latentSpaceCanvasRef}\n              width={400}\n              height={300}\n              className=\"glass-w-full glass-max-w-md glass-border glass-border-white/20 glass-radius-lg glass-surface-dark/20\"\n            />\n          </div>\n        )}\n\n        {/* Interpolation */}\n        {enableInterpolation && interpolationImages.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Latent Interpolation\n            </h4>\n            <div className=\"glass-flex glass-space-x-2 glass-overflow-x-auto glass-pb-2\">\n              {interpolationImages.map((imageUrl, index) => (\n                <div\n                  key={index}\n                  className=\"glass-flex-shrink-0 glass-w-16 glass-h-16 glass-radius glass-border glass-border-white/20 glass-overflow-hidden\"\n                >\n                  <img\n                    src={imageUrl}\n                    alt={`Interpolation ${index}`}\n                    className=\"glass-w-full glass-h-full glass-object-cover\"\n                  />\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {/* Training progress */}\n        {isTraining && showTrainingControls && (\n          <div\n            className={`\n            glass-p-3 glass-radius-lg glass-border glass-border-orange/30\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n          `}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                Training Model...\n              </span>\n              <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                Epoch {trainingProgress.epoch}\n              </span>\n            </div>\n            <div className=\"glass-grid glass-grid-cols-2 glass-gap-4 glass-text-xs glass-text-primary-glass-opacity-60\">\n              <div>\n                Generator Loss: {trainingProgress.generatorLoss.toFixed(3)}\n              </div>\n              <div>\n                Discriminator Loss:{\" \"}\n                {trainingProgress.discriminatorLoss.toFixed(3)}\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Action buttons */}\n        {showActions && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-pt-3 glass-border-t glass-border-white/10 glass-flex-wrap\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-wrap\">\n              <motion.button\n                className=\"glass-px-4 glass-py-2 glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors disabled:glass-opacity-50\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                onClick={generateImages}\n                disabled={isGenerating || !model.trained}\n              >\n                {isGenerating ? \"Generating...\" : \"Generate Images\"}\n              </motion.button>\n\n              {enableInterpolation && latentVectors.length >= 2 && (\n                <motion.button\n                  className=\"glass-px-4 glass-py-2 glass-border glass-border-white/30 hover:glass-border-white/50 glass-text-primary-glass-opacity-80 glass-radius-lg glass-text-sm glass-transition-colors\"\n                  whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                  whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                  onClick={generateInterpolation}\n                >\n                  Interpolate\n                </motion.button>\n              )}\n\n              {showTrainingControls && !model.trained && (\n                <motion.button\n                  className=\"glass-px-4 glass-py-2 glass-surface-primary hover:glass-surface-primary glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors disabled:glass-opacity-50\"\n                  whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                  whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                  onClick={trainModel}\n                  disabled={isTraining}\n                >\n                  {isTraining ? \"Training...\" : \"Train Model\"}\n                </motion.button>\n              )}\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-xs glass-text-primary-glass-opacity-60 glass-min-w-0 glass-flex-wrap\">\n              <span>Generated: {generatedImages.length}</span>\n              <span>\u2022</span>\n              <span>Model: {model.name}</span>\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassGANGenerator.displayName = \"GlassGANGenerator\";\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport { motion } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface ArtPrompt {\n  id: string;\n  text: string;\n  style?: string;\n  category:\n    | \"abstract\"\n    | \"landscape\"\n    | \"portrait\"\n    | \"architecture\"\n    | \"nature\"\n    | \"surreal\";\n  tags: string[];\n}\n\nexport interface GenerationSettings {\n  model: \"stable-diffusion\" | \"midjourney\" | \"dall-e\" | \"custom\";\n  style: string;\n  resolution: \"512x512\" | \"768x768\" | \"1024x1024\" | \"1920x1080\";\n  steps: number;\n  guidance: number;\n  seed?: number;\n  iterations: number;\n}\n\ntype GenerationModel = GenerationSettings[\"model\"];\ntype GenerationResolution = GenerationSettings[\"resolution\"];\n\nexport interface GeneratedImageMetadata {\n  id: string;\n  prompt: string;\n  imageUrl: string;\n  settings: GenerationSettings;\n  timestamp: number;\n}\n\nexport interface GlassGenerativeArtProps {\n  prompt?: string;\n  suggestions?: ArtPrompt[];\n  generationSettings?: Partial<GenerationSettings>;\n  showPromptLibrary?: boolean;\n  showAdvancedSettings?: boolean;\n  showGenerationHistory?: boolean;\n  enableIterativeGeneration?: boolean;\n  enablePromptEnhancement?: boolean;\n  enableStyleMixing?: boolean;\n  realTimeGeneration?: boolean;\n  onPromptChange?: (prompt: string) => void;\n  onGenerate?: (prompt: string, settings: GenerationSettings) => void;\n  onImageGenerated?: (\n    imageUrl: string,\n    metadata: GeneratedImageMetadata\n  ) => void;\n  className?: string;\n}\n\nconst defaultPromptSuggestions: ArtPrompt[] = [\n  {\n    id: \"cosmic-abstract\",\n    text: \"Cosmic abstract painting with swirling galaxies and nebulae in vibrant colors\",\n    style: \"abstract expressionism\",\n    category: \"abstract\",\n    tags: [\"space\", \"cosmic\", \"vibrant\", \"swirling\"],\n  },\n  {\n    id: \"cyberpunk-city\",\n    text: \"Cyberpunk cityscape at night with neon lights reflecting on wet streets\",\n    style: \"digital art\",\n    category: \"architecture\",\n    tags: [\"cyberpunk\", \"neon\", \"city\", \"night\"],\n  },\n  {\n    id: \"ethereal-portrait\",\n    text: \"Ethereal portrait of a person made of flowing light and energy\",\n    style: \"digital painting\",\n    category: \"portrait\",\n    tags: [\"ethereal\", \"light\", \"energy\", \"flowing\"],\n  },\n  {\n    id: \"surreal-landscape\",\n    text: \"Surreal landscape with floating islands and impossible waterfalls\",\n    style: \"surrealism\",\n    category: \"landscape\",\n    tags: [\"surreal\", \"floating\", \"impossible\", \"waterfalls\"],\n  },\n  {\n    id: \"biomech-fusion\",\n    text: \"Biomechanical fusion of organic forms and technological components\",\n    style: \"biomechanical art\",\n    category: \"surreal\",\n    tags: [\"biomechanical\", \"organic\", \"technology\", \"fusion\"],\n  },\n];\n\nconst stylePresets = [\n  \"photorealistic\",\n  \"oil painting\",\n  \"watercolor\",\n  \"digital art\",\n  \"abstract expressionism\",\n  \"impressionism\",\n  \"cyberpunk\",\n  \"steampunk\",\n  \"art nouveau\",\n  \"minimalist\",\n  \"baroque\",\n  \"surrealism\",\n];\n\nconst readableGlassTextStyle = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassGenerativeArt = forwardRef<\n  HTMLDivElement,\n  GlassGenerativeArtProps\n>(\n  (\n    {\n      prompt = \"\",\n      suggestions = defaultPromptSuggestions,\n      generationSettings = {},\n      showPromptLibrary = false,\n      showAdvancedSettings = false,\n      showGenerationHistory = false,\n      enableIterativeGeneration = true,\n      enablePromptEnhancement = true,\n      enableStyleMixing = false,\n      realTimeGeneration = false,\n      onPromptChange,\n      onGenerate,\n      onImageGenerated,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [currentPrompt, setCurrentPrompt] = useState(prompt);\n    const [isGenerating, setIsGenerating] = useState(false);\n    const [generationProgress, setGenerationProgress] = useState(0);\n    const [enablePromptEnhancementState, setEnablePromptEnhancementState] =\n      useState(enablePromptEnhancement);\n    const [generatedImages, setGeneratedImages] = useState<string[]>([]);\n    const [generationHistory, setGenerationHistory] = useState<\n      GeneratedImageMetadata[]\n    >([]);\n\n    const [settings, setSettings] = useState<GenerationSettings>({\n      model: \"stable-diffusion\",\n      style: \"photorealistic\",\n      resolution: \"768x768\",\n      steps: 25,\n      guidance: 7.5,\n      iterations: 1,\n      ...generationSettings,\n    });\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const id = useA11yId(\"glass-generative-art\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Enhanced prompt generation\n    const enhancePrompt = useCallback(\n      (basePrompt: string): string => {\n        const enhancementPhrases = [\n          \"highly detailed\",\n          \"professional quality\",\n          \"studio lighting\",\n          \"8k resolution\",\n          \"masterpiece\",\n          \"trending on artstation\",\n          \"photorealistic\",\n          \"cinematic composition\",\n        ];\n\n        const randomEnhancements = enhancementPhrases\n          .sort(() => Math.random() - 0.5)\n          .slice(0, 3)\n          .join(\", \");\n\n        return `${basePrompt}, ${randomEnhancements}, ${settings.style} style`;\n      },\n      [settings.style]\n    );\n\n    // Generate art simulation\n    const generateArt = useCallback(\n      async (promptText: string) => {\n        if (!promptText.trim()) return;\n\n        setIsGenerating(true);\n        setGenerationProgress(0);\n        play(\"processing\");\n\n        const enhancedPrompt = enablePromptEnhancement\n          ? enhancePrompt(promptText)\n          : promptText;\n\n        // Simulate generation steps\n        const steps = [\n          {\n            label: \"Initializing model...\",\n            duration: ANIMATION.DURATION.normal,\n          },\n          { label: \"Processing prompt...\", duration: ANIMATION.DURATION.slow },\n          {\n            label: \"Generating base composition...\",\n            duration: ANIMATION.DURATION.slower * 1.4,\n          },\n          {\n            label: \"Adding details...\",\n            duration: ANIMATION.DURATION.slower * 2.1,\n          },\n          {\n            label: \"Applying style...\",\n            duration: ANIMATION.DURATION.slower * 1.1,\n          },\n          { label: \"Refining image...\", duration: ANIMATION.DURATION.slower },\n          { label: \"Finalizing...\", duration: ANIMATION.DURATION.slow * 1.4 },\n        ];\n\n        for (let i = 0; i < steps.length; i++) {\n          await new Promise((resolve) =>\n            setTimeout(resolve, steps[i].duration)\n          );\n          setGenerationProgress(((i + 1) / steps.length) * 100);\n        }\n\n        // Generate multiple iterations if requested\n        const newImages: string[] = [];\n        for (let i = 0; i < settings.iterations; i++) {\n          const canvas = canvasRef.current;\n          if (canvas) {\n            const ctx = canvas.getContext(\"2d\");\n            if (ctx) {\n              // Create unique generative art based on prompt\n              canvas.width = 512;\n              canvas.height = 512;\n\n              // Background based on prompt category\n              const promptLower = promptText.toLowerCase();\n              let bgGradient: CanvasGradient;\n\n              if (\n                promptLower.includes(\"space\") ||\n                promptLower.includes(\"cosmic\")\n              ) {\n                bgGradient = ctx.createRadialGradient(\n                  256,\n                  256,\n                  0,\n                  256,\n                  256,\n                  400\n                );\n                bgGradient.addColorStop(0, \"var(--glass-gray-900)\");\n                bgGradient.addColorStop(0.5, \"var(--glass-gray-800)\");\n                bgGradient.addColorStop(1, \"var(--glass-gray-900)\");\n              } else if (\n                promptLower.includes(\"cyberpunk\") ||\n                promptLower.includes(\"neon\")\n              ) {\n                bgGradient = ctx.createLinearGradient(0, 0, 512, 512);\n                bgGradient.addColorStop(0, \"var(--glass-black)\");\n                bgGradient.addColorStop(0.5, \"var(--glass-gray-900)\");\n                bgGradient.addColorStop(1, \"var(--glass-color-secondary)\");\n              } else if (\n                promptLower.includes(\"nature\") ||\n                promptLower.includes(\"landscape\")\n              ) {\n                bgGradient = ctx.createLinearGradient(0, 0, 0, 512);\n                bgGradient.addColorStop(0, \"hsl(var(--glass-color-info))\");\n                bgGradient.addColorStop(0.7, \"#98fb98\");\n                bgGradient.addColorStop(1, \"#228b22\");\n              } else {\n                bgGradient = ctx.createLinearGradient(0, 0, 512, 512);\n                bgGradient.addColorStop(0, \"#667eea\");\n                bgGradient.addColorStop(1, \"#764ba2\");\n              }\n\n              ctx.fillStyle = bgGradient;\n              ctx.fillRect(0, 0, 512, 512);\n\n              // Add generative elements based on style\n              if (settings.style.includes(\"abstract\")) {\n                // Abstract shapes and forms\n                for (let j = 0; j < 15; j++) {\n                  ctx.save();\n                  ctx.translate(Math.random() * 512, Math.random() * 512);\n                  ctx.rotate(Math.random() * Math.PI * 2);\n\n                  const gradient = ctx.createRadialGradient(\n                    0,\n                    0,\n                    0,\n                    0,\n                    0,\n                    50 + Math.random() * 100\n                  );\n                  gradient.addColorStop(\n                    0,\n                    `hsla(${Math.random() * 360}, 70%, 60%, 0.8)`\n                  );\n                  gradient.addColorStop(\n                    1,\n                    `hsla(${Math.random() * 360}, 50%, 40%, 0.3)`\n                  );\n\n                  ctx.fillStyle = gradient;\n                  ctx.beginPath();\n                  ctx.ellipse(\n                    0,\n                    0,\n                    Math.random() * 80 + 20,\n                    Math.random() * 120 + 30,\n                    0,\n                    0,\n                    Math.PI * 2\n                  );\n                  ctx.fill();\n                  ctx.restore();\n                }\n              } else if (settings.style.includes(\"geometric\")) {\n                // Geometric patterns\n                for (let j = 0; j < 20; j++) {\n                  ctx.save();\n                  ctx.translate(Math.random() * 512, Math.random() * 512);\n                  ctx.rotate(Math.random() * Math.PI * 2);\n\n                  ctx.strokeStyle = `hsla(${Math.random() * 360}, 60%, 50%, 0.7)`;\n                  ctx.lineWidth = Math.random() * 3 + 1;\n                  ctx.beginPath();\n\n                  const size = Math.random() * 60 + 20;\n                  ctx.rect(-size / 2, -size / 2, size, size);\n                  ctx.stroke();\n                  ctx.restore();\n                }\n              } else if (\n                promptLower.includes(\"particle\") ||\n                settings.style.includes(\"digital\")\n              ) {\n                // Particle effects\n                for (let j = 0; j < 100; j++) {\n                  ctx.fillStyle = `hsla(${Math.random() * 60 + 180}, 80%, 60%, ${Math.random() * 0.8 + 0.2})`;\n                  ctx.beginPath();\n                  ctx.arc(\n                    Math.random() * 512,\n                    Math.random() * 512,\n                    Math.random() * 3 + 1,\n                    0,\n                    Math.PI * 2\n                  );\n                  ctx.fill();\n                }\n              }\n\n              // Add texture overlay\n              const imageData = ctx.getImageData(0, 0, 512, 512);\n              const data = imageData.data;\n              for (let j = 0; j < data.length; j += 4) {\n                const noise = (Math.random() - 0.5) * 20;\n                data[j] = Math.max(0, Math.min(255, data[j] + noise));\n                data[j + 1] = Math.max(0, Math.min(255, data[j + 1] + noise));\n                data[j + 2] = Math.max(0, Math.min(255, data[j + 2] + noise));\n              }\n              ctx.putImageData(imageData, 0, 0);\n\n              const imageUrl = canvas.toDataURL(\"image/png\");\n              newImages.push(imageUrl);\n            }\n          }\n        }\n\n        setGeneratedImages((prev) => [...newImages, ...prev].slice(0, 12));\n\n        // Add to history\n        const historyEntry: GeneratedImageMetadata = {\n          id: Date.now().toString(),\n          prompt: enhancedPrompt,\n          imageUrl: newImages[0] || \"\",\n          settings: { ...settings },\n          timestamp: Date.now(),\n        };\n        setGenerationHistory((prev) => [historyEntry, ...prev].slice(0, 20));\n\n        setIsGenerating(false);\n        play(\"success\");\n\n        if (newImages[0]) {\n          onImageGenerated?.(newImages[0], historyEntry);\n        }\n      },\n      [settings, enablePromptEnhancement, enhancePrompt, onImageGenerated, play]\n    );\n\n    // Handle prompt changes\n    useEffect(() => {\n      if (realTimeGeneration && currentPrompt && currentPrompt !== prompt) {\n        const debounceTimer = setTimeout(() => {\n          generateArt(currentPrompt);\n        }, 2000);\n        return () => clearTimeout(debounceTimer);\n      }\n    }, [currentPrompt, realTimeGeneration, generateArt, prompt]);\n\n    const PromptLibrary = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Prompt Library\n        </h4>\n        <div className=\"glass-grid glass-gap-2\">\n          {suggestions.map((suggestion) => (\n            <motion.div\n              key={suggestion.id}\n              className=\"glass-p-3 glass-radius-lg glass-border glass-border-white/20 hover:glass-border-white/40 glass-surface-subtle/5 glass-cursor-pointer glass-transition-colors\"\n              whileHover={shouldAnimate ? { scale: 1.01 } : {}}\n              onClick={() => {\n                setCurrentPrompt(suggestion.text);\n                onPromptChange?.(suggestion.text);\n                play(\"select\");\n              }}\n            >\n              <div className=\"glass-flex glass-items-start glass-justify-between\">\n                <div className=\"glass-flex-1\">\n                  <p className=\"glass-text-sm glass-text-primary-glass-opacity-90 glass-mb-1\">\n                    {suggestion.text}\n                  </p>\n                  <div className=\"glass-flex glass-items-center glass-space-x-2\">\n                    <span\n                      className={`\n                      glass-px-2 glass-py-0.5 glass-radius glass-text-xs glass-font-medium\n                      ${\n                        suggestion.category === \"abstract\"\n                          ? \"glass-surface-primary/20 glass-text-secondary\"\n                          : suggestion.category === \"landscape\"\n                            ? \"glass-surface-green/20 glass-text-secondary\"\n                            : suggestion.category === \"portrait\"\n                              ? \"glass-surface-blue/20 glass-text-secondary\"\n                              : suggestion.category === \"architecture\"\n                                ? \"glass-surface-muted/20 glass-text-secondary\"\n                                : suggestion.category === \"nature\"\n                                  ? \"glass-surface-green/20 glass-text-secondary\"\n                                  : \"glass-surface-primary/20 glass-text-secondary\"\n                      }\n                    `}\n                    >\n                      {suggestion.category}\n                    </span>\n                    {suggestion.tags.slice(0, 2).map((tag) => (\n                      <span\n                        key={tag}\n                        className=\"glass-px-1.5 glass-py-0.5 glass-surface-subtle/10 glass-text-primary-glass-opacity-60 glass-radius glass-text-xs\"\n                      >\n                        {tag}\n                      </span>\n                    ))}\n                  </div>\n                </div>\n              </div>\n            </motion.div>\n          ))}\n        </div>\n      </div>\n    );\n\n    const AdvancedSettings = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Generation Settings\n        </h4>\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          <div>\n            <label\n              htmlFor=\"model-select\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Model\n            </label>\n            <select\n              id=\"model-select\"\n              value={settings.model}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  model: e.target.value as GenerationModel,\n                }))\n              }\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n              aria-label=\"AI model\"\n            >\n              <option value=\"stable-diffusion\">Stable Diffusion</option>\n              <option value=\"midjourney\">Midjourney</option>\n              <option value=\"dall-e\">DALL-E</option>\n              <option value=\"custom\">Custom Model</option>\n            </select>\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"style-select\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Style\n            </label>\n            <select\n              id=\"style-select\"\n              value={settings.style}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  style: e.target.value,\n                }))\n              }\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n              aria-label=\"Art style preset\"\n            >\n              {stylePresets.map((style) => (\n                <option key={style} value={style}>\n                  {style.charAt(0).toUpperCase() + style.slice(1)}\n                </option>\n              ))}\n            </select>\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"resolution-select\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Resolution\n            </label>\n            <select\n              id=\"resolution-select\"\n              value={settings.resolution}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  resolution: e.target.value as GenerationResolution,\n                }))\n              }\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n              aria-label=\"Image resolution\"\n            >\n              <option value=\"512x512\">512 \u00D7 512</option>\n              <option value=\"768x768\">768 \u00D7 768</option>\n              <option value=\"1024x1024\">1024 \u00D7 1024</option>\n              <option value=\"1920x1080\">1920 \u00D7 1080</option>\n            </select>\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"iterations-slider\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Iterations: {settings.iterations}\n            </label>\n            <input\n              id=\"iterations-slider\"\n              type=\"range\"\n              min=\"1\"\n              max=\"4\"\n              value={settings.iterations}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  iterations: parseInt(e.target.value),\n                }))\n              }\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n              aria-label=\"Number of iterations\"\n            />\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"steps-slider\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Steps: {settings.steps}\n            </label>\n            <input\n              id=\"steps-slider\"\n              type=\"range\"\n              min=\"10\"\n              max=\"50\"\n              value={settings.steps}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  steps: parseInt(e.target.value),\n                }))\n              }\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n              aria-label=\"Number of steps\"\n            />\n          </div>\n\n          <div>\n            <label\n              htmlFor=\"guidance-slider\"\n              className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\"\n            >\n              Guidance: {settings.guidance}\n            </label>\n            <input\n              id=\"guidance-slider\"\n              type=\"range\"\n              min=\"1\"\n              max=\"20\"\n              step=\"0.5\"\n              value={settings.guidance}\n              onChange={(e) =>\n                setSettings((prev) => ({\n                  ...prev,\n                  guidance: parseFloat(e.target.value),\n                }))\n              }\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n              aria-label=\"Guidance scale\"\n            />\n          </div>\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight: \"100%\",\n          minWidth: 0,\n        }}\n        className={`glass-p-4 glass-space-y-4 glass-max-w-full glass-overflow-auto ${className}`}\n        {...props}\n      >\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-min-w-0\">\n          <div className=\"glass-min-w-0\">\n            <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90 glass-truncate\">\n              AI Art Generator\n            </h3>\n            <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n              Create stunning AI-generated artwork from text prompts\n            </p>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-space-x-2\">\n            {realTimeGeneration && (\n              <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                <span className=\"glass-text-xs\">Live</span>\n              </div>\n            )}\n            {isGenerating && (\n              <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                <span className=\"glass-text-xs\">Generating</span>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Prompt input */}\n        <div className=\"glass-space-y-3\">\n          <div>\n            <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80 glass-mb-2\">\n              Describe your artwork\n            </label>\n            <textarea\n              value={currentPrompt}\n              onChange={(e) => {\n                setCurrentPrompt(e.target.value);\n                onPromptChange?.(e.target.value);\n              }}\n              placeholder=\"A majestic dragon soaring through a cosmic nebula, digital art style, highly detailed...\"\n              className=\"glass-w-full glass-h-20 glass-p-3 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-placeholder-white-opacity-50 glass-resize-none glass-focus-outline-none focus:glass-border-blue\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-flex-wrap\">\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n                <input\n                  type=\"checkbox\"\n                  checked={enablePromptEnhancementState}\n                  onChange={(e) =>\n                    setEnablePromptEnhancementState(e.target.checked)\n                  }\n                  className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n                />\n                <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                  Enhance Prompt\n                </span>\n              </label>\n            </div>\n\n            <motion.button\n              className=\"glass-px-4 glass-py-2 glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-font-medium glass-transition-colors disabled:glass-opacity-50\"\n              whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n              whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              onClick={() => generateArt(currentPrompt)}\n              disabled={isGenerating || !currentPrompt.trim()}\n            >\n              {isGenerating ? \"Generating...\" : \"Generate Art\"}\n            </motion.button>\n          </div>\n        </div>\n\n        {/* Progress indicator */}\n        {isGenerating && (\n          <div\n            className={`\n            glass-p-3 glass-radius-lg glass-border glass-border-blue/30\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n          `}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                Generating artwork...\n              </span>\n              <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                {Math.round(generationProgress)}%\n              </span>\n            </div>\n            <div className=\"glass-w-full glass-surface-subtle/20 glass-radius-full glass-h-2\">\n              <motion.div\n                className=\"glass-surface-blue glass-h-2 glass-radius-full\"\n                animate={{ width: `${generationProgress}%` }}\n                transition={\n                  prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                }\n              />\n            </div>\n          </div>\n        )}\n\n        {/* Generated images grid */}\n        {generatedImages.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Generated Artwork\n            </h4>\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-3 lg:glass-grid-cols-4 glass-gap-4\">\n              {generatedImages.map((imageUrl, index) => (\n                <motion.div\n                  key={index}\n                  className=\"glass-relative glass-aspect-square glass-radius-lg glass-overflow-hidden glass-surface-subtle/10 glass-group glass-cursor-pointer\"\n                  whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                  initial={{ opacity: 0, scale: 0.9 }}\n                  animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1 }}\n                  transition={\n                    prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                  }\n                >\n                  <img\n                    src={imageUrl}\n                    alt={`Generated art ${index + 1}`}\n                    className=\"glass-w-full glass-h-full glass-object-cover\"\n                  />\n                  <div className=\"glass-absolute glass-inset-0 glass-surface-dark/50 glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-flex glass-items-center glass-justify-center\">\n                    <button className=\"glass-p-2 glass-surface-subtle/20 glass-radius-lg glass-text-primary hover:glass-surface-subtle/30 glass-transition-colors\">\n                      <svg\n                        className=\"glass-w-5 glass-h-5\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        viewBox=\"0 0 24 24\"\n                      >\n                        <path\n                          strokeLinecap=\"round\"\n                          strokeLinejoin=\"round\"\n                          strokeWidth={2}\n                          d=\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"\n                        />\n                      </svg>\n                    </button>\n                  </div>\n                </motion.div>\n              ))}\n            </div>\n          </div>\n        )}\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          {/* Prompt library */}\n          {showPromptLibrary && <PromptLibrary />}\n\n          {/* Advanced settings */}\n          {showAdvancedSettings && <AdvancedSettings />}\n        </div>\n\n        {/* Generation history */}\n        {showGenerationHistory && generationHistory.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Recent Generations\n            </h4>\n            <div className=\"glass-space-y-2 glass-max-glass-h-64 glass-overflow-y-auto\">\n              {generationHistory.map((entry) => (\n                <div\n                  key={entry.id}\n                  className=\"glass-flex glass-items-center glass-space-x-3 glass-p-2 glass-radius-lg glass-surface-subtle/5 hover:glass-surface-subtle/10 glass-cursor-pointer glass-transition-colors\"\n                  onClick={() => {\n                    setCurrentPrompt(entry.prompt);\n                    onPromptChange?.(entry.prompt);\n                  }}\n                >\n                  <img\n                    src={entry.imageUrl}\n                    alt=\"Generated\"\n                    className=\"glass-w-12 glass-h-12 glass-radius glass-object-cover\"\n                  />\n                  <div className=\"glass-flex-1 glass-min-w-0\">\n                    <p className=\"glass-text-sm glass-text-primary-glass-opacity-90 glass-truncate\">\n                      {entry.prompt}\n                    </p>\n                    <div className=\"glass-flex glass-items-center glass-space-x-2 glass-mt-1\">\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {entry.settings.model}\n                      </span>\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {entry.settings.resolution}\n                      </span>\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        {new Date(entry.timestamp).toLocaleDateString()}\n                      </span>\n                    </div>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n\n        <canvas ref={canvasRef} className=\"glass-hidden\" />\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassGenerativeArt.displayName = \"GlassGenerativeArt\";\n", "\"use client\";\nimport React, {\n  useState,\n  useCallback,\n  useEffect,\n  useRef,\n  useMemo,\n} from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface SearchResult {\n  id: string;\n  title: string;\n  description: string;\n  category: string;\n  tags: string[];\n  url?: string;\n  score: number;\n  metadata?: SearchResultMetadata;\n  highlights?: {\n    title?: string[];\n    description?: string[];\n  };\n}\n\nexport interface SearchResultMetadata extends Record<string, unknown> {\n  rating?: number;\n  date?: string | number | Date;\n}\n\nexport interface SearchDateRange {\n  start: string | number | Date;\n  end: string | number | Date;\n}\n\nexport type SearchFilterValue =\n  | string\n  | number\n  | boolean\n  | string[]\n  | number[]\n  | SearchDateRange\n  | null\n  | undefined;\n\nexport type SearchFilters = Record<string, SearchFilterValue>;\n\nexport interface SearchFilter {\n  id: string;\n  name: string;\n  type: \"select\" | \"multiselect\" | \"range\" | \"date\" | \"boolean\";\n  options?: Array<{ value: string; label: string; count?: number }>;\n  range?: { min: number; max: number; step?: number };\n  value?: SearchFilterValue;\n}\n\ninterface QueryEntity {\n  type: string;\n  value: string;\n}\n\ninterface QueryAnalysis {\n  intent: string;\n  entities: QueryEntity[];\n  sentiment: \"positive\" | \"neutral\" | \"negative\";\n  keywords: string[];\n}\n\nexport interface SearchSuggestion {\n  text: string;\n  type: \"query\" | \"category\" | \"tag\" | \"filter\";\n  category?: string;\n  count?: number;\n}\n\nexport interface IntelligentSearchProps {\n  data?: SearchResult[];\n  onSearch?: (query: string, filters: SearchFilters) => void;\n  onResultClick?: (result: SearchResult) => void;\n  placeholder?: string;\n  showFilters?: boolean;\n  showSuggestions?: boolean;\n  enableNLP?: boolean;\n  enableVoiceSearch?: boolean;\n  maxResults?: number;\n  className?: string;\n  \"aria-label\"?: string;\n  \"data-testid\"?: string;\n}\n\nconst isStringArray = (value: SearchFilterValue): value is string[] =>\n  Array.isArray(value) && value.every((item) => typeof item === \"string\");\n\nconst isSearchDateRange = (\n  value: SearchFilterValue\n): value is SearchDateRange =>\n  typeof value === \"object\" &&\n  value !== null &&\n  !Array.isArray(value) &&\n  \"start\" in value &&\n  \"end\" in value;\n\nconst getStringFilterValues = (value: SearchFilterValue): string[] =>\n  isStringArray(value) ? value : [];\n\nconst getNumericFilterValue = (\n  value: SearchFilterValue,\n  fallback: number\n): number => (typeof value === \"number\" ? value : fallback);\n\n// NLP Query Analysis\nconst analyzeQuery = (query: string): QueryAnalysis => {\n  const lowercaseQuery = query.toLowerCase();\n\n  // Intent detection\n  let intent = \"search\";\n  if (\n    lowercaseQuery.includes(\"find\") ||\n    lowercaseQuery.includes(\"show\") ||\n    lowercaseQuery.includes(\"get\")\n  ) {\n    intent = \"retrieve\";\n  } else if (\n    lowercaseQuery.includes(\"compare\") ||\n    lowercaseQuery.includes(\"vs\") ||\n    lowercaseQuery.includes(\"versus\")\n  ) {\n    intent = \"compare\";\n  } else if (\n    lowercaseQuery.includes(\"best\") ||\n    lowercaseQuery.includes(\"top\") ||\n    lowercaseQuery.includes(\"recommend\")\n  ) {\n    intent = \"recommend\";\n  } else if (\n    lowercaseQuery.includes(\"help\") ||\n    lowercaseQuery.includes(\"how to\") ||\n    lowercaseQuery.includes(\"tutorial\")\n  ) {\n    intent = \"help\";\n  }\n\n  // Entity extraction (simplified)\n  const entities: QueryEntity[] = [];\n\n  // Date entities\n  const dateMatches = query.match(\n    /(\\d{4}|\\d{1,2}\\/\\d{1,2}\\/\\d{4}|today|yesterday|last week|this month)/gi\n  );\n  dateMatches?.forEach((match) => {\n    entities.push({ type: \"date\", value: match });\n  });\n\n  // Number entities\n  const numberMatches = query.match(/\\b\\d+(?:\\.\\d+)?\\b/g);\n  numberMatches?.forEach((match) => {\n    entities.push({ type: \"number\", value: match });\n  });\n\n  // Category entities (simplified)\n  const categories = [\n    \"product\",\n    \"service\",\n    \"article\",\n    \"document\",\n    \"image\",\n    \"video\",\n    \"user\",\n    \"project\",\n  ];\n  categories.forEach((category) => {\n    if (lowercaseQuery.includes(category)) {\n      entities.push({ type: \"category\", value: category });\n    }\n  });\n\n  // Sentiment analysis (simplified)\n  const positiveWords = [\n    \"good\",\n    \"great\",\n    \"excellent\",\n    \"amazing\",\n    \"best\",\n    \"love\",\n    \"fantastic\",\n  ];\n  const negativeWords = [\n    \"bad\",\n    \"terrible\",\n    \"awful\",\n    \"worst\",\n    \"hate\",\n    \"horrible\",\n    \"useless\",\n  ];\n\n  const hasPositive = positiveWords.some((word) =>\n    lowercaseQuery.includes(word)\n  );\n  const hasNegative = negativeWords.some((word) =>\n    lowercaseQuery.includes(word)\n  );\n\n  let sentiment: \"positive\" | \"neutral\" | \"negative\" = \"neutral\";\n  if (hasPositive && !hasNegative) sentiment = \"positive\";\n  else if (hasNegative && !hasPositive) sentiment = \"negative\";\n\n  // Extract keywords (remove stop words)\n  const stopWords = [\n    \"the\",\n    \"a\",\n    \"an\",\n    \"and\",\n    \"or\",\n    \"but\",\n    \"in\",\n    \"on\",\n    \"at\",\n    \"to\",\n    \"for\",\n    \"of\",\n    \"with\",\n    \"by\",\n    \"is\",\n    \"are\",\n    \"was\",\n    \"were\",\n    \"been\",\n    \"be\",\n    \"have\",\n    \"has\",\n    \"had\",\n    \"do\",\n    \"does\",\n    \"did\",\n    \"will\",\n    \"would\",\n    \"could\",\n    \"should\",\n    \"may\",\n    \"might\",\n    \"can\",\n    \"this\",\n    \"that\",\n    \"these\",\n    \"those\",\n  ];\n  const keywords = query\n    .toLowerCase()\n    .split(/\\s+/)\n    .filter((word) => word.length > 2 && !stopWords.includes(word))\n    .filter((word, index, arr) => arr.indexOf(word) === index); // Remove duplicates\n\n  return { intent, entities, sentiment, keywords };\n};\n\n// Advanced search algorithm with NLP\nconst performIntelligentSearch = (\n  query: string,\n  data: SearchResult[],\n  filters: SearchFilters,\n  enableNLP: boolean = true\n): SearchResult[] => {\n  if (!query.trim() && Object.keys(filters).length === 0) {\n    return data;\n  }\n\n  const analysis = enableNLP ? analyzeQuery(query) : null;\n  const searchTerms = query\n    .toLowerCase()\n    .split(/\\s+/)\n    .filter((term) => term.length > 0);\n\n  return data\n    .map((item) => {\n      let score = 0;\n\n      // Text matching with different weights\n      const titleMatch = searchTerms.reduce((acc, term) => {\n        return acc + (item.title.toLowerCase().includes(term) ? 1 : 0);\n      }, 0);\n\n      const descriptionMatch = searchTerms.reduce((acc, term) => {\n        return acc + (item.description.toLowerCase().includes(term) ? 0.5 : 0);\n      }, 0);\n\n      const tagMatch = searchTerms.reduce((acc, term) => {\n        return (\n          acc +\n          item.tags.filter((tag) => tag.toLowerCase().includes(term)).length *\n            0.7\n        );\n      }, 0);\n\n      score = titleMatch * 3 + descriptionMatch + tagMatch;\n\n      // NLP-based scoring boost\n      if (analysis && enableNLP) {\n        // Intent-based scoring\n        if (analysis.intent === \"recommend\" && item.metadata?.rating) {\n          score += item.metadata.rating * 0.5;\n        }\n\n        // Entity matching\n        analysis.entities.forEach((entity) => {\n          if (\n            entity.type === \"category\" &&\n            item.category.toLowerCase().includes(entity.value)\n          ) {\n            score += 1;\n          }\n        });\n\n        // Keyword density bonus\n        const keywordMatches = analysis.keywords.filter(\n          (keyword) =>\n            item.title.toLowerCase().includes(keyword) ||\n            item.description.toLowerCase().includes(keyword)\n        ).length;\n        score += keywordMatches * 0.3;\n      }\n\n      // Filter matching\n      let passesFilters = true;\n      Object.entries(filters).forEach(([key, value]) => {\n        if (!value || (Array.isArray(value) && value.length === 0)) return;\n\n        switch (key) {\n          case \"category\":\n            if (isStringArray(value)) {\n              passesFilters = passesFilters && value.includes(item.category);\n            } else if (typeof value === \"string\") {\n              passesFilters = passesFilters && item.category === value;\n            }\n            break;\n          case \"tags\":\n            if (isStringArray(value)) {\n              passesFilters =\n                passesFilters && value.some((tag) => item.tags.includes(tag));\n            }\n            break;\n          case \"dateRange\":\n            if (item.metadata?.date && isSearchDateRange(value)) {\n              const itemDate = new Date(item.metadata.date);\n              const startDate = new Date(value.start);\n              const endDate = new Date(value.end);\n              passesFilters =\n                passesFilters && itemDate >= startDate && itemDate <= endDate;\n            }\n            break;\n          case \"rating\":\n            if (item.metadata?.rating && typeof value === \"number\") {\n              passesFilters = passesFilters && item.metadata.rating >= value;\n            }\n            break;\n        }\n      });\n\n      if (!passesFilters) {\n        score = 0;\n      }\n\n      // Generate highlights\n      const highlights: { title?: string[]; description?: string[] } = {};\n      if (score > 0) {\n        searchTerms.forEach((term) => {\n          if (item.title.toLowerCase().includes(term)) {\n            if (!highlights.title) highlights.title = [];\n            highlights.title.push(term);\n          }\n          if (item.description.toLowerCase().includes(term)) {\n            if (!highlights.description) highlights.description = [];\n            highlights.description.push(term);\n          }\n        });\n      }\n\n      return {\n        ...item,\n        score,\n        highlights,\n      };\n    })\n    .filter((item) => item.score > 0)\n    .sort((a, b) => b.score - a.score);\n};\n\n// Generate search suggestions\nconst generateSuggestions = (\n  query: string,\n  data: SearchResult[],\n  recentSearches: string[]\n): SearchSuggestion[] => {\n  const suggestions: SearchSuggestion[] = [];\n  if (!data || data.length === 0) return suggestions;\n\n  const lowercaseQuery = query.toLowerCase();\n\n  // Recent searches\n  recentSearches\n    .filter((search) => search.toLowerCase().includes(lowercaseQuery))\n    .slice(0, 3)\n    .forEach((search) => {\n      suggestions.push({\n        text: search,\n        type: \"query\",\n      });\n    });\n\n  // Category suggestions\n  const categories = [...new Set(data.map((item) => item.category))];\n  categories\n    .filter((category) => category.toLowerCase().includes(lowercaseQuery))\n    .slice(0, 3)\n    .forEach((category) => {\n      const count = data.filter((item) => item.category === category).length;\n      suggestions.push({\n        text: category,\n        type: \"category\",\n        category: \"Categories\",\n        count,\n      });\n    });\n\n  // Tag suggestions\n  const allTags = data.flatMap((item) => item.tags);\n  const tagCounts = allTags.reduce(\n    (acc, tag) => {\n      acc[tag] = (acc[tag] || 0) + 1;\n      return acc;\n    },\n    {} as Record<string, number>\n  );\n\n  Object.entries(tagCounts)\n    .filter(([tag]) => tag.toLowerCase().includes(lowercaseQuery))\n    .sort(([, a], [, b]) => b - a)\n    .slice(0, 5)\n    .forEach(([tag, count]) => {\n      suggestions.push({\n        text: tag,\n        type: \"tag\",\n        category: \"Tags\",\n        count,\n      });\n    });\n\n  return suggestions;\n};\n\nexport const GlassIntelligentSearch: React.FC<IntelligentSearchProps> = ({\n  data = [],\n  onSearch,\n  onResultClick,\n  placeholder = \"Search with natural language...\",\n  showFilters = true,\n  showSuggestions = true,\n  enableNLP = true,\n  enableVoiceSearch = false,\n  maxResults = 50,\n  className,\n  \"aria-label\": ariaLabel,\n  \"data-testid\": dataTestId,\n}) => {\n  const [query, setQuery] = useState(\"\");\n  const [results, setResults] = useState<SearchResult[]>([]);\n  const [suggestions, setSuggestions] = useState<SearchSuggestion[]>([]);\n  const [filters, setFilters] = useState<SearchFilters>({});\n  const [showSuggestionsList, setShowSuggestionsList] = useState(false);\n  const [isSearching, setIsSearching] = useState(false);\n  const [recentSearches, setRecentSearches] = useState<string[]>([]);\n  const [searchAnalysis, setSearchAnalysis] = useState<QueryAnalysis | null>(\n    null\n  );\n  const [isListening, setIsListening] = useState(false);\n\n  const searchInputRef = useRef<HTMLInputElement>(null);\n  const searchTimeoutRef = useRef<NodeJS.Timeout>();\n  const suggestionRefs = useRef<(HTMLElement | null)[]>([]);\n  const isMountedRef = useRef(false);\n  const isInitialMountRef = useRef(true);\n\n  const prefersReducedMotion = useReducedMotion();\n\n  // Generate available filters from data - memoize to prevent unnecessary recalculations\n  const availableFilters = useMemo((): SearchFilter[] => {\n    if (!data || data.length === 0) return [];\n\n    const categories = [...new Set(data.map((item) => item.category))];\n    const allTags = data.flatMap((item) => item?.tags || []);\n    const tagCounts = allTags.reduce(\n      (acc, tag) => {\n        if (tag) {\n          acc[tag] = (acc[tag] || 0) + 1;\n        }\n        return acc;\n      },\n      {} as Record<string, number>\n    );\n\n    const topTags = Object.entries(tagCounts)\n      .sort(([, a], [, b]) => b - a)\n      .slice(0, 20)\n      .map(([tag, count]) => ({ value: tag, label: tag, count }));\n\n    return [\n      {\n        id: \"category\",\n        name: \"Category\",\n        type: \"multiselect\",\n        options: categories.map((cat) => ({\n          value: cat,\n          label: cat,\n          count: data.filter((item) => item.category === cat).length,\n        })),\n      },\n      {\n        id: \"tags\",\n        name: \"Tags\",\n        type: \"multiselect\",\n        options: topTags,\n      },\n      {\n        id: \"rating\",\n        name: \"Minimum Rating\",\n        type: \"range\",\n        range: { min: 0, max: 5, step: 0.5 },\n      },\n    ];\n  }, [data]);\n\n  // Set initial mount flag and cleanup before the dependent effects run.\n  useEffect(() => {\n    isMountedRef.current = true;\n    isInitialMountRef.current = true;\n\n    return () => {\n      isMountedRef.current = false;\n      if (searchTimeoutRef.current) {\n        clearTimeout(searchTimeoutRef.current);\n      }\n    };\n  }, []);\n\n  // Debounced search\n  const performSearch = useCallback(\n    (searchQuery: string, currentFilters: SearchFilters) => {\n      if (!isMountedRef.current) return;\n\n      setIsSearching(true);\n\n      if (searchTimeoutRef.current) {\n        clearTimeout(searchTimeoutRef.current);\n      }\n      searchTimeoutRef.current = setTimeout(() => {\n        if (!isMountedRef.current) return;\n\n        // Don't search if query is empty and filters are empty\n        if (!searchQuery.trim() && Object.keys(currentFilters).length === 0) {\n          setResults([]);\n          setIsSearching(false);\n          return;\n        }\n\n        const searchResults = performIntelligentSearch(\n          searchQuery,\n          data,\n          currentFilters,\n          enableNLP\n        );\n        const limitedResults = searchResults.slice(0, maxResults);\n\n        setResults(limitedResults);\n        setIsSearching(false);\n\n        if (enableNLP && searchQuery.trim()) {\n          setSearchAnalysis(analyzeQuery(searchQuery));\n        }\n\n        onSearch?.(searchQuery, currentFilters);\n      }, 300);\n    },\n    [data, enableNLP, maxResults, onSearch]\n  );\n\n  // Update suggestions when query changes - prevent infinite loops\n  useEffect(() => {\n    // Skip initial mount completely\n    if (isInitialMountRef.current) {\n      isInitialMountRef.current = false;\n      return;\n    }\n\n    if (!isMountedRef.current) return;\n\n    // Only update suggestions if query has content - don't depend on data to prevent loops\n    if (query.length > 0) {\n      // Use current data from closure, but don't include in deps\n      const currentData = data.length > 0 ? data : [];\n      const newSuggestions = generateSuggestions(\n        query,\n        currentData,\n        recentSearches\n      );\n      setSuggestions(newSuggestions);\n      setShowSuggestionsList(true);\n    } else {\n      setSuggestions([]);\n      setShowSuggestionsList(false);\n    }\n  }, [query]); // Only depend on query - data and recentSearches accessed via closure\n\n  // Perform search when query or filters change - use ref to avoid infinite loop\n  const performSearchRef = useRef(performSearch);\n  performSearchRef.current = performSearch;\n\n  useEffect(() => {\n    // Skip initial mount to prevent infinite loop\n    if (isInitialMountRef.current) {\n      isInitialMountRef.current = false;\n      return;\n    }\n\n    // Only perform search if component is mounted and we have a query or filters\n    if (!isMountedRef.current) return;\n\n    // Don't search if query is empty and filters are empty\n    if (!query.trim() && Object.keys(filters).length === 0) {\n      setResults([]);\n      setIsSearching(false);\n      return;\n    }\n\n    // Use ref to avoid dependency on performSearch\n    performSearchRef.current(query, filters);\n\n    return () => {\n      if (searchTimeoutRef.current) {\n        clearTimeout(searchTimeoutRef.current);\n      }\n    };\n  }, [query, filters]); // Only depend on query and filters\n\n  const handleQueryChange = (value: string) => {\n    setQuery(value);\n  };\n\n  const handleSuggestionClick = (suggestion: SearchSuggestion) => {\n    if (suggestion.type === \"query\") {\n      setQuery(suggestion.text);\n    } else if (suggestion.type === \"category\") {\n      setFilters((prev) => ({\n        ...prev,\n        category: [...getStringFilterValues(prev.category), suggestion.text],\n      }));\n    } else if (suggestion.type === \"tag\") {\n      setFilters((prev) => ({\n        ...prev,\n        tags: [...getStringFilterValues(prev.tags), suggestion.text],\n      }));\n    }\n    setShowSuggestionsList(false);\n    searchInputRef.current?.focus();\n  };\n\n  const handleSearchSubmit = () => {\n    if (query.trim() && !recentSearches.includes(query.trim())) {\n      setRecentSearches((prev) => [query.trim(), ...prev.slice(0, 9)]);\n    }\n    setShowSuggestionsList(false);\n  };\n\n  const handleFilterChange = (filterId: string, value: SearchFilterValue) => {\n    setFilters((prev) => ({\n      ...prev,\n      [filterId]: value,\n    }));\n  };\n\n  const clearFilters = () => {\n    setFilters({});\n  };\n\n  const startVoiceSearch = () => {\n    const SpeechRecognitionCtor = window.webkitSpeechRecognition;\n    if (!enableVoiceSearch || !SpeechRecognitionCtor) return;\n\n    const recognition = new SpeechRecognitionCtor();\n    recognition.lang = \"en-US\";\n    recognition.continuous = false;\n    recognition.interimResults = false;\n\n    recognition.onstart = () => {\n      setIsListening(true);\n    };\n\n    recognition.onresult = (event) => {\n      const transcript = event.results[0][0].transcript;\n      setQuery(transcript);\n      setIsListening(false);\n    };\n\n    recognition.onerror = () => {\n      setIsListening(false);\n    };\n\n    recognition.onend = () => {\n      setIsListening(false);\n    };\n\n    recognition.start();\n  };\n\n  const highlightText = (text: string, highlights: string[] = []) => {\n    if (!highlights.length) return text;\n\n    const escapedTerms = highlights\n      .filter(Boolean)\n      .map((term) => term.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n    if (!escapedTerms.length) return text;\n\n    const regex = new RegExp(`(${escapedTerms.join(\"|\")})`, \"gi\");\n\n    return (\n      <>\n        {text.split(regex).map((part, index) =>\n          escapedTerms.some((term) =>\n            new RegExp(`^${term}$`, \"i\").test(part)\n          ) ? (\n            <mark\n              key={`${part}-${index}`}\n              className=\"glass-px-1 glass-radius-sm glass-surface-subtle glass-text-primary\"\n            >\n              {part}\n            </mark>\n          ) : (\n            <React.Fragment key={`${part}-${index}`}>{part}</React.Fragment>\n          )\n        )}\n      </>\n    );\n  };\n\n  const getResultIcon = (category: string) => {\n    const icons: Record<string, string> = {\n      document: \"\uD83D\uDCC4\",\n      article: \"\uD83D\uDCDD\",\n      image: \"\uD83D\uDDBC\uFE0F\",\n      video: \"\uD83C\uDFA5\",\n      product: \"\uD83D\uDECD\uFE0F\",\n      user: \"\uD83D\uDC64\",\n      project: \"\uD83D\uDCC1\",\n      service: \"\u2699\uFE0F\",\n    };\n    return icons[category.toLowerCase()] || \"\uD83D\uDD0D\";\n  };\n\n  return (\n    <div\n      data-glass-component\n      className={cn(\n        \"glass-intelligent-search glass-w-full glass-min-w-0\",\n        className\n      )}\n      style={{ width: \"100%\", maxWidth: \"64rem\", margin: \"0 auto\" }}\n      aria-label={ariaLabel}\n      data-testid={dataTestId}\n    >\n      <style>{`\n        .glass-intelligent-search-panel {\n          background: var(--glass-neutral-level3-surface) !important;\n          border-color: var(--glass-neutral-level3-border-color) !important;\n          color: var(--glass-neutral-level3-text-primary) !important;\n          box-shadow: var(--glass-neutral-level3-shadow);\n        }\n\n        .glass-intelligent-search-panel label,\n        .glass-intelligent-search-panel p,\n        .glass-intelligent-search-panel span {\n          color: inherit;\n        }\n\n        .glass-intelligent-search-panel button {\n          background-color: rgba(var(--glass-color-white) / 0.1) !important;\n          border: 1px solid var(--glass-border-default) !important;\n          color: var(--glass-text-primary) !important;\n          border-radius: var(--glass-radius-md);\n        }\n\n        .glass-intelligent-search-panel .glass-search-primary-action {\n          background: var(--glass-primary-level3-surface) !important;\n          border-color: var(--glass-primary-level3-border-color);\n          color: var(--glass-primary-level3-text-primary) !important;\n        }\n\n        .glass-intelligent-search-dropdown {\n          background: var(--glass-neutral-level4-surface) !important;\n          backdrop-filter: blur(var(--glass-neutral-level4-blur)) var(--glass-filter-base);\n          -webkit-backdrop-filter: blur(var(--glass-neutral-level4-blur)) var(--glass-filter-base);\n        }\n\n        .glass-intelligent-search input[type=\"text\"] {\n          appearance: none;\n          -webkit-appearance: none;\n          background: rgba(var(--glass-color-white) / 0.08);\n          color: var(--glass-text-primary);\n          border-color: var(--glass-border-default);\n          box-shadow: inset 0 1px 0 rgba(var(--glass-color-white) / 0.12);\n        }\n\n        .glass-intelligent-search input[type=\"text\"]::placeholder {\n          color: var(--glass-text-tertiary);\n        }\n\n        .glass-search-checkbox {\n          appearance: none;\n          -webkit-appearance: none;\n          width: 1rem;\n          height: 1rem;\n          flex: 0 0 1rem;\n          margin-top: 0.125rem;\n          border-radius: 0.375rem;\n          border: 1px solid rgba(148, 163, 184, 0.6);\n          background:\n            linear-gradient(135deg, rgba(30, 41, 59, 0.88), rgba(15, 23, 42, 0.74)),\n            rgba(15, 23, 42, 0.82);\n          box-shadow:\n            inset 0 1px 1px rgba(255, 255, 255, 0.12),\n            0 4px 12px rgba(2, 6, 23, 0.22);\n          cursor: pointer;\n        }\n\n        .glass-search-checkbox:checked {\n          border-color: rgba(56, 189, 248, 0.9);\n          background:\n            linear-gradient(135deg, rgba(56, 189, 248, 0.96), rgba(37, 99, 235, 0.9)),\n            rgba(255, 255, 255, 0.76);\n          box-shadow:\n            inset 0 0 0 3px rgba(255, 255, 255, 0.82),\n            0 0 0 1px rgba(125, 211, 252, 0.34),\n            0 8px 18px rgba(14, 165, 233, 0.22);\n        }\n\n        .glass-search-range {\n          appearance: none;\n          -webkit-appearance: none;\n          height: 0.625rem;\n          border-radius: 999px;\n          border: 1px solid rgba(148, 163, 184, 0.42);\n          background:\n            linear-gradient(90deg, rgba(56, 189, 248, 0.9), rgba(125, 211, 252, 0.44)),\n            rgba(255, 255, 255, 0.72);\n          box-shadow:\n            inset 0 1px 2px rgba(2, 6, 23, 0.28),\n            0 1px 0 rgba(255, 255, 255, 0.08);\n          cursor: pointer;\n        }\n\n        .glass-search-range::-webkit-slider-thumb {\n          appearance: none;\n          -webkit-appearance: none;\n          width: 1.125rem;\n          height: 1.125rem;\n          border-radius: 999px;\n          border: 2px solid rgba(248, 250, 252, 0.96);\n          background: #38bdf8;\n          box-shadow: 0 6px 18px rgba(14, 165, 233, 0.4);\n        }\n\n        .glass-search-range::-moz-range-thumb {\n          width: 1.125rem;\n          height: 1.125rem;\n          border-radius: 999px;\n          border: 2px solid rgba(248, 250, 252, 0.96);\n          background: #38bdf8;\n          box-shadow: 0 6px 18px rgba(14, 165, 233, 0.4);\n        }\n      `}</style>\n      {/* Search Input */}\n      <Glass className=\"glass-relative glass-intelligent-search-panel\">\n        <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-3 glass-p-4\">\n          <div className=\"glass-relative glass-flex-1\">\n            <input\n              ref={searchInputRef}\n              type=\"text\"\n              value={query}\n              onChange={(e) => handleQueryChange(e.target.value)}\n              onKeyDown={(e) => {\n                if (e.key === \"Enter\") {\n                  handleSearchSubmit();\n                } else if (e.key === \"Escape\") {\n                  setShowSuggestionsList(false);\n                }\n              }}\n              onFocus={() => setShowSuggestionsList(suggestions.length > 0)}\n              placeholder={placeholder}\n              className=\"glass-w-full glass-min-w-0 glass-pl-10 glass-pr-4 glass-py-3 glass-border glass-border-subtle glass-radius-lg glass-focus-ring-2 glass-focus-ring-blue-500 focus:glass-border-blue glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Search input\"\n              aria-busy={isSearching}\n            />\n\n            <div className=\"glass-absolute glass-left-3 glass-top-1/2 glass-transform glass--translate-y-1-2\">\n              {isSearching ? (\n                <div\n                  className={cn(\n                    \"glass-w-5 glass-h-5 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full\",\n                    !prefersReducedMotion && \"glass-animate-spin\"\n                  )}\n                  role=\"status\"\n                  aria-label=\"Searching\"\n                />\n              ) : (\n                <span className=\"glass-text-secondary glass-text-lg\">\uD83D\uDD0D</span>\n              )}\n            </div>\n          </div>\n\n          {enableVoiceSearch && (\n            <button\n              onClick={startVoiceSearch}\n              disabled={isListening}\n              className={cn(\n                \"glass-px-3 glass-py-3 glass-radius-lg glass-focus glass-touch-target glass-contrast-guard\",\n                !prefersReducedMotion && \"glass-transition-colors\",\n                isListening\n                  ? cn(\n                      \"glass-surface-subtle glass-text-primary\",\n                      !prefersReducedMotion && \"glass-animate-pulse\"\n                    )\n                  : \"glass-surface-subtle glass-text-secondary hover:glass-surface-subtle\"\n              )}\n              title=\"Voice search\"\n            >\n              \uD83C\uDFA4\n            </button>\n          )}\n\n          <button\n            onClick={handleSearchSubmit}\n            className={cn(\n              \"glass-search-primary-action glass-px-6 glass-py-3 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-focus glass-touch-target glass-contrast-guard\",\n              !prefersReducedMotion && \"glass-transition-colors\"\n            )}\n          >\n            Search\n          </button>\n        </div>\n\n        {/* Suggestions Dropdown */}\n        {showSuggestionsList && suggestions.length > 0 && (\n          <div\n            className=\"glass-intelligent-search-panel glass-intelligent-search-dropdown glass-absolute glass-top-full glass-left-0 glass-right-0 glass-mt-2 glass-surface-subtle glass-border glass-border-subtle glass-radius-lg glass-shadow-lg glass-z-50 glass-max-h-60 glass-overflow-y-auto glass-contrast-guard\"\n            role=\"listbox\"\n          >\n            {suggestions.map((suggestion, index) => (\n              <button\n                key={`${suggestion.type}-${suggestion.text}`}\n                ref={(el) => (suggestionRefs.current[index] = el)}\n                onClick={() => handleSuggestionClick(suggestion)}\n                className=\"glass-w-full glass-px-4 glass-py-2 glass-text-left hover:glass-surface-subtle glass-flex glass-items-center glass-justify-between glass-gap-3 glass-border-b glass-border-subtle last:glass-border-b-0 glass-focus glass-touch-target glass-contrast-guard\"\n                role=\"option\"\n              >\n                <div className=\"glass-flex glass-min-w-0 glass-items-center glass-gap-3\">\n                  <span className=\"glass-text-sm\">\n                    {suggestion.type === \"query\" && \"\uD83D\uDD0D\"}\n                    {suggestion.type === \"category\" && \"\uD83D\uDCC1\"}\n                    {suggestion.type === \"tag\" && \"\uD83C\uDFF7\uFE0F\"}\n                  </span>\n                  <span className=\"glass-text-secondary glass-min-w-0 glass-break-words\">\n                    {suggestion.text}\n                  </span>\n                  {suggestion.category && (\n                    <span className=\"glass-text-xs glass-text-secondary\">\n                      in {suggestion.category}\n                    </span>\n                  )}\n                </div>\n                {suggestion.count && (\n                  <span className=\"glass-text-xs glass-text-secondary\">\n                    {suggestion.count}\n                  </span>\n                )}\n              </button>\n            ))}\n          </div>\n        )}\n      </Glass>\n\n      {/* NLP Analysis Display */}\n      {enableNLP && searchAnalysis && query.trim() && (\n        <Glass className=\"glass-intelligent-search-panel glass-mt-4 glass-p-4 glass-surface-subtle\">\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-3 glass-text-sm\">\n            <div className=\"glass-flex glass-min-w-0 glass-items-center glass-gap-2\">\n              <span className=\"glass-font-medium glass-text-primary\">\n                Intent:\n              </span>\n              <span className=\"glass-px-2 glass-py-1 glass-surface-subtle glass-text-primary glass-radius glass-capitalize glass-break-words\">\n                {searchAnalysis.intent}\n              </span>\n            </div>\n\n            {searchAnalysis.entities.length > 0 && (\n              <div className=\"glass-flex glass-min-w-0 glass-flex-wrap glass-items-center glass-gap-2\">\n                <span className=\"glass-font-medium glass-text-primary\">\n                  Entities:\n                </span>\n                <div className=\"glass-flex glass-flex-wrap glass-gap-1\">\n                  {searchAnalysis.entities.slice(0, 3).map((entity, index) => (\n                    <span\n                      key={index}\n                      className=\"glass-px-2 glass-py-1 glass-surface-subtle glass-text-primary glass-radius glass-text-xs glass-break-words\"\n                    >\n                      {entity.type}: {entity.value}\n                    </span>\n                  ))}\n                </div>\n              </div>\n            )}\n\n            <div className=\"glass-flex glass-min-w-0 glass-flex-wrap glass-items-center glass-gap-2\">\n              <span className=\"glass-font-medium glass-text-primary\">\n                Keywords:\n              </span>\n              <div className=\"glass-flex glass-flex-wrap glass-gap-1\">\n                {searchAnalysis.keywords\n                  .slice(0, 4)\n                  .map((keyword: string, index: number) => (\n                    <span\n                      key={index}\n                      className=\"glass-px-2 glass-py-1 glass-surface-subtle glass-text-primary glass-radius glass-text-xs glass-break-words\"\n                    >\n                      {keyword}\n                    </span>\n                  ))}\n              </div>\n            </div>\n          </div>\n        </Glass>\n      )}\n\n      {/* Filters */}\n      {showFilters && availableFilters.length > 0 && (\n        <Glass className=\"glass-intelligent-search-panel glass-mt-4 glass-p-4\">\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-3 glass-mb-4\">\n            <h3 className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n              Filters\n            </h3>\n            {Object.keys(filters).length > 0 && (\n              <button\n                onClick={clearFilters}\n                className=\"glass-text-sm glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Clear all\n              </button>\n            )}\n          </div>\n\n          <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-3 glass-gap-4\">\n            {availableFilters.map((filter) => (\n              <div key={filter.id}>\n                <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary glass-mb-2\">\n                  {filter.name}\n                </label>\n\n                {filter.type === \"multiselect\" && (\n                  <div className=\"glass-space-y-2 glass-max-h-32 glass-overflow-y-auto\">\n                    {filter.options?.map((option) => (\n                      <label\n                        key={option.value}\n                        className=\"glass-flex glass-items-start glass-gap-2 glass-text-sm glass-touch-target glass-contrast-guard\"\n                      >\n                        <input\n                          type=\"checkbox\"\n                          data-glass-component=\"checkbox\"\n                          checked={getStringFilterValues(\n                            filters[filter.id]\n                          ).includes(option.value)}\n                          onChange={(e) => {\n                            const current = getStringFilterValues(\n                              filters[filter.id]\n                            );\n                            if (e.target.checked) {\n                              handleFilterChange(filter.id, [\n                                ...current,\n                                option.value,\n                              ]);\n                            } else {\n                              handleFilterChange(\n                                filter.id,\n                                current.filter(\n                                  (v: string) => v !== option.value\n                                )\n                              );\n                            }\n                          }}\n                          className=\"glass-search-checkbox glass-radius glass-border-subtle glass-text-primary glass-focus-ring-blue-500 glass-focus glass-contrast-guard\"\n                        />\n                        <span className=\"glass-flex-1 glass-min-w-0 glass-break-words\">\n                          {option.label}\n                        </span>\n                        <span className=\"glass-text-secondary glass-text-xs\">\n                          ({option.count})\n                        </span>\n                      </label>\n                    ))}\n                  </div>\n                )}\n\n                {filter.type === \"range\" && filter.range && (\n                  <div>\n                    <input\n                      type=\"range\"\n                      data-glass-component=\"range\"\n                      min={filter.range.min}\n                      max={filter.range.max}\n                      step={filter.range.step || 1}\n                      value={getNumericFilterValue(\n                        filters[filter.id],\n                        filter.range.min\n                      )}\n                      onChange={(e) =>\n                        handleFilterChange(\n                          filter.id,\n                          parseFloat(e.target.value)\n                        )\n                      }\n                      className=\"glass-search-range glass-w-full glass-focus glass-contrast-guard\"\n                    />\n                    <div className=\"glass-flex glass-justify-between glass-text-xs glass-text-secondary glass-mt-1\">\n                      <span>{filter.range.min}</span>\n                      <span className=\"glass-font-medium\">\n                        {getNumericFilterValue(\n                          filters[filter.id],\n                          filter.range.min\n                        )}\n                      </span>\n                      <span>{filter.range.max}</span>\n                    </div>\n                  </div>\n                )}\n              </div>\n            ))}\n          </div>\n        </Glass>\n      )}\n\n      {/* Results */}\n      <div className=\"glass-mt-6\">\n        {query.trim() || Object.keys(filters).length > 0 ? (\n          <div\n            className=\"glass-mb-4 glass-text-sm glass-text-secondary glass-break-words\"\n            role=\"status\"\n            aria-live=\"polite\"\n          >\n            Found {results.length} results\n            {query.trim() && (\n              <span>\n                {\" \"}\n                for \"<span className=\"glass-font-medium\">{query}</span>\"\n              </span>\n            )}\n            {Object.keys(filters).length > 0 && (\n              <span> with {Object.keys(filters).length} filters applied</span>\n            )}\n          </div>\n        ) : null}\n\n        <div className=\"glass-space-y-4\">\n          {results.map((result) => (\n            <Glass\n              key={result.id}\n              className={cn(\n                \"glass-intelligent-search-panel glass-p-6 glass-cursor-pointer hover:glass-shadow-lg glass-contrast-guard\",\n                !prefersReducedMotion && \"glass-transition-shadow\"\n              )}\n              onClick={() => onResultClick?.(result)}\n              onKeyDown={(event: React.KeyboardEvent) => {\n                if (event.key === \"Enter\" || event.key === \" \") {\n                  event.preventDefault();\n                  onResultClick?.(result);\n                }\n              }}\n              role={onResultClick ? \"button\" : \"article\"}\n              tabIndex={onResultClick ? 0 : undefined}\n            >\n              <div className=\"glass-flex glass-flex-col sm:glass-flex-row glass-items-start glass-gap-4\">\n                <div className=\"glass-text-2xl glass-flex-shrink-0\">\n                  {getResultIcon(result.category)}\n                </div>\n\n                <div className=\"glass-flex-1 glass-min-w-0\">\n                  <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-2 glass-mb-2\">\n                    <h3 className=\"glass-text-lg glass-font-semibold glass-text-secondary glass-min-w-0 glass-break-words\">\n                      {highlightText(result.title, result.highlights?.title)}\n                    </h3>\n                    <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius glass-break-words\">\n                      {result.category}\n                    </span>\n                    {result.metadata?.rating && (\n                      <div className=\"glass-flex glass-items-center glass-gap-1\">\n                        <span className=\"glass-text-primary\">\u2B50</span>\n                        <span className=\"glass-text-sm glass-text-secondary\">\n                          {result.metadata.rating}\n                        </span>\n                      </div>\n                    )}\n                  </div>\n\n                  <p className=\"glass-text-secondary glass-mb-3 glass-break-words\">\n                    {highlightText(\n                      result.description,\n                      result.highlights?.description\n                    )}\n                  </p>\n\n                  {result.tags.length > 0 && (\n                    <div className=\"glass-flex glass-flex-wrap glass-gap-1\">\n                      {result.tags.slice(0, 5).map((tag) => (\n                        <span\n                          key={tag}\n                          className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-primary glass-radius glass-break-words\"\n                        >\n                          {tag}\n                        </span>\n                      ))}\n                      {result.tags.length > 5 && (\n                        <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius\">\n                          +{result.tags.length - 5} more\n                        </span>\n                      )}\n                    </div>\n                  )}\n                </div>\n\n                <div className=\"glass-text-sm glass-text-secondary glass-flex-shrink-0\">\n                  Score: {result.score.toFixed(1)}\n                </div>\n              </div>\n            </Glass>\n          ))}\n\n          {results.length === 0 &&\n            (query.trim() || Object.keys(filters).length > 0) &&\n            !isSearching && (\n              <Glass className=\"glass-intelligent-search-panel glass-text-center glass-px-6 glass-py-12 glass-text-secondary glass-surface-subtle glass-contrast-guard\">\n                <div className=\"glass-text-5xl glass-mb-4\">\uD83D\uDD0D</div>\n                <h3 className=\"glass-text-lg glass-font-medium glass-mb-2 glass-text-secondary\">\n                  No results found\n                </h3>\n                <p className=\"glass-text-sm glass-break-words\">\n                  Try adjusting your search terms or filters, or try using more\n                  general keywords.\n                </p>\n              </Glass>\n            )}\n        </div>\n      </div>\n    </div>\n  );\n};\n", "\"use client\";\n\nimport React, {\n  forwardRef,\n  useMemo,\n  useState,\n  type CSSProperties,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassSearchResult {\n  id: string;\n  label: string;\n  description?: string;\n  group?: string;\n}\n\nexport interface LiquidGlassSearchFieldProps extends Omit<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"onSelect\" | \"results\"\n> {\n  value?: string;\n  onValueChange?: (value: string) => void;\n  onSelect?: (result: LiquidGlassSearchResult) => void;\n  placeholder?: string;\n  placement?: \"bottom\" | \"top-trailing\" | \"center\" | \"auto\";\n  minimized?: boolean;\n  onMinimizedChange?: (minimized: boolean) => void;\n  suggestions?: string[];\n  results?: LiquidGlassSearchResult[];\n  scope?: string;\n}\n\nconst searchControlStyle: CSSProperties = {\n  border: 0,\n  background: \"transparent\",\n  color: \"inherit\",\n  font: \"inherit\",\n  outline: \"none\",\n};\n\nconst searchFieldStyles = `\n  .liquid-glass-search-field,\n  .liquid-glass-search-field * {\n    box-sizing: border-box;\n  }\n\n  .liquid-glass-search-field-control {\n    color: var(--glass-text-primary);\n  }\n\n  .liquid-glass-search-field-control input::placeholder {\n    color: var(--glass-text-tertiary);\n  }\n\n  .liquid-glass-search-field-dropdown {\n    background: var(--glass-neutral-level4-surface);\n    border: 1px solid var(--glass-neutral-level4-border-color);\n    color: var(--glass-neutral-level4-text-primary);\n    backdrop-filter: blur(var(--glass-neutral-level4-blur)) var(--glass-filter-base);\n    -webkit-backdrop-filter: blur(var(--glass-neutral-level4-blur)) var(--glass-filter-base);\n    box-shadow: var(--glass-neutral-level4-shadow);\n    overflow: hidden;\n  }\n\n  .liquid-glass-search-field-option {\n    background: rgba(var(--glass-color-white) / 0.06);\n    color: var(--glass-text-primary);\n    border: 1px solid transparent;\n  }\n\n  .liquid-glass-search-field-option:hover,\n  .liquid-glass-search-field-option:focus-visible {\n    background: rgba(56, 189, 248, 0.2);\n    border-color: rgba(125, 211, 252, 0.28);\n  }\n`;\n\nexport const LiquidGlassSearchField = forwardRef<\n  HTMLDivElement,\n  LiquidGlassSearchFieldProps\n>(\n  (\n    {\n      value,\n      onValueChange,\n      onSelect,\n      placeholder = \"Search\",\n      placement = \"auto\",\n      minimized = false,\n      onMinimizedChange,\n      suggestions = [],\n      results = [],\n      scope,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [internalValue, setInternalValue] = useState(\"\");\n    const query = value ?? internalValue;\n    const visibleResults = useMemo(\n      () =>\n        query\n          ? results.filter((result) =>\n              result.label.toLowerCase().includes(query.toLowerCase())\n            )\n          : results.slice(0, 6),\n      [query, results]\n    );\n    const updateQuery = (next: string) => {\n      setInternalValue(next);\n      onValueChange?.(next);\n    };\n\n    return (\n      <div\n        ref={ref}\n        className={cn(\"liquid-glass-search-field glass-relative\", className)}\n        data-liquid-glass-search-field=\"true\"\n        data-placement={placement}\n        data-minimized={minimized ? \"true\" : \"false\"}\n        {...props}\n      >\n        <style>{searchFieldStyles}</style>\n        <LiquidGlassMaterial\n          material=\"liquid\"\n          radius=\"full\"\n          interactive\n          elevation=\"level1\"\n          sheen={0}\n          adaptToContent={false}\n          enableRefraction={false}\n          enableReflection={false}\n          performanceLevel=\"efficient\"\n          className=\"liquid-glass-search-field-control\"\n          style={{\n            background:\n              \"var(--glass-primary-level3-surface)\",\n            border: \"1px solid rgba(148, 163, 184, 0.24)\",\n            boxShadow:\n              \"0 10px 28px rgba(2, 6, 23, 0.22), inset 0 1px 0 rgba(255, 255, 255, 0.08)\",\n          }}\n        >\n          <label className=\"glass-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2\">\n            <span className=\"glass-sr-only\">{placeholder}</span>\n            {scope && (\n              <span className=\"glass-text-xs glass-text-secondary\">\n                {scope}\n              </span>\n            )}\n            {minimized ? (\n              <button\n                type=\"button\"\n                onClick={() => onMinimizedChange?.(false)}\n                aria-label=\"Open search\"\n                style={{ ...searchControlStyle, cursor: \"pointer\" }}\n              >\n                Search\n              </button>\n            ) : (\n              <input\n                value={query}\n                onChange={(event) => updateQuery(event.target.value)}\n                placeholder={placeholder}\n                className=\"glass-min-w-0 glass-flex-1 glass-bg-transparent glass-outline-none\"\n                style={{ ...searchControlStyle, minWidth: 0 }}\n                role=\"combobox\"\n                aria-expanded={visibleResults.length > 0}\n              />\n            )}\n          </label>\n        </LiquidGlassMaterial>\n        {!minimized &&\n          (visibleResults.length > 0 || suggestions.length > 0) && (\n            <LiquidGlassMaterial\n              material=\"liquid\"\n              radius=\"xl\"\n              elevation=\"level1\"\n              sheen={0}\n              adaptToContent={false}\n              enableRefraction={false}\n              enableReflection={false}\n              performanceLevel=\"efficient\"\n              className=\"liquid-glass-search-field-dropdown glass-absolute glass-left-0 glass-right-0 glass-top-full glass-z-50 glass-mt-2\"\n              style={{\n                background:\n                  \"var(--glass-primary-level3-surface)\",\n                border: \"1px solid rgba(148, 163, 184, 0.2)\",\n                boxShadow: \"0 18px 44px rgba(2, 6, 23, 0.34)\",\n              }}\n            >\n              <div\n                role=\"listbox\"\n                className=\"glass-flex glass-flex-col glass-p-2\"\n                style={{ maxHeight: 280, overflowY: \"auto\" }}\n              >\n                {visibleResults.map((result) => (\n                  <button\n                    key={result.id}\n                    type=\"button\"\n                    role=\"option\"\n                    className=\"liquid-glass-search-field-option glass-radius-lg glass-px-3 glass-py-2 glass-text-left\"\n                    style={{ ...searchControlStyle, cursor: \"pointer\" }}\n                    onClick={() => onSelect?.(result)}\n                  >\n                    <span className=\"glass-block\">{result.label}</span>\n                    {result.description && (\n                      <span className=\"glass-text-xs glass-text-secondary\">\n                        {result.description}\n                      </span>\n                    )}\n                  </button>\n                ))}\n                {!query &&\n                  suggestions.map((suggestion) => (\n                    <button\n                      key={suggestion}\n                      type=\"button\"\n                      className=\"liquid-glass-search-field-option glass-radius-lg glass-px-3 glass-py-2 glass-text-left\"\n                      style={{ ...searchControlStyle, cursor: \"pointer\" }}\n                      onClick={() => updateQuery(suggestion)}\n                    >\n                      {suggestion}\n                    </button>\n                  ))}\n              </div>\n            </LiquidGlassMaterial>\n          )}\n      </div>\n    );\n  }\n);\n\nLiquidGlassSearchField.displayName = \"LiquidGlassSearchField\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { LiquidGlassSearchField, type LiquidGlassSearchFieldProps } from \"./LiquidGlassSearchField\";\n\nexport interface LiquidGlassSearchTabProps extends LiquidGlassSearchFieldProps {\n  active?: boolean;\n  tabId?: string;\n}\n\nexport const LiquidGlassSearchTab = forwardRef<HTMLDivElement, LiquidGlassSearchTabProps>(\n  ({ active = true, tabId = \"search\", ...props }, ref) => {\n    if (!active) return null;\n    return (\n      <LiquidGlassSearchField\n        ref={ref}\n        placement=\"bottom\"\n        data-liquid-glass-search-tab={tabId}\n        {...props}\n      />\n    );\n  }\n);\n\nLiquidGlassSearchTab.displayName = \"LiquidGlassSearchTab\";\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n} from \"react\";\nimport { motion } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\nexport interface FilterEffect {\n  id: string;\n  name: string;\n  description: string;\n  category: \"artistic\" | \"color\" | \"blur\" | \"distortion\" | \"vintage\" | \"modern\";\n  intensity: number;\n  parameters?: FilterParameters;\n}\n\nexport type FilterParameterValue = number | string;\nexport type FilterParameters = Record<string, FilterParameterValue>;\ntype ProcessingQuality = ProcessingSettings[\"quality\"];\n\nexport interface ProcessingSettings {\n  quality: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  fps: number;\n  enableGPU: boolean;\n  batchSize: number;\n}\n\nexport interface GlassLiveFilterProps {\n  videoSource?: string | MediaStream;\n  imageSource?: string;\n  availableFilters?: FilterEffect[];\n  selectedFilters?: string[];\n  processingSettings?: Partial<ProcessingSettings>;\n  compact?: boolean;\n  showHeader?: boolean;\n  showActions?: boolean;\n  showFilterLibrary?: boolean;\n  showPreview?: boolean;\n  showControls?: boolean;\n  enableRealTimeProcessing?: boolean;\n  enableChaining?: boolean;\n  enableCustomFilters?: boolean;\n  maxFilters?: number;\n  canvasWidth?: number;\n  canvasHeight?: number;\n  onFilterApply?: (filterId: string, params: FilterParameters) => void;\n  onProcessingComplete?: (processedData: string) => void;\n  onError?: (error: Error) => void;\n  className?: string;\n}\n\nconst defaultFilters: FilterEffect[] = [\n  {\n    id: \"grayscale\",\n    name: \"Grayscale\",\n    description: \"Convert to black and white\",\n    category: \"color\",\n    intensity: 1.0,\n    parameters: { strength: 1.0 },\n  },\n  {\n    id: \"sepia\",\n    name: \"Sepia\",\n    description: \"Vintage sepia tone effect\",\n    category: \"vintage\",\n    intensity: 0.8,\n    parameters: { warmth: 0.8 },\n  },\n  {\n    id: \"blur\",\n    name: \"Gaussian Blur\",\n    description: \"Smooth blur effect\",\n    category: \"blur\",\n    intensity: 1.0,\n    parameters: { radius: 5 },\n  },\n  {\n    id: \"sharpen\",\n    name: \"Sharpen\",\n    description: \"Enhance image details\",\n    category: \"artistic\",\n    intensity: 0.6,\n    parameters: { amount: 0.6 },\n  },\n  {\n    id: \"brightness\",\n    name: \"Brightness\",\n    description: \"Adjust image brightness\",\n    category: \"color\",\n    intensity: 1.2,\n    parameters: { level: 1.2 },\n  },\n  {\n    id: \"contrast\",\n    name: \"Contrast\",\n    description: \"Adjust image contrast\",\n    category: \"color\",\n    intensity: 1.3,\n    parameters: { level: 1.3 },\n  },\n  {\n    id: \"saturation\",\n    name: \"Saturation\",\n    description: \"Adjust color saturation\",\n    category: \"color\",\n    intensity: 1.5,\n    parameters: { level: 1.5 },\n  },\n  {\n    id: \"hue-shift\",\n    name: \"Hue Shift\",\n    description: \"Shift color hues\",\n    category: \"color\",\n    intensity: 0.5,\n    parameters: { degrees: 30 },\n  },\n  {\n    id: \"edge-detect\",\n    name: \"Edge Detection\",\n    description: \"Detect and highlight edges\",\n    category: \"artistic\",\n    intensity: 1.0,\n    parameters: { threshold: 0.5 },\n  },\n  {\n    id: \"emboss\",\n    name: \"Emboss\",\n    description: \"3D embossed effect\",\n    category: \"artistic\",\n    intensity: 0.8,\n    parameters: { strength: 0.8 },\n  },\n  {\n    id: \"vintage\",\n    name: \"Vintage Film\",\n    description: \"Old film camera effect\",\n    category: \"vintage\",\n    intensity: 0.9,\n    parameters: { grain: 0.3, vignette: 0.5 },\n  },\n  {\n    id: \"neon\",\n    name: \"Neon Glow\",\n    description: \"Cyberpunk neon effect\",\n    category: \"modern\",\n    intensity: 1.2,\n    parameters: { glow: 1.2, color: \"var(--glass-color-secondary)\" },\n  },\n];\n\nconst defaultProcessingSettings: ProcessingSettings = {\n  quality: \"medium\",\n  fps: 30,\n  enableGPU: true,\n  batchSize: 4,\n};\n\nconst readableGlassTextStyle = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassLiveFilter = forwardRef<HTMLDivElement, GlassLiveFilterProps>(\n  (\n    {\n      videoSource,\n      imageSource,\n      availableFilters = defaultFilters,\n      selectedFilters = [],\n      processingSettings = {},\n      compact = false,\n      showHeader = !compact,\n      showActions = !compact,\n      showFilterLibrary = true,\n      showPreview = true,\n      showControls = false,\n      enableRealTimeProcessing = false,\n      enableChaining = true,\n      enableCustomFilters = false,\n      maxFilters = 5,\n      canvasWidth = 640,\n      canvasHeight = 360,\n      onFilterApply,\n      onProcessingComplete,\n      onError,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [isProcessing, setIsProcessing] = useState(false);\n    const [activeFilters, setActiveFilters] =\n      useState<string[]>(selectedFilters);\n    const [filterParameters, setFilterParameters] = useState<\n      Record<string, FilterParameters>\n    >({});\n    const [processedImageUrl, setProcessedImageUrl] = useState<string>(\"\");\n    const [originalImageUrl, setOriginalImageUrl] = useState<string>(\n      imageSource || \"\"\n    );\n    const [processingProgress, setProcessingProgress] = useState(0);\n\n    const [settings, setSettings] = useState<ProcessingSettings>({\n      ...defaultProcessingSettings,\n      ...processingSettings,\n    });\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const videoRef = useRef<HTMLVideoElement>(null);\n    const animationFrameRef = useRef<number>();\n    const processedCanvasRef = useRef<HTMLCanvasElement>(null);\n\n    const id = useA11yId(\"glass-live-filter\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Initialize video stream\n    const initializeVideo = useCallback(async () => {\n      const video = videoRef.current;\n      if (!video) return;\n\n      try {\n        if (videoSource instanceof MediaStream) {\n          video.srcObject = videoSource;\n        } else if (typeof videoSource === \"string\") {\n          video.src = videoSource;\n        }\n        await video.play();\n      } catch (error) {\n        onError?.(error as Error);\n      }\n    }, [videoSource, onError]);\n\n    // Apply filters to image data\n    const applyFilters = useCallback(\n      (imageData: ImageData, filters: FilterEffect[]): ImageData => {\n        let processedData = new ImageData(\n          new Uint8ClampedArray(imageData.data),\n          imageData.width,\n          imageData.height\n        );\n\n        filters.forEach((filter) => {\n          const params = filterParameters[filter.id] || filter.parameters || {};\n\n          switch (filter.id) {\n            case \"grayscale\":\n              processedData = applyGrayscale(\n                processedData,\n                getNumericParam(params, \"strength\", 1.0)\n              );\n              break;\n            case \"sepia\":\n              processedData = applySepia(\n                processedData,\n                getNumericParam(params, \"warmth\", 0.8)\n              );\n              break;\n            case \"blur\":\n              // Simplified blur - in production would use proper convolution\n              processedData = applyBlur(\n                processedData,\n                getNumericParam(params, \"radius\", 5)\n              );\n              break;\n            case \"brightness\":\n              processedData = applyBrightness(\n                processedData,\n                getNumericParam(params, \"level\", 1.2)\n              );\n              break;\n            case \"contrast\":\n              processedData = applyContrast(\n                processedData,\n                getNumericParam(params, \"level\", 1.3)\n              );\n              break;\n            case \"saturation\":\n              processedData = applySaturation(\n                processedData,\n                getNumericParam(params, \"level\", 1.5)\n              );\n              break;\n            case \"hue-shift\":\n              processedData = applyHueShift(\n                processedData,\n                getNumericParam(params, \"degrees\", 30)\n              );\n              break;\n            case \"edge-detect\":\n              processedData = applyEdgeDetection(\n                processedData,\n                getNumericParam(params, \"threshold\", 0.5)\n              );\n              break;\n            case \"emboss\":\n              processedData = applyEmboss(\n                processedData,\n                getNumericParam(params, \"strength\", 0.8)\n              );\n              break;\n            case \"vintage\":\n              processedData = applyVintage(processedData, params);\n              break;\n            case \"neon\":\n              processedData = applyNeonGlow(processedData, params);\n              break;\n          }\n        });\n\n        return processedData;\n      },\n      [filterParameters]\n    );\n\n    // Filter implementations\n    const applyGrayscale = (\n      imageData: ImageData,\n      strength: number\n    ): ImageData => {\n      const data = imageData.data;\n      for (let i = 0; i < data.length; i += 4) {\n        const gray = Math.round(\n          0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2]\n        );\n        data[i] = data[i] + (gray - data[i]) * strength;\n        data[i + 1] = data[i + 1] + (gray - data[i + 1]) * strength;\n        data[i + 2] = data[i + 2] + (gray - data[i + 2]) * strength;\n      }\n      return imageData;\n    };\n\n    const applySepia = (imageData: ImageData, warmth: number): ImageData => {\n      const data = imageData.data;\n      for (let i = 0; i < data.length; i += 4) {\n        const r = data[i];\n        const g = data[i + 1];\n        const b = data[i + 2];\n\n        const tr = Math.min(255, r * 0.393 + g * 0.769 + b * 0.189);\n        const tg = Math.min(255, r * 0.349 + g * 0.686 + b * 0.168);\n        const tb = Math.min(255, r * 0.272 + g * 0.534 + b * 0.131);\n\n        data[i] = r + (tr - r) * warmth;\n        data[i + 1] = g + (tg - g) * warmth;\n        data[i + 2] = b + (tb - b) * warmth;\n      }\n      return imageData;\n    };\n\n    const applyBlur = (imageData: ImageData, radius: number): ImageData => {\n      // Simplified box blur - in production would use Gaussian\n      const data = imageData.data;\n      const width = imageData.width;\n      const height = imageData.height;\n      const output = new Uint8ClampedArray(data);\n\n      const blurRadius = Math.floor(radius);\n      for (let y = blurRadius; y < height - blurRadius; y++) {\n        for (let x = blurRadius; x < width - blurRadius; x++) {\n          let r = 0,\n            g = 0,\n            b = 0,\n            a = 0;\n          let count = 0;\n\n          for (let dy = -blurRadius; dy <= blurRadius; dy++) {\n            for (let dx = -blurRadius; dx <= blurRadius; dx++) {\n              const idx = ((y + dy) * width + (x + dx)) * 4;\n              r += data[idx];\n              g += data[idx + 1];\n              b += data[idx + 2];\n              a += data[idx + 3];\n              count++;\n            }\n          }\n\n          const idx = (y * width + x) * 4;\n          output[idx] = r / count;\n          output[idx + 1] = g / count;\n          output[idx + 2] = b / count;\n          output[idx + 3] = a / count;\n        }\n      }\n\n      return new ImageData(output, width, height);\n    };\n\n    const applyBrightness = (\n      imageData: ImageData,\n      level: number\n    ): ImageData => {\n      const data = imageData.data;\n      const factor = level;\n      for (let i = 0; i < data.length; i += 4) {\n        data[i] = Math.min(255, data[i] * factor);\n        data[i + 1] = Math.min(255, data[i + 1] * factor);\n        data[i + 2] = Math.min(255, data[i + 2] * factor);\n      }\n      return imageData;\n    };\n\n    const applyContrast = (imageData: ImageData, level: number): ImageData => {\n      const data = imageData.data;\n      const factor = level;\n      const intercept = 128 * (1 - factor);\n\n      for (let i = 0; i < data.length; i += 4) {\n        data[i] = Math.max(0, Math.min(255, data[i] * factor + intercept));\n        data[i + 1] = Math.max(\n          0,\n          Math.min(255, data[i + 1] * factor + intercept)\n        );\n        data[i + 2] = Math.max(\n          0,\n          Math.min(255, data[i + 2] * factor + intercept)\n        );\n      }\n      return imageData;\n    };\n\n    const applySaturation = (\n      imageData: ImageData,\n      level: number\n    ): ImageData => {\n      const data = imageData.data;\n      for (let i = 0; i < data.length; i += 4) {\n        const gray =\n          0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\n        data[i] = gray + (data[i] - gray) * level;\n        data[i + 1] = gray + (data[i + 1] - gray) * level;\n        data[i + 2] = gray + (data[i + 2] - gray) * level;\n      }\n      return imageData;\n    };\n\n    const applyHueShift = (\n      imageData: ImageData,\n      degrees: number\n    ): ImageData => {\n      const data = imageData.data;\n      const radians = (degrees * Math.PI) / 180;\n\n      for (let i = 0; i < data.length; i += 4) {\n        const r = data[i] / 255;\n        const g = data[i + 1] / 255;\n        const b = data[i + 2] / 255;\n\n        // Convert RGB to HSL, shift hue, convert back\n        const max = Math.max(r, g, b);\n        const min = Math.min(r, g, b);\n        const diff = max - min;\n\n        if (diff === 0) continue;\n\n        let h = 0;\n        if (max === r) h = ((g - b) / diff) % 6;\n        else if (max === g) h = (b - r) / diff + 2;\n        else h = (r - g) / diff + 4;\n\n        h = (h * 60 + degrees) % 360;\n        if (h < 0) h += 360;\n\n        const l = (max + min) / 2;\n        const s = diff / (1 - Math.abs(2 * l - 1));\n\n        // Convert back to RGB\n        const c = (1 - Math.abs(2 * l - 1)) * s;\n        const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n        const m = l - c / 2;\n\n        let nr = 0,\n          ng = 0,\n          nb = 0;\n        if (h < 60) {\n          nr = c;\n          ng = x;\n          nb = 0;\n        } else if (h < 120) {\n          nr = x;\n          ng = c;\n          nb = 0;\n        } else if (h < 180) {\n          nr = 0;\n          ng = c;\n          nb = x;\n        } else if (h < 240) {\n          nr = 0;\n          ng = x;\n          nb = c;\n        } else if (h < 300) {\n          nr = x;\n          ng = 0;\n          nb = c;\n        } else {\n          nr = c;\n          ng = 0;\n          nb = x;\n        }\n\n        data[i] = Math.round((nr + m) * 255);\n        data[i + 1] = Math.round((ng + m) * 255);\n        data[i + 2] = Math.round((nb + m) * 255);\n      }\n      return imageData;\n    };\n\n    const applyEdgeDetection = (\n      imageData: ImageData,\n      threshold: number\n    ): ImageData => {\n      const data = imageData.data;\n      const width = imageData.width;\n      const height = imageData.height;\n      const output = new Uint8ClampedArray(data.length);\n\n      // Sobel edge detection\n      for (let y = 1; y < height - 1; y++) {\n        for (let x = 1; x < width - 1; x++) {\n          const idx = (y * width + x) * 4;\n\n          let gx = 0,\n            gy = 0;\n          for (let dy = -1; dy <= 1; dy++) {\n            for (let dx = -1; dx <= 1; dx++) {\n              const pixelIdx = ((y + dy) * width + (x + dx)) * 4;\n              const gray =\n                0.299 * data[pixelIdx] +\n                0.587 * data[pixelIdx + 1] +\n                0.114 * data[pixelIdx + 2];\n\n              // Sobel kernels\n              const sobelX = [\n                [-1, 0, 1],\n                [-2, 0, 2],\n                [-1, 0, 1],\n              ];\n              const sobelY = [\n                [-1, -2, -1],\n                [0, 0, 0],\n                [1, 2, 1],\n              ];\n\n              gx += gray * sobelX[dy + 1][dx + 1];\n              gy += gray * sobelY[dy + 1][dx + 1];\n            }\n          }\n\n          const magnitude = Math.sqrt(gx * gx + gy * gy);\n          const edge = magnitude > threshold * 255 ? 255 : 0;\n\n          output[idx] = edge;\n          output[idx + 1] = edge;\n          output[idx + 2] = edge;\n          output[idx + 3] = data[idx + 3];\n        }\n      }\n\n      return new ImageData(output, width, height);\n    };\n\n    const applyEmboss = (imageData: ImageData, strength: number): ImageData => {\n      const data = imageData.data;\n      const width = imageData.width;\n      const height = imageData.height;\n      const output = new Uint8ClampedArray(data);\n\n      // Emboss kernel\n      const kernel = [\n        [-2, -1, 0],\n        [-1, 1, 1],\n        [0, 1, 2],\n      ];\n\n      for (let y = 1; y < height - 1; y++) {\n        for (let x = 1; x < width - 1; x++) {\n          let r = 0,\n            g = 0,\n            b = 0;\n\n          for (let dy = -1; dy <= 1; dy++) {\n            for (let dx = -1; dx <= 1; dx++) {\n              const pixelIdx = ((y + dy) * width + (x + dx)) * 4;\n              const weight = kernel[dy + 1][dx + 1];\n\n              r += data[pixelIdx] * weight;\n              g += data[pixelIdx + 1] * weight;\n              b += data[pixelIdx + 2] * weight;\n            }\n          }\n\n          const idx = (y * width + x) * 4;\n          output[idx] = Math.max(0, Math.min(255, r * strength + 128));\n          output[idx + 1] = Math.max(0, Math.min(255, g * strength + 128));\n          output[idx + 2] = Math.max(0, Math.min(255, b * strength + 128));\n        }\n      }\n\n      return new ImageData(output, width, height);\n    };\n\n    const getNumericParam = (\n      params: FilterParameters,\n      key: string,\n      fallback: number\n    ): number => {\n      const value = params[key];\n      if (typeof value === \"number\") return value;\n      if (typeof value === \"string\") {\n        const parsed = Number(value);\n        return Number.isFinite(parsed) ? parsed : fallback;\n      }\n      return fallback;\n    };\n\n    const applyVintage = (\n      imageData: ImageData,\n      params: FilterParameters\n    ): ImageData => {\n      let result = imageData;\n      // Apply sepia first\n      result = applySepia(result, 0.7);\n\n      // Add grain\n      const grain = getNumericParam(params, \"grain\", 0.3);\n      const data = result.data;\n      for (let i = 0; i < data.length; i += 4) {\n        const noise = (Math.random() - 0.5) * grain * 255;\n        data[i] = Math.max(0, Math.min(255, data[i] + noise));\n        data[i + 1] = Math.max(0, Math.min(255, data[i + 1] + noise));\n        data[i + 2] = Math.max(0, Math.min(255, data[i + 2] + noise));\n      }\n\n      return result;\n    };\n\n    const applyNeonGlow = (\n      imageData: ImageData,\n      params: FilterParameters\n    ): ImageData => {\n      const data = imageData.data;\n      const glow = getNumericParam(params, \"glow\", 1.2);\n\n      // Enhance bright colors and add glow effect\n      for (let i = 0; i < data.length; i += 4) {\n        const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\n        if (brightness > 128) {\n          data[i] = Math.min(255, data[i] * glow);\n          data[i + 1] = Math.min(255, data[i + 1] * glow);\n          data[i + 2] = Math.min(255, data[i + 2] * glow);\n        }\n      }\n\n      return imageData;\n    };\n\n    // Process image/video frame\n    const processFrame = useCallback(() => {\n      const canvas = canvasRef.current;\n      const processedCanvas = processedCanvasRef.current;\n      const video = videoRef.current;\n\n      if (!canvas || !processedCanvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      const processedCtx = processedCanvas.getContext(\"2d\");\n\n      if (!ctx || !processedCtx) return;\n\n      let imageData: ImageData | null = null;\n\n      // Get source image data\n      if (video && !video.paused) {\n        ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n        imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n      } else if (originalImageUrl) {\n        const img = new Image();\n        img.onload = () => {\n          ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n          const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n          processImageData(imgData, processedCtx, true);\n        };\n        img.src = originalImageUrl;\n        return;\n      }\n\n      if (imageData) {\n        processImageData(\n          imageData,\n          processedCtx,\n          !(enableRealTimeProcessing && video && !video.paused)\n        );\n      }\n\n      if (enableRealTimeProcessing && video && !video.paused) {\n        animationFrameRef.current = requestAnimationFrame(processFrame);\n      }\n    }, [activeFilters, enableRealTimeProcessing, originalImageUrl]);\n\n    const processImageData = (\n      imageData: ImageData,\n      ctx: CanvasRenderingContext2D,\n      emitResult = true\n    ) => {\n      const activeFilterObjects = availableFilters.filter((f) =>\n        activeFilters.includes(f.id)\n      );\n\n      if (activeFilterObjects.length === 0) {\n        ctx.putImageData(imageData, 0, 0);\n        return;\n      }\n\n      setIsProcessing(true);\n\n      // Process filters\n      const processedData = applyFilters(imageData, activeFilterObjects);\n      ctx.putImageData(processedData, 0, 0);\n\n      if (emitResult) {\n        const processedUrl = ctx.canvas.toDataURL();\n        setProcessedImageUrl(processedUrl);\n        onProcessingComplete?.(processedUrl);\n      }\n\n      setIsProcessing(false);\n    };\n\n    // Filter management\n    const addFilter = useCallback(\n      (filterId: string) => {\n        if (activeFilters.length >= maxFilters) {\n          play(\"error\");\n          return;\n        }\n\n        setActiveFilters((prev) => [...prev, filterId]);\n        const filter = availableFilters.find((f) => f.id === filterId);\n        if (filter) {\n          setFilterParameters((prev) => ({\n            ...prev,\n            [filterId]: { ...filter.parameters },\n          }));\n          onFilterApply?.(filterId, filter.parameters ?? {});\n          play(\"select\");\n        }\n      },\n      [activeFilters, maxFilters, availableFilters, onFilterApply, play]\n    );\n\n    const removeFilter = useCallback(\n      (filterId: string) => {\n        setActiveFilters((prev) => prev.filter((id) => id !== filterId));\n        setFilterParameters((prev) => {\n          const { [filterId]: removed, ...rest } = prev;\n          return rest;\n        });\n        play(\"remove\");\n      },\n      [play]\n    );\n\n    const updateFilterParameter = useCallback(\n      (filterId: string, paramName: string, value: FilterParameterValue) => {\n        setFilterParameters((prev) => ({\n          ...prev,\n          [filterId]: {\n            ...prev[filterId],\n            [paramName]: value,\n          },\n        }));\n      },\n      []\n    );\n\n    // Initialize\n    useEffect(() => {\n      if (videoSource) {\n        initializeVideo();\n      }\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [videoSource, initializeVideo]);\n\n    useEffect(() => {\n      processFrame();\n    }, [activeFilters, filterParameters, processFrame]);\n\n    const FilterLibrary = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Filter Library\n        </h4>\n\n        <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-3 lg:glass-grid-cols-4 glass-gap-3\">\n          {availableFilters.map((filter) => (\n            <motion.div\n              key={filter.id}\n              className={`\n                glass-p-3 glass-radius-lg glass-border glass-cursor-pointer glass-transition-all duration-[${ANIMATION.DURATION.fast}ms]\n                ${\n                  activeFilters.includes(filter.id)\n                    ? \"glass-border-blue glass-surface-blue/20\"\n                    : \"glass-border-white/20 hover:glass-border-white/40 glass-surface-subtle/5\"\n                }\n              `}\n              whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n              whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              onClick={() => {\n                if (activeFilters.includes(filter.id)) {\n                  removeFilter(filter.id);\n                } else {\n                  addFilter(filter.id);\n                }\n              }}\n            >\n              <div className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90 glass-mb-1\">\n                {filter.name}\n              </div>\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mb-2\">\n                {filter.description}\n              </div>\n\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <span\n                  className={`\n                  glass-px-2 glass-py-0.5 glass-radius glass-text-xs glass-font-medium\n                  ${\n                    filter.category === \"artistic\"\n                      ? \"glass-surface-primary/20 glass-text-secondary\"\n                      : filter.category === \"color\"\n                        ? \"glass-surface-blue/20 glass-text-secondary\"\n                        : filter.category === \"blur\"\n                          ? \"glass-surface-muted/20 glass-text-secondary\"\n                          : filter.category === \"distortion\"\n                            ? \"glass-surface-red/20 glass-text-secondary\"\n                            : filter.category === \"vintage\"\n                              ? \"glass-surface-amber/20 glass-text-secondary\"\n                              : \"glass-surface-green/20 glass-text-secondary\"\n                  }\n                `}\n                >\n                  {filter.category}\n                </span>\n\n                {activeFilters.includes(filter.id) && (\n                  <div className=\"glass-text-primary\">\u2713</div>\n                )}\n              </div>\n            </motion.div>\n          ))}\n        </div>\n      </div>\n    );\n\n    const ActiveFilters = () => (\n      <div className=\"glass-space-y-4\">\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n            Active Filters ({activeFilters.length}/{maxFilters})\n          </h4>\n          {activeFilters.length > 0 && (\n            <button\n              onClick={() => {\n                setActiveFilters([]);\n                setFilterParameters({});\n                play(\"clear\");\n              }}\n              className=\"glass-text-xs glass-text-primary hover:glass-text-secondary glass-transition-colors\"\n            >\n              Clear All\n            </button>\n          )}\n        </div>\n\n        {activeFilters.length === 0 ? (\n          <p className=\"glass-text-sm glass-text-primary-glass-opacity-50 glass-italic\">\n            No filters applied\n          </p>\n        ) : (\n          <div className=\"glass-space-y-3\">\n            {activeFilters.map((filterId, index) => {\n              const filter = availableFilters.find((f) => f.id === filterId);\n              if (!filter) return null;\n\n              return (\n                <div\n                  key={filterId}\n                  className=\"glass-p-3 glass-radius-lg glass-border glass-border-white/10 glass-surface-subtle/5\"\n                >\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n                    <span className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                      {filter.name}\n                    </span>\n                    <div className=\"glass-flex glass-items-center glass-space-x-2\">\n                      <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        #{index + 1}\n                      </span>\n                      <button\n                        onClick={() => removeFilter(filterId)}\n                        className=\"glass-text-primary hover:glass-text-secondary glass-transition-colors\"\n                      >\n                        \u00D7\n                      </button>\n                    </div>\n                  </div>\n\n                  {/* Filter parameters */}\n                  {filter.parameters &&\n                    Object.entries(filter.parameters).map(\n                      ([paramName, defaultValue]) => (\n                        <div key={paramName} className=\"glass-mt-2\">\n                          <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                            {paramName.charAt(0).toUpperCase() +\n                              paramName.slice(1)}\n                            :\n                            {typeof defaultValue === \"number\"\n                              ? ` ${getNumericParam(filterParameters[filterId] ?? {}, paramName, defaultValue).toFixed(2)}`\n                              : \"\"}\n                          </label>\n                          {typeof defaultValue === \"number\" ? (\n                            <input\n                              type=\"range\"\n                              min={paramName === \"degrees\" ? -180 : 0}\n                              max={\n                                paramName === \"degrees\"\n                                  ? 180\n                                  : paramName === \"radius\"\n                                    ? 20\n                                    : 3\n                              }\n                              step={paramName === \"degrees\" ? 1 : 0.1}\n                              value={\n                                filterParameters[filterId]?.[paramName] ??\n                                defaultValue\n                              }\n                              onChange={(e) =>\n                                updateFilterParameter(\n                                  filterId,\n                                  paramName,\n                                  parseFloat(e.target.value)\n                                )\n                              }\n                              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                              aria-label={`${paramName.charAt(0).toUpperCase() + paramName.slice(1)} filter parameter`}\n                            />\n                          ) : (\n                            <input\n                              type=\"color\"\n                              value={normalizeColorInputValue(\n                                String(\n                                  filterParameters[filterId]?.[paramName] ??\n                                    defaultValue\n                                )\n                              )}\n                              onChange={(e) =>\n                                updateFilterParameter(\n                                  filterId,\n                                  paramName,\n                                  e.target.value\n                                )\n                              }\n                              className=\"glass-w-8 glass-h-6 glass-radius glass-border glass-border-white/20\"\n                              aria-label={`${paramName.charAt(0).toUpperCase() + paramName.slice(1)} color picker`}\n                            />\n                          )}\n                        </div>\n                      )\n                    )}\n                </div>\n              );\n            })}\n          </div>\n        )}\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight: \"100%\",\n          minWidth: 0,\n          height: compact ? \"100%\" : undefined,\n          overflow: compact ? \"hidden\" : undefined,\n        }}\n        className={`${compact ? \"glass-p-3 glass-space-y-3\" : \"glass-p-4 glass-space-y-4\"} glass-max-w-full glass-overflow-auto ${className}`}\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-min-w-0\">\n            <div className=\"glass-min-w-0\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90 glass-truncate\">\n                Live Image Filter\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                Real-time image and video processing with custom filters\n              </p>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-shrink-0\">\n              {enableRealTimeProcessing && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span className=\"glass-text-xs\">Real-time</span>\n                </div>\n              )}\n              {isProcessing && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-xs\">Processing</span>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Preview area */}\n        {showPreview && (\n          <div\n            className={`glass-grid ${compact ? \"glass-grid-cols-2 glass-gap-3\" : \"glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-3\"}`}\n            style={\n              compact\n                ? { gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\", gap: 10 }\n                : undefined\n            }\n          >\n            {/* Original */}\n            <div className=\"glass-space-y-2\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Original\n              </h4>\n              <div className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-overflow-hidden\">\n                <canvas\n                  ref={canvasRef}\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n                {videoSource && (\n                  <video\n                    ref={videoRef}\n                    className=\"glass-hidden\"\n                    autoPlay\n                    muted\n                    loop\n                  />\n                )}\n              </div>\n            </div>\n\n            {/* Processed */}\n            <div className=\"glass-space-y-2\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Filtered\n              </h4>\n              <div className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-overflow-hidden\">\n                <canvas\n                  ref={processedCanvasRef}\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n                {isProcessing && (\n                  <div className=\"glass-absolute glass-inset-0 glass-surface-dark/50 glass-flex glass-items-center glass-justify-center\">\n                    <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-white glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Controls */}\n        {showControls && (\n          <div className=\"glass-grid glass-grid-cols-1 lg:glass-grid-cols-2 glass-gap-6\">\n            <ActiveFilters />\n            <div className=\"glass-space-y-4\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Processing Settings\n              </h4>\n              <div className=\"glass-grid glass-grid-cols-2 glass-gap-4\">\n                <div>\n                  <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                    Quality\n                  </label>\n                  <select\n                    value={settings.quality}\n                    onChange={(e) =>\n                      setSettings((prev) => ({\n                        ...prev,\n                        quality: e.target.value as ProcessingQuality,\n                      }))\n                    }\n                    className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n                    aria-label=\"Processing quality\"\n                  >\n                    <option value=\"low\">Low</option>\n                    <option value=\"medium\">Medium</option>\n                    <option value=\"high\">High</option>\n                    <option value=\"ultra\">Ultra</option>\n                  </select>\n                </div>\n\n                <div>\n                  <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                    FPS: {settings.fps}\n                  </label>\n                  <input\n                    type=\"range\"\n                    min=\"1\"\n                    max=\"60\"\n                    value={settings.fps}\n                    onChange={(e) =>\n                      setSettings((prev) => ({\n                        ...prev,\n                        fps: parseInt(e.target.value),\n                      }))\n                    }\n                    className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                    aria-label=\"Frames per second\"\n                  />\n                </div>\n              </div>\n\n              <div className=\"glass-flex glass-items-center glass-space-x-4\">\n                <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n                  <input\n                    type=\"checkbox\"\n                    checked={settings.enableGPU}\n                    onChange={(e) =>\n                      setSettings((prev) => ({\n                        ...prev,\n                        enableGPU: e.target.checked,\n                      }))\n                    }\n                    className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n                  />\n                  <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                    GPU Acceleration\n                  </span>\n                </label>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Filter library */}\n        {showFilterLibrary && <FilterLibrary />}\n\n        {/* Action buttons */}\n        {showActions && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-pt-3 glass-border-t glass-border-white/10 glass-flex-wrap\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-wrap\">\n              <input\n                type=\"file\"\n                accept=\"image/*\"\n                onChange={(e) => {\n                  const file = e.target.files?.[0];\n                  if (file) {\n                    const url = URL.createObjectURL(file);\n                    setOriginalImageUrl(url);\n                    play(\"upload\");\n                  }\n                }}\n                className=\"glass-hidden\"\n                id=\"image-upload\"\n              />\n              <motion.label\n                htmlFor=\"image-upload\"\n                className=\"glass-px-4 glass-py-2 glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-cursor-pointer glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              >\n                Upload Image\n              </motion.label>\n\n              <motion.button\n                className=\"glass-px-4 glass-py-2 glass-border glass-border-white/30 hover:glass-border-white/50 glass-text-primary-glass-opacity-80 glass-radius-lg glass-text-sm glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                onClick={() => processFrame()}\n              >\n                Apply Filters\n              </motion.button>\n            </div>\n\n            {processedImageUrl && (\n              <motion.a\n                href={processedImageUrl}\n                download=\"filtered-image.png\"\n                className=\"glass-px-4 glass-py-2 glass-surface-green hover:glass-surface-green glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              >\n                Download Result\n              </motion.a>\n            )}\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassLiveFilter.displayName = \"GlassLiveFilter\";\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { motion } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\nexport interface AudioSettings {\n  volume: number;\n  gain: number;\n  bassBoost: number;\n  trebleBoost: number;\n  smoothing: number;\n  fftSize: number;\n}\n\nexport interface VisualizationSettings {\n  mode: \"bars\" | \"wave\" | \"circular\" | \"spectrum\" | \"particles\" | \"ripples\";\n  colorScheme: \"rainbow\" | \"monochrome\" | \"neon\" | \"fire\" | \"ice\" | \"galaxy\";\n  particleCount: number;\n  sensitivity: number;\n  symmetry: boolean;\n  mirror: boolean;\n}\n\nexport interface GlassMusicVisualizerProps {\n  audioSource?: string | MediaStream;\n  audioSettings?: Partial<AudioSettings>;\n  visualSettings?: Partial<VisualizationSettings>;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  showControls?: boolean;\n  showFrequencyDisplay?: boolean;\n  showWaveform?: boolean;\n  showSpectrum?: boolean;\n  showSettings?: boolean;\n  realTimeAnalysis?: boolean;\n  enableInteraction?: boolean;\n  enableRecording?: boolean;\n  canvasWidth?: number;\n  canvasHeight?: number;\n  onAudioLoad?: (duration: number) => void;\n  onFrequencyData?: (data: Uint8Array) => void;\n  onBeatDetected?: (intensity: number) => void;\n  className?: string;\n}\n\nconst defaultAudioSettings: AudioSettings = {\n  volume: 0.8,\n  gain: 1.0,\n  bassBoost: 0,\n  trebleBoost: 0,\n  smoothing: 0.8,\n  fftSize: 256,\n};\n\nconst defaultVisualSettings: VisualizationSettings = {\n  mode: \"bars\",\n  colorScheme: \"rainbow\",\n  particleCount: 100,\n  sensitivity: 1.0,\n  symmetry: false,\n  mirror: false,\n};\n\nconst colorSchemes = {\n  rainbow: [\n    \"hsl(var(--glass-color-danger))\",\n    \"hsl(var(--glass-color-warning))\",\n    \"hsl(var(--glass-color-warning))\",\n    \"hsl(var(--glass-color-success))\",\n    \"hsl(var(--glass-color-success))\",\n    \"hsl(var(--glass-color-info))\",\n    \"hsl(var(--glass-color-info))\",\n    \"hsl(var(--glass-color-primary))\",\n    \"hsl(var(--glass-color-primary))\",\n    \"var(--glass-color-secondary)\",\n  ],\n  monochrome: [\n    \"var(--glass-white)\",\n    \"color-mix(in srgb, var(--glass-white) 88%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 75%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 63%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 50%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 38%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 25%, black)\",\n    \"color-mix(in srgb, var(--glass-white) 13%, black)\",\n  ],\n  neon: [\n    \"#ff00ff\",\n    \"#ff0080\",\n    \"#ff0040\",\n    \"#ff8040\",\n    \"#ffff40\",\n    \"#80ff40\",\n    \"#40ff40\",\n    \"#40ff80\",\n    \"#40ffff\",\n    \"#4080ff\",\n  ],\n  fire: [\n    \"#ffff00\",\n    \"#ffcc00\",\n    \"#ff9900\",\n    \"#ff6600\",\n    \"#ff3300\",\n    \"#ff0000\",\n    \"#cc0000\",\n    \"#990000\",\n  ],\n  ice: [\n    \"var(--glass-white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 12%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 25%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 38%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 50%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 63%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 75%, white)\",\n    \"color-mix(in srgb, hsl(var(--glass-color-info)) 88%, white)\",\n  ],\n  galaxy: [\n    \"#1a1a2e\",\n    \"#16213e\",\n    \"#0f3460\",\n    \"#533483\",\n    \"#7209b7\",\n    \"#a663cc\",\n    \"#4cc9f0\",\n  ],\n};\n\nconst readableGlassTextStyle: React.CSSProperties = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassMusicVisualizer = forwardRef<\n  HTMLDivElement,\n  GlassMusicVisualizerProps\n>(\n  (\n    {\n      audioSource,\n      audioSettings = {},\n      visualSettings = {},\n      compact = false,\n      contained = false,\n      maxHeight,\n      showControls = true,\n      showFrequencyDisplay = false,\n      showWaveform = true,\n      showSpectrum = true,\n      showSettings = false,\n      realTimeAnalysis = true,\n      enableInteraction = true,\n      enableRecording = false,\n      canvasWidth = 800,\n      canvasHeight = 400,\n      onAudioLoad,\n      onFrequencyData,\n      onBeatDetected,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [isPlaying, setIsPlaying] = useState(false);\n    const [isRecording, setIsRecording] = useState(false);\n    const [currentTime, setCurrentTime] = useState(0);\n    const [duration, setDuration] = useState(0);\n    const [frequencyData, setFrequencyData] = useState<Uint8Array>(\n      new Uint8Array(128)\n    );\n    const [waveformData, setWaveformData] = useState<Uint8Array>(\n      new Uint8Array(128)\n    );\n    const [beatIntensity, setBeatIntensity] = useState(0);\n\n    const [audioConfig, setAudioConfig] = useState<AudioSettings>({\n      ...defaultAudioSettings,\n      ...audioSettings,\n    });\n\n    const [visualConfig, setVisualConfig] = useState<VisualizationSettings>({\n      ...defaultVisualSettings,\n      ...visualSettings,\n    });\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const audioRef = useRef<HTMLAudioElement>(null);\n    const audioContextRef = useRef<AudioContext | null>(null);\n    const analyserRef = useRef<AnalyserNode | null>(null);\n    const sourceRef = useRef<AudioBufferSourceNode | null>(null);\n    const animationFrameRef = useRef<number>();\n    const particles = useRef<\n      Array<{\n        x: number;\n        y: number;\n        vx: number;\n        vy: number;\n        size: number;\n        color: string;\n        life: number;\n      }>\n    >([]);\n\n    const modeSelectId = useA11yId(\"glass-music-mode\");\n    const colorSchemeSelectId = useA11yId(\"glass-music-color-scheme\");\n    const smoothingId = useA11yId(\"glass-music-smoothing\");\n    const fftSelectId = useA11yId(\"glass-music-fft-size\");\n    const volumeControlId = useA11yId(\"glass-music-volume\");\n\n    const id = useA11yId(\"glass-music-visualizer\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n    const boundedHeight = maxHeight ?? (compact || contained ? 240 : undefined);\n\n    // Initialize audio context and analyser\n    const initializeAudio = useCallback(async () => {\n      try {\n        if (!audioContextRef.current) {\n          audioContextRef.current = new (window.AudioContext ||\n            (window as any).webkitAudioContext)();\n        }\n\n        const context = audioContextRef.current;\n        const analyser = context.createAnalyser();\n        analyser.fftSize = audioConfig.fftSize;\n        analyser.smoothingTimeConstant = audioConfig.smoothing;\n\n        analyserRef.current = analyser;\n\n        // Initialize frequency and waveform data arrays\n        const bufferLength = analyser.frequencyBinCount;\n        setFrequencyData(new Uint8Array(bufferLength));\n        setWaveformData(new Uint8Array(bufferLength));\n\n        // Connect audio source if provided\n        if (audioSource && typeof audioSource === \"string\") {\n          const audio = audioRef.current;\n          if (audio) {\n            audio.src = audioSource;\n            const source = context.createMediaElementSource(audio);\n            source.connect(analyser);\n            analyser.connect(context.destination);\n            sourceRef.current = source as any;\n          }\n        } else if (audioSource instanceof MediaStream) {\n          const source = context.createMediaStreamSource(audioSource);\n          source.connect(analyser);\n          analyser.connect(context.destination);\n          sourceRef.current = source as any;\n        }\n      } catch {\n        analyserRef.current = null;\n        sourceRef.current = null;\n      }\n    }, [audioSource, audioConfig.fftSize, audioConfig.smoothing]);\n\n    // Beat detection algorithm\n    const detectBeat = useCallback(\n      (frequencyData: Uint8Array) => {\n        const bassRange = Math.floor(frequencyData.length * 0.1);\n        const midRange = Math.floor(frequencyData.length * 0.3);\n\n        let bassSum = 0;\n        let midSum = 0;\n\n        for (let i = 0; i < bassRange; i++) {\n          bassSum += frequencyData[i];\n        }\n\n        for (let i = bassRange; i < midRange; i++) {\n          midSum += frequencyData[i];\n        }\n\n        const bassAvg = bassSum / bassRange;\n        const midAvg = midSum / (midRange - bassRange);\n        const intensity = (bassAvg + midAvg) / 2 / 255;\n\n        setBeatIntensity(intensity);\n\n        if (intensity > 0.7) {\n          onBeatDetected?.(intensity);\n        }\n\n        return intensity;\n      },\n      [onBeatDetected]\n    );\n\n    // Visualization rendering\n    const renderVisualization = useCallback(() => {\n      const canvas = canvasRef.current;\n      const analyser = analyserRef.current;\n\n      if (!canvas || !analyser) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Update data arrays\n      const frequencyArray = new Uint8Array(analyser.frequencyBinCount);\n      const waveformArray = new Uint8Array(analyser.frequencyBinCount);\n\n      analyser.getByteFrequencyData(frequencyArray);\n      analyser.getByteTimeDomainData(waveformArray);\n\n      setFrequencyData(frequencyArray);\n      setWaveformData(waveformArray);\n      onFrequencyData?.(frequencyArray);\n\n      // Detect beats\n      const beat = detectBeat(frequencyArray);\n\n      // Clear canvas\n      ctx.fillStyle =\n        \"rgba(var(--glass-color-black) / var(--glass-opacity-10))\";\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n      // Get colors for current scheme\n      const colors =\n        colorSchemes[visualConfig.colorScheme] || colorSchemes.rainbow;\n\n      switch (visualConfig.mode) {\n        case \"bars\":\n          renderBars(ctx, frequencyArray, colors, beat);\n          break;\n        case \"wave\":\n          renderWave(ctx, waveformArray, colors, beat);\n          break;\n        case \"circular\":\n          renderCircular(ctx, frequencyArray, colors, beat);\n          break;\n        case \"spectrum\":\n          renderSpectrum(ctx, frequencyArray, colors, beat);\n          break;\n        case \"particles\":\n          renderParticles(ctx, frequencyArray, colors, beat);\n          break;\n        case \"ripples\":\n          renderRipples(ctx, frequencyArray, colors, beat);\n          break;\n      }\n\n      if (\n        realTimeAnalysis &&\n        isPlaying &&\n        shouldAnimate &&\n        !prefersReducedMotion\n      ) {\n        animationFrameRef.current = requestAnimationFrame(renderVisualization);\n      }\n    }, [\n      visualConfig,\n      realTimeAnalysis,\n      isPlaying,\n      shouldAnimate,\n      prefersReducedMotion,\n      detectBeat,\n      onFrequencyData,\n    ]);\n\n    // Visualization modes\n    const renderBars = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      const barWidth = ctx.canvas.width / data.length;\n      const heightScale = visualConfig.sensitivity;\n\n      for (let i = 0; i < data.length; i++) {\n        const barHeight = (data[i] / 255) * ctx.canvas.height * heightScale;\n        const colorIndex = Math.floor((i / data.length) * colors.length);\n\n        // Add beat intensity to color brightness\n        const alpha = Math.max(0.3, beat);\n        ctx.fillStyle =\n          colors[colorIndex] +\n          Math.floor(alpha * 255)\n            .toString(16)\n            .padStart(2, \"0\");\n\n        ctx.fillRect(\n          i * barWidth,\n          ctx.canvas.height - barHeight,\n          barWidth - 1,\n          barHeight\n        );\n\n        // Mirror effect\n        if (visualConfig.mirror) {\n          ctx.fillRect(i * barWidth, 0, barWidth - 1, barHeight);\n        }\n      }\n    };\n\n    const renderWave = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      ctx.lineWidth = 2 + beat * 3;\n      ctx.strokeStyle = colors[Math.floor(beat * colors.length)];\n\n      ctx.beginPath();\n      const sliceWidth = ctx.canvas.width / data.length;\n      let x = 0;\n\n      for (let i = 0; i < data.length; i++) {\n        const v = (data[i] / 128.0) * visualConfig.sensitivity;\n        const y = (v * ctx.canvas.height) / 2;\n\n        if (i === 0) {\n          ctx.moveTo(x, y);\n        } else {\n          ctx.lineTo(x, y);\n        }\n\n        x += sliceWidth;\n      }\n\n      ctx.stroke();\n    };\n\n    const renderCircular = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      const centerX = ctx.canvas.width / 2;\n      const centerY = ctx.canvas.height / 2;\n      const radius = Math.min(centerX, centerY) * 0.7;\n\n      for (let i = 0; i < data.length; i++) {\n        const angle = (i / data.length) * Math.PI * 2;\n        const amplitude =\n          (data[i] / 255) * radius * visualConfig.sensitivity * 0.5;\n\n        const x1 = centerX + Math.cos(angle) * radius;\n        const y1 = centerY + Math.sin(angle) * radius;\n        const x2 = centerX + Math.cos(angle) * (radius + amplitude);\n        const y2 = centerY + Math.sin(angle) * (radius + amplitude);\n\n        const colorIndex = Math.floor((i / data.length) * colors.length);\n        ctx.strokeStyle = colors[colorIndex];\n        ctx.lineWidth = 1 + beat * 2;\n\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n      }\n    };\n\n    const renderSpectrum = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      const { width, height } = ctx.canvas;\n\n      // Shift existing data left without reading pixels back from the GPU.\n      ctx.drawImage(\n        ctx.canvas,\n        1,\n        0,\n        width - 1,\n        height,\n        0,\n        0,\n        width - 1,\n        height\n      );\n      ctx.clearRect(width - 1, 0, 1, height);\n\n      // Add new column\n      const x = width - 1;\n      for (let i = 0; i < data.length; i++) {\n        const y = Math.floor((i / data.length) * height);\n        const intensity = data[i] / 255;\n        const colorIndex = Math.floor(intensity * colors.length);\n        const color = colors[colorIndex] || \"#ffffff\";\n\n        ctx.fillStyle = color.startsWith(\"#\")\n          ? `${color}${Math.round(intensity * 255)\n              .toString(16)\n              .padStart(2, \"0\")}`\n          : color;\n        ctx.fillRect(x, y, 1, Math.max(1, Math.ceil(height / data.length)));\n      }\n    };\n\n    const renderParticles = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      // Update existing particles\n      particles.current = particles.current.filter((particle: any) => {\n        particle.x += particle.vx;\n        particle.y += particle.vy;\n        particle.life -= 0.01;\n        particle.vy += 0.1; // gravity\n\n        return (\n          particle.life > 0 &&\n          particle.x >= 0 &&\n          particle.x <= ctx.canvas.width &&\n          particle.y >= 0 &&\n          particle.y <= ctx.canvas.height\n        );\n      });\n\n      // Create new particles based on frequency data\n      for (let i = 0; i < data.length; i += 4) {\n        if (particles.current.length < visualConfig.particleCount) {\n          const intensity = data[i] / 255;\n          if (intensity > 0.1) {\n            particles.current.push({\n              x: (i / data.length) * ctx.canvas.width,\n              y: ctx.canvas.height - intensity * ctx.canvas.height * 0.5,\n              vx: (Math.random() - 0.5) * 4,\n              vy: -Math.random() * intensity * 5,\n              size: intensity * 5 + 1,\n              color: colors[Math.floor(intensity * colors.length)],\n              life: 1.0,\n            });\n          }\n        }\n      }\n\n      // Render particles\n      particles.current.forEach((particle: any) => {\n        ctx.save();\n        ctx.globalAlpha = particle.life;\n        ctx.fillStyle = particle.color;\n        ctx.beginPath();\n        ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);\n        ctx.fill();\n        ctx.restore();\n      });\n    };\n\n    const renderRipples = (\n      ctx: CanvasRenderingContext2D,\n      data: Uint8Array,\n      colors: string[],\n      beat: number\n    ) => {\n      const centerX = ctx.canvas.width / 2;\n      const centerY = ctx.canvas.height / 2;\n\n      // Calculate average intensity\n      const avgIntensity =\n        data.reduce((sum, val) => sum + val, 0) / data.length / 255;\n\n      // Draw ripples based on beat intensity\n      if (beat > 0.3) {\n        const rippleCount = 5;\n        for (let i = 0; i < rippleCount; i++) {\n          const radius = beat * 200 + i * 50;\n          const alpha = Math.max(0, 1 - radius / 300);\n\n          ctx.strokeStyle =\n            colors[i % colors.length] +\n            Math.floor(alpha * 255)\n              .toString(16)\n              .padStart(2, \"0\");\n          ctx.lineWidth = 3;\n          ctx.beginPath();\n          ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\n          ctx.stroke();\n        }\n      }\n\n      // Add frequency-based elements\n      for (let i = 0; i < data.length; i += 8) {\n        const angle = (i / data.length) * Math.PI * 2;\n        const intensity = data[i] / 255;\n        const radius = intensity * 100 + 50;\n\n        const x = centerX + Math.cos(angle) * radius;\n        const y = centerY + Math.sin(angle) * radius;\n\n        ctx.fillStyle = colors[Math.floor(intensity * colors.length)];\n        ctx.beginPath();\n        ctx.arc(x, y, intensity * 5 + 1, 0, Math.PI * 2);\n        ctx.fill();\n      }\n    };\n\n    // Audio controls\n    const handlePlay = useCallback(async () => {\n      if (!audioContextRef.current) {\n        await initializeAudio();\n      }\n\n      if (audioRef.current) {\n        try {\n          await audioRef.current.play();\n          setIsPlaying(true);\n          if (shouldAnimate && !prefersReducedMotion) {\n            renderVisualization();\n          }\n          play(\"play\");\n        } catch {\n          setIsPlaying(false);\n        }\n      }\n    }, [\n      initializeAudio,\n      renderVisualization,\n      play,\n      shouldAnimate,\n      prefersReducedMotion,\n    ]);\n\n    const handlePause = useCallback(() => {\n      if (audioRef.current) {\n        audioRef.current.pause();\n        setIsPlaying(false);\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n        play(\"pause\");\n      }\n    }, [play]);\n\n    const handleStop = useCallback(() => {\n      if (audioRef.current) {\n        audioRef.current.pause();\n        audioRef.current.currentTime = 0;\n        setIsPlaying(false);\n        setCurrentTime(0);\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n        play(\"stop\");\n      }\n    }, [play]);\n\n    // Initialize on mount\n    useEffect(() => {\n      if (audioSource) {\n        initializeAudio();\n      }\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n        if (audioContextRef.current) {\n          audioContextRef.current.close();\n        }\n      };\n    }, [audioSource, initializeAudio]);\n\n    // Update canvas size\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (canvas) {\n        canvas.width = canvasWidth;\n        canvas.height = canvasHeight;\n      }\n    }, [canvasWidth, canvasHeight]);\n\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas || analyserRef.current) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const { width, height } = canvas;\n      const gradient = ctx.createLinearGradient(0, 0, width, height);\n      gradient.addColorStop(0, \"rgba(56, 189, 248, 0.16)\");\n      gradient.addColorStop(0.48, \"rgba(168, 85, 247, 0.16)\");\n      gradient.addColorStop(1, \"rgba(244, 63, 94, 0.18)\");\n      ctx.fillStyle = \"rgba(8, 13, 28, 0.86)\";\n      ctx.fillRect(0, 0, width, height);\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, width, height);\n\n      const colors =\n        colorSchemes[visualConfig.colorScheme] || colorSchemes.rainbow;\n      const barCount = compact ? 32 : 56;\n      const gap = compact ? 3 : 4;\n      const barWidth = Math.max(3, (width - gap * (barCount - 1)) / barCount);\n\n      for (let index = 0; index < barCount; index += 1) {\n        const t = index / Math.max(1, barCount - 1);\n        const wave =\n          0.25 +\n          Math.abs(Math.sin(t * Math.PI * 3.2)) * 0.48 +\n          Math.abs(Math.cos(t * Math.PI * 8.4)) * 0.16;\n        const barHeight = Math.min(height * 0.82, height * wave);\n        const x = index * (barWidth + gap);\n        const y = height - barHeight - height * 0.08;\n        ctx.fillStyle = colors[index % colors.length];\n        ctx.globalAlpha = 0.74;\n        ctx.fillRect(x, y, barWidth, barHeight);\n      }\n\n      ctx.globalAlpha = 1;\n      ctx.strokeStyle = \"rgba(255,255,255,0.14)\";\n      ctx.lineWidth = 1;\n      ctx.beginPath();\n      ctx.moveTo(0, height * 0.5);\n      for (let x = 0; x <= width; x += 8) {\n        const y =\n          height * 0.5 +\n          Math.sin((x / width) * Math.PI * 4) * (compact ? 10 : 18);\n        ctx.lineTo(x, y);\n      }\n      ctx.stroke();\n    }, [canvasWidth, canvasHeight, compact, visualConfig.colorScheme]);\n\n    const Controls = () => (\n      <div\n        className={cn(\n          \"glass-flex glass-items-center glass-gap-2\",\n          compact ? \"glass-flex-wrap\" : \"glass-space-x-4\"\n        )}\n      >\n        <motion.button\n          className={cn(\n            \"glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-transition-colors\",\n            compact ? \"glass-p-1.5 glass-text-xs\" : \"glass-p-2\"\n          )}\n          whileHover={shouldAnimate ? { scale: 1.1 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.9 } : {}}\n          onClick={isPlaying ? handlePause : handlePlay}\n        >\n          {isPlaying ? \"\u23F8\uFE0F\" : \"\u25B6\uFE0F\"}\n        </motion.button>\n\n        <motion.button\n          className={cn(\n            \"glass-surface-primary hover:glass-surface-primary glass-text-primary glass-radius-lg glass-transition-colors\",\n            compact ? \"glass-p-1.5 glass-text-xs\" : \"glass-p-2\"\n          )}\n          whileHover={shouldAnimate ? { scale: 1.1 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.9 } : {}}\n          onClick={handleStop}\n        >\n          \u23F9\uFE0F\n        </motion.button>\n\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n            {Math.floor(currentTime / 60)}:\n            {Math.floor(currentTime % 60)\n              .toString()\n              .padStart(2, \"0\")}\n          </span>\n          <span className=\"glass-text-primary-glass-opacity-40\">/</span>\n          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n            {Math.floor(duration / 60)}:\n            {Math.floor(duration % 60)\n              .toString()\n              .padStart(2, \"0\")}\n          </span>\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          <label\n            htmlFor={volumeControlId}\n            className=\"glass-text-xs glass-text-primary-glass-opacity-80\"\n          >\n            {compact ? \"Vol\" : \"Volume:\"}\n          </label>\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.1\"\n            value={audioConfig.volume}\n            onChange={(e) => {\n              const volume = parseFloat(e.target.value);\n              setAudioConfig((prev: any) => ({ ...prev, volume }));\n              if (audioRef.current) {\n                audioRef.current.volume = volume;\n              }\n            }}\n            className={cn(\n              \"glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\",\n              compact ? \"glass-w-12\" : \"glass-w-16\"\n            )}\n            aria-label=\"Volume\"\n            id={volumeControlId}\n          />\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        className={cn(\n          \"glass-music-visualizer glass-max-w-full glass-overflow-auto\",\n          compact ? \"glass-p-3 glass-space-y-2\" : \"glass-p-4 glass-space-y-4\",\n          className\n        )}\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight:\n            boundedHeight !== undefined\n              ? typeof boundedHeight === \"number\"\n                ? `${boundedHeight}px`\n                : boundedHeight\n              : \"100%\",\n          overflow: compact || contained ? \"auto\" : undefined,\n          minWidth: 0,\n        }}\n        {...props}\n      >\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3\">\n          <div className=\"glass-min-w-0\">\n            <h3\n              className={cn(\n                \"glass-font-semibold glass-text-primary-glass-opacity-90 glass-truncate\",\n                compact ? \"glass-text-sm\" : \"glass-text-lg\"\n              )}\n            >\n              Music Visualizer\n            </h3>\n            <p\n              className={cn(\n                \"glass-text-primary-glass-opacity-60 glass-truncate\",\n                compact ? \"glass-text-xs\" : \"glass-text-sm\"\n              )}\n            >\n              Real-time audio visualization and analysis\n            </p>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-space-x-2\">\n            {realTimeAnalysis && (\n              <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                <span className=\"glass-text-xs\">Live</span>\n              </div>\n            )}\n            {isRecording && (\n              <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-red glass-radius-full glass-animate-pulse\" />\n                <span className=\"glass-text-xs\">Recording</span>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Audio element */}\n        {audioSource && typeof audioSource === \"string\" && (\n          <audio\n            ref={audioRef}\n            src={audioSource}\n            onLoadedMetadata={() => {\n              if (audioRef.current) {\n                setDuration(audioRef.current.duration);\n                onAudioLoad?.(audioRef.current.duration);\n              }\n            }}\n            onTimeUpdate={() => {\n              if (audioRef.current) {\n                setCurrentTime(audioRef.current.currentTime);\n              }\n            }}\n          />\n        )}\n\n        {/* Controls */}\n        {showControls && <Controls />}\n\n        {/* Main visualization canvas */}\n        <div className=\"glass-relative\">\n          <canvas\n            ref={canvasRef}\n            width={canvasWidth}\n            height={canvasHeight}\n            className={`\n              glass-w-full glass-border glass-border-white/20 glass-radius-lg glass-surface-dark/20\n              ${enableInteraction ? \"glass-cursor-pointer\" : \"\"}\n            `}\n            style={{\n              height: compact ? \"130px\" : \"clamp(120px, 26vw, 220px)\",\n              display: \"block\",\n            }}\n            onClick={\n              enableInteraction\n                ? isPlaying\n                  ? handlePause\n                  : handlePlay\n                : undefined\n            }\n          />\n\n          {/* Beat intensity indicator */}\n          <div className=\"glass-absolute glass-top-2 glass-right-2\">\n            <div\n              className=\"glass-w-4 glass-h-4 glass-radius-full glass-surface-red\"\n              style={{\n                opacity: beatIntensity,\n                transform: `scale(${1 + beatIntensity})`,\n              }}\n            />\n          </div>\n        </div>\n\n        {/* Visualization controls */}\n        {showSettings && (\n          <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n            <div className=\"glass-space-y-4\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Visualization\n              </h4>\n\n              <div className=\"glass-space-y-3\">\n                <div>\n                  <label\n                    htmlFor={modeSelectId}\n                    className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\"\n                  >\n                    Mode\n                  </label>\n                  <select\n                    id={modeSelectId}\n                    value={visualConfig.mode}\n                    onChange={(e) =>\n                      setVisualConfig((prev: any) => ({\n                        ...prev,\n                        mode: e.target.value as any,\n                      }))\n                    }\n                    className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n                    aria-label=\"Visualization mode\"\n                  >\n                    <option value=\"bars\">Frequency Bars</option>\n                    <option value=\"wave\">Waveform</option>\n                    <option value=\"circular\">Circular</option>\n                    <option value=\"spectrum\">Spectrum</option>\n                    <option value=\"particles\">Particles</option>\n                    <option value=\"ripples\">Ripples</option>\n                  </select>\n                </div>\n\n                <div>\n                  <label\n                    htmlFor={colorSchemeSelectId}\n                    className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\"\n                  >\n                    Color Scheme\n                  </label>\n                  <select\n                    id={colorSchemeSelectId}\n                    value={visualConfig.colorScheme}\n                    onChange={(e) =>\n                      setVisualConfig((prev: any) => ({\n                        ...prev,\n                        colorScheme: e.target.value as any,\n                      }))\n                    }\n                    className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n                    aria-label=\"Color scheme\"\n                  >\n                    <option value=\"rainbow\">Rainbow</option>\n                    <option value=\"monochrome\">Monochrome</option>\n                    <option value=\"neon\">Neon</option>\n                    <option value=\"fire\">Fire</option>\n                    <option value=\"ice\">Ice</option>\n                    <option value=\"galaxy\">Galaxy</option>\n                  </select>\n                </div>\n\n                <div>\n                  <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                    Sensitivity: {visualConfig.sensitivity.toFixed(1)}\n                  </label>\n                  <input\n                    type=\"range\"\n                    min=\"0.1\"\n                    max=\"3.0\"\n                    step=\"0.1\"\n                    value={visualConfig.sensitivity}\n                    onChange={(e) =>\n                      setVisualConfig((prev: any) => ({\n                        ...prev,\n                        sensitivity: parseFloat(e.target.value),\n                      }))\n                    }\n                    className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                    aria-label=\"Sensitivity\"\n                  />\n                </div>\n              </div>\n            </div>\n\n            <div className=\"glass-space-y-4\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Audio Settings\n              </h4>\n\n              <div className=\"glass-space-y-3\">\n                <div>\n                  <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                    Smoothing: {audioConfig.smoothing.toFixed(1)}\n                  </label>\n                  <input\n                    type=\"range\"\n                    min=\"0.0\"\n                    max=\"1.0\"\n                    step=\"0.1\"\n                    value={audioConfig.smoothing}\n                    onChange={(e) => {\n                      const smoothing = parseFloat(e.target.value);\n                      setAudioConfig((prev: any) => ({ ...prev, smoothing }));\n                      if (analyserRef.current) {\n                        analyserRef.current.smoothingTimeConstant = smoothing;\n                      }\n                    }}\n                    className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer\"\n                    aria-label=\"Smoothing\"\n                  />\n                </div>\n\n                <div>\n                  <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n                    FFT Size\n                  </label>\n                  <select\n                    value={audioConfig.fftSize}\n                    onChange={(e) =>\n                      setAudioConfig((prev: any) => ({\n                        ...prev,\n                        fftSize: parseInt(e.target.value),\n                      }))\n                    }\n                    className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n                    aria-label=\"FFT size\"\n                  >\n                    <option value=\"128\">128</option>\n                    <option value=\"256\">256</option>\n                    <option value=\"512\">512</option>\n                    <option value=\"1024\">1024</option>\n                    <option value=\"2048\">2048</option>\n                  </select>\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Frequency display */}\n        {showFrequencyDisplay && (\n          <div\n            className={`\n            glass-p-3 glass-radius-lg glass-border glass-border-white/10\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.6 }).background}\n          `}\n          >\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80 glass-mb-2\">\n              Frequency Analysis\n            </h4>\n            <div className=\"glass-grid glass-grid-cols-4 glass-gap-4 glass-text-sm\">\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Bass:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {Math.round(\n                    (frequencyData.slice(0, 8).reduce((a, b) => a + b, 0) /\n                      8 /\n                      255) *\n                      100\n                  )}\n                  %\n                </div>\n              </div>\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Mid:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {Math.round(\n                    (frequencyData.slice(8, 32).reduce((a, b) => a + b, 0) /\n                      24 /\n                      255) *\n                      100\n                  )}\n                  %\n                </div>\n              </div>\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Treble:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {Math.round(\n                    (frequencyData.slice(32).reduce((a, b) => a + b, 0) /\n                      (frequencyData.length - 32) /\n                      255) *\n                      100\n                  )}\n                  %\n                </div>\n              </div>\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Beat:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {Math.round(beatIntensity * 100)}%\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassMusicVisualizer.displayName = \"GlassMusicVisualizer\";\n", "\"use client\";\nimport React, { useMemo } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport interface NeuralWeightMatrix {\n  id: string;\n  label: string;\n  weights: number[][];\n  activation?: number[];\n}\n\nexport interface NeuralWeightVisualizationProps {\n  layers?: NeuralWeightMatrix[];\n  className?: string;\n  highlightThreshold?: number;\n  precision?: number;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n}\n\nconst DEFAULT_LAYERS: NeuralWeightMatrix[] = [\n  {\n    id: \"input\",\n    label: \"Input Layer\",\n    weights: [\n      [0.12, -0.34, 0.52],\n      [0.41, -0.67, 0.18],\n      [0.09, 0.23, -0.12],\n    ],\n    activation: [0.64, 0.31, 0.78],\n  },\n  {\n    id: \"hidden\",\n    label: \"Hidden Layer\",\n    weights: [\n      [0.43, -0.58, 0.72, -0.19],\n      [-0.27, 0.35, -0.49, 0.63],\n      [0.11, 0.08, -0.14, 0.21],\n    ],\n    activation: [0.52, 0.61, 0.47, 0.34],\n  },\n  {\n    id: \"output\",\n    label: \"Output Layer\",\n    weights: [\n      [0.25, -0.19],\n      [-0.38, 0.44],\n      [0.57, -0.22],\n      [-0.29, 0.31],\n    ],\n    activation: [0.71, 0.29],\n  },\n];\n\nconst clamp = (value: number, min: number, max: number) =>\n  Math.min(max, Math.max(min, value));\n\nconst getWeightColor = (weight: number, threshold: number) => {\n  const magnitude = Math.abs(weight);\n  const normalized = clamp(magnitude / threshold, 0, 1);\n  const hue = weight >= 0 ? 180 : 335; // teal for positive, magenta for negative\n  const saturation = 70 + normalized * 20;\n  const lightness = 45 - normalized * 20;\n  return `hsl(${hue} ${saturation}% ${lightness}%)`;\n};\n\nexport function NeuralWeightVisualization({\n  layers = DEFAULT_LAYERS,\n  className,\n  highlightThreshold = 0.75,\n  precision = 2,\n  compact = false,\n  contained = false,\n  maxHeight,\n}: NeuralWeightVisualizationProps) {\n  const normalizedLayers = useMemo(() => {\n    const fallback = layers.length > 0 ? layers : DEFAULT_LAYERS;\n    return fallback.map((layer) => ({\n      ...layer,\n      weights: layer.weights.map((row) =>\n        row.map((value) => clamp(value, -1, 1))\n      ),\n      activation: layer.activation?.map((value) => clamp(value, 0, 1)),\n    }));\n  }, [layers]);\n\n  return (\n    <OptimizedGlass\n      role=\"figure\"\n      aria-label=\"Neural weight visualization\"\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-white/10 via-white/5 to-white/8\",\n        (compact || contained) && \"glass-overflow-auto\",\n        className\n      )}\n      style={{\n        ...(maxHeight !== undefined || compact || contained\n          ? {\n              maxHeight:\n                typeof (maxHeight ?? 240) === \"number\"\n                  ? `${maxHeight ?? 240}px`\n                  : maxHeight,\n            }\n          : null),\n      }}\n    >\n      {!compact && (\n        <header>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n            Neural Weight Visualization\n          </h2>\n          <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n            Inspect synaptic strengths with polarity-aware colour mapping and\n            activation overlays.\n          </p>\n        </header>\n      )}\n\n      <div\n        className={cn(\n          \"glass-grid glass-gap-4\",\n          compact ? \"glass-grid-cols-1\" : \"lg:glass-grid-cols-3\"\n        )}\n      >\n        {(compact ? normalizedLayers.slice(0, 1) : normalizedLayers).map(\n          (layer) => (\n            <div\n              key={layer.id}\n              className=\"glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-4 glass-backdrop-blur\"\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-text-sm glass-text-primary-glass-opacity-80\">\n                <h3 className=\"glass-font-semibold glass-text-primary\">\n                  {layer.label}\n                </h3>\n                {layer.activation && (\n                  <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                    Activation avg{\" \"}\n                    {(\n                      layer.activation.reduce((sum, value) => sum + value, 0) /\n                      layer.activation.length\n                    ).toFixed(2)}\n                  </span>\n                )}\n              </div>\n\n              <div className=\"glass-mt-3 glass-overflow-hidden glass-radius-xl glass-border glass-border-white/10\">\n                <table className=\"glass-min-w-full glass-border-collapse\">\n                  <tbody>\n                    {layer.weights.map((row, rowIndex) => (\n                      <tr\n                        key={`${layer.id}-row-${rowIndex}`}\n                        className=\"glass-divide-x glass-divide-white-opacity-5\"\n                      >\n                        {row.map((weight, columnIndex) => {\n                          const magnitude = Math.abs(weight);\n                          const strong = magnitude >= highlightThreshold;\n                          const color = getWeightColor(weight, 1);\n                          return (\n                            <td\n                              key={`${layer.id}-${rowIndex}-${columnIndex}`}\n                              className={cn(\n                                \"px-2 py-3 text-center text-xs font-medium text-white/90 transition\",\n                                strong\n                                  ? \"shadow-[inset_0_0_0_1px_rgba(255,255,255,0.3)] text-white\"\n                                  : \"text-white/80\"\n                              )}\n                              style={{\n                                background: `linear-gradient(135deg, ${color} 0%, rgba(15,23,42,0.75) 100%)`,\n                              }}\n                            >\n                              {weight.toFixed(precision)}\n                            </td>\n                          );\n                        })}\n                      </tr>\n                    ))}\n                  </tbody>\n                </table>\n              </div>\n\n              {!compact && layer.activation && (\n                <div className=\"glass-mt-4 glass-space-y-2 glass-text-xs glass-text-primary-opacity-70\">\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-uppercase glass-tracking-wide\">\n                    <span>Activation Levels</span>\n                    <span>Max {Math.max(...layer.activation).toFixed(2)}</span>\n                  </div>\n                  <div className=\"glass-flex glass-gap-2\">\n                    {layer.activation.map((activation, index) => (\n                      <div\n                        key={`${layer.id}-activation-${index}`}\n                        className=\"glass-flex-1\"\n                      >\n                        <div className=\"glass-h-16 glass-overflow-hidden glass-radius-full glass-surface-subtle/10\">\n                          <div\n                            className=\"glass-h-full glass-w-full glass-radius-full glass-surface-primary/70\"\n                            style={{ height: `${activation * 100}%` }}\n                          />\n                        </div>\n                        <div className=\"glass-mt-1 glass-text-center glass-text-10px glass-text-primary-glass-opacity-60\">\n                          n{index + 1}\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              )}\n            </div>\n          )\n        )}\n      </div>\n    </OptimizedGlass>\n  );\n}\n\nexport default NeuralWeightVisualization;\n", "\"use client\";\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport interface NeuromorphicSignal {\n  channel: string;\n  weights: number[];\n  phase?: number;\n}\n\nexport interface NeuromorphicLearningSnapshot {\n  energyUsage: number;\n  coherence: number;\n  plasticity: number;\n  stability: number;\n  timestamp: number;\n}\n\nexport interface NeuromorphicLearningNetworkProps {\n  className?: string;\n  signals?: NeuromorphicSignal[];\n  onSnapshot?: (snapshot: NeuromorphicLearningSnapshot) => void;\n  autoSampleInterval?: number;\n}\n\nconst DEFAULT_SIGNALS: NeuromorphicSignal[] = [\n  { channel: \"sensory\", weights: [0.42, -0.31, 0.57, -0.12, 0.25], phase: 0.6 },\n  {\n    channel: \"cognitive\",\n    weights: [0.63, -0.44, 0.18, 0.27, -0.35],\n    phase: 0.52,\n  },\n  { channel: \"motor\", weights: [0.29, -0.17, 0.41, -0.22, 0.33], phase: 0.47 },\n];\n\nconst clamp = (value: number, min: number, max: number) =>\n  Math.min(max, Math.max(min, value));\n\nconst computeMetrics = (\n  signals: NeuromorphicSignal[]\n): NeuromorphicLearningSnapshot => {\n  if (signals.length === 0) {\n    return {\n      energyUsage: 0,\n      coherence: 0,\n      plasticity: 0,\n      stability: 0,\n      timestamp: Date.now(),\n    };\n  }\n\n  const allWeights = signals.flatMap((signal) => signal.weights);\n  const mean =\n    allWeights.reduce((sum, weight) => sum + weight, 0) / allWeights.length;\n  const variance =\n    allWeights.reduce((sum, weight) => sum + (weight - mean) ** 2, 0) /\n    allWeights.length;\n  const stdDeviation = Math.sqrt(variance);\n  const averageMagnitude =\n    allWeights.reduce((sum, weight) => sum + Math.abs(weight), 0) /\n    allWeights.length;\n\n  const phaseVariance =\n    signals.reduce(\n      (sum, signal) => sum + Math.pow((signal.phase ?? 0.5) - 0.5, 2),\n      0\n    ) / signals.length;\n\n  return {\n    energyUsage: clamp(averageMagnitude, 0, 1),\n    coherence: clamp(1 - stdDeviation, 0, 1),\n    plasticity: clamp(variance * 2, 0, 1),\n    stability: clamp(1 - phaseVariance * 4, 0, 1),\n    timestamp: Date.now(),\n  };\n};\n\nexport function NeuromorphicLearningNetwork({\n  className,\n  signals = DEFAULT_SIGNALS,\n  onSnapshot,\n  autoSampleInterval,\n}: NeuromorphicLearningNetworkProps) {\n  const [snapshot, setSnapshot] = useState<NeuromorphicLearningSnapshot>(() =>\n    computeMetrics(signals)\n  );\n\n  const normalizedSignals = useMemo(() => {\n    return signals.length > 0 ? signals : DEFAULT_SIGNALS;\n  }, [signals]);\n\n  useEffect(() => {\n    setSnapshot(computeMetrics(normalizedSignals));\n  }, [normalizedSignals]);\n\n  useEffect(() => {\n    if (!autoSampleInterval) return;\n    const timer = setInterval(\n      () => {\n        const latest = computeMetrics(normalizedSignals);\n        setSnapshot(latest);\n        onSnapshot?.(latest);\n      },\n      clamp(autoSampleInterval, 500, 10_000)\n    );\n\n    return () => clearInterval(timer);\n  }, [autoSampleInterval, normalizedSignals, onSnapshot]);\n\n  useEffect(() => {\n    onSnapshot?.(snapshot);\n  }, [snapshot, onSnapshot]);\n\n  return (\n    <OptimizedGlass\n      role=\"article\"\n      aria-label=\"Neuromorphic learning network\"\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-indigo-500/20 via-white/5 to-white/8\",\n        className\n      )}\n    >\n      <header>\n        <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n          Neuromorphic Learning Network\n        </h2>\n        <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n          Monitor coherence between quantum-inspired spikes and adaptive\n          plasticity feedback.\n        </p>\n      </header>\n\n      <div className=\"glass-grid glass-gap-4 sm:glass-grid-cols-2 lg:glass-grid-cols-4\">\n        {(\n          [\n            [\"Energy Usage\", snapshot.energyUsage],\n            [\"Coherence\", snapshot.coherence],\n            [\"Plasticity\", snapshot.plasticity],\n            [\"Stability\", snapshot.stability],\n          ] as const\n        ).map(([label, value]) => (\n          <div\n            key={label}\n            className=\"glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-4 glass-text-primary\"\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-uppercase glass-tracking-wide glass-text-primary-glass-opacity-60\">\n              <span>{label}</span>\n              <span>{(value * 100).toFixed(0)}%</span>\n            </div>\n            <div className=\"glass-mt-3 glass-h-2 glass-w-full glass-overflow-hidden glass-radius-full glass-surface-subtle/10\">\n              <div\n                className=\"glass-h-full glass-radius-full glass-gradient-primary glass-gradient-primary glass-gradient-primary\"\n                style={{ width: `${value * 100}%` }}\n              />\n            </div>\n          </div>\n        ))}\n      </div>\n\n      <section className=\"glass-space-y-3\">\n        <h3 className=\"glass-text-sm glass-font-semibold glass-uppercase glass-tracking-wide glass-text-primary-glass-opacity-60\">\n          Signal channels\n        </h3>\n        <div className=\"glass-grid glass-gap-3 sm:glass-grid-cols-2 lg:glass-grid-cols-3\">\n          {normalizedSignals.map((signal) => (\n            <div\n              key={signal.channel}\n              className=\"glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-4 glass-text-primary-glass-opacity-80\"\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-text-sm glass-text-primary\">\n                <span className=\"glass-font-semibold\">{signal.channel}</span>\n                <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                  Weights {signal.weights.length}\n                </span>\n              </div>\n              <div className=\"glass-mt-3 glass-space-y-2 glass-text-xs\">\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-text-primary-glass-opacity-60\">\n                  <span>Avg Weight</span>\n                  <span className=\"glass-font-semibold glass-text-primary-glass-opacity-80\">\n                    {(\n                      signal.weights.reduce((sum, weight) => sum + weight, 0) /\n                      signal.weights.length\n                    ).toFixed(2)}\n                  </span>\n                </div>\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-text-primary-glass-opacity-60\">\n                  <span>Phase Alignment</span>\n                  <span className=\"glass-font-semibold glass-text-primary-glass-opacity-80\">\n                    {((signal.phase ?? 0.5) * 100).toFixed(0)}%\n                  </span>\n                </div>\n              </div>\n            </div>\n          ))}\n        </div>\n      </section>\n    </OptimizedGlass>\n  );\n}\n\nexport default NeuromorphicLearningNetwork;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport { motion } from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface StyleModel {\n  id: string;\n  name: string;\n  description: string;\n  previewUrl: string;\n  strength: number;\n  category: \"artistic\" | \"photographic\" | \"abstract\" | \"vintage\" | \"modern\";\n}\n\nexport interface GlassStyleTransferProps {\n  sourceImage?: string;\n  styleModels?: StyleModel[];\n  selectedStyle?: string;\n  transferStrength?: number;\n  compact?: boolean;\n  showHeader?: boolean;\n  showActions?: boolean;\n  realTimePreview?: boolean;\n  showProgressIndicator?: boolean;\n  showStyleLibrary?: boolean;\n  showAdvancedControls?: boolean;\n  preserveColors?: boolean;\n  enhanceDetails?: boolean;\n  blendMode?: \"normal\" | \"multiply\" | \"screen\" | \"overlay\" | \"soft-light\";\n  resolution?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  onStyleSelect?: (styleId: string) => void;\n  onTransferComplete?: (result: string) => void;\n  onProgressUpdate?: (progress: number) => void;\n  className?: string;\n}\n\nconst defaultStyleModels: StyleModel[] = [\n  {\n    id: \"van-gogh\",\n    name: \"Van Gogh Starry Night\",\n    description: \"Impressionistic swirls and bold brushstrokes\",\n    previewUrl: \"/styles/van-gogh.jpg\",\n    strength: 0.8,\n    category: \"artistic\",\n  },\n  {\n    id: \"picasso\",\n    name: \"Picasso Cubism\",\n    description: \"Geometric fragmentation and multiple perspectives\",\n    previewUrl: \"/styles/picasso.jpg\",\n    strength: 0.7,\n    category: \"artistic\",\n  },\n  {\n    id: \"monet\",\n    name: \"Monet Water Lilies\",\n    description: \"Soft impressionistic light and color\",\n    previewUrl: \"/styles/monet.jpg\",\n    strength: 0.6,\n    category: \"artistic\",\n  },\n  {\n    id: \"film-noir\",\n    name: \"Film Noir\",\n    description: \"High contrast black and white cinematography\",\n    previewUrl: \"/styles/film-noir.jpg\",\n    strength: 0.9,\n    category: \"photographic\",\n  },\n  {\n    id: \"synthwave\",\n    name: \"Synthwave\",\n    description: \"Retro-futuristic neon aesthetics\",\n    previewUrl: \"/styles/synthwave.jpg\",\n    strength: 0.8,\n    category: \"modern\",\n  },\n  {\n    id: \"kandinsky\",\n    name: \"Kandinsky Abstract\",\n    description: \"Geometric abstraction with vibrant colors\",\n    previewUrl: \"/styles/kandinsky.jpg\",\n    strength: 0.7,\n    category: \"abstract\",\n  },\n];\n\nconst readableGlassTextStyle: React.CSSProperties = {\n  \"--glass-text-primary\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--typography-text-primary\":\n    \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  \"--glass-theme-text\": \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n  color: \"var(--glass-theme-text, rgba(255, 255, 255, 0.95))\",\n} as React.CSSProperties;\n\nexport const GlassStyleTransfer = forwardRef<\n  HTMLDivElement,\n  GlassStyleTransferProps\n>(\n  (\n    {\n      sourceImage,\n      styleModels = defaultStyleModels,\n      selectedStyle = \"\",\n      transferStrength = 0.7,\n      compact = false,\n      showHeader = !compact,\n      showActions = !compact,\n      realTimePreview = true,\n      showProgressIndicator = true,\n      showStyleLibrary = false,\n      showAdvancedControls = false,\n      preserveColors = false,\n      enhanceDetails = true,\n      blendMode = \"normal\",\n      resolution = \"medium\",\n      onStyleSelect,\n      onTransferComplete,\n      onProgressUpdate,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [isProcessing, setIsProcessing] = useState(false);\n    const [progress, setProgress] = useState(0);\n    const [previewImage, setPreviewImage] = useState<string>(\"\");\n    const [uploadedImage, setUploadedImage] = useState<string>(\n      sourceImage || \"\"\n    );\n    const [selectedStyleId, setSelectedStyleId] = useState(selectedStyle);\n    const [transferParams, setTransferParams] = useState({\n      strength: transferStrength,\n      preserveColors,\n      enhanceDetails,\n      blendMode,\n      resolution,\n    });\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const fileInputRef = useRef<HTMLInputElement>(null);\n    const id = useA11yId(\"glass-style-transfer\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n\n    // Simulate style transfer processing\n    const processStyleTransfer = useCallback(\n      async (imageData: string, styleId: string) => {\n        if (!imageData || !styleId) return;\n\n        setIsProcessing(true);\n        setProgress(0);\n        play(\"processing\");\n\n        // Simulate processing with progress updates\n        const steps = [\n          { label: \"Loading models...\", duration: ANIMATION.DURATION.slow },\n          {\n            label: \"Analyzing content...\",\n            duration: ANIMATION.DURATION.slower * 1.1,\n          },\n          {\n            label: \"Extracting style features...\",\n            duration: ANIMATION.DURATION.slower * 1.4,\n          },\n          {\n            label: \"Applying style transfer...\",\n            duration: ANIMATION.DURATION.slower * 2.1,\n          },\n          {\n            label: \"Optimizing result...\",\n            duration: ANIMATION.DURATION.slower,\n          },\n          { label: \"Finalizing...\", duration: ANIMATION.DURATION.slow * 1.4 },\n        ];\n\n        let totalProgress = 0;\n        for (let i = 0; i < steps.length; i++) {\n          const step = steps[i];\n          await new Promise((resolve) => setTimeout(resolve, step.duration));\n          totalProgress = ((i + 1) / steps.length) * 100;\n          setProgress(totalProgress);\n          onProgressUpdate?.(totalProgress);\n        }\n\n        // Simulate result generation\n        const canvas = canvasRef.current;\n        if (canvas) {\n          const ctx = canvas.getContext(\"2d\");\n          if (ctx) {\n            // Create a stylized version using advanced canvas rendering\n            const selectedStyleModel = styleModels.find(\n              (s) => s.id === styleId\n            );\n            const gradient = ctx.createLinearGradient(\n              0,\n              0,\n              canvas.width,\n              canvas.height\n            );\n\n            // Apply different effects based on style category\n            switch (selectedStyleModel?.category) {\n              case \"artistic\":\n                gradient.addColorStop(0, \"hsl(var(--glass-color-danger))\");\n                gradient.addColorStop(0.5, \"hsl(var(--glass-color-info))\");\n                gradient.addColorStop(1, \"hsl(var(--glass-color-primary))\");\n                break;\n              case \"photographic\":\n                gradient.addColorStop(0, \"#2D3748\");\n                gradient.addColorStop(0.5, \"#4A5568\");\n                gradient.addColorStop(1, \"#718096\");\n                break;\n              case \"abstract\":\n                gradient.addColorStop(0, \"#9F7AEA\");\n                gradient.addColorStop(0.5, \"#F093FB\");\n                gradient.addColorStop(1, \"#F9844A\");\n                break;\n              default:\n                gradient.addColorStop(0, \"#667EEA\");\n                gradient.addColorStop(1, \"#764BA2\");\n            }\n\n            ctx.fillStyle = gradient;\n            ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n            // Add style-specific effects\n            if (selectedStyleModel?.category === \"artistic\") {\n              // Add brush stroke effect\n              for (let i = 0; i < 50; i++) {\n                ctx.beginPath();\n                ctx.strokeStyle = `rgba(255, 255, 255, ${Math.random() * 0.3})`;\n                ctx.lineWidth = Math.random() * 3 + 1;\n                ctx.moveTo(\n                  Math.random() * canvas.width,\n                  Math.random() * canvas.height\n                );\n                ctx.lineTo(\n                  Math.random() * canvas.width,\n                  Math.random() * canvas.height\n                );\n                ctx.stroke();\n              }\n            }\n\n            const resultUrl = canvas.toDataURL();\n            setPreviewImage(resultUrl);\n            onTransferComplete?.(resultUrl);\n          }\n        }\n\n        setIsProcessing(false);\n        play(\"success\");\n      },\n      [styleModels, onProgressUpdate, onTransferComplete, play]\n    );\n\n    // Handle file upload\n    const handleFileUpload = useCallback(\n      (event: React.ChangeEvent<HTMLInputElement>) => {\n        const file = event.target.files?.[0];\n        if (!file) return;\n\n        const reader = new FileReader();\n        reader.onload = (e) => {\n          const result = e.target?.result as string;\n          setUploadedImage(result);\n          if (realTimePreview && selectedStyleId) {\n            processStyleTransfer(result, selectedStyleId);\n          }\n        };\n        reader.readAsDataURL(file);\n      },\n      [realTimePreview, selectedStyleId, processStyleTransfer]\n    );\n\n    // Handle style selection\n    const handleStyleSelect = useCallback(\n      (styleId: string) => {\n        setSelectedStyleId(styleId);\n        onStyleSelect?.(styleId);\n        play(\"select\");\n\n        if (realTimePreview && uploadedImage) {\n          processStyleTransfer(uploadedImage, styleId);\n        }\n      },\n      [\n        realTimePreview,\n        uploadedImage,\n        processStyleTransfer,\n        onStyleSelect,\n        play,\n      ]\n    );\n\n    // Real-time parameter updates\n    useEffect(() => {\n      if (realTimePreview && uploadedImage && selectedStyleId) {\n        const debounceTimer = setTimeout(() => {\n          processStyleTransfer(uploadedImage, selectedStyleId);\n        }, 500);\n        return () => clearTimeout(debounceTimer);\n      }\n    }, [\n      transferParams,\n      realTimePreview,\n      uploadedImage,\n      selectedStyleId,\n      processStyleTransfer,\n    ]);\n\n    const StyleLibrary = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Style Library\n        </h4>\n        <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-3 glass-gap-3\">\n          {styleModels.map((style) => (\n            <motion.div\n              key={style.id}\n              className={`\n                glass-relative glass-p-3 glass-radius-lg glass-border glass-cursor-pointer glass-transition-all glass-duration-200\n                ${\n                  selectedStyleId === style.id\n                    ? \"glass-border-blue glass-surface-blue/20\"\n                    : \"glass-border-white/20 hover:glass-border-white/40 glass-surface-subtle/5\"\n                }\n              `}\n              whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n              whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              onClick={() => handleStyleSelect(style.id)}\n            >\n              <div className=\"glass-aspect-square glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-radius-lg glass-mb-2 glass-overflow-hidden\">\n                <div\n                  className={`\n                  glass-w-full glass-h-full glass-gradient-primary\n                  ${\n                    style.category === \"artistic\"\n                      ? \"from-red-400 to-blue-400\"\n                      : style.category === \"photographic\"\n                        ? \"from-white/15 to-white/5\"\n                        : style.category === \"abstract\"\n                          ? \"from-purple-400 to-pink-400\"\n                          : style.category === \"vintage\"\n                            ? \"from-yellow-600 to-orange-800\"\n                            : \"from-blue-400 to-purple-600\"\n                  }\n                `}\n                />\n              </div>\n\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-90 glass-font-medium glass-mb-1\">\n                {style.name}\n              </div>\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                {style.description}\n              </div>\n\n              <div className=\"glass-absolute glass-top-2 glass-right-2\">\n                <div\n                  className={`\n                  glass-px-1.5 glass-py-0.5 glass-radius glass-text-xs glass-font-medium\n                  ${\n                    style.category === \"artistic\"\n                      ? \"glass-surface-red/20 glass-text-red\"\n                      : style.category === \"photographic\"\n                        ? \"glass-surface-muted/20 glass-text-secondary\"\n                        : style.category === \"abstract\"\n                          ? \"glass-surface-primary/20 glass-text-secondary\"\n                          : style.category === \"vintage\"\n                            ? \"glass-surface-amber/20 glass-text-secondary\"\n                            : \"glass-surface-blue/20 glass-text-secondary\"\n                  }\n                `}\n                >\n                  {style.category}\n                </div>\n              </div>\n            </motion.div>\n          ))}\n        </div>\n      </div>\n    );\n\n    const AdvancedControls = () => (\n      <div className=\"glass-space-y-4\">\n        <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n          Advanced Controls\n        </h4>\n\n        <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-4\">\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\">\n              Transfer Strength: {Math.round(transferParams.strength * 100)}%\n            </label>\n            <input\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={transferParams.strength}\n              onChange={(e) =>\n                setTransferParams((prev: any) => ({\n                  ...prev,\n                  strength: parseFloat(e.target.value),\n                }))\n              }\n              aria-label={`Transfer Strength: ${Math.round(transferParams.strength * 100)}%`}\n              className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-lg glass-appearance-none glass-cursor-pointer glass-slider\"\n            />\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\">\n              Resolution\n            </label>\n            <select\n              value={transferParams.resolution}\n              onChange={(e) =>\n                setTransferParams((prev: any) => ({\n                  ...prev,\n                  resolution: e.target.value as any,\n                }))\n              }\n              aria-label=\"Resolution\"\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n            >\n              <option value=\"low\">Low (512px)</option>\n              <option value=\"medium\">Medium (1024px)</option>\n              <option value=\"high\">High (2048px)</option>\n              <option value=\"ultra\">Ultra (4096px)</option>\n            </select>\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-xs glass-text-primary-opacity-70 glass-mb-2\">\n              Blend Mode\n            </label>\n            <select\n              value={transferParams.blendMode}\n              onChange={(e) =>\n                setTransferParams((prev: any) => ({\n                  ...prev,\n                  blendMode: e.target.value as any,\n                }))\n              }\n              aria-label=\"Blend Mode\"\n              className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius-lg glass-text-primary-glass-opacity-90 glass-text-sm\"\n            >\n              <option value=\"normal\">Normal</option>\n              <option value=\"multiply\">Multiply</option>\n              <option value=\"screen\">Screen</option>\n              <option value=\"overlay\">Overlay</option>\n              <option value=\"soft-light\">Soft Light</option>\n            </select>\n          </div>\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-space-x-6\">\n          <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n            <input\n              type=\"checkbox\"\n              checked={transferParams.preserveColors}\n              onChange={(e) =>\n                setTransferParams((prev: any) => ({\n                  ...prev,\n                  preserveColors: e.target.checked,\n                }))\n              }\n              className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n            />\n            <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n              Preserve Colors\n            </span>\n          </label>\n\n          <label className=\"glass-flex glass-items-center glass-space-x-2 glass-cursor-pointer\">\n            <input\n              type=\"checkbox\"\n              checked={transferParams.enhanceDetails}\n              onChange={(e) =>\n                setTransferParams((prev: any) => ({\n                  ...prev,\n                  enhanceDetails: e.target.checked,\n                }))\n              }\n              className=\"glass-w-4 glass-h-4 glass-radius glass-border-white/30\"\n            />\n            <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n              Enhance Details\n            </span>\n          </label>\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        data-glass-component\n        className={`${compact ? \"glass-p-3 glass-space-y-3\" : \"glass-p-4 glass-space-y-4\"} glass-max-w-full glass-overflow-auto ${className}`}\n        style={{\n          ...readableGlassTextStyle,\n          maxHeight: \"100%\",\n          minWidth: 0,\n          height: compact ? \"100%\" : undefined,\n          overflow: compact ? \"hidden\" : undefined,\n        }}\n        {...props}\n      >\n        {/* Header */}\n        {showHeader && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-min-w-0\">\n            <div className=\"glass-min-w-0\">\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90 glass-truncate\">\n                Style Transfer AI\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                Transform your images with artistic styles\n              </p>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-space-x-2\">\n              {realTimePreview && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span className=\"glass-text-xs\">Real-time</span>\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Main interface */}\n        <div\n          className={`glass-grid ${compact ? \"glass-grid-cols-2 glass-gap-3\" : \"glass-grid-cols-1 md:glass-grid-cols-2 glass-gap-3\"}`}\n          style={\n            compact\n              ? { gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\", gap: 10 }\n              : undefined\n          }\n        >\n          {/* Source image */}\n          <div className=\"glass-space-y-2\">\n            <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n              Source Image\n            </h4>\n\n            <div\n              className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-dashed glass-border-white/30 glass-radius-lg glass-overflow-hidden glass-cursor-pointer hover:glass-border-white/50 glass-transition-colors\"\n              onClick={() => fileInputRef.current?.click()}\n            >\n              {uploadedImage ? (\n                <img\n                  src={uploadedImage}\n                  alt=\"Source\"\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n              ) : (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full glass-text-primary-glass-opacity-50\">\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-2xl glass-mb-2\">\uD83D\uDCF7</div>\n                    {!compact && (\n                      <>\n                        <p>Click to upload image</p>\n                        <p className=\"glass-text-xs glass-mt-1\">\n                          PNG, JPG up to 10MB\n                        </p>\n                      </>\n                    )}\n                  </div>\n                </div>\n              )}\n\n              <input\n                ref={fileInputRef}\n                type=\"file\"\n                accept=\"image/*\"\n                onChange={handleFileUpload}\n                aria-label=\"Upload image file\"\n                className=\"glass-hidden glass-touch-target glass-contrast-guard\"\n              />\n            </div>\n          </div>\n\n          {/* Preview */}\n          <div className=\"glass-space-y-2\">\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <h4 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80\">\n                Style Preview\n              </h4>\n              {isProcessing && showProgressIndicator && (\n                <div className=\"glass-flex glass-items-center glass-space-x-2 glass-text-primary\">\n                  <div className=\"glass-w-4 glass-h-4 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <span className=\"glass-text-xs\">{Math.round(progress)}%</span>\n                </div>\n              )}\n            </div>\n\n            <div className=\"glass-relative glass-aspect-video glass-surface-subtle/5 glass-border glass-border-white/20 glass-radius-lg glass-overflow-hidden\">\n              {previewImage ? (\n                <img\n                  src={previewImage}\n                  alt=\"Styled preview\"\n                  className=\"glass-w-full glass-h-full glass-object-cover\"\n                />\n              ) : (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full glass-text-primary-glass-opacity-50\">\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-2xl glass-mb-2\">\uD83C\uDFA8</div>\n                    {!compact && <p>Style preview will appear here</p>}\n                  </div>\n                </div>\n              )}\n\n              {/* Processing overlay */}\n              {isProcessing && (\n                <div className=\"glass-absolute glass-inset-0 glass-surface-dark/50 glass-flex glass-items-center glass-justify-center\">\n                  <div className=\"glass-text-center glass-text-primary\">\n                    <div className=\"glass-w-8 glass-h-8 glass-border-2 glass-border-white glass-border-t-transparent glass-radius-full glass-animate-spin glass-mx-auto glass-mb-2\" />\n                    <div className=\"glass-text-sm\">Processing...</div>\n                    <div className=\"glass-text-xs glass-mt-1\">\n                      {Math.round(progress)}% complete\n                    </div>\n                  </div>\n                </div>\n              )}\n            </div>\n\n            <canvas\n              ref={canvasRef}\n              width={512}\n              height={512}\n              className=\"glass-hidden\"\n            />\n          </div>\n        </div>\n\n        {/* Style library */}\n        {showStyleLibrary && <StyleLibrary />}\n\n        {/* Advanced controls */}\n        {showAdvancedControls && <AdvancedControls />}\n\n        {/* Action buttons */}\n        {showActions && (\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3 glass-pt-3 glass-border-t glass-border-white/10 glass-flex-wrap\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-flex-wrap\">\n              <motion.button\n                className=\"glass-px-4 glass-py-2 glass-surface-blue hover:glass-surface-blue glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                onClick={() =>\n                  uploadedImage &&\n                  selectedStyleId &&\n                  processStyleTransfer(uploadedImage, selectedStyleId)\n                }\n                disabled={isProcessing || !uploadedImage || !selectedStyleId}\n              >\n                {isProcessing ? \"Processing...\" : \"Apply Style\"}\n              </motion.button>\n\n              <motion.button\n                className=\"glass-px-4 glass-py-2 glass-border glass-border-white/30 hover:glass-border-white/50 glass-text-primary-glass-opacity-80 glass-radius-lg glass-text-sm glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n                onClick={() => {\n                  setPreviewImage(\"\");\n                  setProgress(0);\n                }}\n              >\n                Clear\n              </motion.button>\n            </div>\n\n            {previewImage && (\n              <motion.a\n                href={previewImage}\n                download=\"styled-image.png\"\n                className=\"glass-px-4 glass-py-2 glass-surface-green hover:glass-surface-green glass-text-primary glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors\"\n                whileHover={shouldAnimate ? { scale: 1.02 } : {}}\n                whileTap={shouldAnimate ? { scale: 0.98 } : {}}\n              >\n                Download Result\n              </motion.a>\n            )}\n          </div>\n        )}\n\n        {/* Progress indicator */}\n        {isProcessing && showProgressIndicator && (\n          <div\n            className={`\n            glass-p-3 glass-radius-lg glass-border glass-border-blue/30\n            ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n          `}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-2\">\n              <span className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                Processing Style Transfer\n              </span>\n              <span className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                {Math.round(progress)}%\n              </span>\n            </div>\n            <div className=\"glass-w-full glass-surface-subtle/20 glass-radius-full glass-h-2\">\n              <motion.div\n                className=\"glass-surface-blue glass-h-2 glass-radius-full\"\n                animate={{ width: `${progress}%` }}\n                transition={\n                  prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                }\n              />\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassStyleTransfer.displayName = \"GlassStyleTransfer\";\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AnimatePresence, motion, PanInfo } from \"framer-motion\";\nimport React, { useEffect, useState } from \"react\";\nimport { easings } from \"./AdvancedAnimations\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Glass transition variants\nconst glassTransitionVariants = {\n  // Shatter transition\n  shatter: {\n    initial: {\n      scale: 1,\n      opacity: 1,\n      filter: \"blur(0px)\",\n    },\n    exit: {\n      scale: [1, 1.02, 0.98, 1.1, 0],\n      opacity: [1, 0.8, 0.6, 0.3, 0],\n      filter: [\n        \"blur(0px)\",\n        \"blur(1px)\",\n        \"blur(3px)\",\n        \"blur(var(--glass-blur-md))\",\n        \"blur(15px)\",\n      ],\n      rotate: [0, -2, 4, -8, 15],\n      transition: {\n        duration: ANIMATION.DURATION.slower / 1000,\n        times: [0, 0.2, 0.4, 0.7, 1],\n        ease: easings.easeOutExpo,\n      },\n    },\n    enter: {\n      scale: [0, 0.8, 1.05, 1],\n      opacity: [0, 0.3, 0.8, 1],\n      filter: [\n        \"blur(15px)\",\n        \"blur(var(--glass-blur-md))\",\n        \"blur(2px)\",\n        \"blur(0px)\",\n      ],\n      rotate: [15, -5, 2, 0],\n      transition: {\n        duration: ANIMATION.DURATION.slower / 1000,\n        times: [0, 0.3, 0.7, 1],\n        ease: easings.easeOutBack,\n      },\n    },\n  },\n\n  // Liquid transition\n  liquid: {\n    initial: {\n      clipPath: \"inset(0% 0% 0% 0% round 16px)\",\n      scale: 1,\n      opacity: 1,\n    },\n    exit: {\n      clipPath: [\n        \"inset(0% 0% 0% 0% round 16px)\",\n        \"inset(10% 5% 10% 5% round 32px)\",\n        \"inset(30% 20% 30% 20% round 50%)\",\n        \"inset(50% 50% 50% 50% round 50%)\",\n      ],\n      scale: [1, 0.95, 0.8, 0.5],\n      opacity: [1, 0.8, 0.4, 0],\n      transition: {\n        duration: ANIMATION.DURATION.slow / 1000,\n        ease: easings.easeInOutCubic,\n      },\n    },\n    enter: {\n      clipPath: [\n        \"inset(50% 50% 50% 50% round 50%)\",\n        \"inset(30% 20% 30% 20% round 50%)\",\n        \"inset(10% 5% 10% 5% round 32px)\",\n        \"inset(0% 0% 0% 0% round 16px)\",\n      ],\n      scale: [0.5, 0.8, 0.95, 1],\n      opacity: [0, 0.4, 0.8, 1],\n      transition: {\n        duration: (ANIMATION.DURATION.slow * 1.2) / 1000,\n        ease: easings.easeOutExpo,\n      },\n    },\n  },\n\n  // Ripple transition\n  ripple: {\n    initial: {\n      scale: 1,\n      opacity: 1,\n      borderRadius: \"16px\",\n    },\n    exit: {\n      scale: [1, 1.5, 0],\n      opacity: [1, 0.3, 0],\n      borderRadius: [\"16px\", \"50%\", \"50%\"],\n      transition: {\n        duration: ANIMATION.DURATION.slow / 1000,\n        ease: easings.easeInOutCubic,\n      },\n    },\n    enter: {\n      scale: [0, 1.2, 1],\n      opacity: [0, 0.6, 1],\n      borderRadius: [\"50%\", \"50%\", \"16px\"],\n      transition: {\n        duration: ANIMATION.DURATION.slow / 1000,\n        ease: easings.easeOutBack,\n      },\n    },\n  },\n\n  // Morph transition\n  morph: {\n    initial: {\n      borderRadius: \"16px\",\n      scaleX: 1,\n      scaleY: 1,\n      opacity: 1,\n    },\n    exit: {\n      borderRadius: [\n        \"16px\",\n        \"50px 16px 30px 40px\",\n        \"20px 60px 40px 20px\",\n        \"50%\",\n      ],\n      scaleX: [1, 0.8, 1.2, 0],\n      scaleY: [1, 1.2, 0.8, 0],\n      opacity: [1, 0.7, 0.3, 0],\n      transition: {\n        duration: ANIMATION.DURATION.slower / 1000,\n        ease: easings.easeInOutCubic,\n      },\n    },\n    enter: {\n      borderRadius: [\n        \"50%\",\n        \"20px 60px 40px 20px\",\n        \"50px 16px 30px 40px\",\n        \"16px\",\n      ],\n      scaleX: [0, 1.2, 0.8, 1],\n      scaleY: [0, 0.8, 1.2, 1],\n      opacity: [0, 0.3, 0.7, 1],\n      transition: {\n        duration: (ANIMATION.DURATION.slow * 1.4) / 1000,\n        ease: easings.easeOutExpo,\n      },\n    },\n  },\n\n  // Frost transition\n  frost: {\n    initial: {\n      scale: 1,\n      opacity: 1,\n      filter: \"blur(0px) brightness(1)\",\n    },\n    exit: {\n      scale: [1, 1.1, 0.9, 0],\n      opacity: [1, 0.8, 0.4, 0],\n      filter: [\n        \"blur(0px) brightness(1)\",\n        \"blur(2px) brightness(1.2)\",\n        \"blur(var(--glass-blur-md)) brightness(0.8)\",\n        \"blur(var(--glass-blur-lg)) brightness(0.5)\",\n      ],\n      transition: {\n        duration: ANIMATION.DURATION.slower / 1000,\n        ease: easings.easeInOutCubic,\n      },\n    },\n    enter: {\n      scale: [0, 0.9, 1.1, 1],\n      opacity: [0, 0.4, 0.8, 1],\n      filter: [\n        \"blur(var(--glass-blur-lg)) brightness(0.5)\",\n        \"blur(var(--glass-blur-md)) brightness(0.8)\",\n        \"blur(2px) brightness(1.2)\",\n        \"blur(0px) brightness(1)\",\n      ],\n      transition: {\n        duration: 0.8,\n        ease: easings.easeOutExpo,\n      },\n    },\n  },\n};\n\n// Glass transition component\ninterface GlassTransitionProps {\n  children: React.ReactNode;\n  variant?: keyof typeof glassTransitionVariants;\n  duration?: number;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport function GlassTransition({\n  children,\n  variant = \"liquid\",\n  duration,\n  className,\n  style,\n}: GlassTransitionProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const transitionVariant = glassTransitionVariants[variant];\n\n  // Override duration if provided\n  const customVariant = duration\n    ? {\n        ...transitionVariant,\n        exit: {\n          ...transitionVariant.exit,\n          transition: {\n            ...transitionVariant.exit.transition,\n            duration,\n          },\n        },\n        enter: {\n          ...transitionVariant.enter,\n          transition: {\n            ...transitionVariant.enter.transition,\n            duration,\n          },\n        },\n      }\n    : transitionVariant;\n\n  return (\n    <motion.div\n      className={cn(\"glass-transition-container\", className)}\n      style={{ ...(style ?? {}) }}\n      variants={customVariant}\n      initial=\"initial\"\n      animate=\"initial\"\n      exit=\"exit\"\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Page transition manager\ninterface GlassPageTransitionProps {\n  children: React.ReactNode;\n  variant?: keyof typeof glassTransitionVariants;\n  duration?: number;\n  className?: string;\n}\n\nexport function GlassPageTransition({\n  children,\n  variant = \"morph\",\n  duration = 0.6,\n  className,\n}: GlassPageTransitionProps) {\n  return (\n    <AnimatePresence mode=\"wait\">\n      <GlassTransition\n        variant={variant}\n        duration={duration}\n        className={className}\n      >\n        {children}\n      </GlassTransition>\n    </AnimatePresence>\n  );\n}\n\n// Swipeable glass cards with transitions\ninterface SwipeableGlassCardsProps {\n  cards: Array<{\n    id: string;\n    content: React.ReactNode;\n    background?: string;\n  }>;\n  onSwipe?: (direction: \"left\" | \"right\", cardId: string) => void;\n  className?: string;\n}\n\nexport function SwipeableGlassCards({\n  cards,\n  onSwipe,\n  className,\n}: SwipeableGlassCardsProps) {\n  const [currentIndex, setCurrentIndex] = useState(0);\n  const [direction, setDirection] = useState<\"left\" | \"right\">(\"left\");\n\n  const handleDragEnd = (info: PanInfo) => {\n    const threshold = 100;\n    const velocity = info.velocity.x;\n    const offset = info.offset.x;\n\n    if (Math.abs(velocity) > 500 || Math.abs(offset) > threshold) {\n      const swipeDirection = velocity > 0 || offset > 0 ? \"right\" : \"left\";\n      setDirection(swipeDirection);\n\n      const newIndex =\n        swipeDirection === \"left\"\n          ? Math.min(currentIndex + 1, cards.length - 1)\n          : Math.max(currentIndex - 1, 0);\n\n      if (newIndex !== currentIndex) {\n        setCurrentIndex(newIndex);\n        onSwipe?.(swipeDirection, cards[currentIndex].id);\n      }\n    }\n  };\n\n  const slideVariants = {\n    enter: (direction: string) => ({\n      x: direction === \"left\" ? 300 : -300,\n      opacity: 0,\n      scale: 0.8,\n      rotateY: direction === \"left\" ? 45 : -45,\n    }),\n    center: {\n      x: 0,\n      opacity: 1,\n      scale: 1,\n      rotateY: 0,\n      transition: {\n        duration: ANIMATION.DURATION.slow / 1000,\n        ease: easings.easeOutExpo,\n      },\n    },\n    exit: (direction: string) => ({\n      x: direction === \"left\" ? -300 : 300,\n      opacity: 0,\n      scale: 0.8,\n      rotateY: direction === \"left\" ? -45 : 45,\n      transition: {\n        duration: ANIMATION.DURATION.normal / 1000,\n        ease: easings.easeInOutCubic,\n      },\n    }),\n  };\n\n  return (\n    <div className={cn(\"glass-relative glass-overflow-hidden\", className)}>\n      <AnimatePresence mode=\"wait\" custom={direction}>\n        <motion.div\n          key={currentIndex}\n          custom={direction}\n          variants={slideVariants}\n          initial=\"enter\"\n          animate=\"center\"\n          exit=\"exit\"\n          drag=\"x\"\n          dragConstraints={{ left: 0, right: 0 }}\n          dragElastic={0.3}\n          onDragEnd={(_, info) => handleDragEnd(info)}\n          className={cn(\n            \"glass-foundation-complete glass-surface-primary glass-border glass-border-primary glass-radius-xl glass-p-6 glass-cursor-grab active:glass-cursor-grabbing\"\n          )}\n          style={{\n            background:\n              cards[currentIndex].background || \"var(--glass-bg-default)\",\n          }}\n        >\n          {cards[currentIndex].content}\n        </motion.div>\n      </AnimatePresence>\n\n      {/* Indicators */}\n      <div\n        className={cn(\"glass-flex glass-justify-center glass-mt-4 glass-gap-2\")}\n      >\n        {cards.map((_, index) => (\n          <button\n            key={index}\n            onClick={() => {\n              setDirection(index > currentIndex ? \"left\" : \"right\");\n              setCurrentIndex(index);\n            }}\n            className={cn(\n              \"glass-w-2 glass-h-2 glass-radius-full glass-transition-all glass-duration-300 glass-focus glass-touch-target glass-contrast-guard\",\n              index === currentIndex\n                ? \"glass-surface-white glass-scale-125\"\n                : \"glass-surface-muted hover:glass-surface-secondary\"\n            )}\n            aria-label={`Go to slide ${index + 1}${index === currentIndex ? \" (current)\" : \"\"}`}\n          />\n        ))}\n      </div>\n    </div>\n  );\n}\n\n// Accordion with glass transitions\ninterface GlassAccordionProps {\n  items: Array<{\n    id: string;\n    title: string;\n    content: React.ReactNode;\n    icon?: React.ReactNode;\n  }>;\n  allowMultiple?: boolean;\n  className?: string;\n}\n\nexport function GlassAccordion({\n  items,\n  allowMultiple = false,\n  className,\n}: GlassAccordionProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [openItems, setOpenItems] = useState<string[]>([]);\n\n  const toggleItem = (id: string) => {\n    setOpenItems((prev: any) => {\n      if (prev.includes(id)) {\n        return prev.filter((item: any) => item !== id);\n      } else {\n        return allowMultiple ? [...prev, id] : [id];\n      }\n    });\n  };\n\n  return (\n    <div className={cn(\"glass-space-y-2\", className)}>\n      {items.map((item) => {\n        const isOpen = openItems.includes(item.id);\n\n        return (\n          <motion.div\n            key={item.id}\n            className={cn(\n              \"glass-foundation-complete glass-surface-subtle glass-border glass-border-subtle glass-radius-lg glass-overflow-hidden\"\n            )}\n            layout\n          >\n            <motion.button\n              onClick={() => toggleItem(item.id)}\n              className={cn(\n                \"glass-w-full glass-p-4 glass-text-left glass-flex glass-items-center glass-justify-between hover:glass-surface-hover glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              )}\n              whileHover={prefersReducedMotion ? {} : { scale: 1.01 }}\n              whileTap={prefersReducedMotion ? {} : { scale: 0.99 }}\n              transition={{ duration: ANIMATION.DURATION.fast / 1000 }}\n              aria-label={`${item.title} accordion item`}\n              aria-expanded={isOpen}\n            >\n              <div className={cn(\"glass-flex glass-items-center glass-gap-3\")}>\n                {item.icon}\n                <span className={cn(\"glass-font-medium glass-text-white\")}>\n                  {item.title}\n                </span>\n              </div>\n              <motion.div\n                animate={\n                  prefersReducedMotion ? {} : { rotate: isOpen ? 180 : 0 }\n                }\n                transition={\n                  prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                }\n              >\n                <svg\n                  className={cn(\"glass-w-5 glass-h-5 glass-text-secondary\")}\n                  fill=\"none\"\n                  viewBox=\"0 0 24 24\"\n                  stroke=\"currentColor\"\n                >\n                  <path\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                    strokeWidth={2}\n                    d=\"M19 9l-7 7-7-7\"\n                  />\n                </svg>\n              </motion.div>\n            </motion.button>\n\n            <AnimatePresence>\n              {isOpen && (\n                <motion.div\n                  initial={{ height: 0, opacity: 0 }}\n                  animate={\n                    prefersReducedMotion ? {} : { height: \"auto\", opacity: 1 }\n                  }\n                  exit={{ height: 0, opacity: 0 }}\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : {\n                          duration: ANIMATION.DURATION.normal / 1000,\n                          ease: easings.easeInOutCubic,\n                        }\n                  }\n                  className={cn(\"glass-border-t glass-border-subtle\")}\n                >\n                  <motion.div\n                    initial={{ y: -10 }}\n                    animate={prefersReducedMotion ? {} : { y: 0 }}\n                    exit={{ y: -10 }}\n                    className={cn(\"glass-p-4 glass-text-primary\")}\n                  >\n                    <ContrastGuard>{item.content}</ContrastGuard>\n                  </motion.div>\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n        );\n      })}\n    </div>\n  );\n}\n\n// Modal with glass transitions\ninterface GlassModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  children: React.ReactNode;\n  variant?: keyof typeof glassTransitionVariants;\n  className?: string;\n}\n\nexport function GlassModal({\n  isOpen,\n  onClose,\n  children,\n  variant = \"ripple\",\n  className,\n}: GlassModalProps) {\n  const prefersReducedMotion = useReducedMotion();\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") onClose();\n    };\n\n    if (isOpen) {\n      document.addEventListener(\"keydown\", handleEscape);\n      document.body.style.overflow = \"hidden\";\n    }\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleEscape);\n      document.body.style.overflow = \"unset\";\n    };\n  }, [isOpen, onClose]);\n\n  return (\n    <AnimatePresence>\n      {isOpen && (\n        <motion.div\n          initial={{ opacity: 0 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1 }}\n          exit={{ opacity: 0 }}\n          className={cn(\n            \"glass-fixed glass-inset-0 glass-z-50 glass-flex glass-items-center glass-justify-center glass-p-4\"\n          )}\n          onClick={onClose}\n          role=\"dialog\"\n          aria-label=\"Modal dialog\"\n          aria-modal=\"true\"\n        >\n          {/* Backdrop */}\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className={cn(\"glass-absolute glass-inset-0 glass-surface-overlay\")}\n            aria-hidden=\"true\"\n          />\n\n          {/* Modal Content */}\n          <GlassTransition\n            variant={variant}\n            className={cn(\n              \"glass-relative glass-max-w-lg glass-w-full glass-max-h-90vh glass-overflow-auto\",\n              \"glass-foundation-complete glass-surface-primary glass-border glass-border-primary glass-radius-xl\",\n              className\n            )}\n          >\n            <div onClick={(e) => e.stopPropagation()}>{children}</div>\n          </GlassTransition>\n        </motion.div>\n      )}\n    </AnimatePresence>\n  );\n}\n\n// Tab navigation with glass transitions\ninterface GlassTabsProps {\n  tabs?: Array<{\n    id: string;\n    label: string;\n    content: React.ReactNode;\n    icon?: React.ReactNode;\n  }>;\n  children?: React.ReactNode;\n  value?: string;\n  onValueChange?: (value: string) => void;\n  defaultTab?: string;\n  orientation?: \"horizontal\" | \"vertical\";\n  className?: string;\n  onTabChange?: (tabId: string) => void;\n}\n\nexport function GlassTabs({\n  tabs,\n  defaultTab,\n  orientation = \"horizontal\",\n  className,\n  onTabChange,\n}: GlassTabsProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [activeTab, setActiveTab] = useState(defaultTab || tabs?.[0]?.id);\n\n  const handleTabChange = (tabId: string) => {\n    setActiveTab(tabId);\n    onTabChange?.(tabId);\n  };\n\n  return (\n    <div\n      className={cn(\n        \"glass-tabs\",\n        orientation === \"vertical\"\n          ? \"glass-flex glass-gap-6\"\n          : \"glass-space-y-4\",\n        className\n      )}\n    >\n      {/* Tab List */}\n      <div\n        className={cn(\n          \"glass-foundation-complete glass-surface-subtle glass-border glass-border-subtle glass-radius-lg glass-p-1\",\n          orientation === \"vertical\"\n            ? \"glass-flex-col glass-w-48\"\n            : \"glass-flex\",\n          \"glass-relative\"\n        )}\n      >\n        {tabs?.map((tab) => (\n          <button\n            key={tab.id}\n            onClick={() => handleTabChange(tab.id)}\n            className={cn(\n              \"glass-relative glass-px-4 glass-py-2 glass-radius-md glass-transition-all glass-duration-300 glass-flex glass-items-center glass-gap-2 glass-focus glass-touch-target glass-contrast-guard\",\n              \"glass-text-sm glass-font-medium glass-whitespace-nowrap\",\n              activeTab === tab.id\n                ? \"glass-text-white glass-surface-subtle\"\n                : \"glass-text-secondary hover:glass-text-white hover:glass-surface-hover\"\n            )}\n          >\n            {tab.icon}\n            <ContrastGuard>\n              <span>{tab.label}</span>\n            </ContrastGuard>\n          </button>\n        ))}\n      </div>\n\n      {/* Tab Content */}\n      <div\n        className={cn(\n          \"glass-flex-1 glass-foundation-complete glass-surface-subtle glass-border glass-border-subtle glass-radius-lg\",\n          \"glass-min-h-200\"\n        )}\n        role=\"tabpanel\"\n        aria-labelledby={`tab-${activeTab}`}\n      >\n        <AnimatePresence mode=\"wait\">\n          <motion.div\n            key={activeTab}\n            initial={{ opacity: 0, y: 20 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: -20 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: ANIMATION.DURATION.normal / 1000,\n                    ease: easings.easeOutExpo,\n                  }\n            }\n            className={cn(\"glass-p-6\")}\n          >\n            {tabs?.find((tab) => tab.id === activeTab)?.content}\n          </motion.div>\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n\ninterface GlassTransitionsProps extends React.HTMLAttributes<HTMLDivElement> {\n  variant?: keyof typeof glassTransitionVariants;\n  children?: React.ReactNode;\n}\n\nconst demoCards = [\n  {\n    id: \"insight\",\n    content: (\n      <ContrastGuard>\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n            Insight\n          </p>\n          <h3 className=\"glass-text-xl glass-text-primary glass-font-semibold\">\n            Fluid page transitions\n          </h3>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            Use material-aware easing to keep movement intuitive.\n          </p>\n        </div>\n      </ContrastGuard>\n    ),\n  },\n  {\n    id: \"motion\",\n    content: (\n      <ContrastGuard>\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n            Motion\n          </p>\n          <h3 className=\"glass-text-xl glass-text-primary glass-font-semibold\">\n            Directional swipes\n          </h3>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            Cards respond to drag gestures with depth and blur.\n          </p>\n        </div>\n      </ContrastGuard>\n    ),\n  },\n  {\n    id: \"layers\",\n    content: (\n      <ContrastGuard>\n        <div>\n          <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n            Layers\n          </p>\n          <h3 className=\"glass-text-xl glass-text-primary glass-font-semibold\">\n            Frosted overlays\n          </h3>\n          <p className=\"glass-text-sm glass-text-secondary\">\n            Blend regions using the glass transition variants.\n          </p>\n        </div>\n      </ContrastGuard>\n    ),\n  },\n];\n\nconst GlassTransitionsComponent: React.FC<GlassTransitionsProps> = ({\n  variant = \"liquid\",\n  className,\n  children,\n  ...rest\n}) => {\n  const [panelIndex, setPanelIndex] = useState(0);\n  const panels = [\n    {\n      id: \"panel-0\",\n      title: \"Glass dashboards\",\n      description: \"Morph between layouts while preserving context.\",\n    },\n    {\n      id: \"panel-1\",\n      title: \"Immersive nav\",\n      description: \"Page transitions ripple out from focal points.\",\n    },\n  ];\n\n  const nextPanel = () => {\n    setPanelIndex((prev) => (prev + 1) % panels.length);\n  };\n\n  return (\n    <div\n      className={cn(\"glass-transitions-demo glass-space-y-6\", className)}\n      {...rest}\n    >\n      {children ?? (\n        <>\n          <GlassPageTransition variant={variant}>\n            <motion.div\n              key={panels[panelIndex].id}\n              className=\"glass-surface-primary glass-radius-3xl glass-p-8 glass-border glass-border-white/10\"\n            >\n              <ContrastGuard>\n                <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide glass-mb-2\">\n                  {panels[panelIndex].title}\n                </p>\n                <h2 className=\"glass-text-2xl glass-text-primary glass-font-semibold\">\n                  {panels[panelIndex].description}\n                </h2>\n                <button\n                  type=\"button\"\n                  onClick={nextPanel}\n                  className=\"glass-mt-6 glass-text-sm glass-text-secondary glass-focus glass-touch-target\"\n                  aria-label=\"Cycle to next transition panel\"\n                >\n                  Cycle transition\n                </button>\n              </ContrastGuard>\n            </motion.div>\n          </GlassPageTransition>\n          <SwipeableGlassCards cards={demoCards} />\n        </>\n      )}\n    </div>\n  );\n};\n\nexport const GlassTransitions = Object.assign(GlassTransitionsComponent, {\n  GlassTransition,\n  GlassPageTransition,\n  SwipeableGlassCards,\n  GlassAccordion,\n  GlassModal,\n  GlassTabs,\n  glassTransitionVariants,\n});\n\nexport default GlassTransitions;\n", "\"use client\";\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n/**\n * Advanced Animation Easing Functions\n * Provides sophisticated easing curves for glassmorphism transitions\n */\n\n// Cubic bezier easing functions for advanced animations\nexport const easings = {\n  // Exponential easing functions\n  easeOutExpo: (t: number): number => {\n    return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n  },\n\n  easeInExpo: (t: number): number => {\n    return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n  },\n\n  easeInOutExpo: (t: number): number => {\n    if (t === 0) return 0;\n    if (t === 1) return 1;\n    if (t < 0.5) return Math.pow(2, 20 * t - 10) / 2;\n    return (2 - Math.pow(2, -20 * t + 10)) / 2;\n  },\n\n  // Back easing functions\n  easeOutBack: (t: number): number => {\n    const c1 = 1.70158;\n    const c3 = c1 + 1;\n    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n  },\n\n  easeInBack: (t: number): number => {\n    const c1 = 1.70158;\n    const c3 = c1 + 1;\n    return c3 * t * t * t - c1 * t * t;\n  },\n\n  easeInOutBack: (t: number): number => {\n    const c1 = 1.70158;\n    const c2 = c1 * 1.525;\n\n    if (t < 0.5) {\n      return (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2;\n    } else {\n      return (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;\n    }\n  },\n\n  // Cubic easing functions\n  easeInCubic: (t: number): number => {\n    return t * t * t;\n  },\n\n  easeOutCubic: (t: number): number => {\n    return 1 - Math.pow(1 - t, 3);\n  },\n\n  easeInOutCubic: (t: number): number => {\n    if (t < 0.5) {\n      return 4 * t * t * t;\n    } else {\n      return 1 - Math.pow(-2 * t + 2, 3) / 2;\n    }\n  },\n\n  // Elastic easing functions\n  easeOutElastic: (t: number): number => {\n    const c4 = (2 * Math.PI) / 3;\n\n    if (t === 0) return 0;\n    if (t === 1) return 1;\n    return Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n  },\n\n  easeInElastic: (t: number): number => {\n    const c4 = (2 * Math.PI) / 3;\n\n    if (t === 0) return 0;\n    if (t === 1) return 1;\n    return -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);\n  },\n\n  // Bounce easing\n  easeOutBounce: (t: number): number => {\n    const n1 = 7.5625;\n    const d1 = 2.75;\n\n    if (t < 1 / d1) {\n      return n1 * t * t;\n    } else if (t < 2 / d1) {\n      return n1 * (t -= 1.5 / d1) * t + 0.75;\n    } else if (t < 2.5 / d1) {\n      return n1 * (t -= 2.25 / d1) * t + 0.9375;\n    } else {\n      return n1 * (t -= 2.625 / d1) * t + 0.984375;\n    }\n  },\n\n  // Smooth step functions\n  smoothStep: (t: number): number => {\n    return t * t * (3 - 2 * t);\n  },\n\n  smootherStep: (t: number): number => {\n    return t * t * t * (t * (6 * t - 15) + 10);\n  },\n\n  // Glass-specific easing for material physics\n  glassEase: (t: number): number => {\n    // Custom easing that mimics glass material behavior\n    // Starts slow, accelerates, then gently settles\n    if (t < 0.3) {\n      return t * t * 3.333; // Ease in\n    } else if (t < 0.7) {\n      return 0.3 + (t - 0.3) * 1.428; // Linear acceleration\n    } else {\n      return 0.7 + (t - 0.7) * (t - 0.7) * 3.333; // Ease out\n    }\n  },\n\n  // Shatter easing for glass break effects\n  shatterEase: (t: number): number => {\n    // Exponential decay with bounce for shattering glass\n    const decay = Math.pow(1 - t, 2);\n    const bounce = Math.sin(t * Math.PI * 4) * Math.pow(1 - t, 0.5) * 0.1;\n    return decay + bounce;\n  },\n};\n\n// Glass transition presets using the easing functions\nexport const glassTransitionPresets = {\n  subtle: {\n    duration: 0.3,\n    ease: easings.easeOutCubic,\n  },\n  smooth: {\n    duration: 0.5,\n    ease: easings.easeInOutCubic,\n  },\n  dramatic: {\n    duration: 0.8,\n    ease: easings.easeOutBack,\n  },\n  glass: {\n    duration: 0.6,\n    ease: easings.glassEase,\n  },\n  shatter: {\n    duration: 1.2,\n    ease: easings.shatterEase,\n  },\n};\n\nexport interface AdvancedAnimationsProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  sampleCount?: number;\n  children?: React.ReactNode;\n}\n\nconst easingSampleKeys = [\n  \"subtle\",\n  \"smooth\",\n  \"dramatic\",\n  \"glass\",\n  \"shatter\",\n] as const;\n\nexport const AdvancedAnimations: React.FC<AdvancedAnimationsProps> = ({\n  sampleCount = 4,\n  className,\n  children,\n  ...rest\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const keys = easingSampleKeys.slice(0, Math.max(1, sampleCount));\n\n  return (\n    <div\n      className={cn(\"glass-advanced-animations glass-space-y-6\", className)}\n      {...rest}\n    >\n      {children ?? (\n        <div className=\"glass-grid sm:glass-grid-cols-2 glass-gap-4\">\n          {keys.map((key) => {\n            const preset = glassTransitionPresets[key];\n            return (\n              <motion.div\n                key={key}\n                className=\"glass-surface-primary glass-radius-2xl glass-p-6 glass-space-y-3 glass-border glass-border-white/10\"\n                animate={prefersReducedMotion ? {} : { y: [0, -8, 0] }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        repeat: Infinity,\n                        duration: preset.duration,\n                        ease: preset.ease as any,\n                      }\n                }\n              >\n                <ContrastGuard>\n                  <p className=\"glass-text-xs glass-text-tertiary glass-uppercase glass-tracking-wide\">\n                    {key}\n                  </p>\n                  <h3 className=\"glass-text-xl glass-text-primary glass-font-semibold\">\n                    {key === \"glass\" ? \"Material physics\" : \"Easing preview\"}\n                  </h3>\n                </ContrastGuard>\n                <div className=\"glass-h-2 glass-radius-full glass-surface-subtle\">\n                  <motion.div\n                    className=\"glass-h-full glass-radius-full glass-gradient-primary\"\n                    animate={\n                      prefersReducedMotion\n                        ? {}\n                        : { width: [\"10%\", \"90%\", \"10%\"] }\n                    }\n                    transition={\n                      prefersReducedMotion\n                        ? { duration: 0 }\n                        : {\n                            repeat: Infinity,\n                            duration: preset.duration,\n                            ease: preset.ease as any,\n                          }\n                    }\n                  />\n                </div>\n              </motion.div>\n            );\n          })}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default AdvancedAnimations;\n", "\"use client\";\nimport React from \"react\";\nimport {\n  createContext,\n  ReactNode,\n  useContext,\n  useEffect,\n  useState,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface AccessibilitySettings {\n  focusIndicators: boolean;\n  keyboardNavigation: boolean;\n  screenReaderOptimized: boolean;\n  highContrast: boolean;\n  reducedMotion: boolean;\n  largeText: boolean;\n  colorBlindness: string;\n  voiceCommands: boolean;\n  motionControls: boolean;\n}\n\ninterface AccessibilityContextType {\n  settings: AccessibilitySettings;\n  updateSettings: (newSettings: Partial<AccessibilitySettings>) => void;\n  resetToDefaults: () => void;\n  detectSystemPreferences: () => void;\n}\n\nconst defaultSettings: AccessibilitySettings = {\n  focusIndicators: true,\n  keyboardNavigation: true,\n  screenReaderOptimized: true,\n  highContrast: false,\n  reducedMotion: false,\n  largeText: false,\n  colorBlindness: \"none\",\n  voiceCommands: false,\n  motionControls: false,\n};\n\n// Create context\nconst AccessibilityContext = createContext<\n  AccessibilityContextType | undefined\n>(undefined);\n\nconst defaultAccessibilityContext: AccessibilityContextType = {\n  settings: defaultSettings,\n  updateSettings: () => {},\n  resetToDefaults: () => {},\n  detectSystemPreferences: () => {},\n};\n\ninterface AccessibilityProviderProps {\n  children: ReactNode;\n  initialSettings?: Partial<AccessibilitySettings>;\n  storageKey?: string;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\nexport function AccessibilityProvider({\n  children,\n  initialSettings = {},\n  storageKey = \"aura-glass-accessibility-settings\",\n  className,\n  \"data-testid\": dataTestId,\n}: AccessibilityProviderProps) {\n  // Merge default settings with initial settings\n  const [settings, setSettings] = useState<AccessibilitySettings>({\n    ...defaultSettings,\n    ...initialSettings,\n  });\n\n  // Load settings from localStorage on mount\n  useEffect(() => {\n    try {\n      const saved = localStorage.getItem(storageKey);\n      if (saved) {\n        const parsedSettings = JSON.parse(saved);\n        setSettings((prev: any) => ({ ...prev, ...parsedSettings }));\n      }\n    } catch {\n      setSettings((prev: any) => ({ ...defaultSettings, ...prev }));\n    }\n  }, [storageKey]);\n\n  // Save settings to localStorage when they change\n  useEffect(() => {\n    try {\n      localStorage.setItem(storageKey, JSON.stringify(settings));\n    } catch {\n      // Ignore storage failures; settings remain active in memory.\n    }\n  }, [settings, storageKey]);\n\n  // Detect system preferences\n  const detectSystemPreferences = () => {\n    const mediaQueryReducedMotion = window.matchMedia(\n      \"(prefers-reduced-motion: reduce)\"\n    );\n    const mediaQueryHighContrast = window.matchMedia(\n      \"(prefers-contrast: high)\"\n    );\n    const mediaQueryColorScheme = window.matchMedia(\n      \"(prefers-color-scheme: dark)\"\n    );\n\n    const newSettings: Partial<AccessibilitySettings> = {};\n\n    if (mediaQueryReducedMotion.matches) {\n      newSettings.reducedMotion = true;\n    }\n\n    if (mediaQueryHighContrast.matches) {\n      newSettings.highContrast = true;\n    }\n\n    // Update settings with detected preferences\n    if (Object.keys(newSettings).length > 0) {\n      updateSettings(newSettings);\n    }\n\n    // Listen for changes in system preferences\n    const handlePreferenceChange = (event: MediaQueryListEvent) => {\n      if (event.media === \"(prefers-reduced-motion: reduce)\") {\n        updateSettings({ reducedMotion: event.matches });\n      } else if (event.media === \"(prefers-contrast: high)\") {\n        updateSettings({ highContrast: event.matches });\n      }\n    };\n\n    mediaQueryReducedMotion.addEventListener(\"change\", handlePreferenceChange);\n    mediaQueryHighContrast.addEventListener(\"change\", handlePreferenceChange);\n\n    return () => {\n      mediaQueryReducedMotion.removeEventListener(\n        \"change\",\n        handlePreferenceChange\n      );\n      mediaQueryHighContrast.removeEventListener(\n        \"change\",\n        handlePreferenceChange\n      );\n    };\n  };\n\n  // Update settings\n  const updateSettings = (newSettings: Partial<AccessibilitySettings>) => {\n    setSettings((prev: any) => ({ ...prev, ...newSettings }));\n  };\n\n  // Reset to defaults\n  const resetToDefaults = () => {\n    setSettings(defaultSettings);\n  };\n\n  // Apply settings to document\n  useEffect(() => {\n    const root = document.documentElement;\n\n    // Apply reduced motion\n    if (settings.reducedMotion) {\n      root.style.setProperty(\n        \"--animation-duration\",\n        `${ANIMATION.DURATION.instant}ms`\n      );\n      root.style.setProperty(\n        \"--animation-delay\",\n        `${ANIMATION.DURATION.instant}ms`\n      );\n    } else {\n      root.style.removeProperty(\"--animation-duration\");\n      root.style.removeProperty(\"--animation-delay\");\n    }\n\n    // Apply high contrast\n    if (settings.highContrast) {\n      root.classList.add(\"high-contrast\");\n    } else {\n      root.classList.remove(\"high-contrast\");\n    }\n\n    // Apply large text\n    if (settings.largeText) {\n      root.classList.add(\"large-text\");\n    } else {\n      root.classList.remove(\"large-text\");\n    }\n\n    // Apply color blindness simulation\n    root.setAttribute(\"data-color-blindness\", settings.colorBlindness);\n  }, [settings]);\n\n  const contextValue: AccessibilityContextType = {\n    settings,\n    updateSettings,\n    resetToDefaults,\n    detectSystemPreferences,\n  };\n\n  return (\n    <AccessibilityContext.Provider value={contextValue}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </AccessibilityContext.Provider>\n  );\n}\n\n// Hook to use accessibility context\nexport function useAccessibility() {\n  const context = useContext(AccessibilityContext);\n  return context ?? defaultAccessibilityContext;\n}\n\nexport default AccessibilityProvider;\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useAccessibility } from \"./AccessibilityProvider\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"./ContrastGuard\";\nimport \"./GlassFocusIndicators.css\";\n\ninterface FocusRingProps {\n  element: HTMLElement;\n  variant?: \"default\" | \"interactive\" | \"navigation\" | \"form\";\n}\n\n// Enhanced focus ring component\nfunction FocusRing({ element, variant = \"default\" }: FocusRingProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [position, setPosition] = useState({ x: 0, y: 0, width: 0, height: 0 });\n  const [isVisible, setIsVisible] = useState(true);\n\n  useEffect(() => {\n    if (!element) return;\n\n    const updatePosition = () => {\n      const rect = element.getBoundingClientRect();\n      setPosition({\n        x: rect.left + window.scrollX,\n        y: rect.top + window.scrollY,\n        width: rect.width,\n        height: rect.height,\n      });\n    };\n\n    updatePosition();\n\n    const observer = new ResizeObserver(updatePosition);\n    observer.observe(element);\n\n    window.addEventListener(\"scroll\", updatePosition);\n    window.addEventListener(\"resize\", updatePosition);\n\n    return () => {\n      observer.disconnect();\n      window.removeEventListener(\"scroll\", updatePosition);\n      window.removeEventListener(\"resize\", updatePosition);\n    };\n  }, [element]);\n\n  const styles = (() => {\n    const base = {\n      ring: \"ring-offset-2 ring-offset-slate-900\",\n      background: \"bg-blue-400/8\",\n      shadowVar:\n        \"var(--glass-focus-shadow-primary, 0 0 15px color-mix(in srgb, hsl(var(--glass-color-primary)) 50%, transparent))\",\n    };\n\n    if (variant === \"interactive\") {\n      return {\n        ring: `${base.ring} ring-4 ring-blue-400/60`,\n        background: \"bg-blue-400/10\",\n        shadowVar:\n          \"var(--glass-focus-shadow-interactive, 0 0 20px color-mix(in srgb, hsl(var(--glass-color-primary)) 60%, transparent))\",\n      };\n    }\n    if (variant === \"navigation\") {\n      return {\n        ring: `${base.ring} ring-3 ring-purple-400/60`,\n        background: \"bg-purple-400/10\",\n        shadowVar:\n          \"var(--glass-focus-shadow-navigation, 0 0 15px color-mix(in srgb, var(--glass-color-secondary) 60%, transparent))\",\n      };\n    }\n    if (variant === \"form\") {\n      return {\n        ring: `${base.ring} ring-3 ring-green-400/60`,\n        background: \"bg-green-400/10\",\n        shadowVar:\n          \"var(--glass-focus-shadow-form, 0 0 15px color-mix(in srgb, hsl(var(--glass-color-success)) 60%, transparent))\",\n      };\n    }\n    return {\n      ring: `${base.ring} ring-3 ring-blue-400/60`,\n      background: base.background,\n      shadowVar: base.shadowVar,\n    };\n  })();\n\n  return (\n    <motion.div\n      className={cn(\n        \"glass-position-fixed glass-pointer-events-none glass-z-50 glass-radius-lg\",\n        styles.ring,\n        styles.background\n      )}\n      style={{\n        left: position.x - 4,\n        top: position.y - 4,\n        width: position.width + 8,\n        height: position.height + 8,\n        boxShadow: styles.shadowVar,\n      }}\n      initial={{ opacity: 0, scale: 0.8 }}\n      animate={\n        prefersReducedMotion ? {} : { opacity: isVisible ? 1 : 0, scale: 1 }\n      }\n      exit={{ opacity: 0, scale: 0.8 }}\n      transition={{\n        type: \"spring\",\n        stiffness: ANIMATION.SPRING.stiff.stiffness,\n        damping: ANIMATION.SPRING.stiff.damping,\n        opacity: { duration: ANIMATION.DURATION.fast / 1000 },\n      }}\n    >\n      {/* Animated border */}\n      <motion.div\n        className={cn(\n          \"glass-position-absolute glass-inset-0 glass-radius-lg glass-border-2 glass-border-transparent\"\n        )}\n        style={{\n          // token-lint-ignore: animated gradient uses brand accent colors derived from theme\n          background: `linear-gradient(45deg, ${variant === \"interactive\" ? \"var(--glass-color-primary-light)\" : variant === \"navigation\" ? \"var(--glass-color-secondary)\" : variant === \"form\" ? \"hsl(var(--glass-color-success))\" : \"var(--glass-color-primary-light)\"}, transparent, ${variant === \"interactive\" ? \"var(--glass-color-primary-light)\" : variant === \"navigation\" ? \"var(--glass-color-secondary)\" : variant === \"form\" ? \"hsl(var(--glass-color-success))\" : \"var(--glass-color-primary-light)\"})`,\n          backgroundSize: \"200% 200%\",\n        }}\n        animate={\n          prefersReducedMotion\n            ? {}\n            : { backgroundPosition: [\"0% 0%\", \"100% 100%\", \"0% 0%\"] }\n        }\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : {\n                duration: ANIMATION.DURATION.slower / 1000,\n                repeat: Infinity,\n                ease: \"linear\",\n              }\n        }\n      />\n\n      {/* Corner highlights */}\n      {[\"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\"].map(\n        (corner) => (\n          <motion.div\n            key={corner}\n            className={cn(\n              \"glass-position-absolute glass-w-2 glass-h-2 glass-radius-full\",\n              variant === \"interactive\"\n                ? \"glass-surface-info\"\n                : variant === \"navigation\"\n                  ? \"glass-surface-accent\"\n                  : variant === \"form\"\n                    ? \"bg-green-400\"\n                    : \"bg-blue-400\",\n              corner === \"top-left\"\n                ? \"-top-1 -left-1\"\n                : corner === \"top-right\"\n                  ? \"-top-1 -right-1\"\n                  : corner === \"bottom-left\"\n                    ? \"-bottom-1 -left-1\"\n                    : \"-bottom-1 -right-1\"\n            )}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    scale: [1, 1.5, 1],\n                    opacity: [0.6, 1, 0.6],\n                  }\n            }\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: ANIMATION.DURATION.slow / 1000,\n                    repeat: Infinity,\n                    delay:\n                      corner === \"top-right\"\n                        ? ANIMATION.DURATION.fast / 1000\n                        : corner === \"bottom-right\"\n                          ? (ANIMATION.DURATION.fast * 2) / 1000\n                          : corner === \"bottom-left\"\n                            ? ANIMATION.DURATION.normal / 1000\n                            : 0,\n                  }\n            }\n          />\n        )\n      )}\n    </motion.div>\n  );\n}\n\n// Main focus indicator system\nexport function GlassFocusIndicators() {\n  const { settings } = useAccessibility();\n  const [focusedElement, setFocusedElement] = useState<HTMLElement | null>(\n    null\n  );\n  const [focusVariant, setFocusVariant] = useState<\n    \"default\" | \"interactive\" | \"navigation\" | \"form\"\n  >(\"default\");\n  const lastFocusedRef = useRef<HTMLElement | null>(null);\n\n  useEffect(() => {\n    if (!settings.focusIndicators) return;\n\n    const handleFocus = (event: FocusEvent) => {\n      const target = event.target as HTMLElement;\n      if (!target || target === document.body) return;\n\n      // Determine focus variant based on element type and attributes\n      let variant: \"default\" | \"interactive\" | \"navigation\" | \"form\" =\n        \"default\";\n\n      if (\n        target.matches(\n          'button, [role=\"button\"], [role=\"menuitem\"], [role=\"tab\"]'\n        )\n      ) {\n        variant = \"interactive\";\n      } else if (\n        target.matches('a, [role=\"link\"], nav a, [role=\"navigation\"] *')\n      ) {\n        variant = \"navigation\";\n      } else if (\n        target.matches(\n          'input, textarea, select, [role=\"textbox\"], [role=\"combobox\"], [role=\"listbox\"]'\n        )\n      ) {\n        variant = \"form\";\n      }\n\n      setFocusedElement(target);\n      setFocusVariant(variant);\n      lastFocusedRef.current = target;\n\n      // Announce focus change to screen readers\n      if (\n        settings.screenReaderOptimized &&\n        (window as any).announceToScreenReader\n      ) {\n        const elementType = target.tagName.toLowerCase();\n        const elementText =\n          target.textContent ||\n          target.getAttribute(\"aria-label\") ||\n          target.getAttribute(\"aria-labelledby\") ||\n          target.getAttribute(\"title\") ||\n          \"\";\n        const roleText = target.getAttribute(\"role\") || elementType;\n\n        (window as any).announceToScreenReader(\n          `Focused on ${roleText}${elementText ? \": \" + elementText.slice(0, 50) : \"\"}`\n        );\n      }\n    };\n\n    const handleBlur = (event: FocusEvent) => {\n      // Small delay to prevent flicker when focus moves between elements\n      setTimeout(() => {\n        if (\n          document.activeElement === document.body ||\n          !document.activeElement\n        ) {\n          setFocusedElement(null);\n        }\n      }, ANIMATION.DURATION.fast / 15);\n    };\n\n    // Enhanced keyboard navigation\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (!settings.keyboardNavigation) return;\n\n      const { key, ctrlKey, altKey, shiftKey } = event;\n\n      // Skip navigation (Alt + S)\n      if (altKey && key === \"s\") {\n        event.preventDefault();\n        const mainContent =\n          document.getElementById(\"main-content\") ||\n          document.querySelector(\"main\");\n        if (mainContent) {\n          (mainContent as HTMLElement).focus();\n          mainContent.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        }\n      }\n\n      // Focus landmarks (Alt + L)\n      if (altKey && key === \"l\") {\n        event.preventDefault();\n        const landmarks = document.querySelectorAll(\n          '[role=\"banner\"], [role=\"navigation\"], [role=\"main\"], [role=\"contentinfo\"], header, nav, main, footer'\n        );\n        if (landmarks.length > 0) {\n          const currentIndex = Array.from(landmarks).findIndex(\n            (el) => el === document.activeElement\n          );\n          const nextIndex = (currentIndex + 1) % landmarks.length;\n          (landmarks[nextIndex] as HTMLElement).focus();\n        }\n      }\n\n      // Focus headings (Alt + H)\n      if (altKey && key === \"h\") {\n        event.preventDefault();\n        const headings = document.querySelectorAll(\"h1, h2, h3, h4, h5, h6\");\n        if (headings.length > 0) {\n          const currentIndex = Array.from(headings).findIndex(\n            (el) => el === document.activeElement\n          );\n          const nextIndex = (currentIndex + 1) % headings.length;\n          (headings[nextIndex] as HTMLElement).focus();\n        }\n      }\n\n      // Escape key to blur current element\n      if (\n        key === \"Escape\" &&\n        focusedElement &&\n        focusedElement !== document.body\n      ) {\n        focusedElement.blur();\n        (document.body as HTMLElement).focus();\n      }\n    };\n\n    // Add event listeners\n    document.addEventListener(\"focusin\", handleFocus, true);\n    document.addEventListener(\"focusout\", handleBlur, true);\n    document.addEventListener(\"keydown\", handleKeyDown);\n\n    // Focus visible elements on page load\n    const autoFocusElement = document.querySelector(\n      \"[autofocus]\"\n    ) as HTMLElement;\n    if (autoFocusElement) {\n      setTimeout(() => autoFocusElement.focus(), ANIMATION.DURATION.fast);\n    }\n\n    return () => {\n      document.removeEventListener(\"focusin\", handleFocus, true);\n      document.removeEventListener(\"focusout\", handleBlur, true);\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [\n    settings.focusIndicators,\n    settings.keyboardNavigation,\n    settings.screenReaderOptimized,\n    focusedElement,\n  ]);\n\n  // Add focus trap for modals and overlays\n  useEffect(() => {\n    const handleFocusTrap = () => {\n      const modals = document.querySelectorAll(\n        '[role=\"dialog\"], [aria-modal=\"true\"], .modal, .overlay'\n      );\n\n      modals.forEach((modal: any) => {\n        const focusableElements = modal.querySelectorAll(\n          'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), [role=\"button\"], [role=\"link\"]'\n        );\n\n        if (focusableElements.length === 0) return;\n\n        const firstElement = focusableElements[0] as HTMLElement;\n        const lastElement = focusableElements[\n          focusableElements.length - 1\n        ] as HTMLElement;\n\n        const handleTabKey = (event: KeyboardEvent) => {\n          if (event.key !== \"Tab\") return;\n\n          if (event.shiftKey) {\n            if (document.activeElement === firstElement) {\n              event.preventDefault();\n              lastElement.focus();\n            }\n          } else {\n            if (document.activeElement === lastElement) {\n              event.preventDefault();\n              firstElement.focus();\n            }\n          }\n        };\n\n        modal.addEventListener(\"keydown\", handleTabKey as EventListener);\n      });\n    };\n\n    if (settings.keyboardNavigation) {\n      handleFocusTrap();\n    }\n  }, [settings.keyboardNavigation, focusedElement]);\n\n  if (!settings.focusIndicators || !focusedElement) {\n    return null;\n  }\n\n  return (\n    <AnimatePresence>\n      <FocusRing element={focusedElement} variant={focusVariant} />\n    </AnimatePresence>\n  );\n}\n\n// Skip links component\nexport function SkipLinks() {\n  const { settings } = useAccessibility();\n\n  if (!settings.keyboardNavigation) return null;\n\n  const skipLinks = [\n    { href: \"#main-content\", text: \"Skip to main content\" },\n    { href: \"#navigation\", text: \"Skip to navigation\" },\n    { href: \"#footer\", text: \"Skip to footer\" },\n  ];\n\n  return (\n    <div className=\"skip-links\">\n      {skipLinks.map((link) => (\n        <a\n          key={link.href}\n          href={link.href}\n          className={cn(\n            \"skip-link glass-sr-only focus:glass-not-sr-only focus:glass-position-absolute\",\n            \"focus:glass-top-4 focus:glass-left-4 focus:glass-z-50 focus:glass-px-4 focus:glass-py-2\",\n            \"focus:glass-surface-info focus:glass-text-primary focus:glass-radius-lg focus:glass-shadow-lg focus:glass-no-underline\"\n          )}\n          onFocus={() => {\n            if ((window as any).announceToScreenReader) {\n              (window as any).announceToScreenReader(`Skip link: ${link.text}`);\n            }\n          }}\n        >\n          {link.text}\n        </a>\n      ))}\n    </div>\n  );\n}\n\n// Landmark announcer for screen readers\nexport function LandmarkAnnouncer() {\n  const { settings } = useAccessibility();\n\n  useEffect(() => {\n    if (!settings.screenReaderOptimized) return;\n\n    // Auto-announce page landmarks on load\n    const announceLandmarks = () => {\n      const landmarks = document.querySelectorAll(\n        '[role=\"banner\"], [role=\"navigation\"], [role=\"main\"], [role=\"contentinfo\"], header, nav, main, footer'\n      );\n\n      if (landmarks.length > 0 && (window as any).announceToScreenReader) {\n        const landmarksList = Array.from(landmarks)\n          .map((el: any) => {\n            const role = el.getAttribute(\"role\") || el.tagName.toLowerCase();\n            const label =\n              el.getAttribute(\"aria-label\") ||\n              el.getAttribute(\"aria-labelledby\") ||\n              \"\";\n            return label ? `${role}: ${label}` : role;\n          })\n          .join(\", \");\n\n        setTimeout(() => {\n          (window as any).announceToScreenReader(\n            `Page landmarks: ${landmarksList}`\n          );\n        }, ANIMATION.DURATION.slower * 1.5);\n      }\n    };\n\n    // Announce after page load\n    if (document.readyState === \"complete\") {\n      announceLandmarks();\n    } else {\n      window.addEventListener(\"load\", announceLandmarks);\n      return () => window.removeEventListener(\"load\", announceLandmarks);\n    }\n  }, [settings.screenReaderOptimized]);\n\n  return null;\n}\n\n// Enhanced keyboard shortcuts helper\nexport function KeyboardShortcutsHelper() {\n  const prefersReducedMotion = useReducedMotion();\n  const { settings } = useAccessibility();\n  const [showHelp, setShowHelp] = useState(false);\n\n  useEffect(() => {\n    if (!settings.keyboardNavigation) return;\n\n    const handleHelpToggle = (event: KeyboardEvent) => {\n      if (event.altKey && event.key === \"?\") {\n        event.preventDefault();\n        setShowHelp(!showHelp);\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleHelpToggle);\n    return () => document.removeEventListener(\"keydown\", handleHelpToggle);\n  }, [settings.keyboardNavigation, showHelp]);\n\n  const shortcuts = [\n    { key: \"Alt + S\", description: \"Skip to main content\" },\n    { key: \"Alt + L\", description: \"Navigate between landmarks\" },\n    { key: \"Alt + H\", description: \"Navigate between headings\" },\n    { key: \"Alt + ?\", description: \"Toggle this help\" },\n    { key: \"Escape\", description: \"Close current focus/modal\" },\n    { key: \"Tab\", description: \"Navigate forward\" },\n    { key: \"Shift + Tab\", description: \"Navigate backward\" },\n    { key: \"Enter/Space\", description: \"Activate focused element\" },\n  ];\n\n  if (!settings.keyboardNavigation) return null;\n\n  return (\n    <AnimatePresence>\n      {showHelp && (\n        <motion.div\n          className=\"glass-fixed glass-bottom-4 glass-right-4 glass-z-50 glass-max-w-sm\"\n          initial={{ opacity: 0, y: 20, scale: 0.9 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1, y: 0, scale: 1 }}\n          exit={{ opacity: 0, y: 20, scale: 0.9 }}\n        >\n          <div\n            className={cn(\n              \"glass-foundation-complete glass-surface-overlay glass-border-subtle glass-radius-xl glass-p-4 glass-shadow-2xl\"\n            )}\n          >\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3\">\n              <ContrastGuard>\n                <h3 className={cn(\"glass-font-semibold glass-text-primary\")}>\n                  Keyboard Shortcuts\n                </h3>\n              </ContrastGuard>\n              <button\n                onClick={() => setShowHelp(false)}\n                className={cn(\n                  \"glass-p-1 hover:glass-surface-hover glass-radius-lg glass-transition glass-text-secondary glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n              >\n                \u00D7\n              </button>\n            </div>\n\n            <div className=\"glass-space-y-2\">\n              {shortcuts.map((shortcut) => (\n                <div\n                  key={shortcut.key}\n                  className=\"glass-flex glass-justify-between glass-items-center glass-text-sm\"\n                >\n                  <kbd\n                    className={cn(\n                      \"glass-px-2 glass-py-1 glass-surface-secondary glass-border-subtle glass-radius glass-text-primary glass-font-mono glass-text-xs\"\n                    )}\n                  >\n                    {shortcut.key}\n                  </kbd>\n                  <ContrastGuard>\n                    <span\n                      className={cn(\n                        \"glass-text-secondary glass-ml-3 glass-text-xs\"\n                      )}\n                    >\n                      {shortcut.description}\n                    </span>\n                  </ContrastGuard>\n                </div>\n              ))}\n            </div>\n          </div>\n        </motion.div>\n      )}\n    </AnimatePresence>\n  );\n}\n\nexport default GlassFocusIndicators;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * Enhanced Glass Button\n * Next-generation button component integrating all advanced systems:\n * - Physics Engine for realistic glass interactions\n * - Morphing Engine for environmental adaptation\n * - 3D Engine for immersive depth effects\n * - Organic Animation Engine for natural motion\n * - Emotional Intelligence for adaptive behavior\n * - Spatial Computing for AR/VR support\n * - AI Personalization for learned preferences\n */\n\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  useMemo,\n} from \"react\";\nimport { motion, AnimationControls, useAnimation } from \"framer-motion\";\n\n// Import all our advanced engines\nimport GlassPhysicsEngine from \"../effects/GlassPhysicsEngine\";\nimport GlassMorphingEngine from \"../effects/GlassMorphingEngine\";\nimport Glass3DEngine from \"../effects/Glass3DEngine\";\nimport OrganicAnimationEngine, {\n  COMMON_SEQUENCES,\n} from \"../animations/OrganicAnimationEngine\";\nimport SpatialComputingEngine from \"../spatial/SpatialComputingEngine\";\n\n// Import intelligence systems\nimport { useEmotionalIntelligence } from \"../../utils/emotionalIntelligence\";\nimport {\n  useAIPersonalization,\n  useInteractionRecording,\n} from \"../../utils/aiPersonalization\";\nimport { consciousnessResourcePool } from \"../../utils/consciousnessOptimization\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Base button props (simplified for integration)\ninterface BaseGlassButtonProps extends Omit<\n  React.ButtonHTMLAttributes<HTMLButtonElement>,\n  \"size\"\n> {\n  variant?: \"primary\" | \"secondary\" | \"destructive\" | \"ghost\" | \"outline\";\n  size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n}\n\n// Enhanced features configuration\ninterface EnhancedFeatures {\n  // Core glass effects\n  physics?: {\n    enabled?: boolean;\n    interaction?: \"ripple\" | \"shatter\" | \"bend\" | \"melt\" | \"freeze\" | \"vibrate\";\n    intensity?: number;\n  };\n\n  // Environmental adaptation\n  morphing?: {\n    enabled?: boolean;\n    environmentalAdaptation?: boolean;\n    userActivityAdaptation?: boolean;\n    contentTypeAdaptation?: boolean;\n  };\n\n  // 3D immersion\n  spatial3D?: {\n    enabled?: boolean;\n    layers?: number;\n    parallax?: boolean;\n    depthOfField?: boolean;\n    holographic?: boolean;\n  };\n\n  // Natural animations\n  organicMotion?: {\n    enabled?: boolean;\n    patterns?: string[];\n    emotionalContext?: string;\n    enableMicroInteractions?: boolean;\n    showDebugHud?: boolean;\n  };\n\n  // Emotional intelligence\n  emotionalAdaptation?: {\n    enabled?: boolean;\n    biometricTracking?: boolean;\n    behaviorAnalysis?: boolean;\n    uiAdaptation?: boolean;\n  };\n\n  // Spatial computing (AR/VR)\n  spatialComputing?: {\n    enabled?: boolean;\n    gestureRecognition?: boolean;\n    spatialAnchoring?: boolean;\n    vrOptimized?: boolean;\n  };\n\n  // AI personalization\n  aiPersonalization?: {\n    enabled?: boolean;\n    learningMode?: \"passive\" | \"active\" | \"adaptive\";\n    recommendationLevel?: \"minimal\" | \"moderate\" | \"comprehensive\";\n  };\n}\n\nexport interface EnhancedGlassButtonProps extends BaseGlassButtonProps {\n  enhancedFeatures?: EnhancedFeatures;\n  userId?: string;\n  componentId?: string;\n  onAdvancedInteraction?: (type: string, data: unknown) => void;\n}\n\nexport const EnhancedGlassButton = forwardRef<\n  HTMLButtonElement,\n  EnhancedGlassButtonProps\n>(\n  (\n    {\n      children,\n      className,\n      variant = \"primary\",\n      size = \"md\",\n      enhancedFeatures = {},\n      userId = \"default-user\",\n      componentId = \"enhanced-glass-button\",\n      onAdvancedInteraction,\n      onClick,\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const buttonRef = useRef<HTMLButtonElement>(null);\n    const [isInteracting, setIsInteracting] = useState(false);\n    const [adaptationApplied, setAdaptationApplied] = useState(false);\n\n    // Enhanced feature flags with defaults\n    const features = useMemo(\n      () => ({\n        physics: {\n          enabled: true,\n          interaction: \"ripple\",\n          intensity: 1,\n          ...enhancedFeatures.physics,\n        },\n        morphing: {\n          enabled: false,\n          environmentalAdaptation: true,\n          userActivityAdaptation: true,\n          contentTypeAdaptation: true,\n          ...enhancedFeatures.morphing,\n        },\n        spatial3D: {\n          enabled: false,\n          layers: 4,\n          parallax: true,\n          depthOfField: true,\n          holographic: true,\n          ...enhancedFeatures.spatial3D,\n        },\n        organicMotion: {\n          enabled: false,\n          patterns: [\"gentle\", \"interactive\"],\n          emotionalContext: \"calm\",\n          enableMicroInteractions: true,\n          ...enhancedFeatures.organicMotion,\n        },\n        emotionalAdaptation: {\n          enabled: false,\n          biometricTracking: true,\n          behaviorAnalysis: true,\n          uiAdaptation: true,\n          ...enhancedFeatures.emotionalAdaptation,\n        },\n        spatialComputing: {\n          enabled: false, // Disabled by default for compatibility\n          gestureRecognition: true,\n          spatialAnchoring: false,\n          vrOptimized: false,\n          ...enhancedFeatures.spatialComputing,\n        },\n        aiPersonalization: {\n          enabled: false,\n          learningMode: \"adaptive\",\n          recommendationLevel: \"moderate\",\n          ...enhancedFeatures.aiPersonalization,\n        },\n      }),\n      [enhancedFeatures]\n    );\n\n    // Initialize intelligence systems\n    const {\n      currentEmotion,\n      uiAdaptation,\n      addBiometricData,\n      addBehaviorData,\n      analyzeEmotion,\n    } = useEmotionalIntelligence();\n\n    const { profile, recommendations, recordInteraction, predictBehavior } =\n      useAIPersonalization(userId);\n\n    const { startInteraction, endInteraction } = useInteractionRecording(\n      componentId,\n      userId\n    );\n\n    // Base button styles with glass design tokens\n    const baseStyles = useMemo(() => {\n      const sizeStyles = {\n        xs: \"glass-h-xs glass-px-xs glass-text-xs\",\n        sm: \"glass-h-sm glass-px-sm glass-text-sm\",\n        md: \"glass-h-md glass-px-md glass-text-sm\",\n        lg: \"glass-h-lg glass-px-lg glass-text-base\",\n        xl: \"glass-h-xl glass-px-xl glass-text-lg\",\n      };\n\n      const variantStyles = {\n        primary:\n          \"glass-surface-primary glass-text-primary hover:glass-surface-primary-hover\",\n        secondary:\n          \"glass-surface-secondary glass-text-secondary hover:glass-surface-secondary-hover\",\n        destructive:\n          \"glass-surface-danger glass-text-danger hover:glass-surface-danger-hover\",\n        ghost:\n          \"glass-surface-transparent hover:glass-surface-accent glass-text-secondary hover:glass-text-primary\",\n        outline:\n          \"glass-border-subtle glass-surface-background hover:glass-surface-accent glass-text-secondary hover:glass-text-primary\",\n      };\n\n      return cn(\n        // Base glass foundation\n        \"glass-foundation-complete\",\n        \"inline-flex items-center justify-center whitespace-nowrap\",\n        \"glass-radius-md glass-transition glass-focus\",\n        \"font-medium cursor-pointer select-none\",\n        \"disabled:pointer-events-none disabled:opacity-50\",\n        // Glass-specific utilities\n        \"glass-overlay-specular glass-parallax\",\n        \"glass-magnet glass-ripple glass-press\",\n        sizeStyles[size],\n        variantStyles[variant]\n      );\n    }, [size, variant]);\n\n    // Apply AI personalization adaptations\n    useEffect(() => {\n      if (features.aiPersonalization.enabled && profile && !adaptationApplied) {\n        // Apply learned preferences\n        const buttonEl = buttonRef.current;\n        if (buttonEl) {\n          // Apply animation speed preference\n          if (profile.uiPreferences.animationSpeed !== 1) {\n            buttonEl.style.transitionDuration = `${ANIMATION.DURATION.normal / profile.uiPreferences.animationSpeed}ms`;\n          }\n\n          // Apply density preference\n          if (profile.uiPreferences.density === \"compact\") {\n            buttonEl.style.padding = \"0.25rem 0.75rem\";\n          } else if (profile.uiPreferences.density === \"spacious\") {\n            buttonEl.style.padding = \"0.75rem 2rem\";\n          }\n\n          setAdaptationApplied(true);\n        }\n      }\n    }, [features.aiPersonalization.enabled, profile, adaptationApplied]);\n\n    // Enhanced click handler with all intelligence systems\n    const handleEnhancedClick = useCallback(\n      async (event: React.MouseEvent<HTMLButtonElement>) => {\n        setIsInteracting(true);\n\n        // Start interaction recording\n        const interaction = startInteraction(\"click\", window.location.pathname);\n\n        // Record biometric data (simulated - would use real sensors)\n        if (\n          features.emotionalAdaptation.enabled &&\n          features.emotionalAdaptation.biometricTracking\n        ) {\n          addBiometricData({\n            mouseVelocity: Math.sqrt(\n              event.movementX ** 2 + event.movementY ** 2\n            ),\n            clickPressure: Math.random() * 0.5 + 0.5, // Simulated\n            dwellTime: Date.now() % 5000, // Simulated\n          });\n        }\n\n        // Record behavioral data\n        if (\n          features.emotionalAdaptation.enabled &&\n          features.emotionalAdaptation.behaviorAnalysis\n        ) {\n          addBehaviorData({\n            interactionFrequency: Math.floor(Math.random() * 20) + 5,\n            decisionTime: Math.random() * 2000 + 500,\n            errorRate: Math.random() * 0.1,\n          });\n        }\n\n        // Analyze emotion and trigger UI adaptation\n        if (features.emotionalAdaptation.enabled) {\n          const emotion = analyzeEmotion();\n          if (emotion) {\n            onAdvancedInteraction?.(\"emotion-detected\", emotion);\n          }\n        }\n\n        // Predict next likely behavior\n        if (features.aiPersonalization.enabled) {\n          const predictions = predictBehavior(window.location.pathname);\n          if (predictions.length > 0) {\n            onAdvancedInteraction?.(\"behavior-predicted\", predictions[0]);\n          }\n        }\n\n        // Call original onClick\n        onClick?.(event);\n\n        // End interaction recording\n        endInteraction(interaction, {\n          x: event.clientX,\n          y: event.clientY,\n        });\n\n        // Advanced interaction callback\n        onAdvancedInteraction?.(\"enhanced-click\", {\n          emotion: currentEmotion,\n          predictions: predictBehavior(window.location.pathname),\n          adaptations: uiAdaptation,\n        });\n\n        setTimeout(() => setIsInteracting(false), ANIMATION.DURATION.normal);\n      },\n      [\n        startInteraction,\n        endInteraction,\n        onClick,\n        features,\n        addBiometricData,\n        addBehaviorData,\n        analyzeEmotion,\n        predictBehavior,\n        currentEmotion,\n        uiAdaptation,\n        onAdvancedInteraction,\n      ]\n    );\n\n    // Create the enhanced button with all systems\n    const enhancedButton = useMemo(() => {\n      let buttonElement = (\n        <button\n          ref={buttonRef}\n          className={cn(baseStyles, className)}\n          onClick={handleEnhancedClick}\n          {...props}\n        >\n          {children}\n        </button>\n      );\n\n      // Wrap with Physics Engine\n      if (features.physics.enabled) {\n        buttonElement = (\n          <GlassPhysicsEngine\n            interaction={features.physics.interaction as any}\n            intensity={features.physics.intensity}\n            enabled={features.physics.enabled}\n          >\n            {buttonElement}\n          </GlassPhysicsEngine>\n        );\n      }\n\n      // Wrap with Morphing Engine\n      if (features.morphing.enabled) {\n        buttonElement = (\n          <GlassMorphingEngine\n            enableRealTimeAdaptation={features.morphing.environmentalAdaptation}\n            userActivity={isInteracting ? \"focused\" : \"browsing\"}\n            contentType=\"interactive\"\n            intensity={features.physics.intensity || 1}\n          >\n            {buttonElement}\n          </GlassMorphingEngine>\n        );\n      }\n\n      // Wrap with 3D Engine\n      if (features.spatial3D.enabled) {\n        buttonElement = (\n          <Glass3DEngine\n            enableParallax={features.spatial3D.parallax}\n            enableDepthOfField={features.spatial3D.depthOfField}\n            enableHolographic={features.spatial3D.holographic}\n            maxDepthLayers={features.spatial3D.layers}\n          >\n            {buttonElement}\n          </Glass3DEngine>\n        );\n      }\n\n      // Wrap with Organic Animation Engine\n      if (features.organicMotion.enabled) {\n        const animationSequences = features.organicMotion.patterns?.flatMap(\n          (pattern) => COMMON_SEQUENCES[pattern] || []\n        );\n\n        buttonElement = (\n          <OrganicAnimationEngine\n            sequences={animationSequences}\n            emotionalContext={\n              currentEmotion?.primary ||\n              (features.organicMotion.emotionalContext as any)\n            }\n            enableMicroInteractions={\n              features.organicMotion.enableMicroInteractions\n            }\n            showDebugHud={features.organicMotion.showDebugHud}\n          >\n            {buttonElement}\n          </OrganicAnimationEngine>\n        );\n      }\n\n      // Wrap with Spatial Computing Engine (for AR/VR)\n      if (features.spatialComputing.enabled) {\n        buttonElement = (\n          <SpatialComputingEngine\n            enableGestures={features.spatialComputing.gestureRecognition}\n            enableAnchoring={features.spatialComputing.spatialAnchoring}\n            spatialId={`${componentId}-spatial`}\n            onGesture={(gesture) => onAdvancedInteraction?.(\"gesture\", gesture)}\n          >\n            {buttonElement}\n          </SpatialComputingEngine>\n        );\n      }\n\n      return buttonElement;\n    }, [\n      baseStyles,\n      className,\n      handleEnhancedClick,\n      children,\n      props,\n      features,\n      isInteracting,\n      currentEmotion,\n      componentId,\n      onAdvancedInteraction,\n    ]);\n\n    // Forward ref to the actual button element\n    useEffect(() => {\n      if (typeof ref === \"function\") {\n        ref(buttonRef.current);\n      } else if (ref) {\n        ref.current = buttonRef.current;\n      }\n    }, [ref]);\n\n    return enhancedButton;\n  }\n);\n\nEnhancedGlassButton.displayName = \"EnhancedGlassButton\";\n\n// Predefined enhanced button variants for common use cases\n\nexport const PhysicsGlassButton: React.FC<EnhancedGlassButtonProps> = (\n  props\n) => (\n  <EnhancedGlassButton\n    {...props}\n    enhancedFeatures={{\n      physics: { enabled: true, interaction: \"ripple\", intensity: 1.2 },\n      organicMotion: { enabled: true, patterns: [\"interactive\"] },\n      aiPersonalization: { enabled: true },\n    }}\n  />\n);\n\nexport const ImmersiveGlassButton: React.FC<EnhancedGlassButtonProps> = (\n  props\n) => (\n  <EnhancedGlassButton\n    {...props}\n    enhancedFeatures={{\n      physics: { enabled: true, interaction: \"ripple\" },\n      morphing: { enabled: true, environmentalAdaptation: true },\n      spatial3D: { enabled: true, holographic: true },\n      organicMotion: { enabled: true, patterns: [\"gentle\", \"interactive\"] },\n      emotionalAdaptation: { enabled: true },\n      aiPersonalization: { enabled: true },\n    }}\n  />\n);\n\nexport const VRGlassButton: React.FC<EnhancedGlassButtonProps> = (props) => (\n  <EnhancedGlassButton\n    {...props}\n    enhancedFeatures={{\n      spatialComputing: {\n        enabled: true,\n        gestureRecognition: true,\n        vrOptimized: true,\n      },\n      spatial3D: { enabled: true, layers: 6 },\n      physics: { enabled: true, interaction: \"vibrate\" },\n      aiPersonalization: { enabled: true },\n    }}\n  />\n);\n\nexport const SmartAdaptiveButton: React.FC<EnhancedGlassButtonProps> = (\n  props\n) => (\n  <EnhancedGlassButton\n    {...props}\n    enhancedFeatures={{\n      emotionalAdaptation: {\n        enabled: true,\n        biometricTracking: true,\n        behaviorAnalysis: true,\n        uiAdaptation: true,\n      },\n      aiPersonalization: {\n        enabled: true,\n        learningMode: \"adaptive\",\n        recommendationLevel: \"comprehensive\",\n      },\n      morphing: { enabled: true, userActivityAdaptation: true },\n      organicMotion: { enabled: true, enableMicroInteractions: true },\n    }}\n  />\n);\n\nexport const UltraEnhancedButton: React.FC<EnhancedGlassButtonProps> = (\n  props\n) => (\n  <EnhancedGlassButton\n    {...props}\n    enhancedFeatures={{\n      physics: { enabled: true, interaction: \"ripple\", intensity: 1.5 },\n      morphing: {\n        enabled: true,\n        environmentalAdaptation: true,\n        userActivityAdaptation: true,\n        contentTypeAdaptation: true,\n      },\n      spatial3D: {\n        enabled: true,\n        layers: 6,\n        parallax: true,\n        depthOfField: true,\n        holographic: true,\n      },\n      organicMotion: {\n        enabled: true,\n        patterns: [\"gentle\", \"energetic\", \"interactive\"],\n        enableMicroInteractions: true,\n      },\n      emotionalAdaptation: {\n        enabled: true,\n        biometricTracking: true,\n        behaviorAnalysis: true,\n        uiAdaptation: true,\n      },\n      spatialComputing: { enabled: false }, // Disabled for web compatibility\n      aiPersonalization: {\n        enabled: true,\n        learningMode: \"adaptive\",\n        recommendationLevel: \"comprehensive\",\n      },\n    }}\n  />\n);\n\nexport default EnhancedGlassButton;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * Advanced Physics-Based Glass Effects Engine\n * Creates realistic glass interactions with physics simulation\n */\n\nimport React, { useRef, useEffect, useCallback, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  motion,\n  useAnimation,\n  useMotionValue,\n  useSpring,\n  useTransform,\n} from \"framer-motion\";\n\n// Physics simulation parameters\ninterface PhysicsConfig {\n  gravity: number;\n  friction: number;\n  elasticity: number;\n  viscosity: number;\n  refractionIndex: number;\n  density: number;\n}\n\n// Glass interaction types\ntype GlassInteraction =\n  | \"ripple\"\n  | \"shatter\"\n  | \"bend\"\n  | \"melt\"\n  | \"freeze\"\n  | \"vibrate\";\n\n// Particle system for glass effects\ninterface Particle {\n  id: string;\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  life: number;\n  maxLife: number;\n  size: number;\n  opacity: number;\n  color: string;\n  type: \"fragment\" | \"droplet\" | \"spark\" | \"dust\";\n}\n\ninterface GlassPhysicsEngineProps {\n  children: React.ReactNode;\n  className?: string;\n  interaction?: GlassInteraction;\n  physics?: Partial<PhysicsConfig>;\n  enabled?: boolean;\n  intensity?: number;\n  autoTrigger?: boolean;\n  /** Repeat autoTrigger for catalog/docs demos instead of firing only once. */\n  autoRepeat?: boolean;\n  triggerDelay?: number;\n  /** Whether to honor reduced-motion settings for animation. */\n  respectMotionPreference?: boolean;\n  onInteractionStart?: (type: GlassInteraction) => void;\n  onInteractionEnd?: (type: GlassInteraction) => void;\n}\n\nconst defaultPhysics: PhysicsConfig = {\n  gravity: 0.5,\n  friction: 0.98,\n  elasticity: 0.7,\n  viscosity: 0.1,\n  refractionIndex: 1.5,\n  density: 2.5,\n};\n\nexport const GlassPhysicsEngine: React.FC<GlassPhysicsEngineProps> = ({\n  children,\n  className = \"\",\n  interaction = \"ripple\",\n  physics = {},\n  enabled = true,\n  intensity = 1,\n  autoTrigger = false,\n  autoRepeat = false,\n  triggerDelay = 2000,\n  respectMotionPreference = true,\n  onInteractionStart,\n  onInteractionEnd,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate = respectMotionPreference ? !prefersReducedMotion : true;\n  const containerRef = useRef<HTMLDivElement>(null);\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const animationFrameRef = useRef<number>();\n  const [particles, setParticles] = useState<Particle[]>([]);\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const controls = useAnimation();\n  const x = useMotionValue(0);\n  const y = useMotionValue(0);\n  const rotateX = useSpring(0, { stiffness: 300, damping: 30 });\n  const rotateY = useSpring(0, { stiffness: 300, damping: 30 });\n\n  const physicsConfig = { ...defaultPhysics, ...physics };\n\n  // Transform mouse position to rotation\n  const rotateXTransform = useTransform(y, [-300, 300], [15, -15]);\n  const rotateYTransform = useTransform(x, [-300, 300], [-15, 15]);\n\n  // Create particle system\n  const createParticles = useCallback(\n    (\n      centerX: number,\n      centerY: number,\n      count: number,\n      type: Particle[\"type\"]\n    ) => {\n      const newParticles: Particle[] = [];\n\n      for (let i = 0; i < count; i++) {\n        const angle = (Math.PI * 2 * i) / count + Math.random() * 0.5;\n        const velocity = 2 + Math.random() * 4 * intensity;\n        const life = 60 + Math.random() * 120;\n\n        newParticles.push({\n          id: `particle-${Date.now()}-${i}`,\n          x: centerX,\n          y: centerY,\n          vx: Math.cos(angle) * velocity,\n          vy: Math.sin(angle) * velocity,\n          life: life,\n          maxLife: life,\n          size: 2 + Math.random() * 4,\n          opacity: 1,\n          color: `hsl(${180 + Math.random() * 60}, 70%, ${50 + Math.random() * 30}%)`,\n          type,\n        });\n      }\n\n      return newParticles;\n    },\n    [intensity]\n  );\n\n  // Update particle physics\n  const updateParticles = useCallback(\n    (particles: Particle[]) => {\n      return particles\n        .map((particle: any) => {\n          // Apply gravity and friction\n          particle.vy += physicsConfig.gravity;\n          particle.vx *= physicsConfig.friction;\n          particle.vy *= physicsConfig.friction;\n\n          // Update position\n          particle.x += particle.vx;\n          particle.y += particle.vy;\n\n          // Update life\n          particle.life--;\n          particle.opacity = particle.life / particle.maxLife;\n\n          // Boundary collision with elasticity\n          if (containerRef.current) {\n            const bounds = containerRef.current.getBoundingClientRect();\n\n            if (particle.x <= 0 || particle.x >= bounds.width) {\n              particle.vx *= -physicsConfig.elasticity;\n              particle.x = Math.max(0, Math.min(bounds.width, particle.x));\n            }\n\n            if (particle.y <= 0 || particle.y >= bounds.height) {\n              particle.vy *= -physicsConfig.elasticity;\n              particle.y = Math.max(0, Math.min(bounds.height, particle.y));\n            }\n          }\n\n          return particle;\n        })\n        .filter((particle: any) => particle.life > 0);\n    },\n    [physicsConfig]\n  );\n\n  // Render particles to canvas\n  const renderParticles = useCallback(() => {\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext(\"2d\");\n\n    if (!canvas || !ctx) return;\n\n    // Clear canvas\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n    // Render particles\n    particles.forEach((particle: any) => {\n      ctx.save();\n\n      // Set particle properties\n      ctx.globalAlpha = particle.opacity;\n      ctx.fillStyle = particle.color;\n      ctx.shadowBlur = 10;\n      ctx.shadowColor = particle.color;\n\n      // Draw particle based on type\n      switch (particle.type) {\n        case \"fragment\":\n          ctx.fillRect(\n            particle.x - particle.size / 2,\n            particle.y - particle.size / 2,\n            particle.size,\n            particle.size\n          );\n          break;\n        case \"droplet\":\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);\n          ctx.fill();\n          break;\n        case \"spark\":\n          ctx.strokeStyle = particle.color;\n          ctx.lineWidth = 2;\n          ctx.beginPath();\n          ctx.moveTo(particle.x - particle.vx, particle.y - particle.vy);\n          ctx.lineTo(particle.x, particle.y);\n          ctx.stroke();\n          break;\n        case \"dust\":\n          ctx.globalAlpha = particle.opacity * 0.3;\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, particle.size * 0.5, 0, Math.PI * 2);\n          ctx.fill();\n          break;\n      }\n\n      ctx.restore();\n    });\n  }, [particles]);\n\n  // Animation loop\n  const animate = useCallback(() => {\n    if (!isAnimating) return;\n\n    setParticles((prevParticles) => {\n      const updated = updateParticles(prevParticles);\n\n      if (updated.length === 0) {\n        setIsAnimating(false);\n        onInteractionEnd?.(interaction);\n        return [];\n      }\n\n      return updated;\n    });\n\n    renderParticles();\n    animationFrameRef.current = requestAnimationFrame(animate);\n  }, [\n    isAnimating,\n    updateParticles,\n    renderParticles,\n    interaction,\n    onInteractionEnd,\n  ]);\n\n  // Start animation loop\n  useEffect(() => {\n    if (isAnimating) {\n      animate();\n    }\n\n    return () => {\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, [isAnimating, animate]);\n\n  // Handle different interaction types\n  const triggerInteraction = useCallback(\n    (\n      clientX: number,\n      clientY: number,\n      interactionType: GlassInteraction = interaction\n    ) => {\n      if (!enabled || !shouldAnimate || !containerRef.current) return;\n\n      const bounds = containerRef.current.getBoundingClientRect();\n      const x = clientX - bounds.left;\n      const y = clientY - bounds.top;\n\n      onInteractionStart?.(interactionType);\n\n      switch (interactionType) {\n        case \"ripple\":\n          // Create ripple effect\n          controls.start({\n            scale: [1, 1.05, 1],\n            transition: { duration: 0.8, ease: \"easeOut\" },\n          });\n\n          // Add ripple particles\n          const rippleParticles = createParticles(\n            x,\n            y,\n            20 * intensity,\n            \"droplet\"\n          );\n          setParticles(rippleParticles);\n          setIsAnimating(true);\n          break;\n\n        case \"shatter\":\n          // Create shatter effect\n          controls.start({\n            scale: [1, 0.95, 1.02, 1],\n            rotateX: [0, 2, -1, 0],\n            rotateY: [0, -1, 2, 0],\n            transition: { duration: 1.2, ease: \"easeOut\" },\n          });\n\n          // Add glass fragments\n          const fragments = createParticles(x, y, 50 * intensity, \"fragment\");\n          setParticles(fragments);\n          setIsAnimating(true);\n          break;\n\n        case \"bend\":\n          // Create bending effect\n          const bendX = ((x - bounds.width / 2) / bounds.width) * 20;\n          const bendY = ((y - bounds.height / 2) / bounds.height) * 20;\n\n          controls.start({\n            rotateX: [0, bendY, 0],\n            rotateY: [0, bendX, 0],\n            transition: { duration: 1.5, ease: \"easeInOut\" },\n          });\n          break;\n\n        case \"melt\":\n          // Create melting effect\n          controls.start({\n            scaleY: [1, 0.8, 1],\n            y: [0, 10, 0],\n            transition: { duration: 2, ease: \"easeInOut\" },\n          });\n\n          // Add droplet particles\n          const droplets = createParticles(x, y, 15 * intensity, \"droplet\");\n          setParticles(droplets);\n          setIsAnimating(true);\n          break;\n\n        case \"freeze\":\n          // Create freezing effect\n          controls.start({\n            scale: [1, 0.98, 1.01, 1],\n            transition: { duration: 1, ease: \"easeOut\" },\n          });\n\n          // Add frost particles\n          const frost = createParticles(x, y, 30 * intensity, \"dust\");\n          setParticles(frost);\n          setIsAnimating(true);\n          break;\n\n        case \"vibrate\":\n          // Create vibration effect\n          controls.start({\n            x: [0, 2, -2, 1, -1, 0],\n            y: [0, 1, -1, 2, -2, 0],\n            transition: { duration: 0.5, ease: \"easeOut\" },\n          });\n\n          // Add vibration sparks\n          const sparks = createParticles(x, y, 10 * intensity, \"spark\");\n          setParticles(sparks);\n          setIsAnimating(true);\n          break;\n      }\n    },\n    [\n      enabled,\n      shouldAnimate,\n      interaction,\n      intensity,\n      controls,\n      createParticles,\n      onInteractionStart,\n    ]\n  );\n\n  // Handle mouse interactions\n  const handleMouseMove = useCallback(\n    (event: React.MouseEvent) => {\n      if (!containerRef.current) return;\n\n      const bounds = containerRef.current.getBoundingClientRect();\n      const mouseX = event.clientX - bounds.left - bounds.width / 2;\n      const mouseY = event.clientY - bounds.top - bounds.height / 2;\n\n      x.set(mouseX);\n      y.set(mouseY);\n\n      // Update rotation based on mouse position\n      rotateX.set(rotateXTransform.get());\n      rotateY.set(rotateYTransform.get());\n    },\n    [x, y, rotateX, rotateY, rotateXTransform, rotateYTransform]\n  );\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent) => {\n      triggerInteraction(event.clientX, event.clientY);\n    },\n    [triggerInteraction]\n  );\n\n  // Auto-trigger effect\n  useEffect(() => {\n    if (autoTrigger && enabled && shouldAnimate) {\n      const run = () => {\n        if (containerRef.current) {\n          const bounds = containerRef.current.getBoundingClientRect();\n          triggerInteraction(\n            bounds.left + bounds.width / 2,\n            bounds.top + bounds.height / 2\n          );\n        }\n      };\n\n      const timer = setTimeout(run, triggerDelay);\n      const interval = autoRepeat\n        ? setInterval(run, Math.max(triggerDelay * 3, 900))\n        : undefined;\n\n      return () => {\n        clearTimeout(timer);\n        if (interval) clearInterval(interval);\n      };\n    }\n  }, [\n    autoTrigger,\n    autoRepeat,\n    enabled,\n    shouldAnimate,\n    triggerDelay,\n    triggerInteraction,\n  ]);\n\n  // Setup canvas\n  useEffect(() => {\n    if (canvasRef.current && containerRef.current) {\n      const canvas = canvasRef.current;\n      const container = containerRef.current;\n\n      const resizeCanvas = () => {\n        const bounds = container.getBoundingClientRect();\n        canvas.width = bounds.width;\n        canvas.height = bounds.height;\n      };\n\n      resizeCanvas();\n      window.addEventListener(\"resize\", resizeCanvas);\n\n      return () => window.removeEventListener(\"resize\", resizeCanvas);\n    }\n  }, []);\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={cn(\"glass-relative glass-overflow-hidden\", className)}\n      style={{\n        ...{\n          perspective: \"1000px\",\n          transformStyle: \"preserve-3d\",\n        },\n      }}\n      animate={controls}\n      onMouseMove={handleMouseMove}\n      onClick={handleClick}\n      whileHover={{ scale: 1.02 }}\n      whileTap={{ scale: 0.98 }}\n    >\n      {/* Particle canvas */}\n      <canvas\n        ref={canvasRef}\n        data-glass-overlay=\"true\"\n        className={cn(\n          \"glass-absolute glass-inset-0 glass-pointer-events-none glass-z-10\"\n        )}\n        style={{ ...{ mixBlendMode: \"screen\" } }}\n      />\n\n      {/* Glass content */}\n      <motion.div\n        style={{\n          ...{\n            rotateX,\n            rotateY,\n            transformStyle: \"preserve-3d\",\n          },\n        }}\n        className={cn(\"glass-relative glass-z-0\")}\n      >\n        {children}\n      </motion.div>\n\n      {/* Interaction indicators */}\n      {isAnimating && (\n        <div\n          data-glass-overlay=\"true\"\n          className={cn(\n            \"glass-absolute glass-inset-0 glass-pointer-events-none glass-z-20\"\n          )}\n        >\n          <div\n            className={cn(\n              \"glass-absolute glass-inset-0 glass-bg-gradient-radial glass-from-white/10 glass-via-transparent glass-to-transparent glass-opacity-50 glass-animate-pulse\"\n            )}\n          />\n        </div>\n      )}\n    </motion.div>\n  );\n};\n\n// Specialized physics components\nexport const ShatterGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"shatter\" />;\n\nexport const RippleGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"ripple\" />;\n\nexport const BendGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"bend\" />;\n\nexport const MeltGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"melt\" />;\n\nexport const FreezeGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"freeze\" />;\n\nexport const VibrateGlass: React.FC<\n  Omit<GlassPhysicsEngineProps, \"interaction\">\n> = (props) => <GlassPhysicsEngine {...props} interaction=\"vibrate\" />;\n\nexport default GlassPhysicsEngine;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * Dynamic Glass Morphing Engine\n * Real-time glass effects that adapt to environment, time, weather, and user activity\n *\n * @demo DEMO / SHOWCASE COMPONENT \u2014 uses in-component mock data.\n * Environmental context (weather, time, activity) is simulated locally; it is NOT\n * wired to a real weather/sensor/telemetry source. Provide real context inputs\n * before production use.\n */\n\nimport { motion, useAnimation, useSpring } from \"framer-motion\";\nimport React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport \"./glass-morphing.css\";\n\n// Environmental adaptation types\ntype EnvironmentalContext = {\n  timeOfDay: \"dawn\" | \"morning\" | \"afternoon\" | \"evening\" | \"night\";\n  weather: \"sunny\" | \"cloudy\" | \"rainy\" | \"stormy\" | \"snowy\" | \"foggy\";\n  season: \"spring\" | \"summer\" | \"autumn\" | \"winter\";\n  temperature: number; // Celsius\n  humidity: number; // 0-100%\n  lightLevel: number; // 0-100%\n};\n\ntype UserActivity =\n  | \"focused\"\n  | \"browsing\"\n  | \"searching\"\n  | \"creating\"\n  | \"analyzing\"\n  | \"idle\";\ntype ContentType =\n  | \"text\"\n  | \"data\"\n  | \"media\"\n  | \"interactive\"\n  | \"dashboard\"\n  | \"form\";\n\ninterface GlassProperties {\n  opacity: number;\n  blur: number;\n  refraction: number;\n  reflection: number;\n  chromatic: number;\n  caustic: number;\n  temperature: number; // Visual temperature effect\n  viscosity: number; // Fluid-like behavior\n  crystalline: number; // Crystal formation effect\n  iridescence: number; // Color-shifting effect\n}\n\ninterface GlassMorphingEngineProps {\n  children: React.ReactNode;\n  className?: string;\n  environmentalContext?: Partial<EnvironmentalContext>;\n  userActivity?: UserActivity;\n  contentType?: ContentType;\n  intensity?: number;\n  adaptationSpeed?: number;\n  enableRealTimeAdaptation?: boolean;\n  onMorphingChange?: (properties: GlassProperties) => void;\n}\n\n// Environmental glass property mappings\nconst ENVIRONMENTAL_GLASS_CONFIGS: Record<string, Partial<GlassProperties>> = {\n  // Time of day variations\n  \"timeOfDay-dawn\": {\n    opacity: 0.85,\n    blur: 8,\n    temperature: 0.3,\n    iridescence: 0.7,\n    chromatic: 0.4,\n  },\n  \"timeOfDay-morning\": {\n    opacity: 0.9,\n    blur: 6,\n    temperature: 0.1,\n    reflection: 0.8,\n    chromatic: 0.2,\n  },\n  \"timeOfDay-afternoon\": {\n    opacity: 0.75,\n    blur: 4,\n    temperature: -0.1,\n    caustic: 0.6,\n    chromatic: 0.1,\n  },\n  \"timeOfDay-evening\": {\n    opacity: 0.8,\n    blur: 10,\n    temperature: 0.4,\n    iridescence: 0.9,\n    chromatic: 0.5,\n  },\n  \"timeOfDay-night\": {\n    opacity: 0.95,\n    blur: 12,\n    temperature: 0.6,\n    crystalline: 0.3,\n    chromatic: 0.7,\n  },\n\n  // Weather variations\n  \"weather-sunny\": {\n    caustic: 0.8,\n    reflection: 0.9,\n    chromatic: 0.3,\n    iridescence: 0.4,\n  },\n  \"weather-cloudy\": {\n    opacity: 0.9,\n    blur: 8,\n    refraction: 0.6,\n    chromatic: 0.2,\n  },\n  \"weather-rainy\": {\n    viscosity: 0.7,\n    blur: 15,\n    caustic: 0.9,\n    chromatic: 0.6,\n  },\n  \"weather-stormy\": {\n    opacity: 0.7,\n    blur: 20,\n    viscosity: 0.9,\n    crystalline: 0.1,\n  },\n  \"weather-snowy\": {\n    crystalline: 0.8,\n    opacity: 0.95,\n    blur: 6,\n    temperature: 1.0,\n  },\n  \"weather-foggy\": {\n    blur: 25,\n    opacity: 0.6,\n    viscosity: 0.4,\n    chromatic: 0.1,\n  },\n\n  // Seasonal variations\n  \"season-spring\": {\n    iridescence: 0.6,\n    chromatic: 0.4,\n    temperature: 0.2,\n    viscosity: 0.3,\n  },\n  \"season-summer\": {\n    caustic: 0.7,\n    reflection: 0.8,\n    temperature: -0.2,\n    chromatic: 0.2,\n  },\n  \"season-autumn\": {\n    temperature: 0.3,\n    iridescence: 0.8,\n    chromatic: 0.5,\n    crystalline: 0.2,\n  },\n  \"season-winter\": {\n    crystalline: 0.9,\n    temperature: 0.8,\n    opacity: 0.9,\n    chromatic: 0.3,\n  },\n\n  // User activity adaptations\n  \"activity-focused\": {\n    opacity: 0.85,\n    blur: 4,\n    refraction: 0.3,\n    chromatic: 0.1,\n  },\n  \"activity-browsing\": {\n    opacity: 0.8,\n    blur: 6,\n    iridescence: 0.4,\n    chromatic: 0.3,\n  },\n  \"activity-searching\": {\n    blur: 8,\n    caustic: 0.5,\n    chromatic: 0.4,\n    viscosity: 0.3,\n  },\n  \"activity-creating\": {\n    iridescence: 0.7,\n    chromatic: 0.6,\n    caustic: 0.4,\n    temperature: 0.2,\n  },\n  \"activity-analyzing\": {\n    crystalline: 0.5,\n    reflection: 0.7,\n    chromatic: 0.2,\n    opacity: 0.9,\n  },\n  \"activity-idle\": {\n    blur: 12,\n    viscosity: 0.6,\n    iridescence: 0.8,\n    chromatic: 0.5,\n  },\n\n  // Content type adaptations\n  \"content-text\": {\n    opacity: 0.9,\n    blur: 3,\n    chromatic: 0.1,\n    reflection: 0.4,\n  },\n  \"content-data\": {\n    crystalline: 0.6,\n    reflection: 0.8,\n    chromatic: 0.2,\n    opacity: 0.85,\n  },\n  \"content-media\": {\n    caustic: 0.7,\n    iridescence: 0.6,\n    chromatic: 0.5,\n    refraction: 0.7,\n  },\n  \"content-interactive\": {\n    viscosity: 0.4,\n    caustic: 0.5,\n    iridescence: 0.5,\n    chromatic: 0.4,\n  },\n  \"content-dashboard\": {\n    opacity: 0.8,\n    blur: 5,\n    crystalline: 0.4,\n    reflection: 0.6,\n  },\n  \"content-form\": {\n    opacity: 0.9,\n    blur: 4,\n    chromatic: 0.1,\n    viscosity: 0.2,\n  },\n};\n\nconst defaultGlassProperties: GlassProperties = {\n  opacity: 0.8,\n  blur: 6,\n  refraction: 0.5,\n  reflection: 0.5,\n  chromatic: 0.3,\n  caustic: 0.4,\n  temperature: 0.0,\n  viscosity: 0.3,\n  crystalline: 0.2,\n  iridescence: 0.4,\n};\n\nexport const GlassMorphingEngine: React.FC<GlassMorphingEngineProps> = ({\n  children,\n  className = \"\",\n  environmentalContext = {},\n  userActivity = \"browsing\",\n  contentType = \"text\",\n  intensity = 1,\n  adaptationSpeed = 1000,\n  enableRealTimeAdaptation = true,\n  onMorphingChange,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const isMountedRef = useRef(true);\n  const timeoutIdsRef = useRef(new Set<number>());\n  const isTestEnv =\n    typeof process !== \"undefined\" && process.env?.JEST_WORKER_ID !== undefined;\n  const [currentProperties, setCurrentProperties] = useState<GlassProperties>(\n    defaultGlassProperties\n  );\n  const [isTransitioning, setIsTransitioning] = useState(false);\n  const lastTargetRef = useRef<GlassProperties | null>(null);\n\n  const controls = useAnimation();\n\n  // Motion values for smooth transitions\n  const opacityMotion = useSpring(currentProperties.opacity, {\n    stiffness: 100,\n    damping: 30,\n  });\n  const blurMotion = useSpring(currentProperties.blur, {\n    stiffness: 80,\n    damping: 25,\n  });\n  const refractionMotion = useSpring(currentProperties.refraction, {\n    stiffness: 120,\n    damping: 35,\n  });\n  const reflectionMotion = useSpring(currentProperties.reflection, {\n    stiffness: 110,\n    damping: 32,\n  });\n  const chromaticMotion = useSpring(currentProperties.chromatic, {\n    stiffness: 90,\n    damping: 28,\n  });\n  const causticMotion = useSpring(currentProperties.caustic, {\n    stiffness: 100,\n    damping: 30,\n  });\n  const temperatureMotion = useSpring(currentProperties.temperature, {\n    stiffness: 70,\n    damping: 20,\n  });\n  const viscosityMotion = useSpring(currentProperties.viscosity, {\n    stiffness: 85,\n    damping: 25,\n  });\n  const crystallineMotion = useSpring(currentProperties.crystalline, {\n    stiffness: 95,\n    damping: 30,\n  });\n  const iridescenceMotion = useSpring(currentProperties.iridescence, {\n    stiffness: 105,\n    damping: 32,\n  });\n\n  const clearScheduledTasks = useCallback(() => {\n    timeoutIdsRef.current.forEach((id) => clearTimeout(id));\n    timeoutIdsRef.current.clear();\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      isMountedRef.current = false;\n      clearScheduledTasks();\n    };\n  }, [clearScheduledTasks]);\n\n  const scheduleTask = useCallback(\n    (callback: () => void, delay = 0) => {\n      if (isTestEnv) {\n        callback();\n        return;\n      }\n\n      const id = window.setTimeout(() => {\n        timeoutIdsRef.current.delete(id);\n        callback();\n      }, delay);\n      timeoutIdsRef.current.add(id);\n    },\n    [isTestEnv]\n  );\n\n  const resolvedRealTime = enableRealTimeAdaptation && !isTestEnv;\n\n  // Calculate target glass properties based on context\n  const calculateTargetProperties = useCallback(\n    (\n      environmental: Partial<EnvironmentalContext>,\n      activity: UserActivity,\n      content: ContentType,\n      intensityFactor: number\n    ): GlassProperties => {\n      let targetProperties = { ...defaultGlassProperties };\n\n      // Apply environmental adaptations\n      if (environmental.timeOfDay) {\n        const config =\n          ENVIRONMENTAL_GLASS_CONFIGS[`timeOfDay-${environmental.timeOfDay}`];\n        targetProperties = { ...targetProperties, ...config };\n      }\n\n      if (environmental.weather) {\n        const config =\n          ENVIRONMENTAL_GLASS_CONFIGS[`weather-${environmental.weather}`];\n        targetProperties = { ...targetProperties, ...config };\n      }\n\n      if (environmental.season) {\n        const config =\n          ENVIRONMENTAL_GLASS_CONFIGS[`season-${environmental.season}`];\n        targetProperties = { ...targetProperties, ...config };\n      }\n\n      // Apply user activity adaptations\n      const activityConfig =\n        ENVIRONMENTAL_GLASS_CONFIGS[`activity-${activity}`];\n      if (activityConfig) {\n        targetProperties = { ...targetProperties, ...activityConfig };\n      }\n\n      // Apply content type adaptations\n      const contentConfig = ENVIRONMENTAL_GLASS_CONFIGS[`content-${content}`];\n      if (contentConfig) {\n        targetProperties = { ...targetProperties, ...contentConfig };\n      }\n\n      // Apply environmental sensor data\n      if (environmental.temperature !== undefined) {\n        const tempFactor = (environmental.temperature - 20) / 30; // Normalize around 20\u00B0C\n        targetProperties.temperature += tempFactor * 0.3;\n        targetProperties.crystalline += Math.max(0, -tempFactor * 0.4);\n        targetProperties.viscosity += tempFactor * 0.2;\n      }\n\n      if (environmental.humidity !== undefined) {\n        const humidityFactor = environmental.humidity / 100;\n        targetProperties.viscosity += humidityFactor * 0.3;\n        targetProperties.blur += humidityFactor * 3;\n        targetProperties.caustic += humidityFactor * 0.2;\n      }\n\n      if (environmental.lightLevel !== undefined) {\n        const lightFactor = environmental.lightLevel / 100;\n        targetProperties.reflection *= 0.5 + lightFactor * 0.5;\n        targetProperties.caustic *= lightFactor;\n        targetProperties.iridescence *= 0.3 + lightFactor * 0.7;\n      }\n\n      // Apply intensity scaling\n      Object.keys(targetProperties).forEach((key: any) => {\n        const prop = key as keyof GlassProperties;\n        if (prop !== \"opacity\") {\n          targetProperties[prop] = targetProperties[prop] * intensityFactor;\n        } else {\n          // Opacity scaling is inverse for better visibility\n          targetProperties[prop] =\n            1 - (1 - targetProperties[prop]) * intensityFactor;\n        }\n      });\n\n      // Clamp values to valid ranges\n      targetProperties.opacity = Math.max(\n        0.1,\n        Math.min(1, targetProperties.opacity)\n      );\n      targetProperties.blur = Math.max(0, Math.min(30, targetProperties.blur));\n      targetProperties.refraction = Math.max(\n        0,\n        Math.min(1, targetProperties.refraction)\n      );\n      targetProperties.reflection = Math.max(\n        0,\n        Math.min(1, targetProperties.reflection)\n      );\n      targetProperties.chromatic = Math.max(\n        0,\n        Math.min(1, targetProperties.chromatic)\n      );\n      targetProperties.caustic = Math.max(\n        0,\n        Math.min(1, targetProperties.caustic)\n      );\n      targetProperties.temperature = Math.max(\n        -1,\n        Math.min(1, targetProperties.temperature)\n      );\n      targetProperties.viscosity = Math.max(\n        0,\n        Math.min(1, targetProperties.viscosity)\n      );\n      targetProperties.crystalline = Math.max(\n        0,\n        Math.min(1, targetProperties.crystalline)\n      );\n      targetProperties.iridescence = Math.max(\n        0,\n        Math.min(1, targetProperties.iridescence)\n      );\n\n      return targetProperties;\n    },\n    []\n  );\n\n  // Real-time environmental data fetching\n  const fetchEnvironmentalData = useCallback(async (): Promise<\n    Partial<EnvironmentalContext>\n  > => {\n    // In a real implementation, this would fetch from weather APIs, device sensors, etc.\n    const now = new Date();\n    const hour = now.getHours();\n\n    let timeOfDay: EnvironmentalContext[\"timeOfDay\"] = \"morning\";\n    if (hour >= 5 && hour < 8) timeOfDay = \"dawn\";\n    else if (hour >= 8 && hour < 12) timeOfDay = \"morning\";\n    else if (hour >= 12 && hour < 17) timeOfDay = \"afternoon\";\n    else if (hour >= 17 && hour < 20) timeOfDay = \"evening\";\n    else timeOfDay = \"night\";\n\n    const month = now.getMonth();\n    let season: EnvironmentalContext[\"season\"] = \"spring\";\n    if (month >= 2 && month <= 4) season = \"spring\";\n    else if (month >= 5 && month <= 7) season = \"summer\";\n    else if (month >= 8 && month <= 10) season = \"autumn\";\n    else season = \"winter\";\n\n    // Mock environmental data - in real app, would use actual sensors/APIs\n    return {\n      timeOfDay,\n      season,\n      weather: \"sunny\", // Would come from weather API\n      temperature: 22, // Would come from device sensors or location-based weather\n      humidity: 45,\n      lightLevel: 75,\n    };\n  }, []);\n\n  // Morphing transition effect\n  const performMorphingTransition = useCallback(\n    async (targetProperties: GlassProperties) => {\n      if (!isMountedRef.current) return;\n\n      setIsTransitioning(true);\n\n      // Animate all properties smoothly\n      opacityMotion.set(targetProperties.opacity);\n      blurMotion.set(targetProperties.blur);\n      refractionMotion.set(targetProperties.refraction);\n      reflectionMotion.set(targetProperties.reflection);\n      chromaticMotion.set(targetProperties.chromatic);\n      causticMotion.set(targetProperties.caustic);\n      temperatureMotion.set(targetProperties.temperature);\n      viscosityMotion.set(targetProperties.viscosity);\n      crystallineMotion.set(targetProperties.crystalline);\n      iridescenceMotion.set(targetProperties.iridescence);\n\n      // Update state\n      if (isMountedRef.current) {\n        setCurrentProperties(targetProperties);\n      }\n\n      // Notify parent component\n      onMorphingChange?.(targetProperties);\n\n      // End transition after animation completes\n      scheduleTask(() => {\n        if (isMountedRef.current) {\n          setIsTransitioning(false);\n        }\n      }, adaptationSpeed);\n    },\n    [\n      opacityMotion,\n      blurMotion,\n      refractionMotion,\n      reflectionMotion,\n      chromaticMotion,\n      causticMotion,\n      temperatureMotion,\n      viscosityMotion,\n      crystallineMotion,\n      iridescenceMotion,\n      adaptationSpeed,\n      onMorphingChange,\n      scheduleTask,\n    ]\n  );\n\n  // Update glass properties when context changes\n  useEffect(() => {\n    const updateGlassProperties = async () => {\n      let finalEnvironmentalContext = { ...environmentalContext };\n\n      // Fetch real-time data if enabled\n      if (resolvedRealTime) {\n        const realTimeData = await fetchEnvironmentalData();\n        finalEnvironmentalContext = {\n          ...finalEnvironmentalContext,\n          ...realTimeData,\n        };\n      }\n\n      const targetProperties = calculateTargetProperties(\n        finalEnvironmentalContext,\n        userActivity,\n        contentType,\n        intensity\n      );\n\n      const previousTarget = lastTargetRef.current;\n      const hasChanged =\n        !previousTarget ||\n        (Object.keys(targetProperties) as Array<keyof GlassProperties>).some(\n          (key) => targetProperties[key] !== previousTarget[key]\n        );\n\n      if (!hasChanged) {\n        return;\n      }\n\n      lastTargetRef.current = targetProperties;\n      performMorphingTransition(targetProperties);\n    };\n\n    updateGlassProperties();\n  }, [\n    environmentalContext,\n    userActivity,\n    contentType,\n    intensity,\n    resolvedRealTime,\n    calculateTargetProperties,\n    performMorphingTransition,\n    fetchEnvironmentalData,\n  ]);\n\n  // Auto-update environmental data periodically\n  useEffect(() => {\n    if (!resolvedRealTime) return;\n\n    const interval = window.setInterval(async () => {\n      const realTimeData = await fetchEnvironmentalData();\n      const targetProperties = calculateTargetProperties(\n        { ...environmentalContext, ...realTimeData },\n        userActivity,\n        contentType,\n        intensity\n      );\n      const previousTarget = lastTargetRef.current;\n      const hasChanged =\n        !previousTarget ||\n        (Object.keys(targetProperties) as Array<keyof GlassProperties>).some(\n          (key) => targetProperties[key] !== previousTarget[key]\n        );\n\n      if (!hasChanged) {\n        return;\n      }\n\n      lastTargetRef.current = targetProperties;\n      performMorphingTransition(targetProperties);\n    }, 60000); // Update every minute\n\n    return () => clearInterval(interval);\n  }, [\n    resolvedRealTime,\n    environmentalContext,\n    userActivity,\n    contentType,\n    intensity,\n    calculateTargetProperties,\n    performMorphingTransition,\n    fetchEnvironmentalData,\n  ]);\n\n  // Generate dynamic CSS for glass effects\n  // Bind motion values to CSS variables on the container element\n  useEffect(() => {\n    const el = containerRef.current;\n    if (!el) return;\n\n    const subs: Array<() => void> = [];\n    subs.push(\n      opacityMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-opacity\", String(v))\n      )\n    );\n    subs.push(\n      blurMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-blur\", `${v}px`)\n      )\n    );\n    subs.push(\n      refractionMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-refraction\", String(v))\n      )\n    );\n    subs.push(\n      reflectionMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-reflection\", String(v))\n      )\n    );\n    subs.push(\n      chromaticMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-chromatic\", String(v))\n      )\n    );\n    subs.push(\n      causticMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-caustic\", String(v))\n      )\n    );\n    subs.push(\n      temperatureMotion.on(\"change\", (v) => {\n        el.style.setProperty(\"--gm-temperature\", String(v));\n        // Map temperature [-1..1] -> hue around blue (200) to warm (+/- 60)\n        const hue = Math.round(v * 60 + 200);\n        el.style.setProperty(\"--gm-hue\", String(hue));\n      })\n    );\n    subs.push(\n      viscosityMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-viscosity\", String(v))\n      )\n    );\n    subs.push(\n      crystallineMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-crystalline\", String(v))\n      )\n    );\n    subs.push(\n      iridescenceMotion.on(\"change\", (v) =>\n        el.style.setProperty(\"--gm-iridescence\", String(v))\n      )\n    );\n\n    // Prime initial values\n    const prime = () => {\n      el.style.setProperty(\"--gm-opacity\", String(opacityMotion.get()));\n      el.style.setProperty(\"--gm-blur\", `${blurMotion.get()}px`);\n      el.style.setProperty(\"--gm-refraction\", String(refractionMotion.get()));\n      el.style.setProperty(\"--gm-reflection\", String(reflectionMotion.get()));\n      el.style.setProperty(\"--gm-chromatic\", String(chromaticMotion.get()));\n      el.style.setProperty(\"--gm-caustic\", String(causticMotion.get()));\n      const t = temperatureMotion.get();\n      el.style.setProperty(\"--gm-temperature\", String(t));\n      el.style.setProperty(\"--gm-hue\", String(Math.round(t * 60 + 200)));\n      el.style.setProperty(\"--gm-viscosity\", String(viscosityMotion.get()));\n      el.style.setProperty(\"--gm-crystalline\", String(crystallineMotion.get()));\n      el.style.setProperty(\"--gm-iridescence\", String(iridescenceMotion.get()));\n    };\n    prime();\n\n    return () => {\n      subs.forEach((unsub: any) => unsub());\n    };\n  }, [\n    containerRef,\n    opacityMotion,\n    blurMotion,\n    refractionMotion,\n    reflectionMotion,\n    chromaticMotion,\n    causticMotion,\n    temperatureMotion,\n    viscosityMotion,\n    crystallineMotion,\n    iridescenceMotion,\n  ]);\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={cn(\"glass-morphing-container\", className)}\n      animate={controls}\n    >\n      {/* Dynamic glass layers */}\n      <div className={cn(\"glass-morphing-effects\")}>\n        {/* Base glass layer */}\n        <div className={cn(\"glass-layer glass-base\")} />\n\n        {/* Refraction layer */}\n        <div className={cn(\"glass-layer glass-refraction\")} />\n\n        {/* Reflection layer */}\n        <div className={cn(\"glass-layer glass-reflection\")} />\n\n        {/* Chromatic aberration layer */}\n        <div className={cn(\"glass-layer glass-chromatic\")} />\n\n        {/* Caustic pattern layer */}\n        <div className={cn(\"glass-layer glass-caustic\")} />\n\n        {/* Crystalline structure layer */}\n        <div className={cn(\"glass-layer glass-crystalline\")} />\n\n        {/* Viscosity flow layer */}\n        <div className={cn(\"glass-layer glass-viscosity\")} />\n      </div>\n\n      {/* Content */}\n      <div className={cn(\"glass-morphing-content\")}>{children}</div>\n\n      {/* Transition indicators */}\n      {isTransitioning && (\n        <div className={cn(\"glass-morphing-transition-indicator\")}>\n          <div className={cn(\"transition-shimmer\")} />\n        </div>\n      )}\n\n      {/* CSS handled via glass-morphing.css */}\n    </motion.div>\n  );\n};\n\n// Specialized morphing components for different use cases\nexport const EnvironmentalGlass: React.FC<\n  Omit<GlassMorphingEngineProps, \"enableRealTimeAdaptation\">\n> = (props) => (\n  <GlassMorphingEngine {...props} enableRealTimeAdaptation={true} />\n);\n\nexport const ContextualGlass: React.FC<GlassMorphingEngineProps> = (props) => (\n  <GlassMorphingEngine {...props} adaptationSpeed={500} />\n);\n\nexport const SeasonalGlass: React.FC<GlassMorphingEngineProps> = (props) => {\n  const now = new Date();\n  const month = now.getMonth();\n  let season: EnvironmentalContext[\"season\"] = \"spring\";\n\n  if (month >= 2 && month <= 4) season = \"spring\";\n  else if (month >= 5 && month <= 7) season = \"summer\";\n  else if (month >= 8 && month <= 10) season = \"autumn\";\n  else season = \"winter\";\n\n  return (\n    <GlassMorphingEngine\n      {...props}\n      environmentalContext={{ ...props.environmentalContext, season }}\n    />\n  );\n};\n\nexport default GlassMorphingEngine;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\nimport { cn } from '@/lib/utils';\n * Immersive 3D Glass Effects Engine\n * Creates layered depth perception, parallax scrolling, and interactive 3D distortions\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useCallback,\n  useState,\n  useMemo,\n} from \"react\";\nimport {\n  motion,\n  useAnimation,\n  useMotionValue,\n  useSpring,\n  useTransform,\n  useScroll,\n} from \"framer-motion\";\n\n// 3D layer configuration\ninterface Glass3DLayer {\n  id: string;\n  depth: number; // Z-index equivalent, higher = closer to viewer\n  parallaxFactor: number; // How much this layer moves with parallax\n  refractionIndex: number;\n  opacity: number;\n  blurRadius: number;\n  distortionIntensity: number;\n  holographicShift: number; // Color shifting intensity\n}\n\n// 3D interaction types\ntype Glass3DInteraction =\n  | \"hover\"\n  | \"click\"\n  | \"scroll\"\n  | \"tilt\"\n  | \"proximity\"\n  | \"gaze\";\n\ninterface Glass3DEngineProps {\n  children: React.ReactNode;\n  className?: string;\n  layers?: Partial<Glass3DLayer>[];\n  enableParallax?: boolean;\n  enableDepthOfField?: boolean;\n  enableDistortion?: boolean;\n  enableHolographic?: boolean;\n  interactionTypes?: Glass3DInteraction[];\n  perspectiveDistance?: number;\n  maxDepthLayers?: number;\n  /** Run a small package-owned demo loop for catalog/docs previews. */\n  autoDemo?: boolean;\n  /** Whether to honor reduced-motion settings for animation. */\n  respectMotionPreference?: boolean;\n  onLayerInteraction?: (\n    layerId: string,\n    interaction: Glass3DInteraction\n  ) => void;\n}\n\n// Default 3D layer configurations\nconst DEFAULT_LAYERS: Glass3DLayer[] = [\n  {\n    id: \"background\",\n    depth: 0,\n    parallaxFactor: 0.1,\n    refractionIndex: 1.1,\n    opacity: 0.3,\n    blurRadius: 15,\n    distortionIntensity: 0.2,\n    holographicShift: 0.1,\n  },\n  {\n    id: \"midground\",\n    depth: 1,\n    parallaxFactor: 0.3,\n    refractionIndex: 1.3,\n    opacity: 0.6,\n    blurRadius: 8,\n    distortionIntensity: 0.4,\n    holographicShift: 0.3,\n  },\n  {\n    id: \"foreground\",\n    depth: 2,\n    parallaxFactor: 0.6,\n    refractionIndex: 1.5,\n    opacity: 0.9,\n    blurRadius: 3,\n    distortionIntensity: 0.6,\n    holographicShift: 0.5,\n  },\n  {\n    id: \"surface\",\n    depth: 3,\n    parallaxFactor: 1.0,\n    refractionIndex: 1.8,\n    opacity: 0.95,\n    blurRadius: 1,\n    distortionIntensity: 0.8,\n    holographicShift: 0.7,\n  },\n];\n\nexport const Glass3DEngine: React.FC<Glass3DEngineProps> = ({\n  children,\n  className = \"\",\n  layers = [],\n  enableParallax = true,\n  enableDepthOfField = true,\n  enableDistortion = true,\n  enableHolographic = true,\n  interactionTypes = [\"hover\", \"scroll\", \"tilt\"],\n  perspectiveDistance = 1000,\n  maxDepthLayers = 4,\n  autoDemo = false,\n  respectMotionPreference = true,\n  onLayerInteraction,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate = respectMotionPreference ? !prefersReducedMotion : true;\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n  const [isInteracting, setIsInteracting] = useState(false);\n  const [activeInteraction, setActiveInteraction] =\n    useState<Glass3DInteraction | null>(null);\n\n  const controls = useAnimation();\n  const { scrollY } = useScroll();\n\n  // Motion values for 3D transformations\n  const rotateX = useSpring(0, { stiffness: 300, damping: 30 });\n  const rotateY = useSpring(0, { stiffness: 300, damping: 30 });\n  const translateZ = useSpring(0, { stiffness: 400, damping: 35 });\n  const scale3D = useSpring(1, { stiffness: 350, damping: 32 });\n\n  // Combine default layers with custom layers\n  const finalLayers = useMemo(() => {\n    const combinedLayers = DEFAULT_LAYERS.slice(0, maxDepthLayers);\n\n    layers.forEach((customLayer, index) => {\n      if (index < combinedLayers.length) {\n        combinedLayers[index] = { ...combinedLayers[index], ...customLayer };\n      }\n    });\n\n    return combinedLayers.sort((a, b) => a.depth - b.depth);\n  }, [layers, maxDepthLayers]);\n\n  // Parallax scroll effect\n  const parallaxY = useTransform(scrollY, [0, 1000], [0, -200]);\n\n  // Mouse-based 3D tilt effect\n  const handleMouseMove = useCallback(\n    (event: React.MouseEvent) => {\n      if (!containerRef.current || !interactionTypes.includes(\"tilt\")) return;\n\n      const bounds = containerRef.current.getBoundingClientRect();\n      const centerX = bounds.left + bounds.width / 2;\n      const centerY = bounds.top + bounds.height / 2;\n\n      const mouseX = event.clientX - centerX;\n      const mouseY = event.clientY - centerY;\n\n      // Normalize to [-1, 1] range\n      const normalizedX = mouseX / (bounds.width / 2);\n      const normalizedY = mouseY / (bounds.height / 2);\n\n      setMousePosition({ x: normalizedX, y: normalizedY });\n\n      // Apply 3D rotation based on mouse position\n      rotateX.set(normalizedY * -10); // Invert Y for natural feel\n      rotateY.set(normalizedX * 10);\n\n      onLayerInteraction?.(\"all\", \"tilt\");\n    },\n    [interactionTypes, rotateX, rotateY, onLayerInteraction]\n  );\n\n  const handleMouseEnter = useCallback(() => {\n    if (!interactionTypes.includes(\"hover\")) return;\n\n    setIsInteracting(true);\n    setActiveInteraction(\"hover\");\n    scale3D.set(1.02);\n    translateZ.set(20);\n\n    onLayerInteraction?.(\"all\", \"hover\");\n  }, [interactionTypes, scale3D, translateZ, onLayerInteraction]);\n\n  const handleMouseLeave = useCallback(() => {\n    if (!interactionTypes.includes(\"hover\")) return;\n\n    setIsInteracting(false);\n    setActiveInteraction(null);\n    rotateX.set(0);\n    rotateY.set(0);\n    scale3D.set(1);\n    translateZ.set(0);\n    setMousePosition({ x: 0, y: 0 });\n  }, [interactionTypes, rotateX, rotateY, scale3D, translateZ]);\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent) => {\n      if (!interactionTypes.includes(\"click\")) return;\n\n      setActiveInteraction(\"click\");\n\n      // Create ripple effect on click\n      const bounds = containerRef.current?.getBoundingClientRect();\n      if (bounds) {\n        const x = event.clientX - bounds.left;\n        const y = event.clientY - bounds.top;\n\n        controls.start({\n          scale: [1, 1.05, 1],\n          rotateZ: [0, 2, 0],\n          transition: { duration: 0.6, ease: \"easeOut\" },\n        });\n      }\n\n      onLayerInteraction?.(\"surface\", \"click\");\n\n      setTimeout(() => setActiveInteraction(null), 600);\n    },\n    [interactionTypes, controls, onLayerInteraction]\n  );\n\n  // Scroll-based interactions\n  useEffect(() => {\n    if (!interactionTypes.includes(\"scroll\")) return;\n\n    const unsubscribe = scrollY.on(\"change\", (latest) => {\n      const scrollFactor = Math.min(latest / 1000, 1);\n      translateZ.set(scrollFactor * 50);\n\n      if (enableParallax) {\n        onLayerInteraction?.(\"all\", \"scroll\");\n      }\n    });\n\n    return unsubscribe;\n  }, [\n    scrollY,\n    translateZ,\n    interactionTypes,\n    enableParallax,\n    onLayerInteraction,\n  ]);\n\n  // Generate layer styles with 3D transformations\n  const generateLayerStyles = useCallback(\n    (layer: Glass3DLayer, index: number) => {\n      const depthOffset = (layer.depth - 1) * 20; // Stagger layers in Z-space\n      const parallaxOffset = enableParallax ? layer.parallaxFactor : 0;\n\n      return {\n        position: \"absolute\" as const,\n        inset: 0,\n        borderRadius: \"inherit\",\n        zIndex: layer.depth,\n        transform: enableParallax\n          ? `translateZ(${depthOffset}px) translateY(${parallaxOffset * -20}px)`\n          : `translateZ(${depthOffset}px)`,\n        // Use createGlassStyle() instead,\n        background: enableHolographic\n          ? `linear-gradient(\n            ${45 + layer.holographicShift * 30}deg,\n            hsla(${180 + index * 60}, 70%, 80%, ${layer.opacity * 0.1}),\n            hsla(${220 + index * 60}, 60%, 85%, ${layer.opacity * 0.15}),\n            hsla(${260 + index * 60}, 80%, 90%, ${layer.opacity * 0.08})\n          )`\n          : `rgba(255, 255, 255, ${layer.opacity * 0.1})`,\n        opacity: layer.opacity,\n        mixBlendMode: index % 2 === 0 ? \"normal\" : \"multiply\",\n      };\n    },\n    [enableParallax, enableHolographic]\n  );\n\n  // Distortion mesh for interactive distortions\n  const DistortionMesh: React.FC<{ layer: Glass3DLayer }> = ({ layer }) => {\n    if (!enableDistortion) return null;\n\n    const distortionPoints = useMemo(() => {\n      const points = [];\n      const gridSize = 8;\n\n      for (let i = 0; i <= gridSize; i++) {\n        for (let j = 0; j <= gridSize; j++) {\n          const x = (i / gridSize) * 100;\n          const y = (j / gridSize) * 100;\n\n          // Apply mouse-based distortion\n          const distanceFromMouse = Math.sqrt(\n            Math.pow(x - 50 - mousePosition.x * 25, 2) +\n              Math.pow(y - 50 - mousePosition.y * 25, 2)\n          );\n\n          const distortionFactor = Math.max(0, 1 - distanceFromMouse / 50);\n          const distortionAmount =\n            layer.distortionIntensity * distortionFactor * 2;\n\n          points.push({\n            x: x + Math.sin(distortionAmount) * distortionAmount,\n            y: y + Math.cos(distortionAmount) * distortionAmount,\n            intensity: distortionFactor,\n          });\n        }\n      }\n\n      return points;\n    }, [layer.distortionIntensity, mousePosition]);\n\n    return (\n      <div\n        style={{\n          position: \"absolute\",\n          inset: 0,\n          pointerEvents: \"none\",\n          overflow: \"hidden\",\n          borderRadius: \"inherit\",\n        }}\n      >\n        <svg\n          width=\"100%\"\n          height=\"100%\"\n          className=\"glass-absolute glass-inset-0\"\n        >\n          <defs>\n            <filter\n              id={`distortion-${layer.id}`}\n              x=\"-50%\"\n              y=\"-50%\"\n              width=\"200%\"\n              height=\"200%\"\n            >\n              <feTurbulence\n                baseFrequency=\"0.02\"\n                numOctaves=\"3\"\n                result=\"noise\"\n              />\n              <feDisplacementMap\n                in=\"SourceGraphic\"\n                in2=\"noise\"\n                scale={layer.distortionIntensity * 20}\n              />\n            </filter>\n          </defs>\n\n          {/* Distortion grid visualization */}\n          <g filter={`url(#distortion-${layer.id})`}>\n            {distortionPoints.map((point, index) => (\n              <circle\n                key={index}\n                cx={`${point.x}%`}\n                cy={`${point.y}%`}\n                r={point.intensity * 2}\n                fill={`rgba(255, 255, 255, ${point.intensity * 0.1})`}\n                style={{\n                  filter: `blur(${point.intensity * 2}px)`,\n                }}\n              />\n            ))}\n          </g>\n        </svg>\n      </div>\n    );\n  };\n\n  // Depth of field effect\n  const DepthOfFieldLayer: React.FC<{\n    layer: Glass3DLayer;\n    isFocused: boolean;\n  }> = ({ layer, isFocused }) => {\n    if (!enableDepthOfField) return null;\n\n    const focusBlur = isFocused ? 0 : (4 - layer.depth) * 3;\n    const focusOpacity = isFocused ? 1 : 0.3 + (layer.depth / 4) * 0.7;\n\n    return (\n      <motion.div\n        style={{\n          ...({\n            ...generateLayerStyles(layer, layer.depth),\n            filter: `blur(${layer.blurRadius + focusBlur}px)`,\n            opacity: layer.opacity * focusOpacity,\n          } as any),\n        }}\n        animate={{\n          filter: `blur(${layer.blurRadius + focusBlur}px)`,\n          opacity: layer.opacity * focusOpacity,\n        }}\n        transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }}\n      >\n        <DistortionMesh layer={layer} />\n      </motion.div>\n    );\n  };\n\n  // Focus management for depth of field\n  const [focusedLayer, setFocusedLayer] = useState<string>(\"surface\");\n\n  const handleLayerFocus = useCallback(\n    (layerId: string) => {\n      if (enableDepthOfField) {\n        setFocusedLayer(layerId);\n      }\n    },\n    [enableDepthOfField]\n  );\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={`glass-3d-container ${className}`}\n      style={{\n        ...{\n          position: \"relative\",\n          transformStyle: \"preserve-3d\",\n          perspective: `${perspectiveDistance}px`,\n          overflow: \"visible\",\n        },\n      }}\n      animate={\n        !shouldAnimate\n          ? {}\n          : autoDemo\n            ? {\n                rotateZ: [0, 0.65, -0.65, 0],\n                scale: [1, 1.01, 1],\n              }\n            : controls\n      }\n      transition={\n        !shouldAnimate\n          ? { duration: 0 }\n          : autoDemo\n            ? { duration: 3.4, repeat: Infinity, ease: \"easeInOut\" }\n            : undefined\n      }\n      onMouseMove={handleMouseMove}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      onClick={handleClick}\n      whileTap={{ scale: 0.98 }}\n    >\n      {/* 3D Glass Layers */}\n      <motion.div\n        className=\"glass-3d-layers\"\n        data-glass-overlay=\"true\"\n        style={{\n          ...{\n            position: \"absolute\",\n            inset: 0,\n            transformStyle: \"preserve-3d\",\n            rotateX,\n            rotateY,\n            translateZ,\n            scale: scale3D,\n          },\n        }}\n      >\n        {finalLayers.map((layer, index) => (\n          <React.Fragment key={layer.id}>\n            {/* Standard 3D layer */}\n            <motion.div\n              className={`glass-3d-layer glass-layer-${layer.id}`}\n              data-glass-overlay=\"true\"\n              style={{ ...(generateLayerStyles(layer, index) as any) }}\n              onHoverStart={() => handleLayerFocus(layer.id)}\n              whileHover={{ scale: 1.01 }}\n            >\n              <DistortionMesh layer={layer} />\n            </motion.div>\n\n            {/* Depth of field layer */}\n            <DepthOfFieldLayer\n              layer={layer}\n              isFocused={focusedLayer === layer.id}\n            />\n          </React.Fragment>\n        ))}\n\n        {/* Holographic overlay */}\n        {enableHolographic && (\n          <motion.div\n            className=\"glass-holographic-overlay\"\n            style={{\n              ...{\n                position: \"absolute\",\n                inset: 0,\n                background: `conic-gradient(\n                from ${mousePosition.x * 180}deg,\n                hsla(200, 100%, 80%, 0.1) 0deg,\n                hsla(280, 100%, 90%, 0.15) 120deg,\n                hsla(320, 100%, 85%, 0.1) 240deg\n              )`,\n                borderRadius: \"inherit\",\n                zIndex: finalLayers.length + 1,\n                mixBlendMode: \"overlay\",\n                transform: `translateZ(${finalLayers.length * 20 + 10}px)`,\n              },\n            }}\n            animate={\n              !shouldAnimate\n                ? {}\n                : autoDemo\n                  ? {\n                      opacity: [0.38, 0.78, 0.46],\n                      scale: [1, 1.025, 1],\n                      rotate: [0, 2, -2, 0],\n                    }\n                  : {\n                      opacity: isInteracting ? 0.8 : 0.4,\n                      scale: isInteracting ? 1.02 : 1,\n                    }\n            }\n            transition={\n              !shouldAnimate\n                ? { duration: 0 }\n                : autoDemo\n                  ? { duration: 3.2, repeat: Infinity, ease: \"easeInOut\" }\n                  : { duration: 0.3 }\n            }\n          />\n        )}\n      </motion.div>\n\n      {/* Content Layer */}\n      <motion.div\n        className=\"glass-3d-content\"\n        style={{\n          ...{\n            position: \"relative\",\n            zIndex: finalLayers.length + 2,\n            transform: `translateZ(${(finalLayers.length + 1) * 20}px)`,\n            transformStyle: \"preserve-3d\",\n          },\n        }}\n      >\n        {children}\n      </motion.div>\n\n      {/* Parallax background elements */}\n      {enableParallax && (\n        <motion.div\n          className=\"glass-parallax-background\"\n          data-glass-overlay=\"true\"\n          style={{\n            position: \"absolute\",\n            inset: \"-20%\",\n            background: `radial-gradient(circle at ${50 + mousePosition.x * 10}% ${50 + mousePosition.y * 10}%,\n              var(--glass-bg-default) 0%,\n              transparent 70%\n            )`,\n            transform: `translateZ(-100px) scale(1.2)`,\n            y: parallaxY,\n          }}\n        />\n      )}\n\n      {/* Interactive state indicators */}\n      {activeInteraction && (\n        <div className=\"glass-3d-interaction-indicator\">\n          <motion.div\n            initial={{ scale: 0, opacity: 0 }}\n            animate={!shouldAnimate ? {} : { scale: 1, opacity: 1 }}\n            exit={{ scale: 0, opacity: 0 }}\n            className=\"interaction-pulse\"\n            style={{\n              position: \"absolute\",\n              top: \"50%\",\n              left: \"50%\",\n              width: \"20px\",\n              height: \"20px\",\n              background:\n                \"var(--glass-neutral-level2-surface)\",\n              borderRadius: \"50%\",\n              transform: \"translate(-50%, -50%)\",\n              pointerEvents: \"none\",\n            }}\n          />\n        </div>\n      )}\n\n      <style>{`\n        .glass-3d-container {\n          --glass-3d-perspective: ${perspectiveDistance}px;\n        }\n\n        .interaction-pulse {\n          animation: pulse-3d 1s ease-out infinite;\n        }\n\n        @keyframes pulse-3d {\n          0% {\n            transform: translate(-50%, -50%) scale(1) translateZ(0);\n            opacity: 1;\n          }\n          100% {\n            transform: translate(-50%, -50%) scale(3) translateZ(20px);\n            opacity: 0;\n          }\n        }\n      `}</style>\n    </motion.div>\n  );\n};\n\n// Specialized 3D glass components\nexport const ParallaxGlass: React.FC<\n  Omit<Glass3DEngineProps, \"enableParallax\">\n> = (props) => <Glass3DEngine {...props} enableParallax={true} />;\n\nexport const DepthGlass: React.FC<\n  Omit<Glass3DEngineProps, \"enableDepthOfField\">\n> = (props) => <Glass3DEngine {...props} enableDepthOfField={true} />;\n\nexport const HolographicGlass: React.FC<\n  Omit<Glass3DEngineProps, \"enableHolographic\">\n> = (props) => <Glass3DEngine {...props} enableHolographic={true} />;\n\nexport const InteractiveGlass3D: React.FC<Glass3DEngineProps> = (props) => (\n  <Glass3DEngine\n    {...props}\n    interactionTypes={[\"hover\", \"click\", \"scroll\", \"tilt\"]}\n    enableDistortion={true}\n    enableHolographic={true}\n    enableDepthOfField={true}\n  />\n);\n\nexport default Glass3DEngine;\n", "\"use client\";\n/**\nimport { cn } from '@/lib/utils';\n * Organic Animation Engine\n * Advanced animation framework with natural motion patterns, physics simulation,\n * and contextual micro-interactions that mimic real-world glass behavior\n */\n\nimport React, {\n  useRef,\n  useEffect,\n  useCallback,\n  useState,\n  useMemo,\n} from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport {\n  motion,\n  useAnimation,\n  useMotionValue,\n  useSpring,\n  useTransform,\n  AnimationControls,\n  Variants,\n  Transition,\n} from \"framer-motion\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\n// Organic motion pattern types\ntype OrganicMotionPattern =\n  | \"breathe\"\n  | \"pulse\"\n  | \"wave\"\n  | \"flutter\"\n  | \"drift\"\n  | \"bloom\"\n  | \"cascade\"\n  | \"ripple\"\n  | \"shimmer\"\n  | \"flow\"\n  | \"crystallize\"\n  | \"dissolve\";\n\n// Emotional context for animations\ntype EmotionalContext =\n  | \"calm\"\n  | \"excited\"\n  | \"focused\"\n  | \"stressed\"\n  | \"joyful\"\n  | \"melancholy\"\n  | \"energetic\"\n  | \"peaceful\"\n  | \"urgent\"\n  | \"contemplative\";\n\n// Physics simulation properties\ninterface PhysicsProperties {\n  mass: number;\n  tension: number;\n  friction: number;\n  velocity: number;\n  acceleration: number;\n  gravity: number;\n  elasticity: number;\n  viscosity: number;\n}\n\n// Animation sequence definition\ninterface AnimationSequence {\n  id: string;\n  pattern: OrganicMotionPattern;\n  duration: number;\n  delay: number;\n  intensity: number;\n  emotional: EmotionalContext;\n  physics?: Partial<PhysicsProperties>;\n  loop?: boolean | number;\n  trigger?: \"auto\" | \"hover\" | \"click\" | \"scroll\" | \"focus\" | \"visibility\";\n}\n\ninterface OrganicAnimationEngineProps {\n  children: React.ReactNode;\n  className?: string;\n  sequences?: AnimationSequence[];\n  emotionalContext?: EmotionalContext;\n  enablePhysics?: boolean;\n  enableAdaptiveSpeed?: boolean;\n  enableMicroInteractions?: boolean;\n  performanceLevel?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  onAnimationStart?: (sequenceId: string) => void;\n  onAnimationComplete?: (sequenceId: string) => void;\n  onEmotionalShift?: (from: EmotionalContext, to: EmotionalContext) => void;\n  showDebugHud?: boolean;\n}\n\n// Default physics properties\nconst DEFAULT_PHYSICS: PhysicsProperties = {\n  mass: 1,\n  tension: 300,\n  friction: 30,\n  velocity: 0,\n  acceleration: 0,\n  gravity: 0.5,\n  elasticity: 0.8,\n  viscosity: 0.1,\n};\n\n// Emotional context animation mappings\nconst EMOTIONAL_ANIMATIONS: Record<EmotionalContext, Partial<Transition>> = {\n  calm: {\n    duration: ANIMATION.DURATION.slower / 1000,\n    ease: ANIMATION.EASING.easeInOut,\n    type: \"spring\",\n    stiffness: 50,\n    damping: 20,\n  },\n  excited: {\n    duration: ANIMATION.DURATION.fast / 1000,\n    ease: ANIMATION.EASING.bounceOut,\n    type: \"spring\",\n    stiffness: 400,\n    damping: 15,\n  },\n  focused: {\n    duration: ANIMATION.DURATION.normal / 1000,\n    ease: ANIMATION.EASING.easeInOut,\n    type: \"tween\",\n  },\n  stressed: {\n    duration: ANIMATION.DURATION.fast / 1000 / 2,\n    ease: ANIMATION.EASING.easeIn,\n    type: \"spring\",\n    stiffness: 500,\n    damping: 25,\n  },\n  joyful: {\n    duration: (ANIMATION.DURATION.normal / 1000) * 1.2,\n    ease: ANIMATION.EASING.bounceOut,\n    type: \"spring\",\n    stiffness: 200,\n    damping: 10,\n  },\n  melancholy: {\n    duration: (ANIMATION.DURATION.slower / 1000) * 1.3,\n    ease: ANIMATION.EASING.easeOut,\n    type: \"tween\",\n  },\n  energetic: {\n    duration: ANIMATION.DURATION.fast / 1000,\n    ease: ANIMATION.EASING.easeOut,\n    type: \"spring\",\n    stiffness: 350,\n    damping: 12,\n  },\n  peaceful: {\n    duration: (ANIMATION.DURATION.slower / 1000) * 1.7,\n    ease: ANIMATION.EASING.easeInOut,\n    type: \"spring\",\n    stiffness: 30,\n    damping: 25,\n  },\n  urgent: {\n    duration: ANIMATION.DURATION.fast / 1000 / 3,\n    ease: ANIMATION.EASING.easeIn,\n    type: \"tween\",\n  },\n  contemplative: {\n    duration: (ANIMATION.DURATION.slower / 1000) * 2,\n    ease: ANIMATION.EASING.easeOut,\n    type: \"spring\",\n    stiffness: 40,\n    damping: 30,\n  },\n};\n\n// Organic motion pattern definitions\nconst MOTION_PATTERNS: Record<OrganicMotionPattern, Variants> = {\n  breathe: {\n    animate: {\n      scale: [1, 1.02, 1],\n      opacity: [0.8, 1, 0.8],\n    },\n  },\n  pulse: {\n    animate: {\n      scale: [1, 1.05, 1],\n      boxShadow: [\n        \"0 0 0 0 var(--glass-bg-hover)\",\n        \"0 0 0 20px color-mix(in srgb, var(--glass-white) 0%, transparent)\",\n        \"0 0 0 0 color-mix(in srgb, var(--glass-white) 0%, transparent)\",\n      ],\n    },\n  },\n  wave: {\n    animate: {\n      y: [0, -10, 0, 10, 0],\n      rotateX: [0, 5, 0, -5, 0],\n    },\n  },\n  flutter: {\n    animate: {\n      x: [0, 2, -2, 1, -1, 0],\n      y: [0, -1, 1, -0.5, 0.5, 0],\n      rotate: [0, 1, -1, 0.5, -0.5, 0],\n    },\n  },\n  drift: {\n    animate: {\n      x: [0, 20, -20, 15, -15, 0],\n      y: [0, -5, 5, -3, 3, 0],\n      rotate: [0, 2, -2, 1, -1, 0],\n    },\n  },\n  bloom: {\n    animate: {\n      scale: [0.8, 1.2, 1],\n      opacity: [0.5, 1, 1],\n      filter: [\n        \"blur(var(--glass-blur-md)) brightness(0.8)\",\n        \"blur(0px) brightness(1.2)\",\n        \"blur(0px) brightness(1)\",\n      ],\n    },\n  },\n  cascade: {\n    animate: {\n      y: [0, 0, 0, 0, 0],\n      opacity: [0, 1, 1, 1, 0],\n      scale: [0.9, 1, 1, 1, 0.9],\n    },\n  },\n  ripple: {\n    animate: {\n      scale: [1, 1.1, 1.05, 1],\n      borderRadius: [\n        \"var(--glass-radius-md)\",\n        \"50%\",\n        \"var(--glass-radius-md)\",\n        \"var(--glass-radius-md)\",\n      ],\n    },\n  },\n  shimmer: {\n    animate: {\n      background: [\n        \"linear-gradient(90deg, transparent 0%, color-mix(in srgb, var(--glass-white) 20%, transparent) 50%, transparent 100%)\",\n        \"linear-gradient(90deg, transparent 25%, var(--glass-border-default) 75%, transparent 100%)\",\n        \"linear-gradient(90deg, transparent 50%, color-mix(in srgb, var(--glass-white) 20%, transparent) 100%, transparent 100%)\",\n      ],\n      backgroundPosition: [\"0% 50%\", \"100% 50%\", \"0% 50%\"],\n    },\n  },\n  flow: {\n    animate: {\n      clipPath: [\n        \"ellipse(100% 100% at 0% 50%)\",\n        \"ellipse(100% 100% at 50% 50%)\",\n        \"ellipse(100% 100% at 100% 50%)\",\n        \"ellipse(100% 100% at 50% 50%)\",\n        \"ellipse(100% 100% at 0% 50%)\",\n      ],\n    },\n  },\n  crystallize: {\n    animate: {\n      clipPath: [\n        \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n        \"polygon(20% 0%, 80% 20%, 100% 100%, 0% 80%)\",\n        \"polygon(10% 10%, 90% 0%, 90% 90%, 10% 100%)\",\n        \"polygon(0% 20%, 100% 10%, 80% 100%, 20% 90%)\",\n        \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n      ],\n      filter: [\n        \"brightness(1) contrast(1)\",\n        \"brightness(1.2) contrast(1.1)\",\n        \"brightness(1.1) contrast(1.05)\",\n        \"brightness(1.15) contrast(1.08)\",\n        \"brightness(1) contrast(1)\",\n      ],\n    },\n  },\n  dissolve: {\n    animate: {\n      opacity: [1, 0.8, 0.6, 0.8, 1],\n      filter: [\n        \"blur(0px)\",\n        \"blur(var(--glass-blur-sm))\",\n        \"blur(var(--glass-blur-md))\",\n        \"blur(var(--glass-blur-sm))\",\n        \"blur(0px)\",\n      ],\n      scale: [1, 0.98, 0.95, 0.98, 1],\n    },\n  },\n};\n\nconst parseCubicBezier = (\n  ease: string\n): [number, number, number, number] | null => {\n  const match = ease.match(\n    /^cubic-bezier\\(\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*\\)$/i\n  );\n\n  if (!match) return null;\n\n  return [\n    Number(match[1]),\n    Number(match[2]),\n    Number(match[3]),\n    Number(match[4]),\n  ];\n};\n\nconst toFramerEase = (ease: unknown) => {\n  if (typeof ease !== \"string\") return ease;\n\n  const cssEaseMap: Record<string, string> = {\n    \"ease-in\": \"easeIn\",\n    \"ease-out\": \"easeOut\",\n    \"ease-in-out\": \"easeInOut\",\n  };\n\n  const bezier = parseCubicBezier(ease);\n  return bezier || cssEaseMap[ease] || ease;\n};\n\nconst hasComplexKeyframes = (animate: unknown) =>\n  Object.values((animate || {}) as Record<string, unknown>).some(\n    (value) => Array.isArray(value) && value.length > 2\n  );\n\nconst normalizeFramerTransition = (\n  transition: Record<string, unknown>,\n  animate: unknown\n) => {\n  const normalized: Record<string, unknown> = {\n    ...transition,\n    ease: toFramerEase(transition.ease),\n  };\n\n  if (normalized.type === \"spring\" && hasComplexKeyframes(animate)) {\n    delete normalized.stiffness;\n    delete normalized.damping;\n    normalized.type = \"tween\";\n  }\n\n  return normalized;\n};\n\nexport const OrganicAnimationEngine: React.FC<OrganicAnimationEngineProps> = ({\n  children,\n  className = \"\",\n  sequences = [],\n  emotionalContext = \"calm\",\n  enablePhysics = true,\n  enableAdaptiveSpeed = true,\n  enableMicroInteractions = true,\n  performanceLevel = \"high\",\n  onAnimationStart,\n  onAnimationComplete,\n  onEmotionalShift,\n  showDebugHud = false,\n}) => {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const isMountedRef = useRef(true);\n  const timeoutIdsRef = useRef(new Set<number>());\n  const isTestEnv =\n    typeof process !== \"undefined\" && process.env?.JEST_WORKER_ID !== undefined;\n  const [activeSequences, setActiveSequences] = useState<Set<string>>(\n    new Set()\n  );\n  const [currentEmotion, setCurrentEmotion] =\n    useState<EmotionalContext>(emotionalContext);\n  const [isVisible, setIsVisible] = useState(false);\n\n  const controls = useAnimation();\n\n  const clearScheduledTasks = useCallback(() => {\n    timeoutIdsRef.current.forEach((id) => clearTimeout(id));\n    timeoutIdsRef.current.clear();\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      isMountedRef.current = false;\n      clearScheduledTasks();\n    };\n  }, [clearScheduledTasks]);\n\n  const scheduleTask = useCallback(\n    (callback: () => void, delay = 0) => {\n      if (isTestEnv) {\n        callback();\n        return;\n      }\n\n      const id = window.setTimeout(() => {\n        timeoutIdsRef.current.delete(id);\n        callback();\n      }, delay);\n      timeoutIdsRef.current.add(id);\n    },\n    [isTestEnv]\n  );\n\n  // Physics-based motion values\n  const physicsX = useSpring(0, {\n    stiffness: DEFAULT_PHYSICS.tension,\n    damping: DEFAULT_PHYSICS.friction,\n  });\n  const physicsY = useSpring(0, {\n    stiffness: DEFAULT_PHYSICS.tension,\n    damping: DEFAULT_PHYSICS.friction,\n  });\n  const physicsRotate = useSpring(0, {\n    stiffness: DEFAULT_PHYSICS.tension * 0.5,\n    damping: DEFAULT_PHYSICS.friction,\n  });\n  const physicsScale = useSpring(1, {\n    stiffness: DEFAULT_PHYSICS.tension,\n    damping: DEFAULT_PHYSICS.friction,\n  });\n\n  // Performance optimization based on level\n  const optimizeForPerformance = useMemo(() => {\n    switch (performanceLevel) {\n      case \"low\":\n        return {\n          maxSequences: 2,\n          reducedMotion: true,\n          skipComplexAnimations: true,\n        };\n      case \"medium\":\n        return {\n          maxSequences: 4,\n          reducedMotion: false,\n          skipComplexAnimations: false,\n        };\n      case \"high\":\n        return {\n          maxSequences: 8,\n          reducedMotion: false,\n          skipComplexAnimations: false,\n        };\n      case \"ultra\":\n        return {\n          maxSequences: 16,\n          reducedMotion: false,\n          skipComplexAnimations: false,\n        };\n      default:\n        return {\n          maxSequences: 8,\n          reducedMotion: false,\n          skipComplexAnimations: false,\n        };\n    }\n  }, [performanceLevel]);\n\n  // Adaptive speed calculation based on device performance\n  const adaptiveSpeedFactor = useMemo(() => {\n    if (!enableAdaptiveSpeed) return 1;\n\n    // Simple performance detection (in a real app, would use more sophisticated metrics)\n    const userAgent =\n      typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n    const isMobile =\n      /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n        userAgent\n      );\n    const isLowEnd = /Android.*Chrome\\/[1-6][0-9]\\./.test(userAgent);\n\n    if (isLowEnd) return 0.5;\n    if (isMobile) return 0.7;\n    return 1;\n  }, [enableAdaptiveSpeed]);\n\n  // Emotional context change handler\n  useEffect(() => {\n    if (currentEmotion !== emotionalContext) {\n      onEmotionalShift?.(currentEmotion, emotionalContext);\n      setCurrentEmotion(emotionalContext);\n    }\n  }, [emotionalContext, currentEmotion, onEmotionalShift]);\n\n  // Visibility observer for performance optimization\n  useEffect(() => {\n    if (isTestEnv) {\n      setIsVisible(true);\n      return;\n    }\n\n    if (!containerRef.current) return;\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        setIsVisible(entry.isIntersecting);\n      },\n      { threshold: 0.1 }\n    );\n\n    observer.observe(containerRef.current);\n\n    return () => observer.disconnect();\n  }, []);\n\n  // Execute animation sequence\n  const executeSequence = useCallback(\n    async (sequence: AnimationSequence) => {\n      if (!isVisible && sequence.trigger !== \"auto\") return;\n      if (activeSequences.size >= optimizeForPerformance.maxSequences) return;\n      if (\n        optimizeForPerformance.skipComplexAnimations &&\n        [\"crystallize\", \"dissolve\", \"flow\"].includes(sequence.pattern)\n      )\n        return;\n\n      if (isTestEnv || !isMountedRef.current) return;\n\n      setActiveSequences(\n        (prev: Set<string>) => new Set([...prev, sequence.id])\n      );\n      onAnimationStart?.(sequence.id);\n\n      try {\n        const emotionalTransition =\n          EMOTIONAL_ANIMATIONS[sequence.emotional] ||\n          EMOTIONAL_ANIMATIONS[currentEmotion];\n        const motionPattern = MOTION_PATTERNS[sequence.pattern];\n\n        // Apply adaptive speed\n        const adaptedDuration =\n          (sequence.duration ||\n            (emotionalTransition as any).duration ||\n            (ANIMATION.DURATION.slower * 3) / 1000) * adaptiveSpeedFactor;\n\n        // Merge physics properties if enabled\n        let finalTransition = {\n          ...emotionalTransition,\n          duration: adaptedDuration,\n        };\n\n        if (enablePhysics && sequence.physics) {\n          finalTransition = {\n            ...finalTransition,\n            type: \"spring\" as const,\n            stiffness: sequence.physics.tension || DEFAULT_PHYSICS.tension,\n            damping: sequence.physics.friction || DEFAULT_PHYSICS.friction,\n          };\n        }\n\n        const finalFramerTransition = normalizeFramerTransition(\n          finalTransition,\n          motionPattern.animate\n        );\n\n        // Execute the animation\n        await controls.start({\n          ...motionPattern.animate,\n          transition: finalFramerTransition,\n        });\n\n        // Handle looping\n        if (sequence.loop === true && !isTestEnv) {\n          // Infinite loop - restart the sequence\n          scheduleTask(() => executeSequence(sequence), sequence.delay || 0);\n        } else if (\n          typeof sequence.loop === \"number\" &&\n          sequence.loop > 1 &&\n          !isTestEnv\n        ) {\n          // Finite loop - decrement and restart\n          const remainingLoops = sequence.loop - 1;\n          const loopingSequence = { ...sequence, loop: remainingLoops };\n          scheduleTask(\n            () => executeSequence(loopingSequence),\n            sequence.delay || 0\n          );\n        }\n      } catch {\n        // Failed sequence steps are dropped and the engine continues.\n      } finally {\n        if (isMountedRef.current) {\n          setActiveSequences((prev: Set<string>) => {\n            const next = new Set(prev);\n            next.delete(sequence.id);\n            return next;\n          });\n          onAnimationComplete?.(sequence.id);\n        }\n      }\n    },\n    [\n      isVisible,\n      activeSequences.size,\n      optimizeForPerformance,\n      currentEmotion,\n      adaptiveSpeedFactor,\n      enablePhysics,\n      controls,\n      onAnimationStart,\n      onAnimationComplete,\n    ]\n  );\n\n  // Auto-trigger sequences\n  useEffect(() => {\n    sequences\n      .filter((seq: any) => seq.trigger === \"auto\")\n      .forEach((sequence: any) => {\n        if (isTestEnv) return;\n\n        const delay = sequence.delay || 0;\n        scheduleTask(() => executeSequence(sequence), delay);\n      });\n  }, [sequences, executeSequence]);\n\n  // Micro-interaction handlers\n  const handleHover = useCallback(() => {\n    if (!enableMicroInteractions) return;\n\n    const hoverSequences = sequences.filter(\n      (seq: any) => seq.trigger === \"hover\"\n    );\n    hoverSequences.forEach(executeSequence);\n\n    // Physics-based hover effect\n    if (enablePhysics) {\n      physicsScale.set(1.02);\n      physicsY.set(-2);\n    }\n  }, [\n    enableMicroInteractions,\n    sequences,\n    executeSequence,\n    enablePhysics,\n    physicsScale,\n    physicsY,\n  ]);\n\n  const handleHoverEnd = useCallback(() => {\n    if (!enableMicroInteractions || !enablePhysics) return;\n\n    physicsScale.set(1);\n    physicsY.set(0);\n  }, [enableMicroInteractions, enablePhysics, physicsScale, physicsY]);\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent) => {\n      if (!enableMicroInteractions) return;\n\n      const clickSequences = sequences.filter(\n        (seq: any) => seq.trigger === \"click\"\n      );\n      clickSequences.forEach(executeSequence);\n\n      // Physics-based click effect\n      if (enablePhysics) {\n        const bounds = containerRef.current?.getBoundingClientRect();\n        if (bounds) {\n          const centerX = bounds.width / 2;\n          const centerY = bounds.height / 2;\n          const clickX = event.clientX - bounds.left;\n          const clickY = event.clientY - bounds.top;\n\n          const offsetX = (clickX - centerX) / centerX;\n          const offsetY = (clickY - centerY) / centerY;\n\n          physicsX.set(offsetX * 10);\n          physicsY.set(offsetY * 10);\n          physicsRotate.set(offsetX * 2);\n          physicsScale.set(0.98);\n\n          // Reset after animation\n          scheduleTask(() => {\n            physicsX.set(0);\n            physicsY.set(0);\n            physicsRotate.set(0);\n            physicsScale.set(1);\n          }, 200);\n        }\n      }\n    },\n    [\n      enableMicroInteractions,\n      sequences,\n      executeSequence,\n      enablePhysics,\n      physicsX,\n      physicsY,\n      physicsRotate,\n      physicsScale,\n    ]\n  );\n\n  const handleFocus = useCallback(() => {\n    if (!enableMicroInteractions) return;\n\n    const focusSequences = sequences.filter(\n      (seq: any) => seq.trigger === \"focus\"\n    );\n    focusSequences.forEach(executeSequence);\n  }, [enableMicroInteractions, sequences, executeSequence]);\n\n  // Scroll-based animations\n  useEffect(() => {\n    const handleScroll = () => {\n      if (!enableMicroInteractions) return;\n\n      const scrollSequences = sequences.filter(\n        (seq: any) => seq.trigger === \"scroll\"\n      );\n      scrollSequences.forEach(executeSequence);\n    };\n\n    if (enableMicroInteractions && !isTestEnv) {\n      window.addEventListener(\"scroll\", handleScroll, { passive: true });\n      return () => window.removeEventListener(\"scroll\", handleScroll);\n    }\n  }, [enableMicroInteractions, sequences, executeSequence, isTestEnv]);\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={`organic-animation-container ${className}`}\n      style={{\n        position: \"relative\",\n        x: enablePhysics ? physicsX : 0,\n        y: enablePhysics ? physicsY : 0,\n        rotate: enablePhysics ? physicsRotate : 0,\n        scale: enablePhysics ? physicsScale : 1,\n      }}\n      animate={controls}\n      onMouseEnter={handleHover}\n      onMouseLeave={handleHoverEnd}\n      onClick={handleClick}\n      onFocus={handleFocus}\n      whileTap={enableMicroInteractions ? { scale: 0.98 } : undefined}\n    >\n      {children}\n\n      {/* Animation state indicators for debugging */}\n      {showDebugHud && (\n        <div\n          className=\"animation-debug-info glass-focus glass-touch-target glass-contrast-guard\"\n          style={{\n            position: \"absolute\",\n            top: 0,\n            right: 0,\n            background:\n              \"var(--glass-primary-level2-surface)\",\n            color: \"white\",\n            padding: \"4px 8px\",\n            fontSize: \"10px\",\n            borderRadius: \"0 0 0 var(--glass-radius-md)\",\n            pointerEvents: \"none\",\n          }}\n        >\n          <ContrastGuard>\n            Emotion: {currentEmotion} | Active: {activeSequences.size} | Perf:{\" \"}\n            {performanceLevel}\n          </ContrastGuard>\n        </div>\n      )}\n    </motion.div>\n  );\n};\n\n// Predefined animation sequences for common use cases\nexport const COMMON_SEQUENCES: Record<string, AnimationSequence[]> = {\n  gentle: [\n    {\n      id: \"gentle-breathe\",\n      pattern: \"breathe\",\n      duration: (ANIMATION.DURATION.slower / 1000) * 1.3,\n      delay: 0,\n      intensity: 0.3,\n      emotional: \"calm\",\n      loop: true,\n      trigger: \"auto\",\n    },\n  ],\n  energetic: [\n    {\n      id: \"energetic-pulse\",\n      pattern: \"pulse\",\n      duration: ANIMATION.DURATION.normal / 1000,\n      delay: 0,\n      intensity: 0.8,\n      emotional: \"energetic\",\n      loop: true,\n      trigger: \"auto\",\n    },\n  ],\n  interactive: [\n    {\n      id: \"hover-shimmer\",\n      pattern: \"shimmer\",\n      duration: ANIMATION.DURATION.slow / 1000,\n      delay: 0,\n      intensity: 0.6,\n      emotional: \"focused\",\n      trigger: \"hover\",\n    },\n    {\n      id: \"click-ripple\",\n      pattern: \"ripple\",\n      duration: ANIMATION.DURATION.fast / 1000,\n      delay: 0,\n      intensity: 1,\n      emotional: \"excited\",\n      trigger: \"click\",\n    },\n  ],\n  contemplative: [\n    {\n      id: \"drift-slow\",\n      pattern: \"drift\",\n      duration: (ANIMATION.DURATION.slower / 1000) * 2.7,\n      delay: ANIMATION.DURATION.fast / 1000,\n      intensity: 0.2,\n      emotional: \"contemplative\",\n      loop: true,\n      trigger: \"auto\",\n    },\n  ],\n};\n\n// Specialized organic animation components\nexport const GentleAnimation: React.FC<\n  Omit<OrganicAnimationEngineProps, \"sequences\">\n> = (props) => (\n  <OrganicAnimationEngine {...props} sequences={COMMON_SEQUENCES.gentle} />\n);\n\nexport const EnergeticAnimation: React.FC<\n  Omit<OrganicAnimationEngineProps, \"sequences\">\n> = (props) => (\n  <OrganicAnimationEngine {...props} sequences={COMMON_SEQUENCES.energetic} />\n);\n\nexport const InteractiveAnimation: React.FC<\n  Omit<OrganicAnimationEngineProps, \"sequences\">\n> = (props) => (\n  <OrganicAnimationEngine {...props} sequences={COMMON_SEQUENCES.interactive} />\n);\n\nexport const ContemplativeAnimation: React.FC<\n  Omit<OrganicAnimationEngineProps, \"sequences\">\n> = (props) => (\n  <OrganicAnimationEngine\n    {...props}\n    sequences={COMMON_SEQUENCES.contemplative}\n  />\n);\n\nexport default OrganicAnimationEngine;\n", "/**\n * Emotional Intelligence Engine for Consciousness Interface\n * Advanced emotion recognition and UI adaptation system\n */\n\nimport { useCallback, useRef, useState, useEffect, useMemo } from 'react';\n\n// Emotional state definitions\nexport interface EmotionalState {\n  primary: EmotionType;\n  secondary?: EmotionType;\n  intensity: number; // 0-1 scale\n  valence: number; // -1 (negative) to 1 (positive)\n  arousal: number; // 0 (calm) to 1 (excited)\n  confidence: number; // 0-1 confidence in detection\n  timestamp: number;\n  context?: string;\n}\n\nexport type EmotionType = \n  | 'joy' | 'sadness' | 'anger' | 'fear' | 'surprise' | 'disgust'\n  | 'calm' | 'excited' | 'focused' | 'stressed' | 'confused' | 'satisfied'\n  | 'frustrated' | 'content' | 'anxious' | 'determined' | 'bored' | 'engaged';\n\n// Biometric indicators for emotion detection\nexport interface BiometricIndicators {\n  heartRateVariability: number; // HRV in ms\n  skinConductance: number; // GSR values\n  breathingRate: number; // Breaths per minute\n  mouseVelocity: number; // Pixel velocity\n  clickPressure: number; // Force of clicks (0-1)\n  dwellTime: number; // Time spent on elements\n  scrollPattern: 'smooth' | 'erratic' | 'hesitant' | 'rapid';\n  typingRhythm: number; // Consistency in typing (0-1)\n}\n\n// Behavioral pattern indicators\nexport interface BehaviorPatterns {\n  interactionFrequency: number; // Clicks/actions per minute\n  navigationPattern: 'linear' | 'exploratory' | 'goal-directed' | 'lost' | 'hesitant';\n  errorRate: number; // Mistakes or corrections\n  decisionTime: number; // Average time to make choices\n  multitaskingLevel: number; // Multiple tabs/apps usage\n  attentionSpan: number; // Focus duration in seconds\n  taskCompletion: number; // Completion rate (0-1)\n  helpSeekingBehavior: boolean;\n  scrollPattern?: 'smooth' | 'erratic' | 'hesitant' | 'rapid';\n}\n\n// UI adaptation configurations\nexport interface EmotionalUIAdaptation {\n  colors: {\n    primary: string;\n    accent: string;\n    background: string;\n    text: string;\n  };\n  animations: {\n    speed: number; // 0.1-2.0 multiplier\n    intensity: number; // 0.1-2.0 multiplier\n    type: 'calm' | 'energetic' | 'minimal' | 'playful';\n  };\n  layout: {\n    complexity: 'simple' | 'moderate' | 'complex';\n    spacing: 'tight' | 'normal' | 'loose';\n    hierarchy: 'flat' | 'structured' | 'layered';\n  };\n  feedback: {\n    haptic: boolean;\n    audio: boolean;\n    visual: boolean;\n    intensity: number; // 0-1\n  };\n  assistance: {\n    proactiveHelp: boolean;\n    tooltips: boolean;\n    guidance: 'minimal' | 'moderate' | 'extensive';\n  };\n}\n\n// Emotional recognition patterns\nconst EMOTION_PATTERNS: Record<EmotionType, {\n  biometric: Partial<BiometricIndicators>;\n  behavioral: Partial<BehaviorPatterns>;\n  thresholds: { min: number; max: number };\n}> = {\n  joy: {\n    biometric: { heartRateVariability: 50, mouseVelocity: 800, clickPressure: 0.6 },\n    behavioral: { interactionFrequency: 15, taskCompletion: 0.8, errorRate: 0.1 },\n    thresholds: { min: 0.6, max: 1.0 },\n  },\n  sadness: {\n    biometric: { heartRateVariability: 30, mouseVelocity: 200, dwellTime: 5000 },\n    behavioral: { interactionFrequency: 5, decisionTime: 3000, attentionSpan: 10 },\n    thresholds: { min: 0.4, max: 0.8 },\n  },\n  anger: {\n    biometric: { heartRateVariability: 80, skinConductance: 0.8, clickPressure: 0.9 },\n    behavioral: { interactionFrequency: 20, errorRate: 0.3, scrollPattern: 'erratic' },\n    thresholds: { min: 0.7, max: 1.0 },\n  },\n  fear: {\n    biometric: { heartRateVariability: 90, skinConductance: 0.9, breathingRate: 20 },\n    behavioral: { navigationPattern: 'hesitant', helpSeekingBehavior: true, errorRate: 0.4 },\n    thresholds: { min: 0.6, max: 0.9 },\n  },\n  surprise: {\n    biometric: { heartRateVariability: 70, mouseVelocity: 600 },\n    behavioral: { decisionTime: 2000, navigationPattern: 'exploratory' },\n    thresholds: { min: 0.5, max: 0.8 },\n  },\n  disgust: {\n    biometric: { mouseVelocity: 100, dwellTime: 1000 },\n    behavioral: { interactionFrequency: 3, taskCompletion: 0.2, errorRate: 0.2 },\n    thresholds: { min: 0.5, max: 0.9 },\n  },\n  calm: {\n    biometric: { heartRateVariability: 40, breathingRate: 12, mouseVelocity: 300 },\n    behavioral: { interactionFrequency: 8, scrollPattern: 'smooth', attentionSpan: 30 },\n    thresholds: { min: 0.3, max: 0.7 },\n  },\n  excited: {\n    biometric: { heartRateVariability: 70, mouseVelocity: 1000, clickPressure: 0.8 },\n    behavioral: { interactionFrequency: 18, multitaskingLevel: 0.8, scrollPattern: 'rapid' },\n    thresholds: { min: 0.7, max: 1.0 },\n  },\n  focused: {\n    biometric: { heartRateVariability: 45, mouseVelocity: 400, typingRhythm: 0.8 },\n    behavioral: { attentionSpan: 60, taskCompletion: 0.9, navigationPattern: 'goal-directed' },\n    thresholds: { min: 0.6, max: 0.9 },\n  },\n  stressed: {\n    biometric: { heartRateVariability: 90, skinConductance: 0.8, breathingRate: 18 },\n    behavioral: { errorRate: 0.4, decisionTime: 4000, multitaskingLevel: 0.9 },\n    thresholds: { min: 0.7, max: 1.0 },\n  },\n  confused: {\n    biometric: { dwellTime: 8000, mouseVelocity: 150 },\n    behavioral: { navigationPattern: 'lost', helpSeekingBehavior: true, decisionTime: 5000 },\n    thresholds: { min: 0.5, max: 0.8 },\n  },\n  satisfied: {\n    biometric: { heartRateVariability: 35, mouseVelocity: 250 },\n    behavioral: { taskCompletion: 0.95, interactionFrequency: 6, errorRate: 0.05 },\n    thresholds: { min: 0.4, max: 0.8 },\n  },\n  frustrated: {\n    biometric: { heartRateVariability: 85, clickPressure: 0.95, skinConductance: 0.7 },\n    behavioral: { errorRate: 0.5, interactionFrequency: 25, scrollPattern: 'erratic' },\n    thresholds: { min: 0.6, max: 1.0 },\n  },\n  content: {\n    biometric: { heartRateVariability: 30, breathingRate: 10, mouseVelocity: 200 },\n    behavioral: { attentionSpan: 45, taskCompletion: 0.8, interactionFrequency: 7 },\n    thresholds: { min: 0.3, max: 0.7 },\n  },\n  anxious: {\n    biometric: { heartRateVariability: 95, skinConductance: 0.85, breathingRate: 22 },\n    behavioral: { helpSeekingBehavior: true, decisionTime: 6000, errorRate: 0.3 },\n    thresholds: { min: 0.6, max: 0.95 },\n  },\n  determined: {\n    biometric: { heartRateVariability: 60, mouseVelocity: 500, typingRhythm: 0.9 },\n    behavioral: { taskCompletion: 0.95, attentionSpan: 90, navigationPattern: 'goal-directed' },\n    thresholds: { min: 0.7, max: 1.0 },\n  },\n  bored: {\n    biometric: { heartRateVariability: 25, mouseVelocity: 100, dwellTime: 10000 },\n    behavioral: { interactionFrequency: 2, multitaskingLevel: 0.3, attentionSpan: 5 },\n    thresholds: { min: 0.2, max: 0.6 },\n  },\n  engaged: {\n    biometric: { heartRateVariability: 55, mouseVelocity: 600, typingRhythm: 0.85 },\n    behavioral: { attentionSpan: 120, taskCompletion: 0.9, interactionFrequency: 12 },\n    thresholds: { min: 0.7, max: 0.95 },\n  },\n};\n\n// UI adaptation presets for different emotions\nconst UI_ADAPTATIONS: Record<EmotionType, EmotionalUIAdaptation> = {\n  joy: {\n    colors: { primary: '#FFD700', accent: '#FF6B6B', background: '#FFFAF0', text: '#2C3E50' },\n    animations: { speed: 1.3, intensity: 1.5, type: 'playful' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'layered' },\n    feedback: { haptic: true, audio: true, visual: true, intensity: 0.8 },\n    assistance: { proactiveHelp: false, tooltips: true, guidance: 'minimal' },\n  },\n  sadness: {\n    colors: { primary: '#6B9BD1', accent: '#B0C4DE', background: '#F8F8FF', text: '#4F4F4F' },\n    animations: { speed: 0.7, intensity: 0.5, type: 'calm' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: true, intensity: 0.3 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  anger: {\n    colors: { primary: '#DC143C', accent: '#FF4500', background: '#FFF5EE', text: '#8B0000' },\n    animations: { speed: 0.8, intensity: 0.3, type: 'minimal' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: false, intensity: 0.2 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  fear: {\n    colors: { primary: '#9370DB', accent: '#DDA0DD', background: '#F0F8FF', text: '#483D8B' },\n    animations: { speed: 0.6, intensity: 0.4, type: 'calm' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'structured' },\n    feedback: { haptic: false, audio: false, visual: true, intensity: 0.5 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  surprise: {\n    colors: { primary: '#FFB347', accent: '#FFA500', background: '#FFFACD', text: '#8B4513' },\n    animations: { speed: 1.2, intensity: 1.2, type: 'energetic' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'layered' },\n    feedback: { haptic: true, audio: true, visual: true, intensity: 0.7 },\n    assistance: { proactiveHelp: false, tooltips: true, guidance: 'moderate' },\n  },\n  disgust: {\n    colors: { primary: '#8FBC8F', accent: '#98FB98', background: '#F5FFFA', text: '#2E8B57' },\n    animations: { speed: 0.5, intensity: 0.2, type: 'minimal' },\n    layout: { complexity: 'simple', spacing: 'tight', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: false, intensity: 0.1 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  calm: {\n    colors: { primary: '#87CEEB', accent: '#B0E0E6', background: '#F0F8FF', text: '#4682B4' },\n    animations: { speed: 0.8, intensity: 0.6, type: 'calm' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: false, audio: true, visual: true, intensity: 0.4 },\n    assistance: { proactiveHelp: false, tooltips: true, guidance: 'moderate' },\n  },\n  excited: {\n    colors: { primary: '#FF69B4', accent: '#FFB6C1', background: '#FFF0F5', text: '#C71585' },\n    animations: { speed: 1.5, intensity: 1.8, type: 'energetic' },\n    layout: { complexity: 'complex', spacing: 'tight', hierarchy: 'layered' },\n    feedback: { haptic: true, audio: true, visual: true, intensity: 0.9 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  focused: {\n    colors: { primary: '#4169E1', accent: '#6495ED', background: '#F8F8FF', text: '#191970' },\n    animations: { speed: 1.0, intensity: 0.8, type: 'calm' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: false, audio: false, visual: true, intensity: 0.5 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  stressed: {\n    colors: { primary: '#CD853F', accent: '#DEB887', background: '#FFF8DC', text: '#8B4513' },\n    animations: { speed: 0.6, intensity: 0.3, type: 'calm' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: false, intensity: 0.2 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  confused: {\n    colors: { primary: '#D3D3D3', accent: '#DCDCDC', background: '#F5F5F5', text: '#696969' },\n    animations: { speed: 0.7, intensity: 0.4, type: 'calm' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: true, visual: true, intensity: 0.6 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  satisfied: {\n    colors: { primary: '#32CD32', accent: '#90EE90', background: '#F0FFF0', text: '#006400' },\n    animations: { speed: 1.0, intensity: 0.8, type: 'calm' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: true, audio: true, visual: true, intensity: 0.6 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  frustrated: {\n    colors: { primary: '#FF6347', accent: '#FFB347', background: '#FFF5EE', text: '#B22222' },\n    animations: { speed: 0.5, intensity: 0.2, type: 'minimal' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: false, intensity: 0.1 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  content: {\n    colors: { primary: '#20B2AA', accent: '#48D1CC', background: '#F0FFFF', text: '#008B8B' },\n    animations: { speed: 0.9, intensity: 0.7, type: 'calm' },\n    layout: { complexity: 'moderate', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: false, audio: true, visual: true, intensity: 0.5 },\n    assistance: { proactiveHelp: false, tooltips: true, guidance: 'moderate' },\n  },\n  anxious: {\n    colors: { primary: '#DDA0DD', accent: '#E6E6FA', background: '#F8F8FF', text: '#8B008B' },\n    animations: { speed: 0.6, intensity: 0.3, type: 'calm' },\n    layout: { complexity: 'simple', spacing: 'loose', hierarchy: 'flat' },\n    feedback: { haptic: false, audio: false, visual: true, intensity: 0.3 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'extensive' },\n  },\n  determined: {\n    colors: { primary: '#B22222', accent: '#CD5C5C', background: '#FFF0F0', text: '#8B0000' },\n    animations: { speed: 1.1, intensity: 1.0, type: 'energetic' },\n    layout: { complexity: 'complex', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: true, audio: false, visual: true, intensity: 0.7 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n  bored: {\n    colors: { primary: '#A9A9A9', accent: '#C0C0C0', background: '#F8F8FF', text: '#2F2F2F' },\n    animations: { speed: 1.2, intensity: 1.3, type: 'playful' },\n    layout: { complexity: 'complex', spacing: 'normal', hierarchy: 'layered' },\n    feedback: { haptic: true, audio: true, visual: true, intensity: 0.8 },\n    assistance: { proactiveHelp: true, tooltips: true, guidance: 'moderate' },\n  },\n  engaged: {\n    colors: { primary: '#1E90FF', accent: '#87CEFA', background: '#F0F8FF', text: '#00008B' },\n    animations: { speed: 1.0, intensity: 1.0, type: 'energetic' },\n    layout: { complexity: 'complex', spacing: 'normal', hierarchy: 'structured' },\n    feedback: { haptic: false, audio: false, visual: true, intensity: 0.6 },\n    assistance: { proactiveHelp: false, tooltips: false, guidance: 'minimal' },\n  },\n};\n\n// Emotional intelligence engine class\nclass EmotionalIntelligenceEngine {\n  private biometricBuffer: BiometricIndicators[] = [];\n  private behaviorBuffer: BehaviorPatterns[] = [];\n  private emotionHistory: EmotionalState[] = [];\n  private currentEmotion: EmotionalState | null = null;\n  private adaptationCache = new Map<string, EmotionalUIAdaptation>();\n  \n  // Add biometric data point\n  addBiometricData(indicators: Partial<BiometricIndicators>) {\n    const fullIndicators: BiometricIndicators = {\n      heartRateVariability: 50,\n      skinConductance: 0.5,\n      breathingRate: 15,\n      mouseVelocity: 400,\n      clickPressure: 0.5,\n      dwellTime: 2000,\n      scrollPattern: 'smooth',\n      typingRhythm: 0.7,\n      ...indicators,\n    };\n    \n    this.biometricBuffer.push(fullIndicators);\n    \n    // Keep buffer size manageable\n    if (this.biometricBuffer.length > 100) {\n      this.biometricBuffer.shift();\n    }\n  }\n  \n  // Add behavioral data point\n  addBehaviorData(patterns: Partial<BehaviorPatterns>) {\n    const fullPatterns: BehaviorPatterns = {\n      interactionFrequency: 10,\n      navigationPattern: 'linear',\n      errorRate: 0.1,\n      decisionTime: 2000,\n      multitaskingLevel: 0.5,\n      attentionSpan: 30,\n      taskCompletion: 0.7,\n      helpSeekingBehavior: false,\n      ...patterns,\n    };\n    \n    this.behaviorBuffer.push(fullPatterns);\n    \n    // Keep buffer size manageable\n    if (this.behaviorBuffer.length > 50) {\n      this.behaviorBuffer.shift();\n    }\n  }\n  \n  // Analyze current emotional state\n  analyzeEmotion(): EmotionalState | null {\n    if (this.biometricBuffer.length < 5 || this.behaviorBuffer.length < 3) {\n      return null; // Need more data for reliable analysis\n    }\n    \n    const recentBiometrics = this.biometricBuffer.slice(-10);\n    const recentBehaviors = this.behaviorBuffer.slice(-5);\n    \n    // Calculate averages\n    const avgBiometrics = this.calculateBiometricAverages(recentBiometrics);\n    const avgBehaviors = this.calculateBehaviorAverages(recentBehaviors);\n    \n    // Score each emotion\n    const emotionScores: Record<EmotionType, number> = {} as any;\n    \n    Object.entries(EMOTION_PATTERNS).forEach(([emotion, pattern]) => {\n      const emotionType = emotion as EmotionType;\n      let score = 0;\n      let factors = 0;\n      \n      // Score biometric match\n      Object.entries(pattern.biometric).forEach(([key, expectedValue]) => {\n        const actualValue = avgBiometrics[key as keyof BiometricIndicators];\n        if (actualValue !== undefined && expectedValue !== undefined) {\n          const similarity = this.calculateSimilarity(actualValue, expectedValue as any, key);\n          score += similarity;\n          factors++;\n        }\n      });\n      \n      // Score behavioral match\n      Object.entries(pattern.behavioral).forEach(([key, expectedValue]) => {\n        const actualValue = avgBehaviors[key as keyof BehaviorPatterns];\n        if (actualValue !== undefined && expectedValue !== undefined) {\n          const similarity = this.calculateSimilarity(actualValue, expectedValue as any, key);\n          score += similarity;\n          factors++;\n        }\n      });\n      \n      emotionScores[emotionType] = factors > 0 ? score / factors : 0;\n    });\n    \n    // Find the highest scoring emotion\n    const sortedEmotions = Object.entries(emotionScores)\n      .sort(([, a], [, b]) => b - a)\n      .slice(0, 2);\n    \n    const [primaryEmotion, primaryScore] = sortedEmotions[0];\n    const [secondaryEmotion, secondaryScore] = sortedEmotions[1] || [null, 0];\n    \n    // Calculate confidence based on score separation\n    const confidence = primaryScore - (secondaryScore || 0);\n    \n    if (primaryScore < 0.3) {\n      return null; // Score too low for reliable detection\n    }\n    \n    const emotionalState: EmotionalState = {\n      primary: primaryEmotion as EmotionType,\n      secondary: secondaryScore > 0.2 ? (secondaryEmotion as EmotionType) : undefined,\n      intensity: primaryScore,\n      valence: this.calculateValence(primaryEmotion as EmotionType),\n      arousal: this.calculateArousal(primaryEmotion as EmotionType),\n      confidence: Math.min(confidence, 1),\n      timestamp: Date.now(),\n    };\n    \n    this.currentEmotion = emotionalState;\n    this.emotionHistory.push(emotionalState);\n    \n    // Keep history manageable\n    if (this.emotionHistory.length > 100) {\n      this.emotionHistory.shift();\n    }\n    \n    return emotionalState;\n  }\n  \n  // Get UI adaptation for current emotion\n  getUIAdaptation(emotion?: EmotionType): EmotionalUIAdaptation {\n    const targetEmotion = emotion || this.currentEmotion?.primary || 'calm';\n    const cacheKey = `${targetEmotion}-${this.currentEmotion?.intensity || 1}`;\n    \n    if (this.adaptationCache.has(cacheKey)) {\n      return this.adaptationCache.get(cacheKey)!;\n    }\n    \n    const baseAdaptation = UI_ADAPTATIONS[targetEmotion];\n    const intensity = this.currentEmotion?.intensity || 1;\n    \n    // Scale adaptation based on emotion intensity\n    const scaledAdaptation: EmotionalUIAdaptation = {\n      colors: baseAdaptation.colors,\n      animations: {\n        ...baseAdaptation.animations,\n        speed: baseAdaptation.animations.speed * intensity,\n        intensity: baseAdaptation.animations.intensity * intensity,\n      },\n      layout: baseAdaptation.layout,\n      feedback: {\n        ...baseAdaptation.feedback,\n        intensity: baseAdaptation.feedback.intensity * intensity,\n      },\n      assistance: baseAdaptation.assistance,\n    };\n    \n    this.adaptationCache.set(cacheKey, scaledAdaptation);\n    return scaledAdaptation;\n  }\n  \n  // Calculate similarity between actual and expected values\n  private calculateSimilarity(actual: any, expected: any, key: string): number {\n    if (typeof actual === 'string' && typeof expected === 'string') {\n      return actual === expected ? 1 : 0;\n    }\n    \n    if (typeof actual === 'boolean' && typeof expected === 'boolean') {\n      return actual === expected ? 1 : 0;\n    }\n    \n    if (typeof actual === 'number' && typeof expected === 'number') {\n      // Normalize based on key type\n      const maxValue = this.getMaxValueForKey(key);\n      const normalizedActual = actual / maxValue;\n      const normalizedExpected = expected / maxValue;\n      const difference = Math.abs(normalizedActual - normalizedExpected);\n      return Math.max(0, 1 - difference);\n    }\n    \n    return 0;\n  }\n  \n  private getMaxValueForKey(key: string): number {\n    const maxValues: Record<string, number> = {\n      heartRateVariability: 100,\n      skinConductance: 1,\n      breathingRate: 30,\n      mouseVelocity: 2000,\n      clickPressure: 1,\n      dwellTime: 20000,\n      typingRhythm: 1,\n      interactionFrequency: 50,\n      errorRate: 1,\n      decisionTime: 10000,\n      multitaskingLevel: 1,\n      attentionSpan: 300,\n      taskCompletion: 1,\n    };\n    \n    return maxValues[key] || 1;\n  }\n  \n  private calculateBiometricAverages(data: BiometricIndicators[]): Partial<BiometricIndicators> {\n    if (data.length === 0) return {};\n    \n    const sums: Partial<BiometricIndicators> = {};\n    const keys = Object.keys(data[0]) as (keyof BiometricIndicators)[];\n\n    keys.forEach((key: any) => {\n      if (typeof (data[0] as any)[key] === 'number') {\n        (sums as any)[key] = data.reduce((sum, item) => sum + ((item as any)[key] as number), 0) / data.length as any;\n      }\n    });\n\n    return sums;\n  }\n  \n  private calculateBehaviorAverages(data: BehaviorPatterns[]): Partial<BehaviorPatterns> {\n    if (data.length === 0) return {};\n    \n    const sums: Partial<BehaviorPatterns> = {};\n    const keys = Object.keys(data[0]) as (keyof BehaviorPatterns)[];\n\n    keys.forEach((key: any) => {\n      if (typeof (data[0] as any)[key] === 'number') {\n        (sums as any)[key] = data.reduce((sum, item) => sum + ((item as any)[key] as number), 0) / data.length as any;\n      } else if (typeof (data[0] as any)[key] === 'boolean') {\n        const trueCount = data.filter((item: any) => (item as any)[key]).length;\n        (sums as any)[key] = trueCount > data.length / 2 as any;\n      }\n    });\n    \n    return sums;\n  }\n  \n  private calculateValence(emotion: EmotionType): number {\n    const valenceMap: Record<EmotionType, number> = {\n      joy: 0.9, sadness: -0.8, anger: -0.6, fear: -0.7, surprise: 0.3, disgust: -0.5,\n      calm: 0.2, excited: 0.7, focused: 0.1, stressed: -0.6, confused: -0.3, satisfied: 0.8,\n      frustrated: -0.7, content: 0.6, anxious: -0.5, determined: 0.4, bored: -0.2, engaged: 0.7,\n    };\n    return valenceMap[emotion] || 0;\n  }\n  \n  private calculateArousal(emotion: EmotionType): number {\n    const arousalMap: Record<EmotionType, number> = {\n      joy: 0.8, sadness: 0.2, anger: 0.9, fear: 0.9, surprise: 0.8, disgust: 0.6,\n      calm: 0.1, excited: 0.9, focused: 0.5, stressed: 0.8, confused: 0.4, satisfied: 0.3,\n      frustrated: 0.8, content: 0.2, anxious: 0.7, determined: 0.6, bored: 0.1, engaged: 0.7,\n    };\n    return arousalMap[emotion] || 0.5;\n  }\n  \n  // Get emotion trend over time\n  getEmotionTrend(timeWindow = 300000): EmotionalState[] { // 5 minutes default\n    const cutoff = Date.now() - timeWindow;\n    return this.emotionHistory.filter((state: any) => state.timestamp >= cutoff);\n  }\n  \n  // Check if emotion has stabilized\n  isEmotionStable(threshold = 0.1, timeWindow = 60000): boolean { // 1 minute default\n    const recentEmotions = this.getEmotionTrend(timeWindow);\n    if (recentEmotions.length < 3) return false;\n    \n    const intensityVariation = this.calculateVariation(\n      recentEmotions.map((e: any) => e.intensity)\n    );\n    \n    return intensityVariation < threshold;\n  }\n  \n  private calculateVariation(values: number[]): number {\n    if (values.length === 0) return 0;\n    const mean = values.reduce((a, b) => a + b) / values.length;\n    const variance = values.reduce((sum, value) => sum + Math.pow(value - mean, 2), 0) / values.length;\n    return Math.sqrt(variance);\n  }\n}\n\n// Global emotional intelligence engine instance\nconst emotionalEngine = new EmotionalIntelligenceEngine();\n\n// React hooks for emotional intelligence\nexport const useEmotionalIntelligence = () => {\n  const [currentEmotion, setCurrentEmotion] = useState<EmotionalState | null>(null);\n  const [uiAdaptation, setUiAdaptation] = useState<EmotionalUIAdaptation>(UI_ADAPTATIONS.calm);\n  \n  const addBiometricData = useCallback((data: Partial<BiometricIndicators>) => {\n    emotionalEngine.addBiometricData(data);\n  }, []);\n  \n  const addBehaviorData = useCallback((data: Partial<BehaviorPatterns>) => {\n    emotionalEngine.addBehaviorData(data);\n  }, []);\n  \n  const analyzeEmotion = useCallback(() => {\n    const emotion = emotionalEngine.analyzeEmotion();\n    if (emotion) {\n      setCurrentEmotion(emotion);\n      setUiAdaptation(emotionalEngine.getUIAdaptation(emotion.primary));\n    }\n    return emotion;\n  }, []);\n  \n  const getEmotionTrend = useCallback((timeWindow?: number) => {\n    return emotionalEngine.getEmotionTrend(timeWindow);\n  }, []);\n  \n  const isStable = useCallback((threshold?: number, timeWindow?: number) => {\n    return emotionalEngine.isEmotionStable(threshold, timeWindow);\n  }, []);\n  \n  return {\n    currentEmotion,\n    uiAdaptation,\n    addBiometricData,\n    addBehaviorData,\n    analyzeEmotion,\n    getEmotionTrend,\n    isStable,\n  };\n};\n\nexport default emotionalEngine;", "/**\n * AI-Powered Personalization Engine\n * Advanced machine learning system for adaptive user experience personalization\n */\n\nimport { useCallback, useRef, useState, useEffect, useMemo } from 'react';\n\n// User interaction data structures\nexport interface UserInteraction {\n  id: string;\n  timestamp: number;\n  type: 'click' | 'hover' | 'scroll' | 'focus' | 'type' | 'gesture' | 'voice' | 'gaze';\n  target: string; // Component ID or selector\n  context: string; // Page, section, or app context\n  duration: number; // Interaction duration in ms\n  position?: { x: number; y: number };\n  metadata?: Record<string, any>;\n}\n\n// User behavior patterns\nexport interface BehaviorPattern {\n  id: string;\n  name: string;\n  confidence: number; // 0-1 confidence score\n  frequency: number; // How often this pattern occurs\n  contexts: string[]; // Where this pattern applies\n  temporal: {\n    timeOfDay: number[]; // Hours when pattern is active\n    dayOfWeek: number[]; // Days when pattern is active\n    seasonality?: number; // Seasonal variation\n  };\n  triggers: string[]; // What triggers this pattern\n  outcomes: string[]; // What typically follows this pattern\n}\n\n// Personalization preferences learned from behavior\nexport interface PersonalizationProfile {\n  userId: string;\n  created: number;\n  lastUpdated: number;\n  confidence: number;\n  \n  // UI Preferences\n  uiPreferences: {\n    colorScheme: 'light' | 'dark' | 'auto' | 'custom';\n    animationSpeed: number; // 0.1-2.0 multiplier\n    density: 'compact' | 'comfortable' | 'spacious';\n    complexity: 'simple' | 'standard' | 'advanced';\n    fontScale: number; // 0.8-1.5 multiplier\n  };\n  \n  // Interaction Preferences\n  interactionStyle: {\n    primaryInput: 'mouse' | 'touch' | 'keyboard' | 'voice' | 'gaze' | 'gesture';\n    preferredGestures: string[];\n    clickPressure: number; // Preferred force level\n    hoverDelay: number; // Preferred hover delay\n    doubleClickSpeed: number;\n    scrollSensitivity: number;\n  };\n  \n  // Content Preferences\n  contentPreferences: {\n    informationDensity: 'minimal' | 'moderate' | 'detailed';\n    explanationLevel: 'brief' | 'standard' | 'comprehensive';\n    examplePreference: boolean; // Likes examples\n    visualPreference: boolean; // Prefers visual over text\n    progressIndicators: boolean; // Likes progress feedback\n  };\n  \n  // Temporal Patterns\n  temporalPatterns: {\n    mostActiveHours: number[];\n    peakPerformanceTime: number;\n    preferredSessionDuration: number;\n    breakFrequency: number; // Minutes between preferred breaks\n  };\n  \n  // Cognitive Preferences\n  cognitiveProfile: {\n    processingSpeed: number; // Relative speed (0.1-2.0)\n    workingMemoryCapacity: number; // Items that can be tracked (4-9)\n    attentionSpan: number; // Average focus duration in minutes\n    multitaskingPreference: boolean;\n    interruptionTolerance: number; // 0-1 scale\n  };\n}\n\n// Machine learning model for behavior prediction\ninterface MLModel {\n  type: 'linear' | 'polynomial' | 'neural' | 'ensemble';\n  features: string[];\n  weights: number[];\n  bias: number;\n  accuracy: number;\n  lastTrained: number;\n}\n\n// Personalization recommendations\nexport interface PersonalizationRecommendation {\n  type: 'ui' | 'content' | 'interaction' | 'workflow';\n  component: string;\n  recommendation: string;\n  confidence: number;\n  reasoning: string[];\n  expectedImpact: number; // Expected improvement (0-1)\n  testable: boolean; // Can be A/B tested\n}\n\n// AI Learning Engine Class\nclass AIPersonalizationEngine {\n  private interactions: UserInteraction[] = [];\n  private patterns: BehaviorPattern[] = [];\n  private profiles: Map<string, PersonalizationProfile> = new Map();\n  private models: Map<string, MLModel> = new Map();\n  private featureCache: Map<string, any> = new Map();\n  \n  // Add user interaction to learning dataset\n  addInteraction(interaction: UserInteraction) {\n    this.interactions.push(interaction);\n    \n    // Keep interactions buffer manageable (last 10,000 interactions)\n    if (this.interactions.length > 10000) {\n      this.interactions = this.interactions.slice(-10000);\n    }\n    \n    // Trigger incremental learning\n    this.incrementalLearning(interaction);\n  }\n  \n  // Extract features from interaction data\n  private extractFeatures(interactions: UserInteraction[]): Record<string, number> {\n    if (interactions.length === 0) return {};\n    \n    // Temporal features\n    const now = Date.now();\n    const recentInteractions = interactions.filter((i: any) => now - i.timestamp < 3600000); // Last hour\n    \n    const features = {\n      // Interaction frequency\n      totalInteractions: interactions.length,\n      recentInteractionRate: recentInteractions.length / 60, // Interactions per minute\n      \n      // Interaction types distribution\n      clickRatio: interactions.filter((i: any) => i.type === 'click').length / interactions.length,\n      hoverRatio: interactions.filter((i: any) => i.type === 'hover').length / interactions.length,\n      scrollRatio: interactions.filter((i: any) => i.type === 'scroll').length / interactions.length,\n      \n      // Duration patterns\n      avgInteractionDuration: interactions.reduce((sum, i) => sum + i.duration, 0) / interactions.length,\n      maxInteractionDuration: Math.max(...interactions.map((i: any) => i.duration)),\n      minInteractionDuration: Math.min(...interactions.map((i: any) => i.duration)),\n      \n      // Temporal patterns\n      hourOfDay: new Date().getHours(),\n      dayOfWeek: new Date().getDay(),\n      \n      // Sequence patterns\n      sequentialClicks: this.countSequentialPatterns(interactions, 'click'),\n      rapidInteractions: interactions.filter((i: any) => i.duration < 100).length,\n      slowInteractions: interactions.filter((i: any) => i.duration > 5000).length,\n      \n      // Spatial patterns (if position data available)\n      avgPositionX: this.calculateAveragePosition(interactions, 'x'),\n      avgPositionY: this.calculateAveragePosition(interactions, 'y'),\n      positionVariance: this.calculatePositionVariance(interactions),\n      \n      // Context patterns\n      uniqueContexts: new Set(interactions.map((i: any) => i.context)).size,\n      contextSwitchRate: this.calculateContextSwitchRate(interactions),\n    };\n    \n    return features;\n  }\n  \n  // Incremental learning from new interaction\n  private incrementalLearning(interaction: UserInteraction) {\n    const recentInteractions = this.interactions.slice(-100); // Last 100 interactions\n    const features = this.extractFeatures(recentInteractions);\n    \n    // Update behavior patterns\n    this.updateBehaviorPatterns(interaction, features);\n    \n    // Update models incrementally\n    this.updateModelsIncremental(features);\n  }\n  \n  // Update behavior patterns based on new interaction\n  private updateBehaviorPatterns(interaction: UserInteraction, features: Record<string, number>) {\n    const patternId = `${interaction.type}-${interaction.context}`;\n    let pattern = this.patterns.find(p => p.id === patternId);\n    \n    if (!pattern) {\n      // Create new pattern\n      pattern = {\n        id: patternId,\n        name: `${interaction.type} in ${interaction.context}`,\n        confidence: 0.1,\n        frequency: 1,\n        contexts: [interaction.context],\n        temporal: {\n          timeOfDay: [new Date(interaction.timestamp).getHours()],\n          dayOfWeek: [new Date(interaction.timestamp).getDay()],\n        },\n        triggers: [],\n        outcomes: [],\n      };\n      this.patterns.push(pattern);\n    } else {\n      // Update existing pattern\n      pattern.frequency += 1;\n      pattern.confidence = Math.min(1, pattern.confidence + 0.01);\n      \n      // Update temporal data\n      const hour = new Date(interaction.timestamp).getHours();\n      const day = new Date(interaction.timestamp).getDay();\n      \n      if (!pattern.temporal.timeOfDay.includes(hour)) {\n        pattern.temporal.timeOfDay.push(hour);\n      }\n      if (!pattern.temporal.dayOfWeek.includes(day)) {\n        pattern.temporal.dayOfWeek.push(day);\n      }\n    }\n  }\n  \n  // Generate personalization profile for user\n  generatePersonalizationProfile(userId: string): PersonalizationProfile {\n    const userInteractions = this.interactions; // In real app, filter by userId\n    const features = this.extractFeatures(userInteractions);\n    \n    // Analyze UI preferences from interaction patterns\n    const uiPreferences = this.analyzeUIPreferences(userInteractions, features);\n    const interactionStyle = this.analyzeInteractionStyle(userInteractions, features);\n    const contentPreferences = this.analyzeContentPreferences(userInteractions, features);\n    const temporalPatterns = this.analyzeTemporalPatterns(userInteractions, features);\n    const cognitiveProfile = this.analyzeCognitiveProfile(userInteractions, features);\n    \n    const profile: PersonalizationProfile = {\n      userId,\n      created: Date.now(),\n      lastUpdated: Date.now(),\n      confidence: this.calculateOverallConfidence(userInteractions),\n      uiPreferences,\n      interactionStyle,\n      contentPreferences,\n      temporalPatterns,\n      cognitiveProfile,\n    };\n    \n    this.profiles.set(userId, profile);\n    return profile;\n  }\n  \n  // Analyze UI preferences from interaction data\n  private analyzeUIPreferences(interactions: UserInteraction[], features: Record<string, number>): PersonalizationProfile['uiPreferences'] {\n    return {\n      colorScheme: features.hourOfDay > 18 || features.hourOfDay < 6 ? 'dark' : 'light',\n      animationSpeed: Math.max(0.1, Math.min(2.0, 1 + (features.rapidInteractions - features.slowInteractions) / 100)),\n      density: features.avgInteractionDuration < 1000 ? 'compact' : features.avgInteractionDuration > 3000 ? 'spacious' : 'comfortable',\n      complexity: features.uniqueContexts > 10 ? 'advanced' : features.uniqueContexts < 5 ? 'simple' : 'standard',\n      fontScale: Math.max(0.8, Math.min(1.5, 1 + (features.avgInteractionDuration - 2000) / 10000)),\n    };\n  }\n  \n  // Analyze interaction style preferences\n  private analyzeInteractionStyle(interactions: UserInteraction[], features: Record<string, number>) {\n    const typeDistribution = {\n      mouse: features.clickRatio + features.hoverRatio,\n      touch: interactions.filter((i: any) => i.metadata?.touch).length / interactions.length,\n      keyboard: interactions.filter((i: any) => i.type === 'type').length / interactions.length,\n    };\n    \n    const primaryInput = Object.entries(typeDistribution)\n      .sort(([, a], [, b]) => b - a)[0][0] as 'mouse' | 'touch' | 'keyboard';\n    \n    return {\n      primaryInput,\n      preferredGestures: ['tap', 'swipe'], // Would analyze gesture interactions\n      clickPressure: 0.5, // Would analyze from pressure data\n      hoverDelay: features.avgInteractionDuration > 1000 ? 500 : 200,\n      doubleClickSpeed: features.rapidInteractions > features.slowInteractions ? 300 : 500,\n      scrollSensitivity: 1.0, // Would analyze scroll patterns\n    };\n  }\n  \n  // Analyze content preferences\n  private analyzeContentPreferences(interactions: UserInteraction[], features: Record<string, number>): PersonalizationProfile['contentPreferences'] {\n    const longInteractions = interactions.filter((i: any) => i.duration > 3000).length;\n    const totalInteractions = interactions.length;\n\n    return {\n      informationDensity: longInteractions / totalInteractions > 0.3 ? 'detailed' : 'moderate',\n      explanationLevel: features.uniqueContexts > 15 ? 'comprehensive' : 'standard',\n      examplePreference: features.contextSwitchRate < 0.5, // Less switching suggests preference for examples\n      visualPreference: features.hoverRatio > features.clickRatio, // More hovering suggests visual preference\n      progressIndicators: features.avgInteractionDuration > 2000, // Longer interactions benefit from progress\n    };\n  }\n  \n  // Analyze temporal usage patterns\n  private analyzeTemporalPatterns(interactions: UserInteraction[], features: Record<string, number>) {\n    const hourDistribution = this.calculateHourDistribution(interactions);\n    const peakHour = hourDistribution.indexOf(Math.max(...hourDistribution));\n    \n    return {\n      mostActiveHours: hourDistribution.map((count, hour) => ({ hour, count }))\n        .filter(({ count }) => count > hourDistribution.length * 0.1)\n        .map(({ hour }) => hour),\n      peakPerformanceTime: peakHour,\n      preferredSessionDuration: features.avgInteractionDuration * 10, // Estimate\n      breakFrequency: Math.max(15, 60 - features.recentInteractionRate * 5), // Minutes\n    };\n  }\n  \n  // Analyze cognitive processing patterns\n  private analyzeCognitiveProfile(interactions: UserInteraction[], features: Record<string, number>) {\n    return {\n      processingSpeed: Math.max(0.1, Math.min(2.0, features.rapidInteractions / Math.max(1, features.slowInteractions))),\n      workingMemoryCapacity: Math.max(4, Math.min(9, 7 - features.contextSwitchRate * 3)),\n      attentionSpan: Math.max(1, features.avgInteractionDuration / 60000), // Minutes\n      multitaskingPreference: features.contextSwitchRate > 0.3,\n      interruptionTolerance: Math.max(0, Math.min(1, 1 - features.sequentialClicks / 100)),\n    };\n  }\n  \n  // Generate personalization recommendations\n  generateRecommendations(userId: string): PersonalizationRecommendation[] {\n    const profile = this.profiles.get(userId);\n    if (!profile) return [];\n    \n    const recommendations: PersonalizationRecommendation[] = [];\n    \n    // UI recommendations\n    if (profile.uiPreferences.animationSpeed < 0.7) {\n      recommendations.push({\n        type: 'ui',\n        component: 'animations',\n        recommendation: 'Reduce animation speed to match user preference for slower interactions',\n        confidence: 0.8,\n        reasoning: ['User shows preference for slower interactions', 'Animation speed below threshold'],\n        expectedImpact: 0.3,\n        testable: true,\n      });\n    }\n    \n    // Content recommendations\n    if (profile.contentPreferences.informationDensity === 'detailed' && profile.cognitiveProfile.attentionSpan > 5) {\n      recommendations.push({\n        type: 'content',\n        component: 'information-display',\n        recommendation: 'Show more detailed information by default',\n        confidence: 0.9,\n        reasoning: ['User prefers detailed information', 'High attention span supports more content'],\n        expectedImpact: 0.4,\n        testable: true,\n      });\n    }\n    \n    // Interaction recommendations\n    if (profile.interactionStyle.primaryInput === 'touch' && profile.uiPreferences.density !== 'spacious') {\n      recommendations.push({\n        type: 'interaction',\n        component: 'button-spacing',\n        recommendation: 'Increase button spacing for touch interactions',\n        confidence: 0.85,\n        reasoning: ['Primary input is touch', 'Touch interfaces benefit from more spacing'],\n        expectedImpact: 0.35,\n        testable: true,\n      });\n    }\n    \n    return recommendations.sort((a, b) => b.expectedImpact - a.expectedImpact);\n  }\n  \n  // Predict user behavior for given context\n  predictBehavior(context: string, currentTime?: number): { action: string; probability: number }[] {\n    const time = currentTime || Date.now();\n    const hour = new Date(time).getHours();\n    const day = new Date(time).getDay();\n    \n    const relevantPatterns = this.patterns.filter((pattern: any) =>\n      pattern.contexts.includes(context) &&\n      pattern.temporal.timeOfDay.includes(hour) &&\n      pattern.temporal.dayOfWeek.includes(day)\n    );\n    \n    return relevantPatterns\n      .map((pattern: any) => ({\n        action: pattern.name,\n        probability: pattern.confidence * pattern.frequency / 100,\n      }))\n      .sort((a, b) => b.probability - a.probability)\n      .slice(0, 5);\n  }\n  \n  // Utility methods\n  private countSequentialPatterns(interactions: UserInteraction[], type: string): number {\n    let count = 0;\n    let sequential = 0;\n    \n    for (let i = 0; i < interactions.length; i++) {\n      if (interactions[i].type === type) {\n        sequential++;\n      } else {\n        if (sequential > 1) count++;\n        sequential = 0;\n      }\n    }\n    \n    return count;\n  }\n  \n  private calculateAveragePosition(interactions: UserInteraction[], axis: 'x' | 'y'): number {\n    const withPosition = interactions.filter((i: any) => i.position);\n    if (withPosition.length === 0) return 0;\n    \n    return withPosition.reduce((sum, i) => sum + i.position![axis], 0) / withPosition.length;\n  }\n  \n  private calculatePositionVariance(interactions: UserInteraction[]): number {\n    const withPosition = interactions.filter((i: any) => i.position);\n    if (withPosition.length === 0) return 0;\n    \n    const avgX = this.calculateAveragePosition(interactions, 'x');\n    const avgY = this.calculateAveragePosition(interactions, 'y');\n    \n    const variance = withPosition.reduce((sum, i) => {\n      const dx = i.position!.x - avgX;\n      const dy = i.position!.y - avgY;\n      return sum + (dx * dx + dy * dy);\n    }, 0) / withPosition.length;\n    \n    return Math.sqrt(variance);\n  }\n  \n  private calculateContextSwitchRate(interactions: UserInteraction[]): number {\n    if (interactions.length < 2) return 0;\n    \n    let switches = 0;\n    for (let i = 1; i < interactions.length; i++) {\n      if (interactions[i].context !== interactions[i - 1].context) {\n        switches++;\n      }\n    }\n    \n    return switches / (interactions.length - 1);\n  }\n  \n  private calculateHourDistribution(interactions: UserInteraction[]): number[] {\n    const distribution = new Array(24).fill(0);\n    \n    interactions.forEach((interaction: any) => {\n      const hour = new Date(interaction.timestamp).getHours();\n      distribution[hour]++;\n    });\n    \n    return distribution;\n  }\n  \n  private calculateOverallConfidence(interactions: UserInteraction[]): number {\n    if (interactions.length < 10) return 0.1;\n    if (interactions.length < 50) return 0.3;\n    if (interactions.length < 200) return 0.6;\n    if (interactions.length < 500) return 0.8;\n    return 0.9;\n  }\n  \n  private updateModelsIncremental(features: Record<string, number>) {\n    // Simplified incremental learning - in production would use proper ML algorithms\n    Object.entries(features).forEach(([feature, value]) => {\n      let model = this.models.get(feature);\n      if (!model) {\n        model = {\n          type: 'linear',\n          features: [feature],\n          weights: [1],\n          bias: 0,\n          accuracy: 0.5,\n          lastTrained: Date.now(),\n        };\n        this.models.set(feature, model);\n      }\n      \n      // Simple weight update (would use gradient descent in production)\n      model.weights[0] = model.weights[0] * 0.99 + value * 0.01;\n      model.lastTrained = Date.now();\n    });\n  }\n}\n\n// Global AI personalization engine\nconst aiPersonalizationEngine = new AIPersonalizationEngine();\n\n// React hooks for AI personalization\nexport const useAIPersonalization = (userId: string) => {\n  const [profile, setProfile] = useState<PersonalizationProfile | null>(null);\n  const [recommendations, setRecommendations] = useState<PersonalizationRecommendation[]>([]);\n  const [isLearning, setIsLearning] = useState(false);\n  \n  const recordInteraction = useCallback((interaction: Omit<UserInteraction, 'id' | 'timestamp'>) => {\n    const fullInteraction: UserInteraction = {\n      ...interaction,\n      id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n      timestamp: Date.now(),\n    };\n    \n    aiPersonalizationEngine.addInteraction(fullInteraction);\n  }, []);\n  \n  const updateProfile = useCallback(() => {\n    setIsLearning(true);\n    const newProfile = aiPersonalizationEngine.generatePersonalizationProfile(userId);\n    setProfile(newProfile);\n    \n    const newRecommendations = aiPersonalizationEngine.generateRecommendations(userId);\n    setRecommendations(newRecommendations);\n    setIsLearning(false);\n  }, [userId]);\n  \n  const predictBehavior = useCallback((context: string) => {\n    return aiPersonalizationEngine.predictBehavior(context);\n  }, []);\n  \n  // Auto-update profile periodically\n  useEffect(() => {\n    const interval = setInterval(updateProfile, 30000); // Every 30 seconds\n    updateProfile(); // Initial update\n    \n    return () => clearInterval(interval);\n  }, [updateProfile]);\n  \n  return {\n    profile,\n    recommendations,\n    isLearning,\n    recordInteraction,\n    updateProfile,\n    predictBehavior,\n  };\n};\n\n// Hook for automatic interaction recording\nexport const useInteractionRecording = (componentId: string, userId: string) => {\n  const { recordInteraction } = useAIPersonalization(userId);\n  const startTime = useRef<number>(0);\n  \n  const startInteraction = useCallback((type: UserInteraction['type'], context?: string) => {\n    startTime.current = Date.now();\n    return {\n      type,\n      target: componentId,\n      context: context || window.location.pathname,\n    };\n  }, [componentId]);\n  \n  const endInteraction = useCallback((interactionStart: any, position?: { x: number; y: number }) => {\n    const duration = Date.now() - startTime.current;\n    recordInteraction({\n      ...interactionStart,\n      duration,\n      position,\n    });\n  }, [recordInteraction]);\n  \n  return {\n    startInteraction,\n    endInteraction,\n  };\n};\n\nexport default aiPersonalizationEngine;", "import React from \"react\";\nimport { Chart, Plugin } from \"chart.js\";\nimport { ChartDataPoint } from \"../types\";\n\ntype GalileoChartType = \"line\" | \"bar\" | \"scatter\" | \"bubble\";\n\ninterface GalileoVector {\n  x: number;\n  y: number;\n}\n\ninterface GalileoRipple {\n  x: number;\n  y: number;\n  radius: number;\n  maxRadius: number;\n  opacity: number;\n  startTime: number;\n  color: string;\n}\n\ninterface MagneticElementData {\n  originalX: number;\n  originalY: number;\n  currentX: number;\n  currentY: number;\n  influence: number;\n}\n\ninterface PositionedChartElement {\n  x: number;\n  y: number;\n}\n\ninterface HoveredElement {\n  element: PositionedChartElement;\n  index: number;\n  distance: number;\n}\n\ninterface GalileoPluginState {\n  hoveredElement: HoveredElement | null;\n  activeElements: Map<number, MagneticElementData>;\n  ripples: GalileoRipple[];\n  mousePosition: GalileoVector;\n}\n\ntype GalileoChartInstance = Chart<GalileoChartType> & {\n  galileoConfig?: Required<AuraInteractionConfig>;\n  galileoState?: GalileoPluginState;\n  galileoCleanup?: () => void;\n};\n\nexport interface AuraInteractionConfig {\n  /** Enable magnetic effect on data points */\n  magneticEffect?: boolean;\n  /** Magnetic strength */\n  magneticStrength?: number;\n  /** Magnetic range in pixels */\n  magneticRange?: number;\n  /** Enable ripple effect on click */\n  rippleEffect?: boolean;\n  /** Ripple color */\n  rippleColor?: string;\n  /** Ripple duration */\n  rippleDuration?: number;\n  /** Enable hover glow */\n  hoverGlow?: boolean;\n  /** Glow color */\n  glowColor?: string;\n  /** Glow intensity */\n  glowIntensity?: number;\n  /** Enable physics-based animations */\n  physicsAnimations?: boolean;\n  /** Spring configuration */\n  springConfig?: {\n    stiffness: number;\n    damping: number;\n    mass: number;\n  };\n}\n\n/**\n * @deprecated Renamed to `AuraInteractionConfig` for AuraGlass 3.0.7.\n */\nexport type GalileoInteractionConfig = AuraInteractionConfig;\n\nexport interface ElementAnimationTarget {\n  elementId: string;\n  datasetIndex: number;\n  dataIndex: number;\n  dataPoint: ChartDataPoint;\n  position: GalileoVector;\n  velocity: GalileoVector;\n  target: GalileoVector;\n  isAnimating: boolean;\n  magneticInfluence: number;\n}\n\nexport interface AuraPluginContext {\n  elementAnimationTargets: Map<string, ElementAnimationTarget>;\n  setElementAnimationTargets: React.Dispatch<\n    React.SetStateAction<Map<string, ElementAnimationTarget>>\n  >;\n  getElementPhysicsOptions: (\n    dataPoint: ChartDataPoint,\n    datasetIndex: number,\n    dataIndex: number\n  ) => {\n    stiffness: number;\n    damping: number;\n    mass: number;\n    magneticStrength: number;\n  };\n}\n\n/**\n * @deprecated Renamed to `AuraPluginContext` for AuraGlass 3.0.7.\n */\nexport type GalileoPluginContext = AuraPluginContext;\n\nconst DEFAULT_CONFIG: Required<AuraInteractionConfig> = {\n  magneticEffect: true,\n  magneticStrength: 0.3,\n  magneticRange: 50,\n  rippleEffect: true,\n  rippleColor: \"rgba(226, 232, 240, 0.42)\",\n  rippleDuration: 600,\n  hoverGlow: true,\n  glowColor: \"rgba(112, 214, 255, 0.4)\",\n  glowIntensity: 0.6,\n  physicsAnimations: true,\n  springConfig: {\n    stiffness: 200,\n    damping: 25,\n    mass: 1,\n  },\n};\n\nfunction asGalileoChart(chart: Chart): GalileoChartInstance {\n  return chart as GalileoChartInstance;\n}\n\nfunction getPositionedElement(element: unknown): PositionedChartElement | null {\n  if (\n    typeof element === \"object\" &&\n    element !== null &&\n    \"x\" in element &&\n    \"y\" in element\n  ) {\n    const candidate = element as { x: unknown; y: unknown };\n    if (typeof candidate.x === \"number\" && typeof candidate.y === \"number\") {\n      return candidate as PositionedChartElement;\n    }\n  }\n\n  return null;\n}\n\nfunction getGalileoState(\n  chart: GalileoChartInstance\n): GalileoPluginState | undefined {\n  return chart.galileoState;\n}\n\nfunction getGalileoConfig(\n  chart: GalileoChartInstance\n): Required<AuraInteractionConfig> | undefined {\n  return chart.galileoConfig;\n}\n\nexport const AuraElementInteractionPlugin: Plugin<GalileoChartType> = {\n  id: \"auraElementInteraction\",\n\n  defaults: DEFAULT_CONFIG,\n\n  beforeInit: (chart, args, options) => {\n    const galileoChart = asGalileoChart(chart);\n    const config = {\n      ...DEFAULT_CONFIG,\n      ...options,\n    } as Required<AuraInteractionConfig>;\n\n    // Store configuration on chart instance\n    galileoChart.galileoConfig = config;\n    galileoChart.galileoState = {\n      hoveredElement: null,\n      activeElements: new Map(),\n      ripples: [],\n      mousePosition: { x: 0, y: 0 },\n    };\n  },\n\n  afterInit: (chart, args, options) => {\n    const galileoChart = asGalileoChart(chart);\n    const canvas = chart.canvas;\n    const config = getGalileoConfig(galileoChart);\n    const state = getGalileoState(galileoChart);\n    if (!config || !state) return;\n\n    // Mouse move handler for magnetic effects\n    const handleMouseMove = (event: MouseEvent) => {\n      const rect = canvas.getBoundingClientRect();\n      const x = event.clientX - rect.left;\n      const y = event.clientY - rect.top;\n\n      state.mousePosition = { x, y };\n\n      if (config.magneticEffect) {\n        updateMagneticEffects(chart, x, y);\n      }\n\n      if (config.hoverGlow) {\n        updateHoverGlow(chart, x, y);\n      }\n\n      chart.update(\"none\");\n    };\n\n    // Click handler for ripple effects\n    const handleClick = (event: MouseEvent) => {\n      if (!config.rippleEffect) return;\n\n      const rect = canvas.getBoundingClientRect();\n      const x = event.clientX - rect.left;\n      const y = event.clientY - rect.top;\n\n      createRipple(chart, x, y);\n    };\n\n    // Mouse leave handler\n    const handleMouseLeave = () => {\n      state.hoveredElement = null;\n      state.activeElements.clear();\n      chart.update(\"none\");\n    };\n\n    canvas.addEventListener(\"mousemove\", handleMouseMove);\n    canvas.addEventListener(\"click\", handleClick);\n    canvas.addEventListener(\"mouseleave\", handleMouseLeave);\n\n    // Store cleanup function\n    galileoChart.galileoCleanup = () => {\n      canvas.removeEventListener(\"mousemove\", handleMouseMove);\n      canvas.removeEventListener(\"click\", handleClick);\n      canvas.removeEventListener(\"mouseleave\", handleMouseLeave);\n    };\n  },\n\n  beforeDestroy: (chart) => {\n    const cleanup = asGalileoChart(chart).galileoCleanup;\n    if (cleanup) cleanup();\n  },\n\n  afterDraw: (chart, args, options) => {\n    const galileoChart = asGalileoChart(chart);\n    const ctx = chart.ctx;\n    const state = getGalileoState(galileoChart);\n    const config = getGalileoConfig(galileoChart);\n    if (!state || !config) return;\n\n    // Draw ripples\n    if ((state.ripples?.length || 0) > 0) {\n      drawRipples(ctx, state.ripples);\n      updateRipples(state.ripples, config.rippleDuration);\n    }\n\n    // Draw hover glow\n    if (state.hoveredElement) {\n      drawHoverGlow(ctx, state.hoveredElement, config);\n    }\n\n    // Draw magnetic effects\n    if (config.magneticEffect && state.activeElements.size > 0) {\n      drawMagneticEffects(ctx, state.activeElements);\n    }\n  },\n};\n\n/**\n * @deprecated Renamed to `AuraElementInteractionPlugin` for AuraGlass 3.0.7.\n * This alias preserves existing Chart.js integrations that register the legacy\n * plugin name or configure `plugins.galileoElementInteraction`.\n */\nexport const GalileoElementInteractionPlugin: Plugin<GalileoChartType> = {\n  ...AuraElementInteractionPlugin,\n  id: \"galileoElementInteraction\",\n};\n\n// Helper functions\nfunction updateMagneticEffects(chart: Chart, mouseX: number, mouseY: number) {\n  const galileoChart = asGalileoChart(chart);\n  const config = getGalileoConfig(galileoChart);\n  const state = getGalileoState(galileoChart);\n  if (!config || !state) return;\n\n  const meta = chart.getDatasetMeta(0);\n\n  if (!meta || !meta.data) return;\n\n  meta.data?.forEach((element, index: number) => {\n    const positionedElement = getPositionedElement(element);\n    if (!positionedElement) return;\n\n    const centerX = positionedElement.x;\n    const centerY = positionedElement.y;\n    const distance = Math.sqrt(\n      (mouseX - centerX) ** 2 + (mouseY - centerY) ** 2\n    );\n\n    if (distance <= config.magneticRange) {\n      const influence = 1 - distance / config.magneticRange;\n      const deltaX = (mouseX - centerX) * config.magneticStrength * influence;\n      const deltaY = (mouseY - centerY) * config.magneticStrength * influence;\n\n      state.activeElements.set(index, {\n        originalX: centerX,\n        originalY: centerY,\n        currentX: centerX + deltaX,\n        currentY: centerY + deltaY,\n        influence,\n      });\n\n      // Apply magnetic offset\n      positionedElement.x = centerX + deltaX;\n      positionedElement.y = centerY + deltaY;\n    } else {\n      // Reset to original position\n      if (state.activeElements.has(index)) {\n        const original = state.activeElements.get(index);\n        if (original) {\n          positionedElement.x = original.originalX;\n          positionedElement.y = original.originalY;\n        }\n        state.activeElements.delete(index);\n      }\n    }\n  });\n}\n\nfunction updateHoverGlow(chart: Chart, mouseX: number, mouseY: number) {\n  const state = getGalileoState(asGalileoChart(chart));\n  if (!state) return;\n\n  const meta = chart.getDatasetMeta(0);\n\n  if (!meta || !meta.data) return;\n\n  let closestElement: HoveredElement | null = null;\n  let minDistance = Infinity;\n\n  meta.data?.forEach((element, index: number) => {\n    const positionedElement = getPositionedElement(element);\n    if (!positionedElement) return;\n\n    const distance = Math.sqrt(\n      (mouseX - positionedElement.x) ** 2 + (mouseY - positionedElement.y) ** 2\n    );\n\n    if (distance < minDistance && distance <= 20) {\n      // 20px hover radius\n      minDistance = distance;\n      closestElement = { element: positionedElement, index, distance };\n    }\n  });\n\n  state.hoveredElement = closestElement;\n}\n\nfunction createRipple(chart: Chart, x: number, y: number) {\n  const galileoChart = asGalileoChart(chart);\n  const state = getGalileoState(galileoChart);\n  const config = getGalileoConfig(galileoChart);\n  if (!state || !config) return;\n\n  const ripple: GalileoRipple = {\n    x,\n    y,\n    radius: 0,\n    maxRadius: 100,\n    opacity: 1,\n    startTime: Date.now(),\n    color: config.rippleColor,\n  };\n\n  state.ripples.push(ripple);\n}\n\nfunction drawRipples(ctx: CanvasRenderingContext2D, ripples: GalileoRipple[]) {\n  ripples.forEach((ripple) => {\n    ctx.save();\n    ctx.globalAlpha = ripple.opacity;\n    ctx.strokeStyle = ripple.color;\n    ctx.lineWidth = 2;\n    ctx.beginPath();\n    ctx.arc(ripple.x, ripple.y, ripple.radius, 0, Math.PI * 2);\n    ctx.stroke();\n    ctx.restore();\n  });\n}\n\nfunction updateRipples(ripples: GalileoRipple[], duration: number) {\n  const now = Date.now();\n\n  for (let i = (ripples?.length || 0) - 1; i >= 0; i--) {\n    const ripple = ripples[i];\n    const elapsed = now - ripple.startTime;\n    const progress = elapsed / duration;\n\n    if (progress >= 1) {\n      ripples.splice(i, 1);\n    } else {\n      ripple.radius = ripple.maxRadius * progress;\n      ripple.opacity = 1 - progress;\n    }\n  }\n}\n\nfunction drawHoverGlow(\n  ctx: CanvasRenderingContext2D,\n  hoveredElement: HoveredElement | null,\n  config: Required<AuraInteractionConfig>\n) {\n  if (!hoveredElement) return;\n\n  const { element } = hoveredElement;\n\n  ctx.save();\n  ctx.globalAlpha = config.glowIntensity;\n  ctx.shadowColor = config.glowColor;\n  ctx.shadowBlur = 20;\n  ctx.fillStyle = config.glowColor;\n  ctx.beginPath();\n  ctx.arc(element.x, element.y, 8, 0, Math.PI * 2);\n  ctx.fill();\n  ctx.restore();\n}\n\nfunction drawMagneticEffects(\n  ctx: CanvasRenderingContext2D,\n  activeElements: Map<number, MagneticElementData>\n) {\n  activeElements.forEach((elementData) => {\n    const { originalX, originalY, currentX, currentY, influence } = elementData;\n\n    // Draw connection line\n    ctx.save();\n    ctx.globalAlpha = influence * 0.3;\n    ctx.strokeStyle = \"rgba(226, 232, 240, 0.42)\";\n    ctx.lineWidth = 1;\n    ctx.setLineDash([2, 4]);\n    ctx.beginPath();\n    ctx.moveTo(originalX, originalY);\n    ctx.lineTo(currentX, currentY);\n    ctx.stroke();\n    ctx.restore();\n  });\n}\n\nexport default AuraElementInteractionPlugin;\n", "import React from 'react';\nexport interface InterpolationPoint {\n  x: number;\n  y: number;\n  tension?: number;\n  bias?: number;\n  continuity?: number;\n}\n\nexport interface InterpolationConfig {\n  type: 'linear' | 'cubic' | 'hermite' | 'bezier' | 'spline';\n  tension?: number;\n  bias?: number;\n  continuity?: number;\n  alpha?: number; // For centripetal Catmull-Rom\n}\n\nexport class InterpolationUtils {\n  /**\n   * Linear interpolation between two points\n   */\n  static lerp(a: number, b: number, t: number): number {\n    return a + (b - a) * t;\n  }\n\n  /**\n   * Linear interpolation for 2D points\n   */\n  static lerp2D(\n    p1: { x: number; y: number },\n    p2: { x: number; y: number },\n    t: number\n  ): { x: number; y: number } {\n    return {\n      x: this.lerp(p1.x, p2.x, t),\n      y: this.lerp(p1.y, p2.y, t),\n    };\n  }\n\n  /**\n   * Cubic interpolation using Catmull-Rom spline\n   */\n  static catmullRom(\n    p0: InterpolationPoint,\n    p1: InterpolationPoint,\n    p2: InterpolationPoint,\n    p3: InterpolationPoint,\n    t: number,\n    alpha: number = 0.5\n  ): { x: number; y: number } {\n    // Centripetal Catmull-Rom\n    const t0 = 0;\n    const t1 = this.getT(t0, p0, p1, alpha);\n    const t2 = this.getT(t1, p1, p2, alpha);\n    const t3 = this.getT(t2, p2, p3, alpha);\n\n    const tNormalized = t1 + (t2 - t1) * t;\n\n    const a1x = (t1 - tNormalized) / (t1 - t0) * p0.x + (tNormalized - t0) / (t1 - t0) * p1.x;\n    const a1y = (t1 - tNormalized) / (t1 - t0) * p0.y + (tNormalized - t0) / (t1 - t0) * p1.y;\n\n    const a2x = (t2 - tNormalized) / (t2 - t1) * p1.x + (tNormalized - t1) / (t2 - t1) * p2.x;\n    const a2y = (t2 - tNormalized) / (t2 - t1) * p1.y + (tNormalized - t1) / (t2 - t1) * p2.y;\n\n    const a3x = (t3 - tNormalized) / (t3 - t2) * p2.x + (tNormalized - t2) / (t3 - t2) * p3.x;\n    const a3y = (t3 - tNormalized) / (t3 - t2) * p2.y + (tNormalized - t2) / (t3 - t2) * p3.y;\n\n    const b1x = (t2 - tNormalized) / (t2 - t0) * a1x + (tNormalized - t0) / (t2 - t0) * a2x;\n    const b1y = (t2 - tNormalized) / (t2 - t0) * a1y + (tNormalized - t0) / (t2 - t0) * a2y;\n\n    const b2x = (t3 - tNormalized) / (t3 - t1) * a2x + (tNormalized - t1) / (t3 - t1) * a3x;\n    const b2y = (t3 - tNormalized) / (t3 - t1) * a2y + (tNormalized - t1) / (t3 - t1) * a3y;\n\n    const cx = (t2 - tNormalized) / (t2 - t1) * b1x + (tNormalized - t1) / (t2 - t1) * b2x;\n    const cy = (t2 - tNormalized) / (t2 - t1) * b1y + (tNormalized - t1) / (t2 - t1) * b2y;\n\n    return { x: cx, y: cy };\n  }\n\n  private static getT(t: number, p0: InterpolationPoint, p1: InterpolationPoint, alpha: number): number {\n    const dx = p1.x - p0.x;\n    const dy = p1.y - p0.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    return t + Math.pow(distance, alpha);\n  }\n\n  /**\n   * Hermite interpolation\n   */\n  static hermite(\n    p0: InterpolationPoint,\n    p1: InterpolationPoint,\n    m0: { x: number; y: number },\n    m1: { x: number; y: number },\n    t: number\n  ): { x: number; y: number } {\n    const t2 = t * t;\n    const t3 = t2 * t;\n\n    const h00 = 2 * t3 - 3 * t2 + 1;\n    const h10 = t3 - 2 * t2 + t;\n    const h01 = -2 * t3 + 3 * t2;\n    const h11 = t3 - t2;\n\n    return {\n      x: h00 * p0.x + h10 * m0.x + h01 * p1.x + h11 * m1.x,\n      y: h00 * p0.y + h10 * m0.y + h01 * p1.y + h11 * m1.y,\n    };\n  }\n\n  /**\n   * Cubic Bezier interpolation\n   */\n  static bezier(\n    p0: InterpolationPoint,\n    p1: InterpolationPoint,\n    p2: InterpolationPoint,\n    p3: InterpolationPoint,\n    t: number\n  ): { x: number; y: number } {\n    const u = 1 - t;\n    const tt = t * t;\n    const uu = u * u;\n    const uuu = uu * u;\n    const ttt = tt * t;\n\n    return {\n      x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,\n      y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,\n    };\n  }\n\n  /**\n   * B-spline interpolation\n   */\n  static bSpline(\n    points: InterpolationPoint[],\n    t: number,\n    degree: number = 3\n  ): { x: number; y: number } {\n    const n = points.length - 1;\n    const k = Math.floor(t * (n - degree + 1));\n    const u = (t * (n - degree + 1)) - k;\n\n    let x = 0;\n    let y = 0;\n\n    for (let i = 0; i <= degree; i++) {\n      const weight = this.bSplineBasis(i, degree, u);\n      x += weight * points[k + i].x;\n      y += weight * points[k + i].y;\n    }\n\n    return { x, y };\n  }\n\n  private static bSplineBasis(i: number, p: number, u: number): number {\n    if (p === 0) {\n      return (u >= 0 && u <= 1) ? 1 : 0;\n    }\n\n    const left = (u - i) / p * this.bSplineBasis(i, p - 1, u);\n    const right = (i + p + 1 - u) / p * this.bSplineBasis(i + 1, p - 1, u);\n\n    return left + right;\n  }\n\n  /**\n   * Smooth step interpolation\n   */\n  static smoothStep(edge0: number, edge1: number, x: number): number {\n    const t = Math.max(0, Math.min(1, (x - edge0) / (edge1 - edge0)));\n    return t * t * (3 - 2 * t);\n  }\n\n  /**\n   * Smoother step interpolation\n   */\n  static smootherStep(edge0: number, edge1: number, x: number): number {\n    const t = Math.max(0, Math.min(1, (x - edge0) / (edge1 - edge0)));\n    return t * t * t * (t * (t * 6 - 15) + 10);\n  }\n\n  /**\n   * Interpolate along a path defined by points\n   */\n  static interpolatePath(\n    points: InterpolationPoint[],\n    config: InterpolationConfig,\n    t: number\n  ): { x: number; y: number } {\n    if (points.length === 0) return { x: 0, y: 0 };\n    if (points.length === 1) return { x: points[0].x, y: points[0].y };\n    if (points.length === 2) return this.lerp2D(points[0], points[1], t);\n\n    switch (config.type) {\n      case 'linear':\n        return this.interpolateLinear(points, t);\n\n      case 'cubic':\n        return this.interpolateCubic(points, t, config.alpha);\n\n      case 'hermite':\n        return this.interpolateHermite(points, t, config.tension, config.bias, config.continuity);\n\n      case 'bezier':\n        return this.interpolateBezier(points, t);\n\n      case 'spline':\n        return this.bSpline(points, t);\n\n      default:\n        return this.interpolateLinear(points, t);\n    }\n  }\n\n  private static interpolateLinear(points: InterpolationPoint[], t: number): { x: number; y: number } {\n    const totalSegments = points.length - 1;\n    const segmentIndex = Math.floor(t * totalSegments);\n    const segmentT = (t * totalSegments) % 1;\n\n    if (segmentIndex >= totalSegments) {\n      return { x: points[points.length - 1].x, y: points[points.length - 1].y };\n    }\n\n    return this.lerp2D(points[segmentIndex], points[segmentIndex + 1], segmentT);\n  }\n\n  private static interpolateCubic(points: InterpolationPoint[], t: number, alpha: number = 0.5): { x: number; y: number } {\n    const n = points.length - 1;\n    const i = Math.floor(t * n);\n    const u = (t * n) % 1;\n\n    if (i === 0) {\n      return this.catmullRom(points[0], points[0], points[1], points[2], u, alpha);\n    } else if (i === n) {\n      return this.catmullRom(points[n - 2], points[n - 1], points[n], points[n], u, alpha);\n    } else {\n      return this.catmullRom(points[i - 1], points[i], points[i + 1], points[i + 2], u, alpha);\n    }\n  }\n\n  private static interpolateHermite(\n    points: InterpolationPoint[],\n    t: number,\n    tension: number = 0,\n    bias: number = 0,\n    continuity: number = 0\n  ): { x: number; y: number } {\n    const n = points.length - 1;\n    const i = Math.floor(t * n);\n    const u = (t * n) % 1;\n\n    if (i === 0) {\n      const m1 = this.calculateTangent(points[0], points[1], points[2], tension, bias, continuity);\n      const m2 = this.calculateTangent(points[1], points[0], points[2], tension, bias, continuity);\n      return this.hermite(points[0], points[1], { x: 0, y: 0 }, m2, u);\n    } else if (i === n) {\n      const m1 = this.calculateTangent(points[n - 1], points[n - 2], points[n], tension, bias, continuity);\n      const m2 = this.calculateTangent(points[n], points[n - 1], points[n - 1], tension, bias, continuity);\n      return this.hermite(points[n - 1], points[n], m1, { x: 0, y: 0 }, u);\n    } else {\n      const m1 = this.calculateTangent(points[i], points[i - 1], points[i + 1], tension, bias, continuity);\n      const m2 = this.calculateTangent(points[i + 1], points[i], points[i + 2], tension, bias, continuity);\n      return this.hermite(points[i], points[i + 1], m1, m2, u);\n    }\n  }\n\n  private static calculateTangent(\n    p: InterpolationPoint,\n    prev: InterpolationPoint,\n    next: InterpolationPoint,\n    tension: number,\n    bias: number,\n    continuity: number\n  ): { x: number; y: number } {\n    const dPrev = { x: p.x - prev.x, y: p.y - prev.y };\n    const dNext = { x: next.x - p.x, y: next.y - p.y };\n\n    const dPrevLength = Math.sqrt(dPrev.x * dPrev.x + dPrev.y * dPrev.y);\n    const dNextLength = Math.sqrt(dNext.x * dNext.x + dNext.y * dNext.y);\n\n    if (dPrevLength === 0 || dNextLength === 0) {\n      return { x: 0, y: 0 };\n    }\n\n    const tensionFactor = (1 - tension) * 0.5;\n    const biasFactor = 1 + bias;\n    const continuityFactor = 1 - continuity;\n\n    return {\n      x: tensionFactor * ((dPrev.x / dPrevLength) * biasFactor + (dNext.x / dNextLength) * (2 - biasFactor)) * continuityFactor,\n      y: tensionFactor * ((dPrev.y / dPrevLength) * biasFactor + (dNext.y / dNextLength) * (2 - biasFactor)) * continuityFactor,\n    };\n  }\n\n  private static interpolateBezier(points: InterpolationPoint[], t: number): { x: number; y: number } {\n    // For Bezier, we need control points. This is a simplified implementation.\n    // In practice, you'd need to specify control points separately.\n    const n = points.length - 1;\n    const i = Math.floor(t * n);\n    const u = (t * n) % 1;\n\n    if (i === 0) {\n      return this.bezier(points[0], points[0], points[1], points[2], u);\n    } else if (i === n) {\n      return this.bezier(points[n - 2], points[n - 1], points[n], points[n], u);\n    } else {\n      return this.bezier(points[i - 1], points[i], points[i + 1], points[i + 2], u);\n    }\n  }\n}\n\n// Utility functions for common interpolation patterns\nexport const interpolate = {\n  linear: (a: number, b: number, t: number) => InterpolationUtils.lerp(a, b, t),\n  smooth: (a: number, b: number, t: number) => InterpolationUtils.smoothStep(a, b, t),\n  smoother: (a: number, b: number, t: number) => InterpolationUtils.smootherStep(a, b, t),\n\n  // Color interpolation\n  color: (color1: string, color2: string, t: number): string => {\n    // Parse hex colors\n    const c1 = color1.replace('#', '');\n    const c2 = color2.replace('#', '');\n\n    const r1 = parseInt(c1.substr(0, 2), 16);\n    const g1 = parseInt(c1.substr(2, 2), 16);\n    const b1 = parseInt(c1.substr(4, 2), 16);\n\n    const r2 = parseInt(c2.substr(0, 2), 16);\n    const g2 = parseInt(c2.substr(2, 2), 16);\n    const b2 = parseInt(c2.substr(4, 2), 16);\n\n    const r = Math.round(InterpolationUtils.lerp(r1, r2, t));\n    const g = Math.round(InterpolationUtils.lerp(g1, g2, t));\n    const b = Math.round(InterpolationUtils.lerp(b1, b2, t));\n\n    return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n  },\n\n  // Path interpolation\n  path: (points: InterpolationPoint[], config: InterpolationConfig, t: number) =>\n    InterpolationUtils.interpolatePath(points, config, t),\n\n  // Array interpolation\n  array: (arr1: number[], arr2: number[], t: number): number[] => {\n    const result: number[] = [];\n    const maxLength = Math.max(arr1.length, arr2.length);\n\n    for (let i = 0; i < maxLength; i++) {\n      const val1 = arr1[i] || 0;\n      const val2 = arr2[i] || 0;\n      result.push(InterpolationUtils.lerp(val1, val2, t));\n    }\n\n    return result;\n  },\n};\n", "\"use client\";\nimport React, {\n  useState,\n  useCallback,\n  useEffect,\n  useRef,\n  useMemo,\n} from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useAccessibility } from \"../../hooks/useAccessibility\";\n\nexport interface DataPoint {\n  id: string | number;\n  x: number | string | Date;\n  y: number;\n  category?: string;\n  label?: string;\n  metadata?: Record<string, unknown>;\n  color?: string;\n}\n\nexport interface ChartSeries {\n  id: string;\n  name: string;\n  data: DataPoint[];\n  color?: string;\n  type?: \"line\" | \"bar\" | \"area\" | \"scatter\";\n  visible?: boolean;\n}\n\nexport interface DrillDownLevel {\n  id: string;\n  name: string;\n  dataKey: string;\n  aggregation?: \"sum\" | \"avg\" | \"count\" | \"min\" | \"max\";\n}\n\nexport type ChartFilterPrimitiveValue =\n  | string\n  | number\n  | boolean\n  | Date\n  | null\n  | undefined;\n\nexport type ChartFilterValue =\n  | ChartFilterPrimitiveValue\n  | ChartFilterPrimitiveValue[]\n  | [ChartFilterPrimitiveValue, ChartFilterPrimitiveValue];\n\nexport interface ChartFilter {\n  field: string;\n  operator: \"equals\" | \"contains\" | \"greaterThan\" | \"lessThan\" | \"between\";\n  value: ChartFilterValue;\n}\n\nexport interface AdvancedDataVizProps {\n  data?: ChartSeries[];\n  type?: \"line\" | \"bar\" | \"pie\" | \"scatter\" | \"heatmap\" | \"combo\";\n  title?: string;\n  subtitle?: string;\n  xAxisLabel?: string;\n  yAxisLabel?: string;\n  showLegend?: boolean;\n  showTooltip?: boolean;\n  showDataLabels?: boolean;\n  enableZoom?: boolean;\n  enablePan?: boolean;\n  enableCrosshair?: boolean;\n  enableAnimation?: boolean;\n  enableDrillDown?: boolean;\n  drillDownLevels?: DrillDownLevel[];\n  filters?: ChartFilter[];\n  onDataPointClick?: (point: DataPoint, series: ChartSeries) => void;\n  onDrillDown?: (level: DrillDownLevel, filters: ChartFilter[]) => void;\n  onExport?: (format: \"png\" | \"svg\" | \"csv\" | \"json\") => void;\n  width?: number;\n  height?: number;\n  className?: string;\n}\n\nconst EMPTY_CHART_SERIES: ChartSeries[] = [];\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  const numericValue =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim() !== \"\"\n        ? Number(value)\n        : fallback;\n  return Number.isFinite(numericValue) ? numericValue : fallback;\n};\n\nconst toXNumber = (value: DataPoint[\"x\"], fallback: number): number => {\n  if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  if (value instanceof Date) {\n    const time = value.getTime();\n    return Number.isFinite(time) ? time : fallback;\n  }\n  if (typeof value === \"string\" && value.trim() !== \"\") {\n    const numericValue = Number(value);\n    if (Number.isFinite(numericValue)) return numericValue;\n    const time = new Date(value).getTime();\n    return Number.isFinite(time) ? time : fallback;\n  }\n  return fallback;\n};\n\nconst isFinitePoint = (point: { x: number; y: number }) =>\n  Number.isFinite(point.x) && Number.isFinite(point.y);\n\ninterface ChartExportSeries {\n  series: string;\n  data: Array<\n    {\n      x: DataPoint[\"x\"];\n      y: number;\n      category?: string;\n      label?: string;\n    } & Record<string, unknown>\n  >;\n}\n\nconst isChartFilterPrimitiveValue = (\n  value: unknown\n): value is ChartFilterPrimitiveValue =>\n  value == null ||\n  typeof value === \"string\" ||\n  typeof value === \"number\" ||\n  typeof value === \"boolean\" ||\n  value instanceof Date;\n\n// Chart rendering utility functions\nconst createSVGPath = (\n  points: Array<{ x: number; y: number }>,\n  type: \"line\" | \"area\" = \"line\"\n) => {\n  const validPoints = points.filter(isFinitePoint);\n  if (validPoints.length === 0) return \"\";\n\n  let path = `M ${validPoints[0].x} ${validPoints[0].y}`;\n\n  for (let i = 1; i < validPoints.length; i++) {\n    path += ` L ${validPoints[i].x} ${validPoints[i].y}`;\n  }\n\n  if (type === \"area\") {\n    const firstPoint = validPoints[0];\n    const lastPoint = validPoints[validPoints.length - 1];\n    path += ` L ${lastPoint.x} 100 L ${firstPoint.x} 100 Z`;\n  }\n\n  return path;\n};\n\nconst scaleValue = (\n  value: number,\n  domain: [number, number],\n  range: [number, number]\n) => {\n  const [domainMin, domainMax] = domain;\n  const [rangeMin, rangeMax] = range;\n  if (\n    !Number.isFinite(value) ||\n    !Number.isFinite(domainMin) ||\n    !Number.isFinite(domainMax) ||\n    !Number.isFinite(rangeMin) ||\n    !Number.isFinite(rangeMax)\n  ) {\n    return rangeMin;\n  }\n  if (domainMax === domainMin) {\n    return rangeMin + (rangeMax - rangeMin) / 2;\n  }\n  return (\n    rangeMin +\n    ((value - domainMin) / (domainMax - domainMin)) * (rangeMax - rangeMin)\n  );\n};\n\nconst generateColors = (count: number): string[] => {\n  const colors = [\n    \"hsl(var(--glass-color-primary))\",\n    \"hsl(var(--glass-color-danger))\",\n    \"hsl(var(--glass-color-success))\",\n    \"hsl(var(--glass-color-warning))\",\n    \"#8B5CF6\",\n    \"#EC4899\",\n    \"#06B6D4\",\n    \"#84CC16\",\n    \"#F97316\",\n    \"#6366F1\",\n  ];\n\n  if (count <= colors.length) {\n    return colors.slice(0, count);\n  }\n\n  // Generate additional colors using HSL\n  const additionalColors = [];\n  for (let i = colors.length; i < count; i++) {\n    const hue = (i * 137.508) % 360; // Golden angle approximation\n    additionalColors.push(`hsl(${hue}, 70%, 50%)`);\n  }\n\n  return [...colors, ...additionalColors];\n};\n\nconst formatValue = (value: unknown, type?: string): string => {\n  if (typeof value === \"number\") {\n    if (type === \"currency\") {\n      return new Intl.NumberFormat(\"en-US\", {\n        style: \"currency\",\n        currency: \"USD\",\n      }).format(value);\n    } else if (type === \"percentage\") {\n      return `${(value * 100).toFixed(1)}%`;\n    } else if (value > 1000000) {\n      return `${(value / 1000000).toFixed(1)}M`;\n    } else if (value > 1000) {\n      return `${(value / 1000).toFixed(1)}K`;\n    }\n    return value.toLocaleString();\n  }\n\n  if (value instanceof Date) {\n    return value.toLocaleDateString();\n  }\n\n  return String(value);\n};\n\nexport const GlassAdvancedDataViz: React.FC<AdvancedDataVizProps> = ({\n  data,\n  type = \"line\",\n  title,\n  subtitle,\n  xAxisLabel,\n  yAxisLabel,\n  showLegend = true,\n  showTooltip = true,\n  showDataLabels = false,\n  enableZoom = true,\n  enablePan = true,\n  enableCrosshair = true,\n  enableAnimation = true,\n  enableDrillDown = false,\n  drillDownLevels = [],\n  filters = [],\n  onDataPointClick,\n  onDrillDown,\n  onExport,\n  width = 800,\n  height = 400,\n  className,\n}) => {\n  const [tooltip, setTooltip] = useState<{\n    visible: boolean;\n    x: number;\n    y: number;\n    content: string;\n  }>({ visible: false, x: 0, y: 0, content: \"\" });\n\n  const dataArray = data ?? EMPTY_CHART_SERIES;\n  const [selectedSeries, setSelectedSeries] = useState<string[]>(\n    dataArray.map((s) => s.id)\n  );\n\n  const [zoomLevel, setZoomLevel] = useState({ x: [0, 1], y: [0, 1] });\n  const [panOffset, setPanOffset] = useState({ x: 0, y: 0 });\n  const [currentDrillLevel, setCurrentDrillLevel] = useState(0);\n  const [appliedFilters, setAppliedFilters] = useState<ChartFilter[]>(filters);\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  const svgRef = useRef<SVGSVGElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const accessibility = useAccessibility();\n\n  // Filter and process data\n  const processedData = useMemo(() => {\n    if (!dataArray || dataArray.length === 0) return [];\n    return dataArray\n      .map((series) => ({\n        ...series,\n        data: (Array.isArray(series.data) ? series.data : [])\n          .map((point, pointIndex) => ({\n            ...point,\n            id: point?.id ?? `${series.id}-${pointIndex}`,\n            x: point?.x ?? pointIndex,\n            y: toFiniteNumber(point?.y),\n          }))\n          .filter((point) => Number.isFinite(point.y))\n          .filter((point) => {\n            return appliedFilters.every((filter) => {\n              const fieldValue = point.metadata?.[filter.field] ?? point.y;\n\n              switch (filter.operator) {\n                case \"equals\":\n                  return fieldValue === filter.value;\n                case \"contains\":\n                  return String(fieldValue)\n                    .toLowerCase()\n                    .includes(String(filter.value).toLowerCase());\n                case \"greaterThan\":\n                  return Number(fieldValue) > Number(filter.value);\n                case \"lessThan\":\n                  return Number(fieldValue) < Number(filter.value);\n                case \"between\": {\n                  const rangeValue = Array.isArray(filter.value)\n                    ? filter.value\n                    : [];\n                  return (\n                    Number(fieldValue) >= Number(rangeValue[0]) &&\n                    Number(fieldValue) <= Number(rangeValue[1])\n                  );\n                }\n                default:\n                  return true;\n              }\n            });\n          }),\n      }))\n      .filter((series) => selectedSeries.includes(series.id));\n  }, [dataArray, appliedFilters, selectedSeries]);\n\n  // Calculate chart dimensions and scales\n  const chartDimensions = useMemo((): {\n    margin: { top: number; right: number; bottom: number; left: number };\n    chartWidth: number;\n    chartHeight: number;\n    xDomain: [number, number];\n    yDomain: [number, number];\n  } => {\n    const margin = { top: 20, right: 20, bottom: 60, left: 60 };\n    const chartWidth = Math.max(1, width - margin.left - margin.right);\n    const chartHeight = Math.max(1, height - margin.top - margin.bottom);\n\n    // Calculate data bounds\n    const allPoints = processedData.flatMap((s) => s.data);\n\n    let xMin = Infinity,\n      xMax = -Infinity;\n    let yMin = Infinity,\n      yMax = -Infinity;\n\n    allPoints.forEach((point, index) => {\n      const xVal = toXNumber(point.x, index);\n      xMin = Math.min(xMin, xVal);\n      xMax = Math.max(xMax, xVal);\n      yMin = Math.min(yMin, point.y);\n      yMax = Math.max(yMax, point.y);\n    });\n\n    if (\n      allPoints.length === 0 ||\n      !Number.isFinite(xMin) ||\n      !Number.isFinite(xMax) ||\n      !Number.isFinite(yMin) ||\n      !Number.isFinite(yMax)\n    ) {\n      xMin = 0;\n      xMax = 1;\n      yMin = 0;\n      yMax = 1;\n    }\n\n    // Add padding\n    const xRange = xMax - xMin;\n    const yRange = yMax - yMin;\n    const xPadding =\n      xRange === 0 ? (xMax === 0 ? 1 : Math.abs(xMax) * 0.05) : xRange * 0.05;\n    const yPadding =\n      yRange === 0 ? (yMax === 0 ? 1 : Math.abs(yMax) * 0.1) : yRange * 0.1;\n\n    xMin -= xPadding;\n    xMax += xPadding;\n    yMin -= yPadding;\n    yMax += yPadding;\n\n    // Apply zoom\n    const zoomedXMin = xMin + (xMax - xMin) * zoomLevel.x[0];\n    const zoomedXMax = xMin + (xMax - xMin) * zoomLevel.x[1];\n    const zoomedYMin = yMin + (yMax - yMin) * zoomLevel.y[0];\n    const zoomedYMax = yMin + (yMax - yMin) * zoomLevel.y[1];\n\n    return {\n      margin,\n      chartWidth,\n      chartHeight,\n      xDomain: [zoomedXMin, zoomedXMax] as [number, number],\n      yDomain: [zoomedYMin, zoomedYMax] as [number, number],\n    };\n  }, [processedData, width, height, zoomLevel]);\n\n  // Generate chart colors\n  const seriesColors = useMemo(() => {\n    const colors = generateColors(processedData.length);\n    const colorMap: Record<string, string> = {};\n\n    processedData.forEach((series, index) => {\n      colorMap[series.id] = series.color || colors[index];\n    });\n\n    return colorMap;\n  }, [processedData]);\n\n  const handleMouseMove = useCallback(\n    (event: React.MouseEvent<SVGSVGElement>) => {\n      if (!showTooltip) return;\n\n      const svg = svgRef.current;\n      if (!svg) return;\n\n      const rect = svg.getBoundingClientRect();\n      const x = event.clientX - rect.left;\n      const y = event.clientY - rect.top;\n\n      // Find nearest data point\n      let nearestPoint: DataPoint | null = null;\n      let nearestSeries: ChartSeries | null = null;\n      let minDistance = Infinity;\n\n      processedData.forEach((series) => {\n        series.data.forEach((point, pointIndex) => {\n          const pointX = scaleValue(\n            toXNumber(point.x, pointIndex),\n            chartDimensions.xDomain,\n            [\n              chartDimensions.margin.left,\n              chartDimensions.margin.left + chartDimensions.chartWidth,\n            ]\n          );\n          const pointY = scaleValue(\n            toFiniteNumber(point.y),\n            chartDimensions.yDomain,\n            [\n              chartDimensions.margin.top + chartDimensions.chartHeight,\n              chartDimensions.margin.top,\n            ]\n          );\n\n          const distance = Math.sqrt(\n            Math.pow(x - pointX, 2) + Math.pow(y - pointY, 2)\n          );\n\n          if (distance < minDistance && distance < 50) {\n            // 50px tolerance\n            minDistance = distance;\n            nearestPoint = point;\n            nearestSeries = series;\n          }\n        });\n      });\n\n      if (nearestPoint && nearestSeries) {\n        const s = nearestSeries as ChartSeries;\n        const p = nearestPoint as DataPoint;\n        setTooltip({\n          visible: true,\n          x: event.clientX,\n          y: event.clientY,\n          content: `${s.name}: ${formatValue(p.y)} (${formatValue(p.x)})`,\n        });\n      } else {\n        setTooltip((prev) => ({ ...prev, visible: false }));\n      }\n    },\n    [showTooltip, processedData, chartDimensions]\n  );\n\n  const handleDataPointClick = useCallback(\n    (point: DataPoint, series: ChartSeries) => {\n      onDataPointClick?.(point, series);\n\n      if (enableDrillDown && currentDrillLevel < drillDownLevels.length - 1) {\n        const nextLevel = drillDownLevels[currentDrillLevel + 1];\n        const metadataValue = point.metadata?.[nextLevel.dataKey];\n        const newFilter: ChartFilter = {\n          field: nextLevel.dataKey,\n          operator: \"equals\",\n          value: isChartFilterPrimitiveValue(metadataValue)\n            ? metadataValue\n            : point.category,\n        };\n\n        setAppliedFilters((prev) => [...prev, newFilter]);\n        setCurrentDrillLevel((prev) => prev + 1);\n        onDrillDown?.(nextLevel, [...appliedFilters, newFilter]);\n      }\n    },\n    [\n      onDataPointClick,\n      enableDrillDown,\n      currentDrillLevel,\n      drillDownLevels,\n      appliedFilters,\n      onDrillDown,\n    ]\n  );\n\n  const handleZoom = useCallback(\n    (delta: number, centerX: number, centerY: number) => {\n      if (!enableZoom) return;\n\n      const zoomFactor = delta > 0 ? 0.9 : 1.1;\n      const xRange = zoomLevel.x[1] - zoomLevel.x[0];\n      const yRange = zoomLevel.y[1] - zoomLevel.y[0];\n\n      const newXRange = xRange * zoomFactor;\n      const newYRange = yRange * zoomFactor;\n\n      const xCenter = zoomLevel.x[0] + xRange * centerX;\n      const yCenter = zoomLevel.y[0] + yRange * centerY;\n\n      setZoomLevel({\n        x: [\n          Math.max(0, xCenter - newXRange / 2),\n          Math.min(1, xCenter + newXRange / 2),\n        ],\n        y: [\n          Math.max(0, yCenter - newYRange / 2),\n          Math.min(1, yCenter + newYRange / 2),\n        ],\n      });\n    },\n    [enableZoom, zoomLevel]\n  );\n\n  const resetZoom = useCallback(() => {\n    setZoomLevel({ x: [0, 1], y: [0, 1] });\n    setPanOffset({ x: 0, y: 0 });\n  }, []);\n\n  const toggleSeries = useCallback((seriesId: string) => {\n    setSelectedSeries((prev) =>\n      prev.includes(seriesId)\n        ? prev.filter((id) => id !== seriesId)\n        : [...prev, seriesId]\n    );\n  }, []);\n\n  const exportChart = useCallback(\n    (format: \"png\" | \"svg\" | \"csv\" | \"json\") => {\n      if (format === \"csv\" || format === \"json\") {\n        const exportData: ChartExportSeries[] = processedData.map((series) => ({\n          series: series.name,\n          data: series.data.map((point) => ({\n            x: point.x,\n            y: point.y,\n            category: point.category,\n            label: point.label,\n            ...point.metadata,\n          })),\n        }));\n\n        const content =\n          format === \"csv\"\n            ? convertToCSV(exportData)\n            : JSON.stringify(exportData, null, 2);\n\n        const blob = new Blob([content], {\n          type: format === \"csv\" ? \"text/csv\" : \"application/json\",\n        });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement(\"a\");\n        a.href = url;\n        a.download = `chart-data.${format}`;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        URL.revokeObjectURL(url);\n      }\n\n      onExport?.(format);\n    },\n    [processedData, onExport]\n  );\n\n  const convertToCSV = (data: ChartExportSeries[]): string => {\n    const rows: string[] = [\"Series,X,Y,Category,Label\"];\n\n    data.forEach((series) => {\n      series.data.forEach((point) => {\n        rows.push(\n          `${series.series},${point.x},${point.y},${point.category || \"\"},${point.label || \"\"}`\n        );\n      });\n    });\n\n    return rows.join(\"\\n\");\n  };\n\n  const renderLineChart = () => {\n    return processedData.map((series) => {\n      const points = series.data\n        .map((point, pointIndex) => ({\n          x: scaleValue(\n            toXNumber(point.x, pointIndex),\n            chartDimensions.xDomain,\n            [0, chartDimensions.chartWidth]\n          ),\n          y: scaleValue(toFiniteNumber(point.y), chartDimensions.yDomain, [\n            chartDimensions.chartHeight,\n            0,\n          ]),\n        }))\n        .filter(isFinitePoint);\n\n      const pathD = createSVGPath(\n        points,\n        series.type === \"area\" ? \"area\" : \"line\"\n      );\n\n      return (\n        <g data-glass-component key={series.id}>\n          {series.type === \"area\" && (\n            <path\n              d={pathD}\n              fill={seriesColors[series.id]}\n              fillOpacity={0.3}\n              stroke=\"none\"\n            />\n          )}\n          <path\n            d={pathD}\n            fill=\"none\"\n            stroke={seriesColors[series.id]}\n            strokeWidth={2}\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            className={enableAnimation ? \"transition-all duration-300\" : \"\"}\n          />\n          {series.data.map((point, index) => (\n            <circle\n              key={`${point.id}-${index}`}\n              cx={points[index]?.x ?? 0}\n              cy={points[index]?.y ?? chartDimensions.chartHeight}\n              r={4}\n              fill={seriesColors[series.id]}\n              stroke=\"white\"\n              strokeWidth={2}\n              className=\"glass-cursor-pointer glass-hover-r-6 glass-transition-all\"\n              onClick={() => handleDataPointClick(point, series)}\n            />\n          ))}\n        </g>\n      );\n    });\n  };\n\n  const renderBarChart = () => {\n    const visibleSeriesCount = Math.max(1, processedData.length);\n    const pointCount = Math.max(1, processedData[0]?.data.length || 0);\n    const barWidth = (chartDimensions.chartWidth / pointCount) * 0.8;\n    const barGroupWidth = barWidth / visibleSeriesCount;\n\n    return processedData.map((series, seriesIndex) => (\n      <g key={series.id}>\n        {series.data.map((point, pointIndex) => {\n          const x =\n            pointIndex * barWidth +\n            seriesIndex * barGroupWidth +\n            barGroupWidth / 2;\n          const y = scaleValue(\n            toFiniteNumber(point.y),\n            chartDimensions.yDomain,\n            [chartDimensions.chartHeight, 0]\n          );\n          const height = Math.max(0, chartDimensions.chartHeight - y);\n\n          return (\n            <rect\n              key={`${point.id}-${pointIndex}`}\n              x={Number.isFinite(x) ? x : 0}\n              y={Number.isFinite(y) ? y : chartDimensions.chartHeight}\n              width={Math.max(0, barGroupWidth * 0.8)}\n              height={height}\n              fill={seriesColors[series.id]}\n              className=\"glass-cursor-pointer hover:glass-opacity-80 glass-transition-all\"\n              onClick={() => handleDataPointClick(point, series)}\n            />\n          );\n        })}\n      </g>\n    ));\n  };\n\n  const renderAxes = () => {\n    const xTicks = 5;\n    const yTicks = 5;\n\n    return (\n      <g>\n        {/* X Axis */}\n        <line\n          x1={0}\n          y1={chartDimensions.chartHeight}\n          x2={chartDimensions.chartWidth}\n          y2={chartDimensions.chartHeight}\n          stroke=\"var(--glass-gray-200)\"\n          strokeWidth={1}\n        />\n\n        {/* Y Axis */}\n        <line\n          x1={0}\n          y1={0}\n          x2={0}\n          y2={chartDimensions.chartHeight}\n          stroke=\"var(--glass-gray-200)\"\n          strokeWidth={1}\n        />\n\n        {/* X Axis Ticks */}\n        {Array.from({ length: xTicks }, (_, i) => {\n          const x = (i / Math.max(1, xTicks - 1)) * chartDimensions.chartWidth;\n          const value =\n            chartDimensions.xDomain[0] +\n            (chartDimensions.xDomain[1] - chartDimensions.xDomain[0]) *\n              (i / Math.max(1, xTicks - 1));\n\n          return (\n            <g key={i}>\n              <line\n                x1={x}\n                y1={chartDimensions.chartHeight}\n                x2={x}\n                y2={chartDimensions.chartHeight + 5}\n                stroke=\"var(--glass-gray-400)\"\n                strokeWidth={1}\n              />\n              <text\n                x={x}\n                y={chartDimensions.chartHeight + 20}\n                textAnchor=\"middle\"\n                className=\"glass-text-xs glass-fill-gray-600\"\n              >\n                {formatValue(value)}\n              </text>\n            </g>\n          );\n        })}\n\n        {/* Y Axis Ticks */}\n        {Array.from({ length: yTicks }, (_, i) => {\n          const y =\n            chartDimensions.chartHeight -\n            (i / Math.max(1, yTicks - 1)) * chartDimensions.chartHeight;\n          const value =\n            chartDimensions.yDomain[0] +\n            (chartDimensions.yDomain[1] - chartDimensions.yDomain[0]) *\n              (i / Math.max(1, yTicks - 1));\n\n          return (\n            <g key={i}>\n              <line\n                x1={-5}\n                y1={y}\n                x2={0}\n                y2={y}\n                stroke=\"var(--glass-gray-400)\"\n                strokeWidth={1}\n              />\n              <text\n                x={-10}\n                y={y + 4}\n                textAnchor=\"end\"\n                className=\"glass-text-xs glass-fill-gray-600\"\n              >\n                {formatValue(value)}\n              </text>\n            </g>\n          );\n        })}\n\n        {/* Axis Labels */}\n        {xAxisLabel && (\n          <text\n            x={chartDimensions.chartWidth / 2}\n            y={chartDimensions.chartHeight + 45}\n            textAnchor=\"middle\"\n            className=\"glass-text-sm glass-font-medium glass-fill-gray-700\"\n          >\n            {xAxisLabel}\n          </text>\n        )}\n\n        {yAxisLabel && (\n          <text\n            x={-40}\n            y={chartDimensions.chartHeight / 2}\n            textAnchor=\"middle\"\n            className=\"glass-text-sm glass-font-medium glass-fill-gray-700\"\n            transform={`rotate(-90, -40, ${chartDimensions.chartHeight / 2})`}\n          >\n            {yAxisLabel}\n          </text>\n        )}\n      </g>\n    );\n  };\n\n  return (\n    <div ref={containerRef} className={cn(\"relative\", className)}>\n      <Glass className=\"glass-p-6\">\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-6\">\n          <div>\n            {title && (\n              <h2 className=\"glass-text-xl glass-font-semibold glass-text-secondary\">\n                {title}\n              </h2>\n            )}\n            {subtitle && (\n              <p className=\"glass-text-secondary glass-mt-1\">{subtitle}</p>\n            )}\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            {enableZoom && (\n              <button\n                onClick={resetZoom}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius hover:glass-surface-subtle glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Reset Zoom\n              </button>\n            )}\n\n            <div className=\"glass-flex glass-border glass-border-subtle glass-radius glass-overflow-hidden\">\n              <button\n                onClick={() => exportChart(\"csv\")}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary hover:glass-surface-subtle glass-border-r glass-border-subtle glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                CSV\n              </button>\n              <button\n                onClick={() => exportChart(\"json\")}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-surface-subtle glass-text-secondary hover:glass-surface-subtle glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                JSON\n              </button>\n            </div>\n          </div>\n        </div>\n\n        {/* Drill-down breadcrumbs */}\n        {enableDrillDown && appliedFilters.length > 0 && (\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-4 glass-text-sm glass-text-secondary\">\n            <span>\uD83D\uDCCA</span>\n            <span>Filtered by:</span>\n            {appliedFilters.map((filter, index) => (\n              <span\n                key={index}\n                className=\"glass-px-2 glass-py-1 glass-surface-subtle glass-text-primary glass-radius glass-flex glass-items-center glass-gap-1\"\n              >\n                {filter.field}: {formatValue(filter.value)}\n                <button\n                  onClick={() =>\n                    setAppliedFilters((prev) =>\n                      prev.filter((_, i) => i !== index)\n                    )\n                  }\n                  className=\"glass-text-primary hover:glass-text-primary glass-ml-1 glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  \u2715\n                </button>\n              </span>\n            ))}\n          </div>\n        )}\n\n        {/* Chart */}\n        <div className=\"glass-relative\">\n          <svg\n            ref={svgRef}\n            width={width}\n            height={height}\n            style={{ maxWidth: \"100%\", height: \"auto\" }}\n            onMouseMove={handleMouseMove}\n            onMouseLeave={() =>\n              setTooltip((prev) => ({ ...prev, visible: false }))\n            }\n            onWheel={(e) => {\n              e.preventDefault();\n              const rect = svgRef.current?.getBoundingClientRect();\n              if (rect) {\n                const centerX =\n                  (e.clientX - rect.left - chartDimensions.margin.left) /\n                  chartDimensions.chartWidth;\n                const centerY =\n                  (e.clientY - rect.top - chartDimensions.margin.top) /\n                  chartDimensions.chartHeight;\n                handleZoom(e.deltaY, centerX, centerY);\n              }\n            }}\n            className=\"glass-border glass-border-subtle glass-radius\"\n          >\n            <g\n              transform={`translate(${chartDimensions.margin.left}, ${chartDimensions.margin.top})`}\n            >\n              {renderAxes()}\n\n              {type === \"line\" || type === \"combo\" ? renderLineChart() : null}\n              {type === \"bar\" || type === \"combo\" ? renderBarChart() : null}\n\n              {/* Grid lines */}\n              <defs>\n                <pattern\n                  id=\"grid\"\n                  width=\"40\"\n                  height=\"40\"\n                  patternUnits=\"userSpaceOnUse\"\n                >\n                  <path\n                    d=\"M 40 0 L 0 0 0 40\"\n                    fill=\"none\"\n                    stroke=\"var(--glass-gray-100)\"\n                    strokeWidth=\"1\"\n                  />\n                </pattern>\n              </defs>\n              <rect\n                width={chartDimensions.chartWidth}\n                height={chartDimensions.chartHeight}\n                fill=\"url(#grid)\"\n                opacity=\"0.5\"\n              />\n            </g>\n          </svg>\n        </div>\n\n        {/* Legend */}\n        {showLegend && (\n          <div className=\"glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-mt-4 glass-pt-4 glass-border-t glass-border-subtle\">\n            {processedData.map((series) => (\n              <button\n                key={series.id}\n                onClick={() => toggleSeries(series.id)}\n                className={cn(\n                  \"flex items-center gap-2 px-3 py-1 rounded text-sm transition-opacity glass-focus glass-touch-target glass-contrast-guard\",\n                  selectedSeries.includes(series.id)\n                    ? \"opacity-100\"\n                    : \"opacity-50\"\n                )}\n              >\n                <div\n                  className=\"glass-w-3 glass-h-3 glass-radius-full\"\n                  style={{ backgroundColor: seriesColors[series.id] }}\n                />\n                <span>{series.name}</span>\n              </button>\n            ))}\n          </div>\n        )}\n      </Glass>\n\n      {/* Tooltip */}\n      {tooltip.visible && (\n        <div\n          className=\"glass-fixed glass-z-50 glass-px-3 glass-py-2 glass-surface-subtle glass-text-primary glass-text-sm glass-radius glass-shadow-lg glass-pointer-events-none\"\n          style={{\n            left: tooltip.x + 10,\n            top: tooltip.y - 10,\n            transform:\n              tooltip.x > window.innerWidth - 200\n                ? \"translateX(-100%)\"\n                : \"none\",\n          }}\n        >\n          {tooltip.content}\n        </div>\n      )}\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useId } from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"@/lib/utils\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\n// Localized semantic colors to avoid cross-package imports\nconst semanticColors = {\n  chart: {\n    primary: \"var(--glass-color-primary-light)\", // brand blue\n    secondary: \"var(--glass-color-secondary)\", // brand purple\n    senary: \"hsl(var(--glass-color-info))\", // cyan-ish for area fill\n  },\n} as const;\n\n// Small collection of SVG defs + helpers to make Recharts look like the admin portal charts\n// without pulling in a chart layer from there. These are composable within any Recharts Chart.\n\nexport function GlassDefs({ id }: { id: string }) {\n  const grad = `${id}-grad`;\n  const area = `${id}-area`;\n  const glow = `${id}-glow`;\n  const sweep = `${id}-sweep`;\n  const primary = semanticColors.chart.primary;\n  const secondary = semanticColors.chart.secondary;\n  const areaTop = semanticColors.chart.senary; // cyan-ish top\n  return (\n    <defs data-glass-component>\n      {/* Brand stroke gradient */}\n      <linearGradient id={grad} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n        <stop offset=\"0%\" stopColor={primary} />\n        <stop offset=\"100%\" stopColor={secondary} />\n      </linearGradient>\n      {/* Brand area fill */}\n      <linearGradient id={area} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n        <stop offset=\"0%\" stopColor={areaTop} stopOpacity={0.38} />\n        <stop offset=\"100%\" stopColor={areaTop} stopOpacity={0.06} />\n      </linearGradient>\n      {/* Moving sweep highlight for bars/lines (used with <animate> on x) */}\n      <linearGradient id={sweep} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n        <stop offset=\"0%\" stopColor=\"var(--glass-white)\" stopOpacity={0} />\n        <stop offset=\"50%\" stopColor=\"var(--glass-white)\" stopOpacity={0.35} />\n        <stop offset=\"100%\" stopColor=\"var(--glass-white)\" stopOpacity={0} />\n      </linearGradient>\n      {/* Soft glow around strokes/points */}\n      <filter id={glow} x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n        <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"2.5\" result=\"blur\" />\n        <feMerge>\n          <feMergeNode in=\"blur\" />\n          <feMergeNode in=\"SourceGraphic\" />\n        </feMerge>\n      </filter>\n    </defs>\n  );\n}\n\nexport const chartGlass = {\n  grid: \"color-mix(in srgb, var(--glass-white) 8%, transparent)\",\n  axis: \"var(--glass-bg-default)\",\n  tick: {\n    fill: \"color-mix(in srgb, var(--glass-white) 88%, transparent)\",\n    fontSize: 13,\n  },\n  yTick: {\n    fill: \"color-mix(in srgb, var(--glass-white) 88%, transparent)\",\n    fontSize: 13,\n  },\n  label: (text: string) => ({\n    value: text,\n    fill: \"color-mix(in srgb, var(--glass-white) 80%, transparent)\",\n    fontSize: 14,\n  }),\n  tooltip: {\n    cursor: {\n      stroke: \"color-mix(in srgb, var(--glass-white) 12%, transparent)\",\n    },\n    contentStyle: createGlassStyle({\n      intent: \"neutral\",\n      elevation: \"level2\",\n    }) as React.CSSProperties,\n    itemStyle: { color: \"var(--glass-white)\" } as React.CSSProperties,\n    labelStyle: {\n      color: \"color-mix(in srgb, var(--glass-white) 85%, transparent)\",\n    } as React.CSSProperties,\n  },\n  brandGrad: (base: string) => `url(#${base}-grad)`,\n  brandArea: (base: string) => `url(#${base}-area)`,\n  glow: (base: string) => `url(#${base}-glow)`,\n  sweep: (base: string) => `url(#${base}-sweep)`,\n  // Subtle, neutral competitor palette (less saturated)\n  comp: [\n    \"var(--glass-gray-600)\",\n    \"var(--glass-gray-700)\",\n    \"var(--glass-gray-800)\",\n  ],\n};\n\n// Standardized axis and layout tokens for Recharts demos\nexport const axisTokens = {\n  margin: { top: 12, right: 16, bottom: 24, left: 44 },\n  tickMargin: 8,\n  xLabelDy: 10,\n  yLabelDx: -10,\n  tickFontSize: 13,\n};\n\n// GlassChartsDemo Component\nexport interface GlassChartsDemoProps {\n  className?: string;\n  children?: React.ReactNode;\n}\n\nexport function GlassChartsDemo({ className, children }: GlassChartsDemoProps) {\n  const gradientId = useId().replace(/:/g, \"\");\n  const lineGradient = `${gradientId}-line`;\n  const areaGradient = `${gradientId}-area`;\n  const bars = [38, 58, 44, 72, 62, 84];\n  const linePoints = [\n    [0, 72],\n    [48, 48],\n    [96, 58],\n    [144, 32],\n    [192, 42],\n    [240, 24],\n  ];\n  const path = linePoints\n    .map(([x, y], index) => `${index === 0 ? \"M\" : \"L\"} ${x} ${y}`)\n    .join(\" \");\n\n  return (\n    <ContrastGuard\n      as=\"div\"\n      level=\"AA\"\n      className={cn(\"glass-w-full glass-auto-gap glass-auto-gap-md\", className)}\n    >\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-3\">\n        <div>\n          <TextWithContrast\n            as=\"h3\"\n            className=\"glass-text-base glass-font-semibold\"\n          >\n            Glass Charts Demo\n          </TextWithContrast>\n          <TextWithContrast\n            as=\"p\"\n            className=\"glass-text-xs glass-text-primary-opacity-70\"\n          >\n            Live chart primitives\n          </TextWithContrast>\n        </div>\n        <div className=\"glass-radius-full glass-border glass-px-3 glass-py-1 glass-text-xs glass-text-primary-opacity-80\">\n          3 views\n        </div>\n      </div>\n      <div\n        className=\"glass-grid glass-gap-3\"\n        style={{ gridTemplateColumns: \"repeat(3, minmax(0, 1fr))\" }}\n      >\n        <div className=\"glass-radius-lg glass-border glass-surface-subtle glass-p-3\">\n          <svg\n            viewBox=\"0 0 240 96\"\n            width=\"100%\"\n            height=\"96\"\n            role=\"img\"\n            aria-label=\"Line trend\"\n          >\n            <defs>\n              <linearGradient id={lineGradient} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n                <stop offset=\"0%\" stopColor=\"#70d6ff\" />\n                <stop offset=\"100%\" stopColor=\"#a78bfa\" />\n              </linearGradient>\n            </defs>\n            {[24, 48, 72].map((y) => (\n              <line\n                key={y}\n                x1=\"0\"\n                y1={y}\n                x2=\"240\"\n                y2={y}\n                stroke=\"rgba(226,232,240,0.14)\"\n              />\n            ))}\n            <path\n              d={path}\n              fill=\"none\"\n              stroke={`url(#${lineGradient})`}\n              strokeWidth=\"5\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n            />\n            {linePoints.map(([x, y]) => (\n              <circle key={`${x}-${y}`} cx={x} cy={y} r=\"4\" fill=\"#70d6ff\" />\n            ))}\n          </svg>\n        </div>\n        <div className=\"glass-radius-lg glass-border glass-surface-subtle glass-p-3\">\n          <svg\n            viewBox=\"0 0 240 96\"\n            width=\"100%\"\n            height=\"96\"\n            role=\"img\"\n            aria-label=\"Bar comparison\"\n          >\n            {bars.map((value, index) => (\n              <rect\n                key={index}\n                x={index * 38 + 8}\n                y={96 - value}\n                width=\"24\"\n                height={value}\n                rx=\"7\"\n                fill={index % 2 === 0 ? \"#70d6ff\" : \"#34d399\"}\n                opacity=\"0.88\"\n              />\n            ))}\n          </svg>\n        </div>\n        <div className=\"glass-radius-lg glass-border glass-surface-subtle glass-p-3\">\n          <svg\n            viewBox=\"0 0 120 96\"\n            width=\"100%\"\n            height=\"96\"\n            role=\"img\"\n            aria-label=\"Donut split\"\n          >\n            <defs>\n              <linearGradient id={areaGradient} x1=\"0\" x2=\"1\" y1=\"0\" y2=\"1\">\n                <stop offset=\"0%\" stopColor=\"#70d6ff\" />\n                <stop offset=\"100%\" stopColor=\"#a78bfa\" />\n              </linearGradient>\n            </defs>\n            <circle\n              cx=\"60\"\n              cy=\"48\"\n              r=\"32\"\n              fill=\"none\"\n              stroke=\"rgba(226,232,240,0.16)\"\n              strokeWidth=\"16\"\n            />\n            <circle\n              cx=\"60\"\n              cy=\"48\"\n              r=\"32\"\n              fill=\"none\"\n              stroke={`url(#${areaGradient})`}\n              strokeWidth=\"16\"\n              strokeDasharray=\"145 56\"\n              strokeLinecap=\"round\"\n              transform=\"rotate(-90 60 48)\"\n            />\n          </svg>\n        </div>\n      </div>\n      {children}\n    </ContrastGuard>\n  );\n}\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 XR/immersive demo with mock data.\n *\n * Glass360Viewer demonstrates a 360-degree panorama viewer on a glass surface.\n * Sample scenes/hotspots are illustrative; it is not wired to a real asset/CMS\n * pipeline. Provide real panorama assets and hotspot data before production use.\n */\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface Glass360ViewerMediaSource {\n  type: \"image\" | \"video\";\n  url: string;\n  projection?: \"equirectangular\" | \"cubemap\" | \"cylindrical\" | \"dome\";\n  title?: string;\n  description?: string;\n  thumbnail?: string;\n  duration?: number;\n}\n\nexport interface Glass360ViewerHotspot {\n  id: string;\n  x: number; // -180 to 180 degrees\n  y: number; // -90 to 90 degrees\n  title: string;\n  description?: string;\n  icon?: React.ReactNode;\n  color?: string;\n  onClick?: () => void;\n  customContent?: React.ReactNode;\n}\n\nexport interface Glass360ViewerControls {\n  zoom?: boolean;\n  pan?: boolean;\n  autoRotate?: boolean;\n  gyroscope?: boolean;\n  fullscreen?: boolean;\n  vr?: boolean;\n  playback?: boolean;\n  volume?: boolean;\n}\n\nexport interface Glass360ViewerProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onError\"> {\n  /** Media source */\n  source: Glass360ViewerMediaSource;\n  /** Alternative sources for fallback */\n  sources?: Glass360ViewerMediaSource[];\n  /** Interactive hotspots */\n  hotspots?: Glass360ViewerHotspot[];\n  /** Controls configuration */\n  controls?: Glass360ViewerControls;\n  /** Initial view settings */\n  initialView?: {\n    yaw?: number; // Horizontal rotation (-180 to 180)\n    pitch?: number; // Vertical rotation (-90 to 90)\n    fov?: number; // Field of view (30-120)\n  };\n  /** Auto-rotate speed (degrees per second) */\n  autoRotateSpeed?: number;\n  /** Whether auto-rotate is initially enabled */\n  autoRotateEnabled?: boolean;\n  /** Maximum zoom level */\n  maxZoom?: number;\n  /** Minimum zoom level */\n  minZoom?: number;\n  /** Loading placeholder */\n  loadingComponent?: React.ReactNode;\n  /** Error fallback */\n  errorComponent?: React.ReactNode;\n  /** View change handler */\n  onViewChange?: (view: { yaw: number; pitch: number; fov: number }) => void;\n  /** Hotspot click handler */\n  onHotspotClick?: (hotspot: Glass360ViewerHotspot) => void;\n  /** Media load handler */\n  onLoad?: () => void;\n  /** Media error handler */\n  onError?: (error: Error) => void;\n  /** Custom overlay */\n  overlay?: React.ReactNode;\n  /** Whether to show debug info */\n  debug?: boolean;\n  /** Viewer quality */\n  quality?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  /** Performance mode */\n  performanceMode?: \"performance\" | \"quality\";\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const Glass360Viewer = forwardRef<HTMLDivElement, Glass360ViewerProps>(\n  (\n    {\n      source,\n      sources = [],\n      hotspots = [],\n      controls = {\n        zoom: true,\n        pan: true,\n        autoRotate: true,\n        gyroscope: true,\n        fullscreen: true,\n        vr: false,\n        playback: true,\n        volume: true,\n      },\n      initialView = {\n        yaw: 0,\n        pitch: 0,\n        fov: 75,\n      },\n      autoRotateSpeed = 2,\n      autoRotateEnabled = false,\n      maxZoom = 3,\n      minZoom = 0.5,\n      loadingComponent,\n      errorComponent,\n      onViewChange,\n      onHotspotClick,\n      onLoad,\n      onError,\n      overlay,\n      debug = false,\n      quality = \"high\",\n      performanceMode = \"quality\",\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const effectiveShouldAnimate = respectMotionPreference\n      ? shouldAnimate\n      : true;\n    const { play: playSound } = useGlassSound();\n    const viewerId = useA11yId(\"glass-360-viewer\");\n\n    const [isLoading, setIsLoading] = useState(true);\n    const [hasError, setHasError] = useState(false);\n    const [currentView, setCurrentView] = useState({\n      yaw: initialView.yaw ?? 0,\n      pitch: initialView.pitch ?? 0,\n      fov: initialView.fov ?? 75,\n    });\n    const [isDragging, setIsDragging] = useState(false);\n    const [dragStart, setDragStart] = useState({\n      x: 0,\n      y: 0,\n      yaw: 0,\n      pitch: 0,\n    });\n    const [isAutoRotating, setIsAutoRotating] = useState(autoRotateEnabled);\n    const [isFullscreen, setIsFullscreen] = useState(false);\n    const [showControls, setShowControls] = useState(true);\n    const [mediaElement, setMediaElement] = useState<\n      HTMLImageElement | HTMLVideoElement | null\n    >(null);\n    const [gyroscopeEnabled, setGyroscopeEnabled] = useState(false);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationFrameRef = useRef<number>();\n    const lastGyroscopeRef = useRef({ alpha: 0, beta: 0, gamma: 0 });\n\n    // Quality settings\n    const qualityConfig = {\n      low: { resolution: 512, samples: 1 },\n      medium: { resolution: 1024, samples: 2 },\n      high: { resolution: 2048, samples: 4 },\n      ultra: { resolution: 4096, samples: 8 },\n    };\n\n    const config = qualityConfig[quality];\n\n    // Initialize viewer\n    useEffect(() => {\n      const initializeViewer = async () => {\n        try {\n          setIsLoading(true);\n          setHasError(false);\n\n          if (source.type === \"image\") {\n            const img = new Image();\n            img.crossOrigin = \"anonymous\";\n            img.onload = () => {\n              setMediaElement(img);\n              setIsLoading(false);\n              onLoad?.();\n              playSound(\"media_load\");\n            };\n            img.onerror = () => {\n              const error = new Error(\"Failed to load 360\u00B0 image\");\n              setHasError(true);\n              setIsLoading(false);\n              onError?.(error);\n            };\n            img.src = source.url;\n          } else if (source.type === \"video\") {\n            const video = document.createElement(\"video\");\n            video.crossOrigin = \"anonymous\";\n            video.preload = \"metadata\";\n            video.onloadedmetadata = () => {\n              setMediaElement(video);\n              setIsLoading(false);\n              onLoad?.();\n              playSound(\"media_load\");\n            };\n            video.onerror = () => {\n              const error = new Error(\"Failed to load 360\u00B0 video\");\n              setHasError(true);\n              setIsLoading(false);\n              onError?.(error);\n            };\n            video.src = source.url;\n          }\n        } catch (error) {\n          setHasError(true);\n          setIsLoading(false);\n          onError?.(error as Error);\n        }\n      };\n\n      initializeViewer();\n    }, [source, onLoad, onError, playSound]);\n\n    // Render 360\u00B0 view on canvas\n    useEffect(() => {\n      if (!mediaElement || !canvasRef.current) return;\n\n      const canvas = canvasRef.current;\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const render = () => {\n        if (!mediaElement || !ctx) return;\n\n        const { yaw, pitch, fov } = currentView;\n\n        // Clear canvas\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n        // Calculate projection based on source projection type\n        const projectionMatrix = calculateProjectionMatrix(\n          source.projection || \"equirectangular\",\n          yaw,\n          pitch,\n          fov,\n          canvas.width,\n          canvas.height\n        );\n\n        // Render the media with projection\n        if (mediaElement instanceof HTMLImageElement) {\n          renderImageProjection(\n            ctx,\n            mediaElement,\n            projectionMatrix,\n            canvas.width,\n            canvas.height\n          );\n        } else if (mediaElement instanceof HTMLVideoElement) {\n          renderVideoProjection(\n            ctx,\n            mediaElement,\n            projectionMatrix,\n            canvas.width,\n            canvas.height\n          );\n        }\n\n        // Render hotspots\n        renderHotspots(ctx, canvas.width, canvas.height);\n      };\n\n      const animate = () => {\n        render();\n        if (isAutoRotating) {\n          setCurrentView((prev: any) => ({\n            ...prev,\n            yaw: ((prev.yaw ?? 0) + autoRotateSpeed / 60) % 360,\n          }));\n        }\n        animationFrameRef.current = requestAnimationFrame(animate);\n      };\n\n      animationFrameRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [\n      mediaElement,\n      currentView,\n      isAutoRotating,\n      autoRotateSpeed,\n      hotspots,\n      source.projection,\n    ]);\n\n    // Calculate projection matrix (simplified implementation)\n    const calculateProjectionMatrix = useCallback(\n      (\n        projection: string,\n        yaw: number,\n        pitch: number,\n        fov: number,\n        width: number,\n        height: number\n      ) => {\n        // This is a simplified projection calculation\n        // In a real implementation, you would use a proper 3D math library\n        const yawRad = (yaw * Math.PI) / 180;\n        const pitchRad = (pitch * Math.PI) / 180;\n        const fovRad = (fov * Math.PI) / 180;\n\n        return {\n          yawRad,\n          pitchRad,\n          fovRad,\n          aspect: width / height,\n        };\n      },\n      []\n    );\n\n    // Render image with projection\n    const renderImageProjection = useCallback(\n      (\n        ctx: CanvasRenderingContext2D,\n        img: HTMLImageElement,\n        matrix: any,\n        width: number,\n        height: number\n      ) => {\n        // Simplified equirectangular projection rendering\n        // In a real implementation, this would be much more complex\n        const { yawRad, pitchRad } = matrix;\n\n        const sourceX = ((yawRad + Math.PI) / (2 * Math.PI)) * img.width;\n        const sourceY = ((pitchRad + Math.PI / 2) / Math.PI) * img.height;\n        const sourceWidth = img.width / 4; // Simplified view window\n        const sourceHeight = img.height / 4;\n\n        ctx.drawImage(\n          img,\n          sourceX - sourceWidth / 2,\n          sourceY - sourceHeight / 2,\n          sourceWidth,\n          sourceHeight,\n          0,\n          0,\n          width,\n          height\n        );\n      },\n      []\n    );\n\n    // Render video with projection\n    const renderVideoProjection = useCallback(\n      (\n        ctx: CanvasRenderingContext2D,\n        video: HTMLVideoElement,\n        matrix: any,\n        width: number,\n        height: number\n      ) => {\n        // Similar to image projection but for video\n        const { yawRad, pitchRad } = matrix;\n\n        const sourceX = ((yawRad + Math.PI) / (2 * Math.PI)) * video.videoWidth;\n        const sourceY =\n          ((pitchRad + Math.PI / 2) / Math.PI) * video.videoHeight;\n        const sourceWidth = video.videoWidth / 4;\n        const sourceHeight = video.videoHeight / 4;\n\n        ctx.drawImage(\n          video,\n          sourceX - sourceWidth / 2,\n          sourceY - sourceHeight / 2,\n          sourceWidth,\n          sourceHeight,\n          0,\n          0,\n          width,\n          height\n        );\n      },\n      []\n    );\n\n    // Render hotspots\n    const renderHotspots = useCallback(\n      (ctx: CanvasRenderingContext2D, width: number, height: number) => {\n        hotspots.forEach((hotspot, index) => {\n          // Convert hotspot 3D position to 2D screen coordinates\n          const { x, y } = project3DTo2D(\n            hotspot.x,\n            hotspot.y,\n            currentView,\n            width,\n            height\n          );\n\n          // Only render if hotspot is in view\n          if (x >= 0 && x <= width && y >= 0 && y <= height) {\n            ctx.save();\n            ctx.fillStyle = hotspot.color || \"hsl(var(--glass-color-primary))\";\n            ctx.strokeStyle = \"var(--glass-white)\";\n            ctx.lineWidth = 2;\n\n            // Draw hotspot circle\n            ctx.beginPath();\n            ctx.arc(x, y, 8, 0, 2 * Math.PI);\n            ctx.fill();\n            ctx.stroke();\n\n            // Pulse animation\n            if (effectiveShouldAnimate) {\n              const pulseScale = 1 + Math.sin(Date.now() * 0.01 + index) * 0.2;\n              ctx.beginPath();\n              ctx.arc(x, y, 8 * pulseScale, 0, 2 * Math.PI);\n              ctx.strokeStyle =\n                hotspot.color || \"hsl(var(--glass-color-primary))\";\n              ctx.globalAlpha = 0.5;\n              ctx.stroke();\n              ctx.globalAlpha = 1;\n            }\n\n            ctx.restore();\n          }\n        });\n      },\n      [hotspots, currentView, effectiveShouldAnimate]\n    );\n\n    // Convert 3D spherical coordinates to 2D screen coordinates\n    const project3DTo2D = useCallback(\n      (\n        longitude: number,\n        latitude: number,\n        view: { yaw: number; pitch: number; fov: number },\n        width: number,\n        height: number\n      ) => {\n        const { yaw, pitch, fov } = view;\n        const adjustedLon = longitude - yaw;\n        const adjustedLat = latitude - pitch;\n\n        // Simplified projection\n        const x = width / 2 + (adjustedLon / 90) * (width / 4);\n        const y = height / 2 + (adjustedLat / 90) * (height / 4);\n\n        return { x, y };\n      },\n      []\n    );\n\n    // Handle mouse interactions\n    const handleMouseDown = useCallback(\n      (event: React.MouseEvent) => {\n        if (!controls.pan) return;\n\n        setIsDragging(true);\n        setIsAutoRotating(false);\n        setDragStart({\n          x: event.clientX,\n          y: event.clientY,\n          yaw: currentView.yaw ?? 0,\n          pitch: currentView.pitch ?? 0,\n        });\n        playSound(\"drag_start\");\n      },\n      [controls.pan, currentView, playSound]\n    );\n\n    const handleMouseMove = useCallback(\n      (event: React.MouseEvent) => {\n        if (!isDragging || !controls.pan) return;\n\n        const deltaX = event.clientX - dragStart.x;\n        const deltaY = event.clientY - dragStart.y;\n\n        const sensitivity = 0.5;\n        const newYaw = dragStart.yaw - deltaX * sensitivity;\n        const newPitch = Math.max(\n          -90,\n          Math.min(90, dragStart.pitch + deltaY * sensitivity)\n        );\n\n        const newView = {\n          ...currentView,\n          yaw: newYaw,\n          pitch: newPitch,\n        };\n\n        setCurrentView(newView);\n        onViewChange?.({\n          yaw: newView.yaw ?? 0,\n          pitch: newView.pitch ?? 0,\n          fov: newView.fov ?? 75,\n        });\n      },\n      [isDragging, controls.pan, dragStart, currentView, onViewChange]\n    );\n\n    const handleMouseUp = useCallback(() => {\n      if (isDragging) {\n        setIsDragging(false);\n        playSound(\"drag_end\");\n      }\n    }, [isDragging, playSound]);\n\n    // Handle zoom\n    const handleWheel = useCallback(\n      (event: React.WheelEvent) => {\n        if (!controls.zoom) return;\n\n        event.preventDefault();\n        const delta = event.deltaY * 0.1;\n        const newFov = Math.max(30, Math.min(120, currentView.fov + delta));\n\n        const newView = {\n          ...currentView,\n          fov: newFov,\n        };\n\n        setCurrentView(newView);\n        onViewChange?.({\n          yaw: newView.yaw ?? 0,\n          pitch: newView.pitch ?? 0,\n          fov: newView.fov ?? 75,\n        });\n        playSound(\"zoom\");\n      },\n      [controls.zoom, currentView, onViewChange, playSound]\n    );\n\n    // Handle hotspot clicks\n    const handleCanvasClick = useCallback(\n      (event: React.MouseEvent) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n\n        // Check if click is on a hotspot\n        for (const hotspot of hotspots) {\n          const hotspotPos = project3DTo2D(\n            hotspot.x,\n            hotspot.y,\n            currentView,\n            canvas.width,\n            canvas.height\n          );\n          const distance = Math.sqrt(\n            Math.pow(x - hotspotPos.x, 2) + Math.pow(y - hotspotPos.y, 2)\n          );\n\n          if (distance <= 16) {\n            // Hotspot click radius\n            hotspot.onClick?.();\n            onHotspotClick?.(hotspot);\n            playSound(\"hotspot_click\");\n            return;\n          }\n        }\n      },\n      [hotspots, currentView, project3DTo2D, onHotspotClick, playSound]\n    );\n\n    // Gyroscope support\n    useEffect(() => {\n      if (!gyroscopeEnabled || !controls.gyroscope) return;\n\n      const handleDeviceOrientation = (event: DeviceOrientationEvent) => {\n        if (\n          event.alpha !== null &&\n          event.beta !== null &&\n          event.gamma !== null\n        ) {\n          const alpha = event.alpha;\n          const beta = event.beta;\n          const gamma = event.gamma;\n\n          // Convert device orientation to view angles\n          const yaw = alpha - lastGyroscopeRef.current.alpha;\n          const pitch = beta - lastGyroscopeRef.current.beta;\n\n          setCurrentView((prev: any) => ({\n            ...prev,\n            yaw: (prev.yaw ?? 0) + yaw * 0.1,\n            pitch: Math.max(-90, Math.min(90, (prev.pitch ?? 0) + pitch * 0.1)),\n          }));\n\n          lastGyroscopeRef.current = { alpha, beta, gamma };\n        }\n      };\n\n      window.addEventListener(\"deviceorientation\", handleDeviceOrientation);\n      return () =>\n        window.removeEventListener(\n          \"deviceorientation\",\n          handleDeviceOrientation\n        );\n    }, [gyroscopeEnabled, controls.gyroscope]);\n\n    // Toggle fullscreen\n    const toggleFullscreen = useCallback(() => {\n      if (!controls.fullscreen) return;\n\n      if (!isFullscreen) {\n        containerRef.current?.requestFullscreen();\n        setIsFullscreen(true);\n      } else {\n        document.exitFullscreen();\n        setIsFullscreen(false);\n      }\n      playSound(\"fullscreen_toggle\");\n    }, [controls.fullscreen, isFullscreen, playSound]);\n\n    // Control panel\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          data-glass-component\n          elevation=\"level3\"\n          intensity=\"strong\"\n          depth={2}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2 glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          {controls.autoRotate && (\n            <button\n              onClick={() => setIsAutoRotating(!isAutoRotating)}\n              className={cn(\n                `glass-p-2 glass-radius-md transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                isAutoRotating\n                  ? \"bg-primary/20 text-primary\"\n                  : \"hover:bg-background/20\"\n              )}\n              title=\"Auto Rotate\"\n            >\n              \uD83D\uDD04\n            </button>\n          )}\n\n          {controls.gyroscope && (\n            <button\n              onClick={() => setGyroscopeEnabled(!gyroscopeEnabled)}\n              className={cn(\n                `glass-p-2 glass-radius-md transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n                gyroscopeEnabled\n                  ? \"bg-primary/20 text-primary\"\n                  : \"hover:bg-background/20\"\n              )}\n              title=\"Gyroscope\"\n            >\n              \uD83D\uDCF1\n            </button>\n          )}\n\n          {controls.fullscreen && (\n            <button\n              onClick={toggleFullscreen}\n              className={`glass-p-2 glass-radius-md hover:glass-surface-overlay glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms] glass-focus glass-touch-target glass-contrast-guard`}\n              title=\"Fullscreen\"\n            >\n              {isFullscreen ? \"\uD83D\uDDD7\" : \"\uD83D\uDDD6\"}\n            </button>\n          )}\n\n          {source.type === \"video\" &&\n            controls.playback &&\n            mediaElement instanceof HTMLVideoElement && (\n              <button\n                onClick={() => {\n                  if (mediaElement.paused) {\n                    mediaElement.play();\n                  } else {\n                    mediaElement.pause();\n                  }\n                }}\n                className=\"glass-p-2 glass-radius-md hover:glass-surface-overlay glass-transition-all\"\n                title={mediaElement.paused ? \"Play\" : \"Pause\"}\n              >\n                {mediaElement.paused ? \"\u25B6\" : \"\u23F8\"}\n              </button>\n            )}\n\n          <div className=\"glass-text-xs glass-text-secondary\">\n            {Math.round(currentView.yaw ?? 0)}\u00B0 /{\" \"}\n            {Math.round(currentView.pitch ?? 0)}\u00B0 /{\" \"}\n            {Math.round(currentView.fov ?? 75)}\u00B0\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={viewerId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-360-viewer relative glass-radius-lg glass-backdrop-blur-md border border-border/20 overflow-hidden\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={\n            effectiveShouldAnimate && respectMotionPreference\n              ? \"fadeIn\"\n              : \"none\"\n          }\n          className=\"glass-relative glass-w-full glass-h-full\"\n        >\n          <div\n            ref={containerRef}\n            className=\"glass-relative glass-w-full glass-h-full glass-cursor-move\"\n            onMouseDown={handleMouseDown}\n            onMouseMove={handleMouseMove}\n            onMouseUp={handleMouseUp}\n            onMouseLeave={handleMouseUp}\n            onWheel={handleWheel}\n          >\n            {/* Loading State */}\n            {isLoading && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n                {loadingComponent || (\n                  <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-4\">\n                    <div className=\"glass-w-12 glass-h-12 glass-border-4 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                    <div className=\"glass-text-sm glass-text-secondary\">\n                      Loading 360\u00B0 media...\n                    </div>\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* Error State */}\n            {hasError && (\n              <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n                {errorComponent || (\n                  <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-4 glass-text-center\">\n                    <div className=\"glass-text-4xl\">\u274C</div>\n                    <div className=\"glass-text-sm glass-text-secondary\">\n                      Failed to load 360\u00B0 media\n                    </div>\n                  </div>\n                )}\n              </div>\n            )}\n\n            {/* Canvas */}\n            {!isLoading && !hasError && (\n              <canvas\n                ref={canvasRef}\n                className=\"glass-w-full glass-h-full\"\n                onClick={handleCanvasClick}\n                style={{ cursor: isDragging ? \"grabbing\" : \"grab\" }}\n              />\n            )}\n\n            {/* Overlay */}\n            {overlay && (\n              <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n                {overlay}\n              </div>\n            )}\n\n            {/* Controls */}\n            {!isLoading && !hasError && renderControls()}\n\n            {/* Debug Info */}\n            {debug && !isLoading && !hasError && (\n              <OptimizedGlass\n                elevation=\"level2\"\n                intensity=\"medium\"\n                depth={1}\n                tint=\"neutral\"\n                border=\"subtle\"\n                className=\"glass-absolute glass-top-4 glass-left-4 glass-p-3 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              >\n                <div className=\"glass-text-xs glass-font-mono glass-gap-1\">\n                  <div>Yaw: {(currentView.yaw ?? 0).toFixed(1)}\u00B0</div>\n                  <div>Pitch: {(currentView.pitch ?? 0).toFixed(1)}\u00B0</div>\n                  <div>FOV: {(currentView.fov ?? 75).toFixed(1)}\u00B0</div>\n                  <div>Auto: {isAutoRotating ? \"On\" : \"Off\"}</div>\n                  <div>Type: {source.type}</div>\n                  <div>\n                    Projection: {source.projection || \"equirectangular\"}\n                  </div>\n                  <div>Hotspots: {hotspots.length}</div>\n                </div>\n              </OptimizedGlass>\n            )}\n\n            {/* Controls Toggle */}\n            <button\n              onClick={() => setShowControls(!showControls)}\n              className={`glass-absolute glass-top-4 glass-right-4 glass-p-2 glass-radius-full glass-surface-overlay hover:glass-surface-overlay glass-transition-all glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n              title=\"Toggle Controls\"\n            >\n              {showControls ? \"\uD83C\uDF9B\" : \"\u2699\"}\n            </button>\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlass360Viewer.displayName = \"Glass360Viewer\";\n\nexport default Glass360Viewer;\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 XR demo with mock data.\n *\n * GlassARPreview demonstrates an AR product-preview surface. The AR session,\n * tracking, and placement are simulated in-component and do NOT use a real WebXR /\n * ARKit / ARCore session. Wire it to a real XR runtime before production use.\n */\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface ARObject {\n  id: string;\n  name: string;\n  modelUrl?: string;\n  thumbnail?: string;\n  scale: { x: number; y: number; z: number };\n  rotation: { x: number; y: number; z: number };\n  position: { x: number; y: number; z: number };\n  visible: boolean;\n  opacity: number;\n  material?: {\n    color?: string;\n    metalness?: number;\n    roughness?: number;\n    emissive?: string;\n    texture?: string;\n  };\n  animation?: {\n    type: \"rotate\" | \"float\" | \"pulse\" | \"bounce\";\n    speed: number;\n    enabled: boolean;\n  };\n  metadata?: Record<string, unknown>;\n}\n\nexport interface ARMarker {\n  id: string;\n  type: \"qr\" | \"image\" | \"nft\" | \"barcode\";\n  source: string;\n  size?: number;\n  confident?: number;\n}\n\nexport interface ARCamera {\n  position: { x: number; y: number; z: number };\n  target: { x: number; y: number; z: number };\n  fov: number;\n  near: number;\n  far: number;\n}\n\nexport interface ARLighting {\n  ambient: {\n    color: string;\n    intensity: number;\n  };\n  directional: {\n    color: string;\n    intensity: number;\n    position: { x: number; y: number; z: number };\n    castShadow: boolean;\n  };\n  environment?: string;\n}\n\nexport interface GlassARPreviewProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onError\"> {\n  /** AR objects to display */\n  objects?: ARObject[];\n  /** AR markers for tracking */\n  markers?: ARMarker[];\n  /** Camera configuration */\n  camera?: ARCamera;\n  /** Lighting setup */\n  lighting?: ARLighting;\n  /** Background mode */\n  background?: \"transparent\" | \"camera\" | \"environment\" | \"color\";\n  /** Background color if mode is 'color' */\n  backgroundColor?: string;\n  /** Environment map URL */\n  environmentMap?: string;\n  /** Whether to enable camera feed */\n  enableCamera?: boolean;\n  /** Whether to show debug info */\n  debug?: boolean;\n  /** AR session state */\n  sessionActive?: boolean;\n  /** WebXR support level */\n  xrMode?: \"immersive-ar\" | \"inline\" | \"viewer\";\n  /** Performance settings */\n  quality?: \"low\" | \"medium\" | \"high\";\n  /** Object interaction handlers */\n  onObjectSelect?: (object: ARObject) => void;\n  onObjectMove?: (\n    objectId: string,\n    position: { x: number; y: number; z: number }\n  ) => void;\n  onObjectRotate?: (\n    objectId: string,\n    rotation: { x: number; y: number; z: number }\n  ) => void;\n  onObjectScale?: (\n    objectId: string,\n    scale: { x: number; y: number; z: number }\n  ) => void;\n  /** Marker tracking handlers */\n  onMarkerFound?: (marker: ARMarker) => void;\n  onMarkerLost?: (marker: ARMarker) => void;\n  /** Session handlers */\n  onSessionStart?: () => void;\n  onSessionEnd?: () => void;\n  onError?: (error: Error) => void;\n  /** Custom object renderer */\n  renderObject?: (object: ARObject) => React.ReactNode;\n  /** Loading component */\n  loadingComponent?: React.ReactNode;\n  /** Error component */\n  errorComponent?: React.ReactNode;\n  /** Controls overlay */\n  controlsOverlay?: React.ReactNode;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassARPreview = forwardRef<HTMLDivElement, GlassARPreviewProps>(\n  (\n    {\n      objects = [],\n      markers = [],\n      camera = {\n        position: { x: 0, y: 0, z: 5 },\n        target: { x: 0, y: 0, z: 0 },\n        fov: 75,\n        near: 0.1,\n        far: 1000,\n      },\n      lighting = {\n        ambient: { color: \"var(--glass-white)\", intensity: 0.6 },\n        directional: {\n          color: \"var(--glass-white)\",\n          intensity: 0.8,\n          position: { x: 1, y: 1, z: 1 },\n          castShadow: true,\n        },\n      },\n      background = \"transparent\",\n      backgroundColor = \"var(--glass-black)\",\n      environmentMap,\n      enableCamera = true,\n      debug = false,\n      sessionActive = false,\n      xrMode = \"inline\",\n      quality = \"medium\",\n      onObjectSelect,\n      onObjectMove,\n      onObjectRotate,\n      onObjectScale,\n      onMarkerFound,\n      onMarkerLost,\n      onSessionStart,\n      onSessionEnd,\n      onError,\n      renderObject,\n      loadingComponent,\n      errorComponent,\n      controlsOverlay,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { shouldAnimate } = useMotionPreference();\n    const arPreviewId = useA11yId(\"glass-ar-preview\");\n\n    const [isLoading, setIsLoading] = useState(true);\n    const [hasError, setHasError] = useState(false);\n    const [selectedObject, setSelectedObject] = useState<string | null>(null);\n    const [cameraStream, setCameraStream] = useState<MediaStream | null>(null);\n    const [foundMarkers, setFoundMarkers] = useState<Set<string>>(new Set());\n    const [xrSupported, setXrSupported] = useState(false);\n    const [isTracking, setIsTracking] = useState(false);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const videoRef = useRef<HTMLVideoElement>(null);\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const rendererRef = useRef<any>(null);\n    const sceneRef = useRef<any>(null);\n    const animationFrameRef = useRef<number>();\n\n    // Quality settings\n    const qualityConfig = {\n      low: { resolution: 0.5, shadowMapSize: 512, antialias: false },\n      medium: { resolution: 0.75, shadowMapSize: 1024, antialias: true },\n      high: { resolution: 1, shadowMapSize: 2048, antialias: true },\n    };\n\n    const config = qualityConfig[quality];\n\n    // Check WebXR support\n    useEffect(() => {\n      if (\"xr\" in navigator) {\n        (navigator as any).xr\n          ?.isSessionSupported?.(xrMode)\n          .then((supported: boolean) => {\n            setXrSupported(supported);\n          })\n          .catch(() => {\n            setXrSupported(false);\n          });\n      }\n    }, [xrMode]);\n\n    // Initialize camera stream\n    useEffect(() => {\n      if (enableCamera && background === \"camera\") {\n        navigator.mediaDevices\n          ?.getUserMedia({\n            video: {\n              facingMode: \"environment\",\n              width: { ideal: 1280 },\n              height: { ideal: 720 },\n            },\n          })\n          .then((stream) => {\n            setCameraStream(stream);\n            if (videoRef.current) {\n              videoRef.current.srcObject = stream;\n              videoRef.current.play();\n            }\n          })\n          .catch(() => {\n            onError?.(new Error(\"Camera access required for AR preview\"));\n          });\n\n        return () => {\n          if (cameraStream) {\n            cameraStream.getTracks().forEach((track: any) => track.stop());\n          }\n        };\n      }\n    }, [enableCamera, background, cameraStream, onError]);\n\n    // Initialize AR renderer (simplified simulation)\n    useEffect(() => {\n      const initializeRenderer = () => {\n        setIsLoading(true);\n\n        try {\n          // In a real implementation, this would initialize Three.js or WebGL\n          // For this simulation, we'll use canvas 2D rendering\n          const canvas = canvasRef.current;\n          if (!canvas) return;\n\n          const ctx = canvas.getContext(\"2d\");\n          if (!ctx) return;\n\n          canvas.width = canvas.offsetWidth * window.devicePixelRatio;\n          canvas.height = canvas.offsetHeight * window.devicePixelRatio;\n          ctx.scale(window.devicePixelRatio, window.devicePixelRatio);\n\n          rendererRef.current = ctx;\n          sceneRef.current = { objects: [], markers: [] };\n\n          setIsLoading(false);\n        } catch (error) {\n          setHasError(true);\n          setIsLoading(false);\n          onError?.(error as Error);\n        }\n      };\n\n      initializeRenderer();\n    }, [onError]);\n\n    // Render AR scene\n    const renderScene = useCallback(() => {\n      const ctx = rendererRef.current;\n      const canvas = canvasRef.current;\n      if (!ctx || !canvas) return;\n\n      // Clear canvas\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Draw background\n      if (background === \"color\") {\n        ctx.fillStyle = backgroundColor;\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n      } else if (background === \"camera\" && videoRef.current) {\n        ctx.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height);\n      }\n\n      // Render objects (simplified 3D to 2D projection)\n      objects.forEach((object: any) => {\n        if (!object.visible) return;\n\n        const screenPos = project3DToScreen(\n          object.position,\n          camera,\n          canvas.width,\n          canvas.height\n        );\n\n        if (renderObject) {\n          // Custom rendering would go here in a real implementation\n        } else {\n          renderDefaultObject(ctx, object, screenPos);\n        }\n      });\n\n      // Render markers\n      markers.forEach((marker: any) => {\n        if (foundMarkers.has(marker.id)) {\n          renderMarker(ctx, marker);\n        }\n      });\n\n      // Render debug info\n      if (debug) {\n        renderDebugInfo(ctx);\n      }\n    }, [\n      objects,\n      markers,\n      camera,\n      background,\n      backgroundColor,\n      foundMarkers,\n      debug,\n      renderObject,\n    ]);\n\n    // Simplified 3D to 2D projection\n    const project3DToScreen = useCallback(\n      (\n        position: { x: number; y: number; z: number },\n        camera: ARCamera,\n        width: number,\n        height: number\n      ) => {\n        // Simplified perspective projection\n        const distance = Math.sqrt(\n          Math.pow(position.x - camera.position.x, 2) +\n            Math.pow(position.y - camera.position.y, 2) +\n            Math.pow(position.z - camera.position.z, 2)\n        );\n\n        const scale = 100 / (distance || 1);\n        const x = width / 2 + (position.x - camera.position.x) * scale;\n        const y = height / 2 - (position.y - camera.position.y) * scale;\n\n        return { x, y, scale, distance };\n      },\n      []\n    );\n\n    // Render default object representation\n    const renderDefaultObject = useCallback(\n      (\n        ctx: CanvasRenderingContext2D,\n        object: ARObject,\n        screenPos: { x: number; y: number; scale: number; distance: number }\n      ) => {\n        ctx.save();\n        ctx.globalAlpha = object.opacity;\n\n        const size = 40 * screenPos.scale * object.scale.x;\n        const isSelected = selectedObject === object.id;\n\n        // Draw object shadow\n        ctx.beginPath();\n        ctx.arc(\n          screenPos.x + 2,\n          screenPos.y + size / 2 + 2,\n          size / 2,\n          0,\n          2 * Math.PI\n        );\n        ctx.fillStyle =\n          \"rgba(var(--glass-color-black) / var(--glass-opacity-20))\";\n        ctx.fill();\n\n        // Draw object\n        ctx.beginPath();\n        ctx.arc(screenPos.x, screenPos.y, size / 2, 0, 2 * Math.PI);\n        ctx.fillStyle =\n          object.material?.color || \"hsl(var(--glass-color-primary))\";\n        ctx.fill();\n\n        // Draw selection ring\n        if (isSelected) {\n          ctx.strokeStyle = \"hsl(var(--glass-color-success))\";\n          ctx.lineWidth = 3;\n          ctx.stroke();\n        }\n\n        // Draw object label\n        ctx.fillStyle = \"var(--glass-white)\";\n        ctx.font = \"12px sans-serif\";\n        ctx.textAlign = \"center\";\n        ctx.fillText(object.name, screenPos.x, screenPos.y + size / 2 + 20);\n\n        // Animation effects\n        if (object.animation?.enabled) {\n          const time = Date.now() * 0.001 * object.animation.speed;\n          switch (object.animation.type) {\n            case \"pulse\":\n              const pulseScale = 1 + Math.sin(time) * 0.2;\n              ctx.scale(pulseScale, pulseScale);\n              break;\n            case \"rotate\":\n              ctx.rotate(time);\n              break;\n          }\n        }\n\n        ctx.restore();\n      },\n      [selectedObject]\n    );\n\n    // Render AR marker\n    const renderMarker = useCallback(\n      (ctx: CanvasRenderingContext2D, marker: ARMarker) => {\n        // Simplified marker representation\n        const x = Math.random() * ctx.canvas.width;\n        const y = Math.random() * ctx.canvas.height;\n        const size = marker.size || 50;\n\n        ctx.save();\n        ctx.strokeStyle = \"hsl(var(--glass-color-success))\";\n        ctx.lineWidth = 2;\n        ctx.setLineDash([5, 5]);\n\n        // Draw marker outline\n        ctx.strokeRect(x - size / 2, y - size / 2, size, size);\n\n        // Draw marker type indicator\n        ctx.fillStyle = \"hsl(var(--glass-color-success))\";\n        ctx.font = \"10px sans-serif\";\n        ctx.textAlign = \"center\";\n        ctx.fillText(marker.type.toUpperCase(), x, y + size / 2 + 15);\n\n        ctx.restore();\n      },\n      []\n    );\n\n    // Render debug information\n    const renderDebugInfo = useCallback(\n      (ctx: CanvasRenderingContext2D) => {\n        ctx.save();\n        ctx.fillStyle = \"var(--glass-text-secondary-dark)\";\n        ctx.fillRect(10, 10, 200, 120);\n\n        ctx.fillStyle = \"var(--glass-white)\";\n        ctx.font = \"11px monospace\";\n        ctx.textAlign = \"left\";\n\n        let y = 30;\n        ctx.fillText(`Objects: ${objects.length}`, 15, y);\n        y += 15;\n        ctx.fillText(`Markers: ${foundMarkers.size}/${markers.length}`, 15, y);\n        y += 15;\n        ctx.fillText(`Tracking: ${isTracking ? \"Active\" : \"Inactive\"}`, 15, y);\n        y += 15;\n        ctx.fillText(`XR Support: ${xrSupported ? \"Yes\" : \"No\"}`, 15, y);\n        y += 15;\n        ctx.fillText(`Quality: ${quality}`, 15, y);\n        y += 15;\n        ctx.fillText(`Mode: ${xrMode}`, 15, y);\n\n        ctx.restore();\n      },\n      [\n        objects.length,\n        foundMarkers.size,\n        markers.length,\n        isTracking,\n        xrSupported,\n        quality,\n        xrMode,\n      ]\n    );\n\n    // Animation loop\n    useEffect(() => {\n      const animate = () => {\n        renderScene();\n        animationFrameRef.current = requestAnimationFrame(animate);\n      };\n\n      if (!isLoading && !hasError) {\n        animate();\n      }\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [isLoading, hasError, renderScene]);\n\n    // Handle canvas interactions\n    const handleCanvasClick = useCallback(\n      (event: React.MouseEvent) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n\n        // Check if click intersects with any object\n        for (const object of objects) {\n          if (!object.visible) continue;\n\n          const screenPos = project3DToScreen(\n            object.position,\n            camera,\n            canvas.width,\n            canvas.height\n          );\n\n          const distance = Math.sqrt(\n            Math.pow(x - screenPos.x, 2) + Math.pow(y - screenPos.y, 2)\n          );\n\n          const objectSize = 40 * screenPos.scale * object.scale.x;\n          if (distance <= objectSize / 2) {\n            setSelectedObject(object.id);\n            onObjectSelect?.(object);\n            return;\n          }\n        }\n\n        // Click on empty space deselects\n        setSelectedObject(null);\n      },\n      [objects, camera, project3DToScreen, onObjectSelect]\n    );\n\n    // Start AR session\n    const startARSession = useCallback(async () => {\n      try {\n        if (xrSupported && xrMode === \"immersive-ar\") {\n          // In a real implementation, this would start WebXR session\n          setIsTracking(true);\n          onSessionStart?.();\n        } else {\n          // Fallback to inline mode\n          setIsTracking(true);\n          onSessionStart?.();\n        }\n      } catch (error) {\n        onError?.(error as Error);\n      }\n    }, [xrSupported, xrMode, onSessionStart, onError]);\n\n    // End AR session\n    const endARSession = useCallback(() => {\n      setIsTracking(false);\n      onSessionEnd?.();\n    }, [onSessionEnd]);\n\n    // Simulate marker detection\n    useEffect(() => {\n      if (isTracking && markers.length > 0) {\n        const interval = setInterval(() => {\n          const randomMarker =\n            markers[Math.floor(Math.random() * markers.length)];\n          const wasFound = foundMarkers.has(randomMarker.id);\n\n          if (Math.random() > 0.7) {\n            if (!wasFound) {\n              setFoundMarkers(\n                (prev: any) => new Set([...prev, randomMarker.id])\n              );\n              onMarkerFound?.(randomMarker);\n            }\n          } else if (wasFound && Math.random() > 0.8) {\n            setFoundMarkers((prev: Set<string>) => {\n              const newSet = new Set(prev);\n              newSet.delete(randomMarker.id);\n              return newSet;\n            });\n            onMarkerLost?.(randomMarker);\n          }\n        }, 2000);\n\n        return () => clearInterval(interval);\n      }\n    }, [isTracking, markers, foundMarkers, onMarkerFound, onMarkerLost]);\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        id={arPreviewId}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-ar-preview relative glass-radius-lg glass-backdrop-blur-md border border-border/20 overflow-hidden\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={shouldAnimate && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-relative glass-w-full glass-h-full\"\n        >\n          {/* Camera Feed */}\n          {background === \"camera\" && enableCamera && (\n            <video\n              ref={videoRef}\n              className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full glass-object-cover\"\n              autoPlay\n              muted\n              playsInline\n            />\n          )}\n\n          {/* AR Canvas */}\n          <canvas\n            ref={canvasRef}\n            className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full glass-cursor-pointer\"\n            onClick={handleCanvasClick}\n          />\n\n          {/* Loading State */}\n          {isLoading && (\n            <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n              {loadingComponent || (\n                <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-4\">\n                  <div className=\"glass-w-12 glass-h-12 glass-border-4 glass-border-primary glass-border-t-transparent glass-radius-full glass-animate-spin\" />\n                  <div className=\"glass-text-sm glass-text-secondary\">\n                    Initializing AR...\n                  </div>\n                </div>\n              )}\n            </div>\n          )}\n\n          {/* Error State */}\n          {hasError && (\n            <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n              {errorComponent || (\n                <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-4 glass-text-center\">\n                  <div className=\"glass-text-4xl\">\uD83D\uDD34</div>\n                  <div className=\"glass-text-sm glass-text-secondary\">\n                    AR initialization failed\n                  </div>\n                </div>\n              )}\n            </div>\n          )}\n\n          {/* Controls Overlay */}\n          {controlsOverlay && (\n            <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n              {controlsOverlay}\n            </div>\n          )}\n\n          {/* Default Controls */}\n          {!isLoading && !hasError && (\n            <div className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2\">\n              <OptimizedGlass\n                elevation=\"level3\"\n                intensity=\"strong\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              >\n                <button\n                  onClick={isTracking ? endARSession : startARSession}\n                  className={cn(\n                    \"glass-px-4 glass-py-2 glass-radius-md transition-all glass-text-sm font-medium\",\n                    isTracking\n                      ? \"bg-red-500/20 text-red-400 hover:bg-red-500/30\"\n                      : \"bg-primary/20 text-primary hover:bg-primary/30\"\n                  )}\n                >\n                  {isTracking ? \"Stop AR\" : \"Start AR\"}\n                </button>\n\n                {xrSupported && (\n                  <div className=\"glass-flex glass-items-center glass-gap-1 glass-text-xs glass-text-primary\">\n                    <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full\" />\n                    <span>XR Ready</span>\n                  </div>\n                )}\n\n                <div className=\"glass-text-xs glass-text-secondary\">\n                  Objects: {objects.filter((o: any) => o.visible).length}\n                </div>\n              </OptimizedGlass>\n            </div>\n          )}\n\n          {/* Object Info Panel */}\n          {selectedObject && (\n            <Motion\n              preset={\n                shouldAnimate && respectMotionPreference ? \"slideUp\" : \"none\"\n              }\n            >\n              <OptimizedGlass\n                elevation=\"level2\"\n                intensity=\"medium\"\n                depth={1}\n                tint=\"neutral\"\n                border=\"subtle\"\n                className=\"glass-absolute glass-top-4 glass-right-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-max-w-xs glass-contrast-guard\"\n              >\n                {(() => {\n                  const object = objects.find((o) => o.id === selectedObject);\n                  if (!object) return null;\n\n                  return (\n                    <div className=\"glass-gap-2\">\n                      <h3 className=\"glass-font-semibold glass-text-primary\">\n                        {object.name}\n                      </h3>\n                      <div className=\"glass-text-xs glass-gap-1 glass-text-secondary\">\n                        <div>\n                          Position: ({object.position.x.toFixed(1)},{\" \"}\n                          {object.position.y.toFixed(1)},{\" \"}\n                          {object.position.z.toFixed(1)})\n                        </div>\n                        <div>Scale: {object.scale.x.toFixed(2)}</div>\n                        <div>Opacity: {(object.opacity * 100).toFixed(0)}%</div>\n                        {object.animation?.enabled && (\n                          <div>Animation: {object.animation.type}</div>\n                        )}\n                      </div>\n                      <button\n                        onClick={() => setSelectedObject(null)}\n                        className=\"glass-text-xs glass-text-secondary hover:glass-text-primary glass-transition-colors\"\n                      >\n                        Close \u00D7\n                      </button>\n                    </div>\n                  );\n                })()}\n              </OptimizedGlass>\n            </Motion>\n          )}\n\n          {/* Tracking Status */}\n          {!isLoading && !hasError && (\n            <div className=\"glass-absolute glass-top-4 glass-left-4\">\n              <OptimizedGlass\n                elevation=\"level2\"\n                intensity=\"medium\"\n                depth={1}\n                tint=\"neutral\"\n                border=\"subtle\"\n                className=\"glass-px-3 glass-py-2 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              >\n                <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-xs\">\n                  <div\n                    className={cn(\n                      \"w-2 h-2 glass-radius-full\",\n                      isTracking ? \"bg-green-500 animate-pulse\" : \"bg-gray-500\"\n                    )}\n                  />\n                  <span className=\"glass-text-secondary\">\n                    {isTracking ? \"Tracking Active\" : \"Tracking Inactive\"}\n                  </span>\n                </div>\n              </OptimizedGlass>\n            </div>\n          )}\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassARPreview.displayName = \"GlassARPreview\";\n\nexport default GlassARPreview;\n", "'use client';\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\n\nexport interface FluidParticle {\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  density: number;\n  pressure: number;\n  color: [number, number, number, number];\n  id: string;\n}\n\nexport interface FluidForce {\n  x: number;\n  y: number;\n  strength: number;\n  type: \"push\" | \"pull\" | \"vortex\" | \"wave\";\n  radius: number;\n  id: string;\n}\n\nexport interface GlassFluidSimulationProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Number of fluid particles */\n  particleCount?: number;\n  /** Fluid viscosity (0-1) */\n  viscosity?: number;\n  /** Gravity strength */\n  gravity?: number;\n  /** Smoothing radius for SPH */\n  smoothingRadius?: number;\n  /** Rest density of fluid */\n  restDensity?: number;\n  /** Gas constant for pressure */\n  gasConstant?: number;\n  /** Damping factor */\n  damping?: number;\n  /** Whether to show particle trails */\n  showTrails?: boolean;\n  /** Trail length */\n  trailLength?: number;\n  /** Fluid color */\n  fluidColor?: [number, number, number, number];\n  /** Background color */\n  backgroundColor?: string;\n  /** Whether to enable interactive forces */\n  interactive?: boolean;\n  /** Force strength multiplier */\n  forceStrength?: number;\n  /** External forces */\n  forces?: FluidForce[];\n  /** Animation speed multiplier */\n  timeStep?: number;\n  /** Whether simulation is paused */\n  paused?: boolean;\n  /** Frame rate limit */\n  maxFPS?: number;\n  /** Debug mode */\n  debug?: boolean;\n  /** Show controls */\n  showControls?: boolean;\n  /** Fluid preset */\n  preset?: \"water\" | \"honey\" | \"mercury\" | \"gas\" | \"plasma\";\n  /** Change handler */\n  onChange?: (particles: FluidParticle[]) => void;\n  /** Force change handler */\n  onForceChange?: (forces: FluidForce[]) => void;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\n// Stable defaults defined at module scope to avoid new identities each render\nconst DEFAULT_FLUID_COLOR: [number, number, number, number] = [\n  100, 150, 255, 0.8,\n];\n\nexport const GlassFluidSimulation = forwardRef<\n  HTMLDivElement,\n  GlassFluidSimulationProps\n>(\n  (\n    {\n      width = 800,\n      height = 600,\n      particleCount = 200,\n      viscosity = 0.1,\n      gravity = 0.5,\n      smoothingRadius = 25,\n      restDensity = 1000,\n      gasConstant = 200,\n      damping = 0.99,\n      showTrails = true,\n      trailLength = 10,\n      fluidColor = DEFAULT_FLUID_COLOR,\n      backgroundColor = \"rgba(var(--glass-color-black) / var(--glass-opacity-10))\",\n      interactive = true,\n      forceStrength = 1,\n      forces = [],\n      timeStep = 0.016,\n      paused = false,\n      maxFPS = 60,\n      debug = false,\n      showControls = true,\n      preset = \"water\",\n      onChange,\n      onForceChange,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const { play } = useGlassSound();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const lastTimeRef = useRef<number>(0);\n    const simulationId = useA11yId(\"glass-fluid-simulation\");\n\n    const [particles, setParticles] = useState<FluidParticle[]>([]);\n    const [particleHistory, setParticleHistory] = useState<FluidParticle[][]>(\n      []\n    );\n    const [currentForces, setCurrentForces] = useState<FluidForce[]>(forces);\n    const [isRunning, setIsRunning] = useState(!paused);\n    const [fps, setFps] = useState(60);\n    const [currentPreset, setCurrentPreset] = useState(preset);\n    const [mousePos, setMousePos] = useState({ x: 0, y: 0 });\n    const [isMouseDown, setIsMouseDown] = useState(false);\n\n    // Stable refs to avoid re-creating callbacks on each render\n    const onChangeRef = useRef(onChange);\n    useEffect(() => {\n      onChangeRef.current = onChange;\n    }, [onChange]);\n    const onForceChangeRef = useRef(onForceChange);\n    useEffect(() => {\n      onForceChangeRef.current = onForceChange;\n    }, [onForceChange]);\n    const particlesRef = useRef<FluidParticle[]>(particles);\n    useEffect(() => {\n      particlesRef.current = particles;\n    }, [particles]);\n\n    // Fluid presets\n    const fluidPresets = {\n      water: {\n        viscosity: 0.1,\n        gravity: 0.5,\n        gasConstant: 200,\n        damping: 0.99,\n        color: [100, 150, 255, 0.8] as [number, number, number, number],\n      },\n      honey: {\n        viscosity: 0.8,\n        gravity: 0.3,\n        gasConstant: 150,\n        damping: 0.95,\n        color: [255, 200, 50, 0.9] as [number, number, number, number],\n      },\n      mercury: {\n        viscosity: 0.2,\n        gravity: 0.8,\n        gasConstant: 400,\n        damping: 0.98,\n        color: [192, 192, 192, 0.95] as [number, number, number, number],\n      },\n      gas: {\n        viscosity: 0.05,\n        gravity: -0.1,\n        gasConstant: 100,\n        damping: 0.999,\n        color: [200, 255, 200, 0.3] as [number, number, number, number],\n      },\n      plasma: {\n        viscosity: 0.01,\n        gravity: 0.1,\n        gasConstant: 300,\n        damping: 0.997,\n        color: [255, 100, 255, 0.7] as [number, number, number, number],\n      },\n    };\n\n    // Initialize particles\n    const initializeParticles = useCallback(() => {\n      const newParticles: FluidParticle[] = [];\n\n      for (let i = 0; i < particleCount; i++) {\n        newParticles.push({\n          x: Math.random() * width * 0.8 + width * 0.1,\n          y: Math.random() * height * 0.8 + height * 0.1,\n          vx: (Math.random() - 0.5) * 2,\n          vy: (Math.random() - 0.5) * 2,\n          density: restDensity,\n          pressure: 0,\n          color: [...fluidColor],\n          id: `particle-${i}`,\n        });\n      }\n\n      setParticles(newParticles);\n      setParticleHistory([newParticles]);\n      onChangeRef.current?.(newParticles);\n    }, [particleCount, width, height, restDensity]);\n\n    // Initialize on mount\n    useEffect(() => {\n      // Initialize on mount and when core dimensions change.\n      initializeParticles();\n      // Intentionally avoid `fluidColor` here to prevent an update loop\n      // when a new array instance is created each render.\n    }, [particleCount, width, height, restDensity, initializeParticles]);\n\n    // Apply preset changes\n    useEffect(() => {\n      const presetConfig = fluidPresets[currentPreset];\n      // Update fluid properties based on preset\n      // This would typically update the simulation parameters\n    }, [currentPreset]);\n\n    // SPH density calculation\n    const calculateDensity = useCallback(\n      (particles: FluidParticle[]) => {\n        const h = smoothingRadius;\n        const h2 = h * h;\n\n        particles.forEach((particle: any) => {\n          let density = 0;\n\n          particles.forEach((neighbor: any) => {\n            const dx = particle.x - neighbor.x;\n            const dy = particle.y - neighbor.y;\n            const distance2 = dx * dx + dy * dy;\n\n            if (distance2 < h2) {\n              const distance = Math.sqrt(distance2);\n              const influence = Math.max(0, h - distance);\n              density += influence * influence;\n            }\n          });\n\n          particle.density = Math.max(density, restDensity);\n          particle.pressure = gasConstant * (particle.density - restDensity);\n        });\n      },\n      [smoothingRadius, restDensity, gasConstant]\n    );\n\n    // SPH force calculation\n    const calculateForces = useCallback(\n      (particles: FluidParticle[]) => {\n        const h = smoothingRadius;\n\n        particles.forEach((particle: any) => {\n          let fx = 0,\n            fy = 0;\n\n          // Pressure and viscosity forces\n          particles.forEach((neighbor: any) => {\n            if (particle.id === neighbor.id) return;\n\n            const dx = particle.x - neighbor.x;\n            const dy = particle.y - neighbor.y;\n            const distance = Math.sqrt(dx * dx + dy * dy);\n\n            if (distance < h && distance > 0) {\n              const influence = (h - distance) / h;\n\n              // Pressure force\n              const pressureForce =\n                ((particle.pressure + neighbor.pressure) /\n                  (2 * neighbor.density)) *\n                influence;\n              fx += (dx / distance) * pressureForce;\n              fy += (dy / distance) * pressureForce;\n\n              // Viscosity force\n              const viscosityForce = (viscosity * influence) / neighbor.density;\n              fx += (neighbor.vx - particle.vx) * viscosityForce;\n              fy += (neighbor.vy - particle.vy) * viscosityForce;\n            }\n          });\n\n          // Apply external forces\n          currentForces.forEach((force: any) => {\n            const dx = particle.x - force.x;\n            const dy = particle.y - force.y;\n            const distance = Math.sqrt(dx * dx + dy * dy);\n\n            if (distance < force.radius) {\n              const influence = (force.radius - distance) / force.radius;\n              const forceAmount = force.strength * influence * forceStrength;\n\n              switch (force.type) {\n                case \"push\":\n                  if (distance > 0) {\n                    fx += (dx / distance) * forceAmount;\n                    fy += (dy / distance) * forceAmount;\n                  }\n                  break;\n                case \"pull\":\n                  if (distance > 0) {\n                    fx -= (dx / distance) * forceAmount;\n                    fy -= (dy / distance) * forceAmount;\n                  }\n                  break;\n                case \"vortex\":\n                  fx += -dy * forceAmount * 0.01;\n                  fy += dx * forceAmount * 0.01;\n                  break;\n                case \"wave\":\n                  fx += Math.sin(Date.now() * 0.001) * forceAmount;\n                  fy += Math.cos(Date.now() * 0.001) * forceAmount;\n                  break;\n              }\n            }\n          });\n\n          // Interactive mouse force\n          if (interactive && isMouseDown) {\n            const dx = particle.x - mousePos.x;\n            const dy = particle.y - mousePos.y;\n            const distance = Math.sqrt(dx * dx + dy * dy);\n\n            if (distance < 100 && distance > 0) {\n              const influence = (100 - distance) / 100;\n              const mouseForce = 50 * influence * forceStrength;\n              fx -= (dx / distance) * mouseForce;\n              fy -= (dy / distance) * mouseForce;\n            }\n          }\n\n          // Gravity\n          fy += gravity;\n\n          // Update velocity\n          particle.vx += fx * timeStep;\n          particle.vy += fy * timeStep;\n\n          // Apply damping\n          particle.vx *= damping;\n          particle.vy *= damping;\n        });\n      },\n      [\n        smoothingRadius,\n        viscosity,\n        currentForces,\n        forceStrength,\n        interactive,\n        isMouseDown,\n        mousePos,\n        gravity,\n        timeStep,\n        damping,\n      ]\n    );\n\n    // Update particle positions\n    const updatePositions = useCallback(\n      (particles: FluidParticle[]) => {\n        particles.forEach((particle: any) => {\n          // Update position\n          particle.x += particle.vx * timeStep;\n          particle.y += particle.vy * timeStep;\n\n          // Boundary collisions\n          if (particle.x < 10) {\n            particle.x = 10;\n            particle.vx = Math.abs(particle.vx) * 0.5;\n          }\n          if (particle.x > width - 10) {\n            particle.x = width - 10;\n            particle.vx = -Math.abs(particle.vx) * 0.5;\n          }\n          if (particle.y < 10) {\n            particle.y = 10;\n            particle.vy = Math.abs(particle.vy) * 0.5;\n          }\n          if (particle.y > height - 10) {\n            particle.y = height - 10;\n            particle.vy = -Math.abs(particle.vy) * 0.5;\n          }\n\n          // Update particle color based on velocity\n          const speed = Math.sqrt(\n            particle.vx * particle.vx + particle.vy * particle.vy\n          );\n          const speedNormalized = Math.min(speed / 10, 1);\n          particle.color[0] = fluidColor[0] + speedNormalized * 100;\n          particle.color[1] = fluidColor[1];\n          particle.color[2] = fluidColor[2] + speedNormalized * 50;\n        });\n      },\n      [timeStep, width, height, fluidColor]\n    );\n\n    // Render simulation\n    const render = useCallback(\n      (particles: FluidParticle[]) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const ctx = canvas.getContext(\"2d\");\n        if (!ctx) return;\n\n        // Clear canvas\n        ctx.fillStyle = backgroundColor;\n        ctx.fillRect(0, 0, width, height);\n\n        // Draw trails\n        if (showTrails && particleHistory.length > 1) {\n          particleHistory.forEach((historyParticles, historyIndex) => {\n            const alpha = (historyIndex / particleHistory.length) * 0.3;\n\n            historyParticles.forEach((particle: any) => {\n              ctx.globalAlpha = alpha;\n              ctx.fillStyle = `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, ${alpha})`;\n              ctx.beginPath();\n              ctx.arc(particle.x, particle.y, 2, 0, Math.PI * 2);\n              ctx.fill();\n            });\n          });\n        }\n\n        // Draw particles\n        ctx.globalAlpha = 1;\n        particles.forEach((particle: any) => {\n          const size = Math.max(2, (particle.density / restDensity) * 4);\n\n          // Create gradient\n          const gradient = ctx.createRadialGradient(\n            particle.x,\n            particle.y,\n            0,\n            particle.x,\n            particle.y,\n            size\n          );\n          gradient.addColorStop(\n            0,\n            `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, ${particle.color[3]})`\n          );\n          gradient.addColorStop(\n            1,\n            `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, 0)`\n          );\n\n          ctx.fillStyle = gradient;\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, size, 0, Math.PI * 2);\n          ctx.fill();\n        });\n\n        // Draw forces\n        currentForces.forEach((force: any) => {\n          ctx.strokeStyle =\n            force.type === \"push\"\n              ? \"red\"\n              : force.type === \"pull\"\n                ? \"blue\"\n                : force.type === \"vortex\"\n                  ? \"purple\"\n                  : \"green\";\n          ctx.globalAlpha = 0.3;\n          ctx.lineWidth = 2;\n          ctx.beginPath();\n          ctx.arc(force.x, force.y, force.radius, 0, Math.PI * 2);\n          ctx.stroke();\n        });\n\n        // Draw debug info\n        if (debug) {\n          ctx.fillStyle = \"white\";\n          ctx.font = \"12px monospace\";\n          ctx.globalAlpha = 1;\n          ctx.fillText(`FPS: ${fps}`, 10, 20);\n          ctx.fillText(`Particles: ${particles.length}`, 10, 40);\n          ctx.fillText(`Forces: ${currentForces.length}`, 10, 60);\n        }\n\n        // Draw interactive mouse force\n        if (interactive && isMouseDown) {\n          ctx.strokeStyle = \"yellow\";\n          ctx.globalAlpha = 0.5;\n          ctx.lineWidth = 1;\n          ctx.beginPath();\n          ctx.arc(mousePos.x, mousePos.y, 100, 0, Math.PI * 2);\n          ctx.stroke();\n        }\n      },\n      [\n        backgroundColor,\n        width,\n        height,\n        showTrails,\n        particleHistory,\n        restDensity,\n        currentForces,\n        debug,\n        fps,\n        interactive,\n        isMouseDown,\n        mousePos,\n      ]\n    );\n\n    // Animation loop\n    const animate = useCallback(\n      (currentTime: number) => {\n        if (prefersReducedMotion && respectMotionPreference) {\n          return;\n        }\n\n        if (!isRunning) return;\n\n        const deltaTime = currentTime - lastTimeRef.current;\n        if (deltaTime < 1000 / maxFPS) {\n          animationRef.current = requestAnimationFrame(animate);\n          return;\n        }\n\n        lastTimeRef.current = currentTime;\n        setFps(Math.round(1000 / deltaTime));\n\n        setParticles((prevParticles) => {\n          const newParticles = [...prevParticles];\n\n          // SPH simulation steps\n          calculateDensity(newParticles);\n          calculateForces(newParticles);\n          updatePositions(newParticles);\n\n          // Update history for trails\n          if (showTrails) {\n            setParticleHistory((prevHistory) => {\n              const newHistory = [...prevHistory, [...newParticles]];\n              return newHistory.slice(-trailLength);\n            });\n          }\n\n          onChangeRef.current?.(newParticles);\n          // keep ref in sync for rendering\n          particlesRef.current = newParticles;\n          return newParticles;\n        });\n\n        render(particlesRef.current);\n        animationRef.current = requestAnimationFrame(animate);\n      },\n      [\n        prefersReducedMotion,\n        respectMotionPreference,\n        isRunning,\n        maxFPS,\n        calculateDensity,\n        calculateForces,\n        updatePositions,\n        showTrails,\n        trailLength,\n        render,\n      ]\n    );\n\n    // Start animation\n    useEffect(() => {\n      if (isRunning && !prefersReducedMotion) {\n        animationRef.current = requestAnimationFrame(animate);\n      }\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [animate, isRunning, prefersReducedMotion]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (ctx) {\n        ctx.imageSmoothingEnabled = true;\n      }\n    }, [width, height]);\n\n    // Mouse event handlers\n    const handleMouseMove = useCallback(\n      (event: React.MouseEvent<HTMLCanvasElement>) => {\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        setMousePos({\n          x: event.clientX - rect.left,\n          y: event.clientY - rect.top,\n        });\n      },\n      []\n    );\n\n    const handleMouseDown = useCallback(\n      (event: React.MouseEvent<HTMLCanvasElement>) => {\n        setIsMouseDown(true);\n        play(\"tap\");\n      },\n      [play]\n    );\n\n    const handleMouseUp = useCallback(() => {\n      setIsMouseDown(false);\n    }, []);\n\n    // Add force\n    const addForce = useCallback(\n      (force: Omit<FluidForce, \"id\">) => {\n        const newForce: FluidForce = {\n          ...force,\n          id: `force-${Date.now()}-${Math.random()}`,\n        };\n\n        setCurrentForces((prev: any) => {\n          const updated = [...prev, newForce];\n          onForceChangeRef.current?.(updated);\n          return updated;\n        });\n        play(\"success\");\n      },\n      [play]\n    );\n\n    // Remove force\n    const removeForce = useCallback(\n      (forceId: string) => {\n        setCurrentForces((prev: any) => {\n          const updated = prev.filter((f: any) => f.id !== forceId);\n          onForceChangeRef.current?.(updated);\n          return updated;\n        });\n        play(\"error\");\n      },\n      [play]\n    );\n\n    // Control panel\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-fluid-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <button\n              onClick={() => setIsRunning(!isRunning)}\n              className='glass-px-3 glass-py-1 glass-radius-md glass-surface-primary/20 hover:glass-surface-primary/30 glass-text-primary'\n            >\n              {isRunning ? \"Pause\" : \"Play\"}\n            </button>\n            <button\n              onClick={initializeParticles}\n              className='glass-px-3 glass-py-1 glass-radius-md glass-bg-secondary/20 hover:glass-bg-secondary/30 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard'\n            >\n              Reset\n            </button>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"preset-select\">Preset:</label>\n            <select\n              id=\"preset-select\"\n              value={currentPreset}\n              onChange={(e) => setCurrentPreset(e.target.value as any)}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20\"\n              aria-label=\"Select fluid simulation preset\"\n            >\n              {Object.keys(fluidPresets).map((preset: any) => (\n                <option key={preset} value={preset}>\n                  {preset.charAt(0).toUpperCase() + preset.slice(1)}\n                </option>\n              ))}\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <button\n              onClick={() =>\n                addForce({\n                  x: width / 2,\n                  y: height / 2,\n                  strength: 10,\n                  type: \"push\",\n                  radius: 50,\n                })\n              }\n              className='glass-px-2 glass-py-1 glass-radius-md glass-surface-red/20 hover:glass-surface-red/30 glass-text-primary glass-text-sm'\n            >\n              Add Push\n            </button>\n            <button\n              onClick={() =>\n                addForce({\n                  x: width / 2,\n                  y: height / 2,\n                  strength: 10,\n                  type: \"pull\",\n                  radius: 50,\n                })\n              }\n              className='glass-px-2 glass-py-1 glass-radius-md glass-surface-blue/20 hover:glass-surface-blue/30 glass-text-primary glass-text-sm'\n            >\n              Add Pull\n            </button>\n            <button\n              onClick={() =>\n                addForce({\n                  x: width / 2,\n                  y: height / 2,\n                  strength: 10,\n                  type: \"vortex\",\n                  radius: 100,\n                })\n              }\n              className='glass-px-2 glass-py-1 glass-radius-md glass-surface-primary/20 hover:glass-surface-primary/30 glass-text-primary glass-text-sm'\n            >\n              Add Vortex\n            </button>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showTrails}\n                onChange={(e) => setParticleHistory([])}\n                className=\"glass-mr-1\"\n              />\n              Trails\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={debug}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Debug\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={simulationId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-fluid-simulation relative glass-radius-lg glass-backdrop-blur-md border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className='glass-relative'>\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className={cn(\n                \"border border-border/20 glass-radius-md bg-black/10\",\n                interactive && \"cursor-crosshair\"\n              )}\n              onMouseMove={handleMouseMove}\n              onMouseDown={handleMouseDown}\n              onMouseUp={handleMouseUp}\n              onMouseLeave={handleMouseUp}\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassFluidSimulation.displayName = \"GlassFluidSimulation\";\n\nexport default GlassFluidSimulation;", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\n\nexport interface HologramLayer {\n  id: string;\n  type: \"image\" | \"video\" | \"text\" | \"shape\" | \"particle\";\n  content?: string | React.ReactNode;\n  source?: string;\n  opacity: number;\n  depth: number; // Z-axis position\n  rotation: { x: number; y: number; z: number };\n  scale: { x: number; y: number; z: number };\n  position: { x: number; y: number; z: number };\n  animation?: {\n    type: \"rotate\" | \"float\" | \"pulse\" | \"fade\" | \"wave\" | \"spiral\";\n    speed: number;\n    amplitude: number;\n    enabled: boolean;\n  };\n  glitch?: {\n    enabled: boolean;\n    intensity: number;\n    frequency: number;\n  };\n  holographic?: {\n    interference: boolean;\n    chromatic: boolean;\n    scanlines: boolean;\n    noise: number;\n  };\n}\n\nexport interface HologramProjection {\n  angle: number; // Viewing angle\n  distance: number; // Distance from viewer\n  height: number; // Projection height\n  tilt: number; // Vertical tilt\n}\n\nexport interface GlassHologramProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Hologram layers */\n  layers?: HologramLayer[];\n  /** Projection settings */\n  projection?: HologramProjection;\n  /** Holographic effects intensity */\n  intensity?: \"low\" | \"medium\" | \"high\" | \"ultra\";\n  /** Color scheme */\n  colorScheme?:\n    | \"blue\"\n    | \"green\"\n    | \"red\"\n    | \"purple\"\n    | \"cyan\"\n    | \"white\"\n    | \"rainbow\";\n  /** Environment lighting */\n  ambientLight?: number;\n  /** Whether to enable auto-rotation */\n  autoRotate?: boolean;\n  /** Auto-rotation speed */\n  rotationSpeed?: number;\n  /** Whether to respond to mouse movement */\n  interactive?: boolean;\n  /** Hologram size */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Background pattern */\n  background?: \"none\" | \"grid\" | \"circuit\" | \"matrix\" | \"particles\";\n  /** Scan line effect */\n  scanLines?: boolean;\n  /** Glitch effects */\n  glitchEnabled?: boolean;\n  /** Chromatic aberration */\n  chromaticAberration?: boolean;\n  /** Noise overlay */\n  noiseOverlay?: boolean;\n  /** Depth of field blur */\n  depthOfField?: boolean;\n  /** Layer selection handler */\n  onLayerSelect?: (layer: HologramLayer) => void;\n  /** Projection change handler */\n  onProjectionChange?: (projection: HologramProjection) => void;\n  /** Custom shader effects */\n  customShaders?: string[];\n  /** Loading state */\n  loading?: boolean;\n  /** Error state */\n  error?: string;\n  /** Controls overlay */\n  showControls?: boolean;\n  /** Debug mode */\n  debug?: boolean;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassHologram = forwardRef<HTMLDivElement, GlassHologramProps>(\n  (\n    {\n      layers = [],\n      projection = { angle: 0, distance: 100, height: 200, tilt: 0 },\n      intensity = \"medium\",\n      colorScheme = \"cyan\",\n      ambientLight = 0.3,\n      autoRotate = false,\n      rotationSpeed = 1,\n      interactive = true,\n      size = \"md\",\n      background = \"grid\",\n      scanLines = true,\n      glitchEnabled = false,\n      chromaticAberration = true,\n      noiseOverlay = true,\n      depthOfField = true,\n      onLayerSelect,\n      onProjectionChange,\n      customShaders = [],\n      loading = false,\n      error,\n      showControls = true,\n      debug = false,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const { play, feedback } = useGlassSound();\n    const hologramId = useA11yId(\"glass-hologram\");\n\n    const [currentProjection, setCurrentProjection] = useState(projection);\n    const [selectedLayer, setSelectedLayer] = useState<string | null>(null);\n    const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n    const [isHovering, setIsHovering] = useState(false);\n    const [animationTime, setAnimationTime] = useState(0);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const hologramRef = useRef<HTMLDivElement>(null);\n    const animationFrameRef = useRef<number>();\n\n    // Size configurations\n    const sizeConfig = {\n      sm: { width: 200, height: 150, scale: 0.8 },\n      md: { width: 300, height: 225, scale: 1 },\n      lg: { width: 400, height: 300, scale: 1.2 },\n      xl: { width: 500, height: 375, scale: 1.5 },\n    };\n\n    const config = sizeConfig[size];\n\n    // Color scheme configurations\n    const colorSchemes = {\n      blue: {\n        primary: \"hsl(var(--glass-color-primary))\",\n        secondary: \"#1E40AF\",\n        accent: \"var(--glass-color-primary-light)\",\n      },\n      green: {\n        primary: \"hsl(var(--glass-color-success))\",\n        secondary: \"#047857\",\n        accent: \"var(--glass-color-success-light)\",\n      },\n      red: {\n        primary: \"hsl(var(--glass-color-danger))\",\n        secondary: \"#B91C1C\",\n        accent: \"var(--glass-color-danger-light)\",\n      },\n      purple: { primary: \"#8B5CF6\", secondary: \"#6D28D9\", accent: \"#A78BFA\" },\n      cyan: { primary: \"#06B6D4\", secondary: \"#0891B2\", accent: \"#22D3EE\" },\n      white: {\n        primary: \"var(--glass-white)\",\n        secondary: \"var(--glass-gray-200)\",\n        accent: \"var(--glass-gray-100)\",\n      },\n      rainbow: { primary: \"#FF0080\", secondary: \"#00FF80\", accent: \"#8000FF\" },\n    };\n\n    const colors = colorSchemes[colorScheme];\n\n    // Animation loop\n    useEffect(() => {\n      const animate = () => {\n        setAnimationTime((prev: any) => prev + 0.016); // ~60fps\n\n        if (autoRotate) {\n          setCurrentProjection((prev: any) => ({\n            ...prev,\n            angle: (prev.angle + rotationSpeed * 0.5) % 360,\n          }));\n        }\n\n        animationFrameRef.current = requestAnimationFrame(animate);\n      };\n\n      if (!prefersReducedMotion && !loading) {\n        animate();\n      }\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [prefersReducedMotion, loading, autoRotate, rotationSpeed]);\n\n    // Handle mouse movement for interactive projection\n    const handleMouseMove = useCallback(\n      (event: React.MouseEvent) => {\n        if (!interactive || !containerRef.current) return;\n\n        const rect = containerRef.current.getBoundingClientRect();\n        const x = ((event.clientX - rect.left) / rect.width - 0.5) * 2;\n        const y = ((event.clientY - rect.top) / rect.height - 0.5) * 2;\n\n        setMousePosition({ x, y });\n\n        if (interactive) {\n          const newProjection = {\n            ...currentProjection,\n            angle: currentProjection.angle + x * 10,\n            tilt: currentProjection.tilt + y * 5,\n          };\n\n          setCurrentProjection(newProjection);\n          onProjectionChange?.(newProjection);\n        }\n      },\n      [interactive, currentProjection, onProjectionChange]\n    );\n\n    // Calculate layer transform\n    const getLayerTransform = useCallback(\n      (layer: HologramLayer) => {\n        let transform = \"\";\n\n        // Base positioning\n        const { x, y, z } = layer.position;\n        const { x: scaleX, y: scaleY, z: scaleZ } = layer.scale;\n        const { x: rotX, y: rotY, z: rotZ } = layer.rotation;\n\n        // Animation transforms\n        let animX = x,\n          animY = y,\n          animZ = z;\n        let animRotX = rotX,\n          animRotY = rotY,\n          animRotZ = rotZ;\n        let animScale = 1;\n\n        if (layer.animation?.enabled) {\n          const { type, speed, amplitude } = layer.animation;\n          const time = animationTime * speed;\n\n          switch (type) {\n            case \"float\":\n              animY += Math.sin(time) * amplitude;\n              break;\n            case \"rotate\":\n              animRotY += time * 50;\n              break;\n            case \"pulse\":\n              animScale = 1 + Math.sin(time) * amplitude * 0.2;\n              break;\n            case \"wave\":\n              animX += Math.sin(time) * amplitude;\n              animZ += Math.cos(time) * amplitude;\n              break;\n            case \"spiral\":\n              animX += Math.sin(time) * amplitude;\n              animY += Math.cos(time) * amplitude;\n              animRotZ += time * 30;\n              break;\n          }\n        }\n\n        // Projection-based transforms\n        const perspective = 800;\n        const projectionScale = perspective / (perspective + layer.depth);\n\n        transform += `perspective(${perspective}px) `;\n        transform += `translate3d(${animX}px, ${animY}px, ${animZ}px) `;\n        transform += `rotateX(${animRotX + currentProjection.tilt}deg) `;\n        transform += `rotateY(${animRotY + currentProjection.angle}deg) `;\n        transform += `rotateZ(${animRotZ}deg) `;\n        transform += `scale3d(${scaleX * animScale * projectionScale}, ${scaleY * animScale * projectionScale}, ${scaleZ * animScale}) `;\n\n        return transform;\n      },\n      [animationTime, currentProjection]\n    );\n\n    // Calculate layer style\n    const getLayerStyle = useCallback(\n      (layer: HologramLayer) => {\n        const style: React.CSSProperties = {\n          position: \"absolute\",\n          top: \"50%\",\n          left: \"50%\",\n          transform: getLayerTransform(layer),\n          transformOrigin: \"center center\",\n          opacity: layer.opacity,\n          zIndex: Math.round(100 - layer.depth),\n          pointerEvents: selectedLayer === layer.id ? \"auto\" : \"none\",\n        };\n\n        // Holographic effects\n        if (layer.holographic?.chromatic && chromaticAberration) {\n          style.filter = `drop-shadow(2px 0 0 ${colors.primary}40) drop-shadow(-2px 0 0 ${colors.secondary}40)`;\n        }\n\n        if (layer.holographic?.interference) {\n          style.background = `linear-gradient(90deg, transparent 49%, ${colors.accent}20 50%, transparent 51%)`;\n          style.backgroundSize = \"2px 100%\";\n          style.animation = !prefersReducedMotion\n            ? \"interference 2s linear infinite\"\n            : undefined;\n        }\n\n        // Glitch effects\n        if (layer.glitch?.enabled && glitchEnabled) {\n          const glitchIntensity = layer.glitch.intensity;\n          const offset = Math.random() * glitchIntensity;\n          style.transform += ` translateX(${offset}px)`;\n\n          if (Math.random() < layer.glitch.frequency) {\n            style.filter =\n              (style.filter || \"\") + ` hue-rotate(${Math.random() * 360}deg)`;\n          }\n        }\n\n        return style;\n      },\n      [\n        getLayerTransform,\n        selectedLayer,\n        colors,\n        chromaticAberration,\n        glitchEnabled,\n        prefersReducedMotion,\n      ]\n    );\n\n    // Handle layer click\n    const handleLayerClick = useCallback(\n      (layer: HologramLayer) => {\n        setSelectedLayer(layer.id === selectedLayer ? null : layer.id);\n        onLayerSelect?.(layer);\n        feedback(\"tap\");\n      },\n      [selectedLayer, onLayerSelect, feedback]\n    );\n\n    // Render layer content\n    const renderLayerContent = useCallback(\n      (layer: HologramLayer) => {\n        switch (layer.type) {\n          case \"text\":\n            return (\n              <div\n                className={cn(\n                  \"text-center font-mono whitespace-nowrap\",\n                  \"select-none pointer-events-none\"\n                )}\n                style={{\n                  color: colors.primary,\n                  textShadow: `0 0 10px ${colors.primary}80`,\n                  fontSize: `${config.scale}rem`,\n                }}\n              >\n                {layer.content}\n              </div>\n            );\n\n          case \"image\":\n            return (\n              <img\n                src={layer.source}\n                alt={layer.id}\n                className=\"glass-max-w-full glass-max-h-full glass-object-contain glass-select-none\"\n                style={{\n                  filter: `drop-shadow(0 0 20px ${colors.primary}60)`,\n                }}\n                draggable={false}\n              />\n            );\n\n          case \"video\":\n            return (\n              <video\n                src={layer.source}\n                className=\"glass-max-w-full glass-max-h-full glass-object-contain\"\n                style={{\n                  filter: `drop-shadow(0 0 20px ${colors.primary}60)`,\n                }}\n                autoPlay\n                muted\n                loop\n                playsInline\n              />\n            );\n\n          case \"shape\":\n            return (\n              <div\n                className=\"glass-w-16 glass-h-16 glass-border-2 glass-radius-lg\"\n                style={{\n                  borderColor: colors.primary,\n                  backgroundColor: `${colors.primary}20`,\n                  boxShadow: `0 0 20px ${colors.primary}60, inset 0 0 10px ${colors.primary}40`,\n                }}\n              />\n            );\n\n          case \"particle\":\n            return (\n              <div className=\"glass-relative glass-w-20 glass-h-20\">\n                {Array.from({ length: 8 }, (_, i) => (\n                  <div\n                    key={i}\n                    className=\"glass-absolute glass-w-1 glass-h-1 glass-radius-full\"\n                    style={{\n                      backgroundColor: colors.accent,\n                      boxShadow: `0 0 4px ${colors.accent}`,\n                      left: `${Math.cos((i / 8) * Math.PI * 2) * 30 + 40}px`,\n                      top: `${Math.sin((i / 8) * Math.PI * 2) * 30 + 40}px`,\n                      animation: !prefersReducedMotion\n                        ? `particle-orbit ${2 + i * 0.2}s linear infinite`\n                        : undefined,\n                    }}\n                  />\n                ))}\n              </div>\n            );\n\n          default:\n            return layer.content;\n        }\n      },\n      [colors, config.scale, prefersReducedMotion]\n    );\n\n    // Render background pattern\n    const renderBackground = useCallback(() => {\n      switch (background) {\n        case \"grid\":\n          return (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-opacity-20\"\n              style={{\n                backgroundImage: `\n                  linear-gradient(${colors.primary}40 1px, transparent 1px),\n                  linear-gradient(90deg, ${colors.primary}40 1px, transparent 1px)\n                `,\n                backgroundSize: \"20px 20px\",\n              }}\n            />\n          );\n\n        case \"circuit\":\n          return (\n            <div className=\"glass-absolute glass-inset-0 glass-opacity-10\">\n              <svg className=\"glass-w-full glass-h-full\">\n                {Array.from({ length: 10 }, (_, i) => (\n                  <g key={i}>\n                    <path\n                      d={`M${i * 30} 0 L${i * 30} ${config.height} M0 ${i * 25} L${config.width} ${i * 25}`}\n                      stroke={colors.primary}\n                      strokeWidth=\"0.5\"\n                      fill=\"none\"\n                    />\n                    <circle\n                      cx={i * 30}\n                      cy={i * 25}\n                      r=\"2\"\n                      fill={colors.accent}\n                    />\n                  </g>\n                ))}\n              </svg>\n            </div>\n          );\n\n        case \"matrix\":\n          return (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-opacity-15 glass-font-mono glass-text-xs glass-overflow-hidden\"\n              style={{ color: colors.primary }}\n            >\n              {Array.from({ length: 20 }, (_, i) => (\n                <div\n                  key={i}\n                  className=\"glass-absolute glass-whitespace-nowrap glass-animate-pulse\"\n                  style={{\n                    left: `${i * 5}%`,\n                    top: `${Math.random() * 100}%`,\n                    animationDelay: `${Math.random() * 2}s`,\n                  }}\n                >\n                  {Math.random().toString(36).substring(7)}\n                </div>\n              ))}\n            </div>\n          );\n\n        case \"particles\":\n          return (\n            <div className=\"glass-absolute glass-inset-0\">\n              {Array.from({ length: 30 }, (_, i) => (\n                <div\n                  key={i}\n                  className=\"glass-absolute glass-w-1 glass-h-1 glass-radius-full glass-opacity-30\"\n                  style={{\n                    backgroundColor: colors.accent,\n                    left: `${Math.random() * 100}%`,\n                    top: `${Math.random() * 100}%`,\n                    animation: !prefersReducedMotion\n                      ? `float ${3 + Math.random() * 2}s ease-in-out infinite alternate`\n                      : undefined,\n                    animationDelay: `${Math.random() * 2}s`,\n                  }}\n                />\n              ))}\n            </div>\n          );\n\n        default:\n          return null;\n      }\n    }, [background, colors, config, prefersReducedMotion]);\n\n    // Render scan lines overlay\n    const renderScanLines = () => {\n      if (!scanLines) return null;\n\n      return (\n        <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-20\">\n          <div\n            className=\"glass-w-full glass-h-full\"\n            ref={(el) => {\n              if (!el) return;\n              el.style.background = `repeating-linear-gradient(0deg, transparent, transparent 2px, ${colors.primary}40 2px, ${colors.primary}40 4px)`;\n              el.style.animation = !prefersReducedMotion\n                ? \"scan 2s linear infinite\"\n                : \"\";\n            }}\n          />\n        </div>\n      );\n    };\n\n    // Render noise overlay\n    const renderNoiseOverlay = () => {\n      if (!noiseOverlay) return null;\n\n      return (\n        <div\n          className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-10\"\n          ref={(el) => {\n            if (!el) return;\n            el.style.background =\n              \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\\\")\";\n            el.style.animation = !prefersReducedMotion\n              ? \"noise 0.2s steps(10) infinite\"\n              : \"\";\n          }}\n        />\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        id={hologramId}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-hologram relative glass-radius-lg glass-backdrop-blur-md border border-border/20 overflow-hidden\",\n          className\n        )}\n        style={{\n          width: config.width,\n          height: config.height,\n          background: `radial-gradient(circle, ${colors.primary}10 0%, transparent 70%)`,\n        }}\n        onMouseMove={handleMouseMove}\n        onMouseEnter={() => setIsHovering(true)}\n        onMouseLeave={() => setIsHovering(false)}\n        role=\"region\"\n        aria-label=\"Holographic display\"\n        {...props}\n      >\n        <Motion\n          preset={\n            !prefersReducedMotion && respectMotionPreference ? \"fadeIn\" : \"none\"\n          }\n          className=\"glass-relative glass-w-full glass-h-full\"\n        >\n          {/* Background Pattern */}\n          {renderBackground()}\n\n          {/* Loading State */}\n          {loading && (\n            <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n              <div className=\"glass-flex glass-flex-col glass-items-center glass-gap-4\">\n                <div\n                  className=\"glass-w-12 glass-h-12 glass-border-4 glass-border-t-transparent glass-radius-full glass-animate-spin\"\n                  style={{\n                    borderColor: colors.primary,\n                    borderTopColor: \"transparent\",\n                  }}\n                />\n                <div\n                  className=\"glass-text-sm\"\n                  style={{ color: colors.primary }}\n                >\n                  Initializing Hologram...\n                </div>\n              </div>\n            </div>\n          )}\n\n          {/* Error State */}\n          {error && (\n            <div className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\">\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-mb-2\">\u26A0\uFE0F</div>\n                <div\n                  className=\"glass-text-sm\"\n                  style={{ color: colors.primary }}\n                >\n                  {error}\n                </div>\n              </div>\n            </div>\n          )}\n\n          {/* Hologram Container */}\n          {!loading && !error && (\n            <div\n              ref={hologramRef}\n              className=\"glass-relative glass-w-full glass-h-full\"\n              style={{\n                ...{\n                  transformStyle: \"preserve-3d\",\n                  perspective: \"800px\",\n                },\n              }}\n            >\n              {/* Hologram Layers */}\n              {layers.map((layer, index) => {\n                const layerStyle = {\n                  ...getLayerStyle(layer),\n                  \"--ring-color\": colors.accent,\n                } as React.CSSProperties;\n\n                return (\n                  <Motion\n                    key={layer.id}\n                    preset={\n                      !prefersReducedMotion && respectMotionPreference\n                        ? \"scaleIn\"\n                        : \"none\"\n                    }\n                    delay={index * 100}\n                  >\n                    <div\n                      className={cn(\n                        \"hologram-layer cursor-pointer transition-all duration-200\",\n                        selectedLayer === layer.id && \"ring-2 ring-offset-2\",\n                        layer.holographic?.scanlines && \"scanning\"\n                      )}\n                      style={{ ...layerStyle }}\n                      onClick={() => handleLayerClick(layer)}\n                    >\n                      {renderLayerContent(layer)}\n                    </div>\n                  </Motion>\n                );\n              })}\n            </div>\n          )}\n\n          {/* Scan Lines Overlay */}\n          {renderScanLines()}\n\n          {/* Noise Overlay */}\n          {renderNoiseOverlay()}\n\n          {/* Controls */}\n          {showControls && !loading && !error && (\n            <div className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2\">\n              <OptimizedGlass\n                elevation=\"level3\"\n                intensity=\"strong\"\n                depth={2}\n                tint=\"neutral\"\n                border=\"subtle\"\n                className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              >\n                <button\n                  onClick={() =>\n                    setCurrentProjection((prev: any) => ({\n                      ...prev,\n                      angle: (prev.angle + 90) % 360,\n                    }))\n                  }\n                  className=\"glass-p-1 glass-radius-md hover:glass-surface-overlay glass-transition-all\"\n                  title=\"Rotate\"\n                  style={{ color: colors.primary }}\n                >\n                  \uD83D\uDD04\n                </button>\n\n                <button\n                  onClick={() =>\n                    setCurrentProjection((prev: any) => ({\n                      ...prev,\n                      distance: prev.distance === 100 ? 150 : 100,\n                    }))\n                  }\n                  className=\"glass-p-1 glass-radius-md hover:glass-surface-overlay glass-transition-all\"\n                  title=\"Zoom\"\n                  style={{ color: colors.primary }}\n                >\n                  \uD83D\uDD0D\n                </button>\n\n                <div\n                  className=\"glass-text-xs\"\n                  style={{ color: colors.primary }}\n                >\n                  Layers: {layers.length}\n                </div>\n              </OptimizedGlass>\n            </div>\n          )}\n\n          {/* Debug Info */}\n          {debug && !loading && !error && (\n            <OptimizedGlass\n              elevation=\"level2\"\n              intensity=\"medium\"\n              depth={1}\n              tint=\"neutral\"\n              border=\"subtle\"\n              className=\"glass-absolute glass-top-4 glass-left-4 glass-p-3 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n            >\n              <div\n                className=\"glass-text-xs glass-font-mono glass-gap-1\"\n                style={{ color: colors.primary }}\n              >\n                <div>Angle: {currentProjection.angle.toFixed(1)}\u00B0</div>\n                <div>Tilt: {currentProjection.tilt.toFixed(1)}\u00B0</div>\n                <div>Distance: {currentProjection.distance}</div>\n                <div>Layers: {layers.length}</div>\n                <div>Selected: {selectedLayer || \"None\"}</div>\n                <div>Interactive: {interactive ? \"Yes\" : \"No\"}</div>\n                <div>Auto-rotate: {autoRotate ? \"Yes\" : \"No\"}</div>\n              </div>\n            </OptimizedGlass>\n          )}\n\n          {/* Interaction Indicator */}\n          {interactive && isHovering && (\n            <div className=\"glass-absolute glass-top-4 glass-right-4\">\n              <div\n                className=\"glass-w-3 glass-h-3 glass-radius-full glass-animate-pulse\"\n                style={{ backgroundColor: colors.accent }}\n              />\n            </div>\n          )}\n        </Motion>\n\n        {/* CSS Animations */}\n        <style>{`\n          @keyframes interference {\n            0%, 100% { background-position: 0 0; }\n            50% { background-position: 100% 0; }\n          }\n          \n          @keyframes scan {\n            0% { transform: translateY(-100%); }\n            100% { transform: translateY(100vh); }\n          }\n          \n          @keyframes noise {\n            0%, 100% { opacity: 0.1; }\n            50% { opacity: 0.2; }\n          }\n          \n          @keyframes particle-orbit {\n            from { transform: rotate(0deg); }\n            to { transform: rotate(360deg); }\n          }\n          \n          @keyframes float {\n            from { transform: translateY(0px); }\n            to { transform: translateY(-10px); }\n          }\n          \n          .scanning::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 2px;\n            background: ${colors.primary};\n            animation: scan 2s linear infinite;\n          }\n        `}</style>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassHologram.displayName = \"GlassHologram\";\n\nexport default GlassHologram;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  useRef,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\n\nexport interface Particle {\n  id: string;\n  x: number;\n  y: number;\n  z: number;\n  vx: number;\n  vy: number;\n  vz: number;\n  size: number;\n  life: number;\n  maxLife: number;\n  color: string;\n  opacity: number;\n  type: \"sphere\" | \"square\" | \"triangle\" | \"star\" | \"custom\";\n  mass?: number;\n  charge?: number;\n  trail?: boolean;\n  customShape?: React.ReactNode;\n}\n\nexport interface ParticleEmitter {\n  id: string;\n  x: number;\n  y: number;\n  z: number;\n  rate: number; // particles per second\n  velocity: { min: number; max: number };\n  angle: { min: number; max: number };\n  size: { min: number; max: number };\n  life: { min: number; max: number };\n  colors: string[];\n  enabled: boolean;\n  burst?: {\n    count: number;\n    interval: number;\n  };\n}\n\nexport interface ParticleForce {\n  type: \"gravity\" | \"wind\" | \"magnetic\" | \"vortex\" | \"repulsion\" | \"attraction\";\n  strength: number;\n  x: number;\n  y: number;\n  z: number;\n  radius?: number;\n  enabled: boolean;\n}\n\nexport interface GlassParticleFieldProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Particle emitters */\n  emitters?: ParticleEmitter[];\n  /** Environmental forces */\n  forces?: ParticleForce[];\n  /** Maximum number of particles */\n  maxParticles?: number;\n  /** Particle physics enabled */\n  physics?: boolean;\n  /** Collision detection */\n  collisions?: boolean;\n  /** Particle trails */\n  trails?: boolean;\n  /** Background interaction */\n  interactive?: boolean;\n  /** Mouse interaction force */\n  mouseForce?: {\n    type: \"attraction\" | \"repulsion\";\n    strength: number;\n    radius: number;\n  };\n  /** Particle system bounds */\n  bounds?: {\n    width: number;\n    height: number;\n    depth: number;\n  };\n  /** Performance settings */\n  performance?: {\n    culling: boolean;\n    lodDistance: number;\n    targetFPS: number;\n  };\n  /** Visual effects */\n  effects?: {\n    bloom: boolean;\n    blur: boolean;\n    glow: boolean;\n    sparkle: boolean;\n  };\n  /** Color scheme */\n  colorScheme?: \"warm\" | \"cool\" | \"rainbow\" | \"monochrome\" | \"neon\";\n  /** Animation speed multiplier */\n  speed?: number;\n  /** Pause animation */\n  paused?: boolean;\n  /** Debug mode */\n  debug?: boolean;\n  /** Event handlers */\n  onParticleClick?: (particle: Particle) => void;\n  onEmitterTrigger?: (emitter: ParticleEmitter) => void;\n  onForceApply?: (force: ParticleForce, particles: Particle[]) => void;\n  /** Custom particle renderer */\n  renderParticle?: (particle: Particle) => React.ReactNode;\n  /** Respect motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nconst defaultParticleEmitters: ParticleEmitter[] = [\n  {\n    id: \"default-center\",\n    x: 180,\n    y: 120,\n    z: 0,\n    rate: 42,\n    velocity: { min: 12, max: 34 },\n    angle: { min: 0, max: Math.PI * 2 },\n    size: { min: 2, max: 5 },\n    life: { min: 2.6, max: 4.8 },\n    colors: [\n      \"rgba(125, 211, 252, 0.95)\",\n      \"rgba(56, 189, 248, 0.9)\",\n      \"rgba(139, 92, 246, 0.85)\",\n    ],\n    enabled: true,\n  },\n];\n\nconst resolveCanvasColor = (\n  color: string,\n  fallback = \"rgba(125, 211, 252, 0.9)\"\n) =>\n  !color || color.includes(\"var(\") || color.includes(\"hsl(var(\")\n    ? fallback\n    : color;\n\nexport const GlassParticleField = forwardRef<\n  HTMLDivElement,\n  GlassParticleFieldProps\n>(\n  (\n    {\n      emitters = defaultParticleEmitters,\n      forces = [],\n      maxParticles = 1000,\n      physics = true,\n      collisions = false,\n      trails = false,\n      interactive = true,\n      mouseForce,\n      bounds = { width: 360, height: 240, depth: 80 },\n      performance: performanceConfig = {\n        culling: true,\n        lodDistance: 200,\n        targetFPS: 60,\n      },\n      effects = {\n        bloom: true,\n        blur: false,\n        glow: true,\n        sparkle: false,\n      },\n      colorScheme = \"cool\",\n      speed = 1,\n      paused = false,\n      debug = false,\n      onParticleClick,\n      onEmitterTrigger,\n      onForceApply,\n      renderParticle,\n      respectMotionPreference = true,\n      className,\n      style,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n    const particleFieldId = useA11yId(\"glass-particle-field\");\n\n    const [particles, setParticles] = useState<Particle[]>([]);\n    const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n    const [isPlaying, setIsPlaying] = useState(!paused);\n    const [frameRate, setFrameRate] = useState(60);\n    const [particleCount, setParticleCount] = useState(0);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationFrameRef = useRef<number>();\n    const lastTimeRef = useRef(0);\n    const frameCountRef = useRef(0);\n    const emissionCarryRef = useRef<Record<string, number>>({});\n\n    // Color schemes\n    const colorSchemes = {\n      warm: [\"#FF6B35\", \"#F7931E\", \"#FFD23F\", \"#FF0080\"],\n      cool: [\"#06B6D4\", \"#38BDF8\", \"#8B5CF6\", \"#06FFA5\"],\n      rainbow: [\n        \"#FF0080\",\n        \"#FF8000\",\n        \"#FFFF00\",\n        \"#80FF00\",\n        \"#00FF80\",\n        \"#0080FF\",\n        \"#8000FF\",\n      ],\n      monochrome: [\n        \"rgba(248, 250, 252, 0.95)\",\n        \"rgba(226, 232, 240, 0.86)\",\n        \"rgba(148, 163, 184, 0.78)\",\n        \"rgba(100, 116, 139, 0.72)\",\n      ],\n      neon: [\"#39FF14\", \"#FF073A\", \"#FF4081\", \"#00FFFF\", \"#FF10F0\"],\n    };\n\n    const colors = colorSchemes[colorScheme];\n\n    // Generate unique particle ID\n    const generateParticleId = useCallback(() => {\n      return `particle-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n    }, []);\n\n    // Create new particle\n    const createParticle = useCallback(\n      (emitter: ParticleEmitter): Particle => {\n        const angle =\n          emitter.angle.min +\n          Math.random() * (emitter.angle.max - emitter.angle.min);\n        const velocity =\n          emitter.velocity.min +\n          Math.random() * (emitter.velocity.max - emitter.velocity.min);\n        const size =\n          emitter.size.min +\n          Math.random() * (emitter.size.max - emitter.size.min);\n        const life =\n          emitter.life.min +\n          Math.random() * (emitter.life.max - emitter.life.min);\n        const color = resolveCanvasColor(\n          emitter.colors[Math.floor(Math.random() * emitter.colors.length)]\n        );\n\n        const vx = Math.cos(angle) * velocity;\n        const vy = Math.sin(angle) * velocity;\n        const vz = (Math.random() - 0.5) * velocity * 0.1;\n\n        return {\n          id: generateParticleId(),\n          x: emitter.x,\n          y: emitter.y,\n          z: emitter.z,\n          vx,\n          vy,\n          vz,\n          size,\n          life,\n          maxLife: life,\n          color,\n          opacity: 1,\n          type: \"sphere\",\n          mass: size * 0.1,\n          charge: 0,\n          trail: trails,\n        };\n      },\n      [generateParticleId, trails]\n    );\n\n    // Apply force to particle\n    const applyForce = useCallback(\n      (particle: Particle, force: ParticleForce, deltaTime: number) => {\n        if (!force.enabled) return;\n\n        const dx = force.x - particle.x;\n        const dy = force.y - particle.y;\n        const dz = force.z - particle.z;\n        const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);\n\n        if (force.radius && distance > force.radius) return;\n\n        const strength = force.strength * deltaTime * speed;\n\n        switch (force.type) {\n          case \"gravity\":\n            particle.vy += strength;\n            break;\n          case \"wind\":\n            particle.vx += strength;\n            break;\n          case \"attraction\":\n            if (distance > 0) {\n              const forceX = ((dx / distance) * strength) / (distance + 1);\n              const forceY = ((dy / distance) * strength) / (distance + 1);\n              const forceZ = ((dz / distance) * strength) / (distance + 1);\n              particle.vx += forceX;\n              particle.vy += forceY;\n              particle.vz += forceZ;\n            }\n            break;\n          case \"repulsion\":\n            if (distance > 0) {\n              const forceX = (-(dx / distance) * strength) / (distance + 1);\n              const forceY = (-(dy / distance) * strength) / (distance + 1);\n              const forceZ = (-(dz / distance) * strength) / (distance + 1);\n              particle.vx += forceX;\n              particle.vy += forceY;\n              particle.vz += forceZ;\n            }\n            break;\n          case \"vortex\":\n            const angle = Math.atan2(dy, dx);\n            particle.vx += -Math.sin(angle) * strength;\n            particle.vy += Math.cos(angle) * strength;\n            break;\n        }\n      },\n      [speed]\n    );\n\n    // Update particle physics\n    const updateParticle = useCallback(\n      (particle: Particle, deltaTime: number): Particle | null => {\n        // Update life\n        particle.life -= deltaTime * speed;\n        if (particle.life <= 0) return null;\n\n        // Apply forces\n        forces.forEach((force: any) => applyForce(particle, force, deltaTime));\n\n        // Apply mouse force\n        if (interactive && mouseForce) {\n          const dx = mousePosition.x - particle.x;\n          const dy = mousePosition.y - particle.y;\n          const distance = Math.sqrt(dx * dx + dy * dy);\n\n          if (distance < mouseForce.radius) {\n            const strength =\n              (mouseForce.strength * deltaTime * speed) / (distance + 1);\n            const forceX = (dx / distance) * strength;\n            const forceY = (dy / distance) * strength;\n\n            if (mouseForce.type === \"attraction\") {\n              particle.vx += forceX;\n              particle.vy += forceY;\n            } else {\n              particle.vx -= forceX;\n              particle.vy -= forceY;\n            }\n          }\n        }\n\n        // Update position\n        particle.x += particle.vx * deltaTime * speed;\n        particle.y += particle.vy * deltaTime * speed;\n        particle.z += particle.vz * deltaTime * speed;\n\n        // Boundary conditions\n        if (particle.x < 0 || particle.x > bounds.width) particle.vx *= -0.8;\n        if (particle.y < 0 || particle.y > bounds.height) particle.vy *= -0.8;\n        if (particle.z < -bounds.depth || particle.z > bounds.depth)\n          particle.vz *= -0.8;\n\n        // Clamp to bounds\n        particle.x = Math.max(0, Math.min(bounds.width, particle.x));\n        particle.y = Math.max(0, Math.min(bounds.height, particle.y));\n        particle.z = Math.max(\n          -bounds.depth,\n          Math.min(bounds.depth, particle.z)\n        );\n\n        // Update opacity based on life\n        particle.opacity = particle.life / particle.maxLife;\n\n        // Apply damping\n        particle.vx *= 0.99;\n        particle.vy *= 0.99;\n        particle.vz *= 0.99;\n\n        return particle;\n      },\n      [\n        forces,\n        applyForce,\n        interactive,\n        mouseForce,\n        mousePosition,\n        speed,\n        bounds,\n      ]\n    );\n\n    // Emit particles\n    const emitParticles = useCallback(\n      (\n        emitter: ParticleEmitter,\n        deltaTime: number,\n        currentParticles: Particle[]\n      ): Particle[] => {\n        if (!emitter.enabled || currentParticles.length >= maxParticles)\n          return [];\n\n        const newParticles: Particle[] = [];\n        const carry = emissionCarryRef.current[emitter.id] ?? 0;\n        const desiredParticles = emitter.rate * deltaTime + carry;\n        const particlesToEmit = Math.floor(desiredParticles);\n        emissionCarryRef.current[emitter.id] =\n          desiredParticles - particlesToEmit;\n\n        for (\n          let i = 0;\n          i < particlesToEmit &&\n          currentParticles.length + newParticles.length < maxParticles;\n          i++\n        ) {\n          newParticles.push(createParticle(emitter));\n        }\n\n        if (newParticles.length > 0) {\n          onEmitterTrigger?.(emitter);\n        }\n\n        return newParticles;\n      },\n      [maxParticles, createParticle, onEmitterTrigger]\n    );\n\n    // Main animation loop\n    const animate = useCallback(\n      (currentTime: number) => {\n        if (!isPlaying || paused) {\n          animationFrameRef.current = requestAnimationFrame(animate);\n          return;\n        }\n\n        const deltaTime = (currentTime - lastTimeRef.current) / 1000;\n        lastTimeRef.current = currentTime;\n\n        // Calculate frame rate\n        frameCountRef.current++;\n        if (frameCountRef.current % 60 === 0) {\n          setFrameRate(Math.round(1 / deltaTime));\n        }\n\n        setParticles((currentParticles) => {\n          // Update existing particles\n          const updatedParticles = currentParticles\n            .map((particle: any) => updateParticle(particle, deltaTime))\n            .filter((particle): particle is Particle => particle !== null);\n\n          // Emit new particles\n          const newParticles = emitters.reduce((acc, emitter) => {\n            return [\n              ...acc,\n              ...emitParticles(emitter, deltaTime, updatedParticles),\n            ];\n          }, [] as Particle[]);\n\n          const allParticles = [...updatedParticles, ...newParticles];\n\n          // Apply forces globally\n          forces.forEach((force: any) => {\n            if (force.enabled) {\n              onForceApply?.(force, allParticles);\n            }\n          });\n\n          setParticleCount(allParticles.length);\n          return allParticles;\n        });\n\n        animationFrameRef.current = requestAnimationFrame(animate);\n      },\n      [\n        isPlaying,\n        paused,\n        updateParticle,\n        emitters,\n        emitParticles,\n        forces,\n        onForceApply,\n      ]\n    );\n\n    // Start animation\n    useEffect(() => {\n      if (shouldAnimate && !paused) {\n        lastTimeRef.current =\n          typeof performance !== \"undefined\" && performance.now\n            ? performance.now()\n            : Date.now();\n        animationFrameRef.current = requestAnimationFrame(animate);\n      }\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [shouldAnimate, paused, animate]);\n\n    // Handle mouse movement\n    const handleMouseMove = useCallback((event: React.MouseEvent) => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      setMousePosition({\n        x: event.clientX - rect.left,\n        y: event.clientY - rect.top,\n      });\n    }, []);\n\n    // Handle particle click\n    const handleParticleClick = useCallback(\n      (particle: Particle) => {\n        onParticleClick?.(particle);\n      },\n      [onParticleClick]\n    );\n\n    // Render particle on canvas\n    const renderParticleToCanvas = useCallback(\n      (\n        ctx: CanvasRenderingContext2D,\n        particle: Particle,\n        canvas: HTMLCanvasElement\n      ) => {\n        ctx.save();\n        ctx.globalAlpha = particle.opacity;\n\n        // Apply 3D perspective\n        const perspective = 500;\n        const scale = perspective / (perspective + particle.z);\n        const x = particle.x * scale;\n        const y = particle.y * scale;\n        const size = particle.size * scale;\n\n        // Apply effects\n        if (effects.glow) {\n          ctx.shadowColor = particle.color;\n          ctx.shadowBlur = size * 2;\n        }\n\n        ctx.fillStyle = particle.color;\n\n        switch (particle.type) {\n          case \"sphere\":\n            ctx.beginPath();\n            ctx.arc(x, y, size / 2, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n          case \"square\":\n            ctx.fillRect(x - size / 2, y - size / 2, size, size);\n            break;\n          case \"triangle\":\n            ctx.beginPath();\n            ctx.moveTo(x, y - size / 2);\n            ctx.lineTo(x - size / 2, y + size / 2);\n            ctx.lineTo(x + size / 2, y + size / 2);\n            ctx.closePath();\n            ctx.fill();\n            break;\n          case \"star\":\n            const spikes = 5;\n            const outerRadius = size / 2;\n            const innerRadius = outerRadius * 0.4;\n            ctx.beginPath();\n            for (let i = 0; i < spikes * 2; i++) {\n              const radius = i % 2 === 0 ? outerRadius : innerRadius;\n              const angle = (i * Math.PI) / spikes;\n              const px = x + Math.cos(angle) * radius;\n              const py = y + Math.sin(angle) * radius;\n              if (i === 0) ctx.moveTo(px, py);\n              else ctx.lineTo(px, py);\n            }\n            ctx.closePath();\n            ctx.fill();\n            break;\n        }\n\n        // Render trail\n        if (particle.trail && particle.vx !== 0 && particle.vy !== 0) {\n          ctx.strokeStyle = particle.color;\n          ctx.lineWidth = size * 0.1;\n          ctx.globalAlpha = particle.opacity * 0.3;\n          ctx.beginPath();\n          ctx.moveTo(x, y);\n          ctx.lineTo(x - particle.vx * 5, y - particle.vy * 5);\n          ctx.stroke();\n        }\n\n        ctx.restore();\n      },\n      [effects]\n    );\n\n    // Render to canvas\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Set canvas size\n      canvas.width = bounds.width;\n      canvas.height = bounds.height;\n\n      // Clear canvas\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Apply effects\n      if (effects.blur) {\n        ctx.filter = \"blur(1px)\";\n      }\n\n      // Render particles\n      particles.forEach((particle: any) => {\n        if (renderParticle) {\n          // Custom rendering would be handled differently in React\n        } else {\n          renderParticleToCanvas(ctx, particle, canvas);\n        }\n      });\n\n      // Render debug info\n      if (debug) {\n        ctx.fillStyle =\n          \"rgba(var(--glass-color-white) / var(--glass-opacity-80))\";\n        ctx.font = \"12px monospace\";\n        ctx.fillText(`Particles: ${particles.length}`, 10, 20);\n        ctx.fillText(`FPS: ${frameRate}`, 10, 40);\n        ctx.fillText(\n          `Emitters: ${emitters.filter((e: any) => e.enabled).length}`,\n          10,\n          60\n        );\n        ctx.fillText(\n          `Forces: ${forces.filter((f: any) => f.enabled).length}`,\n          10,\n          80\n        );\n      }\n    }, [\n      particles,\n      bounds,\n      effects,\n      renderParticle,\n      renderParticleToCanvas,\n      debug,\n      frameRate,\n      emitters,\n      forces,\n    ]);\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        id={particleFieldId}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-particle-field relative glass-radius-lg glass-backdrop-blur-md border border-border/20 overflow-hidden\",\n          className\n        )}\n        style={{\n          width: typeof style?.width === \"undefined\" ? \"100%\" : style.width,\n          maxWidth: bounds.width,\n          height: bounds.height,\n          background:\n            \"var(--glass-primary-level3-surface)\",\n          ...(style || {}),\n        }}\n        onMouseMove={handleMouseMove}\n        role=\"region\"\n        aria-label=\"Particle field visualization\"\n        {...props}\n      >\n        <Motion\n          preset={shouldAnimate ? \"fadeIn\" : \"none\"}\n          className=\"glass-relative glass-w-full glass-h-full\"\n        >\n          {/* Canvas */}\n          <canvas\n            ref={canvasRef}\n            className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full\"\n            style={{\n              filter: effects.bloom\n                ? \"drop-shadow(0 0 10px hsl(var(--glass-color-primary)/0.3))\"\n                : undefined,\n            }}\n          />\n\n          {/* React Particles (for custom rendering) */}\n          {renderParticle && (\n            <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n              {particles.map((particle: any) => (\n                <div\n                  key={particle.id}\n                  className=\"glass-absolute glass-pointer-events-auto glass-cursor-pointer\"\n                  style={{\n                    left: particle.x - particle.size / 2,\n                    top: particle.y - particle.size / 2,\n                    transform: `translateZ(${particle.z}px) scale(${500 / (500 + particle.z)})`,\n                    opacity: particle.opacity,\n                  }}\n                  onClick={() => handleParticleClick(particle)}\n                >\n                  {renderParticle(particle)}\n                </div>\n              ))}\n            </div>\n          )}\n\n          {/* Controls */}\n          <div className=\"glass-absolute glass-bottom-4 glass--left-1-2 glass-transform glass--translate-x-1-2\">\n            <OptimizedGlass\n              elevation=\"level3\"\n              intensity=\"strong\"\n              depth={2}\n              tint=\"neutral\"\n              border=\"subtle\"\n              className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n            >\n              <button\n                onClick={() => setIsPlaying(!isPlaying)}\n                className=\"glass-p-2 glass-radius-md hover:glass-surface-overlay glass-transition-all\"\n                title={isPlaying ? \"Pause\" : \"Play\"}\n              >\n                {isPlaying ? \"\u23F8\" : \"\u25B6\"}\n              </button>\n\n              <div className=\"glass-text-xs glass-text-secondary\">\n                Particles: {particleCount}\n              </div>\n\n              {debug && (\n                <div className=\"glass-text-xs glass-text-secondary\">\n                  FPS: {frameRate}\n                </div>\n              )}\n            </OptimizedGlass>\n          </div>\n\n          {/* Mouse force indicator */}\n          {interactive && mouseForce && (\n            <div\n              className=\"glass-absolute glass-radius-full glass-border glass-border-primary/30 glass-pointer-events-none\"\n              style={{\n                left: mousePosition.x - mouseForce.radius,\n                top: mousePosition.y - mouseForce.radius,\n                width: mouseForce.radius * 2,\n                height: mouseForce.radius * 2,\n                backgroundColor:\n                  mouseForce.type === \"attraction\"\n                    ? \"hsl(var(--glass-color-primary)/0.1)\"\n                    : \"hsl(var(--glass-color-danger)/0.1)\",\n              }}\n            />\n          )}\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassParticleField.displayName = \"GlassParticleField\";\n\nexport default GlassParticleField;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface VortexRing {\n  radius: number;\n  rotation: number;\n  speed: number;\n  opacity: number;\n  color: [number, number, number];\n  thickness: number;\n  id: string;\n}\n\nexport interface VortexParticle {\n  x: number;\n  y: number;\n  angle: number;\n  radius: number;\n  speed: number;\n  size: number;\n  opacity: number;\n  color: [number, number, number];\n  lifetime: number;\n  id: string;\n}\n\nexport interface DimensionalShift {\n  x: number;\n  y: number;\n  intensity: number;\n  frequency: number;\n  type: \"ripple\" | \"spiral\" | \"quantum\" | \"void\";\n  id: string;\n}\n\nexport interface GlassVortexPortalProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Portal radius */\n  radius?: number;\n  /** Number of vortex rings */\n  ringCount?: number;\n  /** Base rotation speed */\n  rotationSpeed?: number;\n  /** Portal intensity (0-1) */\n  intensity?: number;\n  /** Portal depth effect */\n  depth?: number;\n  /** Portal type */\n  type?: \"dimensional\" | \"energy\" | \"void\" | \"quantum\" | \"temporal\";\n  /** Portal color scheme */\n  colorScheme?: \"blue\" | \"purple\" | \"green\" | \"red\" | \"gold\" | \"cosmic\";\n  /** Whether portal is active */\n  active?: boolean;\n  /** Whether portal is opening */\n  opening?: boolean;\n  /** Whether portal is closing */\n  closing?: boolean;\n  /** Particle count for effects */\n  particleCount?: number;\n  /** Whether to show dimensional distortion */\n  showDistortion?: boolean;\n  /** Distortion intensity */\n  distortionIntensity?: number;\n  /** Portal energy level */\n  energyLevel?: number;\n  /** Whether portal pulses */\n  pulsing?: boolean;\n  /** Pulse frequency */\n  pulseFrequency?: number;\n  /** Whether to show event horizon */\n  showEventHorizon?: boolean;\n  /** Whether portal is interactive */\n  interactive?: boolean;\n  /** Portal activation handler */\n  onActivate?: () => void;\n  /** Portal deactivation handler */\n  onDeactivate?: () => void;\n  /** Portal entry handler */\n  onEntry?: (x: number, y: number) => void;\n  /** Animation speed multiplier */\n  timeScale?: number;\n  /** Show portal controls */\n  showControls?: boolean;\n  /** Debug mode */\n  debug?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\n// Move color schemes outside component to keep reference stable across renders\nconst COLOR_SCHEMES = {\n  blue: {\n    primary: [100, 150, 255],\n    secondary: [150, 200, 255],\n    accent: [50, 100, 200],\n  },\n  purple: {\n    primary: [200, 100, 255],\n    secondary: [255, 150, 255],\n    accent: [150, 50, 200],\n  },\n  green: {\n    primary: [100, 255, 150],\n    secondary: [150, 255, 200],\n    accent: [50, 200, 100],\n  },\n  red: {\n    primary: [255, 100, 100],\n    secondary: [255, 150, 150],\n    accent: [200, 50, 50],\n  },\n  gold: {\n    primary: [255, 200, 100],\n    secondary: [255, 220, 150],\n    accent: [200, 150, 50],\n  },\n  cosmic: {\n    primary: [255, 100, 200],\n    secondary: [100, 200, 255],\n    accent: [200, 255, 100],\n  },\n} as const;\n\nexport const GlassVortexPortal = forwardRef<\n  HTMLDivElement,\n  GlassVortexPortalProps\n>(\n  (\n    {\n      width = 600,\n      height = 600,\n      radius = 150,\n      ringCount = 8,\n      rotationSpeed = 1,\n      intensity = 0.8,\n      depth = 10,\n      type = \"dimensional\",\n      colorScheme = \"blue\",\n      active = true,\n      opening = false,\n      closing = false,\n      particleCount = 100,\n      showDistortion = true,\n      distortionIntensity = 0.5,\n      energyLevel = 1,\n      pulsing = true,\n      pulseFrequency = 2,\n      showEventHorizon = true,\n      interactive = true,\n      onActivate,\n      onDeactivate,\n      onEntry,\n      timeScale = 1,\n      showControls = true,\n      debug = false,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const { play } = useGlassSound();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const portalId = useA11yId(\"glass-vortex-portal\");\n\n    const [rings, setRings] = useState<VortexRing[]>([]);\n    const [particles, setParticles] = useState<VortexParticle[]>([]);\n    const [distortions, setDistortions] = useState<DimensionalShift[]>([]);\n    const [currentIntensity, setCurrentIntensity] = useState(intensity);\n    const [currentRadius, setCurrentRadius] = useState(radius);\n    const [portalActive, setPortalActive] = useState(active);\n    const [animationTime, setAnimationTime] = useState(0);\n    // Use stable color scheme map so callbacks don't churn every render\n    const currentColors = COLOR_SCHEMES[colorScheme];\n\n    // Initialize portal rings\n    const initializeRings = useCallback(() => {\n      const newRings: VortexRing[] = [];\n\n      for (let i = 0; i < ringCount; i++) {\n        const ringRadius = (radius / ringCount) * (i + 1);\n        const speed = (1 + i * 0.2) * rotationSpeed;\n        const opacity = Math.max(0.1, 1 - (i / ringCount) * 0.8);\n\n        newRings.push({\n          radius: ringRadius,\n          rotation: Math.random() * Math.PI * 2,\n          speed,\n          opacity,\n          color: (i % 2 === 0\n            ? currentColors.primary\n            : currentColors.secondary) as [number, number, number],\n          thickness: Math.max(1, 5 - i),\n          id: `ring-${i}`,\n        });\n      }\n\n      setRings(newRings);\n    }, [ringCount, radius, rotationSpeed, colorScheme]);\n\n    // Initialize particles\n    const initializeParticles = useCallback(() => {\n      const newParticles: VortexParticle[] = [];\n\n      for (let i = 0; i < particleCount; i++) {\n        const angle = Math.random() * Math.PI * 2;\n        const particleRadius = Math.random() * radius * 1.5;\n\n        newParticles.push({\n          x: width / 2 + Math.cos(angle) * particleRadius,\n          y: height / 2 + Math.sin(angle) * particleRadius,\n          angle,\n          radius: particleRadius,\n          speed: (Math.random() * 2 + 1) * rotationSpeed,\n          size: Math.random() * 3 + 1,\n          opacity: Math.random() * 0.8 + 0.2,\n          color: [\n            currentColors.accent[0] + Math.random() * 50,\n            currentColors.accent[1] + Math.random() * 50,\n            currentColors.accent[2] + Math.random() * 50,\n          ],\n          lifetime:\n            Math.random() * ANIMATION.DURATION.slower * 10 +\n            ANIMATION.DURATION.slower * 3,\n          id: `particle-${i}`,\n        });\n      }\n\n      setParticles(newParticles);\n    }, [particleCount, radius, width, height, rotationSpeed, colorScheme]);\n\n    // Initialize distortions\n    const initializeDistortions = useCallback(() => {\n      if (!showDistortion) return;\n\n      const newDistortions: DimensionalShift[] = [];\n      const distortionCount = Math.floor(distortionIntensity * 10);\n\n      for (let i = 0; i < distortionCount; i++) {\n        newDistortions.push({\n          x: Math.random() * width,\n          y: Math.random() * height,\n          intensity: Math.random() * distortionIntensity,\n          frequency: Math.random() * 0.02 + 0.01,\n          type: [\"ripple\", \"spiral\", \"quantum\", \"void\"][\n            Math.floor(Math.random() * 4)\n          ] as any,\n          id: `distortion-${i}`,\n        });\n      }\n\n      setDistortions(newDistortions);\n    }, [showDistortion, distortionIntensity, width, height]);\n\n    // Initialize portal\n    useEffect(() => {\n      initializeRings();\n      initializeParticles();\n      initializeDistortions();\n    }, [initializeRings, initializeParticles, initializeDistortions]);\n\n    // Update portal state\n    useEffect(() => {\n      if (opening) {\n        setCurrentIntensity(0);\n        setCurrentRadius(0);\n        const interval = setInterval(() => {\n          setCurrentIntensity((prev: any) => Math.min(intensity, prev + 0.02));\n          setCurrentRadius((prev: any) => Math.min(radius, prev + 3));\n        }, ANIMATION.DURATION.fast);\n\n        setTimeout(() => {\n          clearInterval(interval);\n          play(\"success\");\n        }, ANIMATION.DURATION.slower * 3);\n\n        return () => clearInterval(interval);\n      }\n\n      if (closing) {\n        const interval = setInterval(() => {\n          setCurrentIntensity((prev: any) => Math.max(0, prev - 0.02));\n          setCurrentRadius((prev: any) => Math.max(0, prev - 3));\n        }, ANIMATION.DURATION.fast);\n\n        setTimeout(() => {\n          clearInterval(interval);\n          setPortalActive(false);\n          play(\"error\");\n        }, ANIMATION.DURATION.slower * 3);\n\n        return () => clearInterval(interval);\n      }\n    }, [opening, closing, intensity, radius, play]);\n\n    // Update rings animation\n    const updateRings = useCallback(\n      (deltaTime: number) => {\n        setRings((prevRings) =>\n          prevRings.map((ring: any) => ({\n            ...ring,\n            rotation:\n              ring.rotation +\n              ring.speed * deltaTime * timeScale * (portalActive ? 1 : 0.1),\n            opacity: ring.opacity * currentIntensity,\n            radius: (ring.radius / radius) * currentRadius,\n          }))\n        );\n      },\n      [timeScale, portalActive, currentIntensity, currentRadius, radius]\n    );\n\n    // Update particles\n    const updateParticles = useCallback(\n      (deltaTime: number) => {\n        setParticles((prevParticles) =>\n          prevParticles\n            .map((particle: any) => {\n              const centerX = width / 2;\n              const centerY = height / 2;\n\n              // Spiral motion towards center\n              const newAngle =\n                particle.angle + particle.speed * deltaTime * timeScale;\n              let newRadius = particle.radius;\n\n              if (portalActive) {\n                newRadius = Math.max(\n                  5,\n                  particle.radius - 20 * deltaTime * timeScale\n                );\n\n                // Respawn particle at edge when it reaches center\n                if (newRadius < 10) {\n                  newRadius = radius * 1.5;\n                  particle.lifetime = Math.random() * 5000 + 2000;\n                }\n              }\n\n              const newX = centerX + Math.cos(newAngle) * newRadius;\n              const newY = centerY + Math.sin(newAngle) * newRadius;\n\n              return {\n                ...particle,\n                x: newX,\n                y: newY,\n                angle: newAngle,\n                radius: newRadius,\n                opacity: particle.opacity * currentIntensity,\n                lifetime: particle.lifetime - deltaTime,\n              };\n            })\n            .filter((p: any) => p.lifetime > 0)\n        );\n\n        // Add new particles if needed\n        if (particles.length < particleCount && portalActive) {\n          const newParticles: VortexParticle[] = [];\n          const needed = Math.min(5, particleCount - particles.length);\n\n          for (let i = 0; i < needed; i++) {\n            const angle = Math.random() * Math.PI * 2;\n            const particleRadius = radius * 1.5;\n\n            newParticles.push({\n              x: width / 2 + Math.cos(angle) * particleRadius,\n              y: height / 2 + Math.sin(angle) * particleRadius,\n              angle,\n              radius: particleRadius,\n              speed: (Math.random() * 2 + 1) * rotationSpeed,\n              size: Math.random() * 3 + 1,\n              opacity: Math.random() * 0.8 + 0.2,\n              color: [\n                currentColors.accent[0] + Math.random() * 50,\n                currentColors.accent[1] + Math.random() * 50,\n                currentColors.accent[2] + Math.random() * 50,\n              ],\n              lifetime:\n                Math.random() * ANIMATION.DURATION.slower * 10 +\n                ANIMATION.DURATION.slower * 3,\n              id: `particle-${Date.now()}-${i}`,\n            });\n          }\n\n          setParticles((prev: any) => [...prev, ...newParticles]);\n        }\n      },\n      [\n        width,\n        height,\n        radius,\n        timeScale,\n        portalActive,\n        currentIntensity,\n        particles.length,\n        particleCount,\n        rotationSpeed,\n        colorScheme,\n      ]\n    );\n\n    // Render portal\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const centerX = width / 2;\n      const centerY = height / 2;\n\n      // Clear canvas\n      ctx.fillStyle = \"rgba(0, 0, 0, 0.1)\";\n      ctx.fillRect(0, 0, width, height);\n\n      // Apply distortion effects\n      if (showDistortion && portalActive) {\n        distortions.forEach((distortion: any) => {\n          const distortionRadius = 50 * distortion.intensity;\n          const gradient = ctx.createRadialGradient(\n            distortion.x,\n            distortion.y,\n            0,\n            distortion.x,\n            distortion.y,\n            distortionRadius\n          );\n\n          gradient.addColorStop(0, \"rgba(255, 255, 255, 0.02)\");\n          gradient.addColorStop(1, \"transparent\");\n\n          ctx.fillStyle = gradient;\n          ctx.fillRect(0, 0, width, height);\n        });\n      }\n\n      // Draw event horizon\n      if (showEventHorizon && portalActive) {\n        const horizonGradient = ctx.createRadialGradient(\n          centerX,\n          centerY,\n          currentRadius * 0.1,\n          centerX,\n          centerY,\n          currentRadius\n        );\n\n        horizonGradient.addColorStop(\n          0,\n          `rgba(${currentColors.primary[0]}, ${currentColors.primary[1]}, ${currentColors.primary[2]}, 0.8)`\n        );\n        horizonGradient.addColorStop(\n          0.7,\n          `rgba(${currentColors.primary[0]}, ${currentColors.primary[1]}, ${currentColors.primary[2]}, 0.3)`\n        );\n        horizonGradient.addColorStop(1, \"transparent\");\n\n        ctx.fillStyle = horizonGradient;\n        ctx.beginPath();\n        ctx.arc(centerX, centerY, currentRadius, 0, Math.PI * 2);\n        ctx.fill();\n      }\n\n      // Draw vortex rings\n      rings.forEach((ring, index) => {\n        if (ring.opacity < 0.01) return;\n\n        ctx.save();\n        ctx.translate(centerX, centerY);\n        ctx.rotate(ring.rotation);\n\n        // Create ring gradient\n        const ringGradient = ctx.createLinearGradient(\n          -ring.radius,\n          0,\n          ring.radius,\n          0\n        );\n        ringGradient.addColorStop(\n          0,\n          `rgba(${ring.color[0]}, ${ring.color[1]}, ${ring.color[2]}, 0)`\n        );\n        ringGradient.addColorStop(\n          0.5,\n          `rgba(${ring.color[0]}, ${ring.color[1]}, ${ring.color[2]}, ${ring.opacity})`\n        );\n        ringGradient.addColorStop(\n          1,\n          `rgba(${ring.color[0]}, ${ring.color[1]}, ${ring.color[2]}, 0)`\n        );\n\n        ctx.strokeStyle = ringGradient;\n        ctx.lineWidth = ring.thickness;\n        ctx.globalAlpha = ring.opacity * currentIntensity;\n\n        // Draw multiple concentric lines for depth\n        for (let i = 0; i < depth; i++) {\n          const layerRadius = ring.radius + i * 2;\n          const layerOpacity = (1 - i / depth) * ring.opacity;\n\n          ctx.globalAlpha = layerOpacity * currentIntensity;\n          ctx.beginPath();\n          ctx.arc(0, 0, layerRadius, 0, Math.PI * 2);\n          ctx.stroke();\n        }\n\n        ctx.restore();\n      });\n\n      // Draw particles\n      particles.forEach((particle: any) => {\n        if (particle.opacity < 0.01) return;\n\n        const particleGradient = ctx.createRadialGradient(\n          particle.x,\n          particle.y,\n          0,\n          particle.x,\n          particle.y,\n          particle.size\n        );\n\n        particleGradient.addColorStop(\n          0,\n          `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, ${particle.opacity})`\n        );\n        particleGradient.addColorStop(\n          1,\n          `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, 0)`\n        );\n\n        ctx.fillStyle = particleGradient;\n        ctx.beginPath();\n        ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);\n        ctx.fill();\n      });\n\n      // Draw portal center void\n      if (portalActive && currentRadius > 10) {\n        const voidGradient = ctx.createRadialGradient(\n          centerX,\n          centerY,\n          0,\n          centerX,\n          centerY,\n          currentRadius * 0.3\n        );\n\n        voidGradient.addColorStop(0, \"rgba(0, 0, 0, 1)\");\n        voidGradient.addColorStop(1, \"rgba(0, 0, 0, 0)\");\n\n        ctx.fillStyle = voidGradient;\n        ctx.beginPath();\n        ctx.arc(centerX, centerY, currentRadius * 0.3, 0, Math.PI * 2);\n        ctx.fill();\n      }\n\n      // Pulse effect\n      if (pulsing && portalActive) {\n        const pulseIntensity =\n          Math.sin(animationTime * pulseFrequency) * 0.3 + 0.7;\n        const pulseGradient = ctx.createRadialGradient(\n          centerX,\n          centerY,\n          currentRadius * 0.8,\n          centerX,\n          centerY,\n          currentRadius * 1.2\n        );\n\n        pulseGradient.addColorStop(0, \"rgba(255, 255, 255, 0)\");\n        pulseGradient.addColorStop(\n          1,\n          `rgba(255, 255, 255, ${pulseIntensity * 0.1})`\n        );\n\n        ctx.fillStyle = pulseGradient;\n        ctx.beginPath();\n        ctx.arc(centerX, centerY, currentRadius * 1.2, 0, Math.PI * 2);\n        ctx.fill();\n      }\n\n      // Debug info\n      if (debug) {\n        ctx.fillStyle = \"white\";\n        ctx.font = \"12px monospace\";\n        ctx.fillText(`Intensity: ${currentIntensity.toFixed(2)}`, 10, 20);\n        ctx.fillText(`Radius: ${currentRadius.toFixed(0)}`, 10, 35);\n        ctx.fillText(`Rings: ${rings.length}`, 10, 50);\n        ctx.fillText(`Particles: ${particles.length}`, 10, 65);\n        ctx.fillText(`Active: ${portalActive}`, 10, 80);\n      }\n    }, [\n      width,\n      height,\n      currentRadius,\n      currentIntensity,\n      showDistortion,\n      distortions,\n      portalActive,\n      showEventHorizon,\n      colorScheme,\n      rings,\n      depth,\n      particles,\n      pulsing,\n      animationTime,\n      pulseFrequency,\n      debug,\n    ]);\n\n    // Animation loop\n    const animate = useCallback(\n      (currentTime: number) => {\n        if (prefersReducedMotion && respectMotionPreference) {\n          render();\n          return;\n        }\n\n        const deltaTime = 0.016; // 60fps\n        setAnimationTime((prev: any) => prev + deltaTime);\n\n        updateRings(deltaTime);\n        updateParticles(deltaTime);\n        render();\n\n        animationRef.current = requestAnimationFrame(animate);\n      },\n      [\n        prefersReducedMotion,\n        respectMotionPreference,\n        render,\n        updateRings,\n        updateParticles,\n      ]\n    );\n\n    // Start animation\n    useEffect(() => {\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [animate]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Handle portal interaction\n    const handleCanvasClick = useCallback(\n      (event: React.MouseEvent<HTMLCanvasElement>) => {\n        if (!interactive) return;\n\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n\n        const centerX = width / 2;\n        const centerY = height / 2;\n        const distance = Math.sqrt((x - centerX) ** 2 + (y - centerY) ** 2);\n\n        // Check if click is within portal\n        if (distance < currentRadius && portalActive) {\n          onEntry?.(x, y);\n          play(\"success\");\n        }\n      },\n      [interactive, width, height, currentRadius, portalActive, onEntry, play]\n    );\n\n    // Portal controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-portal-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <button\n              onClick={() => {\n                setPortalActive(!portalActive);\n                portalActive ? onDeactivate?.() : onActivate?.();\n                play(\"tap\");\n              }}\n              className={cn(\n                \"glass-px-3 glass-py-1 glass-radius-md transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                portalActive\n                  ? \"bg-red-500/20 hover:bg-red-500/30 text-red-400\"\n                  : \"bg-green-500/20 hover:bg-green-500/30 text-green-400\"\n              )}\n            >\n              {portalActive ? \"Deactivate\" : \"Activate\"}\n            </button>\n\n            <button\n              onClick={() => {\n                initializeRings();\n                initializeParticles();\n                initializeDistortions();\n                play(\"success\");\n              }}\n              className=\"glass-px-3 glass-py-1 glass-radius-md glass-bg-secondary/20 hover:glass-bg-secondary/30 glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              Reset\n            </button>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"vortex-type-select\">\n              Type:\n            </label>\n            <select\n              id=\"vortex-type-select\"\n              value={type}\n              onChange={(e) => {}}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20\"\n              aria-label=\"Select vortex type\"\n            >\n              <option value=\"dimensional\">Dimensional</option>\n              <option value=\"energy\">Energy</option>\n              <option value=\"void\">Void</option>\n              <option value=\"quantum\">Quantum</option>\n              <option value=\"temporal\">Temporal</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"vortex-color-select\">\n              Color:\n            </label>\n            <select\n              id=\"vortex-color-select\"\n              value={colorScheme}\n              onChange={(e) => {}}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20\"\n              aria-label=\"Select color scheme\"\n            >\n              <option value=\"blue\">Blue</option>\n              <option value=\"purple\">Purple</option>\n              <option value=\"green\">Green</option>\n              <option value=\"red\">Red</option>\n              <option value=\"gold\">Gold</option>\n              <option value=\"cosmic\">Cosmic</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"vortex-intensity-range\">\n              Intensity:\n            </label>\n            <input\n              id=\"vortex-intensity-range\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={currentIntensity}\n              onChange={(e) => setCurrentIntensity(parseFloat(e.target.value))}\n              className=\"glass-w-20 glass-focus glass-touch-target glass-contrast-guard\"\n              aria-label=\"Adjust vortex intensity\"\n            />\n            <span className=\"glass-text-sm glass-min-w-3ch\">\n              {(currentIntensity * 100).toFixed(0)}%\n            </span>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={pulsing}\n                onChange={(e) => {}}\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Pulse\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showDistortion}\n                onChange={(e) => {}}\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Distortion\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={debug}\n                onChange={(e) => {}}\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Debug\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={portalId}\n        elevation=\"level1\"\n        intensity=\"medium\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-vortex-portal relative glass-radius-lg glass-backdrop-blur-md border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className={cn(\n                \"border border-border/20 glass-radius-md bg-black\",\n                interactive && \"cursor-pointer\"\n              )}\n              onClick={handleCanvasClick}\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassVortexPortal.displayName = \"GlassVortexPortal\";\n\nexport default GlassVortexPortal;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface AuroraLayer {\n  points: Array<{ x: number; y: number; intensity: number }>;\n  color: [number, number, number];\n  opacity: number;\n  waveOffset: number;\n  waveSpeed: number;\n  height: number;\n  id: string;\n}\n\nexport interface SolarWindParticle {\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  size: number;\n  opacity: number;\n  color: [number, number, number];\n  energy: number;\n  lifetime: number;\n  id: string;\n}\n\nexport interface StarField {\n  stars: Array<{\n    x: number;\n    y: number;\n    brightness: number;\n    twinklePhase: number;\n  }>;\n  shootingStars: Array<{\n    x: number;\n    y: number;\n    vx: number;\n    vy: number;\n    lifetime: number;\n    trail: Array<{ x: number; y: number; opacity: number }>;\n  }>;\n  id: string;\n}\n\nexport interface GlassAuroraDisplayProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Aurora intensity (0-1) */\n  intensity?: number;\n  /** Solar wind strength */\n  solarWindStrength?: number;\n  /** Geomagnetic activity level */\n  geomagneticActivity?: number;\n  /** Aurora colors preset */\n  colorPreset?: \"classic\" | \"rare\" | \"storm\" | \"sunset\" | \"cosmic\";\n  /** Whether to show stars */\n  showStars?: boolean;\n  /** Whether to show solar wind particles */\n  showSolarWind?: boolean;\n  /** Animation speed multiplier */\n  animationSpeed?: number;\n  /** Aurora wave complexity */\n  waveComplexity?: number;\n  /** Number of aurora layers */\n  layerCount?: number;\n  /** Time of observation (affects visibility) */\n  observationTime?: number; // 0-24 hours\n  /** Geographic latitude (affects aurora position) */\n  latitude?: number; // degrees\n  /** Whether to show atmospheric glow */\n  showAtmosphericGlow?: boolean;\n  /** Aurora activity level */\n  activityLevel?: \"low\" | \"moderate\" | \"high\" | \"storm\";\n  /** Real-time data mode */\n  realTimeMode?: boolean;\n  /** Aurora change handler */\n  onAuroraChange?: (intensity: number, colors: string[]) => void;\n  /** Solar event handler */\n  onSolarEvent?: (eventType: \"flare\" | \"wind\" | \"storm\") => void;\n  /** Show controls */\n  showControls?: boolean;\n  /** Show aurora info */\n  showAuroraInfo?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassAuroraDisplay = forwardRef<\n  HTMLDivElement,\n  GlassAuroraDisplayProps\n>(\n  (\n    {\n      width = 800,\n      height = 500,\n      intensity = 0.7,\n      solarWindStrength = 0.6,\n      geomagneticActivity = 0.5,\n      colorPreset = \"classic\",\n      showStars = true,\n      showSolarWind = true,\n      animationSpeed = 1,\n      waveComplexity = 1,\n      layerCount = 4,\n      observationTime = 22,\n      latitude = 65,\n      showAtmosphericGlow = true,\n      activityLevel = \"moderate\",\n      realTimeMode = false,\n      onAuroraChange,\n      onSolarEvent,\n      showControls = true,\n      showAuroraInfo = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const { play } = useGlassSound();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const auroraDisplayId = useA11yId(\"glass-aurora-display\");\n\n    const [auroraLayers, setAuroraLayers] = useState<AuroraLayer[]>([]);\n    const [solarWindParticles, setSolarWindParticles] = useState<\n      SolarWindParticle[]\n    >([]);\n    const [starField, setStarField] = useState<StarField>({\n      stars: [],\n      shootingStars: [],\n      id: \"starfield\",\n    });\n    const [animationTime, setAnimationTime] = useState(0);\n    const [currentIntensity, setCurrentIntensity] = useState(intensity);\n    const [activeColors, setActiveColors] = useState<string[]>([]);\n\n    // Aurora color presets\n    const colorPresets = {\n      classic: [\n        [0, 255, 146], // Green (oxygen 557.7nm)\n        [255, 0, 255], // Magenta (nitrogen)\n        [0, 255, 255], // Cyan (oxygen 630nm)\n        [255, 255, 0], // Yellow (sodium)\n      ],\n      rare: [\n        [255, 0, 0], // Red (high altitude oxygen)\n        [128, 0, 128], // Purple (nitrogen)\n        [255, 165, 0], // Orange (sodium)\n        [255, 192, 203], // Pink (nitrogen)\n      ],\n      storm: [\n        [255, 255, 255], // White (intense activity)\n        [255, 0, 0], // Red (storm conditions)\n        [255, 100, 100], // Light red\n        [200, 200, 255], // Blue-white\n      ],\n      sunset: [\n        [255, 140, 0], // Dark orange\n        [255, 69, 0], // Red-orange\n        [255, 20, 147], // Deep pink\n        [138, 43, 226], // Blue violet\n      ],\n      cosmic: [\n        [75, 0, 130], // Indigo\n        [148, 0, 211], // Dark violet\n        [0, 191, 255], // Deep sky blue\n        [127, 255, 212], // Aquamarine\n      ],\n    };\n\n    // Initialize star field\n    const initializeStarField = useCallback(() => {\n      const stars = Array.from({ length: 200 }, (_, i) => ({\n        x: Math.random() * width,\n        y: Math.random() * height * 0.6, // Stars in upper portion\n        brightness: Math.random() * 0.8 + 0.2,\n        twinklePhase: Math.random() * Math.PI * 2,\n      }));\n\n      setStarField((prev: any) => ({ ...prev, stars }));\n    }, [width, height]);\n\n    // Generate aurora layers\n    const generateAuroraLayers = useCallback(() => {\n      const colors = colorPresets[colorPreset];\n      const layers: AuroraLayer[] = [];\n\n      for (let i = 0; i < layerCount; i++) {\n        const points = [];\n        const baseY = height * (0.3 + i * 0.15);\n        const layerHeight = 60 + i * 20;\n\n        // Generate wave points\n        for (let x = 0; x <= width; x += 10) {\n          points.push({\n            x,\n            y: baseY + Math.sin(x * 0.01 + i) * (20 + waveComplexity * 10),\n            intensity: Math.random() * 0.5 + 0.5,\n          });\n        }\n\n        layers.push({\n          points,\n          color: colors[i % colors.length] as [number, number, number],\n          opacity: currentIntensity * 0.8 * (1 - i * 0.2),\n          waveOffset: (i * Math.PI) / 4,\n          waveSpeed: 0.02 + i * 0.01,\n          height: layerHeight,\n          id: `aurora-layer-${i}`,\n        });\n      }\n\n      setAuroraLayers(layers);\n      setActiveColors(colors.map((c: any) => `rgb(${c[0]}, ${c[1]}, ${c[2]})`));\n      onAuroraChange?.(\n        currentIntensity,\n        colors.map((c: any) => `rgb(${c[0]}, ${c[1]}, ${c[2]})`)\n      );\n    }, [\n      colorPreset,\n      layerCount,\n      width,\n      height,\n      waveComplexity,\n      currentIntensity,\n      onAuroraChange,\n    ]);\n\n    // Generate solar wind particles\n    const generateSolarWindParticles = useCallback(() => {\n      if (!showSolarWind) return;\n\n      const particleCount = Math.floor(solarWindStrength * 50);\n      const particles: SolarWindParticle[] = [];\n\n      for (let i = 0; i < particleCount; i++) {\n        particles.push({\n          x: Math.random() * width,\n          y: -10,\n          vx: (Math.random() - 0.5) * 2,\n          vy: Math.random() * 3 + 2,\n          size: Math.random() * 2 + 1,\n          opacity: Math.random() * 0.6 + 0.2,\n          color: [255, 255, 255],\n          energy: Math.random() * solarWindStrength,\n          lifetime: Math.random() * 3000 + 1000,\n          id: `solar-particle-${i}`,\n        });\n      }\n\n      setSolarWindParticles(particles);\n    }, [showSolarWind, solarWindStrength, width]);\n\n    // Initialize all components\n    useEffect(() => {\n      initializeStarField();\n      generateAuroraLayers();\n      generateSolarWindParticles();\n    }, [initializeStarField, generateAuroraLayers, generateSolarWindParticles]);\n\n    // Update aurora layers\n    const updateAuroraLayers = useCallback(\n      (deltaTime: number) => {\n        setAuroraLayers((prevLayers) =>\n          prevLayers.map((layer: any) => ({\n            ...layer,\n            waveOffset:\n              layer.waveOffset + layer.waveSpeed * deltaTime * animationSpeed,\n            opacity: Math.max(\n              0,\n              layer.opacity + (Math.random() - 0.5) * 0.02 * geomagneticActivity\n            ),\n            points: layer.points.map(\n              (\n                point: { x: number; y: number; intensity: number },\n                index: number\n              ) => ({\n                ...point,\n                y:\n                  point.y +\n                  Math.sin(layer.waveOffset + index * 0.1) *\n                    (2 + geomagneticActivity * 3),\n                intensity: Math.max(\n                  0.3,\n                  Math.min(1, point.intensity + (Math.random() - 0.5) * 0.1)\n                ),\n              })\n            ),\n          }))\n        );\n      },\n      [animationSpeed, geomagneticActivity]\n    );\n\n    // Update solar wind particles\n    const updateSolarWindParticles = useCallback(\n      (deltaTime: number) => {\n        setSolarWindParticles((prevParticles) => {\n          const updated = prevParticles\n            .map((particle: any) => ({\n              ...particle,\n              x: particle.x + particle.vx * deltaTime * animationSpeed,\n              y: particle.y + particle.vy * deltaTime * animationSpeed,\n              lifetime: particle.lifetime - deltaTime,\n              opacity: Math.max(0, particle.opacity - deltaTime * 0.0005),\n            }))\n            .filter(\n              (particle: any) =>\n                particle.lifetime > 0 &&\n                particle.x > -50 &&\n                particle.x < width + 50 &&\n                particle.y < height + 50\n            );\n\n          // Add new particles\n          if (updated.length < solarWindStrength * 30) {\n            const newParticles = Array.from(\n              {\n                length: Math.min(\n                  5,\n                  Math.floor(solarWindStrength * 30) - updated.length\n                ),\n              },\n              (_, i) => ({\n                x: Math.random() * width,\n                y: -10,\n                vx: (Math.random() - 0.5) * 2,\n                vy: Math.random() * 3 + 2,\n                size: Math.random() * 2 + 1,\n                opacity: Math.random() * 0.6 + 0.2,\n                color: [255, 255, 255] as [number, number, number],\n                energy: Math.random() * solarWindStrength,\n                lifetime: Math.random() * 3000 + 1000,\n                id: `solar-particle-new-${i}-${Date.now()}`,\n              })\n            );\n\n            return [...updated, ...newParticles];\n          }\n\n          return updated;\n        });\n      },\n      [animationSpeed, solarWindStrength, width, height]\n    );\n\n    // Update shooting stars\n    const updateShootingStars = useCallback(\n      (deltaTime: number) => {\n        setStarField((prevField) => {\n          const updatedShootingStars = prevField.shootingStars\n            .map((star: any) => ({\n              ...star,\n              x: star.x + star.vx * deltaTime * animationSpeed,\n              y: star.y + star.vy * deltaTime * animationSpeed,\n              lifetime: star.lifetime - deltaTime,\n              trail: [\n                { x: star.x, y: star.y, opacity: 1 },\n                ...star.trail.map(\n                  (\n                    t: { x: number; y: number; opacity: number },\n                    i: number\n                  ) => ({\n                    ...t,\n                    opacity: t.opacity * 0.95,\n                  })\n                ),\n              ].slice(0, 10),\n            }))\n            .filter((star: any) => star.lifetime > 0 && star.x < width + 100);\n\n          // Occasionally add new shooting stars\n          if (Math.random() < 0.001 * animationSpeed) {\n            updatedShootingStars.push({\n              x: Math.random() * width,\n              y: Math.random() * height * 0.3,\n              vx: Math.random() * 3 + 2,\n              vy: Math.random() * 2 + 1,\n              lifetime: Math.random() * 2000 + 1000,\n              trail: [],\n            });\n            play(\"success\");\n          }\n\n          return { ...prevField, shootingStars: updatedShootingStars };\n        });\n      },\n      [animationSpeed, width, height, play]\n    );\n\n    // Solar activity simulation\n    useEffect(() => {\n      if (!realTimeMode) return;\n\n      const interval = setInterval(() => {\n        // Simulate solar events\n        if (Math.random() < 0.1) {\n          const eventType: \"flare\" | \"wind\" | \"storm\" =\n            Math.random() < 0.3\n              ? \"flare\"\n              : Math.random() < 0.6\n                ? \"wind\"\n                : \"storm\";\n\n          onSolarEvent?.(eventType);\n\n          // Adjust parameters based on event\n          switch (eventType) {\n            case \"flare\":\n              setCurrentIntensity((prev: any) => Math.min(1, prev + 0.3));\n              break;\n            case \"wind\":\n              // Handled in particle updates\n              break;\n            case \"storm\":\n              setCurrentIntensity(1);\n              play(\"error\");\n              break;\n          }\n        }\n      }, 10000);\n\n      return () => clearInterval(interval);\n    }, [realTimeMode, onSolarEvent, play]);\n\n    // Render aurora display\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas with night sky gradient\n      const skyGradient = ctx.createLinearGradient(0, 0, 0, height);\n      const isDarkTime = observationTime < 6 || observationTime > 18;\n\n      if (isDarkTime) {\n        skyGradient.addColorStop(0, \"rgb(10, 10, 30)\");\n        skyGradient.addColorStop(0.6, \"rgb(5, 5, 15)\");\n        skyGradient.addColorStop(1, \"rgb(0, 0, 5)\");\n      } else {\n        skyGradient.addColorStop(0, \"rgb(70, 130, 180)\");\n        skyGradient.addColorStop(1, \"rgb(25, 25, 112)\");\n      }\n\n      ctx.fillStyle = skyGradient;\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw stars\n      if (showStars && isDarkTime) {\n        starField.stars.forEach((star: any) => {\n          const twinkle =\n            Math.sin(animationTime * 0.003 + star.twinklePhase) * 0.3 + 0.7;\n          ctx.globalAlpha = star.brightness * twinkle;\n          ctx.fillStyle = \"white\";\n          ctx.beginPath();\n          ctx.arc(star.x, star.y, 1, 0, Math.PI * 2);\n          ctx.fill();\n        });\n\n        // Draw shooting stars\n        starField.shootingStars.forEach((star: any) => {\n          star.trail.forEach(\n            (\n              point: { x: number; y: number; opacity: number },\n              index: number\n            ) => {\n              ctx.globalAlpha = point.opacity * (1 - index * 0.1);\n              ctx.fillStyle = \"white\";\n              ctx.beginPath();\n              ctx.arc(point.x, point.y, 2 - index * 0.2, 0, Math.PI * 2);\n              ctx.fill();\n            }\n          );\n        });\n      }\n\n      // Draw atmospheric glow\n      if (showAtmosphericGlow && isDarkTime) {\n        const glowGradient = ctx.createRadialGradient(\n          width / 2,\n          height * 0.8,\n          0,\n          width / 2,\n          height * 0.8,\n          width\n        );\n        glowGradient.addColorStop(0, \"rgba(100, 200, 100, 0.1)\");\n        glowGradient.addColorStop(1, \"rgba(100, 200, 100, 0)\");\n\n        ctx.fillStyle = glowGradient;\n        ctx.fillRect(0, 0, width, height);\n      }\n\n      // Draw aurora layers\n      ctx.globalAlpha = 1;\n      auroraLayers.forEach((layer: any) => {\n        if (layer.opacity < 0.01) return;\n\n        // Create gradient for aurora band\n        const gradient = ctx.createLinearGradient(0, 0, 0, layer.height);\n        gradient.addColorStop(\n          0,\n          `rgba(${layer.color[0]}, ${layer.color[1]}, ${layer.color[2]}, 0)`\n        );\n        gradient.addColorStop(\n          0.5,\n          `rgba(${layer.color[0]}, ${layer.color[1]}, ${layer.color[2]}, ${layer.opacity})`\n        );\n        gradient.addColorStop(\n          1,\n          `rgba(${layer.color[0]}, ${layer.color[1]}, ${layer.color[2]}, 0)`\n        );\n\n        ctx.fillStyle = gradient;\n        ctx.beginPath();\n\n        // Draw aurora curve\n        ctx.moveTo(layer.points[0].x, layer.points[0].y + layer.height / 2);\n\n        layer.points.forEach(\n          (\n            point: { x: number; y: number; intensity: number },\n            index: number\n          ) => {\n            if (index === 0) return;\n\n            const prevPoint = layer.points[index - 1];\n            const intensityFactor = (point.intensity + prevPoint.intensity) / 2;\n            const waveY =\n              point.y +\n              Math.sin(animationTime * 0.001 + index * 0.1) *\n                intensityFactor *\n                10;\n\n            ctx.lineTo(point.x, waveY);\n          }\n        );\n\n        // Complete the shape\n        for (let i = layer.points.length - 1; i >= 0; i--) {\n          const point = layer.points[i];\n          const intensityFactor = point.intensity;\n          const waveY =\n            point.y +\n            Math.sin(animationTime * 0.001 + i * 0.1) * intensityFactor * 10;\n          ctx.lineTo(point.x, waveY + layer.height);\n        }\n\n        ctx.closePath();\n        ctx.fill();\n\n        // Add shimmer effect\n        ctx.save();\n        ctx.globalCompositeOperation = \"overlay\";\n        ctx.globalAlpha = 0.3;\n\n        const shimmerGradient = ctx.createLinearGradient(\n          (animationTime * 0.1) % width,\n          0,\n          (animationTime * 0.1 + 100) % width,\n          0\n        );\n        shimmerGradient.addColorStop(0, \"rgba(255, 255, 255, 0)\");\n        shimmerGradient.addColorStop(0.5, \"rgba(255, 255, 255, 0.8)\");\n        shimmerGradient.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n\n        ctx.fillStyle = shimmerGradient;\n        ctx.fill();\n        ctx.restore();\n      });\n\n      // Draw solar wind particles\n      if (showSolarWind) {\n        solarWindParticles.forEach((particle: any) => {\n          ctx.globalAlpha = particle.opacity;\n          ctx.fillStyle = `rgb(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]})`;\n\n          // Add glow effect\n          ctx.shadowBlur = particle.energy * 10;\n          ctx.shadowColor = `rgb(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]})`;\n\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);\n          ctx.fill();\n\n          ctx.shadowBlur = 0;\n        });\n      }\n\n      // Aurora info overlay\n      if (showAuroraInfo) {\n        ctx.save();\n        ctx.fillStyle = \"rgba(15, 23, 42, 0.72)\";\n        ctx.fillRect(10, 10, 220, 160);\n\n        ctx.fillStyle = \"rgba(248, 250, 252, 0.92)\";\n        ctx.font = \"var(--typography-body-size) sans-serif\";\n        ctx.fillText(\n          `Aurora Intensity: ${Math.round(currentIntensity * 100)}%`,\n          20,\n          30\n        );\n        ctx.fillText(`Activity Level: ${activityLevel}`, 20, 50);\n        ctx.fillText(\n          `Solar Wind: ${Math.round(solarWindStrength * 100)}%`,\n          20,\n          70\n        );\n        ctx.fillText(\n          `Geomagnetic: ${Math.round(geomagneticActivity * 100)}%`,\n          20,\n          90\n        );\n        ctx.fillText(`Latitude: ${latitude}\u00B0`, 20, 110);\n        ctx.fillText(\n          `Time: ${Math.floor(observationTime)}:${String(Math.floor((observationTime % 1) * 60)).padStart(2, \"0\")}`,\n          20,\n          130\n        );\n        ctx.fillText(`Visibility: ${isDarkTime ? \"Good\" : \"Poor\"}`, 20, 150);\n        ctx.restore();\n      }\n    }, [\n      width,\n      height,\n      observationTime,\n      showStars,\n      starField,\n      animationTime,\n      showAtmosphericGlow,\n      auroraLayers,\n      showSolarWind,\n      solarWindParticles,\n      showAuroraInfo,\n      currentIntensity,\n      activityLevel,\n      solarWindStrength,\n      geomagneticActivity,\n      latitude,\n    ]);\n\n    // Animation loop\n    useEffect(() => {\n      if (prefersReducedMotion && respectMotionPreference) {\n        render();\n        return;\n      }\n\n      const animate = (currentTime: number) => {\n        const deltaTime = 16; // 60fps\n        setAnimationTime((prev: any) => prev + deltaTime);\n\n        updateAuroraLayers(deltaTime);\n        updateSolarWindParticles(deltaTime);\n        updateShootingStars(deltaTime);\n        render();\n\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [\n      prefersReducedMotion,\n      respectMotionPreference,\n      render,\n      updateAuroraLayers,\n      updateSolarWindParticles,\n      updateShootingStars,\n    ]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-aurora-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <ContrastGuard>\n              <label htmlFor=\"aurora-intensity\" className=\"glass-text-sm\">\n                Intensity:\n              </label>\n            </ContrastGuard>\n            <input\n              id=\"aurora-intensity\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={currentIntensity}\n              onChange={(e) => setCurrentIntensity(parseFloat(e.target.value))}\n              className=\"glass-w-20\"\n              aria-label=\"Aurora intensity\"\n            />\n            <ContrastGuard>\n              <span className=\"glass-text-sm glass-min-w-3ch\">\n                {Math.round(currentIntensity * 100)}%\n              </span>\n            </ContrastGuard>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"aurora-colors\" className=\"glass-text-sm\">\n              Colors:\n            </label>\n            <select\n              id=\"aurora-colors\"\n              value={colorPreset}\n              onChange={(e) => {}}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              aria-label=\"Aurora color preset\"\n            >\n              <option value=\"classic\">Classic</option>\n              <option value=\"rare\">Rare</option>\n              <option value=\"storm\">Storm</option>\n              <option value=\"sunset\">Sunset</option>\n              <option value=\"cosmic\">Cosmic</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"aurora-activity\" className=\"glass-text-sm\">\n              Activity:\n            </label>\n            <select\n              id=\"aurora-activity\"\n              value={activityLevel}\n              onChange={(e) => {}}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              aria-label=\"Aurora activity level\"\n            >\n              <option value=\"low\">Low</option>\n              <option value=\"moderate\">Moderate</option>\n              <option value=\"high\">High</option>\n              <option value=\"storm\">Storm</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"aurora-time\" className=\"glass-text-sm\">\n              Time:\n            </label>\n            <input\n              id=\"aurora-time\"\n              type=\"range\"\n              min=\"0\"\n              max=\"24\"\n              step=\"0.5\"\n              value={observationTime}\n              onChange={(e) => {}}\n              className=\"glass-w-20\"\n              aria-label=\"Observation time in hours\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showStars}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Stars\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showSolarWind}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Solar Wind\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={realTimeMode}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Real-time\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={auroraDisplayId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-aurora-display relative glass-radius-lg glass-backdrop-blur border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className=\"glass-border glass-border-glass-border/20 glass-radius-md glass-surface-dark glass-contrast-guard\"\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassAuroraDisplay.displayName = \"GlassAuroraDisplay\";\n\nexport default GlassAuroraDisplay;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface BiomeData {\n  type:\n    | \"forest\"\n    | \"ocean\"\n    | \"desert\"\n    | \"tundra\"\n    | \"grassland\"\n    | \"rainforest\"\n    | \"mountain\"\n    | \"swamp\";\n  temperature: number;\n  humidity: number;\n  windSpeed: number;\n  lightLevel: number;\n  season: \"spring\" | \"summer\" | \"autumn\" | \"winter\";\n  timeOfDay: number; // 0-24\n  id: string;\n}\n\nexport interface BiomeParticle {\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  size: number;\n  opacity: number;\n  color: [number, number, number];\n  // Extended to include all particle types referenced by biome configs\n  type:\n    | \"leaf\"\n    | \"pollen\"\n    | \"dust\"\n    | \"sand\"\n    | \"snow\"\n    | \"ice\"\n    | \"spark\"\n    | \"water\"\n    | \"droplet\"\n    | \"spore\"\n    | \"insect\"\n    | \"bubble\"\n    | \"fog\"\n    | \"cloud\";\n  lifetime: number;\n  rotation: number;\n  rotationSpeed: number;\n  id: string;\n}\n\nexport interface BiomeLayer {\n  name: string;\n  depth: number;\n  opacity: number;\n  elements: BiomeElement[];\n  parallaxSpeed: number;\n  id: string;\n}\n\nexport interface BiomeElement {\n  type:\n    | \"tree\"\n    | \"cloud\"\n    | \"mountain\"\n    | \"grass\"\n    | \"water\"\n    | \"rock\"\n    | \"flower\"\n    | \"animal\";\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  size?: number;\n  color: [number, number, number];\n  opacity: number;\n  animation?: string;\n  id: string;\n}\n\nexport interface GlassBiomeSimulatorProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Current biome data */\n  biome?: BiomeData;\n  /** Particle density multiplier */\n  particleDensity?: number;\n  /** Animation speed */\n  animationSpeed?: number;\n  /** Whether to show weather effects */\n  showWeatherEffects?: boolean;\n  /** Whether to show day/night cycle */\n  dayNightCycle?: boolean;\n  /** Seasonal transitions */\n  seasonalTransitions?: boolean;\n  /** Wildlife activity level */\n  wildlifeActivity?: number;\n  /** Ambient sound levels */\n  ambientSoundLevel?: number;\n  /** Wind effect strength */\n  windStrength?: number;\n  /** Whether to show atmospheric layers */\n  showAtmosphericLayers?: boolean;\n  /** Camera parallax enabled */\n  parallaxEnabled?: boolean;\n  /** Biome change handler */\n  onBiomeChange?: (biome: BiomeData) => void;\n  /** Season change handler */\n  onSeasonChange?: (season: BiomeData[\"season\"]) => void;\n  /** Time change handler */\n  onTimeChange?: (timeOfDay: number) => void;\n  /** Show controls */\n  showControls?: boolean;\n  /** Show biome info */\n  showBiomeInfo?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassBiomeSimulator = forwardRef<\n  HTMLDivElement,\n  GlassBiomeSimulatorProps\n>(\n  (\n    {\n      width = 800,\n      height = 500,\n      biome = {\n        type: \"forest\",\n        temperature: 18,\n        humidity: 0.7,\n        windSpeed: 8,\n        lightLevel: 0.8,\n        season: \"spring\",\n        timeOfDay: 12,\n        id: \"default-biome\",\n      },\n      particleDensity = 1,\n      animationSpeed = 1,\n      showWeatherEffects = true,\n      dayNightCycle = true,\n      seasonalTransitions = true,\n      wildlifeActivity = 0.5,\n      ambientSoundLevel = 0.3,\n      windStrength = 1,\n      showAtmosphericLayers = true,\n      parallaxEnabled = true,\n      onBiomeChange,\n      onSeasonChange,\n      onTimeChange,\n      showControls = true,\n      showBiomeInfo = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const biomeSimulatorId = useA11yId(\"glass-biome-simulator\");\n\n    const [currentBiome, setCurrentBiome] = useState<BiomeData>(biome);\n    const [particles, setParticles] = useState<BiomeParticle[]>([]);\n    const [biomeLayers, setBiomeLayers] = useState<BiomeLayer[]>([]);\n    const [animationTime, setAnimationTime] = useState(0);\n    const [cameraOffset, setCameraOffset] = useState({ x: 0, y: 0 });\n\n    // Biome configurations (memoized to prevent re-creation each render)\n    // Re-creating this object every render invalidated callbacks that depend on it\n    // and caused an infinite effect loop that set state on every render.\n    const biomeConfigs = React.useMemo(\n      () => ({\n        forest: {\n          colors: {\n            sky: [\"#87CEEB\", \"#98FB98\"],\n            ground: [34, 139, 34],\n            accent: [139, 69, 19],\n          },\n          particles: [\"leaf\", \"pollen\", \"insect\"],\n          elements: [\"tree\", \"grass\", \"flower\"],\n          sounds: [\"birds\", \"rustling\", \"wind\"],\n        },\n        ocean: {\n          colors: {\n            sky: [\"#87CEEB\", \"#E0F6FF\"],\n            ground: [25, 25, 112],\n            accent: [255, 255, 255],\n          },\n          particles: [\"water\", \"droplet\"],\n          elements: [\"water\", \"cloud\"],\n          sounds: [\"waves\", \"seagulls\", \"wind\"],\n        },\n        desert: {\n          colors: {\n            sky: [\"#FFD700\", \"#FFA500\"],\n            ground: [238, 203, 173],\n            accent: [160, 82, 45],\n          },\n          particles: [\"dust\", \"sand\"],\n          elements: [\"rock\", \"cactus\"],\n          sounds: [\"wind\", \"sand\"],\n        },\n        tundra: {\n          colors: {\n            sky: [\"#B0C4DE\", \"#F0F8FF\"],\n            ground: [248, 248, 255],\n            accent: [70, 130, 180],\n          },\n          particles: [\"snow\", \"ice\"],\n          elements: [\"ice\", \"rock\"],\n          sounds: [\"wind\", \"ice\"],\n        },\n        grassland: {\n          colors: {\n            sky: [\"#87CEEB\", \"#98FB98\"],\n            ground: [124, 252, 0],\n            accent: [255, 215, 0],\n          },\n          particles: [\"pollen\", \"grass\"],\n          elements: [\"grass\", \"flower\"],\n          sounds: [\"wind\", \"insects\"],\n        },\n        rainforest: {\n          colors: {\n            sky: [\"#228B22\", \"#90EE90\"],\n            ground: [0, 100, 0],\n            accent: [255, 69, 0],\n          },\n          particles: [\"water\", \"leaf\", \"spore\"],\n          elements: [\"tree\", \"vine\", \"flower\"],\n          sounds: [\"rain\", \"birds\", \"insects\"],\n        },\n        mountain: {\n          colors: {\n            sky: [\"#4682B4\", \"#E0F6FF\"],\n            ground: [105, 105, 105],\n            accent: [255, 255, 255],\n          },\n          particles: [\"snow\", \"cloud\"],\n          elements: [\"mountain\", \"rock\", \"snow\"],\n          sounds: [\"wind\", \"echo\"],\n        },\n        swamp: {\n          colors: {\n            sky: [\"#696969\", \"#A9A9A9\"],\n            ground: [85, 107, 47],\n            accent: [255, 140, 0],\n          },\n          particles: [\"fog\", \"insect\", \"bubble\"],\n          elements: [\"water\", \"tree\", \"fog\"],\n          sounds: [\"frogs\", \"insects\", \"bubbles\"],\n        },\n      }),\n      []\n    );\n\n    // Generate biome layers\n    const generateBiomeLayers = useCallback(\n      (biomeType: BiomeData[\"type\"]) => {\n        const config = biomeConfigs[biomeType];\n        const layers: BiomeLayer[] = [];\n\n        // Background layer\n        layers.push({\n          name: \"Background\",\n          depth: 0,\n          opacity: 1,\n          parallaxSpeed: 0.1,\n          id: \"bg-layer\",\n          elements: [],\n        });\n\n        // Far layer\n        const farElements: BiomeElement[] = [];\n        if (biomeType === \"forest\") {\n          for (let i = 0; i < 8; i++) {\n            farElements.push({\n              type: \"tree\",\n              x: (i * width) / 8 + Math.random() * 50,\n              y: height * 0.3 + Math.random() * 50,\n              width: 60 + Math.random() * 40,\n              height: 80 + Math.random() * 60,\n              color: [34, 100, 34],\n              opacity: 0.6,\n              id: `far-tree-${i}`,\n            });\n          }\n        } else if (biomeType === \"mountain\") {\n          for (let i = 0; i < 5; i++) {\n            farElements.push({\n              type: \"mountain\",\n              x: (i * width) / 4,\n              y: height * 0.2,\n              width: width / 3,\n              height: height * 0.6,\n              color: [105, 105, 105],\n              opacity: 0.7,\n              id: `mountain-${i}`,\n            });\n          }\n        }\n\n        layers.push({\n          name: \"Far\",\n          depth: 1,\n          opacity: 0.8,\n          parallaxSpeed: 0.3,\n          id: \"far-layer\",\n          elements: farElements,\n        });\n\n        // Mid layer\n        const midElements: BiomeElement[] = [];\n        if (biomeType === \"grassland\") {\n          for (let i = 0; i < 20; i++) {\n            midElements.push({\n              type: \"grass\",\n              x: Math.random() * width,\n              y: height * 0.7 + Math.random() * height * 0.2,\n              width: 10 + Math.random() * 20,\n              height: 20 + Math.random() * 30,\n              color: [124, 252, 0],\n              opacity: 0.8,\n              id: `grass-${i}`,\n            });\n          }\n        } else if (biomeType === \"ocean\") {\n          midElements.push({\n            type: \"water\",\n            x: 0,\n            y: height * 0.6,\n            width: width,\n            height: height * 0.4,\n            color: [25, 25, 112],\n            opacity: 0.8,\n            animation: \"wave\",\n            id: \"ocean-water\",\n          });\n        }\n\n        layers.push({\n          name: \"Mid\",\n          depth: 2,\n          opacity: 0.9,\n          parallaxSpeed: 0.6,\n          id: \"mid-layer\",\n          elements: midElements,\n        });\n\n        // Near layer\n        const nearElements: BiomeElement[] = [];\n        if (biomeType === \"forest\") {\n          for (let i = 0; i < 3; i++) {\n            nearElements.push({\n              type: \"tree\",\n              x: (i * width) / 3 + Math.random() * 100,\n              y: height * 0.2,\n              width: 80 + Math.random() * 60,\n              height: 120 + Math.random() * 80,\n              color: [34, 139, 34],\n              opacity: 1,\n              id: `near-tree-${i}`,\n            });\n          }\n        }\n\n        layers.push({\n          name: \"Near\",\n          depth: 3,\n          opacity: 1,\n          parallaxSpeed: 1,\n          id: \"near-layer\",\n          elements: nearElements,\n        });\n\n        return layers;\n      },\n      [width, height, biomeConfigs]\n    );\n\n    // Generate particles\n    const generateParticles = useCallback(\n      (biomeType: BiomeData[\"type\"], count: number) => {\n        const config = biomeConfigs[biomeType];\n        const newParticles: BiomeParticle[] = [];\n\n        for (let i = 0; i < count; i++) {\n          const particleType = config.particles[\n            Math.floor(Math.random() * config.particles.length)\n          ] as BiomeParticle[\"type\"];\n\n          let particle: Partial<BiomeParticle> = {\n            x: Math.random() * width,\n            y: Math.random() * height,\n            size: Math.random() * 5 + 2,\n            opacity: Math.random() * 0.8 + 0.2,\n            lifetime: Math.random() * 10000 + 5000,\n            rotation: Math.random() * Math.PI * 2,\n            rotationSpeed: (Math.random() - 0.5) * 0.1,\n            type: particleType,\n            id: `particle-${particleType}-${i}-${Date.now()}`,\n          };\n\n          switch (particleType) {\n            case \"leaf\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 2,\n                vy: Math.random() * 1 + 0.5,\n                color: [34, 139, 34],\n                size: Math.random() * 8 + 4,\n                rotationSpeed: (Math.random() - 0.5) * 0.2,\n              };\n              break;\n\n            case \"pollen\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 1,\n                vy: (Math.random() - 0.5) * 0.5,\n                color: [255, 215, 0],\n                size: Math.random() * 3 + 1,\n              };\n              break;\n\n            case \"water\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.5,\n                vy: Math.random() * 3 + 2,\n                color: [173, 216, 230],\n                size: Math.random() * 4 + 2,\n              };\n              break;\n\n            case \"droplet\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.4,\n                vy: Math.random() * 2.5 + 1.5,\n                color: [173, 216, 230], // light blue\n                size: Math.random() * 3 + 1,\n              };\n              break;\n\n            case \"dust\":\n              particle = {\n                ...particle,\n                vx: currentBiome.windSpeed * 0.1 + (Math.random() - 0.5) * 1,\n                vy: (Math.random() - 0.5) * 0.5,\n                color: [238, 203, 173],\n                size: Math.random() * 2 + 1,\n                opacity: Math.random() * 0.5 + 0.1,\n              };\n              break;\n\n            case \"sand\":\n              particle = {\n                ...particle,\n                vx: currentBiome.windSpeed * 0.15 + (Math.random() - 0.5) * 1,\n                vy: (Math.random() - 0.5) * 0.3,\n                color: [237, 201, 175], // sandy color\n                size: Math.random() * 2 + 0.5,\n                opacity: Math.random() * 0.4 + 0.1,\n              };\n              break;\n\n            case \"snow\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * currentBiome.windSpeed * 0.1,\n                vy: Math.random() * 2 + 1,\n                color: [255, 255, 255],\n                size: Math.random() * 6 + 3,\n                rotationSpeed: (Math.random() - 0.5) * 0.1,\n              };\n              break;\n\n            case \"ice\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * currentBiome.windSpeed * 0.08,\n                vy: Math.random() * 1.5 + 0.5,\n                color: [200, 230, 255], // icy blue\n                size: Math.random() * 4 + 2,\n                rotationSpeed: (Math.random() - 0.5) * 0.08,\n              };\n              break;\n\n            case \"insect\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 3,\n                vy: (Math.random() - 0.5) * 3,\n                color: [0, 0, 0],\n                size: Math.random() * 2 + 1,\n              };\n              break;\n\n            case \"spore\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.5,\n                vy: -Math.random() * 0.5,\n                color: [144, 238, 144],\n                size: Math.random() * 3 + 1,\n                opacity: Math.random() * 0.6 + 0.2,\n              };\n              break;\n\n            case \"fog\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.2,\n                vy: (Math.random() - 0.5) * 0.1,\n                color: [210, 210, 220],\n                size: Math.random() * 20 + 10,\n                opacity: Math.random() * 0.2 + 0.05,\n              };\n              break;\n\n            case \"bubble\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.3,\n                vy: -Math.random() * 0.8,\n                color: [180, 220, 255],\n                size: Math.random() * 5 + 2,\n                opacity: Math.random() * 0.5 + 0.2,\n              };\n              break;\n\n            case \"cloud\":\n              particle = {\n                ...particle,\n                vx: (Math.random() - 0.5) * 0.2,\n                vy: (Math.random() - 0.5) * 0.1,\n                color: [220, 220, 230],\n                size: Math.random() * 30 + 20,\n                opacity: Math.random() * 0.25 + 0.1,\n              };\n              break;\n          }\n\n          newParticles.push(particle as BiomeParticle);\n        }\n\n        return newParticles;\n      },\n      [width, height, biomeConfigs, currentBiome.windSpeed]\n    );\n\n    // Initialize biome\n    useEffect(() => {\n      const layers = generateBiomeLayers(currentBiome.type);\n      setBiomeLayers(layers);\n\n      const particleCount = Math.floor(50 * particleDensity);\n      const newParticles = generateParticles(currentBiome.type, particleCount);\n      setParticles(newParticles);\n    }, [\n      currentBiome.type,\n      generateBiomeLayers,\n      generateParticles,\n      particleDensity,\n    ]);\n\n    // Update particles\n    const updateParticles = useCallback(\n      (deltaTime: number) => {\n        setParticles((prevParticles) => {\n          const updated = prevParticles\n            .map((particle: any) => {\n              const windEffect = currentBiome.windSpeed * windStrength * 0.01;\n\n              return {\n                ...particle,\n                x:\n                  particle.x +\n                  (particle.vx + windEffect) * deltaTime * animationSpeed,\n                y: particle.y + particle.vy * deltaTime * animationSpeed,\n                rotation:\n                  particle.rotation +\n                  particle.rotationSpeed * deltaTime * animationSpeed,\n                lifetime: particle.lifetime - deltaTime,\n              };\n            })\n            .filter(\n              (particle: any) =>\n                particle.lifetime > 0 &&\n                particle.x > -50 &&\n                particle.x < width + 50 &&\n                particle.y > -50 &&\n                particle.y < height + 50\n            );\n\n          // Add new particles to maintain count\n          if (updated.length < 50 * particleDensity) {\n            const needed = Math.min(\n              5,\n              Math.floor(50 * particleDensity) - updated.length\n            );\n            const newParticles = generateParticles(currentBiome.type, needed);\n            return [...updated, ...newParticles];\n          }\n\n          return updated;\n        });\n      },\n      [\n        currentBiome,\n        windStrength,\n        animationSpeed,\n        width,\n        height,\n        generateParticles,\n        particleDensity,\n      ]\n    );\n\n    // Get day/night colors\n    const getDayNightColors = useCallback(\n      (timeOfDay: number, baseColors: string[]) => {\n        if (!dayNightCycle) return baseColors;\n\n        const isDay = timeOfDay >= 6 && timeOfDay <= 18;\n        const lightIntensity = isDay\n          ? Math.sin(((timeOfDay - 6) / 12) * Math.PI)\n          : 0.2;\n\n        return baseColors.map((color: any) => {\n          // Parse hex color\n          const r = parseInt(color.slice(1, 3), 16);\n          const g = parseInt(color.slice(3, 5), 16);\n          const b = parseInt(color.slice(5, 7), 16);\n\n          // Apply light intensity\n          const newR = Math.round(r * lightIntensity);\n          const newG = Math.round(g * lightIntensity);\n          const newB = Math.round(b * lightIntensity + (isDay ? 0 : 50));\n\n          return `rgb(${newR}, ${newG}, ${newB})`;\n        });\n      },\n      [dayNightCycle]\n    );\n\n    // Render biome\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const config = biomeConfigs[currentBiome.type];\n      const skyColors = getDayNightColors(\n        currentBiome.timeOfDay,\n        config.colors.sky\n      );\n\n      // Clear canvas with gradient background\n      const gradient = ctx.createLinearGradient(0, 0, 0, height);\n      gradient.addColorStop(0, skyColors[0]);\n      gradient.addColorStop(1, skyColors[1]);\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw atmospheric layers\n      if (showAtmosphericLayers) {\n        biomeLayers.forEach((layer: any) => {\n          ctx.save();\n          ctx.globalAlpha = layer.opacity;\n\n          const parallaxOffset = parallaxEnabled\n            ? cameraOffset.x * layer.parallaxSpeed\n            : 0;\n\n          layer.elements.forEach((element: any) => {\n            ctx.save();\n            ctx.translate(element.x + parallaxOffset, element.y);\n            ctx.globalAlpha = element.opacity;\n\n            const color = `rgb(${element.color[0]}, ${element.color[1]}, ${element.color[2]})`;\n\n            switch (element.type) {\n              case \"tree\":\n                // Draw simple tree\n                ctx.fillStyle = color;\n                ctx.fillRect(\n                  -element.width * 0.1,\n                  0,\n                  element.width * 0.2,\n                  element.height * 0.3\n                ); // trunk\n                ctx.beginPath();\n                // Use arc instead of ellipse for better compatibility\n                if (ctx.ellipse) {\n                  ctx.ellipse(\n                    0,\n                    -element.height * 0.3,\n                    element.width * 0.5,\n                    element.height * 0.7,\n                    0,\n                    0,\n                    Math.PI * 2\n                  );\n                } else {\n                  // Fallback for environments without ellipse support\n                  ctx.arc(\n                    0,\n                    -element.height * 0.3,\n                    element.width * 0.5,\n                    0,\n                    Math.PI * 2\n                  );\n                }\n                ctx.fill();\n                break;\n\n              case \"mountain\":\n                ctx.fillStyle = color;\n                ctx.beginPath();\n                ctx.moveTo(-element.width * 0.5, element.height);\n                ctx.lineTo(0, 0);\n                ctx.lineTo(element.width * 0.5, element.height);\n                ctx.closePath();\n                ctx.fill();\n                break;\n\n              case \"grass\":\n                ctx.strokeStyle = color;\n                ctx.lineWidth = 2;\n                ctx.beginPath();\n                ctx.moveTo(0, element.height);\n                ctx.quadraticCurveTo(\n                  element.width * 0.5,\n                  0,\n                  0,\n                  -element.height * 0.5\n                );\n                ctx.stroke();\n                break;\n\n              case \"cloud\":\n                // Soft cloud made of overlapping circles\n                ctx.fillStyle = color;\n                ctx.globalAlpha = element.opacity * 0.6;\n                ctx.beginPath();\n                const radius = Math.max(\n                  10,\n                  Math.min(element.width, element.height) * 0.3\n                );\n                for (let i = -2; i <= 2; i++) {\n                  ctx.moveTo(i * radius * 0.8, 0);\n                  ctx.arc(\n                    i * radius * 0.8,\n                    0,\n                    radius * (1 - Math.abs(i) * 0.1),\n                    0,\n                    Math.PI * 2\n                  );\n                }\n                ctx.fill();\n                ctx.globalAlpha = element.opacity;\n                break;\n\n              case \"water\":\n                ctx.fillStyle = color;\n                ctx.fillRect(\n                  -element.width * 0.5,\n                  0,\n                  element.width,\n                  element.height\n                );\n\n                // Add wave effect\n                if (element.animation === \"wave\") {\n                  ctx.strokeStyle = \"var(--glass-bg-hover)\";\n                  ctx.lineWidth = 1;\n                  const waveOffset = animationTime * 0.002;\n                  for (let i = 0; i < element.width; i += 10) {\n                    const waveY = Math.sin((i + waveOffset * 100) * 0.02) * 5;\n                    ctx.beginPath();\n                    ctx.moveTo(i - element.width * 0.5, waveY);\n                    ctx.lineTo(i + 5 - element.width * 0.5, waveY);\n                    ctx.stroke();\n                  }\n                }\n                break;\n\n              case \"rock\":\n                ctx.fillStyle = color;\n                ctx.beginPath();\n                // Use arc instead of ellipse for better compatibility\n                if (ctx.ellipse) {\n                  ctx.ellipse(\n                    0,\n                    0,\n                    element.width * 0.5,\n                    element.height * 0.3,\n                    0,\n                    0,\n                    Math.PI * 2\n                  );\n                } else {\n                  // Fallback for environments without ellipse support\n                  ctx.arc(0, 0, element.width * 0.5, 0, Math.PI * 2);\n                }\n                ctx.fill();\n                break;\n\n              case \"flower\":\n                // Draw flower\n                ctx.fillStyle = color;\n                ctx.beginPath();\n                ctx.arc(0, 0, element.size || 5, 0, Math.PI * 2);\n                ctx.fill();\n\n                // Petals\n                ctx.fillStyle = \"rgba(255, 100, 150, 0.8)\";\n                for (let i = 0; i < 5; i++) {\n                  ctx.save();\n                  ctx.rotate((i / 5) * Math.PI * 2);\n                  ctx.beginPath();\n                  // Use arc instead of ellipse for better compatibility\n                  if (ctx.ellipse) {\n                    ctx.ellipse(0, -8, 3, 6, 0, 0, Math.PI * 2);\n                  } else {\n                    // Fallback for environments without ellipse support\n                    ctx.arc(0, -8, 3, 0, Math.PI * 2);\n                  }\n                  ctx.fill();\n                  ctx.restore();\n                }\n                break;\n            }\n\n            ctx.restore();\n          });\n\n          ctx.restore();\n        });\n      }\n\n      // Draw particles (guard against malformed data)\n      particles.forEach((particle: any) => {\n        ctx.save();\n        ctx.globalAlpha = particle.opacity;\n        ctx.translate(particle.x, particle.y);\n        ctx.rotate(particle.rotation);\n\n        // Fallback color guard in case a particle was created without a color\n        const color = Array.isArray(particle.color)\n          ? `rgb(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]})`\n          : \"var(--glass-white)\";\n\n        switch (particle.type) {\n          case \"leaf\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            // Use arc instead of ellipse for better compatibility\n            if (ctx.ellipse) {\n              ctx.ellipse(\n                0,\n                0,\n                particle.size,\n                particle.size * 0.6,\n                0,\n                0,\n                Math.PI * 2\n              );\n            } else {\n              // Fallback for environments without ellipse support\n              ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            }\n            ctx.fill();\n            break;\n\n          case \"pollen\":\n          case \"dust\":\n          case \"sand\":\n          case \"spore\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n\n          case \"snow\":\n          case \"ice\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n\n            // Snowflake pattern\n            ctx.strokeStyle = color;\n            ctx.lineWidth = 0.5;\n            for (let i = 0; i < 6; i++) {\n              ctx.beginPath();\n              ctx.moveTo(0, 0);\n              ctx.lineTo(0, -particle.size);\n              ctx.stroke();\n              ctx.rotate(Math.PI / 3);\n            }\n            break;\n\n          case \"water\":\n          case \"droplet\":\n          case \"bubble\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n\n          case \"fog\":\n          case \"cloud\":\n            // Render as a soft blurred circle\n            const fogGradient = ctx.createRadialGradient(\n              0,\n              0,\n              0,\n              0,\n              0,\n              particle.size\n            );\n            fogGradient.addColorStop(\n              0,\n              `rgba(${Array.isArray(particle.color) ? `${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}` : \"255, 255, 255\"}, ${Math.min(0.5, particle.opacity)})`\n            );\n            fogGradient.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n            ctx.fillStyle = fogGradient;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n\n          case \"insect\":\n            ctx.fillStyle = color;\n            ctx.fillRect(\n              -particle.size * 0.5,\n              -particle.size * 0.2,\n              particle.size,\n              particle.size * 0.4\n            );\n            break;\n        }\n\n        ctx.restore();\n      });\n\n      // Weather overlay effects\n      if (showWeatherEffects) {\n        if (currentBiome.humidity > 0.8) {\n          ctx.save();\n          ctx.globalAlpha = (currentBiome.humidity - 0.8) * 0.5;\n          ctx.fillStyle = \"rgba(200, 200, 220, 0.1)\";\n          ctx.fillRect(0, 0, width, height);\n          ctx.restore();\n        }\n\n        if (currentBiome.temperature < 0) {\n          ctx.save();\n          ctx.globalAlpha = Math.abs(currentBiome.temperature) * 0.01;\n          ctx.fillStyle = \"rgba(173, 216, 230, 0.1)\";\n          ctx.fillRect(0, 0, width, height);\n          ctx.restore();\n        }\n      }\n\n      // Biome info overlay\n      if (showBiomeInfo) {\n        ctx.save();\n        ctx.fillStyle = \"var(--glass-text-secondary-dark)\";\n        ctx.fillRect(10, 10, 250, 140);\n\n        ctx.fillStyle = \"white\";\n        ctx.font = \"14px sans-serif\";\n        ctx.fillText(`Biome: ${currentBiome.type}`, 20, 30);\n        ctx.fillText(`Season: ${currentBiome.season}`, 20, 50);\n        ctx.fillText(`Temperature: ${currentBiome.temperature}\u00B0C`, 20, 70);\n        ctx.fillText(\n          `Humidity: ${Math.round(currentBiome.humidity * 100)}%`,\n          20,\n          90\n        );\n        ctx.fillText(\n          `Wind: ${Math.round(currentBiome.windSpeed)} km/h`,\n          20,\n          110\n        );\n        ctx.fillText(\n          `Time: ${Math.floor(currentBiome.timeOfDay)}:${String(Math.floor((currentBiome.timeOfDay % 1) * 60)).padStart(2, \"0\")}`,\n          20,\n          130\n        );\n        ctx.restore();\n      }\n    }, [\n      width,\n      height,\n      biomeConfigs,\n      currentBiome,\n      getDayNightColors,\n      showAtmosphericLayers,\n      biomeLayers,\n      parallaxEnabled,\n      cameraOffset,\n      animationTime,\n      particles,\n      showWeatherEffects,\n      showBiomeInfo,\n    ]);\n\n    // Animation loop\n    useEffect(() => {\n      if (prefersReducedMotion && respectMotionPreference) {\n        render();\n        return;\n      }\n\n      const animate = (currentTime: number) => {\n        const deltaTime = 16; // 60fps\n        setAnimationTime((prev: any) => prev + deltaTime);\n\n        updateParticles(deltaTime);\n        render();\n\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [\n      prefersReducedMotion,\n      respectMotionPreference,\n      render,\n      updateParticles,\n    ]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-biome-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"biome-select\">\n              Biome:\n            </label>\n            <select\n              id=\"biome-select\"\n              value={currentBiome.type}\n              onChange={(e) => {\n                const newBiome = {\n                  ...currentBiome,\n                  type: e.target.value as any,\n                };\n                setCurrentBiome(newBiome);\n                onBiomeChange?.(newBiome);\n              }}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              aria-label=\"Select biome type\"\n            >\n              <option value=\"forest\">Forest</option>\n              <option value=\"ocean\">Ocean</option>\n              <option value=\"desert\">Desert</option>\n              <option value=\"tundra\">Tundra</option>\n              <option value=\"grassland\">Grassland</option>\n              <option value=\"rainforest\">Rainforest</option>\n              <option value=\"mountain\">Mountain</option>\n              <option value=\"swamp\">Swamp</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"biome-season-select\">\n              Season:\n            </label>\n            <select\n              id=\"biome-season-select\"\n              value={currentBiome.season}\n              onChange={(e) => {\n                const newBiome = {\n                  ...currentBiome,\n                  season: e.target.value as any,\n                };\n                setCurrentBiome(newBiome);\n                onSeasonChange?.(e.target.value as any);\n              }}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard\"\n              aria-label=\"Select season\"\n            >\n              <option value=\"spring\">Spring</option>\n              <option value=\"summer\">Summer</option>\n              <option value=\"autumn\">Autumn</option>\n              <option value=\"winter\">Winter</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\" htmlFor=\"biome-time-range\">\n              Time:\n            </label>\n            <input\n              id=\"biome-time-range\"\n              type=\"range\"\n              min=\"0\"\n              max=\"24\"\n              step=\"0.5\"\n              value={currentBiome.timeOfDay}\n              onChange={(e) => {\n                const newTime = parseFloat(e.target.value);\n                setCurrentBiome((prev: any) => ({\n                  ...prev,\n                  timeOfDay: newTime,\n                }));\n                onTimeChange?.(newTime);\n              }}\n              className=\"glass-w-20\"\n              aria-label=\"Adjust time of day\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={dayNightCycle}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Day/Night\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={parallaxEnabled}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Parallax\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={biomeSimulatorId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-biome-simulator relative glass-radius-lg glass-backdrop-blur border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className=\"glass-border glass-border-glass-border/20 glass-radius-md\"\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassBiomeSimulator.displayName = \"GlassBiomeSimulator\";\n\nexport default GlassBiomeSimulator;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\n\nexport interface NebulaLayer {\n  name: string;\n  points: Array<{ x: number; y: number; density: number; temperature: number }>;\n  color: [number, number, number];\n  opacity: number;\n  scale: number;\n  rotation: number;\n  rotationSpeed: number;\n  turbulence: number;\n  id: string;\n}\n\nexport interface StarCluster {\n  x: number;\n  y: number;\n  stars: Array<{\n    x: number;\n    y: number;\n    brightness: number;\n    color: [number, number, number];\n    size: number;\n    twinklePhase: number;\n    spectralClass: \"O\" | \"B\" | \"A\" | \"F\" | \"G\" | \"K\" | \"M\";\n  }>;\n  density: number;\n  age: number; // millions of years\n  id: string;\n}\n\nexport interface CosmicDust {\n  particles: Array<{\n    x: number;\n    y: number;\n    vx: number;\n    vy: number;\n    size: number;\n    opacity: number;\n    color: [number, number, number];\n    temperature: number;\n    lifetime: number;\n  }>;\n  density: number;\n  composition: \"silicate\" | \"carbon\" | \"ice\" | \"organic\";\n  id: string;\n}\n\nexport interface GlassNebulaCloudsProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Nebula type */\n  nebulaType?: \"emission\" | \"reflection\" | \"dark\" | \"planetary\" | \"supernova\";\n  /** Overall nebula density */\n  density?: number;\n  /** Gas temperature (affects color) */\n  temperature?: number;\n  /** Stellar wind strength */\n  stellarWindStrength?: number;\n  /** Number of nebula layers */\n  layerCount?: number;\n  /** Show star clusters */\n  showStarClusters?: boolean;\n  /** Show cosmic dust */\n  showCosmicDust?: boolean;\n  /** Animation speed */\n  animationSpeed?: number;\n  /** Turbulence level */\n  turbulenceLevel?: number;\n  /** Color intensity */\n  colorIntensity?: number;\n  /** Camera distance (affects perspective) */\n  cameraDistance?: number;\n  /** Time scale (affects evolution) */\n  timeScale?: number;\n  /** Ionization level */\n  ionizationLevel?: number;\n  /** Whether to show emission lines */\n  showEmissionLines?: boolean;\n  /** Magnetic field visualization */\n  showMagneticField?: boolean;\n  /** Nebula evolution handler */\n  onNebulaEvolution?: (age: number, state: string) => void;\n  /** Star formation handler */\n  onStarFormation?: (location: { x: number; y: number }) => void;\n  /** Show controls */\n  showControls?: boolean;\n  /** Show nebula info */\n  showNebulaInfo?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassNebulaClouds = forwardRef<\n  HTMLDivElement,\n  GlassNebulaCloudsProps\n>(\n  (\n    {\n      width = 800,\n      height = 600,\n      nebulaType = \"emission\",\n      density = 0.7,\n      temperature = 10000,\n      stellarWindStrength = 0.5,\n      layerCount = 5,\n      showStarClusters = true,\n      showCosmicDust = true,\n      animationSpeed = 1,\n      turbulenceLevel = 0.6,\n      colorIntensity = 0.8,\n      cameraDistance = 1,\n      timeScale = 1,\n      ionizationLevel = 0.7,\n      showEmissionLines = true,\n      showMagneticField = false,\n      onNebulaEvolution,\n      onStarFormation,\n      showControls = true,\n      showNebulaInfo = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const { play } = useGlassSound();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const nebulaCloudsId = useA11yId(\"glass-nebula-clouds\");\n\n    const [nebulaLayers, setNebulaLayers] = useState<NebulaLayer[]>([]);\n    const [starClusters, setStarClusters] = useState<StarCluster[]>([]);\n    const [cosmicDust, setCosmicDust] = useState<CosmicDust[]>([]);\n    const [animationTime, setAnimationTime] = useState(0);\n    const [nebulaAge, setNebulaAge] = useState(0); // millions of years\n    const [evolutionPhase, setEvolutionPhase] = useState<\n      \"formation\" | \"mature\" | \"dispersing\"\n    >(\"formation\");\n\n    // Nebula type configurations\n    const nebulaConfigs = {\n      emission: {\n        colors: [\n          [255, 100, 100], // H-alpha (red)\n          [100, 255, 100], // OIII (green)\n          [100, 100, 255], // H-beta (blue)\n          [255, 255, 100], // Sodium (yellow)\n        ],\n        baseTemperature: 10000,\n        ionizedGas: true,\n      },\n      reflection: {\n        colors: [\n          [150, 200, 255], // Blue scattered light\n          [200, 220, 255], // White light reflection\n          [120, 180, 255], // Rayleigh scattering\n        ],\n        baseTemperature: 3000,\n        ionizedGas: false,\n      },\n      dark: {\n        colors: [\n          [50, 50, 50], // Dark molecular cloud\n          [80, 60, 40], // Dust silhouette\n          [40, 40, 60], // Cold regions\n        ],\n        baseTemperature: 10,\n        ionizedGas: false,\n      },\n      planetary: {\n        colors: [\n          [100, 255, 255], // OIII (cyan)\n          [255, 100, 255], // H-alpha (magenta)\n          [255, 255, 100], // HeII (yellow)\n          [100, 255, 100], // NII (green)\n        ],\n        baseTemperature: 50000,\n        ionizedGas: true,\n      },\n      supernova: {\n        colors: [\n          [255, 255, 255], // Shock front\n          [255, 200, 100], // Hot gas\n          [255, 100, 100], // H-alpha\n          [100, 200, 255], // Synchrotron radiation\n        ],\n        baseTemperature: 1000000,\n        ionizedGas: true,\n      },\n    };\n\n    // Temperature to color mapping\n    const getTemperatureColor = useCallback(\n      (temp: number): [number, number, number] => {\n        // Black body radiation approximation\n        if (temp < 3000) return [255, 100, 0]; // Red\n        if (temp < 5000) return [255, 200, 100]; // Orange\n        if (temp < 7000) return [255, 255, 200]; // Yellow-white\n        if (temp < 10000) return [200, 220, 255]; // White\n        if (temp < 20000) return [150, 200, 255]; // Blue-white\n        return [100, 150, 255]; // Blue\n      },\n      []\n    );\n\n    // Generate nebula layers\n    const generateNebulaLayers = useCallback(() => {\n      const config = nebulaConfigs[nebulaType];\n      const layers: NebulaLayer[] = [];\n\n      for (let i = 0; i < layerCount; i++) {\n        const points = [];\n        const layerDensity = density * (1 - i * 0.1);\n        const layerTemp = temperature * (1 + (Math.random() - 0.5) * 0.3);\n\n        // Generate cloud structure using Perlin-like noise\n        for (let x = 0; x < width; x += 20) {\n          for (let y = 0; y < height; y += 20) {\n            const noise =\n              Math.sin(x * 0.01 + i) *\n              Math.cos(y * 0.01 + i) *\n              Math.sin(x * y * 0.0001 + i * 2);\n\n            if (Math.abs(noise) > 0.3) {\n              points.push({\n                x: x + (Math.random() - 0.5) * 40,\n                y: y + (Math.random() - 0.5) * 40,\n                density: layerDensity * Math.abs(noise),\n                temperature: layerTemp * (0.8 + Math.random() * 0.4),\n              });\n            }\n          }\n        }\n\n        layers.push({\n          name: `Layer ${i + 1}`,\n          points,\n          color: config.colors[i % config.colors.length] as [\n            number,\n            number,\n            number,\n          ],\n          opacity: colorIntensity * (0.8 - i * 0.1),\n          scale: 1 + i * 0.2,\n          rotation: 0,\n          rotationSpeed: (Math.random() - 0.5) * 0.001,\n          turbulence: turbulenceLevel * (1 + i * 0.1),\n          id: `nebula-layer-${i}`,\n        });\n      }\n\n      setNebulaLayers(layers);\n    }, [\n      nebulaType,\n      layerCount,\n      density,\n      temperature,\n      width,\n      height,\n      colorIntensity,\n      turbulenceLevel,\n    ]);\n\n    // Generate star clusters\n    const generateStarClusters = useCallback(() => {\n      if (!showStarClusters) return;\n\n      const clusters: StarCluster[] = [];\n      const clusterCount = Math.floor(3 + Math.random() * 4);\n\n      for (let i = 0; i < clusterCount; i++) {\n        const clusterX = Math.random() * width;\n        const clusterY = Math.random() * height;\n        const clusterDensity = Math.random() * 0.8 + 0.2;\n        const clusterAge = Math.random() * 100; // million years\n\n        const stars = [];\n        const starCount = Math.floor(clusterDensity * 20 + 10);\n\n        for (let j = 0; j < starCount; j++) {\n          const angle = Math.random() * Math.PI * 2;\n          const distance = Math.random() * 80;\n          const spectralClass = ([\"O\", \"B\", \"A\", \"F\", \"G\", \"K\", \"M\"] as const)[\n            Math.floor(Math.random() * 7)\n          ];\n\n          // Star colors based on spectral class\n          const starColors = {\n            O: [150, 180, 255], // Blue\n            B: [180, 200, 255], // Blue-white\n            A: [220, 230, 255], // White\n            F: [255, 245, 240], // Yellow-white\n            G: [255, 255, 200], // Yellow (like Sun)\n            K: [255, 200, 150], // Orange\n            M: [255, 150, 100], // Red\n          };\n\n          stars.push({\n            x: Math.cos(angle) * distance,\n            y: Math.sin(angle) * distance,\n            brightness: Math.random() * 0.8 + 0.2,\n            color: starColors[spectralClass] as [number, number, number],\n            size:\n              spectralClass === \"O\" || spectralClass === \"B\"\n                ? 3\n                : spectralClass === \"M\"\n                  ? 1\n                  : 2,\n            twinklePhase: Math.random() * Math.PI * 2,\n            spectralClass,\n          });\n        }\n\n        clusters.push({\n          x: clusterX,\n          y: clusterY,\n          stars,\n          density: clusterDensity,\n          age: clusterAge,\n          id: `cluster-${i}`,\n        });\n      }\n\n      setStarClusters(clusters);\n    }, [showStarClusters, width, height]);\n\n    // Generate cosmic dust\n    const generateCosmicDust = useCallback(() => {\n      if (!showCosmicDust) return;\n\n      const dustClouds: CosmicDust[] = [];\n      const dustCloudCount = Math.floor(2 + Math.random() * 3);\n\n      for (let i = 0; i < dustCloudCount; i++) {\n        const particles = [];\n        const particleCount = Math.floor(density * 100 + 50);\n        const composition = ([\"silicate\", \"carbon\", \"ice\", \"organic\"] as const)[\n          Math.floor(Math.random() * 4)\n        ];\n\n        const dustColors = {\n          silicate: [150, 120, 80],\n          carbon: [80, 60, 40],\n          ice: [200, 220, 255],\n          organic: [120, 100, 60],\n        };\n\n        for (let j = 0; j < particleCount; j++) {\n          particles.push({\n            x: Math.random() * width,\n            y: Math.random() * height,\n            vx: (Math.random() - 0.5) * stellarWindStrength,\n            vy: (Math.random() - 0.5) * stellarWindStrength,\n            size: Math.random() * 2 + 0.5,\n            opacity: Math.random() * 0.3 + 0.1,\n            color: dustColors[composition] as [number, number, number],\n            temperature: 50 + Math.random() * 200,\n            lifetime: Math.random() * 10000 + 5000,\n          });\n        }\n\n        dustClouds.push({\n          particles,\n          density: density * (0.5 + Math.random() * 0.5),\n          composition,\n          id: `dust-cloud-${i}`,\n        });\n      }\n\n      setCosmicDust(dustClouds);\n    }, [showCosmicDust, density, width, height, stellarWindStrength]);\n\n    // Initialize nebula\n    useEffect(() => {\n      generateNebulaLayers();\n      generateStarClusters();\n      generateCosmicDust();\n    }, [generateNebulaLayers, generateStarClusters, generateCosmicDust]);\n\n    // Update nebula layers\n    const updateNebulaLayers = useCallback(\n      (deltaTime: number) => {\n        setNebulaLayers((prevLayers) =>\n          prevLayers.map((layer: any) => ({\n            ...layer,\n            rotation:\n              layer.rotation +\n              layer.rotationSpeed * deltaTime * animationSpeed * timeScale,\n            points: layer.points.map((point: any) => ({\n              ...point,\n              x:\n                point.x +\n                Math.sin(animationTime * 0.0001 + point.y * 0.01) *\n                  layer.turbulence *\n                  0.1,\n              y:\n                point.y +\n                Math.cos(animationTime * 0.0001 + point.x * 0.01) *\n                  layer.turbulence *\n                  0.1,\n              density: Math.max(\n                0.1,\n                point.density +\n                  (Math.random() - 0.5) * 0.05 * stellarWindStrength\n              ),\n            })),\n          }))\n        );\n      },\n      [animationSpeed, timeScale, animationTime, stellarWindStrength]\n    );\n\n    // Update cosmic dust\n    const updateCosmicDust = useCallback(\n      (deltaTime: number) => {\n        setCosmicDust((prevDust) =>\n          prevDust.map((dustCloud: any) => ({\n            ...dustCloud,\n            particles: dustCloud.particles\n              .map((particle: any) => ({\n                ...particle,\n                x: particle.x + particle.vx * deltaTime * animationSpeed,\n                y: particle.y + particle.vy * deltaTime * animationSpeed,\n                lifetime: particle.lifetime - deltaTime,\n                opacity: Math.max(0, particle.opacity - deltaTime * 0.00005),\n              }))\n              .filter(\n                (particle: any) =>\n                  particle.lifetime > 0 &&\n                  particle.x > -50 &&\n                  particle.x < width + 50 &&\n                  particle.y > -50 &&\n                  particle.y < height + 50\n              ),\n          }))\n        );\n      },\n      [animationSpeed, width, height]\n    );\n\n    // Nebula evolution simulation\n    useEffect(() => {\n      const evolutionInterval = setInterval(() => {\n        setNebulaAge((prev: any) => {\n          const newAge = prev + timeScale * 0.1;\n\n          // Determine evolution phase\n          if (newAge < 10) {\n            setEvolutionPhase(\"formation\");\n          } else if (newAge < 50) {\n            setEvolutionPhase(\"mature\");\n          } else {\n            setEvolutionPhase(\"dispersing\");\n          }\n\n          onNebulaEvolution?.(newAge, evolutionPhase);\n\n          // Occasionally trigger star formation\n          if (Math.random() < 0.05 * timeScale) {\n            const location = {\n              x: Math.random() * width,\n              y: Math.random() * height,\n            };\n            onStarFormation?.(location);\n            play(\"success\");\n          }\n\n          return newAge;\n        });\n      }, 5000);\n\n      return () => clearInterval(evolutionInterval);\n    }, [\n      timeScale,\n      evolutionPhase,\n      onNebulaEvolution,\n      onStarFormation,\n      width,\n      height,\n      play,\n    ]);\n\n    // Render nebula\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas with deep space background\n      const spaceGradient = ctx.createRadialGradient(\n        width / 2,\n        height / 2,\n        0,\n        width / 2,\n        height / 2,\n        Math.max(width, height) / 2\n      );\n      spaceGradient.addColorStop(0, \"rgb(5, 5, 15)\");\n      spaceGradient.addColorStop(1, \"rgb(0, 0, 5)\");\n\n      ctx.fillStyle = spaceGradient;\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw background stars\n      ctx.fillStyle = \"white\";\n      for (let i = 0; i < 100; i++) {\n        const x = Math.random() * width;\n        const y = Math.random() * height;\n        const brightness = Math.random();\n        ctx.globalAlpha = brightness * 0.5;\n        ctx.beginPath();\n        ctx.arc(x, y, brightness, 0, Math.PI * 2);\n        ctx.fill();\n      }\n\n      // Draw cosmic dust\n      cosmicDust.forEach((dustCloud: any) => {\n        dustCloud.particles.forEach((particle: any) => {\n          if (particle.opacity < 0.01) return;\n\n          ctx.globalAlpha = particle.opacity;\n          ctx.fillStyle = `rgb(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]})`;\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);\n          ctx.fill();\n        });\n      });\n\n      // Draw nebula layers\n      ctx.globalAlpha = 1;\n      nebulaLayers.forEach((layer, layerIndex) => {\n        ctx.save();\n        ctx.translate(width / 2, height / 2);\n        ctx.rotate(layer.rotation);\n        ctx.scale(layer.scale, layer.scale);\n        ctx.translate(-width / 2, -height / 2);\n\n        // Create nebula texture\n        layer.points.forEach((point: any) => {\n          const adjustedDensity = point.density * density;\n          if (adjustedDensity < 0.1) return;\n\n          const size = Math.max(10, (adjustedDensity * 30) / cameraDistance);\n          const tempColor =\n            ionizationLevel > 0.5\n              ? layer.color\n              : getTemperatureColor(point.temperature);\n\n          const gradient = ctx.createRadialGradient(\n            point.x,\n            point.y,\n            0,\n            point.x,\n            point.y,\n            size\n          );\n\n          gradient.addColorStop(\n            0,\n            `rgba(${tempColor[0]}, ${tempColor[1]}, ${tempColor[2]}, ${layer.opacity * adjustedDensity})`\n          );\n          gradient.addColorStop(\n            0.5,\n            `rgba(${tempColor[0]}, ${tempColor[1]}, ${tempColor[2]}, ${layer.opacity * adjustedDensity * 0.5})`\n          );\n          gradient.addColorStop(\n            1,\n            `rgba(${tempColor[0]}, ${tempColor[1]}, ${tempColor[2]}, 0)`\n          );\n\n          ctx.fillStyle = gradient;\n          ctx.beginPath();\n          ctx.arc(point.x, point.y, size, 0, Math.PI * 2);\n          ctx.fill();\n        });\n\n        // Draw emission lines\n        if (showEmissionLines && nebulaConfigs[nebulaType].ionizedGas) {\n          ctx.globalAlpha = ionizationLevel * 0.3;\n          ctx.strokeStyle = `rgb(${layer.color[0]}, ${layer.color[1]}, ${layer.color[2]})`;\n          ctx.lineWidth = 1;\n\n          for (let i = 0; i < layer.points.length - 1; i += 10) {\n            const p1 = layer.points[i];\n            const p2 = layer.points[i + 1];\n            if (!p1 || !p2) continue;\n\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n          }\n        }\n\n        ctx.restore();\n      });\n\n      // Draw magnetic field lines\n      if (showMagneticField) {\n        ctx.strokeStyle = \"rgba(100, 255, 255, 0.2)\";\n        ctx.lineWidth = 1;\n        ctx.globalAlpha = 0.3;\n\n        for (let x = 0; x < width; x += 100) {\n          for (let y = 0; y < height; y += 100) {\n            const fieldStrength = Math.sin(x * 0.01) * Math.cos(y * 0.01);\n            if (Math.abs(fieldStrength) > 0.3) {\n              ctx.beginPath();\n              ctx.moveTo(x, y);\n              ctx.bezierCurveTo(\n                x + 50,\n                y + fieldStrength * 30,\n                x + 80,\n                y + fieldStrength * 20,\n                x + 100,\n                y\n              );\n              ctx.stroke();\n            }\n          }\n        }\n      }\n\n      // Draw star clusters\n      starClusters.forEach((cluster: any) => {\n        cluster.stars.forEach((star: any) => {\n          const twinkle =\n            Math.sin(animationTime * 0.005 + star.twinklePhase) * 0.3 + 0.7;\n          ctx.globalAlpha = star.brightness * twinkle;\n\n          // Create star glow\n          const starGradient = ctx.createRadialGradient(\n            cluster.x + star.x,\n            cluster.y + star.y,\n            0,\n            cluster.x + star.x,\n            cluster.y + star.y,\n            star.size * 3\n          );\n          starGradient.addColorStop(\n            0,\n            `rgb(${star.color[0]}, ${star.color[1]}, ${star.color[2]})`\n          );\n          starGradient.addColorStop(\n            0.3,\n            `rgba(${star.color[0]}, ${star.color[1]}, ${star.color[2]}, 0.8)`\n          );\n          starGradient.addColorStop(\n            1,\n            `rgba(${star.color[0]}, ${star.color[1]}, ${star.color[2]}, 0)`\n          );\n\n          ctx.fillStyle = starGradient;\n          ctx.beginPath();\n          ctx.arc(\n            cluster.x + star.x,\n            cluster.y + star.y,\n            star.size * 3,\n            0,\n            Math.PI * 2\n          );\n          ctx.fill();\n\n          // Draw star core\n          ctx.fillStyle = `rgb(${star.color[0]}, ${star.color[1]}, ${star.color[2]})`;\n          ctx.beginPath();\n          ctx.arc(\n            cluster.x + star.x,\n            cluster.y + star.y,\n            star.size,\n            0,\n            Math.PI * 2\n          );\n          ctx.fill();\n        });\n      });\n\n      // Nebula info overlay\n      if (showNebulaInfo) {\n        ctx.save();\n        ctx.fillStyle = \"var(--glass-text-secondary-dark)\";\n        ctx.fillRect(10, 10, 250, 160);\n\n        ctx.fillStyle = \"white\";\n        ctx.font = \"14px sans-serif\";\n        ctx.fillText(`Nebula Type: ${nebulaType}`, 20, 30);\n        ctx.fillText(`Age: ${nebulaAge.toFixed(1)} million years`, 20, 50);\n        ctx.fillText(`Phase: ${evolutionPhase}`, 20, 70);\n        ctx.fillText(`Temperature: ${temperature.toLocaleString()} K`, 20, 90);\n        ctx.fillText(`Density: ${Math.round(density * 100)}%`, 20, 110);\n        ctx.fillText(\n          `Ionization: ${Math.round(ionizationLevel * 100)}%`,\n          20,\n          130\n        );\n        ctx.fillText(`Star Clusters: ${starClusters.length}`, 20, 150);\n        ctx.restore();\n      }\n    }, [\n      width,\n      height,\n      cosmicDust,\n      nebulaLayers,\n      density,\n      cameraDistance,\n      ionizationLevel,\n      getTemperatureColor,\n      showEmissionLines,\n      nebulaType,\n      showMagneticField,\n      animationTime,\n      starClusters,\n      showNebulaInfo,\n      nebulaAge,\n      evolutionPhase,\n      temperature,\n    ]);\n\n    // Animation loop\n    useEffect(() => {\n      if (prefersReducedMotion && respectMotionPreference) {\n        render();\n        return;\n      }\n\n      const animate = (currentTime: number) => {\n        const deltaTime = 16; // 60fps\n        setAnimationTime((prev: any) => prev + deltaTime);\n\n        updateNebulaLayers(deltaTime);\n        updateCosmicDust(deltaTime);\n        render();\n\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [\n      prefersReducedMotion,\n      respectMotionPreference,\n      render,\n      updateNebulaLayers,\n      updateCosmicDust,\n    ]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-nebula-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"nebula-type\" className=\"glass-text-sm\">\n              Type:\n            </label>\n            <select\n              id=\"nebula-type\"\n              value={nebulaType}\n              onChange={(e) => {}}\n              aria-label=\"Nebula type selection\"\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard glass-focus glass-touch-target\"\n            >\n              <option value=\"emission\">Emission</option>\n              <option value=\"reflection\">Reflection</option>\n              <option value=\"dark\">Dark</option>\n              <option value=\"planetary\">Planetary</option>\n              <option value=\"supernova\">Supernova</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"nebula-density\" className=\"glass-text-sm\">\n              Density:\n            </label>\n            <input\n              id=\"nebula-density\"\n              type=\"range\"\n              min=\"0.1\"\n              max=\"1\"\n              step=\"0.1\"\n              value={density}\n              onChange={(e) => {}}\n              aria-label=\"Nebula density\"\n              className='glass-w-20 glass-focus glass-touch-target glass-contrast-guard'\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"nebula-temperature\" className=\"glass-text-sm\">\n              Temperature:\n            </label>\n            <input\n              id=\"nebula-temperature\"\n              type=\"range\"\n              min=\"10\"\n              max=\"100000\"\n              step=\"1000\"\n              value={temperature}\n              onChange={(e) => {}}\n              aria-label=\"Nebula temperature in Kelvin\"\n              className='glass-w-20 glass-focus glass-touch-target glass-contrast-guard'\n            />\n            <span className=\"glass-text-xs\">\n              {(temperature / 1000).toFixed(1)}K K\n            </span>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"nebula-timescale\" className=\"glass-text-sm\">\n              Time Scale:\n            </label>\n            <input\n              id=\"nebula-timescale\"\n              type=\"range\"\n              min=\"0.1\"\n              max=\"10\"\n              step=\"0.1\"\n              value={timeScale}\n              onChange={(e) => {}}\n              aria-label=\"Time scale multiplier\"\n              className='glass-w-20 glass-focus glass-touch-target glass-contrast-guard'\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showStarClusters}\n                onChange={(e) => {}}\n                aria-label=\"Show star clusters\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Stars\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showCosmicDust}\n                onChange={(e) => {}}\n                aria-label=\"Show cosmic dust\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Dust\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showEmissionLines}\n                onChange={(e) => {}}\n                aria-label=\"Show emission lines\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Emission\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={showMagneticField}\n                onChange={(e) => {}}\n                aria-label=\"Show magnetic field\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Magnetic\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={nebulaCloudsId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-nebula-clouds relative glass-radius-lg glass-backdrop-blur border border-border/20\",\n          className\n        )}\n        data-testid={props[\"data-testid\"]}\n        role=\"region\"\n        aria-label=\"Nebula clouds visualization with controls\"\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className='glass-relative'>\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className=\"glass-border glass-border-glass-border/20 glass-radius-md glass-surface-dark glass-contrast-guard\"\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassNebulaClouds.displayName = \"GlassNebulaClouds\";\n\nexport default GlassNebulaClouds;\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface WeatherCondition {\n  type:\n    | \"clear\"\n    | \"cloudy\"\n    | \"rainy\"\n    | \"stormy\"\n    | \"snowy\"\n    | \"foggy\"\n    | \"windy\"\n    | \"sunny\";\n  intensity: number; // 0-1\n  temperature: number; // Celsius\n  humidity: number; // 0-1\n  pressure: number; // hPa\n  windSpeed: number; // km/h\n  windDirection: number; // degrees\n  visibility: number; // km\n  id: string;\n}\n\nexport interface WeatherParticle {\n  x: number;\n  y: number;\n  vx: number;\n  vy: number;\n  size: number;\n  opacity: number;\n  color: [number, number, number];\n  type: \"rain\" | \"snow\" | \"fog\" | \"dust\" | \"leaf\" | \"droplet\";\n  lifetime: number;\n  rotation: number;\n  rotationSpeed: number;\n  id: string;\n}\n\nexport interface AtmosphericEffect {\n  type: \"lightning\" | \"rainbow\" | \"aurora\" | \"halo\" | \"mist\" | \"heatwave\";\n  intensity: number;\n  duration: number;\n  position: { x: number; y: number };\n  color: [number, number, number];\n  id: string;\n}\n\nexport interface GlassWeatherGlassProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Current weather condition */\n  weather?: WeatherCondition;\n  /** Whether to auto-update weather */\n  autoUpdate?: boolean;\n  /** Update interval in milliseconds */\n  updateInterval?: number;\n  /** Particle count multiplier */\n  particleDensity?: number;\n  /** Whether to show atmospheric effects */\n  showAtmosphericEffects?: boolean;\n  /** Glass tint response to weather */\n  weatherResponsive?: boolean;\n  /** Temperature range for color mapping */\n  temperatureRange?: [number, number];\n  /** Whether to show weather info */\n  showWeatherInfo?: boolean;\n  /** Animation speed multiplier */\n  animationSpeed?: number;\n  /** Wind effect strength */\n  windStrength?: number;\n  /** Whether to show day/night cycle */\n  dayNightCycle?: boolean;\n  /** Current time of day (0-24) */\n  timeOfDay?: number;\n  /** Weather change handler */\n  onWeatherChange?: (weather: WeatherCondition) => void;\n  /** Atmospheric event handler */\n  onAtmosphericEvent?: (effect: AtmosphericEffect) => void;\n  /** Show controls */\n  showControls?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassWeatherGlass = forwardRef<\n  HTMLDivElement,\n  GlassWeatherGlassProps\n>(\n  (\n    {\n      width = 600,\n      height = 400,\n      weather = {\n        type: \"clear\",\n        intensity: 0.5,\n        temperature: 20,\n        humidity: 0.6,\n        pressure: 1013,\n        windSpeed: 10,\n        windDirection: 45,\n        visibility: 10,\n        id: \"default-weather\",\n      },\n      autoUpdate = false,\n      updateInterval = ANIMATION.DURATION.slower * 50,\n      particleDensity = 1,\n      showAtmosphericEffects = true,\n      weatherResponsive = true,\n      temperatureRange = [-20, 40],\n      showWeatherInfo = true,\n      animationSpeed = 1,\n      windStrength = 1,\n      dayNightCycle = true,\n      timeOfDay = 12,\n      onWeatherChange,\n      onAtmosphericEvent,\n      showControls = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const weatherGlassId = useA11yId(\"glass-weather-glass\");\n\n    const [currentWeather, setCurrentWeather] =\n      useState<WeatherCondition>(weather);\n    const [particles, setParticles] = useState<WeatherParticle[]>([]);\n    const [atmosphericEffects, setAtmosphericEffects] = useState<\n      AtmosphericEffect[]\n    >([]);\n    const [animationTime, setAnimationTime] = useState(0);\n    const [currentTimeOfDay, setCurrentTimeOfDay] = useState(timeOfDay);\n    const [glassColor, setGlassColor] = useState<[number, number, number]>([\n      255, 255, 255,\n    ]);\n    const [backgroundGradient, setBackgroundGradient] = useState<string[]>([\n      \"rgba(14, 165, 233, 0.78)\",\n      \"rgba(59, 130, 246, 0.52)\",\n    ]);\n\n    // Weather color mappings\n    const weatherColors: Record<\n      string,\n      { sky: [string, string]; glass: [number, number, number] }\n    > = {\n      clear: {\n        sky: [\"rgba(14, 165, 233, 0.78)\", \"rgba(59, 130, 246, 0.52)\"],\n        glass: [255, 255, 255],\n      },\n      sunny: {\n        sky: [\"rgba(251, 191, 36, 0.82)\", \"rgba(249, 115, 22, 0.5)\"],\n        glass: [255, 248, 220],\n      },\n      cloudy: {\n        sky: [\"rgba(107, 114, 128, 0.72)\", \"rgba(156, 163, 175, 0.58)\"],\n        glass: [211, 211, 211],\n      },\n      rainy: {\n        sky: [\"rgba(14, 165, 233, 0.66)\", \"rgba(75, 85, 99, 0.64)\"],\n        glass: [70, 130, 180],\n      },\n      stormy: {\n        sky: [\"rgba(31, 41, 55, 0.88)\", \"rgba(168, 85, 247, 0.42)\"],\n        glass: [47, 79, 79],\n      },\n      snowy: {\n        sky: [\"rgba(255, 255, 255, 0.9)\", \"rgba(226, 232, 240, 0.72)\"],\n        glass: [240, 248, 255],\n      },\n      foggy: {\n        sky: [\"rgba(156, 163, 175, 0.68)\", \"rgba(229, 231, 235, 0.58)\"],\n        glass: [192, 192, 192],\n      },\n      windy: {\n        sky: [\"rgba(14, 165, 233, 0.62)\", \"rgba(168, 85, 247, 0.44)\"],\n        glass: [176, 196, 222],\n      },\n    };\n\n    // Temperature to color mapping\n    const getTemperatureColor = useCallback(\n      (temp: number): [number, number, number] => {\n        const [minTemp, maxTemp] = temperatureRange;\n        const normalized = Math.max(\n          0,\n          Math.min(1, (temp - minTemp) / (maxTemp - minTemp))\n        );\n\n        if (normalized < 0.5) {\n          // Cold: blue to white\n          const factor = normalized * 2;\n          return [\n            Math.round(135 + (255 - 135) * factor), // Blue to white R\n            Math.round(206 + (255 - 206) * factor), // Blue to white G\n            255, // Full blue\n          ];\n        } else {\n          // Hot: white to red\n          const factor = (normalized - 0.5) * 2;\n          return [\n            255, // Full red\n            Math.round(255 - 100 * factor), // White to red G\n            Math.round(255 - 255 * factor), // White to red B\n          ];\n        }\n      },\n      [temperatureRange]\n    );\n\n    // Update weather responsiveness\n    useEffect(() => {\n      if (!weatherResponsive) return;\n\n      const colors = weatherColors[currentWeather.type];\n      const nextBg = colors.sky;\n      if (\n        backgroundGradient[0] !== nextBg[0] ||\n        backgroundGradient[1] !== nextBg[1]\n      ) {\n        setBackgroundGradient(nextBg);\n      }\n\n      const nextGlass =\n        currentWeather.type === \"clear\" || currentWeather.type === \"sunny\"\n          ? getTemperatureColor(currentWeather.temperature)\n          : colors.glass;\n      if (\n        glassColor[0] !== nextGlass[0] ||\n        glassColor[1] !== nextGlass[1] ||\n        glassColor[2] !== nextGlass[2]\n      ) {\n        setGlassColor(nextGlass);\n      }\n    }, [\n      currentWeather,\n      weatherResponsive,\n      getTemperatureColor,\n      backgroundGradient,\n      glassColor,\n    ]);\n\n    // Day/night cycle\n    useEffect(() => {\n      if (!dayNightCycle) return;\n\n      const isDaytime = currentTimeOfDay >= 6 && currentTimeOfDay <= 18;\n      const cycleProgress = isDaytime\n        ? (currentTimeOfDay - 6) / 12\n        : currentTimeOfDay < 6\n          ? (currentTimeOfDay + 6) / 12\n          : (currentTimeOfDay - 18) / 12;\n\n      // Adjust colors based on time of day\n      if (!isDaytime) {\n        setBackgroundGradient([\"#191970\", \"#483D8B\"]); // Night colors\n        setGlassColor([25, 25, 112]); // Midnight blue\n      }\n    }, [currentTimeOfDay, dayNightCycle]);\n\n    // Generate weather particles\n    const generateParticles = useCallback(\n      (weatherType: string, intensity: number) => {\n        const particleCount = Math.floor(intensity * 100 * particleDensity);\n        const newParticles: WeatherParticle[] = [];\n\n        for (let i = 0; i < particleCount; i++) {\n          let particle: Partial<WeatherParticle> = {\n            x: Math.random() * width,\n            y: -10,\n            size: Math.random() * 3 + 1,\n            opacity: Math.random() * 0.8 + 0.2,\n            lifetime: Math.random() * 5000 + 2000,\n            rotation: 0,\n            rotationSpeed: (Math.random() - 0.5) * 2,\n            id: `particle-${weatherType}-${i}-${Date.now()}`,\n          };\n\n          switch (weatherType) {\n            case \"rainy\":\n              particle = {\n                ...particle,\n                type: \"rain\",\n                vx: (Math.random() - 0.5) * currentWeather.windSpeed * 0.1,\n                vy: Math.random() * 5 + 3,\n                color: [100, 149, 237],\n                size: Math.random() * 2 + 0.5,\n              };\n              break;\n\n            case \"snowy\":\n              particle = {\n                ...particle,\n                type: \"snow\",\n                vx: (Math.random() - 0.5) * currentWeather.windSpeed * 0.05,\n                vy: Math.random() * 2 + 0.5,\n                color: [255, 255, 255],\n                size: Math.random() * 4 + 2,\n                rotationSpeed: (Math.random() - 0.5) * 1,\n              };\n              break;\n\n            case \"foggy\":\n              particle = {\n                ...particle,\n                type: \"fog\",\n                x: Math.random() * width,\n                y: Math.random() * height,\n                vx: (Math.random() - 0.5) * 0.5,\n                vy: (Math.random() - 0.5) * 0.2,\n                color: [220, 220, 220],\n                size: Math.random() * 20 + 10,\n                opacity: Math.random() * 0.3 + 0.1,\n              };\n              break;\n\n            case \"windy\":\n              particle = {\n                ...particle,\n                type: \"leaf\",\n                vx: (Math.random() - 0.5) * currentWeather.windSpeed * 0.2,\n                vy: Math.random() * 3 + 1,\n                color: [34, 139, 34],\n                size: Math.random() * 3 + 1,\n                rotationSpeed: (Math.random() - 0.5) * 5,\n              };\n              break;\n\n            default:\n              if (currentWeather.humidity > 0.8) {\n                particle = {\n                  ...particle,\n                  type: \"droplet\",\n                  vx: (Math.random() - 0.5) * 0.5,\n                  vy: Math.random() * 1 + 0.2,\n                  color: [173, 216, 230],\n                  size: Math.random() * 1.5 + 0.5,\n                  opacity: Math.random() * 0.5 + 0.1,\n                };\n              }\n              break;\n          }\n\n          if (particle.type) {\n            newParticles.push(particle as WeatherParticle);\n          }\n        }\n\n        return newParticles;\n      },\n      [\n        width,\n        currentWeather.windSpeed,\n        currentWeather.humidity,\n        particleDensity,\n      ]\n    );\n\n    // Generate atmospheric effects\n    const generateAtmosphericEffects = useCallback(() => {\n      if (!showAtmosphericEffects) return [];\n\n      const effects: AtmosphericEffect[] = [];\n\n      // Lightning for stormy weather\n      if (currentWeather.type === \"stormy\" && Math.random() < 0.02) {\n        effects.push({\n          type: \"lightning\",\n          intensity: Math.random() * 0.8 + 0.2,\n          duration: 200 + Math.random() * 300,\n          position: {\n            x: Math.random() * width,\n            y: Math.random() * height * 0.3,\n          },\n          color: [255, 255, 255],\n          id: `lightning-${Date.now()}`,\n        });\n      }\n\n      // Rainbow after rain\n      if (\n        currentWeather.type === \"rainy\" &&\n        currentWeather.intensity < 0.3 &&\n        Math.random() < 0.01\n      ) {\n        effects.push({\n          type: \"rainbow\",\n          intensity: Math.random() * 0.6 + 0.4,\n          duration: 5000 + Math.random() * 5000,\n          position: { x: width * 0.8, y: height * 0.3 },\n          color: [255, 255, 255],\n          id: `rainbow-${Date.now()}`,\n        });\n      }\n\n      // Mist for high humidity\n      if (currentWeather.humidity > 0.8 && Math.random() < 0.1) {\n        effects.push({\n          type: \"mist\",\n          intensity: currentWeather.humidity,\n          duration: 3000 + Math.random() * 2000,\n          position: { x: Math.random() * width, y: height * 0.8 },\n          color: [230, 230, 250],\n          id: `mist-${Date.now()}`,\n        });\n      }\n\n      return effects;\n    }, [showAtmosphericEffects, currentWeather, width, height]);\n\n    // Update particles\n    const updateParticles = useCallback(\n      (deltaTime: number) => {\n        setParticles((prevParticles) => {\n          const updated = prevParticles\n            .map((particle: any) => {\n              const windInfluence =\n                currentWeather.windSpeed * windStrength * 0.01;\n              const windX =\n                Math.cos((currentWeather.windDirection * Math.PI) / 180) *\n                windInfluence;\n              const windY =\n                Math.sin((currentWeather.windDirection * Math.PI) / 180) *\n                windInfluence;\n\n              return {\n                ...particle,\n                x:\n                  particle.x +\n                  (particle.vx + windX) * deltaTime * animationSpeed,\n                y:\n                  particle.y +\n                  (particle.vy + windY) * deltaTime * animationSpeed,\n                rotation:\n                  particle.rotation +\n                  particle.rotationSpeed * deltaTime * animationSpeed,\n                lifetime: particle.lifetime - deltaTime,\n              };\n            })\n            .filter(\n              (particle: any) =>\n                particle.lifetime > 0 &&\n                particle.x > -50 &&\n                particle.x < width + 50 &&\n                particle.y > -50 &&\n                particle.y < height + 50\n            );\n\n          // Add new particles\n          const newParticles = generateParticles(\n            currentWeather.type,\n            currentWeather.intensity\n          );\n          return [\n            ...updated,\n            ...newParticles.slice(0, Math.max(0, 200 - updated.length)),\n          ];\n        });\n      },\n      [\n        currentWeather,\n        windStrength,\n        animationSpeed,\n        width,\n        height,\n        generateParticles,\n      ]\n    );\n\n    // Update atmospheric effects\n    const updateAtmosphericEffects = useCallback(\n      (deltaTime: number) => {\n        setAtmosphericEffects((prevEffects) => {\n          const updated = prevEffects\n            .map((effect: any) => ({\n              ...effect,\n              duration: effect.duration - deltaTime,\n            }))\n            .filter((effect: any) => effect.duration > 0);\n\n          // Add new effects\n          const newEffects = generateAtmosphericEffects();\n          return [...updated, ...newEffects];\n        });\n      },\n      [generateAtmosphericEffects]\n    );\n\n    // Render weather\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas with gradient background\n      const gradient = ctx.createLinearGradient(0, 0, 0, height);\n      gradient.addColorStop(0, backgroundGradient[0]);\n      gradient.addColorStop(1, backgroundGradient[1]);\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw atmospheric effects\n      atmosphericEffects.forEach((effect: any) => {\n        ctx.save();\n        ctx.globalAlpha = effect.intensity * (effect.duration / 5000);\n\n        switch (effect.type) {\n          case \"lightning\":\n            ctx.strokeStyle = `rgb(${effect.color[0]}, ${effect.color[1]}, ${effect.color[2]})`;\n            ctx.lineWidth = 3;\n            ctx.shadowBlur = 10;\n            ctx.shadowColor = \"white\";\n\n            // Draw lightning bolt\n            ctx.beginPath();\n            ctx.moveTo(effect.position.x, 0);\n            ctx.lineTo(\n              effect.position.x + Math.random() * 20 - 10,\n              height * 0.3\n            );\n            ctx.lineTo(\n              effect.position.x + Math.random() * 30 - 15,\n              height * 0.6\n            );\n            ctx.lineTo(effect.position.x + Math.random() * 20 - 10, height);\n            ctx.stroke();\n            break;\n\n          case \"rainbow\":\n            const centerX = effect.position.x;\n            const centerY = effect.position.y;\n            const rainbowRadius = 100;\n\n            const colors = [\n              \"#FF0000\",\n              \"#FF7F00\",\n              \"#FFFF00\",\n              \"#00FF00\",\n              \"#0000FF\",\n              \"#4B0082\",\n              \"#9400D3\",\n            ];\n            colors.forEach((color, i) => {\n              ctx.strokeStyle = color;\n              ctx.lineWidth = 8;\n              ctx.beginPath();\n              ctx.arc(\n                centerX,\n                centerY,\n                rainbowRadius + i * 12,\n                0,\n                Math.PI,\n                false\n              );\n              ctx.stroke();\n            });\n            break;\n\n          case \"mist\":\n            const mistGradient = ctx.createRadialGradient(\n              effect.position.x,\n              effect.position.y,\n              0,\n              effect.position.x,\n              effect.position.y,\n              100\n            );\n            mistGradient.addColorStop(\n              0,\n              `rgba(${effect.color[0]}, ${effect.color[1]}, ${effect.color[2]}, ${effect.intensity})`\n            );\n            mistGradient.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n\n            ctx.fillStyle = mistGradient;\n            ctx.fillRect(0, 0, width, height);\n            break;\n        }\n\n        ctx.restore();\n      });\n\n      // Draw particles\n      particles.forEach((particle: any) => {\n        ctx.save();\n        ctx.globalAlpha = particle.opacity;\n        ctx.translate(particle.x, particle.y);\n        ctx.rotate(particle.rotation);\n\n        const color = `rgb(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]})`;\n\n        switch (particle.type) {\n          case \"rain\":\n            ctx.strokeStyle = color;\n            ctx.lineWidth = particle.size;\n            ctx.beginPath();\n            ctx.moveTo(0, -particle.size);\n            ctx.lineTo(0, particle.size);\n            ctx.stroke();\n            break;\n\n          case \"snow\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n\n            // Add snowflake pattern\n            ctx.strokeStyle = color;\n            ctx.lineWidth = 0.5;\n            for (let i = 0; i < 6; i++) {\n              ctx.beginPath();\n              ctx.moveTo(0, 0);\n              ctx.lineTo(0, -particle.size);\n              ctx.stroke();\n              ctx.rotate(Math.PI / 3);\n            }\n            break;\n\n          case \"fog\":\n            const fogGradient = ctx.createRadialGradient(\n              0,\n              0,\n              0,\n              0,\n              0,\n              particle.size\n            );\n            fogGradient.addColorStop(\n              0,\n              `rgba(${particle.color[0]}, ${particle.color[1]}, ${particle.color[2]}, ${particle.opacity})`\n            );\n            fogGradient.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n\n            ctx.fillStyle = fogGradient;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n\n          case \"leaf\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.ellipse(\n              0,\n              0,\n              particle.size,\n              particle.size * 0.6,\n              0,\n              0,\n              Math.PI * 2\n            );\n            ctx.fill();\n            break;\n\n          case \"droplet\":\n            ctx.fillStyle = color;\n            ctx.beginPath();\n            ctx.arc(0, 0, particle.size, 0, Math.PI * 2);\n            ctx.fill();\n            break;\n        }\n\n        ctx.restore();\n      });\n\n      // Glass tint overlay\n      if (weatherResponsive) {\n        ctx.save();\n        ctx.globalAlpha = 0.1;\n        ctx.fillStyle = `rgb(${glassColor[0]}, ${glassColor[1]}, ${glassColor[2]})`;\n        ctx.fillRect(0, 0, width, height);\n        ctx.restore();\n      }\n\n      // Weather info overlay\n      if (showWeatherInfo) {\n        ctx.save();\n        ctx.fillStyle = \"rgba(15, 23, 42, 0.72)\";\n        ctx.fillRect(10, 10, 200, 120);\n\n        ctx.fillStyle = \"white\";\n        ctx.font = \"14px sans-serif\";\n        ctx.fillText(`Weather: ${currentWeather.type}`, 20, 30);\n        ctx.fillText(`Temperature: ${currentWeather.temperature}\u00B0C`, 20, 50);\n        ctx.fillText(\n          `Humidity: ${Math.round(currentWeather.humidity * 100)}%`,\n          20,\n          70\n        );\n        ctx.fillText(\n          `Wind: ${Math.round(currentWeather.windSpeed)} km/h`,\n          20,\n          90\n        );\n        ctx.fillText(`Pressure: ${currentWeather.pressure} hPa`, 20, 110);\n        ctx.restore();\n      }\n    }, [\n      width,\n      height,\n      backgroundGradient,\n      atmosphericEffects,\n      particles,\n      weatherResponsive,\n      glassColor,\n      showWeatherInfo,\n      currentWeather,\n    ]);\n\n    // Keep latest callbacks in refs to avoid effect restarts each render\n    const renderRef = useRef(render);\n    const updateParticlesRef = useRef(updateParticles);\n    const updateAtmosphericEffectsRef = useRef(updateAtmosphericEffects);\n\n    useEffect(() => {\n      renderRef.current = render;\n    }, [render]);\n    useEffect(() => {\n      updateParticlesRef.current = updateParticles;\n    }, [updateParticles]);\n    useEffect(() => {\n      updateAtmosphericEffectsRef.current = updateAtmosphericEffects;\n    }, [updateAtmosphericEffects]);\n\n    // Animation loop\n    useEffect(() => {\n      if (prefersReducedMotion && respectMotionPreference) {\n        renderRef.current();\n        return;\n      }\n\n      const animate = () => {\n        const deltaTime = 16; // 60fps\n        setAnimationTime((prev: any) => prev + deltaTime);\n\n        updateParticlesRef.current(deltaTime);\n        updateAtmosphericEffectsRef.current(deltaTime);\n        renderRef.current();\n\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [prefersReducedMotion, respectMotionPreference]);\n\n    // Auto weather updates\n    useEffect(() => {\n      if (!autoUpdate) return;\n\n      const interval = setInterval(() => {\n        // Simulate weather changes\n        const newWeather: WeatherCondition = {\n          ...currentWeather,\n          type: [\"clear\", \"cloudy\", \"rainy\", \"sunny\"][\n            Math.floor(Math.random() * 4)\n          ] as any,\n          intensity: Math.random(),\n          temperature: currentWeather.temperature + (Math.random() - 0.5) * 10,\n          humidity: Math.random(),\n          pressure: 1000 + Math.random() * 50,\n          windSpeed: Math.random() * 30,\n          windDirection: Math.random() * 360,\n          id: `weather-${Date.now()}`,\n        };\n\n        setCurrentWeather(newWeather);\n        onWeatherChange?.(newWeather);\n      }, updateInterval);\n\n      return () => clearInterval(interval);\n    }, [autoUpdate, updateInterval, currentWeather, onWeatherChange]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-weather-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"weather-type\" className=\"glass-text-sm\">\n              Weather:\n            </label>\n            <select\n              id=\"weather-type\"\n              value={currentWeather.type}\n              onChange={(e) => {\n                const newWeather = {\n                  ...currentWeather,\n                  type: e.target.value as any,\n                };\n                setCurrentWeather(newWeather);\n                onWeatherChange?.(newWeather);\n              }}\n              aria-label=\"Weather type selection\"\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20 glass-contrast-guard glass-focus glass-touch-target\"\n            >\n              <option value=\"clear\">Clear</option>\n              <option value=\"sunny\">Sunny</option>\n              <option value=\"cloudy\">Cloudy</option>\n              <option value=\"rainy\">Rainy</option>\n              <option value=\"stormy\">Stormy</option>\n              <option value=\"snowy\">Snowy</option>\n              <option value=\"foggy\">Foggy</option>\n              <option value=\"windy\">Windy</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"weather-intensity\" className=\"glass-text-sm\">\n              Intensity:\n            </label>\n            <input\n              id=\"weather-intensity\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={currentWeather.intensity}\n              onChange={(e) => {\n                const newWeather = {\n                  ...currentWeather,\n                  intensity: parseFloat(e.target.value),\n                };\n                setCurrentWeather(newWeather);\n              }}\n              aria-label=\"Weather intensity\"\n              className=\"glass-w-20 glass-focus glass-touch-target glass-contrast-guard\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"weather-temp\" className=\"glass-text-sm\">\n              Temp:\n            </label>\n            <input\n              id=\"weather-temp\"\n              type=\"range\"\n              min=\"-20\"\n              max=\"40\"\n              value={currentWeather.temperature}\n              onChange={(e) => {\n                const newWeather = {\n                  ...currentWeather,\n                  temperature: parseInt(e.target.value),\n                };\n                setCurrentWeather(newWeather);\n              }}\n              aria-label=\"Temperature in Celsius\"\n              className=\"glass-w-20 glass-focus glass-touch-target glass-contrast-guard\"\n            />\n            <span className=\"glass-text-sm glass-min-w-3ch\">\n              {currentWeather.temperature}\u00B0C\n            </span>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={autoUpdate}\n                onChange={(e) => {}}\n                aria-label=\"Enable auto update\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Auto Update\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                type=\"checkbox\"\n                checked={weatherResponsive}\n                onChange={(e) => {}}\n                aria-label=\"Enable weather responsive styling\"\n                className=\"glass-mr-1 glass-focus glass-touch-target glass-contrast-guard\"\n              />\n              Responsive\n            </label>\n          </div>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={weatherGlassId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-weather-glass relative glass-radius-lg glass-backdrop-blur border border-border/20\",\n          className\n        )}\n        data-testid={props[\"data-testid\"]}\n        role=\"region\"\n        aria-label=\"Weather visualization with controls\"\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className=\"glass-border glass-border-glass-border/20 glass-radius-md\"\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassWeatherGlass.displayName = \"GlassWeatherGlass\";\n\nexport default GlassWeatherGlass;\n", "\"use client\";\nimport React, { forwardRef, useState, useEffect, useCallback } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface MoodState {\n  name: string;\n  color: string;\n  intensity: number;\n  description: string;\n  icon?: React.ReactNode;\n}\n\nexport interface GlassMoodRingProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /** Current mood state */\n  mood?: MoodState;\n  /** Available mood states */\n  moodStates?: MoodState[];\n  /** Size of the mood ring */\n  size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n  /** Whether the ring is interactive */\n  interactive?: boolean;\n  /** Whether to show mood transitions */\n  animated?: boolean;\n  /** Transition duration in milliseconds */\n  transitionDuration?: number;\n  /** Whether to show mood labels */\n  showLabels?: boolean;\n  /** Whether to show mood description */\n  showDescription?: boolean;\n  /** Custom mood change handler */\n  onMoodChange?: (mood: MoodState) => void;\n  /** Auto-transition interval in milliseconds */\n  autoTransition?: number;\n  /** Run a package-owned cycling demo for documentation/catalog previews. */\n  autoDemo?: boolean;\n  /** Whether to enable biometric integration */\n  biometricIntegration?: boolean;\n  /** Ambient response to environmental factors */\n  ambientResponse?: boolean;\n  /** Ring thickness */\n  thickness?: \"thin\" | \"medium\" | \"thick\";\n  /** Glow effect intensity */\n  glowIntensity?: \"none\" | \"subtle\" | \"medium\" | \"strong\";\n  /** Pulse animation */\n  pulse?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nconst defaultMoodStates: MoodState[] = [\n  {\n    name: \"Happy\",\n    color: \"hsl(var(--glass-color-warning))\",\n    intensity: 0.8,\n    description: \"Feeling joyful and content\",\n  },\n  {\n    name: \"Calm\",\n    color: \"hsl(var(--glass-color-info))\",\n    intensity: 0.6,\n    description: \"Peaceful and relaxed\",\n  },\n  {\n    name: \"Energetic\",\n    color: \"hsl(var(--glass-color-danger))\",\n    intensity: 0.9,\n    description: \"Full of energy and excitement\",\n  },\n  {\n    name: \"Focused\",\n    color: \"var(--glass-color-secondary)\",\n    intensity: 0.7,\n    description: \"Concentrated and determined\",\n  },\n  {\n    name: \"Stressed\",\n    color: \"hsl(var(--glass-color-danger))\",\n    intensity: 0.8,\n    description: \"Feeling overwhelmed or tense\",\n  },\n  {\n    name: \"Creative\",\n    color: \"var(--glass-color-secondary)\",\n    intensity: 0.75,\n    description: \"In a creative and imaginative state\",\n  },\n  {\n    name: \"Melancholic\",\n    color: \"hsl(var(--glass-color-primary))\",\n    intensity: 0.5,\n    description: \"Reflective and somewhat sad\",\n  },\n  {\n    name: \"Excited\",\n    color: \"#32CD32\",\n    intensity: 0.85,\n    description: \"Thrilled and anticipatory\",\n  },\n  {\n    name: \"Anxious\",\n    color: \"#FF6347\",\n    intensity: 0.7,\n    description: \"Worried or apprehensive\",\n  },\n  {\n    name: \"Peaceful\",\n    color: \"#98FB98\",\n    intensity: 0.4,\n    description: \"Completely at ease and serene\",\n  },\n];\n\nexport const GlassMoodRing = forwardRef<HTMLDivElement, GlassMoodRingProps>(\n  (\n    {\n      mood,\n      moodStates = defaultMoodStates,\n      size = \"md\",\n      interactive = true,\n      animated = true,\n      transitionDuration = ANIMATION.DURATION.slower,\n      showLabels = true,\n      showDescription = false,\n      onMoodChange,\n      autoTransition,\n      autoDemo = false,\n      biometricIntegration = false,\n      ambientResponse = false,\n      thickness = \"medium\",\n      glowIntensity = \"medium\",\n      pulse = false,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion } = useMotionPreferenceContext();\n    const shouldAnimate = respectMotionPreference\n      ? !prefersReducedMotion\n      : true;\n    const { play } = useGlassSound();\n    const moodRingId = useA11yId(\"glass-mood-ring\");\n\n    const [currentMood, setCurrentMood] = useState<MoodState>(\n      mood || moodStates[0]\n    );\n    const [isTransitioning, setIsTransitioning] = useState(false);\n    const [autoTransitionActive, setAutoTransitionActive] = useState(autoDemo);\n\n    const sizeConfig = {\n      sm: {\n        ring: \"w-16 h-16\",\n        center: \"w-8 h-8\",\n        text: \"glass-text-xs\",\n        description: \"glass-text-xs\",\n        glow: \"shadow-lg\",\n      },\n      md: {\n        ring: \"w-24 h-24\",\n        center: \"w-12 h-12\",\n        text: \"glass-text-sm\",\n        description: \"glass-text-sm\",\n        glow: \"shadow-xl\",\n      },\n      lg: {\n        ring: \"w-32 h-32\",\n        center: \"w-16 h-16\",\n        text: \"glass-text-base\",\n        description: \"glass-text-base\",\n        glow: \"shadow-2xl\",\n      },\n      xl: {\n        ring: \"w-40 h-40\",\n        center: \"w-20 h-20\",\n        text: \"glass-text-lg\",\n        description: \"glass-text-lg\",\n        glow: \"shadow-2xl\",\n      },\n    };\n\n    const thicknessConfig = {\n      thin: \"border-2\",\n      medium: \"border-4\",\n      thick: \"border-8\",\n    };\n\n    const glowConfig = {\n      none: \"\",\n      subtle: \"shadow-sm\",\n      medium: \"shadow-lg shadow-current/30\",\n      strong: \"shadow-2xl shadow-current/50\",\n    };\n\n    const config = sizeConfig[size];\n\n    // Auto-transition effect\n    useEffect(() => {\n      const intervalMs = autoTransition ?? (autoDemo ? 900 : undefined);\n      if (!intervalMs || (!autoTransitionActive && !autoDemo) || !shouldAnimate)\n        return;\n\n      const interval = setInterval(() => {\n        const currentIndex = moodStates.findIndex(\n          (m) => m.name === currentMood.name\n        );\n        const nextIndex = (currentIndex + 1) % moodStates.length;\n        handleMoodChange(moodStates[nextIndex]);\n      }, intervalMs);\n\n      return () => clearInterval(interval);\n    }, [\n      autoTransition,\n      autoDemo,\n      autoTransitionActive,\n      currentMood,\n      moodStates,\n      shouldAnimate,\n    ]);\n\n    // Biometric integration simulation\n    useEffect(() => {\n      if (!biometricIntegration) return;\n\n      // Simulate biometric data affecting mood\n      const biometricInterval = setInterval(() => {\n        // This would normally connect to actual biometric sensors\n        const randomMood =\n          moodStates[Math.floor(Math.random() * moodStates.length)];\n        if (Math.random() > 0.8) {\n          // 20% chance to change\n          handleMoodChange(randomMood);\n        }\n      }, 10000);\n\n      return () => clearInterval(biometricInterval);\n    }, [biometricIntegration, moodStates]);\n\n    // Ambient response simulation\n    useEffect(() => {\n      if (!ambientResponse) return;\n\n      // Simulate environmental factors affecting mood\n      const ambientInterval = setInterval(() => {\n        const hour = new Date().getHours();\n        let ambientMood = currentMood;\n\n        // Simulate time of day effects\n        if (hour >= 6 && hour < 12) {\n          ambientMood =\n            moodStates.find((m) => m.name === \"Energetic\") || currentMood;\n        } else if (hour >= 12 && hour < 18) {\n          ambientMood =\n            moodStates.find((m) => m.name === \"Focused\") || currentMood;\n        } else if (hour >= 18 && hour < 22) {\n          ambientMood =\n            moodStates.find((m) => m.name === \"Calm\") || currentMood;\n        } else {\n          ambientMood =\n            moodStates.find((m) => m.name === \"Peaceful\") || currentMood;\n        }\n\n        if (ambientMood !== currentMood) {\n          handleMoodChange(ambientMood);\n        }\n      }, 60000); // Check every minute\n\n      return () => clearInterval(ambientInterval);\n    }, [ambientResponse, currentMood, moodStates]);\n\n    // Handle mood changes\n    const handleMoodChange = useCallback(\n      (newMood: MoodState) => {\n        if (newMood.name === currentMood.name) return;\n\n        setIsTransitioning(true);\n\n        setTimeout(\n          () => {\n            setCurrentMood(newMood);\n            setIsTransitioning(false);\n            onMoodChange?.(newMood);\n            play(\"mood_change\");\n          },\n          animated ? transitionDuration / 2 : 0\n        );\n      },\n      [currentMood, animated, transitionDuration, onMoodChange, play]\n    );\n\n    // Handle ring click\n    const handleRingClick = useCallback(() => {\n      if (!interactive) return;\n\n      const currentIndex = moodStates.findIndex(\n        (m) => m.name === currentMood.name\n      );\n      const nextIndex = (currentIndex + 1) % moodStates.length;\n      handleMoodChange(moodStates[nextIndex]);\n    }, [interactive, moodStates, currentMood, handleMoodChange]);\n\n    // Toggle auto-transition\n    const toggleAutoTransition = useCallback(() => {\n      setAutoTransitionActive(!autoTransitionActive);\n      play(\"toggle\");\n    }, [autoTransitionActive, play]);\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={moodRingId}\n        elevation=\"level2\"\n        intensity=\"medium\"\n        depth={2}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-mood-ring relative inline-flex flex-col items-center justify-center glass-p-6 glass-radius-lg\",\n          \"glass-backdrop-blur-md border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={shouldAnimate ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-items-center glass-gap-4\"\n        >\n          {/* Main Mood Ring */}\n          <div className=\"glass-relative\">\n            <Motion\n              as=\"div\"\n              preset={shouldAnimate ? \"scaleIn\" : \"none\"}\n              className={cn(\n                \"relative glass-radius-full border-solid transition-all duration-1000\",\n                config.ring,\n                thicknessConfig[thickness],\n                glowConfig[glowIntensity],\n                interactive && \"cursor-pointer glass-hover-scale-105\",\n                pulse && shouldAnimate && \"animate-pulse\",\n                isTransitioning && \"opacity-50\"\n              )}\n              style={{\n                borderColor: currentMood.color,\n                boxShadow:\n                  glowIntensity !== \"none\"\n                    ? `0 0 20px ${currentMood.color}40`\n                    : undefined,\n              }}\n              onClick={handleRingClick}\n              role={interactive ? \"button\" : \"status\"}\n              aria-label={`Current mood: ${currentMood.name} - ${currentMood.description}`}\n              tabIndex={interactive ? 0 : -1}\n              onKeyDown={(e) => {\n                if ((e.key === \"Enter\" || e.key === \" \") && interactive) {\n                  e.preventDefault();\n                  handleRingClick();\n                }\n              }}\n            >\n              {/* Center circle */}\n              <div\n                className={cn(\n                  \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\",\n                  `glass-radius-full flex items-center justify-center transition-all`,\n                  `duration-[${ANIMATION.DURATION.slower}ms]`,\n                  config.center,\n                  shouldAnimate && \"animate-pulse\"\n                )}\n                style={{\n                  backgroundColor: `${currentMood.color}${Math.round(currentMood.intensity * 255).toString(16)}`,\n                  boxShadow: `inset 0 0 10px ${currentMood.color}80`,\n                }}\n              >\n                {currentMood.icon && (\n                  <div className=\"glass-text-primary-glass-opacity-90\">\n                    {currentMood.icon}\n                  </div>\n                )}\n              </div>\n\n              {/* Intensity rings */}\n              {Array.from({ length: 3 }, (_, i) => (\n                <div\n                  key={i}\n                  className={cn(\n                    \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2\",\n                    `glass-radius-full border transition-all`,\n                    `duration-[${ANIMATION.DURATION.slower}ms]`,\n                    shouldAnimate && \"animate-pulse\"\n                  )}\n                  style={{\n                    width: `${60 + i * 20}%`,\n                    height: `${60 + i * 20}%`,\n                    borderColor: `${currentMood.color}${Math.round((currentMood.intensity - i * 0.2) * 255).toString(16)}`,\n                    animationDelay: `${i * 200}ms`,\n                    opacity: Math.max(0, currentMood.intensity - i * 0.3),\n                  }}\n                />\n              ))}\n            </Motion>\n\n            {/* Transition overlay */}\n            {isTransitioning && (\n              <div\n                className={cn(\n                  \"absolute inset-0 glass-radius-full bg-gradient-radial from-white/20 to-transparent\",\n                  \"animate-spin\"\n                )}\n              />\n            )}\n          </div>\n\n          {/* Mood Information */}\n          <div className=\"glass-text-center glass-gap-2\">\n            {showLabels && (\n              <Motion\n                preset={shouldAnimate ? \"slideUp\" : \"none\"}\n                className={cn(\n                  \"font-semibold transition-colors duration-500\",\n                  config.text\n                )}\n                style={{ color: currentMood.color }}\n              >\n                {currentMood.name}\n              </Motion>\n            )}\n\n            {showDescription && (\n              <Motion\n                preset={shouldAnimate ? \"slideUp\" : \"none\"}\n                delay={100}\n                className={cn(\n                  \"glass-text-secondary max-w-xs text-center\",\n                  config.description\n                )}\n              >\n                {currentMood.description}\n              </Motion>\n            )}\n          </div>\n\n          {/* Mood Selector */}\n          {interactive && moodStates.length > 1 && (\n            <Motion\n              preset={shouldAnimate ? \"slideUp\" : \"none\"}\n              delay={200}\n              className=\"glass-flex glass-flex-wrap glass-gap-1 glass-justify-center glass-max-w-xs\"\n            >\n              {moodStates.map((mood, index) => (\n                <button\n                  key={mood.name}\n                  onClick={() => handleMoodChange(mood)}\n                  className={cn(\n                    \"w-6 h-6 glass-radius-full border-2 transition-all duration-200\",\n                    \"hover:scale-110 focus:outline-none focus:ring-2 focus:ring-offset-2\",\n                    currentMood.name === mood.name && \"ring-2 ring-white\",\n                    \"focus:ring-white/50\"\n                  )}\n                  style={{\n                    backgroundColor: mood.color,\n                    borderColor:\n                      currentMood.name === mood.name ? \"white\" : mood.color,\n                  }}\n                  title={mood.name}\n                  aria-label={`Select ${mood.name} mood`}\n                />\n              ))}\n            </Motion>\n          )}\n\n          {/* Controls */}\n          {(autoTransition || biometricIntegration || ambientResponse) && (\n            <Motion\n              preset={shouldAnimate ? \"slideUp\" : \"none\"}\n              delay={ANIMATION.DURATION.normal}\n              className=\"glass-flex glass-gap-2 glass-items-center glass-text-xs glass-text-secondary\"\n            >\n              {autoTransition && (\n                <button\n                  onClick={toggleAutoTransition}\n                  className={cn(\n                    \"glass-px-2 glass-py-1 glass-radius-md border transition-colors\",\n                    autoTransitionActive\n                      ? \"bg-primary/20 border-primary/40 text-primary\"\n                      : \"border-border/40 hover:border-border\"\n                  )}\n                >\n                  Auto {autoTransitionActive ? \"On\" : \"Off\"}\n                </button>\n              )}\n\n              {biometricIntegration && (\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span>Bio</span>\n                </div>\n              )}\n\n              {ambientResponse && (\n                <div className=\"glass-flex glass-items-center glass-gap-1\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-blue glass-radius-full glass-animate-pulse\" />\n                  <span>Ambient</span>\n                </div>\n              )}\n            </Motion>\n          )}\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassMoodRing.displayName = \"GlassMoodRing\";\n\nexport default GlassMoodRing;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Live Cursor Presence\n * Real-time collaborative cursor tracking with glass effects\n */\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"../../lib/utils\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface CursorUser {\n  id: string;\n  name: string;\n  avatar?: string;\n  color: string;\n  isTyping?: boolean;\n  lastSeen: number;\n}\n\ninterface CursorPosition {\n  x: number;\n  y: number;\n  timestamp: number;\n}\n\ninterface LiveCursor extends CursorUser {\n  position: CursorPosition;\n  velocity: { x: number; y: number };\n  isVisible: boolean;\n  trail: CursorPosition[];\n}\n\ninterface GlassLiveCursorPresenceProps {\n  children: React.ReactNode;\n  className?: string;\n  roomId: string;\n  currentUser: CursorUser;\n  connectionUrl?: string;\n  maxUsers?: number;\n  showTrails?: boolean;\n  showLabels?: boolean;\n  cursorSize?: number;\n  trailLength?: number;\n  fadeTimeout?: number; // ms\n  smoothing?: number; // 0-1\n  glassEffect?: boolean;\n  onUserJoin?: (user: CursorUser) => void;\n  onUserLeave?: (userId: string) => void;\n  onCursorMove?: (userId: string, position: CursorPosition) => void;\n}\n\nexport function GlassLiveCursorPresence({\n  children,\n  className,\n  roomId,\n  currentUser,\n  connectionUrl = \"ws://localhost:8080\",\n  maxUsers = 20,\n  showTrails = true,\n  showLabels = true,\n  cursorSize = 16,\n  trailLength = 8,\n  fadeTimeout = 5000,\n  smoothing = 0.7,\n  glassEffect = true,\n  onUserJoin,\n  onUserLeave,\n  onCursorMove,\n}: GlassLiveCursorPresenceProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const wsRef = useRef<WebSocket | null>(null);\n  const [cursors, setCursors] = useState<Map<string, LiveCursor>>(new Map());\n  const [isConnected, setIsConnected] = useState(false);\n  const [reconnectAttempts, setReconnectAttempts] = useState(0);\n\n  // Local cursor tracking\n  const lastPosition = useRef({ x: 0, y: 0 });\n  const lastSentTime = useRef(0);\n  const sendThrottle = 50; // ms\n\n  // WebSocket connection management\n  const connect = useCallback(() => {\n    try {\n      const ws = new WebSocket(`${connectionUrl}/cursor-presence/${roomId}`);\n\n      ws.onopen = () => {\n        setIsConnected(true);\n        setReconnectAttempts(0);\n\n        // Send user join event\n        ws.send(\n          JSON.stringify({\n            type: \"user:join\",\n            user: currentUser,\n            timestamp: Date.now(),\n          })\n        );\n      };\n\n      ws.onmessage = (event) => {\n        try {\n          const message = JSON.parse(event.data);\n          handleWebSocketMessage(message);\n        } catch {\n          // Ignore malformed cursor messages and keep the connection alive.\n        }\n      };\n\n      ws.onclose = () => {\n        setIsConnected(false);\n\n        // Attempt reconnection with exponential backoff\n        if (reconnectAttempts < 5) {\n          const delay = Math.min(1000 * Math.pow(2, reconnectAttempts), 10000);\n          setTimeout(connect, delay);\n          setReconnectAttempts((prev: any) => prev + 1);\n        }\n      };\n\n      ws.onerror = () => {\n        setIsConnected(false);\n      };\n\n      wsRef.current = ws;\n    } catch {\n      setIsConnected(false);\n    }\n  }, [connectionUrl, roomId, currentUser, reconnectAttempts]);\n\n  // Handle WebSocket messages\n  const handleWebSocketMessage = useCallback(\n    (message: any) => {\n      switch (message.type) {\n        case \"user:join\":\n          if (message.user.id !== currentUser.id) {\n            setCursors((prev: Map<string, LiveCursor>) => {\n              const newCursors = new Map(prev);\n              newCursors.set(message.user.id, {\n                ...message.user,\n                position: { x: 0, y: 0, timestamp: Date.now() },\n                velocity: { x: 0, y: 0 },\n                isVisible: false,\n                trail: [],\n              });\n              return newCursors;\n            });\n            onUserJoin?.(message.user);\n          }\n          break;\n\n        case \"user:leave\":\n          setCursors((prev: Map<string, LiveCursor>) => {\n            const newCursors = new Map(prev);\n            newCursors.delete(message.userId);\n            return newCursors;\n          });\n          onUserLeave?.(message.userId);\n          break;\n\n        case \"cursor:move\":\n          if (message.userId !== currentUser.id) {\n            setCursors((prev: Map<string, LiveCursor>) => {\n              const newCursors = new Map(prev);\n              const existingCursor = newCursors.get(message.userId);\n\n              if (existingCursor) {\n                const newPosition = message.position;\n                const oldPosition = existingCursor.position;\n\n                // Calculate velocity\n                const timeDiff = newPosition.timestamp - oldPosition.timestamp;\n                const velocity =\n                  timeDiff > 0\n                    ? {\n                        x: ((newPosition.x - oldPosition.x) / timeDiff) * 1000,\n                        y: ((newPosition.y - oldPosition.y) / timeDiff) * 1000,\n                      }\n                    : { x: 0, y: 0 };\n\n                // Update trail\n                const newTrail = showTrails\n                  ? [\n                      newPosition,\n                      ...existingCursor.trail.slice(0, trailLength - 1),\n                    ]\n                  : [];\n\n                newCursors.set(message.userId, {\n                  ...existingCursor,\n                  position: newPosition,\n                  velocity,\n                  isVisible: true,\n                  trail: newTrail,\n                  lastSeen: Date.now(),\n                });\n              }\n\n              return newCursors;\n            });\n\n            onCursorMove?.(message.userId, message.position);\n          }\n          break;\n\n        case \"user:typing\":\n          setCursors((prev: Map<string, LiveCursor>) => {\n            const newCursors = new Map(prev);\n            const cursor = newCursors.get(message.userId);\n            if (cursor) {\n              newCursors.set(message.userId, {\n                ...cursor,\n                isTyping: message.isTyping,\n              });\n            }\n            return newCursors;\n          });\n          break;\n\n        case \"room:state\":\n          // Initial room state with all users\n          message.users.forEach((user: CursorUser) => {\n            if (user.id !== currentUser.id) {\n              setCursors((prev: Map<string, LiveCursor>) => {\n                const newCursors = new Map(prev);\n                newCursors.set(user.id, {\n                  ...user,\n                  position: { x: 0, y: 0, timestamp: Date.now() },\n                  velocity: { x: 0, y: 0 },\n                  isVisible: false,\n                  trail: [],\n                });\n                return newCursors;\n              });\n            }\n          });\n          break;\n      }\n    },\n    [\n      currentUser.id,\n      onUserJoin,\n      onUserLeave,\n      onCursorMove,\n      showTrails,\n      trailLength,\n    ]\n  );\n\n  // Track local cursor movement\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) return;\n\n      const now = Date.now();\n      if (now - lastSentTime.current < sendThrottle) return;\n\n      const container = containerRef.current;\n      if (!container) return;\n\n      const rect = container.getBoundingClientRect();\n      const x = e.clientX - rect.left;\n      const y = e.clientY - rect.top;\n\n      // Only send if position changed significantly\n      const dx = x - lastPosition.current.x;\n      const dy = y - lastPosition.current.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n\n      if (distance > 2) {\n        wsRef.current.send(\n          JSON.stringify({\n            type: \"cursor:move\",\n            userId: currentUser.id,\n            position: { x, y, timestamp: now },\n          })\n        );\n\n        lastPosition.current = { x, y };\n        lastSentTime.current = now;\n      }\n    },\n    [currentUser.id, sendThrottle]\n  );\n\n  // Handle mouse leave\n  const handleMouseLeave = useCallback(() => {\n    if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {\n      wsRef.current.send(\n        JSON.stringify({\n          type: \"cursor:leave\",\n          userId: currentUser.id,\n          timestamp: Date.now(),\n        })\n      );\n    }\n  }, [currentUser.id]);\n\n  // Cleanup inactive cursors\n  useEffect(() => {\n    const interval = setInterval(() => {\n      const now = Date.now();\n      setCursors((prev: Map<string, LiveCursor>) => {\n        const newCursors = new Map(prev);\n        let hasChanges = false;\n\n        newCursors.forEach((cursor, userId) => {\n          if (now - cursor.lastSeen > fadeTimeout) {\n            newCursors.set(userId, {\n              ...cursor,\n              isVisible: false,\n            });\n            hasChanges = true;\n          }\n        });\n\n        return hasChanges ? newCursors : prev;\n      });\n    }, 1000);\n\n    return () => clearInterval(interval);\n  }, [fadeTimeout]);\n\n  // Setup event listeners and connection\n  useEffect(() => {\n    connect();\n\n    const container = containerRef.current;\n    if (container) {\n      container.addEventListener(\"mousemove\", handleMouseMove);\n      container.addEventListener(\"mouseleave\", handleMouseLeave);\n    }\n\n    return () => {\n      if (container) {\n        container.removeEventListener(\"mousemove\", handleMouseMove);\n        container.removeEventListener(\"mouseleave\", handleMouseLeave);\n      }\n\n      if (wsRef.current) {\n        wsRef.current.close();\n      }\n    };\n  }, [connect, handleMouseMove, handleMouseLeave]);\n\n  return (\n    <div ref={containerRef} className={cn(\"relative\", className)}>\n      {children}\n\n      {/* Live cursors */}\n      <AnimatePresence>\n        {Array.from(cursors.values()).map(\n          (cursor: any) =>\n            cursor.isVisible && (\n              <LiveCursorComponent\n                key={cursor.id}\n                cursor={cursor}\n                size={cursorSize}\n                showTrail={showTrails}\n                showLabel={showLabels}\n                smoothing={smoothing}\n                glassEffect={glassEffect}\n              />\n            )\n        )}\n      </AnimatePresence>\n\n      {/* Connection status indicator */}\n      <div\n        className=\"glass-absolute glass-top-2 glass-left-2 glass-flex glass-items-center glass-gap-2\"\n        role=\"status\"\n        aria-live=\"polite\"\n        aria-label={`${cursors.size} user${cursors.size !== 1 ? \"s\" : \"\"} online`}\n      >\n        <div\n          className={cn(\n            \"w-2 h-2 glass-radius-full transition-colors\",\n            isConnected ? \"bg-green-400\" : \"bg-red-400\"\n          )}\n          aria-hidden=\"true\"\n        />\n        <ContrastGuard>\n          <span className=\"glass-text-xs glass-text-secondary\">\n            {cursors.size} user{cursors.size !== 1 ? \"s\" : \"\"} online\n          </span>\n        </ContrastGuard>\n      </div>\n    </div>\n  );\n}\n\n// Individual cursor component\nfunction LiveCursorComponent({\n  cursor,\n  size,\n  showTrail,\n  showLabel,\n  smoothing,\n  glassEffect,\n}: {\n  cursor: LiveCursor;\n  size: number;\n  showTrail: boolean;\n  showLabel: boolean;\n  smoothing: number;\n  glassEffect: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  return (\n    <>\n      {/* Cursor trail */}\n      {showTrail &&\n        cursor.trail.map((trailPoint, index) => (\n          <motion.div\n            key={`trail-${cursor.id}-${index}`}\n            className=\"glass-absolute glass-pointer-events-none\"\n            initial={{ opacity: 0, scale: 0 }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    opacity: (1 - index / cursor.trail.length) * 0.5,\n                    scale: 1 - index * 0.1,\n                    x: trailPoint.x,\n                    y: trailPoint.y,\n                  }\n            }\n            exit={{ opacity: 0, scale: 0 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n          >\n            <div\n              className={cn(\n                \"glass-radius-full\",\n                glassEffect &&\n                  \"OptimizedGlass intensity={0.2} glassBlur={6} glass-blur-sm\"\n              )}\n              style={{\n                width: size * 0.5,\n                height: size * 0.5,\n                backgroundColor: cursor.color,\n              }}\n            />\n          </motion.div>\n        ))}\n\n      {/* Main cursor */}\n      <motion.div\n        className=\"glass-absolute glass-pointer-events-none glass-z-50\"\n        initial={{ opacity: 0, scale: 0, rotate: 0 }}\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                opacity: 1,\n                scale: 1,\n                x: cursor.position.x,\n                y: cursor.position.y,\n                rotate:\n                  (Math.atan2(cursor.velocity.y, cursor.velocity.x) * 180) /\n                  Math.PI,\n              }\n        }\n        exit={{ opacity: 0, scale: 0 }}\n        transition={\n          prefersReducedMotion\n            ? { duration: 0 }\n            : { duration: ANIMATION.DURATION.normal / 1000 }\n        }\n      >\n        {/* Cursor icon */}\n        <div\n          className={cn(\n            \"relative\",\n            glassEffect &&\n              \"OptimizedGlass intensity={0.2} glassBlur={6} glass-blur-sm glass-elev-2\"\n          )}\n          style={{\n            width: size,\n            height: size,\n            transform: \"translate(-2px, -2px)\",\n          }}\n        >\n          <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n            <path\n              d=\"M5.5 3.21V20.79C5.5 21.17 5.96 21.32 6.23 21.05L11.5 15.77L14.5 20.79C14.74 21.18 15.26 21.18 15.5 20.79L17.27 18.15C17.51 17.76 17.51 17.24 17.27 16.85L14.27 11.83L20.79 5.31C21.17 5.04 21.02 4.5 20.64 4.5H3.36C2.98 4.5 2.83 5.04 3.21 5.31L5.5 3.21Z\"\n              fill={cursor.color}\n              stroke=\"white\"\n              strokeWidth=\"1\"\n            />\n          </svg>\n\n          {/* Typing indicator */}\n          {cursor.isTyping && (\n            <motion.div\n              className=\"glass-absolute glass--glass-top-1 glass--right-1 glass-w-3 glass-h-3 glass-surface-green glass-radius-full\"\n              animate={prefersReducedMotion ? {} : { scale: [1, 1.2, 1] }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : {\n                      repeat: Infinity,\n                      duration: ANIMATION.DURATION.slower / 1000,\n                    }\n              }\n            />\n          )}\n        </div>\n\n        {/* User label */}\n        {showLabel && (\n          <motion.div\n            className={cn(\n              \"absolute top-6 left-2 glass-px-2 glass-py-1 glass-text-xs glass-radius-md whitespace-nowrap\",\n              glassEffect\n                ? \"glass-surface-primary glass-text-primary\"\n                : \"bg-white/15 glass-text-primary\"\n            )}\n            initial={{ opacity: 0, y: -10 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: -10 }}\n            style={{\n              backgroundColor: glassEffect ? undefined : cursor.color,\n            }}\n          >\n            {cursor.avatar && (\n              <img\n                src={cursor.avatar}\n                alt={cursor.name}\n                className=\"glass-inline-glass-block glass-w-3 glass-h-3 glass-radius-full glass-mr-1\"\n              />\n            )}\n            <ContrastGuard>{cursor.name}</ContrastGuard>\n          </motion.div>\n        )}\n      </motion.div>\n    </>\n  );\n}\n\n// Hook for cursor presence functionality\nexport function useLiveCursorPresence(roomId: string, currentUser: CursorUser) {\n  const [connectedUsers, setConnectedUsers] = useState<CursorUser[]>([]);\n  const [isConnected, setIsConnected] = useState(false);\n\n  const broadcastTyping = useCallback((isTyping: boolean) => {\n    // This would send typing status to other users\n  }, []);\n\n  const sendReaction = useCallback(\n    (reaction: string, position: { x: number; y: number }) => {\n      // This would send reaction at cursor position\n    },\n    []\n  );\n\n  return {\n    connectedUsers,\n    isConnected,\n    broadcastTyping,\n    sendReaction,\n  };\n}\n\n// Preset configurations\nexport const cursorPresencePresets = {\n  minimal: {\n    showTrails: false,\n    showLabels: false,\n    cursorSize: 12,\n    glassEffect: false,\n  },\n  standard: {\n    showTrails: true,\n    showLabels: true,\n    cursorSize: 16,\n    trailLength: 5,\n    glassEffect: true,\n  },\n  immersive: {\n    showTrails: true,\n    showLabels: true,\n    cursorSize: 20,\n    trailLength: 10,\n    smoothing: 0.5,\n    glassEffect: true,\n  },\n  gaming: {\n    showTrails: true,\n    showLabels: false,\n    cursorSize: 14,\n    trailLength: 8,\n    smoothing: 0.2,\n    glassEffect: false,\n  },\n  presentation: {\n    showTrails: false,\n    showLabels: true,\n    cursorSize: 24,\n    glassEffect: true,\n  },\n};\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n/**\n * AuraGlass Reactions System\n * Interactive emoji reactions with glass physics and animations\n */\n\nimport React, { useRef, useEffect, useState, useCallback } from \"react\";\nimport {\n  motion,\n  AnimatePresence,\n  useSpring,\n  useMotionValue,\n} from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { glassSoundDesign } from \"../../utils/soundDesign\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { COLORS } from \"../../tokens/designConstants\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface Reaction {\n  id: string;\n  emoji: string;\n  position: { x: number; y: number };\n  user?: {\n    id: string;\n    name: string;\n    avatar?: string;\n  };\n  timestamp: number;\n  intensity: number; // 0-1\n  physics?: {\n    velocity: { x: number; y: number };\n    rotation: number;\n    scale: number;\n  };\n}\n\ninterface ReactionType {\n  emoji: string;\n  name: string;\n  color: string;\n  sound?: string;\n  shortcut?: string;\n}\n\ninterface GlassReactionsProps {\n  children: React.ReactNode;\n  className?: string;\n  reactions?: Reaction[];\n  reactionTypes?: ReactionType[];\n  maxReactions?: number;\n  autoExpire?: number; // ms\n  enablePhysics?: boolean;\n  enableSounds?: boolean;\n  enableShortcuts?: boolean;\n  enableBurst?: boolean;\n  glassEffect?: boolean;\n  onReactionAdd?: (reaction: Omit<Reaction, \"id\" | \"timestamp\">) => void;\n  onReactionExpire?: (reactionId: string) => void;\n}\n\nconst defaultReactionTypes: ReactionType[] = [\n  {\n    emoji: \"\uD83D\uDC4D\",\n    name: \"Like\",\n    color: \"hsl(var(--glass-color-primary))\",\n    sound: \"success\",\n    shortcut: \"1\",\n  },\n  {\n    emoji: \"\u2764\uFE0F\",\n    name: \"Love\",\n    color: \"hsl(var(--glass-color-danger))\",\n    sound: \"notification\",\n    shortcut: \"2\",\n  },\n  {\n    emoji: \"\uD83D\uDE02\",\n    name: \"Laugh\",\n    color: \"hsl(var(--glass-color-warning))\",\n    sound: \"tap\",\n    shortcut: \"3\",\n  },\n  {\n    emoji: \"\uD83D\uDE2E\",\n    name: \"Wow\",\n    color: COLORS.semantic.secondary,\n    sound: \"morph\",\n    shortcut: \"4\",\n  },\n  {\n    emoji: \"\uD83D\uDE22\",\n    name: \"Sad\",\n    color: \"var(--glass-gray-500)\",\n    sound: \"slide\",\n    shortcut: \"5\",\n  },\n  {\n    emoji: \"\uD83D\uDE21\",\n    name: \"Angry\",\n    color: \"var(--glass-color-danger-dark)\",\n    sound: \"error\",\n    shortcut: \"6\",\n  },\n  {\n    emoji: \"\uD83C\uDF89\",\n    name: \"Celebrate\",\n    color: \"hsl(var(--glass-color-success))\",\n    sound: \"success\",\n    shortcut: \"7\",\n  },\n  {\n    emoji: \"\uD83E\uDD14\",\n    name: \"Think\",\n    color: \"hsl(var(--glass-color-warning))\",\n    sound: \"hover\",\n    shortcut: \"8\",\n  },\n];\n\nexport function GlassReactions({\n  children,\n  className,\n  reactions = [],\n  reactionTypes = defaultReactionTypes,\n  maxReactions = 50,\n  autoExpire = 5000,\n  enablePhysics = true,\n  enableSounds = true,\n  enableShortcuts = true,\n  enableBurst = true,\n  glassEffect = true,\n  onReactionAdd,\n  onReactionExpire,\n}: GlassReactionsProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [localReactions, setLocalReactions] = useState<Reaction[]>([]);\n  const [showPicker, setShowPicker] = useState(false);\n  const [pickerPosition, setPickerPosition] = useState({ x: 0, y: 0 });\n  const lastClickTime = useRef(0);\n  const burstCount = useRef(0);\n\n  // Combine local and external reactions\n  const allReactions = [...reactions, ...localReactions].slice(-maxReactions);\n\n  // Handle click for reactions\n  const handleClick = useCallback(\n    (e: React.MouseEvent) => {\n      const now = Date.now();\n      const timeSinceLastClick = now - lastClickTime.current;\n\n      // Double click detection for quick reactions\n      if (timeSinceLastClick < ANIMATION.DURATION.normal) {\n        // Quick double-click reaction\n        const container = containerRef.current;\n        if (!container) return;\n\n        const rect = container.getBoundingClientRect();\n        const x = e.clientX - rect.left;\n        const y = e.clientY - rect.top;\n\n        // Use first reaction type for quick reaction\n        addReaction(reactionTypes[0].emoji, { x, y }, 1);\n\n        // Burst effect for triple+ clicks\n        if (enableBurst && timeSinceLastClick < ANIMATION.DURATION.fast) {\n          burstCount.current++;\n          if (burstCount.current >= 2) {\n            // Create burst of reactions\n            for (let i = 0; i < 5; i++) {\n              setTimeout(() => {\n                const randomType =\n                  reactionTypes[\n                    Math.floor(Math.random() * reactionTypes.length)\n                  ];\n                addReaction(\n                  randomType.emoji,\n                  {\n                    x: x + (Math.random() - 0.5) * 100,\n                    y: y + (Math.random() - 0.5) * 100,\n                  },\n                  Math.random() * 0.5 + 0.5\n                );\n              }, i * ANIMATION.DURATION.fast);\n            }\n          }\n        }\n      } else {\n        burstCount.current = 0;\n      }\n\n      lastClickTime.current = now;\n    },\n    [reactionTypes, enableBurst]\n  );\n\n  // Handle right click for reaction picker\n  const handleContextMenu = useCallback((e: React.MouseEvent) => {\n    e.preventDefault();\n\n    const container = containerRef.current;\n    if (!container) return;\n\n    const rect = container.getBoundingClientRect();\n    const x = e.clientX - rect.left;\n    const y = e.clientY - rect.top;\n\n    setPickerPosition({ x, y });\n    setShowPicker(true);\n  }, []);\n\n  // Add reaction\n  const addReaction = useCallback(\n    (\n      emoji: string,\n      position: { x: number; y: number },\n      intensity: number = 1\n    ) => {\n      const reactionType = reactionTypes.find((r) => r.emoji === emoji);\n\n      const reaction: Reaction = {\n        id: `${Date.now()}-${Math.random()}`,\n        emoji,\n        position,\n        timestamp: Date.now(),\n        intensity,\n        physics: enablePhysics\n          ? {\n              velocity: {\n                x: (Math.random() - 0.5) * 200 * intensity,\n                y: -Math.random() * 100 * intensity - 50,\n              },\n              rotation: (Math.random() - 0.5) * 180,\n              scale: 0.8 + Math.random() * 0.4,\n            }\n          : undefined,\n      };\n\n      setLocalReactions((prev: any) => [...prev, reaction]);\n\n      // Play sound\n      if (enableSounds && reactionType?.sound) {\n        glassSoundDesign.playGlassSound(reactionType.sound as any);\n      }\n\n      // Trigger haptic feedback\n      if (\"vibrate\" in navigator) {\n        navigator.vibrate((ANIMATION.DURATION.fast / 3) * intensity);\n      }\n\n      onReactionAdd?.(reaction);\n\n      // Auto expire\n      if (autoExpire > 0) {\n        setTimeout(() => {\n          setLocalReactions((prev: any) =>\n            prev.filter((r: any) => r.id !== reaction.id)\n          );\n          onReactionExpire?.(reaction.id);\n        }, autoExpire);\n      }\n    },\n    [\n      reactionTypes,\n      enablePhysics,\n      enableSounds,\n      autoExpire,\n      onReactionAdd,\n      onReactionExpire,\n    ]\n  );\n\n  // Handle keyboard shortcuts\n  useEffect(() => {\n    if (!enableShortcuts) return;\n\n    const handleKeyPress = (e: KeyboardEvent) => {\n      // Only trigger on number keys\n      if (e.key >= \"1\" && e.key <= \"9\") {\n        const index = parseInt(e.key) - 1;\n        const reactionType = reactionTypes[index];\n\n        if (reactionType) {\n          // Add reaction at center of screen\n          const container = containerRef.current;\n          if (container) {\n            const rect = container.getBoundingClientRect();\n            addReaction(reactionType.emoji, {\n              x: rect.width / 2,\n              y: rect.height / 2,\n            });\n          }\n        }\n      }\n    };\n\n    window.addEventListener(\"keypress\", handleKeyPress);\n    return () => window.removeEventListener(\"keypress\", handleKeyPress);\n  }, [enableShortcuts, reactionTypes, addReaction]);\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\"relative\", className)}\n      onClick={handleClick}\n      onContextMenu={handleContextMenu}\n      role=\"region\"\n      aria-label=\"Interactive reactions area\"\n    >\n      {children}\n\n      {/* Reactions overlay */}\n      <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-overflow-hidden\">\n        <AnimatePresence>\n          {allReactions.map((reaction: any) => (\n            <ReactionComponent\n              key={reaction.id}\n              reaction={reaction}\n              enablePhysics={enablePhysics}\n              glassEffect={glassEffect}\n            />\n          ))}\n        </AnimatePresence>\n      </div>\n\n      {/* Reaction picker */}\n      <AnimatePresence>\n        {showPicker && (\n          <ReactionPicker\n            position={pickerPosition}\n            reactionTypes={reactionTypes}\n            onReactionSelect={(emoji) => {\n              addReaction(emoji, pickerPosition);\n              setShowPicker(false);\n            }}\n            onClose={() => setShowPicker(false)}\n            glassEffect={glassEffect}\n          />\n        )}\n      </AnimatePresence>\n\n      {/* Keyboard shortcuts hint */}\n      {enableShortcuts && (\n        <ContrastGuard>\n          <div\n            className=\"glass-absolute glass-bottom-2 glass-right-2 glass-surface-primary glass-p-2 glass-radius-sm glass-text-xs glass-opacity-50\"\n            role=\"status\"\n            aria-label=\"Keyboard shortcuts hint\"\n          >\n            Press 1-{reactionTypes.length} for quick reactions\n          </div>\n        </ContrastGuard>\n      )}\n    </div>\n  );\n}\n\n// Individual reaction component\nfunction ReactionComponent({\n  reaction,\n  enablePhysics,\n  glassEffect,\n}: {\n  reaction: Reaction;\n  enablePhysics: boolean;\n  glassEffect: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const { emoji, position, physics, intensity, timestamp } = reaction;\n  const age = (Date.now() - timestamp) / 1000; // seconds\n\n  // Physics animation\n  const x = useMotionValue(position.x);\n  const y = useMotionValue(position.y);\n  const rotation = useMotionValue(physics?.rotation || 0);\n  const scale = useMotionValue(physics?.scale || 1);\n\n  useEffect(() => {\n    if (!enablePhysics || !physics) return;\n\n    let animationId: number;\n    let startTime = Date.now();\n\n    const animate = () => {\n      const now = Date.now();\n      const deltaTime = (now - startTime) / 1000;\n      startTime = now;\n\n      // Apply gravity and velocity\n      physics.velocity.y += 980 * deltaTime; // Gravity\n\n      // Update position\n      x.set(x.get() + physics.velocity.x * deltaTime);\n      y.set(y.get() + physics.velocity.y * deltaTime);\n\n      // Apply rotation\n      rotation.set(rotation.get() + physics.rotation * deltaTime);\n\n      // Apply scaling based on age (fade out)\n      const ageScale = Math.max(0, 1 - age * 0.2);\n      scale.set((physics.scale || 1) * ageScale);\n\n      // Continue animation if still visible\n      if (ageScale > 0) {\n        animationId = requestAnimationFrame(animate);\n      }\n    };\n\n    animationId = requestAnimationFrame(animate);\n\n    return () => {\n      if (animationId) {\n        cancelAnimationFrame(animationId);\n      }\n    };\n  }, [enablePhysics, physics, age, x, y, rotation, scale]);\n\n  return (\n    <motion.div\n      className={cn(\n        \"absolute select-none\",\n        glassEffect && \"glass-optimized-glass glass-blur-sm\"\n      )}\n      style={{\n        x: enablePhysics ? x : position.x,\n        y: enablePhysics ? y : position.y,\n        rotate: enablePhysics ? rotation : 0,\n        scale: enablePhysics ? scale : 1,\n        fontSize: `${24 + intensity * 12}px`,\n      }}\n      initial={{\n        opacity: 0,\n        scale: 0,\n        rotate: -180,\n      }}\n      animate={\n        prefersReducedMotion\n          ? {}\n          : {\n              opacity: 1,\n              scale: enablePhysics ? undefined : 1 + intensity * 0.5,\n              rotate: enablePhysics ? undefined : 0,\n            }\n      }\n      exit={{\n        opacity: 0,\n        scale: 0,\n        rotate: 180,\n      }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.normal / 1000 }\n      }\n    >\n      <span className=\"glass-block glass-transform glass--translate-x-1-2 glass--translate-y-1-2\">\n        {emoji}\n      </span>\n\n      {/* Glass shimmer effect */}\n      {glassEffect && (\n        <motion.div\n          className=\"glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-white glass-gradient-primary glass-opacity-30\"\n          animate={\n            prefersReducedMotion\n              ? {}\n              : {\n                  x: [-100, 100],\n                }\n          }\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : {\n                  duration: ANIMATION.DURATION.slower / 1000,\n                  repeat: Infinity,\n                  ease: ANIMATION.EASING.linear,\n                }\n          }\n        />\n      )}\n    </motion.div>\n  );\n}\n\n// Reaction picker component\nfunction ReactionPicker({\n  position,\n  reactionTypes,\n  onReactionSelect,\n  onClose,\n  glassEffect,\n}: {\n  position: { x: number; y: number };\n  reactionTypes: ReactionType[];\n  onReactionSelect: (emoji: string) => void;\n  onClose: () => void;\n  glassEffect: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  const pickerRef = useRef<HTMLDivElement>(null);\n\n  // Close on outside click\n  useEffect(() => {\n    const handleClickOutside = (e: MouseEvent) => {\n      if (pickerRef.current && !pickerRef.current.contains(e.target as Node)) {\n        onClose();\n      }\n    };\n\n    document.addEventListener(\"mousedown\", handleClickOutside);\n    return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n  }, [onClose]);\n\n  // Close on escape key\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") {\n        onClose();\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleKeyDown);\n  }, [onClose]);\n\n  return (\n    <motion.div\n      ref={pickerRef}\n      className={cn(\n        \"absolute z-50 pointer-events-auto\",\n        glassEffect\n          ? \"glass-surface-primary glass-elev-3\"\n          : \"bg-white shadow-lg\",\n        \"glass-radius-lg glass-p-2\"\n      )}\n      style={{\n        left: position.x,\n        top: position.y,\n        transform: \"translate(-50%, -100%)\",\n      }}\n      initial={{ opacity: 0, scale: 0.8, y: 10 }}\n      animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1, y: 0 }}\n      exit={{ opacity: 0, scale: 0.8, y: 10 }}\n      transition={\n        prefersReducedMotion\n          ? { duration: 0 }\n          : { duration: ANIMATION.DURATION.normal / 1000 }\n      }\n      role=\"menu\"\n      aria-label=\"Reaction picker\"\n    >\n      <div className=\"glass-grid glass-grid-cols-4 glass-gap-1\">\n        {reactionTypes.map((reactionType, index) => (\n          <motion.button\n            key={reactionType.emoji}\n            className={cn(\n              \"w-10 h-10 flex items-center justify-center glass-radius-lg\",\n              \"hover:bg-white/10 transition-colors glass-text-xl\",\n              glassEffect && \"glass-button-secondary\"\n            )}\n            whileHover={prefersReducedMotion ? {} : { scale: 1.1 }}\n            whileTap={prefersReducedMotion ? {} : { scale: 0.9 }}\n            onClick={() => onReactionSelect(reactionType.emoji)}\n            title={`${reactionType.name} (${reactionType.shortcut})`}\n            aria-label={`React with ${reactionType.name} emoji`}\n            role=\"menuitem\"\n            initial={{ opacity: 0, scale: 0 }}\n            animate={{ opacity: 1, scale: 1 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: ANIMATION.DURATION.normal / 1000 }\n            }\n          >\n            {reactionType.emoji}\n          </motion.button>\n        ))}\n      </div>\n\n      {/* Arrow pointer */}\n      <div\n        className={cn(\n          \"absolute top-full left-1/2 transform -translate-x-1/2\",\n          \"w-0 h-0 border-l-4 border-r-4 border-t-4\",\n          \"border-l-transparent border-r-transparent\",\n          glassEffect ? \"border-t-white/20\" : \"border-t-white\"\n        )}\n      />\n    </motion.div>\n  );\n}\n\n// Hook for reactions functionality\nexport function useGlassReactions() {\n  const [reactions, setReactions] = useState<Reaction[]>([]);\n\n  const addReaction = useCallback(\n    (\n      emoji: string,\n      position: { x: number; y: number },\n      intensity: number = 1,\n      user?: Reaction[\"user\"]\n    ) => {\n      const reaction: Reaction = {\n        id: `${Date.now()}-${Math.random()}`,\n        emoji,\n        position,\n        user,\n        timestamp: Date.now(),\n        intensity,\n      };\n\n      setReactions((prev: any) => [...prev, reaction]);\n\n      return reaction;\n    },\n    []\n  );\n\n  const removeReaction = useCallback((id: string) => {\n    setReactions((prev: any) => prev.filter((r: any) => r.id !== id));\n  }, []);\n\n  const clearReactions = useCallback(() => {\n    setReactions([]);\n  }, []);\n\n  return {\n    reactions,\n    addReaction,\n    removeReaction,\n    clearReactions,\n  };\n}\n\n// Reaction bar component for quick access\nexport function GlassReactionBar({\n  reactionTypes = defaultReactionTypes.slice(0, 6),\n  onReactionClick,\n  className,\n  glassEffect = true,\n}: {\n  reactionTypes?: ReactionType[];\n  onReactionClick?: (emoji: string) => void;\n  className?: string;\n  glassEffect?: boolean;\n}) {\n  const prefersReducedMotion = useReducedMotion();\n  return (\n    <motion.div\n      className={cn(\n        \"flex items-center glass-gap-2 glass-p-2 glass-radius-full\",\n        glassEffect\n          ? \"glass-surface-primary glass-elev-2\"\n          : \"bg-white shadow-lg\",\n        className\n      )}\n      initial={{ opacity: 0, y: 20 }}\n      animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n    >\n      {reactionTypes.map((reactionType, index) => (\n        <motion.button\n          key={reactionType.emoji}\n          className={cn(\n            \"w-8 h-8 flex items-center justify-center glass-radius-full\",\n            \"hover:bg-white/10 transition-colors glass-text-lg\",\n            glassEffect && \"glass-button-secondary\"\n          )}\n          whileHover={prefersReducedMotion ? {} : { scale: 1.1 }}\n          whileTap={prefersReducedMotion ? {} : { scale: 0.9 }}\n          onClick={() => onReactionClick?.(reactionType.emoji)}\n          title={reactionType.name}\n          aria-label={`React with ${reactionType.name} emoji`}\n          initial={{ opacity: 0, scale: 0 }}\n          animate={{ opacity: 1, scale: 1 }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: ANIMATION.DURATION.normal / 1000 }\n          }\n        >\n          {reactionType.emoji}\n        </motion.button>\n      ))}\n    </motion.div>\n  );\n}\n", "\"use client\";\nimport React, { useMemo } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport type EcosystemStatus = \"thriving\" | \"stable\" | \"recovering\" | \"critical\";\n\nexport interface EcosystemLayer {\n  id: string;\n  name: string;\n  health: number;\n  trend?: number;\n  biodiversity?: number;\n  status?: EcosystemStatus;\n  description?: string;\n}\n\nexport interface LivingEcosystemSimulatorProps {\n  className?: string;\n  title?: string;\n  layers?: EcosystemLayer[];\n  onSelectLayer?: (layer: EcosystemLayer) => void;\n  highlightThreshold?: number;\n}\n\nconst DEFAULT_LAYERS: EcosystemLayer[] = [\n  {\n    id: \"canopy\",\n    name: \"Canopy Habitat\",\n    health: 82,\n    trend: 4,\n    biodiversity: 0.76,\n    status: \"thriving\",\n    description: \"Tree canopy health and migratory activity.\",\n  },\n  {\n    id: \"understory\",\n    name: \"Understory\",\n    health: 68,\n    trend: 2,\n    biodiversity: 0.64,\n    status: \"stable\",\n    description: \"Shade adaptable flora and night fauna patterns.\",\n  },\n  {\n    id: \"forest-floor\",\n    name: \"Forest Floor\",\n    health: 54,\n    trend: -3,\n    biodiversity: 0.49,\n    status: \"recovering\",\n    description: \"Nutrient cycling, soil moisture, decomposer signals.\",\n  },\n  {\n    id: \"riparian\",\n    name: \"Riparian Basin\",\n    health: 38,\n    trend: -6,\n    biodiversity: 0.41,\n    status: \"critical\",\n    description: \"Water table oscillations and aquatic biomes.\",\n  },\n];\n\nconst statusAccent: Record<EcosystemStatus, string> = {\n  thriving: \"glass-surface-green/40 border-green-400/40\",\n  stable: \"glass-surface-blue/30 border-blue-400/30\",\n  recovering: \"glass-surface-amber/30 border-amber-400/30\",\n  critical: \"glass-surface-red/30 border-red-400/40\",\n};\n\nconst statusLabel: Record<EcosystemStatus, string> = {\n  thriving: \"Thriving\",\n  stable: \"Stable\",\n  recovering: \"Recovering\",\n  critical: \"Critical\",\n};\n\nconst clamp = (value: number) => Math.max(0, Math.min(100, value));\n\nexport function LivingEcosystemSimulator({\n  className,\n  title = \"Living Ecosystem Simulator\",\n  layers = DEFAULT_LAYERS,\n  onSelectLayer,\n  highlightThreshold = 45,\n}: LivingEcosystemSimulatorProps) {\n  const normalizedLayers = useMemo(() => {\n    const usable = layers.length > 0 ? layers : DEFAULT_LAYERS;\n    return usable.map((layer) => ({\n      ...layer,\n      health: clamp(layer.health),\n      biodiversity:\n        layer.biodiversity !== undefined\n          ? Math.max(0, Math.min(1, layer.biodiversity))\n          : undefined,\n      status:\n        layer.status ??\n        (layer.health >= 75\n          ? \"thriving\"\n          : layer.health >= 55\n            ? \"stable\"\n            : layer.health >= 40\n              ? \"recovering\"\n              : \"critical\"),\n    }));\n  }, [layers]);\n\n  const aggregate = useMemo(() => {\n    const total = normalizedLayers.reduce(\n      (acc, layer) => {\n        acc.health += layer.health;\n        acc.biodiversity += layer.biodiversity ?? 0;\n        acc.count += 1;\n        if (layer.status === \"critical\") acc.critical += 1;\n        return acc;\n      },\n      { health: 0, biodiversity: 0, count: 0, critical: 0 }\n    );\n    return {\n      averageHealth: total.count ? Math.round(total.health / total.count) : 0,\n      averageBiodiversity: total.count ? total.biodiversity / total.count : 0,\n      criticalZones: total.critical,\n    };\n  }, [normalizedLayers]);\n\n  return (\n    <OptimizedGlass\n      role=\"region\"\n      aria-label={title}\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-backdrop-grid glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-white/10 via-white/5 to-white/8\",\n        className\n      )}\n    >\n      <header className=\"glass-flex glass-flex-wrap glass-items-end glass-justify-between glass-gap-4\">\n        <div>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n            {title}\n          </h2>\n          <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n            Real-time biosphere telemetry across layered habitats.\n          </p>\n        </div>\n        <dl className=\"glass-flex glass-gap-6 glass-text-sm glass-text-primary-glass-opacity-80\">\n          <div>\n            <dt className=\"glass-uppercase glass-tracking-wide glass-text-xs glass-text-primary-glass-opacity-50\">\n              Avg. Health\n            </dt>\n            <dd className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n              {aggregate.averageHealth}%\n            </dd>\n          </div>\n          <div>\n            <dt className=\"glass-uppercase glass-tracking-wide glass-text-xs glass-text-primary-glass-opacity-50\">\n              Bio-Diversity\n            </dt>\n            <dd className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n              {(aggregate.averageBiodiversity * 100).toFixed(0)}%\n            </dd>\n          </div>\n          <div>\n            <dt className=\"glass-uppercase glass-tracking-wide glass-text-xs glass-text-primary-glass-opacity-50\">\n              Critical Zones\n            </dt>\n            <dd\n              className={cn(\n                \"text-lg font-semibold\",\n                aggregate.criticalZones > 0 ? \"text-red-400\" : \"text-primary\"\n              )}\n            >\n              {aggregate.criticalZones}\n            </dd>\n          </div>\n        </dl>\n      </header>\n\n      <div className=\"glass-grid glass-gap-4 md:glass-grid-cols-2\">\n        {normalizedLayers.map((layer) => {\n          const isCritical = layer.health <= highlightThreshold;\n          return (\n            <button\n              key={layer.id}\n              type=\"button\"\n              onClick={() => onSelectLayer?.(layer)}\n              className={cn(\n                \"w-full text-left glass-radius-2xl border glass-border-soft p-4 transition-all duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400 glass-focus glass-touch-target glass-contrast-guard\",\n                statusAccent[layer.status ?? \"stable\"],\n                isCritical\n                  ? \"shadow-[0_0_30px_-10px_rgba(248,113,113,0.7)]\"\n                  : \"hover:border-white/40\",\n                isCritical ? \"ring-1 ring-red-400/40\" : undefined\n              )}\n            >\n              <div className=\"glass-flex glass-items-start glass-justify-between glass-gap-4\">\n                <div>\n                  <h3 className=\"glass-text-lg glass-font-medium glass-text-primary\">\n                    {layer.name}\n                  </h3>\n                  <p className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-max-w-xs\">\n                    {layer.description}\n                  </p>\n                </div>\n                <span className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-90\">\n                  {statusLabel[layer.status ?? \"stable\"]}\n                </span>\n              </div>\n\n              <div className=\"glass-mt-4 glass-space-y-3\">\n                <div>\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-primary-glass-opacity-60\">\n                    <span>Habitat Health</span>\n                    <span\n                      className={cn(\n                        \"font-semibold\",\n                        isCritical ? \"text-red-300\" : \"text-primary\"\n                      )}\n                    >\n                      {layer.health}%\n                    </span>\n                  </div>\n                  <div className=\"glass-mt-2 glass-h-2 glass-w-full glass-overflow-hidden glass-radius-full glass-surface-subtle/10\">\n                    <div\n                      className={cn(\n                        \"h-full rounded-full transition-all\",\n                        isCritical ? \"bg-red-400/80\" : \"bg-cyan-400/80\"\n                      )}\n                      style={{ width: `${layer.health}%` }}\n                    />\n                  </div>\n                </div>\n\n                {layer.biodiversity !== undefined && (\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-primary-glass-opacity-60\">\n                    <span>Biodiversity Index</span>\n                    <span className=\"glass-font-semibold glass-text-primary-glass-opacity-80\">\n                      {(layer.biodiversity * 100).toFixed(0)}%\n                    </span>\n                  </div>\n                )}\n\n                {typeof layer.trend === \"number\" && (\n                  <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                    Trend:{\" \"}\n                    <span\n                      className={\n                        layer.trend >= 0 ? \"text-emerald-300\" : \"text-red-300\"\n                      }\n                    >\n                      {layer.trend >= 0 ? \"+\" : \"\"}\n                      {layer.trend}\n                    </span>{\" \"}\n                    pts\n                  </div>\n                )}\n              </div>\n            </button>\n          );\n        })}\n      </div>\n    </OptimizedGlass>\n  );\n}\n\nexport default LivingEcosystemSimulator;\n", "\"use client\";\nimport React, { useMemo } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport interface MolecularBond {\n  id: string;\n  from: string;\n  to: string;\n  strength: number;\n  type?: \"ionic\" | \"covalent\" | \"hydrogen\" | \"van-der-waals\";\n  resonance?: number;\n}\n\nexport interface MoleculeNode {\n  id: string;\n  symbol: string;\n  name: string;\n  charge?: number;\n  valence?: number;\n  electronegativity?: number;\n}\n\nexport interface MolecularBondingInterfaceProps {\n  className?: string;\n  molecules?: MoleculeNode[];\n  bonds?: MolecularBond[];\n  onInspectBond?: (bond: MolecularBond) => void;\n}\n\nconst DEFAULT_MOLECULES: MoleculeNode[] = [\n  { id: \"c\", symbol: \"C\", name: \"Carbon\", valence: 4, electronegativity: 2.55 },\n  { id: \"o\", symbol: \"O\", name: \"Oxygen\", valence: 2, electronegativity: 3.44 },\n  {\n    id: \"h1\",\n    symbol: \"H\",\n    name: \"Hydrogen\",\n    valence: 1,\n    electronegativity: 2.2,\n  },\n  {\n    id: \"h2\",\n    symbol: \"H\",\n    name: \"Hydrogen\",\n    valence: 1,\n    electronegativity: 2.2,\n  },\n];\n\nconst DEFAULT_BONDS: MolecularBond[] = [\n  {\n    id: \"c-o\",\n    from: \"c\",\n    to: \"o\",\n    strength: 0.82,\n    type: \"covalent\",\n    resonance: 0.4,\n  },\n  { id: \"c-h1\", from: \"c\", to: \"h1\", strength: 0.61, type: \"covalent\" },\n  { id: \"c-h2\", from: \"c\", to: \"h2\", strength: 0.63, type: \"covalent\" },\n];\n\nconst bondColors: Record<Required<MolecularBond>[\"type\"], string> = {\n  ionic: \"from-blue-500/70 to-sky-500/40\",\n  covalent: \"from-purple-500/70 to-fuchsia-500/40\",\n  hydrogen: \"from-emerald-400/70 to-teal-500/30\",\n  \"van-der-waals\": \"from-amber-400/70 to-orange-400/40\",\n};\n\nexport function MolecularBondingInterface({\n  className,\n  molecules = DEFAULT_MOLECULES,\n  bonds = DEFAULT_BONDS,\n  onInspectBond,\n}: MolecularBondingInterfaceProps) {\n  const moleculeMap = useMemo(() => {\n    const dictionary = new Map<string, MoleculeNode>();\n    molecules.forEach((molecule) => {\n      dictionary.set(molecule.id, molecule);\n    });\n    return dictionary;\n  }, [molecules]);\n\n  return (\n    <OptimizedGlass\n      role=\"group\"\n      aria-label=\"Molecular bonding interface\"\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-white/10 via-white/5 to-white/8\",\n        className\n      )}\n    >\n      <header className=\"glass-space-y-1\">\n        <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n          Molecular Bonding Interface\n        </h2>\n        <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n          Visualize complex bonding interactions with electronegativity and\n          resonance indicators.\n        </p>\n      </header>\n\n      <div className=\"glass-grid glass-gap-4 md:glass-grid-cols-[minmax(0,240px)_1fr]\">\n        <section className=\"glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-4 glass-backdrop-blur\">\n          <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-80 glass-uppercase glass-tracking-wide\">\n            Molecules\n          </h3>\n          <ul className=\"glass-mt-3 glass-space-y-3 glass-text-sm\">\n            {molecules.map((molecule) => (\n              <li\n                key={molecule.id}\n                className=\"glass-flex glass-items-center glass-justify-between glass-radius-xl glass-border glass-border-white/10 glass-px-3 glass-py-2 glass-text-primary-opacity-85\"\n              >\n                <div className=\"glass-flex glass-items-center glass-gap-3\">\n                  <span className=\"glass-flex glass-h-9 glass-w-9 glass-items-center glass-justify-center glass-radius-full glass-surface-subtle/10 glass-text-base glass-font-semibold\">\n                    {molecule.symbol}\n                  </span>\n                  <span>\n                    <div className=\"glass-font-medium glass-text-primary\">\n                      {molecule.name}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                      Valence: {molecule.valence ?? \"\u2014\"} | EN:{\" \"}\n                      {molecule.electronegativity?.toFixed(2) ?? \"\u2014\"}\n                    </div>\n                  </span>\n                </div>\n                {typeof molecule.charge === \"number\" && (\n                  <span\n                    className={cn(\n                      \"text-xs font-semibold\",\n                      molecule.charge >= 0\n                        ? \"text-emerald-300\"\n                        : \"text-rose-300\"\n                    )}\n                  >\n                    {molecule.charge >= 0\n                      ? `+${molecule.charge}`\n                      : molecule.charge}\n                  </span>\n                )}\n              </li>\n            ))}\n          </ul>\n        </section>\n\n        <section className=\"glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-4 glass-backdrop-blur\">\n          <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-80 glass-uppercase glass-tracking-wide\">\n            Bond Network\n          </h3>\n          <div className=\"glass-mt-4 glass-grid glass-gap-3 glass-text-sm\">\n            {bonds.map((bond) => {\n              const source = moleculeMap.get(bond.from);\n              const target = moleculeMap.get(bond.to);\n              if (!source || !target) return null;\n\n              const gradient = bond.type\n                ? bondColors[bond.type]\n                : \"from-slate-500/60 to-slate-700/30\";\n              return (\n                <button\n                  key={bond.id}\n                  type=\"button\"\n                  onClick={() => onInspectBond?.(bond)}\n                  className={cn(\n                    \"w-full rounded-2xl border border-white/10 px-4 py-3 text-left transition hover:border-white/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-400 glass-focus glass-touch-target glass-contrast-guard\",\n                    \"bg-gradient-to-r\",\n                    gradient\n                  )}\n                >\n                  <div className=\"glass-flex glass-items-center glass-justify-between glass-gap-4 glass-text-primary\">\n                    <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-sm\">\n                      <span className=\"glass-font-semibold\">\n                        {source.symbol}\n                      </span>\n                      <span className=\"glass-text-primary-glass-opacity-60\">\n                        \u21C4\n                      </span>\n                      <span className=\"glass-font-semibold\">\n                        {target.symbol}\n                      </span>\n                    </div>\n                    <span className=\"glass-text-xs glass-uppercase glass-tracking-wide glass-text-primary-glass-opacity-80\">\n                      {bond.type ?? \"unknown\"}\n                    </span>\n                  </div>\n\n                  <div className=\"glass-mt-3 glass-grid glass-gap-2 glass-text-xs glass-text-primary-glass-opacity-80 sm:glass-grid-cols-2\">\n                    <div className=\"glass-flex glass-items-center glass-justify-between\">\n                      <span>Strength Index</span>\n                      <span className=\"glass-font-semibold glass-text-primary\">\n                        {(bond.strength * 100).toFixed(0)}%\n                      </span>\n                    </div>\n                    {typeof bond.resonance === \"number\" && (\n                      <div className=\"glass-flex glass-items-center glass-justify-between\">\n                        <span>Resonance</span>\n                        <span className=\"glass-font-semibold glass-text-primary-glass-opacity-90\">\n                          {(bond.resonance * 100).toFixed(0)}%\n                        </span>\n                      </div>\n                    )}\n                  </div>\n                </button>\n              );\n            })}\n          </div>\n        </section>\n      </div>\n    </OptimizedGlass>\n  );\n}\n\nexport default MolecularBondingInterface;\n", "\"use client\";\nimport React, { useCallback, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\n\nexport interface GestureDimension {\n  axis: \"x\" | \"y\" | \"z\" | \"time\" | \"pressure\" | \"rotation\";\n  weight?: number;\n  sensitivity?: number;\n}\n\nexport interface GestureDefinition {\n  id: string;\n  name: string;\n  pattern: string;\n  dimensions: GestureDimension[];\n  description?: string;\n  baselineConfidence?: number;\n}\n\nexport interface MultiDimensionalGestureRecognizerProps {\n  gestures?: GestureDefinition[];\n  onRecognize?: (gesture: GestureDefinition) => void;\n  className?: string;\n  showConfidence?: boolean;\n}\n\nconst DEFAULT_GESTURES: GestureDefinition[] = [\n  {\n    id: \"quantum-loop\",\n    name: \"Quantum Loop\",\n    pattern: \"spiral-clockwise\",\n    dimensions: [\n      { axis: \"x\", weight: 0.4, sensitivity: 0.7 },\n      { axis: \"y\", weight: 0.4, sensitivity: 0.7 },\n      { axis: \"z\", weight: 0.2, sensitivity: 0.6 },\n      { axis: \"rotation\", weight: 0.3, sensitivity: 0.8 },\n    ],\n    description: \"Circular gesture with rising elevation and gentle rotation.\",\n    baselineConfidence: 0.82,\n  },\n  {\n    id: \"phase-shift\",\n    name: \"Phase Shift\",\n    pattern: \"figure-eight\",\n    dimensions: [\n      { axis: \"time\", weight: 0.2, sensitivity: 0.5 },\n      { axis: \"pressure\", weight: 0.25, sensitivity: 0.6 },\n      { axis: \"x\", weight: 0.35, sensitivity: 0.65 },\n      { axis: \"y\", weight: 0.35, sensitivity: 0.65 },\n    ],\n    description:\n      \"Alternating infinity loop signalling intent to switch contexts.\",\n    baselineConfidence: 0.74,\n  },\n  {\n    id: \"portal-drag\",\n    name: \"Portal Drag\",\n    pattern: \"arc-downward\",\n    dimensions: [\n      { axis: \"z\", weight: 0.5, sensitivity: 0.8 },\n      { axis: \"pressure\", weight: 0.3, sensitivity: 0.7 },\n      { axis: \"time\", weight: 0.2, sensitivity: 0.45 },\n    ],\n    description: \"Pull motion to reveal immersive overlays.\",\n    baselineConfidence: 0.69,\n  },\n];\n\nconst dimensionLabel: Record<GestureDimension[\"axis\"], string> = {\n  x: \"Lateral\",\n  y: \"Vertical\",\n  z: \"Depth\",\n  time: \"Temporal\",\n  pressure: \"Pressure\",\n  rotation: \"Rotation\",\n};\n\nexport function MultiDimensionalGestureRecognizer({\n  gestures = DEFAULT_GESTURES,\n  onRecognize,\n  className,\n  showConfidence = true,\n}: MultiDimensionalGestureRecognizerProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [activeGestureId, setActiveGestureId] = useState<string | null>(null);\n\n  const summarizedGestures = useMemo(() => {\n    return gestures.length > 0 ? gestures : DEFAULT_GESTURES;\n  }, [gestures]);\n\n  const handleRecognize = useCallback(\n    (gesture: GestureDefinition) => {\n      setActiveGestureId(gesture.id);\n      onRecognize?.(gesture);\n    },\n    [onRecognize]\n  );\n\n  return (\n    <OptimizedGlass\n      role=\"application\"\n      aria-label=\"Multi-dimensional gesture recognizer\"\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-white/10 via-indigo-500/15 to-white/5\",\n        className\n      )}\n    >\n      <header className=\"glass-flex glass-flex-wrap glass-items-center glass-justify-between glass-gap-4\">\n        <div>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n            Multi-dimensional Gesture Recognizer\n          </h2>\n          <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n            Analyse six-axis motion patterns with adaptive sensitivity tuning.\n          </p>\n        </div>\n        {showConfidence && activeGestureId && (\n          <span className=\"glass-radius-full glass-border glass-border-white/10 glass-surface-subtle/10 glass-px-3 glass-py-1 glass-text-xs glass-text-primary-glass-opacity-80\">\n            Active gesture:{\" \"}\n            {summarizedGestures.find((g) => g.id === activeGestureId)?.name ??\n              \"\u2014\"}\n          </span>\n        )}\n      </header>\n\n      <div className=\"glass-grid glass-gap-4 lg:glass-grid-cols-3\">\n        {summarizedGestures.map((gesture) => (\n          <button\n            key={gesture.id}\n            type=\"button\"\n            onClick={() => handleRecognize(gesture)}\n            className={cn(\n              \"relative flex h-full flex-col gap-4 rounded-2xl border border-white/10 bg-white/5 p-4 text-left transition\",\n              \"hover:border-white/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sky-400 glass-focus glass-touch-target glass-contrast-guard\",\n              activeGestureId === gesture.id\n                ? \"border-sky-400/60 shadow-[0_0_30px_-10px_rgba(125,211,252,0.8)]\"\n                : undefined\n            )}\n          >\n            <div>\n              <h3 className=\"glass-text-lg glass-font-medium glass-text-primary\">\n                {gesture.name}\n              </h3>\n              <p className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                {gesture.description}\n              </p>\n            </div>\n\n            <dl className=\"glass-grid glass-gap-2 glass-text-xs glass-text-primary-opacity-70\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <dt className=\"glass-uppercase glass-tracking-wide\">Pattern</dt>\n                <dd className=\"glass-font-semibold glass-text-primary-opacity-85\">\n                  {gesture.pattern}\n                </dd>\n              </div>\n              {showConfidence && (\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <dt className=\"glass-uppercase glass-tracking-wide\">\n                    Baseline confidence\n                  </dt>\n                  <dd className=\"glass-font-semibold glass-text-primary\">\n                    {(\n                      Math.min(\n                        0.99,\n                        Math.max(0, gesture.baselineConfidence ?? 0.5)\n                      ) * 100\n                    ).toFixed(0)}\n                    %\n                  </dd>\n                </div>\n              )}\n            </dl>\n\n            <div className=\"glass-mt-auto glass-space-y-2\">\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-primary-glass-opacity-50\">\n                <span>Dimensional weights</span>\n                {!prefersReducedMotion && (\n                  <span className=\"glass-font-semibold glass-text-primary-opacity-70\">\n                    {gesture.dimensions.length} axes\n                  </span>\n                )}\n              </div>\n              <ul className=\"glass-grid glass-gap-2 glass-text-xs glass-text-primary\">\n                {gesture.dimensions.map((dimension) => (\n                  <li\n                    key={`${gesture.id}-${dimension.axis}`}\n                    className=\"glass-flex glass-items-center glass-justify-between glass-radius-xl glass-border glass-border-white/5 glass-surface-subtle/5 glass-px-3 glass-py-2\"\n                  >\n                    <span className=\"glass-font-medium glass-text-primary-opacity-85\">\n                      {dimensionLabel[dimension.axis]}\n                    </span>\n                    <span className=\"glass-text-primary-glass-opacity-60\">\n                      Weight {(dimension.weight ?? 0.25).toFixed(2)} | Sens{\" \"}\n                      {(dimension.sensitivity ?? 0.5).toFixed(2)}\n                    </span>\n                  </li>\n                ))}\n              </ul>\n            </div>\n          </button>\n        ))}\n      </div>\n    </OptimizedGlass>\n  );\n}\n\nexport default MultiDimensionalGestureRecognizer;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION, COLORS } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\nexport interface CoherenceData {\n  timestamp: number;\n  coherence: number;\n  phase: number;\n  amplitude: number;\n  frequency: number;\n  decoherenceRate: number;\n  entanglementStrength?: number;\n}\n\nexport interface GlassCoherenceIndicatorProps {\n  coherenceLevel: number;\n  phase?: number;\n  decoherenceRate?: number;\n  entanglementStrength?: number;\n  historicalData?: CoherenceData[];\n  showPhaseIndicator?: boolean;\n  showWaveVisualization?: boolean;\n  showDecoherenceRate?: boolean;\n  showEntanglement?: boolean;\n  realTimeMode?: boolean;\n  coherenceThreshold?: number;\n  alertOnDecoherence?: boolean;\n  animationSpeed?: number;\n  onCoherenceLoss?: (coherenceLevel: number) => void;\n  onPhaseChange?: (phase: number) => void;\n  className?: string;\n}\n\nconst phaseColors = {\n  0: \"var(--glass-color-error)\", // 0\u00B0\n  90: \"hsl(var(--glass-color-info))\", // 90\u00B0\n  180: \"hsl(var(--glass-color-primary))\", // 180\u00B0\n  270: \"hsl(var(--glass-color-success))\", // 270\u00B0\n};\n\nconst toFiniteNumber = (value: unknown, fallback = 0): number => {\n  const numericValue =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim() !== \"\"\n        ? Number(value)\n        : fallback;\n  return Number.isFinite(numericValue) ? numericValue : fallback;\n};\n\nconst clamp = (value: unknown, min = 0, max = 1, fallback = 0): number => {\n  const numericValue = toFiniteNumber(value, fallback);\n  return Math.min(max, Math.max(min, numericValue));\n};\n\nconst getPhaseColor = (phase: number): string => {\n  const safePhase = toFiniteNumber(phase);\n  const normalizedPhase = ((safePhase % (2 * Math.PI)) / (2 * Math.PI)) * 360;\n\n  if (normalizedPhase < 45 || normalizedPhase >= 315) return phaseColors[0];\n  if (normalizedPhase < 135) return phaseColors[90];\n  if (normalizedPhase < 225) return phaseColors[180];\n  return phaseColors[270];\n};\n\nexport const GlassCoherenceIndicator = forwardRef<\n  HTMLDivElement,\n  GlassCoherenceIndicatorProps\n>(\n  (\n    {\n      coherenceLevel,\n      phase = 0,\n      decoherenceRate = 0.02,\n      entanglementStrength = 0,\n      historicalData = [],\n      showPhaseIndicator = true,\n      showWaveVisualization = true,\n      showDecoherenceRate = true,\n      showEntanglement = true,\n      realTimeMode = false,\n      coherenceThreshold = 0.3,\n      alertOnDecoherence = true,\n      animationSpeed = 1,\n      onCoherenceLoss,\n      onPhaseChange,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const safeCoherenceLevel = clamp(coherenceLevel);\n    const safePhase = toFiniteNumber(phase);\n    const safeDecoherenceRate = clamp(decoherenceRate, 0, 1, 0.02);\n    const safeEntanglementStrength = clamp(entanglementStrength);\n    const safeCoherenceThreshold = clamp(coherenceThreshold, 0, 1, 0.3);\n    const safeAnimationSpeed = toFiniteNumber(animationSpeed, 1);\n    const prefersReducedMotion = useReducedMotion();\n    const [currentCoherence, setCurrentCoherence] =\n      useState(safeCoherenceLevel);\n    const [currentPhase, setCurrentPhase] = useState(safePhase);\n    const [animationTime, setAnimationTime] = useState(0);\n    const [isDecohering, setIsDecohering] = useState(false);\n    const [coherenceHistory, setCoherenceHistory] =\n      useState<CoherenceData[]>(historicalData);\n    const id = useA11yId(\"glass-coherence-indicator\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Real-time coherence simulation\n    useEffect(() => {\n      if (!realTimeMode) return;\n\n      const interval = setInterval(() => {\n        setCurrentCoherence((prev: any) => {\n          const noise = (Math.random() - 0.5) * 0.1;\n          const decay = clamp(prev) * (1 - safeDecoherenceRate);\n          const newCoherence = Math.max(0, Math.min(1, decay + noise));\n\n          if (\n            newCoherence < safeCoherenceThreshold &&\n            prev >= safeCoherenceThreshold\n          ) {\n            setIsDecohering(true);\n            if (alertOnDecoherence) {\n              onCoherenceLoss?.(newCoherence);\n            }\n          } else if (newCoherence >= safeCoherenceThreshold) {\n            setIsDecohering(false);\n          }\n\n          return newCoherence;\n        });\n\n        setCurrentPhase((prev: any) => {\n          const newPhase =\n            (toFiniteNumber(prev) + 0.1 * safeAnimationSpeed) % (2 * Math.PI);\n          onPhaseChange?.(newPhase);\n          return newPhase;\n        });\n\n        setAnimationTime((prev: any) => prev + 0.1 * safeAnimationSpeed);\n      }, 100);\n\n      return () => clearInterval(interval);\n    }, [\n      realTimeMode,\n      safeDecoherenceRate,\n      safeCoherenceThreshold,\n      alertOnDecoherence,\n      safeAnimationSpeed,\n      onCoherenceLoss,\n      onPhaseChange,\n    ]);\n\n    // Update historical data\n    useEffect(() => {\n      if (realTimeMode) {\n        const newDataPoint: CoherenceData = {\n          timestamp: Date.now(),\n          coherence: clamp(currentCoherence),\n          phase: toFiniteNumber(currentPhase),\n          amplitude: clamp(currentCoherence),\n          frequency: 1.0,\n          decoherenceRate: safeDecoherenceRate,\n          entanglementStrength: safeEntanglementStrength,\n        };\n\n        setCoherenceHistory(\n          (prev: any) => [...prev.slice(-49), newDataPoint] // Keep last 50 points\n        );\n      }\n    }, [\n      currentCoherence,\n      currentPhase,\n      realTimeMode,\n      safeDecoherenceRate,\n      safeEntanglementStrength,\n    ]);\n\n    const coherenceStatus = useMemo(() => {\n      const safeCurrentCoherence = clamp(currentCoherence);\n      if (safeCurrentCoherence >= 0.8)\n        return {\n          label: \"Highly Coherent\",\n          color: \"hsl(var(--glass-color-success))\",\n        };\n      if (safeCurrentCoherence >= 0.5)\n        return {\n          label: \"Moderately Coherent\",\n          color: \"hsl(var(--glass-color-warning))\",\n        };\n      if (safeCurrentCoherence >= 0.2)\n        return {\n          label: \"Low Coherence\",\n          color: \"hsl(var(--glass-color-danger))\",\n        };\n      return { label: \"Decoherent\", color: \"hsl(var(--glass-color-danger))\" };\n    }, [currentCoherence]);\n\n    const WaveVisualization = () => {\n      const points = 100;\n      const waveData = useMemo(() => {\n        return Array.from({ length: points }, (_, i) => {\n          const x = (i / points) * 4 * Math.PI;\n          const amplitude = clamp(currentCoherence);\n          const phaseValue = toFiniteNumber(currentPhase);\n          const wave1 = amplitude * Math.sin(x + phaseValue);\n          const wave2 =\n            safeEntanglementStrength *\n            amplitude *\n            Math.sin(x + phaseValue + Math.PI / 2);\n          return {\n            x: (i / points) * 300,\n            y1: 50 + wave1 * 30,\n            y2: 50 + wave2 * 20,\n            combined: 50 + (wave1 + wave2 * 0.5) * 25,\n          };\n        });\n      }, [currentCoherence, currentPhase, safeEntanglementStrength, points]);\n\n      return (\n        <svg\n          width=\"300\"\n          height=\"100\"\n          className={cn(\n            \"glass-border glass-border-primary glass-radius glass-surface-dark\"\n          )}\n        >\n          {/* Grid lines */}\n          <defs>\n            <pattern\n              id=\"grid\"\n              width=\"20\"\n              height=\"20\"\n              patternUnits=\"userSpaceOnUse\"\n            >\n              <path\n                d=\"M 20 0 L 0 0 0 20\"\n                fill=\"none\"\n                stroke=\"var(--glass-bg-default)\"\n                strokeWidth=\"1\"\n              />\n            </pattern>\n          </defs>\n          <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n\n          {/* Center line */}\n          <line\n            x1=\"0\"\n            y1=\"50\"\n            x2=\"300\"\n            y2=\"50\"\n            stroke=\"var(--glass-bg-hover)\"\n            strokeWidth=\"1\"\n            strokeDasharray=\"5,5\"\n          />\n\n          {/* Primary wave */}\n          <path\n            d={`M ${waveData.map((p: any) => `${p.x} ${p.y1}`).join(\" L \")}`}\n            fill=\"none\"\n            stroke={getPhaseColor(currentPhase)}\n            strokeWidth=\"2\"\n            opacity={clamp(currentCoherence)}\n          />\n\n          {/* Entangled wave */}\n          {safeEntanglementStrength > 0 && (\n            <path\n              d={`M ${waveData.map((p: any) => `${p.x} ${p.y2}`).join(\" L \")}`}\n              fill=\"none\"\n              stroke=\"var(--glass-color-secondary)\"\n              strokeWidth=\"1.5\"\n              opacity={safeEntanglementStrength * 0.8}\n              strokeDasharray=\"3,3\"\n            />\n          )}\n\n          {/* Combined interference pattern */}\n          {safeEntanglementStrength > 0.3 && (\n            <path\n              d={`M ${waveData.map((p: any) => `${p.x} ${p.combined}`).join(\" L \")}`}\n              fill=\"none\"\n              stroke=\"var(--glass-white)\"\n              strokeWidth=\"1\"\n              opacity={0.6}\n            />\n          )}\n\n          {/* Decoherence visualization */}\n          {isDecohering && (\n            <g opacity=\"0.7\">\n              {Array.from({ length: 20 }, (_, i) => (\n                <circle\n                  key={i}\n                  cx={Math.random() * 300}\n                  cy={Math.random() * 100}\n                  r={Math.random() * 3 + 1}\n                  fill=\"hsl(var(--glass-color-danger))\"\n                  opacity={Math.random() * 0.8}\n                >\n                  <animate\n                    attributeName=\"opacity\"\n                    values=\"0;0.8;0\"\n                    dur={`${1 + Math.random()}s`}\n                    repeatCount=\"indefinite\"\n                  />\n                </circle>\n              ))}\n            </g>\n          )}\n        </svg>\n      );\n    };\n\n    const phaseVector = {\n      x:\n        48 +\n        Math.cos(toFiniteNumber(currentPhase) - Math.PI / 2) *\n          (30 * clamp(currentCoherence)),\n      y:\n        48 +\n        Math.sin(toFiniteNumber(currentPhase) - Math.PI / 2) *\n          (30 * clamp(currentCoherence)),\n    };\n\n    const PhaseIndicator = () => (\n      <div className={cn(\"glass-relative glass-w-24 glass-h-24\")}>\n        <svg\n          width=\"96\"\n          height=\"96\"\n          className={cn(\"glass-absolute glass-inset-0\")}\n        >\n          {/* Outer circle */}\n          <circle\n            cx=\"48\"\n            cy=\"48\"\n            r=\"40\"\n            fill=\"none\"\n            stroke=\"var(--glass-bg-hover)\"\n            strokeWidth=\"2\"\n          />\n\n          {/* Phase markers */}\n          {[0, 90, 180, 270].map((angle: any) => (\n            <g key={angle}>\n              <line\n                x1={48 + Math.cos((angle * Math.PI) / 180) * 35}\n                y1={48 + Math.sin((angle * Math.PI) / 180) * 35}\n                x2={48 + Math.cos((angle * Math.PI) / 180) * 42}\n                y2={48 + Math.sin((angle * Math.PI) / 180) * 42}\n                stroke=\"var(--glass-border-hover)\"\n                strokeWidth=\"2\"\n              />\n              <text\n                x={48 + Math.cos((angle * Math.PI) / 180) * 30}\n                y={48 + Math.sin((angle * Math.PI) / 180) * 30 + 3}\n                textAnchor=\"middle\"\n                fontSize=\"10\"\n                fill=\"color-mix(in srgb, var(--glass-white) 70%, transparent)\"\n              >\n                {angle}\u00B0\n              </text>\n            </g>\n          ))}\n\n          {/* Phase vector */}\n          <motion.line\n            x1=\"48\"\n            y1=\"48\"\n            x2={phaseVector.x}\n            y2={phaseVector.y}\n            stroke={getPhaseColor(currentPhase)}\n            strokeWidth=\"3\"\n            strokeLinecap=\"round\"\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    x2: phaseVector.x,\n                    y2: phaseVector.y,\n                  }\n            }\n            transition={\n              shouldAnimate\n                ? { duration: ANIMATION.DURATION.fast / 1000 }\n                : { duration: 0 }\n            }\n          />\n\n          {/* Center dot */}\n          <circle cx=\"48\" cy=\"48\" r=\"3\" fill={getPhaseColor(currentPhase)} />\n        </svg>\n\n        <div\n          className={cn(\n            \"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n          )}\n        >\n          <div className={cn(\"glass-text-center\")}>\n            <div\n              className={cn(\n                \"glass-text-xs glass-text-primary glass-font-medium\"\n              )}\n            >\n              {((toFiniteNumber(currentPhase) * 180) / Math.PI).toFixed(0)}\u00B0\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={cn(\"glass-p-4 glass-space-y-4\", className)}\n        {...props}\n      >\n        {/* Header */}\n        <div\n          className={cn(\"glass-flex glass-items-center glass-justify-between\")}\n        >\n          <div>\n            <h3\n              className={cn(\n                \"glass-text-lg glass-font-semibold glass-text-primary\"\n              )}\n            >\n              Quantum Coherence\n            </h3>\n            <p className={cn(\"glass-text-sm glass-text-secondary\")}>\n              {coherenceStatus.label}\n            </p>\n          </div>\n\n          <div className={cn(\"glass-flex glass-items-center glass-space-x-4\")}>\n            {isDecohering && alertOnDecoherence && (\n              <motion.div\n                className={cn(\n                  \"glass-flex glass-items-center glass-space-x-1 glass-text-danger\"\n                )}\n                animate={prefersReducedMotion ? {} : { opacity: [1, 0.5, 1] }}\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        duration: ANIMATION.DURATION.slower / 1000,\n                        repeat: Infinity,\n                      }\n                }\n              >\n                <span>\u26A0\uFE0F</span>\n                <span className={cn(\"glass-text-xs glass-font-medium\")}>\n                  Decoherence\n                </span>\n              </motion.div>\n            )}\n\n            {realTimeMode && (\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-space-x-1 glass-text-success\"\n                )}\n              >\n                <div\n                  className={cn(\n                    \"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\"\n                  )}\n                />\n                <span className={cn(\"glass-text-xs\")}>Live</span>\n              </div>\n            )}\n          </div>\n        </div>\n\n        {/* Main coherence display */}\n        <div className={cn(\"glass-flex glass-items-center glass-space-x-6\")}>\n          {/* Coherence level */}\n          <div className={cn(\"glass-flex-1\")}>\n            <div\n              className={cn(\n                \"glass-flex glass-items-center glass-justify-between glass-mb-2\"\n              )}\n            >\n              <span className={cn(\"glass-text-sm glass-text-primary\")}>\n                Coherence Level\n              </span>\n              <span\n                className={cn(\n                  \"glass-text-sm glass-font-medium glass-text-primary\"\n                )}\n              >\n                {(clamp(currentCoherence) * 100).toFixed(1)}%\n              </span>\n            </div>\n\n            <div\n              className={cn(\n                \"glass-relative glass-h-4 glass-surface-subtle glass-radius-full glass-overflow-hidden\"\n              )}\n            >\n              <motion.div\n                className={cn(\"glass-h-full glass-radius-full\")}\n                style={{\n                  background: `linear-gradient(90deg, ${coherenceStatus.color} 0%, ${coherenceStatus.color}80 100%)`,\n                }}\n                animate={{\n                  width: `${clamp(currentCoherence) * 100}%`,\n                }}\n                transition={\n                  shouldAnimate\n                    ? { duration: ANIMATION.DURATION.normal / 1000 }\n                    : { duration: 0 }\n                }\n              />\n\n              {/* Coherence threshold indicator */}\n              <div\n                className={cn(\n                  \"glass-absolute glass-top-0 glass-h-full glass-w-0.5 glass-surface-muted\"\n                )}\n                style={{ left: `${safeCoherenceThreshold * 100}%` }}\n              />\n            </div>\n\n            <div\n              className={cn(\n                \"glass-flex glass-justify-between glass-mt-1 glass-text-xs glass-text-muted\"\n              )}\n            >\n              <span>0%</span>\n              <span>\n                Threshold ({(safeCoherenceThreshold * 100).toFixed(0)}%)\n              </span>\n              <span>100%</span>\n            </div>\n          </div>\n\n          {/* Phase indicator */}\n          {showPhaseIndicator && <PhaseIndicator />}\n        </div>\n\n        {/* Wave visualization */}\n        {showWaveVisualization && (\n          <div>\n            <h4\n              className={cn(\n                \"glass-text-sm glass-font-medium glass-text-primary glass-mb-2\"\n              )}\n            >\n              Wave Function\n            </h4>\n            <WaveVisualization />\n          </div>\n        )}\n\n        {/* Statistics */}\n        <div\n          className={cn(\n            \"glass-p-3 glass-radius-lg glass-border glass-border-subtle glass-space-y-2\",\n            createGlassStyle({ blur: \"sm\", opacity: 0.6 }).background\n          )}\n        >\n          <div\n            className={cn(\n              \"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4 glass-text-sm\"\n            )}\n          >\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>Phase:</span>\n              <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                {((toFiniteNumber(currentPhase) * 180) / Math.PI).toFixed(1)}\u00B0\n              </div>\n            </div>\n\n            {showDecoherenceRate && (\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>Decoherence:</span>\n                <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {(safeDecoherenceRate * 100).toFixed(2)}%/s\n                </div>\n              </div>\n            )}\n\n            {showEntanglement && safeEntanglementStrength > 0 && (\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>\n                  Entanglement:\n                </span>\n                <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {(safeEntanglementStrength * 100).toFixed(0)}%\n                </div>\n              </div>\n            )}\n\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>Status:</span>\n              <div\n                className={cn(\"glass-font-medium\")}\n                style={{ color: coherenceStatus.color }}\n              >\n                {clamp(currentCoherence) >= safeCoherenceThreshold\n                  ? \"Stable\"\n                  : \"Unstable\"}\n              </div>\n            </div>\n          </div>\n\n          {/* Historical data summary */}\n          {coherenceHistory.length > 10 && (\n            <div\n              className={cn(\"glass-pt-2 glass-border-t glass-border-subtle\")}\n            >\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-secondary\"\n                )}\n              >\n                <span>Avg Coherence (1m):</span>\n                <span>\n                  {(\n                    (coherenceHistory\n                      .slice(-10)\n                      .reduce((sum, d) => sum + d.coherence, 0) /\n                      10) *\n                    100\n                  ).toFixed(1)}\n                  %\n                </span>\n              </div>\n            </div>\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n", "'use client';\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useRef, useMemo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface ProbabilityPoint {\n  id: string;\n  x: number;\n  y: number;\n  z: number;\n  probability: number;\n  uncertainty: number;\n  waveFunction: number;\n  phase: number;\n  observationCount: number;\n  lastObserved?: number;\n}\n\nexport interface GlassProbabilityCloudProps {\n  width?: number;\n  height?: number;\n  depth?: number;\n  probabilityPoints?: ProbabilityPoint[];\n  uncertaintyPrinciple?: boolean;\n  quantumFluctuations?: boolean;\n  observerEffect?: boolean;\n  heisenbergUncertainty?: number;\n  waveParticleDuality?: boolean;\n  showProbabilityDensity?: boolean;\n  showWaveFunction?: boolean;\n  showUncertaintyBounds?: boolean;\n  animationSpeed?: number;\n  particleCount?: number;\n  measurementPrecision?: number;\n  realTimeMode?: boolean;\n  onMeasurement?: (point: ProbabilityPoint) => void;\n  onUncertaintyChange?: (uncertainty: number) => void;\n  className?: string;\n}\n\nconst generateQuantumNoise = (amplitude: number = 0.1) =>\n  (Math.random() - 0.5) * amplitude * 2;\n\nconst waveFunction = (x: number, y: number, t: number, frequency: number = 1) =>\n  Math.sin(x * frequency + t) * Math.cos(y * frequency + t * 0.7);\n\nconst probabilityDensity = (waveAmp: number) => waveAmp * waveAmp;\n\nexport const GlassProbabilityCloud = forwardRef<\n  HTMLDivElement,\n  GlassProbabilityCloudProps\n>(\n  (\n    {\n      width = 600,\n      height = 400,\n      depth = 200,\n      probabilityPoints = [],\n      uncertaintyPrinciple = true,\n      quantumFluctuations = true,\n      observerEffect = true,\n      heisenbergUncertainty = 0.5,\n      waveParticleDuality = true,\n      showProbabilityDensity = true,\n      showWaveFunction = true,\n      showUncertaintyBounds = true,\n      animationSpeed = 1,\n      particleCount = 100,\n      measurementPrecision = 0.1,\n      realTimeMode = false,\n      onMeasurement,\n      onUncertaintyChange,\n      className=\"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const [quantumTime, setQuantumTime] = useState(0);\n    const [measurements, setMeasurements] = useState<\n      Array<{\n        point: ProbabilityPoint;\n        timestamp: number;\n        uncertainty: number;\n      }>\n    >([]);\n    const [particles, setParticles] = useState<ProbabilityPoint[]>([]);\n    const [totalUncertainty, setTotalUncertainty] = useState(\n      heisenbergUncertainty\n    );\n\n    // Motion preference hook\n    const { shouldAnimate } = useMotionPreference();\n\n    // Helper function to respect motion preferences\n    const respectMotionPreference = (config: any) =>\n      shouldAnimate ? config : { duration: 0 };\n    const [isObserved, setIsObserved] = useState(false);\n    const id = useA11yId(\"glass-probability-cloud\");\n\n    // Initialize quantum particles\n    useEffect(() => {\n      const initialParticles: ProbabilityPoint[] = Array.from(\n        { length: particleCount },\n        (_, i) => ({\n          id: `particle-${i}`,\n          x: Math.random() * width,\n          y: Math.random() * height,\n          z: Math.random() * depth,\n          probability: Math.random(),\n          uncertainty: heisenbergUncertainty + generateQuantumNoise(0.1),\n          waveFunction: Math.random() * 2 - 1,\n          phase: Math.random() * Math.PI * 2,\n          observationCount: 0,\n        })\n      );\n\n      setParticles([...probabilityPoints, ...initialParticles]);\n    }, [\n      particleCount,\n      width,\n      height,\n      depth,\n      heisenbergUncertainty,\n      probabilityPoints,\n    ]);\n\n    // Quantum time evolution\n    useEffect(() => {\n      const interval = setInterval(() => {\n        setQuantumTime((prev: any) => prev + 0.1 * animationSpeed);\n      }, 16);\n      return () => clearInterval(interval);\n    }, [animationSpeed]);\n\n    // Update quantum system\n    useEffect(() => {\n      if (!realTimeMode) return;\n\n      const interval = setInterval(() => {\n        setParticles((prev: any) =>\n          prev.map((particle: any) => {\n            // Wave function evolution\n            const newWaveFunction = waveFunction(\n              (particle.x / width) * 4 * Math.PI,\n              (particle.y / height) * 4 * Math.PI,\n              quantumTime,\n              1 + particle.phase / Math.PI\n            );\n\n            // Probability density from wave function\n            const newProbability = probabilityDensity(newWaveFunction);\n\n            // Quantum fluctuations\n            let deltaX = 0,\n              deltaY = 0,\n              deltaZ = 0;\n            if (quantumFluctuations) {\n              const fluctuationStrength = particle.uncertainty * 0.5;\n              deltaX = generateQuantumNoise(fluctuationStrength);\n              deltaY = generateQuantumNoise(fluctuationStrength);\n              deltaZ = generateQuantumNoise(fluctuationStrength);\n            }\n\n            // Heisenberg uncertainty principle\n            let newUncertainty = particle.uncertainty;\n            if (uncertaintyPrinciple) {\n              const momentum = Math.sqrt(\n                deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ\n              );\n              const positionPrecision = 1 - momentum;\n              newUncertainty = Math.max(\n                heisenbergUncertainty,\n                1 / (positionPrecision + 0.1)\n              );\n            }\n\n            // Observer effect - collapse wave function when observed\n            if (observerEffect && isObserved) {\n              const distance = Math.sqrt(\n                Math.pow(particle.x - width / 2, 2) +\n                  Math.pow(particle.y - height / 2, 2)\n              );\n              if (distance < 50) {\n                return {\n                  ...particle,\n                  waveFunction: Math.sign(newWaveFunction) * 0.9,\n                  probability: 0.8,\n                  uncertainty: Math.max(0.1, particle.uncertainty * 0.5),\n                  observationCount: particle.observationCount + 1,\n                  lastObserved: Date.now(),\n                };\n              }\n            }\n\n            return {\n              ...particle,\n              x: Math.max(0, Math.min(width, particle.x + deltaX)),\n              y: Math.max(0, Math.min(height, particle.y + deltaY)),\n              z: Math.max(0, Math.min(depth, particle.z + deltaZ)),\n              waveFunction: newWaveFunction,\n              probability: Math.max(0.01, Math.min(1, newProbability + 0.1)),\n              uncertainty: Math.max(0.05, Math.min(2, newUncertainty)),\n              phase: (particle.phase + 0.05) % (2 * Math.PI),\n            };\n          })\n        );\n      }, 50);\n\n      return () => clearInterval(interval);\n    }, [\n      realTimeMode,\n      quantumTime,\n      width,\n      height,\n      depth,\n      uncertaintyPrinciple,\n      quantumFluctuations,\n      observerEffect,\n      heisenbergUncertainty,\n      isObserved,\n    ]);\n\n    // Update total uncertainty\n    useEffect(() => {\n      const avgUncertainty =\n        particles.reduce((sum, p) => sum + p.uncertainty, 0) / particles.length;\n      setTotalUncertainty(avgUncertainty || heisenbergUncertainty);\n      onUncertaintyChange?.(avgUncertainty);\n    }, [particles, heisenbergUncertainty, onUncertaintyChange]);\n\n    // Canvas rendering\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas\n      ctx.clearRect(0, 0, width, height);\n\n      // Background quantum field\n      if (showProbabilityDensity) {\n        const imageData = ctx.createImageData(width, height);\n        for (let x = 0; x < width; x += 4) {\n          for (let y = 0; y < height; y += 4) {\n            const wave = waveFunction(\n              (x / width) * 4 * Math.PI,\n              (y / height) * 4 * Math.PI,\n              quantumTime\n            );\n            const density = probabilityDensity(wave);\n            const intensity = Math.floor(density * 50 + 10);\n\n            const index = (y * width + x) * 4;\n            if (index < imageData.data.length - 3) {\n              imageData.data[index] = 100 + intensity; // R\n              imageData.data[index + 1] = 50 + intensity; // G\n              imageData.data[index + 2] = 200 + intensity; // B\n              imageData.data[index + 3] = 30; // A\n            }\n          }\n        }\n        ctx.putImageData(imageData, 0, 0);\n      }\n\n      // Draw particles\n      particles.forEach((particle: any) => {\n        const opacity =\n          observerEffect &&\n          particle.lastObserved &&\n          Date.now() - particle.lastObserved < 1000\n            ? 0.9\n            : particle.probability * 0.7 + 0.1;\n\n        // Particle size based on uncertainty\n        const baseSize = 2 + particle.uncertainty * 3;\n        const pulseSize = waveParticleDuality\n          ? baseSize * (1 + Math.sin(quantumTime * 3 + particle.phase) * 0.3)\n          : baseSize;\n\n        // Wave or particle rendering based on duality\n        if (waveParticleDuality && particle.uncertainty > 0.3) {\n          // Wave representation\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, pulseSize * 2, 0, 2 * Math.PI);\n          ctx.fillStyle = `rgba(100, 150, 255, ${opacity * 0.3})`;\n          ctx.fill();\n\n          // Wave rings\n          for (let i = 1; i <= 3; i++) {\n            ctx.beginPath();\n            ctx.arc(\n              particle.x,\n              particle.y,\n              pulseSize * i * 0.7,\n              0,\n              2 * Math.PI\n            );\n            ctx.strokeStyle = `rgba(150, 200, 255, ${(opacity * 0.2) / i})`;\n            ctx.lineWidth = 1;\n            ctx.stroke();\n          }\n        } else {\n          // Particle representation\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, pulseSize, 0, 2 * Math.PI);\n\n          const gradient = ctx.createRadialGradient(\n            particle.x,\n            particle.y,\n            0,\n            particle.x,\n            particle.y,\n            pulseSize\n          );\n          gradient.addColorStop(0, `rgba(255, 255, 255, ${opacity})`);\n          gradient.addColorStop(1, `rgba(100, 150, 255, ${opacity * 0.3})`);\n          ctx.fillStyle = gradient;\n          ctx.fill();\n        }\n\n        // Uncertainty bounds\n        if (showUncertaintyBounds && particle.uncertainty > 0.2) {\n          ctx.beginPath();\n          ctx.arc(\n            particle.x,\n            particle.y,\n            particle.uncertainty * 20,\n            0,\n            2 * Math.PI\n          );\n          ctx.strokeStyle = `rgba(255, 100, 100, ${particle.uncertainty * 0.3})`;\n          ctx.lineWidth = 1;\n          ctx.setLineDash([2, 3]);\n          ctx.stroke();\n          ctx.setLineDash([]);\n        }\n      });\n\n      // Wave function visualization\n      if (showWaveFunction) {\n        ctx.strokeStyle = \"rgba(200, 200, 255, 0.4)\";\n        ctx.lineWidth = 1;\n        ctx.beginPath();\n\n        for (let x = 0; x < width; x += 10) {\n          const wave = waveFunction(\n            (x / width) * 4 * Math.PI,\n            (height / 2 / height) * 4 * Math.PI,\n            quantumTime\n          );\n          const y = height / 2 + wave * 30;\n          if (x === 0) ctx.moveTo(x, y);\n          else ctx.lineTo(x, y);\n        }\n        ctx.stroke();\n\n        // Vertical wave function\n        ctx.beginPath();\n        for (let y = 0; y < height; y += 10) {\n          const wave = waveFunction(\n            (width / 2 / width) * 4 * Math.PI,\n            (y / height) * 4 * Math.PI,\n            quantumTime\n          );\n          const x = width / 2 + wave * 30;\n          if (y === 0) ctx.moveTo(x, y);\n          else ctx.lineTo(x, y);\n        }\n        ctx.stroke();\n      }\n    }, [\n      particles,\n      quantumTime,\n      width,\n      height,\n      showProbabilityDensity,\n      showWaveFunction,\n      showUncertaintyBounds,\n      waveParticleDuality,\n      observerEffect,\n    ]);\n\n    const handleCanvasClick = (e: React.MouseEvent<HTMLCanvasElement>) => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const rect = canvas.getBoundingClientRect();\n      const clickX = e.clientX - rect.left;\n      const clickY = e.clientY - rect.top;\n\n      // Find nearest particle for measurement\n      let nearestParticle: ProbabilityPoint | null = null;\n      let minDistance = Infinity;\n\n      particles.forEach((particle: any) => {\n        const distance = Math.sqrt(\n          Math.pow(particle.x - clickX, 2) + Math.pow(particle.y - clickY, 2)\n        );\n        if (distance < minDistance && distance < 30) {\n          minDistance = distance;\n          nearestParticle = particle;\n        }\n      });\n\n      if (nearestParticle) {\n        // Perform measurement\n        const measurement = {\n          point: nearestParticle as ProbabilityPoint,\n          timestamp: Date.now(),\n          uncertainty: (nearestParticle as ProbabilityPoint).uncertainty,\n        };\n\n        setMeasurements((prev: any) => [...prev.slice(-9), measurement]);\n        onMeasurement?.(nearestParticle);\n\n        // Update particle due to measurement\n        setParticles((prev: any) =>\n          prev.map((p: any) =>\n            p.id === nearestParticle!.id\n              ? {\n                  ...p,\n                  observationCount: p.observationCount + 1,\n                  lastObserved: Date.now(),\n                  uncertainty: Math.max(0.1, p.uncertainty * 0.7),\n                }\n              : p\n          )\n        );\n      }\n    };\n\n    const averageProbability = useMemo(\n      () =>\n        particles.reduce((sum, p) => sum + p.probability, 0) /\n          particles.length || 0,\n      [particles]\n    );\n\n    const quantumCoherence = useMemo(\n      () => 1 - (totalUncertainty - heisenbergUncertainty),\n      [totalUncertainty, heisenbergUncertainty]\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={`relative ${className}`}\n        {...props}\n      >\n        <div className='glass-p-4 glass-space-y-4'>\n          {/* Header */}\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div>\n              <h2\n                className={cn(\n                  \"glass-text-xl glass-font-semibold glass-text-primary\"\n                )}\n              >\n                Probability Cloud\n              </h2>\n              <p className={cn(\"glass-text-sm glass-text-secondary\")}>\n                {particles.length} quantum states\n              </p>\n            </div>\n\n            <div className='glass-flex glass-items-center glass-space-x-4'>\n              <button\n                onClick={() => setIsObserved(!isObserved)}\n                className={`\n                  px-3 py-1 rounded text-sm font-medium transition-colors duration-200\n                  ${createGlassStyle({ variant: \"default\" })}\n                  glass-border-subtle\n                  ${\n                    isObserved\n                      ? \"glass-text-danger glass-border-danger\"\n                      : \"glass-text-secondary hover:glass-text-primary\"\n                  }\n                `}\n              >\n                {isObserved ? \"\uD83D\uDC41\uFE0F Observing\" : \"\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F Observe\"}\n              </button>\n\n              <div className={cn(\"glass-text-sm glass-text-muted\")}>\n                t: {quantumTime.toFixed(1)}\n              </div>\n            </div>\n          </div>\n\n          {/* Canvas */}\n          <div className='glass-relative'>\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className={cn(\n                \"glass-border-subtle glass-radius-lg glass-cursor-crosshair glass-surface-overlay\"\n              )}\n              onClick={handleCanvasClick}\n              onMouseEnter={() => setIsObserved(true)}\n              onMouseLeave={() => setIsObserved(false)}\n            />\n\n            {/* Measurement indicator */}\n            <AnimatePresence>\n              {measurements.map((measurement: any) => (\n                <motion.div\n                  key={measurement.timestamp}\n                  className='glass-absolute glass-pointer-events-none'\n                  style={{\n                    left: measurement.point.x,\n                    top: measurement.point.y,\n                    transform: \"translate(-50%, -50%)\",\n                  }}\n                  initial={{ scale: 0, opacity: 1 }}\n                  animate={prefersReducedMotion ? {} : { scale: 2, opacity: 0 }}\n                  exit={{ opacity: 0 }}\n                  transition={\n                    prefersReducedMotion ? { duration: 0 } : { duration: 1 }\n                  }\n                >\n                  <div\n                    className={cn(\n                      \"glass-w-4 glass-h-4 glass-border-2 glass-border-danger glass-radius-full\"\n                    )}\n                  />\n                </motion.div>\n              ))}\n            </AnimatePresence>\n          </div>\n\n          {/* Quantum statistics */}\n          <div\n            className={cn(\n              \"glass-p-4 glass-radius-lg glass-border-subtle glass-space-y-3\",\n              createGlassStyle({ variant: \"default\" })\n            )}\n          >\n            <div className='glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4 glass-text-sm'>\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>Uncertainty:</span>\n                <div\n                  className={cn(\n                    \"glass-flex glass-items-center glass-space-x-2 glass-mt-1\"\n                  )}\n                >\n                  <div\n                    className={cn(\n                      \"glass-flex-1 glass-h-2 glass-surface-muted glass-radius-full glass-overflow-hidden\"\n                    )}\n                  >\n                    <motion.div\n                      className={cn(\n                        \"glass-h-full glass-gradient-primary glass-radius-full\"\n                      )}\n                      animate={{\n                        width: `${Math.min(100, totalUncertainty * 100)}%`,\n                      }}\n                      transition={\n                        prefersReducedMotion\n                          ? { duration: 0 }\n                          : { duration: 0.3 }\n                      }\n                    />\n                  </div>\n                  <span className={cn(\"glass-text-primary glass-text-xs\")}>\n                    {(totalUncertainty * 100).toFixed(1)}%\n                  </span>\n                </div>\n              </div>\n\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>\n                  Avg Probability:\n                </span>\n                <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {(averageProbability * 100).toFixed(1)}%\n                </div>\n              </div>\n\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>Coherence:</span>\n                <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {Math.max(0, Math.min(100, quantumCoherence * 100)).toFixed(\n                    1\n                  )}\n                  %\n                </div>\n              </div>\n\n              <div>\n                <span className={cn(\"glass-text-secondary\")}>\n                  Measurements:\n                </span>\n                <div className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {measurements.length}\n                </div>\n              </div>\n            </div>\n\n            {/* Recent measurements */}\n            {measurements.length > 0 && (\n              <div className='glass-space-y-1'>\n                <span className={cn(\"glass-text-secondary glass-text-sm\")}>\n                  Recent Measurements:\n                </span>\n                <div className=\"glass-flex glass-flex-wrap glass-gap-1\">\n                  {measurements.slice(-5).map((measurement: any) => (\n                    <div\n                      key={measurement.timestamp}\n                      className={cn(\n                        \"glass-px-2 glass-py-1 glass-text-xs glass-surface-muted glass-radius glass-border-subtle\"\n                      )}\n                    >\n                      P: {(measurement.point.probability * 100).toFixed(0)}%\n                      {measurement.uncertainty > 0.5 && (\n                        <span className='glass-text-primary glass-ml-1'>\n                          \u00B1{measurement.uncertainty.toFixed(1)}\n                        </span>\n                      )}\n                    </div>\n                  ))}\n                </div>\n              </div>\n            )}\n          </div>\n\n          {/* Controls */}\n          <div\n            className={cn(\n              \"glass-flex glass-items-center glass-justify-between glass-text-sm glass-text-muted\"\n            )}\n          >\n            <span>Click particles to measure \u2022 Hover to observe</span>\n            <div className='glass-flex glass-items-center glass-space-x-4'>\n              {uncertaintyPrinciple && (\n                <span className='glass-flex glass-items-center glass-space-x-1'>\n                  <span>\u269B</span>\n                  <span>Heisenberg</span>\n                </span>\n              )}\n              {waveParticleDuality && (\n                <span className='glass-flex glass-items-center glass-space-x-1'>\n                  <span>\u3030\uFE0F</span>\n                  <span>Wave-Particle</span>\n                </span>\n              )}\n              {realTimeMode && (\n                <span className='glass-flex glass-items-center glass-space-x-1 glass-text-primary'>\n                  <div\n                    className={cn(\n                      \"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\"\n                    )}\n                  />\n                  <span>Live</span>\n                </span>\n              )}\n            </div>\n          </div>\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);", "\"use client\";\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useCallback,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface QuantumParticle {\n  x: number;\n  y: number;\n  z: number;\n  vx: number;\n  vy: number;\n  vz: number;\n  phase: number;\n  amplitude: number;\n  frequency: number;\n  spin: number;\n  entangled: boolean;\n  entanglementId?: string;\n  waveFunction: {\n    real: number;\n    imaginary: number;\n  };\n  uncertainty: {\n    position: number;\n    momentum: number;\n  };\n  id: string;\n}\n\nexport interface QuantumFieldNode {\n  x: number;\n  y: number;\n  z: number;\n  fieldStrength: number;\n  potential: number;\n  probability: number;\n}\n\nexport type QuantumInteractionType =\n  | \"strong\"\n  | \"weak\"\n  | \"electromagnetic\"\n  | \"quantum\";\n\nexport interface QuantumInteraction {\n  particle1: string;\n  particle2: string;\n  strength: number;\n  type: QuantumInteractionType;\n}\n\nexport interface QuantumField {\n  nodes: QuantumFieldNode[];\n  interactions: QuantumInteraction[];\n  id: string;\n}\n\nexport interface QuantumState {\n  superposition: boolean;\n  entanglement: number; // 0-1\n  coherence: number; // 0-1\n  decoherence: number; // 0-1\n  measurement: boolean;\n  uncertainty: number; // 0-1\n  energy: number;\n  id: string;\n}\n\nexport interface QuantumMeasurementResult {\n  position: {\n    x: number;\n    y: number;\n  };\n  momentum: {\n    x: number;\n    y: number;\n  };\n  spin: number;\n}\n\nexport interface QuantumMeasurementEvent {\n  x: number;\n  y: number;\n  time: number;\n}\n\nexport interface GlassQuantumFieldProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n  /** Canvas width */\n  width?: number;\n  /** Canvas height */\n  height?: number;\n  /** Number of quantum particles */\n  particleCount?: number;\n  /** Field resolution */\n  fieldResolution?: number;\n  /** Quantum coherence level */\n  coherence?: number;\n  /** Entanglement strength */\n  entanglementStrength?: number;\n  /** Uncertainty level */\n  uncertaintyLevel?: number;\n  /** Field energy level */\n  energyLevel?: number;\n  /** Show wave functions */\n  showWaveFunctions?: boolean;\n  /** Show probability clouds */\n  showProbabilityClouds?: boolean;\n  /** Show entanglement connections */\n  showEntanglement?: boolean;\n  /** Show measurement effects */\n  showMeasurement?: boolean;\n  /** Animation speed */\n  animationSpeed?: number;\n  /** Quantum simulation type */\n  simulationType?: \"particle\" | \"wave\" | \"field\" | \"superposition\";\n  /** Time evolution */\n  timeEvolution?: boolean;\n  /** Planck constant scale */\n  planckScale?: number;\n  /** Temperature (affects decoherence) */\n  temperature?: number;\n  /** External field strength */\n  externalField?: number;\n  /** Quantum state change handler */\n  onQuantumStateChange?: (state: QuantumState) => void;\n  /** Measurement event handler */\n  onMeasurement?: (\n    particle: QuantumParticle,\n    result: QuantumMeasurementResult\n  ) => void;\n  /** Entanglement event handler */\n  onEntanglement?: (particles: QuantumParticle[]) => void;\n  /** Show controls */\n  showControls?: boolean;\n  /** Show quantum info */\n  showQuantumInfo?: boolean;\n  /** Respect user's motion preferences */\n  respectMotionPreference?: boolean;\n}\n\nexport const GlassQuantumField = forwardRef<\n  HTMLDivElement,\n  GlassQuantumFieldProps\n>(\n  (\n    {\n      width = 800,\n      height = 600,\n      particleCount = 50,\n      fieldResolution = 20,\n      coherence = 0.7,\n      entanglementStrength = 0.5,\n      uncertaintyLevel = 0.6,\n      energyLevel = 0.8,\n      showWaveFunctions = true,\n      showProbabilityClouds = true,\n      showEntanglement = true,\n      showMeasurement = true,\n      animationSpeed = 1,\n      simulationType = \"particle\",\n      timeEvolution = true,\n      planckScale = 1,\n      temperature = 0.1,\n      externalField = 0.3,\n      onQuantumStateChange,\n      onMeasurement,\n      onEntanglement,\n      showControls = true,\n      showQuantumInfo = true,\n      respectMotionPreference = true,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n    const { play } = useGlassSound();\n\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationRef = useRef<number>();\n    const quantumFieldId = useA11yId(\"glass-quantum-field\");\n\n    const [particles, setParticles] = useState<QuantumParticle[]>([]);\n    const [quantumField, setQuantumField] = useState<QuantumField>({\n      nodes: [],\n      interactions: [],\n      id: \"field\",\n    });\n    const [quantumState, setQuantumState] = useState<QuantumState>({\n      superposition: true,\n      entanglement: 0,\n      coherence: coherence,\n      decoherence: 0,\n      measurement: false,\n      uncertainty: uncertaintyLevel,\n      energy: energyLevel,\n      id: \"quantum-state\",\n    });\n    const [animationTime, setAnimationTime] = useState(0);\n    const [measurementEvents, setMeasurementEvents] = useState<\n      QuantumMeasurementEvent[]\n    >([]);\n\n    // Initialize quantum particles\n    const initializeParticles = useCallback(() => {\n      const newParticles: QuantumParticle[] = [];\n\n      for (let i = 0; i < particleCount; i++) {\n        const particle: QuantumParticle = {\n          x: Math.random() * width,\n          y: Math.random() * height,\n          z: Math.random() * 100 - 50,\n          vx: (Math.random() - 0.5) * 2,\n          vy: (Math.random() - 0.5) * 2,\n          vz: (Math.random() - 0.5) * 2,\n          phase: Math.random() * Math.PI * 2,\n          amplitude: Math.random() * 0.8 + 0.2,\n          frequency: Math.random() * 0.1 + 0.05,\n          spin: Math.random() > 0.5 ? 0.5 : -0.5,\n          entangled: false,\n          waveFunction: {\n            real: Math.random(),\n            imaginary: Math.random(),\n          },\n          uncertainty: {\n            position: Math.random() * uncertaintyLevel,\n            momentum: Math.random() * uncertaintyLevel,\n          },\n          id: `particle-${i}`,\n        };\n\n        newParticles.push(particle);\n      }\n\n      // Create entanglement pairs\n      if (entanglementStrength > 0) {\n        const entanglementCount = Math.floor(\n          (particleCount * entanglementStrength) / 2\n        );\n        for (let i = 0; i < entanglementCount; i++) {\n          const p1Index = Math.floor(Math.random() * newParticles.length);\n          const p2Index = Math.floor(Math.random() * newParticles.length);\n\n          if (p1Index !== p2Index) {\n            const entanglementId = `entanglement-${i}`;\n            newParticles[p1Index].entangled = true;\n            newParticles[p1Index].entanglementId = entanglementId;\n            newParticles[p2Index].entangled = true;\n            newParticles[p2Index].entanglementId = entanglementId;\n          }\n        }\n      }\n\n      setParticles(newParticles);\n    }, [particleCount, width, height, uncertaintyLevel, entanglementStrength]);\n\n    // Initialize quantum field\n    const initializeField = useCallback(() => {\n      const nodes: QuantumFieldNode[] = [];\n      const interactions: QuantumInteraction[] = [];\n\n      // Create field nodes\n      for (let x = 0; x < width; x += fieldResolution) {\n        for (let y = 0; y < height; y += fieldResolution) {\n          nodes.push({\n            x,\n            y,\n            z: 0,\n            fieldStrength: Math.random() * energyLevel,\n            potential: Math.sin(x * 0.01) * Math.cos(y * 0.01) * externalField,\n            probability: Math.random(),\n          });\n        }\n      }\n\n      setQuantumField({ nodes, interactions, id: \"quantum-field\" });\n    }, [width, height, fieldResolution, energyLevel, externalField]);\n\n    // Initialize quantum system\n    useEffect(() => {\n      initializeParticles();\n      initializeField();\n    }, [initializeParticles, initializeField]);\n\n    // Update quantum particles\n    const updateParticles = useCallback(\n      (deltaTime: number) => {\n        setParticles((prevParticles) => {\n          const updated = prevParticles.map((particle) => {\n            // Wave function evolution (Schr\u00F6dinger equation approximation)\n            const energyTerm = particle.frequency * deltaTime * planckScale;\n            const newPhase = particle.phase + energyTerm;\n\n            // Update wave function\n            const newReal =\n              particle.waveFunction.real * Math.cos(energyTerm) -\n              particle.waveFunction.imaginary * Math.sin(energyTerm);\n            const newImaginary =\n              particle.waveFunction.real * Math.sin(energyTerm) +\n              particle.waveFunction.imaginary * Math.cos(energyTerm);\n\n            // Normalize wave function\n            const norm = Math.sqrt(\n              newReal * newReal + newImaginary * newImaginary\n            );\n            const normalizedReal = norm > 0 ? newReal / norm : 0;\n            const normalizedImaginary = norm > 0 ? newImaginary / norm : 0;\n\n            // Quantum uncertainty principle\n            const positionUncertainty = particle.uncertainty.position;\n            const momentumUncertainty = particle.uncertainty.momentum;\n\n            // Heisenberg uncertainty relation: \u0394x * \u0394p \u2265 \u210F/2\n            const minUncertaintyProduct = planckScale * 0.5;\n            if (\n              positionUncertainty * momentumUncertainty <\n              minUncertaintyProduct\n            ) {\n              particle.uncertainty.position = Math.sqrt(\n                minUncertaintyProduct / momentumUncertainty\n              );\n            }\n\n            // Position evolution with quantum fluctuations\n            const quantumNoise = (Math.random() - 0.5) * positionUncertainty;\n            let newX =\n              particle.x +\n              particle.vx * deltaTime * animationSpeed +\n              quantumNoise;\n            let newY =\n              particle.y +\n              particle.vy * deltaTime * animationSpeed +\n              quantumNoise;\n\n            // Boundary conditions (periodic for quantum systems)\n            newX = ((newX % width) + width) % width;\n            newY = ((newY % height) + height) % height;\n\n            // Decoherence effects\n            const decoherenceRate = temperature * 0.001;\n            const newCoherence = Math.max(\n              0,\n              particle.amplitude * (1 - decoherenceRate * deltaTime)\n            );\n\n            return {\n              ...particle,\n              x: newX,\n              y: newY,\n              phase: newPhase,\n              amplitude: newCoherence,\n              waveFunction: {\n                real: normalizedReal,\n                imaginary: normalizedImaginary,\n              },\n              uncertainty: {\n                position: Math.min(\n                  1,\n                  positionUncertainty + (Math.random() - 0.5) * 0.01\n                ),\n                momentum: Math.min(\n                  1,\n                  momentumUncertainty + (Math.random() - 0.5) * 0.01\n                ),\n              },\n            };\n          });\n\n          // Update entanglement correlations\n          const entanglementPairs = new Map<string, QuantumParticle[]>();\n          updated.forEach((particle) => {\n            if (particle.entangled && particle.entanglementId) {\n              if (!entanglementPairs.has(particle.entanglementId)) {\n                entanglementPairs.set(particle.entanglementId, []);\n              }\n              entanglementPairs.get(particle.entanglementId)!.push(particle);\n            }\n          });\n\n          // Apply entanglement correlations\n          entanglementPairs.forEach((entangledParticles, entanglementId) => {\n            if (entangledParticles.length === 2) {\n              const [p1, p2] = entangledParticles;\n              // Spin correlation for entangled particles\n              if (Math.random() < entanglementStrength) {\n                p2.spin = -p1.spin;\n                p2.phase = Math.PI - p1.phase;\n              }\n            }\n          });\n\n          return updated;\n        });\n      },\n      [\n        animationSpeed,\n        planckScale,\n        temperature,\n        width,\n        height,\n        entanglementStrength,\n      ]\n    );\n\n    // Update quantum field\n    const updateQuantumField = useCallback(\n      (deltaTime: number) => {\n        setQuantumField((prevField) => {\n          const updatedNodes = prevField.nodes.map((node) => {\n            // Field fluctuations\n            const fieldFluctuation = (Math.random() - 0.5) * 0.1 * energyLevel;\n            const newFieldStrength = Math.max(\n              0,\n              node.fieldStrength + fieldFluctuation\n            );\n\n            // Probability density calculation\n            let totalProbability = 0;\n            particles.forEach((particle) => {\n              const distance = Math.sqrt(\n                (particle.x - node.x) ** 2 + (particle.y - node.y) ** 2\n              );\n              const waveContribution =\n                particle.amplitude *\n                Math.exp(-distance / (50 * particle.uncertainty.position));\n              totalProbability += waveContribution * waveContribution;\n            });\n\n            return {\n              ...node,\n              fieldStrength: newFieldStrength,\n              probability: Math.min(1, totalProbability),\n            };\n          });\n\n          return {\n            ...prevField,\n            nodes: updatedNodes,\n          };\n        });\n      },\n      [energyLevel, particles]\n    );\n\n    // Update quantum state\n    const updateQuantumState = useCallback(() => {\n      const entangledCount = particles.filter((p) => p.entangled).length;\n      const totalCoherence =\n        particles.reduce((sum, p) => sum + p.amplitude, 0) / particles.length;\n      const avgUncertainty =\n        particles.reduce((sum, p) => sum + p.uncertainty.position, 0) /\n        particles.length;\n\n      const newState: QuantumState = {\n        superposition:\n          simulationType === \"superposition\" || totalCoherence > 0.5,\n        entanglement: entangledCount / particles.length,\n        coherence: totalCoherence,\n        decoherence: temperature * 0.1,\n        measurement: measurementEvents.length > 0,\n        uncertainty: avgUncertainty,\n        energy: energyLevel,\n        id: quantumState.id,\n      };\n\n      setQuantumState(newState);\n      onQuantumStateChange?.(newState);\n    }, [\n      particles,\n      simulationType,\n      temperature,\n      measurementEvents,\n      energyLevel,\n      quantumState.id,\n      onQuantumStateChange,\n    ]);\n\n    // Perform quantum measurement\n    const performMeasurement = useCallback(\n      (x: number, y: number) => {\n        const measurementRadius = 50;\n        const measuredParticles = particles.filter((particle) => {\n          const distance = Math.sqrt(\n            (particle.x - x) ** 2 + (particle.y - y) ** 2\n          );\n          return distance < measurementRadius;\n        });\n\n        if (measuredParticles.length > 0) {\n          setMeasurementEvents((prev) => [...prev, { x, y, time: Date.now() }]);\n\n          // Collapse wave functions\n          setParticles((prevParticles) =>\n            prevParticles.map((particle) => {\n              if (measuredParticles.includes(particle)) {\n                const measurementResult: QuantumMeasurementResult = {\n                  position: { x: particle.x, y: particle.y },\n                  momentum: { x: particle.vx, y: particle.vy },\n                  spin: particle.spin,\n                };\n\n                onMeasurement?.(particle, measurementResult);\n\n                return {\n                  ...particle,\n                  amplitude: 1, // Wave function collapse\n                  uncertainty: { position: 0.01, momentum: 1 }, // Increased momentum uncertainty\n                  waveFunction: { real: 1, imaginary: 0 },\n                };\n              }\n              return particle;\n            })\n          );\n\n          play(\"success\");\n        }\n      },\n      [particles, onMeasurement, play]\n    );\n\n    // Clear expired measurement events\n    useEffect(() => {\n      const interval = setInterval(() => {\n        setMeasurementEvents((prev) =>\n          prev.filter(\n            (event) => Date.now() - event.time < ANIMATION.DURATION.slower * 3\n          )\n        );\n      }, ANIMATION.DURATION.fast);\n\n      return () => clearInterval(interval);\n    }, []);\n\n    // Render quantum field\n    const render = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas\n      ctx.fillStyle = \"rgb(5, 5, 20)\";\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw quantum field background\n      if (simulationType === \"field\") {\n        quantumField.nodes.forEach((node) => {\n          if (node.probability > 0.1) {\n            const alpha = node.probability * 0.3;\n            ctx.fillStyle = `rgba(14, 165, 233, ${alpha})`;\n            ctx.fillRect(node.x - 2, node.y - 2, 4, 4);\n          }\n        });\n      }\n\n      // Draw probability clouds\n      if (showProbabilityClouds) {\n        particles.forEach((particle) => {\n          const cloudRadius = Math.max(1, particle.uncertainty.position * 40);\n          const gradient = ctx.createRadialGradient(\n            particle.x,\n            particle.y,\n            0,\n            particle.x,\n            particle.y,\n            cloudRadius\n          );\n\n          const probability =\n            particle.waveFunction.real ** 2 +\n            particle.waveFunction.imaginary ** 2;\n          gradient.addColorStop(0, `rgba(168, 85, 247, ${probability * 0.3})`);\n          gradient.addColorStop(1, \"transparent\");\n\n          ctx.fillStyle = gradient;\n          ctx.beginPath();\n          ctx.arc(particle.x, particle.y, cloudRadius, 0, Math.PI * 2);\n          ctx.fill();\n        });\n      }\n\n      // Draw wave functions\n      if (showWaveFunctions) {\n        particles.forEach((particle) => {\n          const waveRadius = particle.amplitude * 30;\n          const phaseColor = Math.floor((particle.phase / (Math.PI * 2)) * 360);\n\n          // Real part of wave function\n          ctx.strokeStyle = `hsl(${phaseColor}, 70%, 60%)`;\n          ctx.lineWidth = 2;\n          ctx.globalAlpha = particle.amplitude;\n\n          ctx.beginPath();\n          for (let angle = 0; angle < Math.PI * 2; angle += 0.1) {\n            const x =\n              particle.x +\n              Math.cos(angle) * waveRadius * particle.waveFunction.real;\n            const y =\n              particle.y +\n              Math.sin(angle) * waveRadius * particle.waveFunction.real;\n\n            if (angle === 0) {\n              ctx.moveTo(x, y);\n            } else {\n              ctx.lineTo(x, y);\n            }\n          }\n          ctx.closePath();\n          ctx.stroke();\n\n          // Imaginary part\n          ctx.strokeStyle = `hsl(${(phaseColor + 90) % 360}, 70%, 60%)`;\n          if (ctx.setLineDash) ctx.setLineDash([5, 5]);\n\n          ctx.beginPath();\n          for (let angle = 0; angle < Math.PI * 2; angle += 0.1) {\n            const x =\n              particle.x +\n              Math.cos(angle) * waveRadius * particle.waveFunction.imaginary;\n            const y =\n              particle.y +\n              Math.sin(angle) * waveRadius * particle.waveFunction.imaginary;\n\n            if (angle === 0) {\n              ctx.moveTo(x, y);\n            } else {\n              ctx.lineTo(x, y);\n            }\n          }\n          ctx.closePath();\n          ctx.stroke();\n\n          if (ctx.setLineDash) ctx.setLineDash([]);\n        });\n      }\n\n      // Draw particles\n      ctx.globalAlpha = 1;\n      particles.forEach((particle) => {\n        // Particle core\n        const coreRadius = 3;\n        const spinColor =\n          particle.spin > 0 ? \"rgb(255, 100, 100)\" : \"rgb(100, 100, 255)\";\n\n        ctx.fillStyle = spinColor;\n        ctx.beginPath();\n        ctx.arc(particle.x, particle.y, coreRadius, 0, Math.PI * 2);\n        ctx.fill();\n\n        // Spin visualization\n        ctx.strokeStyle = spinColor;\n        ctx.lineWidth = 1;\n        ctx.beginPath();\n        ctx.arc(particle.x, particle.y, coreRadius + 2, 0, particle.phase);\n        ctx.stroke();\n      });\n\n      // Draw entanglement connections\n      if (showEntanglement) {\n        const entanglementPairs = new Map<string, QuantumParticle[]>();\n        particles.forEach((particle) => {\n          if (particle.entangled && particle.entanglementId) {\n            if (!entanglementPairs.has(particle.entanglementId)) {\n              entanglementPairs.set(particle.entanglementId, []);\n            }\n            entanglementPairs.get(particle.entanglementId)!.push(particle);\n          }\n        });\n\n        entanglementPairs.forEach((entangledParticles) => {\n          if (entangledParticles.length === 2) {\n            const [p1, p2] = entangledParticles;\n\n            ctx.strokeStyle = \"rgba(251, 191, 36, 0.6)\";\n            ctx.lineWidth = 2;\n            if (ctx.setLineDash) ctx.setLineDash([5, 5]);\n\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n\n            if (ctx.setLineDash) ctx.setLineDash([]);\n          }\n        });\n      }\n\n      // Draw measurement events\n      measurementEvents.forEach((event) => {\n        const age = (Date.now() - event.time) / 2000;\n        const alpha = Math.max(0, 1 - age);\n        const radius = 30 + age * 20;\n\n        ctx.strokeStyle = `rgba(255, 255, 255, ${alpha})`;\n        ctx.lineWidth = 3;\n        ctx.beginPath();\n        ctx.arc(event.x, event.y, radius, 0, Math.PI * 2);\n        ctx.stroke();\n      });\n\n      // Draw quantum info overlay\n      if (showQuantumInfo) {\n        ctx.save();\n        ctx.fillStyle = \"rgba(15, 23, 42, 0.72)\";\n        ctx.fillRect(10, 10, 300, 180);\n\n        ctx.fillStyle = \"white\";\n        ctx.font = \"14px monospace\";\n        ctx.fillText(`Quantum State Information:`, 20, 30);\n        ctx.fillText(\n          `Coherence: ${(quantumState.coherence * 100).toFixed(1)}%`,\n          20,\n          50\n        );\n        ctx.fillText(\n          `Entanglement: ${(quantumState.entanglement * 100).toFixed(1)}%`,\n          20,\n          70\n        );\n        ctx.fillText(\n          `Uncertainty: ${(quantumState.uncertainty * 100).toFixed(1)}%`,\n          20,\n          90\n        );\n        ctx.fillText(\n          `Decoherence: ${(quantumState.decoherence * 100).toFixed(1)}%`,\n          20,\n          110\n        );\n        ctx.fillText(\n          `Energy: ${(quantumState.energy * 100).toFixed(1)}%`,\n          20,\n          130\n        );\n        ctx.fillText(`Particles: ${particles.length}`, 20, 150);\n        ctx.fillText(\n          `Superposition: ${quantumState.superposition ? \"Yes\" : \"No\"}`,\n          20,\n          170\n        );\n        ctx.restore();\n      }\n    }, [\n      width,\n      height,\n      simulationType,\n      quantumField,\n      showProbabilityClouds,\n      particles,\n      showWaveFunctions,\n      showEntanglement,\n      measurementEvents,\n      showQuantumInfo,\n      quantumState,\n    ]);\n\n    // Handle canvas click for measurement\n    const handleCanvasClick = useCallback(\n      (event: React.MouseEvent<HTMLCanvasElement>) => {\n        if (!showMeasurement) return;\n\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n\n        performMeasurement(x, y);\n      },\n      [showMeasurement, performMeasurement]\n    );\n\n    // Animation loop\n    useEffect(() => {\n      if (prefersReducedMotion && respectMotionPreference) {\n        render();\n        return;\n      }\n\n      const animate = (currentTime: number) => {\n        const deltaTime = 16; // 60fps\n        setAnimationTime((prev) => prev + deltaTime);\n\n        if (timeEvolution) {\n          updateParticles(deltaTime);\n          updateQuantumField(deltaTime);\n          updateQuantumState();\n        }\n\n        render();\n\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [\n      prefersReducedMotion,\n      respectMotionPreference,\n      render,\n      timeEvolution,\n      updateParticles,\n      updateQuantumField,\n      updateQuantumState,\n    ]);\n\n    // Canvas setup\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      canvas.width = width;\n      canvas.height = height;\n    }, [width, height]);\n\n    // Controls\n    const renderControls = () => {\n      if (!showControls) return null;\n\n      return (\n        <OptimizedGlass\n          elevation=\"level2\"\n          intensity=\"medium\"\n          depth={1}\n          tint=\"neutral\"\n          border=\"subtle\"\n          className=\"glass-quantum-controls glass-flex glass-flex-wrap glass-items-center glass-gap-4 glass-p-4 glass-radius-lg glass-backdrop-blur-md glass-border glass-border-glass-border/20 glass-contrast-guard\"\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"quantum-type-select\" className=\"glass-text-sm\">\n              Type:\n            </label>\n            <select\n              id=\"quantum-type-select\"\n              value={simulationType}\n              onChange={(e) => {}}\n              className=\"glass-px-2 glass-py-1 glass-radius-md glass-surface-overlay glass-border glass-border-glass-border/20\"\n            >\n              <option value=\"particle\">Particle</option>\n              <option value=\"wave\">Wave</option>\n              <option value=\"field\">Field</option>\n              <option value=\"superposition\">Superposition</option>\n            </select>\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label htmlFor=\"quantum-coherence-range\" className=\"glass-text-sm\">\n              Coherence:\n            </label>\n            <input\n              id=\"quantum-coherence-range\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={coherence}\n              onChange={(e) => {}}\n              className=\"glass-w-20\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label\n              htmlFor=\"quantum-entanglement-range\"\n              className=\"glass-text-sm\"\n            >\n              Entanglement:\n            </label>\n            <input\n              id=\"quantum-entanglement-range\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={entanglementStrength}\n              onChange={(e) => {}}\n              className=\"glass-w-20\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label\n              htmlFor=\"quantum-temperature-range\"\n              className=\"glass-text-sm\"\n            >\n              Temperature:\n            </label>\n            <input\n              id=\"quantum-temperature-range\"\n              type=\"range\"\n              min=\"0\"\n              max=\"1\"\n              step=\"0.1\"\n              value={temperature}\n              onChange={(e) => {}}\n              className=\"glass-w-20\"\n            />\n          </div>\n\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <label className=\"glass-text-sm\">\n              <input\n                id=\"quantum-waves-checkbox\"\n                type=\"checkbox\"\n                checked={showWaveFunctions}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Waves\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                id=\"quantum-probability-checkbox\"\n                type=\"checkbox\"\n                checked={showProbabilityClouds}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Probability\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                id=\"quantum-entanglement-checkbox\"\n                type=\"checkbox\"\n                checked={showEntanglement}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Entanglement\n            </label>\n            <label className=\"glass-text-sm\">\n              <input\n                id=\"quantum-evolution-checkbox\"\n                type=\"checkbox\"\n                checked={timeEvolution}\n                onChange={(e) => {}}\n                className=\"glass-mr-1\"\n              />\n              Evolution\n            </label>\n          </div>\n\n          <button\n            onClick={() => initializeParticles()}\n            className=\"glass-px-3 glass-py-1 glass-radius-md glass-surface-primary/20 hover:glass-surface-primary/30 glass-text-primary\"\n          >\n            Reset\n          </button>\n        </OptimizedGlass>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        id={quantumFieldId}\n        elevation=\"level1\"\n        intensity=\"subtle\"\n        depth={1}\n        tint=\"neutral\"\n        border=\"subtle\"\n        className={cn(\n          \"glass-quantum-field relative glass-radius-lg glass-backdrop-blur-md border border-border/20\",\n          className\n        )}\n        {...props}\n      >\n        <Motion\n          preset={isMotionSafe && respectMotionPreference ? \"fadeIn\" : \"none\"}\n          className=\"glass-flex glass-flex-col glass-gap-4 glass-p-4\"\n        >\n          {renderControls()}\n\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={width}\n              height={height}\n              className={cn(\n                \"border border-border/20 glass-radius-md bg-black\",\n                showMeasurement && \"cursor-crosshair\"\n              )}\n              onClick={handleCanvasClick}\n              style={{ width, height }}\n            />\n          </div>\n        </Motion>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassQuantumField.displayName = \"GlassQuantumField\";\n\nexport default GlassQuantumField;\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useRef, useMemo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\nexport interface QuantumState {\n  id: string;\n  label: string;\n  icon?: string;\n  position: { x: number; y: number; z: number };\n  waveFunction: number;\n  energy: number;\n  barrierHeight: number;\n  tunnelingProbability: number;\n  isActive: boolean;\n  connections: string[];\n}\n\nexport interface TunnelBarrier {\n  id: string;\n  height: number;\n  width: number;\n  position: { x: number; y: number };\n  transparency: number;\n  quantumCoherence: number;\n}\n\nexport interface QuantumTunnelTransition {\n  from: string;\n  to: string;\n  progress: number;\n  probability: number;\n  startTime: number;\n}\n\nexport interface QuantumTunnelParticle {\n  id: string;\n  x: number;\n  y: number;\n  energy: number;\n  wavePhase: number;\n  tunneling: boolean;\n  targetState?: string;\n}\n\nexport interface GlassQuantumTunnelProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  quantumStates?: QuantumState[];\n  barriers?: TunnelBarrier[];\n  showWaveFunction?: boolean;\n  showTunnelingProbability?: boolean;\n  showEnergyLevels?: boolean;\n  showBarriers?: boolean;\n  animateTransitions?: boolean;\n  tunnelingSpeed?: number;\n  waveAmplitude?: number;\n  coherenceDecay?: number;\n  realTimeMode?: boolean;\n  onStateTransition?: (fromId: string, toId: string) => void;\n  onTunnelingEvent?: (probability: number) => void;\n  className?: string;\n}\n\nconst generateWaveFunction = (\n  x: number,\n  energy: number,\n  time: number\n): number => {\n  const k = Math.sqrt(2 * energy); // Wave number\n  const frequency = energy / (2 * Math.PI);\n  return Math.sin(k * x - frequency * time);\n};\n\nconst calculateTunnelingProbability = (\n  energy: number,\n  barrierHeight: number,\n  barrierWidth: number\n): number => {\n  if (energy >= barrierHeight) return 1; // Classical behavior\n\n  const kappa = Math.sqrt(2 * (barrierHeight - energy));\n  return Math.exp(-2 * kappa * barrierWidth);\n};\n\nconst canvasColors = {\n  error: (alpha: number) => `rgba(239, 68, 68, ${alpha})`,\n  info: (alpha: number) => `rgba(14, 165, 233, ${alpha})`,\n  secondary: (alpha: number) => `rgba(168, 85, 247, ${alpha})`,\n  white: (alpha: number) => `rgba(255, 255, 255, ${alpha})`,\n  hover: \"rgba(255, 255, 255, 0.22)\",\n};\n\nexport const GlassQuantumTunnel = forwardRef<\n  HTMLDivElement,\n  GlassQuantumTunnelProps\n>(\n  (\n    {\n      quantumStates = [],\n      barriers = [],\n      showWaveFunction = true,\n      showTunnelingProbability = true,\n      showEnergyLevels = true,\n      showBarriers = true,\n      animateTransitions = true,\n      tunnelingSpeed = 1,\n      waveAmplitude = 20,\n      coherenceDecay = 0.02,\n      realTimeMode = false,\n      onStateTransition,\n      onTunnelingEvent,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const [currentTime, setCurrentTime] = useState(0);\n    const [activeTransitions, setActiveTransitions] = useState<\n      QuantumTunnelTransition[]\n    >([]);\n    const [measuredStates, setMeasuredStates] = useState<Set<string>>(\n      new Set()\n    );\n    const [quantumParticles, setQuantumParticles] = useState<\n      QuantumTunnelParticle[]\n    >([]);\n    const id = useA11yId(\"glass-quantum-tunnel\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Initialize quantum particles\n    useEffect(() => {\n      if (quantumStates.length === 0) {\n        setQuantumParticles([]);\n        return;\n      }\n      const particles = quantumStates.map((state, index) => ({\n        id: `particle-${state.id}`,\n        x: state.position.x,\n        y: state.position.y,\n        energy: state.energy,\n        wavePhase: Math.random() * Math.PI * 2,\n        tunneling: false,\n      }));\n      setQuantumParticles(particles);\n    }, [quantumStates]);\n\n    // Time evolution\n    useEffect(() => {\n      if (quantumStates.length === 0) return;\n      const interval = setInterval(() => {\n        setCurrentTime((prev) => prev + 0.1 * tunnelingSpeed);\n      }, ANIMATION.DURATION.fast);\n      return () => clearInterval(interval);\n    }, [tunnelingSpeed, quantumStates.length]);\n\n    // Quantum tunneling simulation\n    useEffect(() => {\n      if (!realTimeMode || quantumStates.length === 0) return;\n\n      const interval = setInterval(() => {\n        quantumStates.forEach((state) => {\n          if (!state.isActive) return;\n\n          state.connections.forEach((connectionId) => {\n            const targetState = quantumStates.find(\n              (s) => s.id === connectionId\n            );\n            if (!targetState) return;\n\n            const barrier = barriers.find(\n              (b) =>\n                Math.abs(\n                  b.position.x - (state.position.x + targetState.position.x) / 2\n                ) <\n                b.width / 2\n            );\n\n            let tunnelingProb = 1;\n            if (barrier) {\n              tunnelingProb = calculateTunnelingProbability(\n                state.energy,\n                barrier.height,\n                barrier.width\n              );\n            }\n\n            // Random tunneling events\n            if (Math.random() < tunnelingProb * 0.1) {\n              setActiveTransitions((prev) => [\n                ...prev,\n                {\n                  from: state.id,\n                  to: connectionId,\n                  progress: 0,\n                  probability: tunnelingProb,\n                  startTime: currentTime,\n                },\n              ]);\n\n              onTunnelingEvent?.(tunnelingProb);\n              onStateTransition?.(state.id, connectionId);\n            }\n          });\n        });\n      }, ANIMATION.DURATION.slower * 3);\n\n      return () => clearInterval(interval);\n    }, [\n      realTimeMode,\n      quantumStates,\n      barriers,\n      currentTime,\n      onTunnelingEvent,\n      onStateTransition,\n    ]);\n\n    // Update active transitions\n    useEffect(() => {\n      if (quantumStates.length === 0) return;\n      setActiveTransitions((prev) =>\n        prev\n          .map((transition) => ({\n            ...transition,\n            progress: Math.min(1, (currentTime - transition.startTime) / 5),\n          }))\n          .filter((transition) => transition.progress < 1)\n      );\n    }, [currentTime, quantumStates.length]);\n\n    // Update quantum particles\n    useEffect(() => {\n      if (quantumStates.length === 0) return;\n      setQuantumParticles((prev) =>\n        prev.map((particle) => {\n          const state = quantumStates.find(\n            (s) => s.id === particle.id.replace(\"particle-\", \"\")\n          );\n          if (!state) return particle;\n\n          // Wave function evolution\n          const newWavePhase = (particle.wavePhase + 0.1) % (2 * Math.PI);\n\n          // Check for active transitions\n          const activeTransition = activeTransitions.find(\n            (t) => t.from === state.id && t.progress < 1\n          );\n\n          if (activeTransition) {\n            const targetState = quantumStates.find(\n              (s) => s.id === activeTransition.to\n            );\n            if (targetState) {\n              return {\n                ...particle,\n                x:\n                  state.position.x +\n                  (targetState.position.x - state.position.x) *\n                    activeTransition.progress,\n                y:\n                  state.position.y +\n                  (targetState.position.y - state.position.y) *\n                    activeTransition.progress,\n                wavePhase: newWavePhase,\n                tunneling: true,\n                targetState: activeTransition.to,\n              };\n            }\n          }\n\n          return {\n            ...particle,\n            x: state.position.x,\n            y: state.position.y,\n            wavePhase: newWavePhase,\n            tunneling: false,\n            targetState: undefined,\n          };\n        })\n      );\n    }, [quantumStates, activeTransitions, currentTime]);\n\n    // Canvas rendering\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Draw barriers\n      if (showBarriers) {\n        barriers.forEach((barrier) => {\n          ctx.fillStyle = canvasColors.error(barrier.transparency);\n          ctx.fillRect(\n            barrier.position.x - barrier.width / 2,\n            50,\n            barrier.width,\n            barrier.height\n          );\n\n          // Barrier label\n          ctx.fillStyle = canvasColors.white(0.8);\n          ctx.font = \"12px Arial\";\n          ctx.textAlign = \"center\";\n          ctx.fillText(\n            `${barrier.height.toFixed(1)} eV`,\n            barrier.position.x,\n            45\n          );\n        });\n      }\n\n      // Draw energy levels\n      if (showEnergyLevels) {\n        quantumStates.forEach((state) => {\n          const y = 200 - state.energy * 20;\n          ctx.strokeStyle = canvasColors.info(0.6);\n          ctx.lineWidth = 2;\n          if (ctx.setLineDash) ctx.setLineDash([5, 5]);\n          ctx.beginPath();\n          ctx.moveTo(state.position.x - 30, y);\n          ctx.lineTo(state.position.x + 30, y);\n          ctx.stroke();\n          if (ctx.setLineDash) ctx.setLineDash([]);\n        });\n      }\n\n      // Draw wave functions\n      if (showWaveFunction) {\n        quantumParticles.forEach((particle) => {\n          const state = quantumStates.find(\n            (s) => s.id === particle.id.replace(\"particle-\", \"\")\n          );\n          if (!state) return;\n\n          ctx.strokeStyle = particle.tunneling\n            ? canvasColors.secondary(0.8)\n            : canvasColors.info(0.6);\n          ctx.lineWidth = 2;\n\n          ctx.beginPath();\n          for (let x = -50; x <= 50; x += 2) {\n            const waveValue = generateWaveFunction(\n              x / 10,\n              state.energy,\n              currentTime + particle.wavePhase\n            );\n            const y = state.position.y + waveValue * waveAmplitude;\n            if (x === -50) {\n              ctx.moveTo(particle.x + x, y);\n            } else {\n              ctx.lineTo(particle.x + x, y);\n            }\n          }\n          ctx.stroke();\n\n          // Probability density\n          ctx.fillStyle = particle.tunneling\n            ? canvasColors.secondary(0.2)\n            : canvasColors.info(0.2);\n          ctx.beginPath();\n          ctx.moveTo(particle.x - 50, state.position.y);\n          for (let x = -50; x <= 50; x += 2) {\n            const waveValue = generateWaveFunction(\n              x / 10,\n              state.energy,\n              currentTime + particle.wavePhase\n            );\n            const y =\n              state.position.y + Math.abs(waveValue) * waveAmplitude * 0.5;\n            ctx.lineTo(particle.x + x, y);\n          }\n          ctx.lineTo(particle.x + 50, state.position.y);\n          ctx.closePath();\n          ctx.fill();\n        });\n      }\n\n      // Draw quantum particles\n      quantumParticles.forEach((particle) => {\n        const radius = particle.tunneling ? 8 : 6;\n        const alpha = particle.tunneling ? 0.9 : 0.7;\n\n        ctx.beginPath();\n        ctx.arc(particle.x, particle.y, radius, 0, 2 * Math.PI);\n\n        const gradient = ctx.createRadialGradient(\n          particle.x,\n          particle.y,\n          0,\n          particle.x,\n          particle.y,\n          radius\n        );\n        gradient.addColorStop(0, canvasColors.white(alpha));\n        gradient.addColorStop(1, canvasColors.info(alpha * 0.3));\n        ctx.fillStyle = gradient;\n        ctx.fill();\n\n        // Tunneling effect\n        if (particle.tunneling) {\n          for (let i = 1; i <= 3; i++) {\n            ctx.beginPath();\n            ctx.arc(particle.x, particle.y, radius + i * 4, 0, 2 * Math.PI);\n            ctx.strokeStyle = canvasColors.secondary(0.3 / i);\n            ctx.lineWidth = 2;\n            ctx.stroke();\n          }\n        }\n      });\n\n      // Draw connections\n      quantumStates.forEach((state) => {\n        state.connections.forEach((connectionId) => {\n          const targetState = quantumStates.find((s) => s.id === connectionId);\n          if (!targetState) return;\n\n          ctx.strokeStyle = canvasColors.hover;\n          ctx.lineWidth = 1;\n          ctx.setLineDash([3, 3]);\n          ctx.beginPath();\n          ctx.moveTo(state.position.x, state.position.y);\n          ctx.lineTo(targetState.position.x, targetState.position.y);\n          ctx.stroke();\n          if (ctx.setLineDash) ctx.setLineDash([]);\n        });\n      });\n    }, [\n      quantumStates,\n      quantumParticles,\n      barriers,\n      currentTime,\n      showWaveFunction,\n      showEnergyLevels,\n      showBarriers,\n      waveAmplitude,\n    ]);\n\n    const handleStateClick = (stateId: string) => {\n      setMeasuredStates((prev: Set<string>) => new Set(prev).add(stateId));\n    };\n\n    const totalTunnelingProbability = useMemo(() => {\n      return (\n        quantumStates.reduce(\n          (sum, state) => sum + state.tunnelingProbability,\n          0\n        ) / quantumStates.length\n      );\n    }, [quantumStates]);\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        variant=\"frosted\"\n        className={`relative ${className}`}\n        role=\"region\"\n        aria-label=\"Quantum tunneling visualization\"\n        {...props}\n      >\n        <div className=\"glass-p-6 glass-space-y-4\">\n          {/* Header */}\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div>\n              <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary-glass-opacity-90\">\n                Quantum Tunnel\n              </h2>\n              <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                {quantumStates.length} quantum states \u2022 {barriers.length}{\" \"}\n                barriers\n              </p>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              <div className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                T: {(totalTunnelingProbability * 100).toFixed(1)}%\n              </div>\n              {realTimeMode && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-green glass-radius-full glass-animate-pulse\" />\n                  <span className=\"glass-text-xs\">Live</span>\n                </div>\n              )}\n            </div>\n          </div>\n\n          {/* Canvas */}\n          <div className=\"glass-relative\">\n            <canvas\n              ref={canvasRef}\n              width={800}\n              height={300}\n              className=\"glass-border glass-border-white/20 glass-radius-lg glass-surface-dark/20\"\n            />\n\n            {/* Quantum state overlays */}\n            <AnimatePresence>\n              {quantumStates.map((state) => (\n                <motion.div\n                  key={state.id}\n                  className={`\n                    absolute cursor-pointer transform -translate-x-1/2 -translate-y-1/2\n                    ${createGlassStyle({ opacity: 0.7 }).background}\n                    border border-white/20 rounded-lg p-2\n                  `}\n                  style={{\n                    left: state.position.x,\n                    top: state.position.y,\n                  }}\n                  initial={{ opacity: 0, scale: 0.8 }}\n                  animate={\n                    prefersReducedMotion\n                      ? {}\n                      : {\n                          opacity: state.isActive ? 1 : 0.5,\n                          scale: measuredStates.has(state.id) ? 1.2 : 1,\n                        }\n                  }\n                  whileHover={{ scale: 1.1 }}\n                  onClick={() => handleStateClick(state.id)}\n                  transition={\n                    shouldAnimate\n                      ? { duration: ANIMATION.DURATION.normal / 1000 }\n                      : { duration: 0 }\n                  }\n                >\n                  <div className=\"glass-flex glass-items-center glass-space-x-2\">\n                    {state.icon && (\n                      <span className=\"glass-text-lg\">{state.icon}</span>\n                    )}\n                    <div>\n                      <div className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90\">\n                        {state.label}\n                      </div>\n                      {showTunnelingProbability && (\n                        <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                          T: {(state.tunnelingProbability * 100).toFixed(1)}%\n                        </div>\n                      )}\n                    </div>\n                  </div>\n\n                  {measuredStates.has(state.id) && (\n                    <motion.div\n                      className=\"glass-absolute glass-top-1 glass--right-1 glass-w-3 glass-h-3 glass-surface-green glass-radius-full\"\n                      initial={{ scale: 0 }}\n                      animate={prefersReducedMotion ? {} : { scale: 1 }}\n                      transition={\n                        prefersReducedMotion\n                          ? { duration: 0 }\n                          : { duration: ANIMATION.DURATION.fast / 1000 }\n                      }\n                    />\n                  )}\n                </motion.div>\n              ))}\n            </AnimatePresence>\n\n            {/* Active transitions */}\n            <AnimatePresence>\n              {activeTransitions.map((transition) => {\n                const fromState = quantumStates.find(\n                  (s) => s.id === transition.from\n                );\n                const toState = quantumStates.find(\n                  (s) => s.id === transition.to\n                );\n                if (!fromState || !toState) return null;\n\n                const x =\n                  fromState.position.x +\n                  (toState.position.x - fromState.position.x) *\n                    transition.progress;\n                const y =\n                  fromState.position.y +\n                  (toState.position.y - fromState.position.y) *\n                    transition.progress;\n\n                return (\n                  <motion.div\n                    key={`${transition.from}-${transition.to}-${transition.startTime}`}\n                    className=\"glass-absolute glass-pointer-events-none\"\n                    style={{\n                      left: x,\n                      top: y,\n                      transform: \"translate(-50%, -50%)\",\n                    }}\n                    initial={{ opacity: 0, scale: 0.5 }}\n                    animate={\n                      prefersReducedMotion ? {} : { opacity: 1, scale: 1 }\n                    }\n                    exit={{ opacity: 0, scale: 0.5 }}\n                  >\n                    <div className=\"glass-w-4 glass-h-4 glass-surface-pink glass-radius-full glass-shadow-lg glass-animate-pulse\" />\n                    <div className=\"glass-absolute glass--bottom-8 glass--left-1-2 glass-transform glass--translate-x-1-2 glass-text-xs glass-text-pink-300 glass-whitespace-nowrap\">\n                      Tunneling: {(transition.probability * 100).toFixed(1)}%\n                    </div>\n                  </motion.div>\n                );\n              })}\n            </AnimatePresence>\n          </div>\n\n          {/* Controls */}\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              <button\n                onClick={() => setMeasuredStates(new Set())}\n                className={`\n                  px-3 py-1 rounded text-sm font-medium transition-colors duration-[${ANIMATION.DURATION.fast}ms]\n                  ${createGlassStyle({ opacity: 0.7 }).background}\n                  border border-white/20 text-white/70 hover:text-white\n                `}\n              >\n                Reset Measurements\n              </button>\n            </div>\n\n            <div className=\"glass-flex glass-items-center glass-space-x-6 glass-text-sm glass-text-primary-glass-opacity-60\">\n              <div>Time: {currentTime.toFixed(1)}</div>\n              <div>Active: {activeTransitions.length}</div>\n              <div>Measured: {measuredStates.size}</div>\n            </div>\n          </div>\n\n          {/* Quantum statistics */}\n          <div\n            className={`\n            p-4 rounded-lg border border-white/10 space-y-3\n            ${createGlassStyle({ opacity: 0.7 }).background}\n          `}\n          >\n            <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-90\">\n              Quantum Statistics\n            </h3>\n\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4 glass-text-sm\">\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Avg Tunneling:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {(totalTunnelingProbability * 100).toFixed(1)}%\n                </div>\n              </div>\n\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Wave Coherence:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {(Math.cos(currentTime * 0.5) * 50 + 50).toFixed(0)}%\n                </div>\n              </div>\n\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Energy Spread:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {quantumStates.length > 0\n                    ? (\n                        Math.max(...quantumStates.map((s) => s.energy)) -\n                        Math.min(...quantumStates.map((s) => s.energy))\n                      ).toFixed(1)\n                    : \"0\"}{\" \"}\n                  eV\n                </div>\n              </div>\n\n              <div>\n                <span className=\"glass-text-primary-glass-opacity-60\">\n                  Barrier Count:\n                </span>\n                <div className=\"glass-text-primary-glass-opacity-90 glass-font-medium\">\n                  {barriers.length}\n                </div>\n              </div>\n            </div>\n\n            {/* Recent tunneling events */}\n            {activeTransitions.length > 0 && (\n              <div className=\"glass-space-y-1\">\n                <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n                  Active Tunneling:\n                </span>\n                <div className=\"glass-flex glass-flex-wrap glass-gap-1\">\n                  {activeTransitions.slice(-3).map((transition, index) => (\n                    <div\n                      key={index}\n                      className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-pink/20 glass-text-pink-300 glass-radius glass-border glass-border-pink-400/20\"\n                    >\n                      {transition.from} \u2192 {transition.to} (\n                      {(transition.probability * 100).toFixed(0)}%)\n                    </div>\n                  ))}\n                </div>\n              </div>\n            )}\n          </div>\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassQuantumTunnel.displayName = \"GlassQuantumTunnel\";\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useMemo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport type { Transition } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\nexport interface QuantumMenuState {\n  id: string;\n  label: string;\n  icon?: string;\n  probability: number;\n  energy: number;\n  coherence: number;\n  entangled?: string[];\n  subStates?: QuantumMenuState[];\n}\n\nexport interface QuantumMenuInteraction {\n  type: string;\n  stateId: string;\n  timestamp: number;\n  probability: number;\n}\n\ninterface WavePoint {\n  x: number;\n  y: number;\n}\n\nexport interface GlassSuperpositionalMenuProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  menuStates?: QuantumMenuState[];\n  isObserved?: boolean;\n  measurementType?: \"collapse\" | \"decoherence\" | \"interference\";\n  coherenceDecay?: number;\n  entanglementStrength?: number;\n  visualizeWaveFunction?: boolean;\n  showProbabilities?: boolean;\n  showQuantumNoise?: boolean;\n  maxSuperpositions?: number;\n  onStateCollapse?: (stateId: string) => void;\n  onMeasurement?: (states: QuantumMenuState[]) => void;\n  onEntanglement?: (stateIds: string[]) => void;\n  className?: string;\n}\n\nconst quantumColors = {\n  superposition: \"#4F46E5\",\n  entangled: \"#EC4899\",\n  collapsed: \"hsl(var(--glass-color-success))\",\n  decoherent: \"hsl(var(--glass-color-warning))\",\n  interference: \"#8B5CF6\",\n};\n\nconst wavePatterns = {\n  sine: (t: number, frequency: number) => Math.sin(t * frequency),\n  cosine: (t: number, frequency: number) => Math.cos(t * frequency),\n  complex: (t: number, frequency: number) =>\n    Math.sin(t * frequency) * Math.cos((t * frequency) / 2),\n  damped: (t: number, frequency: number) =>\n    Math.sin(t * frequency) * Math.exp(-t * 0.1),\n};\n\nexport const GlassSuperpositionalMenu = forwardRef<\n  HTMLDivElement,\n  GlassSuperpositionalMenuProps\n>(\n  (\n    {\n      menuStates = [],\n      isObserved = false,\n      measurementType = \"collapse\",\n      coherenceDecay = 0.02,\n      entanglementStrength = 0.5,\n      visualizeWaveFunction = true,\n      showProbabilities = true,\n      showQuantumNoise = true,\n      maxSuperpositions = 8,\n      onStateCollapse,\n      onMeasurement,\n      onEntanglement,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [currentStates, setCurrentStates] =\n      useState<QuantumMenuState[]>(menuStates);\n    const [measurementTime, setMeasurementTime] = useState<number | null>(null);\n    const [collapsedState, setCollapsedState] = useState<string | null>(null);\n    const [quantumTime, setQuantumTime] = useState(0);\n    const [interactionHistory, setInteractionHistory] = useState<\n      QuantumMenuInteraction[]\n    >([]);\n    const id = useA11yId(\"glass-superposition-menu\");\n\n    // Motion preference hook\n    const { shouldAnimate } = useMotionPreference();\n\n    // Helper function to respect motion preferences\n    const respectMotionPreference = (config: Transition): Transition =>\n      shouldAnimate ? config : { duration: 0 };\n\n    // Quantum time evolution\n    useEffect(() => {\n      const interval = setInterval(() => {\n        setQuantumTime((prev) => prev + 0.1);\n      }, 16);\n      return () => clearInterval(interval);\n    }, []);\n\n    // Coherence decay simulation\n    useEffect(() => {\n      if (isObserved || collapsedState) return;\n\n      const interval = setInterval(() => {\n        setCurrentStates((prev) =>\n          prev\n            .map((state) => ({\n              ...state,\n              coherence: Math.max(0, state.coherence - coherenceDecay),\n              probability:\n                state.coherence > 0.1\n                  ? state.probability + (Math.random() - 0.5) * 0.02\n                  : state.probability * 0.98,\n            }))\n            .map((state) => ({\n              ...state,\n              probability: Math.max(0.01, Math.min(1, state.probability)),\n            }))\n        );\n      }, 100);\n\n      return () => clearInterval(interval);\n    }, [isObserved, collapsedState, coherenceDecay]);\n\n    // Normalize probabilities to ensure they sum to 1\n    useEffect(() => {\n      const totalProb = currentStates.reduce(\n        (sum, state) => sum + state.probability,\n        0\n      );\n      if (totalProb > 0) {\n        setCurrentStates((prev) =>\n          prev.map((state) => ({\n            ...state,\n            probability: state.probability / totalProb,\n          }))\n        );\n      }\n    }, [currentStates.length]);\n\n    const performMeasurement = (targetStateId?: string) => {\n      setMeasurementTime(Date.now());\n\n      let selectedState: QuantumMenuState;\n\n      if (targetStateId) {\n        selectedState = currentStates.find((s) => s.id === targetStateId)!;\n      } else {\n        // Quantum measurement based on probability amplitudes\n        const random = Math.random();\n        let cumulativeProb = 0;\n\n        selectedState =\n          currentStates.find((state) => {\n            cumulativeProb += state.probability * state.probability; // |\u03C8|\u00B2\n            return random <= cumulativeProb;\n          }) || currentStates[0];\n      }\n\n      if (measurementType === \"collapse\") {\n        setCollapsedState(selectedState.id);\n        setCurrentStates([\n          {\n            ...selectedState,\n            probability: 1,\n            coherence: 0,\n          },\n        ]);\n      }\n\n      setInteractionHistory((prev) => [\n        ...prev,\n        {\n          type: \"measurement\",\n          stateId: selectedState.id,\n          timestamp: Date.now(),\n          probability: selectedState.probability,\n        },\n      ]);\n\n      onStateCollapse?.(selectedState.id);\n      onMeasurement?.(currentStates);\n    };\n\n    const createEntanglement = (stateIds: string[]) => {\n      setCurrentStates((prev) =>\n        prev.map((state) => {\n          if (stateIds.includes(state.id)) {\n            return {\n              ...state,\n              entangled: stateIds.filter((id) => id !== state.id),\n              coherence: Math.min(1, state.coherence + 0.2),\n            };\n          }\n          return state;\n        })\n      );\n\n      onEntanglement?.(stateIds);\n    };\n\n    const getStateOpacity = (state: QuantumMenuState) => {\n      if (collapsedState) {\n        return state.id === collapsedState ? 1 : 0.1;\n      }\n      return 0.3 + state.probability * 0.7;\n    };\n\n    const getStateScale = (state: QuantumMenuState) => {\n      if (collapsedState && state.id !== collapsedState) return 0.5;\n      return 0.8 + state.probability * 0.4;\n    };\n\n    const getQuantumPhase = (state: QuantumMenuState) => {\n      return (\n        quantumTime * (1 + state.energy * 0.5) + state.probability * Math.PI\n      );\n    };\n\n    const WaveFunction = ({\n      state,\n      index,\n    }: {\n      state: QuantumMenuState;\n      index: number;\n    }) => {\n      const points = useMemo(() => {\n        const numPoints = 50;\n        const amplitude = state.probability * 20;\n        const frequency = 0.5 + state.energy * 0.3;\n        const phase = getQuantumPhase(state);\n\n        return Array.from({ length: numPoints }, (_, i): WavePoint => {\n          const t = (i / numPoints) * 4 * Math.PI;\n          const y = amplitude * wavePatterns.complex(t + phase, frequency);\n          return { x: (i / numPoints) * 200, y: y + 25 };\n        });\n      }, [state, quantumTime]);\n\n      return (\n        <svg\n          className={cn(\n            \"glass-absolute glass-inset-0 glass-pointer-events-none\"\n          )}\n          width=\"200\"\n          height=\"50\"\n          style={{ zIndex: -1 }}\n        >\n          <path\n            d={`M ${points.map((p) => `${p.x} ${p.y}`).join(\" L \")}`}\n            stroke={\n              state.entangled?.length\n                ? quantumColors.entangled\n                : quantumColors.superposition\n            }\n            strokeWidth=\"2\"\n            fill=\"none\"\n            opacity={state.coherence * 0.6}\n            strokeDasharray={state.coherence < 0.5 ? \"5,5\" : \"none\"}\n          />\n\n          {/* Probability density */}\n          <path\n            d={`M ${points.map((p) => `${p.x} ${25 + Math.abs(p.y - 25) * 0.3}`).join(\" L \")}`}\n            fill={\n              state.entangled?.length\n                ? quantumColors.entangled\n                : quantumColors.superposition\n            }\n            opacity={state.probability * 0.2}\n          />\n        </svg>\n      );\n    };\n\n    const QUANTUM_NOISE_POINTS = Array.from({ length: 20 }, (_, i) => ({\n      left: (i * 13) % 100,\n      top: (i * 29) % 100,\n      delay: (i * 37) % 3,\n    }));\n\n    const QuantumNoise = () => (\n      <div\n        className={cn(\"glass-absolute glass-inset-0 glass-pointer-events-none\")}\n      >\n        {QUANTUM_NOISE_POINTS.map((point, i) => (\n          <motion.div\n            key={i}\n            className={cn(\n              \"glass-absolute glass-w-1 glass-h-1 glass-surface-muted glass-radius-full\"\n            )}\n            style={{\n              left: `${point.left}%`,\n              top: `${point.top}%`,\n            }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    opacity: [0.1, 0.5, 0.1],\n                    scale: [0.5, 1, 0.5],\n                  }\n            }\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: 3,\n                    repeat: Infinity,\n                    delay: point.delay,\n                  }\n            }\n          />\n        ))}\n      </div>\n    );\n\n    const EntanglementLines = () => (\n      <svg\n        className={cn(\"glass-absolute glass-inset-0 glass-pointer-events-none\")}\n        data-glass-overlay=\"true\"\n        style={{ zIndex: 10 }}\n      >\n        {currentStates\n          .map((state) =>\n            state.entangled?.map((entangledId) => {\n              const entangledState = currentStates.find(\n                (s) => s.id === entangledId\n              );\n              if (!entangledState) return null;\n\n              const startIndex = currentStates.indexOf(state);\n              const endIndex = currentStates.indexOf(entangledState);\n\n              const startY = startIndex * 80 + 40;\n              const endY = endIndex * 80 + 40;\n\n              return (\n                <motion.line\n                  key={`${state.id}-${entangledId}`}\n                  x1=\"50\"\n                  y1={startY}\n                  x2=\"150\"\n                  y2={endY}\n                  stroke={quantumColors.entangled}\n                  strokeWidth=\"2\"\n                  opacity={entanglementStrength}\n                  strokeDasharray=\"10,5\"\n                  animate={\n                    prefersReducedMotion\n                      ? {}\n                      : {\n                          strokeDashoffset: [0, 15],\n                        }\n                  }\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : {\n                          duration: 1,\n                          repeat: Infinity,\n                          ease: \"linear\",\n                        }\n                  }\n                />\n              );\n            })\n          )\n          .filter(Boolean)}\n      </svg>\n    );\n\n    const QuantumState = ({\n      state,\n      index,\n    }: {\n      state: QuantumMenuState;\n      index: number;\n    }) => (\n      <motion.div\n        className={cn(\"glass-relative\")}\n        initial={{ opacity: 0, scale: 0.5 }}\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                opacity: getStateOpacity(state),\n                scale: getStateScale(state),\n                y: isObserved ? 0 : Math.sin(getQuantumPhase(state)) * 5,\n                rotateY: visualizeWaveFunction\n                  ? Math.sin(getQuantumPhase(state)) * 10\n                  : 0,\n              }\n        }\n        transition={respectMotionPreference({\n          duration: 0.3,\n          type: collapsedState ? \"spring\" : \"tween\",\n        })}\n        whileHover={{\n          scale: getStateScale(state) * 1.05,\n          rotateY: 0,\n        }}\n        onClick={() => performMeasurement(state.id)}\n      >\n        <div\n          className={cn(\n            \"glass-relative glass-p-4 glass-radius-lg glass-cursor-pointer glass-border-2 glass-transition-all glass-duration-300\",\n            createGlassStyle({\n              variant: \"default\",\n              opacity: state.coherence,\n            }),\n            collapsedState === state.id\n              ? \"glass-border-success glass-surface-success\"\n              : state.entangled?.length\n                ? \"glass-border-accent glass-surface-accent\"\n                : \"glass-border-primary glass-surface-primary\"\n          )}\n          style={{\n            // Use createGlassStyle() instead,\n            boxShadow: `0 0 ${state.probability * 20}px ${\n              state.entangled?.length\n                ? quantumColors.entangled\n                : quantumColors.superposition\n            }40`,\n          }}\n        >\n          {visualizeWaveFunction && !collapsedState && (\n            <WaveFunction state={state} index={index} />\n          )}\n\n          <div className={cn(\"glass-relative glass-z-10\")}>\n            <div\n              className={cn(\"glass-flex glass-items-center glass-space-x-3\")}\n            >\n              {state.icon && (\n                <span className={cn(\"glass-text-2xl\")}>{state.icon}</span>\n              )}\n              <div className={cn(\"glass-flex-1\")}>\n                <h3 className={cn(\"glass-text-primary glass-font-medium\")}>\n                  {state.label}\n                </h3>\n                {showProbabilities && (\n                  <div\n                    className={cn(\n                      \"glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-text-secondary\"\n                    )}\n                  >\n                    <span>P: {(state.probability * 100).toFixed(1)}%</span>\n                    <span>\u2022</span>\n                    <span>C: {(state.coherence * 100).toFixed(0)}%</span>\n                    {state.entangled?.length && (\n                      <>\n                        <span>\u2022</span>\n                        <span className={cn(\"glass-text-accent\")}>\n                          \u269B {state.entangled.length}\n                        </span>\n                      </>\n                    )}\n                  </div>\n                )}\n              </div>\n            </div>\n\n            {/* Quantum indicators */}\n            <div className={cn(\"glass-mt-2 glass-flex glass-space-x-2\")}>\n              <div\n                className={cn(\n                  \"glass-h-1 glass-surface-primary glass-radius-full\"\n                )}\n                style={{ width: `${state.probability * 100}%` }}\n              />\n              <div\n                className={cn(\n                  \"glass-h-1 glass-surface-info glass-radius-full glass-opacity-60\"\n                )}\n                style={{ width: `${state.coherence * 100}%` }}\n              />\n            </div>\n          </div>\n\n          {/* Quantum field visualization */}\n          {!collapsedState && (\n            <motion.div\n              className={cn(\n                \"glass-absolute glass-inset-0 glass-radius-lg glass-pointer-events-none\"\n              )}\n              animate={{\n                background: [\n                  `radial-gradient(circle at ${50 + Math.sin(quantumTime) * 20}% ${50 + Math.cos(quantumTime * 0.7) * 20}%, \n                   ${quantumColors.superposition}20 0%, transparent 50%)`,\n                  `radial-gradient(circle at ${50 + Math.sin(quantumTime + Math.PI) * 20}% ${50 + Math.cos(quantumTime * 0.7 + Math.PI) * 20}%, \n                   ${quantumColors.superposition}20 0%, transparent 50%)`,\n                ],\n              }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : {\n                      duration: 3,\n                      repeat: Infinity,\n                      ease: \"linear\",\n                    }\n              }\n            />\n          )}\n        </div>\n      </motion.div>\n    );\n\n    const superpositionStates = collapsedState\n      ? currentStates.filter((s) => s.id === collapsedState)\n      : currentStates.slice(0, maxSuperpositions);\n\n    return (\n      <OptimizedGlass\n        data-glass-component\n        ref={ref}\n        variant=\"frosted\"\n        className={cn(\n          \"glass-relative glass-p-6 glass-space-y-4 glass-text-white\",\n          className\n        )}\n        style={{\n          color: \"rgba(255, 255, 255, 0.95)\",\n          backgroundColor: \"var(--glass-primary-level3-surface)\",\n        }}\n        role=\"region\"\n        aria-label=\"Quantum superposition menu\"\n        {...props}\n      >\n        {/* Quantum field background */}\n        {showQuantumNoise && <QuantumNoise />}\n        {visualizeWaveFunction && <EntanglementLines />}\n\n        {/* Header */}\n        <div\n          className={cn(\"glass-flex glass-items-center glass-justify-between\")}\n        >\n          <div>\n            <h2\n              className={cn(\n                \"glass-text-xl glass-font-semibold glass-text-primary\"\n              )}\n            >\n              Quantum Menu\n            </h2>\n            <p className={cn(\"glass-text-sm glass-text-secondary\")}>\n              {collapsedState\n                ? \"State Collapsed\"\n                : `${superpositionStates.length} superposition${superpositionStates.length !== 1 ? \"s\" : \"\"}`}\n            </p>\n          </div>\n\n          <div className={cn(\"glass-flex glass-items-center glass-space-x-4\")}>\n            {!collapsedState && (\n              <>\n                <button\n                  onClick={() => performMeasurement()}\n                  className={cn(\n                    \"glass-px-4 glass-py-2 glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors glass-duration-200\",\n                    createGlassStyle({ variant: \"default\" }),\n                    \"glass-text-primary hover:glass-text-white glass-border glass-border-primary hover:glass-border-white\"\n                  )}\n                  style={{\n                    color: \"rgba(255, 255, 255, 0.95)\",\n                    backgroundColor: \"var(--glass-primary-level3-surface)\",\n                    borderColor: \"rgba(255, 255, 255, 0.28)\",\n                  }}\n                >\n                  \uD83D\uDD2C Measure\n                </button>\n\n                <button\n                  onClick={() => {\n                    const randomStates = currentStates\n                      .sort(() => Math.random() - 0.5)\n                      .slice(0, 2)\n                      .map((s) => s.id);\n                    createEntanglement(randomStates);\n                  }}\n                  className={cn(\n                    \"glass-px-4 glass-py-2 glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors glass-duration-200\",\n                    createGlassStyle({ variant: \"default\" }),\n                    \"glass-text-accent hover:glass-text-accent-light glass-border glass-border-accent hover:glass-border-accent-light\"\n                  )}\n                  style={{\n                    color: \"rgba(255, 255, 255, 0.95)\",\n                    backgroundColor: \"var(--glass-primary-level3-surface)\",\n                    borderColor: \"rgba(236, 72, 153, 0.42)\",\n                  }}\n                >\n                  \u269B Entangle\n                </button>\n              </>\n            )}\n\n            <div className={cn(\"glass-text-sm glass-text-muted\")}>\n              t: {quantumTime.toFixed(1)}\n            </div>\n          </div>\n        </div>\n\n        {/* Quantum states */}\n        <div className={cn(\"glass-space-y-3\")}>\n          <AnimatePresence>\n            {superpositionStates.map((state, index) => (\n              <QuantumState key={state.id} state={state} index={index} />\n            ))}\n          </AnimatePresence>\n        </div>\n\n        {/* Quantum information */}\n        <div\n          className={cn(\n            \"glass-p-4 glass-radius-lg glass-border glass-border-subtle\",\n            createGlassStyle({ variant: \"default\" })\n          )}\n        >\n          <div\n            className={cn(\n              \"glass-grid glass-grid-cols-2 glass-gap-4 glass-text-sm\"\n            )}\n          >\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>\n                Total Coherence:\n              </span>\n              <span className={cn(\"glass-ml-2 glass-text-primary\")}>\n                {(\n                  (currentStates.reduce((sum, s) => sum + s.coherence, 0) /\n                    currentStates.length) *\n                  100\n                ).toFixed(1)}\n                %\n              </span>\n            </div>\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>\n                Entangled Pairs:\n              </span>\n              <span className={cn(\"glass-ml-2 glass-text-primary\")}>\n                {currentStates.filter((s) => s.entangled?.length).length / 2}\n              </span>\n            </div>\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>Measurements:</span>\n              <span className={cn(\"glass-ml-2 glass-text-primary\")}>\n                {\n                  interactionHistory.filter((h) => h.type === \"measurement\")\n                    .length\n                }\n              </span>\n            </div>\n            <div>\n              <span className={cn(\"glass-text-secondary\")}>State:</span>\n              <span className={cn(\"glass-ml-2 glass-text-primary\")}>\n                {collapsedState ? \"Collapsed\" : \"Superposition\"}\n              </span>\n            </div>\n          </div>\n        </div>\n\n        {/* Reset button */}\n        {collapsedState && (\n          <motion.button\n            onClick={() => {\n              setCollapsedState(null);\n              setCurrentStates(menuStates);\n              setMeasurementTime(null);\n            }}\n            className={cn(\n              \"glass-w-full glass-p-3 glass-radius-lg glass-text-sm glass-font-medium glass-transition-colors glass-duration-200\",\n              createGlassStyle({ variant: \"default\" }),\n              \"glass-text-info hover:glass-text-info-light glass-border glass-border-info hover:glass-border-info-light\"\n            )}\n            style={{\n              color: \"rgba(255, 255, 255, 0.95)\",\n              backgroundColor: \"var(--glass-primary-level3-surface)\",\n              borderColor: \"rgba(59, 130, 246, 0.42)\",\n            }}\n            initial={{ opacity: 0, y: 20 }}\n            animate={{ opacity: 1, y: 0 }}\n            transition={respectMotionPreference({ delay: 0.5 })}\n          >\n            \uD83D\uDD04 Reset Quantum State\n          </motion.button>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassSuperpositionalMenu.displayName = \"GlassSuperpositionalMenu\";\n", "\"use client\";\nimport React, { forwardRef, useState, useEffect, useRef, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface WaveEquation {\n  id: string;\n  name: string;\n  type: \"sine\" | \"cosine\" | \"gaussian\" | \"complex\" | \"standing\" | \"traveling\";\n  amplitude: number;\n  frequency: number;\n  phase: number;\n  wavelength: number;\n  velocity: number;\n  damping?: number;\n  color: string;\n}\n\nexport interface GlassWaveFunctionProps {\n  width?: number;\n  height?: number;\n  waveEquations?: WaveEquation[];\n  showInterference?: boolean;\n  showPhaseSpace?: boolean;\n  showAmplitude?: boolean;\n  showFrequencySpectrum?: boolean;\n  animationSpeed?: number;\n  resolution?: number;\n  timeScale?: number;\n  showGrid?: boolean;\n  showLabels?: boolean;\n  realTimeMode?: boolean;\n  onWaveInteraction?: (\n    waveId: string,\n    position: { x: number; y: number }\n  ) => void;\n  className?: string;\n}\n\nconst waveTypes = {\n  sine: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) => amplitude * Math.sin(k * x - 2 * Math.PI * frequency * t + phase),\n\n  cosine: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) => amplitude * Math.cos(k * x - 2 * Math.PI * frequency * t + phase),\n\n  gaussian: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) =>\n    amplitude *\n    Math.exp(-Math.pow(x - velocity * t, 2) / 20) *\n    Math.sin(k * x - 2 * Math.PI * frequency * t + phase),\n\n  complex: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) => {\n    const real =\n      amplitude * Math.cos(k * x - 2 * Math.PI * frequency * t + phase);\n    const imag =\n      amplitude * Math.sin(k * x - 2 * Math.PI * frequency * t + phase);\n    return Math.sqrt(real * real + imag * imag);\n  },\n\n  standing: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) =>\n    amplitude * Math.sin(k * x + phase) * Math.cos(2 * Math.PI * frequency * t),\n\n  traveling: (\n    x: number,\n    t: number,\n    amplitude: number,\n    frequency: number,\n    phase: number,\n    k: number,\n    velocity: number\n  ) => amplitude * Math.sin(k * x - 2 * Math.PI * frequency * t + phase),\n};\n\nexport const GlassWaveFunction = forwardRef<\n  HTMLDivElement,\n  GlassWaveFunctionProps\n>(\n  (\n    {\n      width = 800,\n      height = 400,\n      waveEquations = [],\n      showInterference = true,\n      showPhaseSpace = false,\n      showAmplitude = true,\n      showFrequencySpectrum = false,\n      animationSpeed = 1,\n      resolution = 2,\n      timeScale = 1,\n      showGrid = true,\n      showLabels = true,\n      realTimeMode = true,\n      onWaveInteraction,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const phaseCanvasRef = useRef<HTMLCanvasElement>(null);\n    const spectrumCanvasRef = useRef<HTMLCanvasElement>(null);\n    const animationFrameRef = useRef<number | null>(null);\n    const [currentTime, setCurrentTime] = useState(0);\n    const [selectedWave, setSelectedWave] = useState<string | null>(null);\n    const id = useA11yId(\"glass-wave-function\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Time evolution\n    useEffect(() => {\n      const cancelAnimation = () => {\n        if (animationFrameRef.current !== null) {\n          cancelAnimationFrame(animationFrameRef.current);\n          animationFrameRef.current = null;\n        }\n      };\n\n      if (!realTimeMode || !shouldAnimate) {\n        cancelAnimation();\n        setCurrentTime((prev) => (prev !== 0 ? 0 : prev));\n        return;\n      }\n\n      const tick = () => {\n        setCurrentTime((prev) => prev + 0.1 * animationSpeed * timeScale);\n        animationFrameRef.current = requestAnimationFrame(tick);\n      };\n\n      animationFrameRef.current = requestAnimationFrame(tick);\n\n      return () => {\n        cancelAnimation();\n      };\n    }, [realTimeMode, animationSpeed, timeScale, shouldAnimate]);\n\n    // Generate wave data (pure calculation, no side effects)\n    const waveData = useMemo(() => {\n      const points = Math.floor(width / resolution);\n      const newWaveData: Record<string, number[]> = {};\n\n      if (!waveEquations || waveEquations.length === 0) {\n        return {};\n      }\n\n      waveEquations.forEach((wave: any) => {\n        const k = (2 * Math.PI) / wave.wavelength;\n        const data: number[] = [];\n\n        for (let i = 0; i < points; i++) {\n          const x = (i / points) * width - width / 2; // Center the wave\n          const waveFunc = waveTypes[wave.type as keyof typeof waveTypes];\n          let y = waveFunc(\n            x,\n            currentTime,\n            wave.amplitude,\n            wave.frequency,\n            wave.phase,\n            k,\n            wave.velocity\n          );\n\n          // Apply damping if present\n          if (wave.damping && wave.damping > 0) {\n            y *= Math.exp(-wave.damping * Math.abs(x));\n          }\n\n          data.push(y);\n        }\n\n        newWaveData[wave.id] = data;\n      });\n\n      return newWaveData;\n    }, [waveEquations, currentTime, width, resolution]);\n\n    // Main canvas rendering\n    useEffect(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      ctx.clearRect(0, 0, width, height);\n\n      // Grid\n      if (showGrid) {\n        ctx.strokeStyle = \"var(--glass-bg-default)\";\n        ctx.lineWidth = 1;\n\n        // Horizontal grid lines\n        for (let y = 0; y <= height; y += 40) {\n          ctx.beginPath();\n          ctx.moveTo(0, y);\n          ctx.lineTo(width, y);\n          ctx.stroke();\n        }\n\n        // Vertical grid lines\n        for (let x = 0; x <= width; x += 40) {\n          ctx.beginPath();\n          ctx.moveTo(x, 0);\n          ctx.lineTo(x, height);\n          ctx.stroke();\n        }\n\n        // Center line\n        ctx.strokeStyle = \"var(--glass-bg-hover)\";\n        ctx.lineWidth = 2;\n        ctx.beginPath();\n        ctx.moveTo(0, height / 2);\n        ctx.lineTo(width, height / 2);\n        ctx.stroke();\n      }\n\n      // Draw individual waves\n      Object.entries(waveData).forEach(([waveId, data]) => {\n        const wave = waveEquations.find((w) => w.id === waveId);\n        if (!wave) return;\n\n        ctx.strokeStyle = wave.color;\n        ctx.lineWidth = selectedWave === waveId ? 3 : 2;\n        ctx.globalAlpha = selectedWave && selectedWave !== waveId ? 0.3 : 0.8;\n\n        ctx.beginPath();\n        data.forEach((y, i) => {\n          const x = (i / data.length) * width;\n          const canvasY = height / 2 - y * (height / 4); // Scale and center\n\n          if (i === 0) {\n            ctx.moveTo(x, canvasY);\n          } else {\n            ctx.lineTo(x, canvasY);\n          }\n        });\n        ctx.stroke();\n\n        // Wave labels\n        if (showLabels) {\n          ctx.fillStyle = wave.color;\n          ctx.font = \"12px Arial\";\n          ctx.globalAlpha = 1;\n          ctx.fillText(\n            wave.name,\n            10,\n            20 + Object.keys(waveData).indexOf(waveId) * 20\n          );\n        }\n      });\n\n      // Interference pattern\n      if (showInterference && waveEquations.length > 1) {\n        const interferenceData: number[] = [];\n        const dataLength = Math.min(\n          ...Object.values(waveData).map((d: any) => d.length)\n        );\n\n        for (let i = 0; i < dataLength; i++) {\n          const sum = Object.values(waveData).reduce(\n            (total, data) => total + (data[i] || 0),\n            0\n          );\n          interferenceData.push(sum);\n        }\n\n        ctx.strokeStyle = \"var(--glass-white)\";\n        ctx.lineWidth = 2;\n        ctx.globalAlpha = 0.9;\n        ctx.setLineDash([5, 5]);\n\n        ctx.beginPath();\n        interferenceData.forEach((y, i) => {\n          const x = (i / interferenceData.length) * width;\n          const canvasY = height / 2 - y * (height / 4);\n\n          if (i === 0) {\n            ctx.moveTo(x, canvasY);\n          } else {\n            ctx.lineTo(x, canvasY);\n          }\n        });\n        ctx.stroke();\n        ctx.setLineDash([]);\n      }\n\n      ctx.globalAlpha = 1;\n    }, [\n      waveData,\n      waveEquations,\n      width,\n      height,\n      showGrid,\n      showLabels,\n      showInterference,\n      selectedWave,\n    ]);\n\n    // Phase space visualization\n    useEffect(() => {\n      if (!showPhaseSpace) return;\n\n      const canvas = phaseCanvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const phaseWidth = 200;\n      const phaseHeight = 200;\n\n      ctx.clearRect(0, 0, phaseWidth, phaseHeight);\n\n      // Grid for phase space\n      ctx.strokeStyle = \"var(--glass-bg-default)\";\n      ctx.lineWidth = 1;\n\n      for (let i = 0; i <= 10; i++) {\n        const x = (i / 10) * phaseWidth;\n        const y = (i / 10) * phaseHeight;\n\n        ctx.beginPath();\n        ctx.moveTo(x, 0);\n        ctx.lineTo(x, phaseHeight);\n        ctx.moveTo(0, y);\n        ctx.lineTo(phaseWidth, y);\n        ctx.stroke();\n      }\n\n      // Draw phase trajectories\n      waveEquations.forEach((wave, index) => {\n        const data = waveData[wave.id];\n        if (!data) return;\n\n        ctx.strokeStyle = wave.color;\n        ctx.lineWidth = 2;\n        ctx.globalAlpha = 0.7;\n\n        ctx.beginPath();\n        data.forEach((amplitude, i) => {\n          if (i === 0) return;\n\n          const prevAmplitude = data[i - 1];\n          const velocity = amplitude - prevAmplitude; // Approximate velocity\n\n          const x = ((amplitude + 2) / 4) * phaseWidth; // Normalize to canvas\n          const y = phaseHeight - ((velocity + 2) / 4) * phaseHeight;\n\n          if (i === 1) {\n            ctx.moveTo(x, y);\n          } else {\n            ctx.lineTo(x, y);\n          }\n        });\n        ctx.stroke();\n      });\n\n      ctx.globalAlpha = 1;\n    }, [showPhaseSpace, waveData, waveEquations]);\n\n    // Frequency spectrum\n    useEffect(() => {\n      if (!showFrequencySpectrum) return;\n\n      const canvas = spectrumCanvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      const spectrumWidth = 300;\n      const spectrumHeight = 150;\n\n      ctx.clearRect(0, 0, spectrumWidth, spectrumHeight);\n\n      // Draw frequency bars\n      waveEquations.forEach((wave, index) => {\n        const barWidth = spectrumWidth / waveEquations.length;\n        const barHeight = (wave.amplitude / 2) * spectrumHeight;\n        const x = index * barWidth;\n        const y = spectrumHeight - barHeight;\n\n        ctx.fillStyle = wave.color;\n        ctx.globalAlpha = 0.7;\n        ctx.fillRect(x + 2, y, barWidth - 4, barHeight);\n\n        // Frequency label\n        ctx.fillStyle = \"var(--glass-white)\";\n        ctx.font = \"10px Arial\";\n        ctx.globalAlpha = 1;\n        ctx.fillText(\n          `${wave.frequency.toFixed(1)}Hz`,\n          x + 5,\n          spectrumHeight - 5\n        );\n      });\n    }, [showFrequencySpectrum, waveEquations]);\n\n    const handleCanvasClick = (e: React.MouseEvent<HTMLCanvasElement>) => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const rect = canvas.getBoundingClientRect();\n      const x = e.clientX - rect.left;\n      const y = e.clientY - rect.top;\n\n      // Find closest wave\n      let closestWave: string | null = null;\n      let minDistance = Infinity;\n\n      Object.entries(waveData).forEach(([waveId, data]) => {\n        const dataIndex = Math.floor((x / width) * data.length);\n        const waveY = height / 2 - data[dataIndex] * (height / 4);\n        const distance = Math.abs(y - waveY);\n\n        if (distance < minDistance && distance < 30) {\n          minDistance = distance;\n          closestWave = waveId;\n        }\n      });\n\n      if (closestWave) {\n        setSelectedWave((prev: any) =>\n          prev === closestWave ? null : closestWave\n        );\n        onWaveInteraction?.(closestWave, { x, y });\n      }\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={cn(\"glass-p-4 glass-space-y-4\", className)}\n        {...props}\n      >\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <div>\n            <h3\n              className={cn(\n                \"glass-text-lg glass-font-semibold glass-text-primary\"\n              )}\n            >\n              Wave Function Visualization\n            </h3>\n            <p className={cn(\"glass-text-sm glass-text-secondary\")}>\n              {waveEquations.length} wave{waveEquations.length !== 1 ? \"s\" : \"\"}\n              {selectedWave &&\n                ` \u2022 Selected: ${waveEquations.find((w) => w.id === selectedWave)?.name}`}\n            </p>\n          </div>\n\n          <div className={cn(\"glass-flex glass-items-center glass-space-x-4\")}>\n            {realTimeMode && (\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-space-x-1 glass-text-success\"\n                )}\n              >\n                <div\n                  className={cn(\n                    \"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\"\n                  )}\n                />\n                <span className={cn(\"glass-text-xs\")}>Live</span>\n              </div>\n            )}\n            <div className={cn(\"glass-text-sm glass-text-secondary\")}>\n              t = {currentTime.toFixed(1)}\n            </div>\n          </div>\n        </div>\n\n        {/* Main wave canvas */}\n        <div className={cn(\"glass-relative\")}>\n          <canvas\n            ref={canvasRef}\n            width={width}\n            height={height}\n            className={cn(\n              \"glass-border glass-border-primary glass-radius-lg glass-surface-dark glass-cursor-crosshair\"\n            )}\n            onClick={handleCanvasClick}\n          />\n\n          {/* Amplitude indicators */}\n          {showAmplitude && (\n            <div\n              className={cn(\n                \"glass-absolute glass-left-2 glass-top-2 glass-space-y-1\"\n              )}\n            >\n              <div className={cn(\"glass-text-xs glass-text-secondary\")}>\n                Amplitude\n              </div>\n              <div className={cn(\"glass-text-xs glass-text-success\")}>+2</div>\n              <div\n                className={cn(\"glass-text-xs glass-text-muted\")}\n                style={{ marginTop: height / 4 - 20 }}\n              >\n                0\n              </div>\n              <div\n                className={cn(\"glass-text-xs glass-text-danger\")}\n                style={{ marginTop: height / 2 - 40 }}\n              >\n                -2\n              </div>\n            </div>\n          )}\n        </div>\n\n        <div className={cn(\"glass-flex glass-space-x-4\")}>\n          {/* Phase space */}\n          {showPhaseSpace && (\n            <div>\n              <h4\n                className={cn(\n                  \"glass-text-sm glass-font-medium glass-text-primary glass-mb-2\"\n                )}\n              >\n                Phase Space\n              </h4>\n              <canvas\n                ref={phaseCanvasRef}\n                width={200}\n                height={200}\n                className={cn(\n                  \"glass-border glass-border-primary glass-radius glass-surface-dark\"\n                )}\n              />\n              <div className={cn(\"glass-text-xs glass-text-muted glass-mt-1\")}>\n                Position vs Velocity\n              </div>\n            </div>\n          )}\n\n          {/* Frequency spectrum */}\n          {showFrequencySpectrum && (\n            <div>\n              <h4\n                className={cn(\n                  \"glass-text-sm glass-font-medium glass-text-primary glass-mb-2\"\n                )}\n              >\n                Frequency Spectrum\n              </h4>\n              <canvas\n                ref={spectrumCanvasRef}\n                width={300}\n                height={150}\n                className={cn(\n                  \"glass-border glass-border-primary glass-radius glass-surface-dark\"\n                )}\n              />\n            </div>\n          )}\n        </div>\n\n        {/* Wave parameters */}\n        <div\n          className={cn(\n            \"glass-p-3 glass-radius-lg glass-border glass-border-subtle glass-space-y-3\",\n            createGlassStyle({ blur: \"sm\", opacity: 0.6 }).background\n          )}\n        >\n          <h4\n            className={cn(\n              \"glass-text-sm glass-font-semibold glass-text-primary\"\n            )}\n          >\n            Wave Parameters\n          </h4>\n\n          <div className={cn(\"glass-grid glass-gap-2\")}>\n            {waveEquations.map((wave: any) => (\n              <motion.div\n                key={wave.id}\n                className={cn(\n                  `glass-p-2 glass-radius glass-border glass-transition-colors glass-duration-[${ANIMATION.DURATION.fast}ms] glass-cursor-pointer`,\n                  selectedWave === wave.id\n                    ? \"glass-border-primary glass-surface-subtle\"\n                    : \"glass-border-muted hover:glass-border-primary\"\n                )}\n                onClick={() =>\n                  setSelectedWave((prev: any) =>\n                    prev === wave.id ? null : wave.id\n                  )\n                }\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.98 }}\n              >\n                <div\n                  className={cn(\n                    \"glass-flex glass-items-center glass-justify-between\"\n                  )}\n                >\n                  <div\n                    className={cn(\n                      \"glass-flex glass-items-center glass-space-x-2\"\n                    )}\n                  >\n                    <div\n                      className={cn(\"glass-w-3 glass-h-3 glass-radius-full\")}\n                      style={{ backgroundColor: wave.color }}\n                    />\n                    <span\n                      className={cn(\n                        \"glass-text-sm glass-font-medium glass-text-primary\"\n                      )}\n                    >\n                      {wave.name}\n                    </span>\n                    <span\n                      className={cn(\n                        \"glass-text-xs glass-text-muted glass-capitalize\"\n                      )}\n                    >\n                      ({wave.type})\n                    </span>\n                  </div>\n\n                  <div\n                    className={cn(\n                      \"glass-flex glass-items-center glass-space-x-4 glass-text-xs glass-text-secondary\"\n                    )}\n                  >\n                    <span>A: {wave.amplitude.toFixed(1)}</span>\n                    <span>f: {wave.frequency.toFixed(1)}Hz</span>\n                    <span>\u03BB: {wave.wavelength.toFixed(0)}</span>\n                    <span>v: {wave.velocity.toFixed(0)}</span>\n                  </div>\n                </div>\n              </motion.div>\n            ))}\n          </div>\n        </div>\n\n        {/* Controls */}\n        <div\n          className={cn(\n            \"glass-flex glass-items-center glass-justify-between glass-text-sm glass-text-secondary\"\n          )}\n        >\n          <span>Click waves to select \u2022 Time: {timeScale}x speed</span>\n          <div className={cn(\"glass-flex glass-items-center glass-space-x-4\")}>\n            <span>Resolution: {resolution}px</span>\n            <span>Animation: {animationSpeed}x</span>\n          </div>\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\nimport React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport type EntanglementState = \"entangled\" | \"decohering\" | \"collapsed\";\n\nexport interface QuantumEntanglementPair {\n  id: string;\n  nodes: [string, string];\n  fidelity: number;\n  phaseCorrelation: number;\n  state?: EntanglementState;\n  latency?: number;\n}\n\nexport interface QuantumEntanglementVisualizerProps {\n  className?: string;\n  pairs?: QuantumEntanglementPair[];\n  highlightThreshold?: number;\n}\n\nconst DEFAULT_PAIRS: QuantumEntanglementPair[] = [\n  {\n    id: \"alpha\",\n    nodes: [\"Q1\", \"Q8\"],\n    fidelity: 0.93,\n    phaseCorrelation: 0.84,\n    state: \"entangled\",\n    latency: 4.2,\n  },\n  {\n    id: \"beta\",\n    nodes: [\"Q3\", \"Q11\"],\n    fidelity: 0.68,\n    phaseCorrelation: 0.49,\n    state: \"decohering\",\n    latency: 7.8,\n  },\n  {\n    id: \"gamma\",\n    nodes: [\"Q2\", \"Q5\"],\n    fidelity: 0.81,\n    phaseCorrelation: 0.73,\n    state: \"entangled\",\n    latency: 5.4,\n  },\n  {\n    id: \"delta\",\n    nodes: [\"Q7\", \"Q12\"],\n    fidelity: 0.39,\n    phaseCorrelation: 0.31,\n    state: \"collapsed\",\n    latency: 9.1,\n  },\n];\n\nconst stateStyles: Record<EntanglementState, string> = {\n  entangled: \"border-emerald-400/60 bg-emerald-500/10 text-emerald-200\",\n  decohering: \"border-amber-400/60 bg-amber-400/10 text-amber-100\",\n  collapsed: \"border-rose-400/60 bg-rose-500/10 text-rose-100\",\n};\n\nexport function QuantumEntanglementVisualizer({\n  className,\n  pairs = DEFAULT_PAIRS,\n  highlightThreshold = 0.7,\n}: QuantumEntanglementVisualizerProps) {\n  const normalizedPairs = pairs.length > 0 ? pairs : DEFAULT_PAIRS;\n\n  return (\n    <OptimizedGlass\n      role=\"table\"\n      aria-label=\"Quantum entanglement visualizer\"\n      className={cn(\n        \"glass-radius-3xl glass-border glass-border-soft glass-p-6 space-y-6\",\n        \"bg-gradient-to-br from-white/10 via-purple-500/15 to-white/5\",\n        className\n      )}\n    >\n      <header>\n        <h2 className=\"glass-text-xl glass-font-semibold glass-text-primary\">\n          Quantum Entanglement Visualizer\n        </h2>\n        <p className=\"glass-text-sm glass-text-primary-opacity-70\">\n          Monitor fidelity, phase correlation, and decoherence risk for\n          entangled qubit pairs.\n        </p>\n      </header>\n\n      <div className=\"glass-grid glass-gap-4 lg:glass-grid-cols-2\">\n        {normalizedPairs.map((pair) => {\n          const state =\n            pair.state ??\n            (pair.fidelity >= highlightThreshold\n              ? \"entangled\"\n              : pair.fidelity >= 0.5\n                ? \"decohering\"\n                : \"collapsed\");\n          return (\n            <div\n              key={pair.id}\n              className={cn(\n                \"rounded-2xl border bg-white/5 p-4 text-primary/85 backdrop-blur transition\",\n                \"border-white/10 hover:border-white/30\",\n                stateStyles[state]\n              )}\n            >\n              <div className=\"glass-flex glass-items-start glass-justify-between\">\n                <div>\n                  <div className=\"glass-text-xs glass-uppercase glass-tracking-wide glass-text-primary-glass-opacity-60\">\n                    Pair\n                  </div>\n                  <div className=\"glass-text-lg glass-font-semibold glass-text-primary\">\n                    {pair.nodes[0]} \u2194 {pair.nodes[1]}\n                  </div>\n                </div>\n                <span className=\"glass-radius-full glass-px-3 glass-py-1 glass-text-xs glass-font-semibold glass-uppercase glass-tracking-wide\">\n                  {state}\n                </span>\n              </div>\n\n              <dl className=\"glass-mt-4 glass-grid glass-gap-3 glass-text-xs glass-text-primary-opacity-70\">\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <dt>Fidelity</dt>\n                  <dd className=\"glass-font-semibold glass-text-primary-glass-opacity-90\">\n                    {(pair.fidelity * 100).toFixed(1)}%\n                  </dd>\n                </div>\n                <div className=\"glass-flex glass-items-center glass-justify-between\">\n                  <dt>Phase correlation</dt>\n                  <dd className=\"glass-font-semibold glass-text-primary-glass-opacity-90\">\n                    {(pair.phaseCorrelation * 100).toFixed(1)}%\n                  </dd>\n                </div>\n                {typeof pair.latency === \"number\" && (\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <dt>Latency</dt>\n                    <dd className=\"glass-font-semibold glass-text-primary-glass-opacity-80\">\n                      {pair.latency.toFixed(1)} \u03BCs\n                    </dd>\n                  </div>\n                )}\n              </dl>\n\n              <div className=\"glass-mt-4 glass-h-2 glass-w-full glass-overflow-hidden glass-radius-full glass-surface-subtle/10\">\n                <div\n                  className=\"glass-h-full glass-radius-full glass-gradient-primary glass-gradient-primary glass-gradient-primary\"\n                  style={{ width: `${pair.fidelity * 100}%` }}\n                />\n              </div>\n            </div>\n          );\n        })}\n      </div>\n    </OptimizedGlass>\n  );\n}\n\nexport default QuantumEntanglementVisualizer;\n", "export interface QuantumNeuromorphicState {\n  coherence: number;\n  entanglementDensity: number;\n  energyUtilization: number;\n  learningRate: number;\n  iteration: number;\n}\n\nexport interface QuantumNeuromorphicStepOptions {\n  fieldIntensity?: number;\n  decoherenceNoise?: number;\n  adaptiveLearningRate?: boolean;\n}\n\nconst clamp = (value: number, min = 0, max = 1) => Math.min(max, Math.max(min, value));\n\nexport class QuantumNeuromorphicEngine {\n  private state: QuantumNeuromorphicState;\n\n  constructor(initialState?: Partial<QuantumNeuromorphicState>) {\n    this.state = {\n      coherence: 0.8,\n      entanglementDensity: 0.72,\n      energyUtilization: 0.65,\n      learningRate: 0.45,\n      iteration: 0,\n      ...initialState,\n    };\n  }\n\n  get snapshot(): QuantumNeuromorphicState {\n    return { ...this.state };\n  }\n\n  step(synapticWeights: number[], options: QuantumNeuromorphicStepOptions = {}): QuantumNeuromorphicState {\n    if (synapticWeights.length === 0) {\n      this.state.iteration += 1;\n      return this.snapshot;\n    }\n\n    const mean = synapticWeights.reduce((sum, weight) => sum + weight, 0) / synapticWeights.length;\n    const variance = synapticWeights.reduce((sum, weight) => sum + (weight - mean) ** 2, 0) / synapticWeights.length;\n\n    const intensity = options.fieldIntensity ?? 0.6;\n    const noise = options.decoherenceNoise ?? 0.18;\n\n    const coherenceDelta = clamp(0.05 - noise * 0.08 + intensity * 0.12 - variance * 0.04, -0.08, 0.08);\n    const entanglementDelta = clamp(intensity * 0.1 - noise * 0.07 + mean * 0.05, -0.12, 0.12);\n    const energyDelta = clamp((Math.abs(mean) + variance) * 0.15 - noise * 0.05, -0.1, 0.1);\n\n    const nextLearningRate = options.adaptiveLearningRate\n      ? clamp(this.state.learningRate + (variance > 0.2 ? 0.04 : -0.03))\n      : this.state.learningRate;\n\n    this.state = {\n      coherence: clamp(this.state.coherence + coherenceDelta),\n      entanglementDensity: clamp(this.state.entanglementDensity + entanglementDelta),\n      energyUtilization: clamp(this.state.energyUtilization + energyDelta),\n      learningRate: nextLearningRate,\n      iteration: this.state.iteration + 1,\n    };\n\n    return this.snapshot;\n  }\n\n  reset(state?: Partial<QuantumNeuromorphicState>) {\n    this.state = {\n      coherence: 0.8,\n      entanglementDensity: 0.72,\n      energyUtilization: 0.65,\n      learningRate: 0.45,\n      iteration: 0,\n      ...state,\n    };\n  }\n}\n\nexport const runQuantumNeuromorphicCycle = (\n  engine: QuantumNeuromorphicEngine,\n  weightSeries: number[][],\n  options?: QuantumNeuromorphicStepOptions,\n): QuantumNeuromorphicState[] => {\n  return weightSeries.map((weights) => engine.step(weights, options));\n};\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 uses in-component mock data.\n *\n * CollaborativeGlassWorkspace illustrates real-time multi-user collaboration UI\n * (cursors, presence, comments) on a glass surface. It does NOT connect to a real\n * collaboration backend (CRDT/OT/WebSocket sync) \u2014 collaborator presence and edits\n * are simulated locally. Wire it to a real sync provider before production use.\n */\nimport React from \"react\";\nimport {\n  ClipboardPaste,\n  Copy,\n  Layers,\n  Maximize,\n  Mic,\n  MicOff,\n  Minimize,\n  Redo,\n  Save,\n  Settings,\n  Trash2,\n  Undo,\n  Wifi,\n} from \"@/icons\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { CollaborationProvider } from \"./GlassCollaborationProvider\";\n\ntype WorkspaceLayout = \"split\" | \"tabs\" | \"canvas-focused\" | \"editor-focused\";\ntype WorkspaceTheme = \"dark\" | \"light\" | \"auto\";\ntype WorkspaceRole = \"admin\" | \"editor\" | \"viewer\";\ntype CursorSize = \"sm\" | \"md\" | \"lg\";\ntype CursorGlassLevel = \"low\" | \"medium\" | \"high\";\n\ninterface WorkspaceSummary {\n  id: string;\n  name: string;\n}\n\ninterface WorkspaceUser {\n  id: string;\n  name: string;\n  role: WorkspaceRole;\n  avatar?: string;\n  color?: string;\n}\n\ntype WorkspaceError = Error | string | { message?: string; code?: string };\n\ninterface CollaborativeGlassWorkspaceProps {\n  workspaceId: string;\n  userId: string;\n  userName: string;\n  userEmail: string;\n  userRole?: WorkspaceRole;\n  userAvatar?: string;\n  className?: string;\n  \"aria-label\"?: string;\n\n  // Workspace configuration\n  enableVoiceChat?: boolean;\n  enableScreenSharing?: boolean;\n  enableComments?: boolean;\n  enableVersionControl?: boolean;\n  enableRealTimeSync?: boolean;\n\n  // UI configuration\n  layout?: WorkspaceLayout;\n  theme?: WorkspaceTheme;\n  showMiniMap?: boolean;\n  showOnlineUsers?: boolean;\n  showCursors?: boolean;\n  enableAdvancedEffects?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n\n  // Canvas configuration\n  canvasWidth?: number;\n  canvasHeight?: number;\n  gridSize?: number;\n  showGrid?: boolean;\n  showRulers?: boolean;\n  enableSnapping?: boolean;\n\n  // Callbacks\n  onWorkspaceReady?: (workspace: WorkspaceSummary) => void;\n  onUserJoined?: (user: WorkspaceUser) => void;\n  onUserLeft?: (userId: string) => void;\n  onElementSelected?: (elementId: string | null) => void;\n  onError?: (error: WorkspaceError) => void;\n}\n\ninterface WorkspaceHeaderProps {\n  workspace: WorkspaceSummary;\n  currentUser: WorkspaceUser;\n  onlineUsers: WorkspaceUser[];\n  canEdit: boolean;\n  isVoiceActive: boolean;\n  voiceUsers: string[];\n  onToggleVoice: () => void;\n  onCreateSnapshot: (name: string) => void;\n  onUndo: () => void;\n  onRedo: () => void;\n  canUndo: boolean;\n  canRedo: boolean;\n  onLayoutChange: (layout: WorkspaceLayout) => void;\n  activeLayout: WorkspaceLayout;\n  onToggleSidebar: () => void;\n  onToggleFullscreen: () => void;\n  isFullscreen: boolean;\n  showOnlineUsers: boolean;\n  enableVoiceChat: boolean;\n  enableVersionControl: boolean;\n}\n\ninterface CollaborativeGlassCanvasProps {\n  width?: number;\n  height?: number;\n  gridSize?: number;\n  showGrid?: boolean;\n  showRulers?: boolean;\n  enableSnapping?: boolean;\n  onElementSelect?: (elementId: string | null) => void;\n  className?: string;\n}\n\ninterface MultiUserGlassEditorProps {\n  target?: string;\n  showPreview?: boolean;\n  showHistory?: boolean;\n  showComments?: boolean;\n  enableRealTimeSync?: boolean;\n  layout?: \"vertical\" | \"horizontal\";\n  className?: string;\n}\n\ninterface WorkspaceTabsProps extends CollaborativeGlassCanvasProps {\n  selectedElementId: string | null;\n  onElementSelect: (elementId: string | null) => void;\n  enableComments?: boolean;\n  enableRealTimeSync?: boolean;\n}\n\ninterface WorkspaceSidebarProps {\n  selectedElementId: string | null;\n  onElementSelect: (elementId: string | null) => void;\n  showMiniMap: boolean;\n  showOnlineUsers: boolean;\n  onlineUsers: WorkspaceUser[];\n  currentUser: WorkspaceUser;\n  isVoiceActive: boolean;\n  voiceUsers: string[];\n  enableComments: boolean;\n}\n\nexport interface GlassTeamCursorsProps {\n  showNames?: boolean;\n  showVoiceIndicators?: boolean;\n  cursorSize?: CursorSize;\n  glassLevel?: CursorGlassLevel;\n}\n\nexport interface GlassTeamCursorsWithEffectsProps\n  extends GlassTeamCursorsProps {\n  enableRippleEffect?: boolean;\n  enableGlowEffect?: boolean;\n}\n\ninterface VoiceChatPanelProps {\n  isActive: boolean;\n  voiceUsers: string[];\n  onClose: () => void;\n  onToggleVoice: () => void;\n}\n\ninterface VersionControlPanelProps {\n  onClose: () => void;\n  onCreateSnapshot: (name: string) => void;\n  canUndo: boolean;\n  canRedo: boolean;\n  onUndo: () => void;\n  onRedo: () => void;\n}\n\ninterface WorkspaceFloatingActionsProps {\n  isVoiceActive: boolean;\n  onToggleVoice: () => void;\n  onShowVoicePanel: () => void;\n  onShowVersionPanel: () => void;\n  onToggleFullscreen: () => void;\n  enableVoiceChat: boolean;\n  enableVersionControl: boolean;\n}\n\nexport function CollaborativeGlassWorkspace(\n  props: CollaborativeGlassWorkspaceProps\n) {\n  return (\n    <CollaborationProvider\n      roomId={props.workspaceId}\n      enableRealTime={props.enableRealTimeSync}\n    >\n      <WorkspaceContent {...props} />\n    </CollaborationProvider>\n  );\n}\n\nfunction WorkspaceContent({\n  className = \"\",\n  layout = \"split\",\n  theme = \"dark\",\n  showMiniMap = true,\n  showOnlineUsers = true,\n  showCursors = true,\n  enableAdvancedEffects = true,\n  compact = false,\n  contained = false,\n  maxHeight,\n  canvasWidth = 1200,\n  canvasHeight = 800,\n  gridSize = 20,\n  showGrid = true,\n  showRulers = false,\n  enableSnapping = true,\n  enableVoiceChat = false,\n  enableScreenSharing = false,\n  enableComments = true,\n  enableVersionControl = true,\n  enableRealTimeSync = true,\n  onWorkspaceReady,\n  onUserJoined,\n  onUserLeft,\n  onElementSelected,\n  onError,\n  \"aria-label\": ariaLabel,\n}: Omit<\n  CollaborativeGlassWorkspaceProps,\n  \"workspaceId\" | \"userId\" | \"userName\" | \"userEmail\"\n>) {\n  // Mock collaboration context - in real implementation this would use actual context\n  const mockCollaborationContext: {\n    isConnected: boolean;\n    isConnecting: boolean;\n    workspace: WorkspaceSummary;\n    users: WorkspaceUser[];\n    currentUser: WorkspaceUser;\n    onlineUsers: WorkspaceUser[];\n    canEdit: boolean;\n    isVoiceActive: boolean;\n    voiceUsers: string[];\n    toggleVoice: () => void;\n    addComment: () => void;\n    createSnapshot: (name: string) => void;\n    undo: () => void;\n    redo: () => void;\n    canUndo: boolean;\n    canRedo: boolean;\n    connect: () => void;\n    disconnect: () => void;\n  } = {\n    isConnected: true,\n    isConnecting: false,\n    workspace: { id: \"workspace-1\", name: \"Collaborative Design Session\" },\n    users: [],\n    currentUser: { id: \"user-1\", name: \"Current User\", role: \"admin\" },\n    onlineUsers: [\n      {\n        id: \"user-1\",\n        name: \"Alice Johnson\",\n        role: \"admin\",\n        avatar: \"\",\n        color: \"hsl(var(--glass-color-primary))\",\n      },\n      {\n        id: \"user-2\",\n        name: \"Bob Smith\",\n        role: \"editor\",\n        avatar: \"\",\n        color: \"hsl(var(--glass-color-success))\",\n      },\n      {\n        id: \"user-3\",\n        name: \"Carol Davis\",\n        role: \"viewer\",\n        avatar: \"\",\n        color: \"hsl(var(--glass-color-warning))\",\n      },\n    ],\n    canEdit: true,\n    isVoiceActive: false,\n    voiceUsers: [],\n    toggleVoice: () => {},\n    addComment: () => {},\n    createSnapshot: () => {},\n    undo: () => {},\n    redo: () => {},\n    canUndo: true,\n    canRedo: false,\n    connect: () => {},\n    disconnect: () => {},\n  };\n\n  const {\n    isConnected,\n    isConnecting,\n    workspace,\n    currentUser,\n    onlineUsers,\n    canEdit,\n    isVoiceActive,\n    voiceUsers,\n    toggleVoice,\n    createSnapshot,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n  } = mockCollaborationContext;\n\n  // Local state\n  const [activeLayout, setActiveLayout] = useState(layout);\n  const [selectedElementId, setSelectedElementId] = useState<string | null>(\n    null\n  );\n  const [showSidebar, setShowSidebar] = useState(!compact);\n  const [showToolbar, setShowToolbar] = useState(!compact);\n  const [isFullscreen, setIsFullscreen] = useState(false);\n  const [showVoicePanel, setShowVoicePanel] = useState(false);\n  const [showVersionPanel, setShowVersionPanel] = useState(false);\n  const boundedHeight = maxHeight ?? (compact || contained ? 260 : undefined);\n\n  // Handle workspace events\n  useEffect(() => {\n    if (workspace) {\n      onWorkspaceReady?.(workspace);\n    }\n  }, [workspace, onWorkspaceReady]);\n\n  // Handle element selection\n  const handleElementSelect = useCallback(\n    (elementId: string | null) => {\n      setSelectedElementId(elementId);\n      onElementSelected?.(elementId);\n    },\n    [onElementSelected]\n  );\n\n  // Layout configurations\n  const layoutConfig = useMemo(() => {\n    switch (activeLayout) {\n      case \"canvas-focused\":\n        return {\n          canvasSize: \"glass-flex-1\",\n          editorSize: \"glass-w-80\",\n          direction: \"row\",\n          canvasFirst: true,\n        };\n      case \"editor-focused\":\n        return {\n          canvasSize: \"glass-w-80\",\n          editorSize: \"glass-flex-1\",\n          direction: \"row\",\n          canvasFirst: false,\n        };\n      case \"tabs\":\n        return {\n          canvasSize: \"glass-w-full\",\n          editorSize: \"glass-w-full\",\n          direction: \"col\",\n          canvasFirst: true,\n        };\n      default: // 'split'\n        return {\n          canvasSize: \"glass-flex-1\",\n          editorSize: \"glass-flex-1\",\n          direction: \"row\",\n          canvasFirst: true,\n        };\n    }\n  }, [activeLayout]);\n\n  // Connection status\n  if (!isConnected && !isConnecting) {\n    return (\n      <WorkspaceConnectionError\n        onRetry={() => {}}\n        error=\"Failed to connect to collaboration server\"\n      />\n    );\n  }\n\n  if (isConnecting) {\n    return <WorkspaceLoadingState />;\n  }\n\n  if (!workspace || !currentUser) {\n    return <WorkspaceLoadingState message=\"Setting up workspace...\" />;\n  }\n\n  return (\n    <div\n      className={cn(\n        \"glass-collaborative-workspace workspace-glass-shell glass-relative glass-flex glass-flex-col glass-surface-overlay\",\n        compact || contained\n          ? \"glass-h-full glass-min-h-0 glass-overflow-hidden\"\n          : \"glass-h-screen\",\n        className\n      )}\n      style={{\n        ...(boundedHeight !== undefined\n          ? {\n              maxHeight:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n              height:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n            }\n          : null),\n      }}\n      role=\"main\"\n      aria-live=\"polite\"\n      aria-label={ariaLabel}\n    >\n      <style>{`\n        .glass-collaborative-workspace.workspace-glass-shell {\n          background: linear-gradient(135deg, #07111f 0%, #0f172a 44%, #111827 100%);\n          color: var(--glass-text-primary);\n        }\n\n        .glass-collaborative-workspace .workspace-glass-panel {\n          background: var(--glass-neutral-level3-surface);\n          border-color: var(--glass-neutral-level3-border-color);\n          color: var(--glass-neutral-level3-text-primary);\n          backdrop-filter: blur(var(--glass-neutral-level3-blur)) var(--glass-filter-base);\n          -webkit-backdrop-filter: blur(var(--glass-neutral-level3-blur)) var(--glass-filter-base);\n          box-shadow: var(--glass-neutral-level3-shadow);\n        }\n\n        .glass-collaborative-workspace .workspace-glass-panel label,\n        .glass-collaborative-workspace .workspace-glass-panel p,\n        .glass-collaborative-workspace .workspace-glass-panel span {\n          color: inherit;\n        }\n\n        .glass-collaborative-workspace .workspace-glass-panel button,\n        .glass-collaborative-workspace .workspace-glass-panel .workspace-glass-button {\n          background-color: rgba(var(--glass-color-white) / 0.1);\n          border: 1px solid var(--glass-border-default);\n          color: var(--glass-text-primary);\n        }\n\n        .glass-collaborative-workspace .workspace-glass-panel .glass-surface-primary,\n        .glass-collaborative-workspace .workspace-glass-button-primary {\n          background: var(--glass-primary-level3-surface);\n          border-color: var(--glass-primary-level3-border-color);\n          color: var(--glass-primary-level3-text-primary);\n        }\n\n        .glass-collaborative-workspace .workspace-glass-inset {\n          background: rgba(var(--glass-color-white) / 0.06);\n          border: 1px solid var(--glass-border-default);\n          color: var(--glass-text-primary);\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-number,\n        .glass-collaborative-workspace .glass-collaboration-range {\n          appearance: none;\n          -webkit-appearance: none;\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-number {\n          background: rgba(var(--glass-color-white) / 0.08);\n          border: 1px solid var(--glass-border-default);\n          box-shadow: inset 0 1px 0 rgba(var(--glass-color-white) / 0.12);\n          color: var(--glass-text-primary);\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-number::placeholder {\n          color: var(--glass-text-tertiary);\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-number::-webkit-outer-spin-button,\n        .glass-collaborative-workspace .glass-collaboration-number::-webkit-inner-spin-button {\n          -webkit-appearance: none;\n          margin: 0;\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-range {\n          height: 0.625rem;\n          border-radius: 999px;\n          border: 1px solid rgba(148, 163, 184, 0.42);\n          background:\n            linear-gradient(90deg, rgba(56, 189, 248, 0.9), rgba(34, 197, 94, 0.5)),\n            rgba(15, 23, 42, 0.72);\n          box-shadow:\n            inset 0 1px 2px rgba(2, 6, 23, 0.28),\n            0 1px 0 rgba(255, 255, 255, 0.08);\n          cursor: pointer;\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-range::-webkit-slider-thumb {\n          appearance: none;\n          -webkit-appearance: none;\n          width: 1.125rem;\n          height: 1.125rem;\n          border-radius: 999px;\n          border: 2px solid rgba(248, 250, 252, 0.96);\n          background: #38bdf8;\n          box-shadow: 0 6px 18px rgba(14, 165, 233, 0.4);\n        }\n\n        .glass-collaborative-workspace .glass-collaboration-range::-moz-range-thumb {\n          width: 1.125rem;\n          height: 1.125rem;\n          border-radius: 999px;\n          border: 2px solid rgba(248, 250, 252, 0.96);\n          background: #38bdf8;\n          box-shadow: 0 6px 18px rgba(14, 165, 233, 0.4);\n        }\n      `}</style>\n      {/* Workspace Header */}\n      {showToolbar && (\n        <WorkspaceHeader\n          workspace={workspace}\n          currentUser={currentUser}\n          onlineUsers={onlineUsers}\n          canEdit={canEdit}\n          isVoiceActive={isVoiceActive}\n          voiceUsers={voiceUsers}\n          onToggleVoice={toggleVoice}\n          onCreateSnapshot={createSnapshot}\n          onUndo={undo}\n          onRedo={redo}\n          canUndo={canUndo}\n          canRedo={canRedo}\n          onLayoutChange={setActiveLayout}\n          activeLayout={activeLayout}\n          onToggleSidebar={() => setShowSidebar(!showSidebar)}\n          onToggleFullscreen={() => setIsFullscreen(!isFullscreen)}\n          isFullscreen={isFullscreen}\n          showOnlineUsers={showOnlineUsers}\n          enableVoiceChat={enableVoiceChat}\n          enableVersionControl={enableVersionControl}\n        />\n      )}\n\n      {/* Main Workspace Content */}\n      <div\n        className={cn(\n          \"glass-flex-1 glass-flex glass-min-h-0\",\n          layoutConfig.direction === \"col\" ? \"glass-flex-col\" : \"glass-flex-row\"\n        )}\n      >\n        {activeLayout === \"tabs\" ? (\n          <WorkspaceTabs\n            selectedElementId={selectedElementId}\n            onElementSelect={handleElementSelect}\n            width={canvasWidth}\n            height={canvasHeight}\n            gridSize={gridSize}\n            showGrid={showGrid}\n            showRulers={showRulers}\n            enableSnapping={enableSnapping}\n            enableComments={enableComments}\n            enableRealTimeSync={enableRealTimeSync}\n          />\n        ) : (\n          <>\n            {/* Canvas Section */}\n            {layoutConfig.canvasFirst && (\n              <div\n                className={cn(\n                  layoutConfig.canvasSize,\n                  \"glass-min-w-0 glass-p-4\"\n                )}\n              >\n                <CollaborativeGlassCanvas\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  gridSize={gridSize}\n                  showGrid={showGrid}\n                  showRulers={showRulers}\n                  enableSnapping={enableSnapping}\n                  onElementSelect={handleElementSelect}\n                  className={cn(\"glass-h-full\")}\n                />\n              </div>\n            )}\n\n            {/* Editor Section */}\n            {!compact && (\n              <div\n                className={cn(\n                  layoutConfig.editorSize,\n                  \"glass-min-w-0 glass-p-4\"\n                )}\n              >\n                <MultiUserGlassEditor\n                  target={selectedElementId || \"global\"}\n                  showPreview={true}\n                  showHistory={enableVersionControl}\n                  showComments={enableComments}\n                  enableRealTimeSync={enableRealTimeSync}\n                  layout=\"vertical\"\n                  className=\"glass-h-full\"\n                />\n              </div>\n            )}\n\n            {/* Canvas Section (if not first) */}\n            {!layoutConfig.canvasFirst && (\n              <div\n                className={cn(\n                  layoutConfig.canvasSize,\n                  \"glass-min-w-0 glass-p-4\"\n                )}\n              >\n                <CollaborativeGlassCanvas\n                  width={canvasWidth}\n                  height={canvasHeight}\n                  gridSize={gridSize}\n                  showGrid={showGrid}\n                  showRulers={showRulers}\n                  enableSnapping={enableSnapping}\n                  onElementSelect={handleElementSelect}\n                  className={cn(\"glass-h-full\")}\n                />\n              </div>\n            )}\n          </>\n        )}\n\n        {/* Sidebar */}\n        {showSidebar && (\n          <WorkspaceSidebar\n            selectedElementId={selectedElementId}\n            onElementSelect={handleElementSelect}\n            showMiniMap={showMiniMap}\n            showOnlineUsers={showOnlineUsers}\n            onlineUsers={onlineUsers}\n            currentUser={currentUser}\n            isVoiceActive={isVoiceActive}\n            voiceUsers={voiceUsers}\n            enableComments={enableComments}\n          />\n        )}\n      </div>\n\n      {/* Floating Elements */}\n      {!compact &&\n        showCursors &&\n        (enableAdvancedEffects ? (\n          <GlassTeamCursorsWithEffects\n            showNames={true}\n            showVoiceIndicators={enableVoiceChat}\n            cursorSize=\"md\"\n            glassLevel=\"medium\"\n            enableRippleEffect={true}\n            enableGlowEffect={true}\n          />\n        ) : (\n          <GlassTeamCursors\n            showNames={true}\n            showVoiceIndicators={enableVoiceChat}\n            cursorSize=\"md\"\n            glassLevel=\"medium\"\n          />\n        ))}\n\n      {/* Voice Chat Panel */}\n      {!compact && showVoicePanel && enableVoiceChat && (\n        <VoiceChatPanel\n          isActive={isVoiceActive}\n          voiceUsers={voiceUsers}\n          onClose={() => setShowVoicePanel(false)}\n          onToggleVoice={toggleVoice}\n        />\n      )}\n\n      {/* Version Control Panel */}\n      {!compact && showVersionPanel && enableVersionControl && (\n        <VersionControlPanel\n          onClose={() => setShowVersionPanel(false)}\n          onCreateSnapshot={createSnapshot}\n          canUndo={canUndo}\n          canRedo={canRedo}\n          onUndo={undo}\n          onRedo={redo}\n        />\n      )}\n\n      {/* Floating Action Button */}\n      <WorkspaceFloatingActions\n        isVoiceActive={isVoiceActive}\n        onToggleVoice={toggleVoice}\n        onShowVoicePanel={() => setShowVoicePanel(true)}\n        onShowVersionPanel={() => setShowVersionPanel(true)}\n        onToggleFullscreen={() => setIsFullscreen(!isFullscreen)}\n        enableVoiceChat={enableVoiceChat}\n        enableVersionControl={enableVersionControl}\n      />\n    </div>\n  );\n}\n\n// Workspace Header Component\nfunction WorkspaceHeader({\n  workspace,\n  currentUser,\n  onlineUsers,\n  canEdit,\n  isVoiceActive,\n  voiceUsers,\n  onToggleVoice,\n  onCreateSnapshot,\n  onUndo,\n  onRedo,\n  canUndo,\n  canRedo,\n  onLayoutChange,\n  activeLayout,\n  onToggleSidebar,\n  onToggleFullscreen,\n  isFullscreen,\n  showOnlineUsers,\n  enableVoiceChat,\n  enableVersionControl,\n}: WorkspaceHeaderProps) {\n  const [showLayoutMenu, setShowLayoutMenu] = useState(false);\n\n  return (\n    <div\n      className=\"workspace-header workspace-glass-panel glass-flex glass-items-center glass-justify-between glass-px-4 glass-py-3 glass-border-b glass-border-white/10\"\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      {/* Left Section */}\n      <div className=\"glass-flex glass-items-center glass-gap-4\">\n        <h1 className=\"glass-text-xl glass-font-bold glass-text-primary\">\n          {workspace.name}\n        </h1>\n        <div\n          className=\"glass-text-sm glass-text-primary\"\n          style={{ opacity: \"var(--glass-opacity-60)\" }}\n        >\n          {canEdit ? \"\u270F\uFE0F Editing\" : \"\uD83D\uDC41\uFE0F Viewing\"}\n        </div>\n      </div>\n\n      {/* Center Section - Tools */}\n      <div className=\"glass-flex glass-items-center glass-gap-2\">\n        {/* Undo/Redo */}\n        {enableVersionControl && (\n          <>\n            <button\n              onClick={onUndo}\n              disabled={!canUndo}\n              className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              style={{ opacity: \"var(--glass-opacity-50)\" }}\n              title=\"Undo\"\n              aria-label=\"Undo last action\"\n            >\n              <Undo className=\"glass-w-4 glass-h-4\" />\n            </button>\n            <button\n              onClick={onRedo}\n              disabled={!canRedo}\n              className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n              style={{ opacity: \"var(--glass-opacity-50)\" }}\n              title=\"Redo\"\n              aria-label=\"Redo last action\"\n            >\n              <Redo className=\"glass-w-4 glass-h-4\" />\n            </button>\n            <button\n              onClick={() => onCreateSnapshot(`Snapshot ${Date.now()}`)}\n              className=\"workspace-glass-button-primary glass-px-3 glass-py-2 glass-text-sm glass-surface-primary glass-text-primary glass-radius\"\n              title=\"Create Snapshot\"\n            >\n              \uD83D\uDCF7 Snapshot\n            </button>\n          </>\n        )}\n\n        {/* Layout Switcher */}\n        <div className=\"glass-relative\">\n          <button\n            onClick={() => setShowLayoutMenu(!showLayoutMenu)}\n            className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary\"\n            title=\"Change Layout\"\n            aria-label=\"Change workspace layout\"\n          >\n            \uD83D\uDD00\n          </button>\n          {showLayoutMenu && (\n            <div className=\"glass-absolute glass-top-full glass-left-0 glass-mt-2 glass-p-2 glass-surface-overlay glass-border glass-border-white/20 glass-radius glass-shadow-lg glass-z-50\">\n              {(\n                [\"split\", \"tabs\", \"canvas-focused\", \"editor-focused\"] as const\n              ).map((layout) => (\n                <button\n                  key={layout}\n                  onClick={() => {\n                    onLayoutChange(layout);\n                    setShowLayoutMenu(false);\n                  }}\n                  className={cn(\n                    \"glass-block glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-radius glass-text-primary\",\n                    activeLayout === layout\n                      ? \"glass-surface-primary\"\n                      : \"glass-surface-transparent\"\n                  )}\n                >\n                  {layout.charAt(0).toUpperCase() +\n                    layout.slice(1).replace(\"-\", \" \")}\n                </button>\n              ))}\n            </div>\n          )}\n        </div>\n\n        {/* Voice Chat Toggle */}\n        {enableVoiceChat && (\n          <button\n            onClick={onToggleVoice}\n            className={cn(\n              \"glass-p-2 glass-radius glass-text-primary\",\n              isVoiceActive\n                ? \"glass-surface-success\"\n                : \"glass-surface-transparent\"\n            )}\n            title={isVoiceActive ? \"Leave Voice Chat\" : \"Join Voice Chat\"}\n            aria-label={isVoiceActive ? \"Leave voice chat\" : \"Join voice chat\"}\n          >\n            {isVoiceActive ? (\n              <Mic className=\"glass-w-4 glass-h-4\" />\n            ) : (\n              <MicOff className=\"glass-w-4 glass-h-4\" />\n            )}\n            {voiceUsers.length > 0 && ` (${voiceUsers.length})`}\n          </button>\n        )}\n      </div>\n\n      {/* Right Section */}\n      <div className=\"glass-flex glass-items-center glass-gap-2\">\n        {/* Online Users */}\n        {showOnlineUsers && (\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <div className=\"glass-flex\">\n              {onlineUsers.slice(0, 5).map((user, index) => (\n                <div\n                  key={user.id}\n                  className=\"glass-w-8 glass-h-8 glass-radius-full glass-border-2 glass-border-white glass-flex glass-items-center glass-justify-center glass-text-xs glass-font-bold glass-text-primary\"\n                  style={{\n                    backgroundColor: user.color,\n                    marginLeft: index === 0 ? 0 : -8,\n                  }}\n                  title={user.name}\n                >\n                  {user.name[0]}\n                </div>\n              ))}\n              {onlineUsers.length > 5 && (\n                <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-primary glass-border-2 glass-border-white glass-flex glass-items-center glass-justify-center glass-text-xs glass-text-primary\">\n                  +{onlineUsers.length - 5}\n                </div>\n              )}\n            </div>\n            <span\n              className=\"glass-text-sm glass-text-primary\"\n              style={{ opacity: \"var(--glass-opacity-60)\" }}\n            >\n              {onlineUsers.length} online\n            </span>\n          </div>\n        )}\n\n        {/* Controls */}\n        <button\n          onClick={onToggleSidebar}\n          className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          title=\"Toggle Sidebar\"\n          aria-label=\"Toggle sidebar\"\n        >\n          <Layers className=\"glass-w-4 glass-h-4\" />\n        </button>\n        <button\n          onClick={onToggleFullscreen}\n          className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          title=\"Toggle Fullscreen\"\n          aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n        >\n          {isFullscreen ? (\n            <Minimize className=\"glass-w-4 glass-h-4\" />\n          ) : (\n            <Maximize className=\"glass-w-4 glass-h-4\" />\n          )}\n        </button>\n      </div>\n    </div>\n  );\n}\n\n// Mock sub-components - in real implementation these would be actual components\nfunction WorkspaceTabs({\n  selectedElementId,\n  onElementSelect,\n  enableComments,\n  enableRealTimeSync,\n  ...props\n}: WorkspaceTabsProps) {\n  const [activeTab, setActiveTab] = useState<\"canvas\" | \"editor\">(\"canvas\");\n\n  return (\n    <div className=\"glass-flex glass-flex-col glass-h-full\">\n      {/* Tab Navigation */}\n      <div className=\"glass-flex glass-border-b glass-border-white/20 glass-surface-overlay\">\n        <button\n          onClick={() => setActiveTab(\"canvas\")}\n          className={`glass-px-6 glass-py-3 glass-font-medium ${\n            activeTab === \"canvas\"\n              ? \"glass-text-white glass-border-b-2 glass-border-blue-400 glass-surface-overlay\"\n              : \"glass-text-white-opacity-70 glass-hover-text-white\"\n          }`}\n        >\n          \uD83C\uDFA8 Canvas\n        </button>\n        <button\n          onClick={() => setActiveTab(\"editor\")}\n          className={`glass-px-6 glass-py-3 glass-font-medium ${\n            activeTab === \"editor\"\n              ? \"glass-text-white glass-border-b-2 glass-border-blue-400 glass-surface-overlay\"\n              : \"glass-text-white-opacity-70 glass-hover-text-white\"\n          }`}\n        >\n          \u2699\uFE0F Properties\n        </button>\n      </div>\n\n      {/* Tab Content */}\n      <div className=\"glass-flex-1 glass-p-4\">\n        {activeTab === \"canvas\" ? (\n          <CollaborativeGlassCanvas\n            {...props}\n            onElementSelect={onElementSelect}\n            className=\"glass-h-full\"\n          />\n        ) : (\n          <MultiUserGlassEditor\n            showComments={enableComments}\n            enableRealTimeSync={enableRealTimeSync}\n            className=\"glass-h-full\"\n          />\n        )}\n      </div>\n    </div>\n  );\n}\n\nfunction CollaborativeGlassCanvas({\n  width,\n  height,\n  gridSize,\n  showGrid,\n  showRulers,\n  enableSnapping,\n  onElementSelect,\n  className,\n}: CollaborativeGlassCanvasProps) {\n  return (\n    <div\n      className={`collaborative-canvas workspace-glass-panel relative ${className}`}\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      {showGrid && (\n        <div\n          className=\"glass-absolute glass-inset-0 glass-opacity-20\"\n          style={{\n            backgroundImage: `linear-gradient(var(--glass-bg-default) 1px, transparent 1px), linear-gradient(90deg, var(--glass-bg-default) 1px, transparent 1px)`,\n            backgroundSize: `${gridSize}px ${gridSize}px`,\n          }}\n        />\n      )}\n\n      <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full glass-text-primary-glass-opacity-60\">\n        <div className=\"glass-text-center\">\n          <div className=\"glass-text-4xl glass-mb-4\">\uD83C\uDFA8</div>\n          <p className=\"glass-text-lg\">Collaborative Canvas</p>\n          <p className=\"glass-text-sm\">Click to start designing together</p>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction MultiUserGlassEditor({\n  target,\n  showPreview,\n  showHistory,\n  showComments,\n  enableRealTimeSync,\n  layout,\n  className,\n}: MultiUserGlassEditorProps) {\n  return (\n    <div\n      className={`multi-user-editor workspace-glass-panel ${className}`}\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      <div className=\"glass-p-4\">\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n          <h2 className=\"glass-text-primary glass-font-semibold\">\n            Properties Editor\n          </h2>\n          <div className=\"glass-flex glass-gap-2\">\n            {showHistory && (\n              <button className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary\">\n                \uD83D\uDCDC\n              </button>\n            )}\n            {showComments && (\n              <button className=\"glass-p-2 glass-radius hover:glass-surface-subtle/10 glass-text-primary\">\n                \uD83D\uDCAC\n              </button>\n            )}\n            {enableRealTimeSync && (\n              <div className=\"glass-flex glass-items-center glass-gap-1 glass-text-primary glass-text-sm\">\n                <Wifi className=\"glass-w-3 glass-h-3\" /> Live\n              </div>\n            )}\n          </div>\n        </div>\n\n        <div className=\"glass-space-y-4\">\n          <div>\n            <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80 glass-mb-2\">\n              Target Element\n            </label>\n            <div className=\"workspace-glass-inset glass-p-2 glass-surface-subtle/5 glass-radius glass-text-primary glass-text-sm\">\n              {target}\n            </div>\n          </div>\n\n          <div>\n            <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary-glass-opacity-80 glass-mb-2\">\n              Properties\n            </label>\n            <div className=\"glass-space-y-2\">\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm glass-w-20\">\n                  Width:\n                </span>\n                <input\n                  type=\"number\"\n                  data-glass-component=\"number\"\n                  className=\"glass-collaboration-number glass-flex-1 glass-p-2 glass-surface-subtle/10 glass-radius glass-text-primary glass-text-sm glass-touch-target glass-contrast-guard\"\n                  placeholder=\"Auto\"\n                  aria-label=\"Width\"\n                />\n              </div>\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm glass-w-20\">\n                  Height:\n                </span>\n                <input\n                  type=\"number\"\n                  data-glass-component=\"number\"\n                  className=\"glass-collaboration-number glass-flex-1 glass-p-2 glass-surface-subtle/10 glass-radius glass-text-primary glass-text-sm glass-touch-target glass-contrast-guard\"\n                  placeholder=\"Auto\"\n                  aria-label=\"Height\"\n                />\n              </div>\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <span className=\"glass-text-primary-glass-opacity-60 glass-text-sm glass-w-20\">\n                  Opacity:\n                </span>\n                <input\n                  type=\"range\"\n                  data-glass-component=\"range\"\n                  min=\"0\"\n                  max=\"1\"\n                  step=\"0.1\"\n                  className=\"glass-collaboration-range glass-flex-1 glass-touch-target glass-contrast-guard\"\n                  aria-label=\"Opacity\"\n                />\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction WorkspaceSidebar({\n  selectedElementId,\n  onElementSelect,\n  showMiniMap,\n  showOnlineUsers,\n  onlineUsers,\n  currentUser,\n  isVoiceActive,\n  voiceUsers,\n  enableComments,\n}: WorkspaceSidebarProps) {\n  return (\n    <div\n      className=\"workspace-sidebar workspace-glass-panel glass-w-80 glass-border-l glass-border-white/20 glass-p-4 glass-space-y-4\"\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      {/* Mini Map */}\n      {showMiniMap && (\n        <div className=\"glass-space-y-2\">\n          <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-80 glass-uppercase\">\n            Mini Map\n          </h3>\n          <div className=\"workspace-glass-inset glass-aspect-video glass-surface-overlay glass-border glass-border-white/20 glass-radius glass-p-2\">\n            <div className=\"glass-text-xs glass-text-primary glass-text-center glass-mt-8\">\n              Canvas overview\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Online Users */}\n      {showOnlineUsers && (\n        <div className=\"glass-space-y-2\">\n          <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-80 glass-uppercase\">\n            Online Users\n          </h3>\n          <div className=\"glass-space-y-2\">\n            {onlineUsers.map((user) => (\n              <div\n                key={user.id}\n                className=\"glass-flex glass-items-center glass-gap-3 glass-p-2 glass-radius hover:glass-surface-subtle/5\"\n              >\n                <div\n                  className=\"glass-w-6 glass-h-6 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs glass-font-bold glass-text-primary\"\n                  style={{ backgroundColor: user.color }}\n                >\n                  {user.name[0]}\n                </div>\n                <div className=\"glass-flex-1\">\n                  <div className=\"glass-text-sm glass-text-primary\">\n                    {user.name}\n                  </div>\n                  <div className=\"glass-text-xs glass-text-primary-glass-opacity-50\">\n                    {user.role}\n                  </div>\n                </div>\n                {voiceUsers.includes(user.id) && (\n                  <div className=\"glass-text-primary glass-text-xs\">\uD83C\uDFA4</div>\n                )}\n              </div>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {/* Quick Actions */}\n      <div className=\"glass-space-y-2\">\n        <h3 className=\"glass-text-sm glass-font-semibold glass-text-primary-glass-opacity-80 glass-uppercase\">\n          Quick Actions\n        </h3>\n        <div className=\"glass-space-y-2\">\n          <button className=\"glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-surface-subtle/5 hover:glass-surface-subtle/10 glass-radius glass-text-primary\">\n            <Copy className=\"glass-w-4 glass-h-4 glass-inline glass-mr-2\" />\n            Copy Selected\n          </button>\n          <button className=\"glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-surface-subtle/5 hover:glass-surface-subtle/10 glass-radius glass-text-primary\">\n            <ClipboardPaste className=\"glass-w-4 glass-h-4 glass-inline glass-mr-2\" />\n            Paste\n          </button>\n          <button className=\"glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-surface-subtle/5 hover:glass-surface-subtle/10 glass-radius glass-text-primary\">\n            <Trash2 className=\"glass-w-4 glass-h-4 glass-inline glass-mr-2\" />\n            Delete Selected\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function GlassTeamCursors({\n  showNames,\n  showVoiceIndicators,\n  cursorSize,\n  glassLevel,\n}: GlassTeamCursorsProps) {\n  const size = cursorSize === \"lg\" ? 18 : cursorSize === \"sm\" ? 12 : 15;\n  const users = [\n    { id: \"aurora\", name: \"Aurora\", color: \"#38bdf8\", x: \"24%\", y: \"34%\" },\n    { id: \"lumen\", name: \"Lumen\", color: \"#c084fc\", x: \"58%\", y: \"48%\" },\n    { id: \"orbit\", name: \"Orbit\", color: \"#facc15\", x: \"72%\", y: \"26%\" },\n  ];\n\n  return (\n    <div className=\"glass-pointer-events-none glass-absolute glass-inset-0 glass-z-30\">\n      {users.map((user) => (\n        <div\n          key={user.id}\n          className=\"glass-absolute glass-flex glass-items-start glass-gap-1.5\"\n          style={{ left: user.x, top: user.y }}\n        >\n          <svg\n            width={size}\n            height={Math.round(size * 1.32)}\n            viewBox=\"0 0 18 24\"\n            aria-hidden=\"true\"\n            style={{\n              color: user.color,\n              filter:\n                glassLevel === \"high\"\n                  ? `drop-shadow(0 0 12px ${user.color})`\n                  : `drop-shadow(0 4px 10px rgba(0,0,0,0.35))`,\n            }}\n          >\n            <path\n              d=\"M2 2L16 14.5L10.3 15.2L7.4 22L2 2Z\"\n              fill=\"currentColor\"\n              stroke=\"rgba(255,255,255,0.88)\"\n              strokeWidth=\"1.4\"\n              strokeLinejoin=\"round\"\n            />\n          </svg>\n          {showNames && (\n            <span\n              className=\"glass-radius-full glass-px-2 glass-py-0.5 glass-text-xs glass-font-medium glass-text-primary glass-shadow-lg glass-backdrop-blur-md\"\n              style={{\n                ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n                border: `1px solid ${user.color}`,\n              }}\n            >\n              {user.name}\n              {showVoiceIndicators ? \" mic\" : \"\"}\n            </span>\n          )}\n        </div>\n      ))}\n    </div>\n  );\n}\n\nexport function GlassTeamCursorsWithEffects({\n  showNames,\n  showVoiceIndicators,\n  cursorSize,\n  glassLevel,\n  enableRippleEffect,\n  enableGlowEffect,\n}: GlassTeamCursorsWithEffectsProps) {\n  return (\n    <>\n      {enableRippleEffect && (\n        <>\n          <span\n            className=\"glass-pointer-events-none glass-absolute glass-z-20 glass-radius-full\"\n            style={{\n              left: \"48%\",\n              top: \"52%\",\n              width: 72,\n              height: 72,\n              border: \"1px solid rgba(56,189,248,0.42)\",\n              boxShadow: \"0 0 38px rgba(56,189,248,0.16)\",\n              transform: \"translate(-50%, -50%)\",\n            }}\n          />\n          <span\n            className=\"glass-pointer-events-none glass-absolute glass-z-20 glass-radius-full\"\n            style={{\n              left: \"48%\",\n              top: \"52%\",\n              width: 34,\n              height: 34,\n              border: \"1px solid rgba(192,132,252,0.5)\",\n              transform: \"translate(-50%, -50%)\",\n            }}\n          />\n        </>\n      )}\n      <GlassTeamCursors\n        showNames={showNames}\n        showVoiceIndicators={showVoiceIndicators}\n        cursorSize={cursorSize}\n        glassLevel={enableGlowEffect ? \"high\" : glassLevel}\n      />\n    </>\n  );\n}\n\nfunction VoiceChatPanel({\n  isActive,\n  voiceUsers,\n  onClose,\n  onToggleVoice,\n}: VoiceChatPanelProps) {\n  return (\n    <div\n      className=\"glass-fixed glass-bottom-4 glass-right-4 glass-w-80 glass-p-4 glass-radius-lg glass-border glass-border-white/20\"\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n        <h3 className=\"glass-text-primary glass-font-semibold\">Voice Chat</h3>\n        <button\n          onClick={onClose}\n          className=\"glass-contrast-guard glass-focus glass-touch-target hover:glass-text-primary glass-text-primary-opacity-70\"\n          aria-label=\"Close voice chat panel\"\n        >\n          \u2715\n        </button>\n      </div>\n\n      <div className=\"glass-space-y-2 glass-mb-4\">\n        {voiceUsers.map((userId: string) => (\n          <div\n            key={userId}\n            className=\"glass-flex glass-items-center glass-gap-2 glass-text-primary glass-text-sm\"\n          >\n            <div className=\"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\" />\n            User {userId}\n          </div>\n        ))}\n      </div>\n\n      <button\n        onClick={onToggleVoice}\n        className={cn(\n          \"glass-w-full glass-py-2 glass-radius glass-text-primary glass-transition\",\n          isActive ? \"glass-surface-danger\" : \"glass-surface-success\"\n        )}\n      >\n        {isActive ? \"\uD83D\uDD07 Leave\" : \"\uD83C\uDFA4 Join\"} Voice Chat\n      </button>\n    </div>\n  );\n}\n\nfunction VersionControlPanel({\n  onClose,\n  onCreateSnapshot,\n  canUndo,\n  canRedo,\n  onUndo,\n  onRedo,\n}: VersionControlPanelProps) {\n  return (\n    <div\n      className=\"glass-fixed glass-bottom-4 glass-left-4 glass-w-80 glass-p-4 glass-radius-lg glass-border glass-border-white/20\"\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n    >\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n        <h3 className=\"glass-text-primary glass-font-semibold\">\n          Version Control\n        </h3>\n        <button\n          onClick={onClose}\n          className=\"glass-contrast-guard glass-focus glass-touch-target hover:glass-text-primary glass-text-primary-opacity-70\"\n          aria-label=\"Close version control panel\"\n        >\n          \u2715\n        </button>\n      </div>\n\n      <div className=\"glass-space-y-2\">\n        <div className=\"glass-flex glass-gap-2\">\n          <button\n            onClick={onUndo}\n            disabled={!canUndo}\n            className=\"glass-flex-1 glass-py-2 glass-px-3 glass-radius glass-surface-subtle/10 glass-text-primary disabled:glass-opacity-50 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <Undo className=\"glass-w-4 glass-h-4 glass-inline glass-mr-1\" />\n            Undo\n          </button>\n          <button\n            onClick={onRedo}\n            disabled={!canRedo}\n            className=\"glass-flex-1 glass-py-2 glass-px-3 glass-radius glass-surface-subtle/10 glass-text-primary disabled:glass-opacity-50 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <Redo className=\"glass-w-4 glass-h-4 glass-inline glass-mr-1\" />\n            Redo\n          </button>\n        </div>\n\n        <button\n          onClick={() => onCreateSnapshot(`Manual snapshot ${Date.now()}`)}\n          className=\"glass-w-full glass-py-2 glass-px-3 glass-radius glass-surface-primary glass-text-primary\"\n        >\n          <Save className=\"glass-w-4 glass-h-4 glass-inline glass-mr-1\" />\n          Create Snapshot\n        </button>\n      </div>\n    </div>\n  );\n}\n\nfunction WorkspaceFloatingActions({\n  isVoiceActive,\n  onToggleVoice,\n  onShowVoicePanel,\n  onShowVersionPanel,\n  onToggleFullscreen,\n  enableVoiceChat,\n  enableVersionControl,\n}: WorkspaceFloatingActionsProps) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  return (\n    <div className=\"glass-fixed glass-bottom-6 glass-right-6\">\n      <div\n        className={cn(\n          \"glass-flex glass-flex-col glass-gap-2\",\n          !isExpanded && \"glass-pointer-events-none\"\n        )}\n        style={{\n          opacity: isExpanded ? 1 : 0,\n          pointerEvents: isExpanded ? \"auto\" : \"none\",\n          transition: \"opacity 160ms ease\",\n        }}\n      >\n        {enableVoiceChat && (\n          <button\n            onClick={onShowVoicePanel}\n            className=\"glass-w-12 glass-h-12 glass-radius-full glass-surface-success glass-text-primary glass-flex glass-items-center glass-justify-center glass-shadow-lg glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Voice Chat\"\n            aria-label=\"Open voice chat panel\"\n          >\n            <Mic className=\"glass-w-4 glass-h-4\" />\n          </button>\n        )}\n\n        {enableVersionControl && (\n          <button\n            onClick={onShowVersionPanel}\n            className=\"glass-w-12 glass-h-12 glass-radius-full glass-surface-primary glass-text-primary glass-flex glass-items-center glass-justify-center glass-shadow-lg glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Version Control\"\n            aria-label=\"Open version control panel\"\n          >\n            <Settings className=\"glass-w-4 glass-h-4\" />\n          </button>\n        )}\n\n        <button\n          onClick={onToggleFullscreen}\n          className=\"glass-w-12 glass-h-12 glass-radius-full glass-surface-primary glass-text-primary glass-flex glass-items-center glass-justify-center glass-shadow-lg hover:glass-surface-subtle glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          title=\"Fullscreen\"\n          aria-label=\"Toggle fullscreen mode\"\n        >\n          <Maximize className=\"glass-w-4 glass-h-4\" />\n        </button>\n      </div>\n\n      {/* Main FAB */}\n      <button\n        onClick={() => setIsExpanded(!isExpanded)}\n        className=\"glass-w-14 glass-h-14 glass-radius-full glass-surface-overlay glass-text-primary glass-flex glass-items-center glass-justify-center glass-shadow-lg hover:bg-white/15 glass-mt-2\"\n        style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n        aria-label={\n          isExpanded\n            ? \"Close floating actions menu\"\n            : \"Open floating actions menu\"\n        }\n      >\n        {isExpanded ? \"\u2715\" : \"\u26A1\"}\n      </button>\n    </div>\n  );\n}\n\n// Loading and Error Components\nfunction WorkspaceLoadingState({\n  message = \"Connecting to workspace...\",\n}: {\n  message?: string;\n}) {\n  return (\n    <div className=\"glass-h-screen glass-flex glass-items-center glass-justify-center glass-surface-overlay\">\n      <div className=\"glass-text-center glass-space-y-4\">\n        <div className=\"glass-w-16 glass-h-16 glass-border-4 glass-border-blue glass-border-t-transparent glass-radius-full glass-animate-spin glass-mx-auto\" />\n        <div className=\"glass-text-primary glass-text-lg\">{message}</div>\n        <div className=\"glass-text-primary-glass-opacity-60 glass-text-sm\">\n          Please wait...\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction WorkspaceConnectionError({\n  onRetry,\n  error,\n}: {\n  onRetry: () => void;\n  error: string;\n}) {\n  return (\n    <div className=\"glass-h-screen glass-flex glass-items-center glass-justify-center glass-surface-overlay\">\n      <div className=\"glass-text-center glass-space-y-4 glass-max-w-md\">\n        <div className=\"glass-text-primary glass-text-6xl glass-mb-4\">\u26A0\uFE0F</div>\n        <div className=\"glass-text-primary glass-text-xl glass-font-semibold\">\n          Connection Error\n        </div>\n        <div className=\"glass-text-primary-opacity-70\">{error}</div>\n        <button\n          onClick={onRetry}\n          className=\"glass-px-6 glass-py-3 glass-surface-primary glass-text-primary glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n        >\n          Retry Connection\n        </button>\n      </div>\n    </div>\n  );\n}\n\nexport default CollaborativeGlassWorkspace;\n", "\"use client\";\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useEffect,\n  useRef,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport interface CollaborationUser {\n  id: string;\n  name: string;\n  email: string;\n  avatar?: string;\n  color: string;\n  cursor?: {\n    x: number;\n    y: number;\n    elementId?: string;\n  };\n  selection?: {\n    elementId: string;\n    start: number;\n    end: number;\n  };\n  lastActive: number;\n}\n\nexport interface CollaborationComment {\n  id: string;\n  userId: string;\n  content: string;\n  position: {\n    x: number;\n    y: number;\n    elementId?: string;\n  };\n  timestamp: number;\n  resolved?: boolean;\n  replies?: CollaborationComment[];\n}\n\nexport interface CollaborationEdit {\n  id: string;\n  userId: string;\n  type: \"insert\" | \"delete\" | \"replace\";\n  elementId: string;\n  position: number;\n  content: string;\n  timestamp: number;\n}\n\nexport interface CollaborationActivity {\n  id: string;\n  userId: string;\n  type: \"join\" | \"leave\" | \"edit\" | \"comment\" | \"cursor_move\";\n  description: string;\n  timestamp: number;\n  metadata?: any;\n}\n\ninterface CollaborationContextType {\n  // Users\n  currentUser: CollaborationUser | null;\n  users: CollaborationUser[];\n  setCurrentUser: (user: CollaborationUser) => void;\n\n  // Cursors & Selection\n  updateCursor: (position: {\n    x: number;\n    y: number;\n    elementId?: string;\n  }) => void;\n  updateSelection: (selection: {\n    elementId: string;\n    start: number;\n    end: number;\n  }) => void;\n\n  // Comments\n  comments: CollaborationComment[];\n  addComment: (comment: Omit<CollaborationComment, \"id\" | \"timestamp\">) => void;\n  resolveComment: (commentId: string) => void;\n  replyToComment: (\n    commentId: string,\n    reply: Omit<CollaborationComment, \"id\" | \"timestamp\" | \"position\">\n  ) => void;\n\n  // Live Editing\n  edits: CollaborationEdit[];\n  applyEdit: (edit: Omit<CollaborationEdit, \"id\" | \"timestamp\">) => void;\n\n  // Activity\n  activities: CollaborationActivity[];\n\n  // Connection\n  isConnected: boolean;\n  connectionStatus:\n    | \"connecting\"\n    | \"connected\"\n    | \"disconnected\"\n    | \"reconnecting\";\n\n  // Settings\n  showCursors: boolean;\n  showComments: boolean;\n  showActivity: boolean;\n  toggleCursors: () => void;\n  toggleComments: () => void;\n  toggleActivity: () => void;\n}\n\nconst CollaborationContext = createContext<CollaborationContextType | null>(\n  null\n);\n\nconst defaultCollaborationContext: CollaborationContextType = {\n  currentUser: null,\n  users: [],\n  setCurrentUser: () => {},\n  updateCursor: () => {},\n  updateSelection: () => {},\n  comments: [],\n  addComment: () => {},\n  resolveComment: () => {},\n  replyToComment: () => {},\n  edits: [],\n  applyEdit: () => {},\n  activities: [],\n  isConnected: false,\n  connectionStatus: \"disconnected\",\n  showCursors: true,\n  showComments: true,\n  showActivity: true,\n  toggleCursors: () => {},\n  toggleComments: () => {},\n  toggleActivity: () => {},\n};\n\nexport const useCollaboration = () => {\n  const context = useContext(CollaborationContext);\n  return context ?? defaultCollaborationContext;\n};\n\ninterface CollaborationProviderProps {\n  children: React.ReactNode;\n  roomId: string;\n  enableRealTime?: boolean;\n  maxUsers?: number;\n  className?: string;\n  \"data-testid\"?: string;\n}\n\n// Generate random colors for users\nconst generateUserColor = (): string => {\n  const colors = [\n    \"hsl(var(--glass-color-primary))\",\n    \"hsl(var(--glass-color-danger))\",\n    \"hsl(var(--glass-color-success))\",\n    \"hsl(var(--glass-color-warning))\",\n    \"var(--glass-color-secondary)\",\n    \"var(--glass-color-accent)\",\n    \"hsl(var(--glass-color-info))\",\n    \"var(--glass-color-success-light)\",\n    \"var(--glass-color-warning-light)\",\n    \"var(--glass-color-primary-light)\",\n  ];\n  return colors[Math.floor(Math.random() * colors.length)];\n};\n\nexport const CollaborationProvider: React.FC<CollaborationProviderProps> = ({\n  children,\n  roomId,\n  enableRealTime = true,\n  maxUsers = 10,\n  className,\n  \"data-testid\": dataTestId,\n}) => {\n  const [currentUser, setCurrentUser] = useState<CollaborationUser | null>(\n    null\n  );\n  const [users, setUsers] = useState<CollaborationUser[]>([]);\n  const [comments, setComments] = useState<CollaborationComment[]>([]);\n  const [edits, setEdits] = useState<CollaborationEdit[]>([]);\n  const [activities, setActivities] = useState<CollaborationActivity[]>([]);\n  const [isConnected, setIsConnected] = useState(false);\n  const [connectionStatus, setConnectionStatus] = useState<\n    \"connecting\" | \"connected\" | \"disconnected\" | \"reconnecting\"\n  >(\"disconnected\");\n  const [showCursors, setShowCursors] = useState(true);\n  const [showComments, setShowComments] = useState(true);\n  const [showActivity, setShowActivity] = useState(true);\n\n  const wsRef = useRef<WebSocket | null>(null);\n  const reconnectTimeoutRef = useRef<NodeJS.Timeout>();\n  const heartbeatRef = useRef<NodeJS.Timeout>();\n  const cursorTimeoutRef = useRef<NodeJS.Timeout>();\n\n  const addActivity = useCallback(\n    (activity: Omit<CollaborationActivity, \"id\" | \"timestamp\">) => {\n      const newActivity: CollaborationActivity = {\n        ...activity,\n        id: `activity-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n        timestamp: Date.now(),\n      };\n\n      setActivities((prev: any) => [newActivity, ...prev.slice(0, 49)]); // Keep last 50 activities\n    },\n    []\n  );\n\n  const handleWebSocketMessage = useCallback(\n    (event: MessageEvent) => {\n      try {\n        const data = JSON.parse(event.data as string);\n\n        switch (data.type) {\n          case \"user_joined\":\n            setUsers((prev: any) => {\n              const existing = prev.find((u: any) => u.id === data.user.id);\n              if (existing) return prev;\n              return [...prev, { ...data.user, lastActive: Date.now() }];\n            });\n            addActivity({\n              userId: data.user.id,\n              type: \"join\",\n              description: `${data.user.name} joined the session`,\n            });\n            break;\n\n          case \"user_left\":\n            setUsers((prev: any) =>\n              prev.filter((u: any) => u.id !== data.userId)\n            );\n            addActivity({\n              userId: data.userId,\n              type: \"leave\",\n              description: `User left the session`,\n            });\n            break;\n\n          case \"cursor_update\":\n            setUsers((prev: any) =>\n              prev.map((user: any) =>\n                user.id === data.userId\n                  ? { ...user, cursor: data.cursor, lastActive: Date.now() }\n                  : user\n              )\n            );\n            break;\n\n          case \"comment_added\":\n            setComments((prev: any) => [...prev, data.comment]);\n            addActivity({\n              userId: data.comment.userId,\n              type: \"comment\",\n              description: \"Added a comment\",\n            });\n            break;\n\n          case \"edit_applied\":\n            setEdits((prev: any) => [...prev.slice(-99), data.edit]); // Keep last 100 edits\n            addActivity({\n              userId: data.edit.userId,\n              type: \"edit\",\n              description: `Made an edit`,\n            });\n            break;\n        }\n      } catch {\n        // Ignore malformed collaboration messages and keep the connection alive.\n      }\n    },\n    [addActivity]\n  );\n\n  // Initialize connection\n  useEffect(() => {\n    if (!enableRealTime) return;\n\n    const wsBase =\n      process.env.NEXT_PUBLIC_WEBSOCKET_SERVER_URL ||\n      process.env.WEBSOCKET_SERVER_URL ||\n      \"\";\n\n    if (!wsBase) {\n      return;\n    }\n\n    let cancelled = false;\n    let reconnectAttempts = 0;\n\n    const normalizedBase = wsBase.replace(/\\/$/, \"\");\n    const connect = () => {\n      if (cancelled) return;\n      const roomParam = `roomId=${encodeURIComponent(roomId)}`;\n      const url =\n        normalizedBase.includes(\"?\") || normalizedBase.includes(\"&\")\n          ? `${normalizedBase}&${roomParam}`\n          : `${normalizedBase}?${roomParam}`;\n\n      setConnectionStatus(\n        reconnectAttempts === 0 ? \"connecting\" : \"reconnecting\"\n      );\n\n      const ws = new WebSocket(url);\n      wsRef.current = ws;\n\n      ws.onopen = () => {\n        if (cancelled) return;\n        reconnectAttempts = 0;\n        setIsConnected(true);\n        setConnectionStatus(\"connected\");\n        addActivity({\n          userId: \"system\",\n          type: \"join\",\n          description: \"Connected to collaboration room\",\n        });\n\n        heartbeatRef.current = setInterval(() => {\n          if (wsRef.current?.readyState === WebSocket.OPEN) {\n            wsRef.current.send(\n              JSON.stringify({ type: \"ping\", ts: Date.now(), roomId })\n            );\n          }\n        }, ANIMATION.DURATION.slower * 25);\n      };\n\n      ws.onmessage = handleWebSocketMessage;\n\n      ws.onclose = () => {\n        if (cancelled) return;\n        setIsConnected(false);\n        setConnectionStatus(\"reconnecting\");\n        if (heartbeatRef.current) {\n          clearInterval(heartbeatRef.current);\n        }\n        const backoff = Math.min(\n          ANIMATION.DURATION.slower * 50,\n          ANIMATION.DURATION.slower * 2 ** reconnectAttempts\n        );\n        reconnectAttempts += 1;\n        reconnectTimeoutRef.current = setTimeout(connect, backoff);\n      };\n\n      ws.onerror = () => {\n        ws.close();\n      };\n    };\n\n    connect();\n\n    return () => {\n      cancelled = true;\n      if (heartbeatRef.current) {\n        clearInterval(heartbeatRef.current);\n      }\n      if (reconnectTimeoutRef.current) {\n        clearTimeout(reconnectTimeoutRef.current);\n      }\n      if (wsRef.current) {\n        wsRef.current.close();\n        wsRef.current = null;\n      }\n      setIsConnected(false);\n      setConnectionStatus(\"disconnected\");\n    };\n  }, [roomId, enableRealTime, handleWebSocketMessage, addActivity]);\n\n  const sendMessage = useCallback((payload: any) => {\n    if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) return;\n    wsRef.current.send(JSON.stringify(payload));\n  }, []);\n\n  const updateCursor = useCallback(\n    (position: { x: number; y: number; elementId?: string }) => {\n      if (!currentUser) return;\n\n      setCurrentUser((prev: any) =>\n        prev ? { ...prev, cursor: position, lastActive: Date.now() } : null\n      );\n\n      // Debounce cursor updates\n      clearTimeout(cursorTimeoutRef.current);\n      cursorTimeoutRef.current = setTimeout(() => {\n        sendMessage({\n          type: \"cursor_update\",\n          userId: currentUser.id,\n          cursor: position,\n        });\n      }, ANIMATION.DURATION.fast / 4);\n    },\n    [currentUser, sendMessage]\n  );\n\n  const updateSelection = useCallback(\n    (selection: { elementId: string; start: number; end: number }) => {\n      if (!currentUser) return;\n\n      setCurrentUser((prev: any) =>\n        prev ? { ...prev, selection, lastActive: Date.now() } : null\n      );\n\n      sendMessage({\n        type: \"selection_update\",\n        userId: currentUser.id,\n        selection,\n      });\n    },\n    [currentUser, sendMessage]\n  );\n\n  const addComment = useCallback(\n    (comment: Omit<CollaborationComment, \"id\" | \"timestamp\">) => {\n      if (!currentUser) return;\n\n      const newComment: CollaborationComment = {\n        ...comment,\n        id: `comment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n        timestamp: Date.now(),\n      };\n\n      setComments((prev: any) => [...prev, newComment]);\n\n      sendMessage({\n        type: \"comment_added\",\n        comment: newComment,\n      });\n    },\n    [currentUser, sendMessage]\n  );\n\n  const resolveComment = useCallback(\n    (commentId: string) => {\n      setComments((prev: any) =>\n        prev.map((comment: any) =>\n          comment.id === commentId ? { ...comment, resolved: true } : comment\n        )\n      );\n\n      sendMessage({\n        type: \"comment_resolved\",\n        commentId,\n      });\n    },\n    [sendMessage]\n  );\n\n  const replyToComment = useCallback(\n    (\n      commentId: string,\n      reply: Omit<CollaborationComment, \"id\" | \"timestamp\" | \"position\">\n    ) => {\n      if (!currentUser) return;\n\n      const newReply: CollaborationComment = {\n        ...reply,\n        id: `reply-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n        timestamp: Date.now(),\n        position: { x: 0, y: 0 }, // Replies don't need positions\n      };\n\n      setComments((prev: any) =>\n        prev.map((comment: any) =>\n          comment.id === commentId\n            ? { ...comment, replies: [...(comment.replies || []), newReply] }\n            : comment\n        )\n      );\n    },\n    [currentUser]\n  );\n\n  const applyEdit = useCallback(\n    (edit: Omit<CollaborationEdit, \"id\" | \"timestamp\">) => {\n      if (!currentUser) return;\n\n      const newEdit: CollaborationEdit = {\n        ...edit,\n        id: `edit-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\n        timestamp: Date.now(),\n      };\n\n      setEdits((prev: any) => [...prev.slice(-99), newEdit]);\n\n      sendMessage({\n        type: \"edit_applied\",\n        edit: newEdit,\n      });\n    },\n    [currentUser, sendMessage]\n  );\n\n  const toggleCursors = useCallback(\n    () => setShowCursors((prev: any) => !prev),\n    []\n  );\n  const toggleComments = useCallback(\n    () => setShowComments((prev: any) => !prev),\n    []\n  );\n  const toggleActivity = useCallback(\n    () => setShowActivity((prev: any) => !prev),\n    []\n  );\n\n  const handleSetCurrentUser = useCallback(\n    (user: CollaborationUser) => {\n      const userWithDefaults = {\n        ...user,\n        color: user.color || generateUserColor(),\n        lastActive: Date.now(),\n      };\n\n      setCurrentUser(userWithDefaults);\n      setUsers((prev: any) => {\n        const existing = prev.find((u: any) => u.id === user.id);\n        if (existing) {\n          return prev.map((u: any) =>\n            u.id === user.id ? userWithDefaults : u\n          );\n        }\n        return [...prev, userWithDefaults];\n      });\n\n      addActivity({\n        userId: user.id,\n        type: \"join\",\n        description: `${user.name} joined the session`,\n      });\n    },\n    [addActivity]\n  );\n\n  const value: CollaborationContextType = {\n    currentUser,\n    users,\n    setCurrentUser: handleSetCurrentUser,\n    updateCursor,\n    updateSelection,\n    comments,\n    addComment,\n    resolveComment,\n    replyToComment,\n    edits,\n    applyEdit,\n    activities,\n    isConnected,\n    connectionStatus,\n    showCursors,\n    showComments,\n    showActivity,\n    toggleCursors,\n    toggleComments,\n    toggleActivity,\n  };\n\n  return (\n    <CollaborationContext.Provider data-glass-component value={value}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </CollaborationContext.Provider>\n  );\n};\n\n// Export as GlassCollaborationProvider for backward compatibility\nexport const GlassCollaborationProvider = CollaborationProvider;\n", "\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport {\n  useCollaboration,\n  type CollaborationUser,\n} from \"./GlassCollaborationProvider\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ninterface CollaborativeCursorProps {\n  className?: string;\n  previewUsers?: CollaborationUser[];\n  positionStrategy?: \"fixed\" | \"absolute\";\n  \"data-testid\"?: string;\n}\n\nconst CursorIcon: React.FC<{ color: string; name: string }> = ({\n  color,\n  name,\n}) => (\n  <div className=\"glass-relative\">\n    {/* Cursor pointer */}\n    <svg\n      width=\"24\"\n      height=\"24\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      className=\"glass-drop-glass-shadow-sm\"\n    >\n      <path\n        d=\"M5.65376 12.3673H5.46026L5.31717 12.4976L0.500002 16.8829L0.500002 1.19841L11.7841 12.3673H5.65376Z\"\n        fill={color}\n        stroke=\"white\"\n        strokeWidth=\"1\"\n      />\n    </svg>\n\n    {/* User name label */}\n    <div\n      className=\"glass-absolute glass-left-6 glass-top-1 glass-px-2 glass-py-1 glass-radius glass-text-primary glass-text-xs glass-font-medium glass-whitespace-nowrap glass-pointer-events-none glass-select-none\"\n      style={{ backgroundColor: color }}\n    >\n      {name}\n    </div>\n  </div>\n);\n\nexport const GlassCollaborativeCursor: React.FC<CollaborativeCursorProps> = ({\n  className,\n  previewUsers,\n  positionStrategy = \"fixed\",\n  \"data-testid\": dataTestId,\n}) => {\n  const { users, currentUser, showCursors } = useCollaboration();\n  const [visibleCursors, setVisibleCursors] = useState<typeof users>([]);\n\n  useEffect(() => {\n    if (!showCursors) {\n      setVisibleCursors([]);\n      return;\n    }\n\n    // Filter out current user and users without cursor data\n    const sourceUsers = previewUsers ?? users;\n    const otherUsers = sourceUsers.filter(\n      (user: any) =>\n        user.id !== currentUser?.id &&\n        user.cursor &&\n        Date.now() - user.lastActive < ANIMATION.DURATION.slower * 50 // Show cursor for 30 seconds after last activity\n    );\n\n    setVisibleCursors(otherUsers);\n  }, [users, previewUsers, currentUser, showCursors]);\n\n  if (!showCursors) {\n    return null;\n  }\n\n  return (\n    <div\n      data-glass-component\n      className={cn(\n        positionStrategy === \"absolute\" ? \"glass-absolute\" : \"glass-fixed\",\n        \"glass-inset-0 glass-pointer-events-none glass-z-50\",\n        className\n      )}\n      data-testid={dataTestId}\n    >\n      {visibleCursors.length > 0 &&\n        visibleCursors.map((user: any) => {\n          if (!user.cursor) return null;\n\n          return (\n            <div\n              key={user.id}\n              className=\"glass-absolute\"\n              style={{\n                left: user.cursor.x,\n                top: user.cursor.y,\n                transform: \"translate(-2px, -2px)\",\n                transition: `all ${ANIMATION.DURATION.fast}ms ease-out`,\n              }}\n            >\n              <CursorIcon color={user.color} name={user.name} />\n            </div>\n          );\n        })}\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport {\n  useCollaboration,\n  CollaborationUser,\n  CollaborationActivity,\n} from \"./GlassCollaborationProvider\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\ninterface CollaborationDashboardProps {\n  className?: string;\n  position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n  fixed?: boolean;\n  showUserList?: boolean;\n  showActivityFeed?: boolean;\n  showControls?: boolean;\n  \"data-testid\"?: string;\n}\n\nconst createDemoUsers = (): CollaborationUser[] => {\n  const now = Date.now();\n  return [\n    {\n      id: \"demo-current\",\n      name: \"Aurora\",\n      email: \"aurora@example.com\",\n      color: \"#38bdf8\",\n      lastActive: now - 12000,\n      cursor: { x: 148, y: 80 },\n    },\n    {\n      id: \"demo-reviewer\",\n      name: \"Lumen\",\n      email: \"lumen@example.com\",\n      color: \"#a3e635\",\n      lastActive: now - 36000,\n    },\n    {\n      id: \"demo-editor\",\n      name: \"Orbit\",\n      email: \"orbit@example.com\",\n      color: \"#f59e0b\",\n      lastActive: now - 82000,\n    },\n  ];\n};\n\nconst createDemoActivities = (): CollaborationActivity[] => {\n  const now = Date.now();\n  return [\n    {\n      id: \"demo-activity-1\",\n      userId: \"demo-current\",\n      type: \"edit\",\n      description: \"Aurora updated the dashboard copy\",\n      timestamp: now - 45000,\n    },\n    {\n      id: \"demo-activity-2\",\n      userId: \"demo-reviewer\",\n      type: \"comment\",\n      description: \"Lumen left a review note\",\n      timestamp: now - 125000,\n    },\n  ];\n};\n\nconst UserAvatar: React.FC<{\n  user: CollaborationUser;\n  size?: \"sm\" | \"md\" | \"lg\";\n  showStatus?: boolean;\n}> = ({ user, size = \"md\", showStatus = true }) => {\n  const sizeClasses = {\n    sm: \"glass-w-6 glass-h-6 glass-text-xs\",\n    md: \"glass-w-8 glass-h-8 glass-text-sm\",\n    lg: \"glass-w-10 glass-h-10 glass-text-base\",\n  };\n\n  const isActive = Date.now() - user.lastActive < 60000; // Active within last minute\n\n  return (\n    <div data-glass-component className=\"glass-relative\">\n      {user.avatar ? (\n        <img\n          src={user.avatar}\n          alt={user.name}\n          className={cn(\n            \"glass-radius-full glass-object-cover glass-border-2\",\n            sizeClasses[size],\n            isActive ? \"glass-border-success\" : \"glass-border-subtle\"\n          )}\n        />\n      ) : (\n        <div\n          className={cn(\n            \"glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-font-medium glass-border-2\",\n            sizeClasses[size],\n            isActive ? \"glass-border-success\" : \"glass-border-subtle\"\n          )}\n          style={{ backgroundColor: user.color }}\n        >\n          {user.name[0]?.toUpperCase()}\n        </div>\n      )}\n\n      {showStatus && (\n        <div\n          className={cn(\n            \"glass-absolute glass-w-3 glass-h-3 glass-radius-full glass-border-2 glass-border-white\",\n            isActive ? \"glass-surface-success\" : \"glass-surface-subtle\"\n          )}\n          style={{ right: -2, bottom: -2 }}\n        />\n      )}\n    </div>\n  );\n};\n\nconst ActivityItem: React.FC<{\n  activity: CollaborationActivity;\n  user?: CollaborationUser;\n}> = ({ activity, user }) => {\n  const formatTime = (timestamp: number) => {\n    const now = Date.now();\n    const diff = now - timestamp;\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n\n    if (minutes < 1) return \"now\";\n    if (minutes < 60) return `${minutes}m`;\n    if (hours < 24) return `${hours}h`;\n    return new Date(timestamp).toLocaleDateString();\n  };\n\n  const getActivityIcon = () => {\n    switch (activity.type) {\n      case \"join\":\n        return \"\uD83D\uDFE2\";\n      case \"leave\":\n        return \"\uD83D\uDD34\";\n      case \"edit\":\n        return \"\u270F\uFE0F\";\n      case \"comment\":\n        return \"\uD83D\uDCAC\";\n      case \"cursor_move\":\n        return \"\uD83D\uDC46\";\n      default:\n        return \"\u2022\";\n    }\n  };\n\n  const getActivityColor = () => {\n    switch (activity.type) {\n      case \"join\":\n        return \"glass-text-success\";\n      case \"leave\":\n        return \"glass-text-danger\";\n      case \"edit\":\n        return \"glass-text-primary\";\n      case \"comment\":\n        return \"glass-text-secondary\";\n      default:\n        return \"glass-text-secondary\";\n    }\n  };\n\n  return (\n    <div className=\"glass-flex glass-items-center glass-gap-3 glass-p-2 glass-radius hover:glass-surface-subtle glass-transition-colors\">\n      <div className=\"glass-flex glass-items-center glass-gap-2\">\n        {user && <UserAvatar user={user} size=\"sm\" showStatus={false} />}\n        <span className=\"glass-text-lg\">{getActivityIcon()}</span>\n      </div>\n\n      <div className=\"glass-flex-1 glass-min-w-0\">\n        <p className={cn(\"glass-text-sm\", getActivityColor())}>\n          {activity.description}\n        </p>\n      </div>\n\n      <span className=\"glass-text-xs glass-text-secondary glass-whitespace-nowrap\">\n        {formatTime(activity.timestamp)}\n      </span>\n    </div>\n  );\n};\n\nconst ConnectionStatus: React.FC = () => {\n  const { connectionStatus, isConnected } = useCollaboration();\n\n  const getStatusColor = () => {\n    switch (connectionStatus) {\n      case \"connected\":\n        return \"glass-text-success\";\n      case \"connecting\":\n      case \"reconnecting\":\n        return \"glass-text-warning\";\n      case \"disconnected\":\n        return \"glass-text-danger\";\n      default:\n        return \"glass-text-secondary\";\n    }\n  };\n\n  const getStatusIcon = () => {\n    switch (connectionStatus) {\n      case \"connected\":\n        return \"\uD83D\uDFE2\";\n      case \"connecting\":\n      case \"reconnecting\":\n        return \"\uD83D\uDFE1\";\n      case \"disconnected\":\n        return \"\uD83D\uDD34\";\n      default:\n        return \"\u26AB\";\n    }\n  };\n\n  const getStatusText = () => {\n    switch (connectionStatus) {\n      case \"connected\":\n        return \"Connected\";\n      case \"connecting\":\n        return \"Connecting...\";\n      case \"reconnecting\":\n        return \"Reconnecting...\";\n      case \"disconnected\":\n        return \"Disconnected\";\n      default:\n        return \"Unknown\";\n    }\n  };\n\n  return (\n    <div\n      className={cn(\n        \"glass-flex glass-items-center glass-gap-2 glass-text-sm\",\n        getStatusColor()\n      )}\n    >\n      <span>{getStatusIcon()}</span>\n      <span>{getStatusText()}</span>\n    </div>\n  );\n};\n\nexport const GlassCollaborationDashboard: React.FC<\n  CollaborationDashboardProps\n> = ({\n  className,\n  position = \"top-right\",\n  fixed = false,\n  showUserList = true,\n  showActivityFeed = true,\n  showControls = true,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    users,\n    currentUser,\n    activities,\n    comments,\n    showCursors,\n    showComments,\n    showActivity,\n    toggleCursors,\n    toggleComments,\n    toggleActivity,\n  } = useCollaboration();\n\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [activeTab, setActiveTab] = useState<\"users\" | \"activity\">(\"users\");\n  const isDemoContent =\n    users.length === 0 && activities.length === 0 && comments.length === 0;\n  const demoUsers = isDemoContent ? createDemoUsers() : [];\n  const resolvedUsers = isDemoContent ? demoUsers : users;\n  const resolvedCurrentUser = currentUser ?? resolvedUsers[0];\n  const resolvedActivities = isDemoContent\n    ? createDemoActivities()\n    : activities;\n  const resolvedComments = comments;\n\n  const positionClasses = {\n    \"top-left\": \"glass-top-4 glass-left-4\",\n    \"top-right\": \"glass-top-4 glass-right-4\",\n    \"bottom-left\": \"glass-bottom-4 glass-left-4\",\n    \"bottom-right\": \"glass-bottom-4 glass-right-4\",\n  };\n\n  const activeUsers = resolvedUsers.filter(\n    (user: any) => Date.now() - user.lastActive < 300000\n  ); // Active within 5 minutes\n  const recentActivities = resolvedActivities.slice(0, 20);\n  const unresolvedComments = resolvedComments.filter((c: any) => !c.resolved);\n\n  return (\n    <div\n      className={cn(\n        fixed\n          ? [\"glass-fixed glass-z-40\", positionClasses[position]]\n          : \"glass-relative glass-inline-flex glass-z-0\",\n        className\n      )}\n      data-testid={dataTestId}\n    >\n      {!isExpanded ? (\n        // Collapsed state\n        <Glass className=\"glass-p-3 glass-contrast-guard\">\n          <button\n            onClick={() => setIsExpanded(true)}\n            className=\"glass-flex glass-items-center glass-gap-3 hover:glass-surface-subtle glass-radius glass-p-2 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <div className=\"glass-flex\">\n              {activeUsers.slice(0, 3).map((user: any, index: number) => (\n                <span\n                  key={user.id}\n                  style={{ marginLeft: index === 0 ? 0 : -8 }}\n                >\n                  <UserAvatar user={user} size=\"sm\" />\n                </span>\n              ))}\n              {activeUsers.length > 3 && (\n                <div className=\"glass-w-6 glass-h-6 glass-surface-subtle glass-text-secondary glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs glass-border-2 glass-border-white\">\n                  +{activeUsers.length - 3}\n                </div>\n              )}\n            </div>\n\n            <div className=\"glass-text-left\">\n              <div className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n                {activeUsers.length} online\n              </div>\n              <ConnectionStatus />\n            </div>\n\n            {unresolvedComments.length > 0 && (\n              <div className=\"glass-w-5 glass-h-5 glass-surface-danger glass-text-primary glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs\">\n                {unresolvedComments.length}\n              </div>\n            )}\n          </button>\n        </Glass>\n      ) : (\n        // Expanded state\n        <Glass className=\"glass-w-80 glass-max-h-96 glass-overflow-hidden glass-contrast-guard\">\n          {/* Header */}\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-subtle\">\n            <h3 className=\"glass-font-semibold glass-text-secondary\">\n              Collaboration\n            </h3>\n            <button\n              onClick={() => setIsExpanded(false)}\n              className=\"glass-text-secondary hover:glass-text-secondary glass-p-1 glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              \u2715\n            </button>\n          </div>\n\n          {/* Connection Status */}\n          <div className=\"glass-px-4 glass-py-2 glass-surface-subtle glass-border-b glass-border-subtle\">\n            <ConnectionStatus />\n          </div>\n\n          {/* Controls */}\n          {showControls && (\n            <div className=\"glass-p-4 glass-border-b glass-border-subtle\">\n              <div className=\"glass-grid glass-grid-cols-3 glass-gap-2\">\n                <button\n                  onClick={toggleCursors}\n                  className={cn(\n                    \"glass-flex glass-flex-col glass-items-center glass-gap-1 glass-p-2 glass-radius glass-text-xs glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                    showCursors\n                      ? \"glass-surface-info glass-text-primary\"\n                      : \"glass-surface-subtle glass-text-secondary\"\n                  )}\n                >\n                  <span>\uD83D\uDC46</span>\n                  Cursors\n                </button>\n\n                <button\n                  onClick={toggleComments}\n                  className={cn(\n                    \"glass-relative glass-flex glass-flex-col glass-items-center glass-gap-1 glass-p-2 glass-radius glass-text-xs glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                    showComments\n                      ? \"glass-surface-primary glass-text-primary\"\n                      : \"glass-surface-subtle glass-text-secondary\"\n                  )}\n                >\n                  <span>\uD83D\uDCAC</span>\n                  Comments\n                  {unresolvedComments.length > 0 && (\n                    <div\n                      className=\"glass-absolute glass-top-1 glass-w-4 glass-h-4 glass-surface-danger glass-text-primary glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-xs\"\n                      style={{ right: -4 }}\n                    >\n                      {unresolvedComments.length}\n                    </div>\n                  )}\n                </button>\n\n                <button\n                  onClick={toggleActivity}\n                  className={cn(\n                    \"glass-flex glass-flex-col glass-items-center glass-gap-1 glass-p-2 glass-radius glass-text-xs glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                    showActivity\n                      ? \"glass-surface-success glass-text-primary\"\n                      : \"glass-surface-subtle glass-text-secondary\"\n                  )}\n                >\n                  <span>\uD83D\uDCCA</span>\n                  Activity\n                </button>\n              </div>\n            </div>\n          )}\n\n          {/* Tabs */}\n          <div className=\"glass-flex glass-border-b glass-border-subtle\">\n            <button\n              onClick={() => setActiveTab(\"users\")}\n              className={cn(\n                \"glass-flex-1 glass-px-4 glass-py-2 glass-text-sm glass-font-medium glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                activeTab === \"users\"\n                  ? \"glass-text-primary glass-border-b glass-border-primary glass-surface-subtle/10\"\n                  : \"glass-text-secondary\"\n              )}\n            >\n              Users ({activeUsers.length})\n            </button>\n            <button\n              onClick={() => setActiveTab(\"activity\")}\n              className={cn(\n                \"glass-flex-1 glass-px-4 glass-py-2 glass-text-sm glass-font-medium glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                activeTab === \"activity\"\n                  ? \"glass-text-primary glass-border-b glass-border-primary glass-surface-subtle/10\"\n                  : \"glass-text-secondary\"\n              )}\n            >\n              Activity\n            </button>\n          </div>\n\n          {/* Content */}\n          <div className=\"glass-max-h-64 glass-overflow-y-auto\">\n            {activeTab === \"users\" && showUserList && (\n              <div className=\"glass-p-4 glass-space-y-3\">\n                {activeUsers.map((user: any) => {\n                  const isCurrentUser = user.id === resolvedCurrentUser?.id;\n                  const isActive = Date.now() - user.lastActive < 60000;\n\n                  return (\n                    <div\n                      key={user.id}\n                      className={cn(\n                        \"glass-flex glass-items-center glass-gap-3 glass-p-2 glass-radius\",\n                        isCurrentUser\n                          ? \"glass-surface-info\"\n                          : \"glass-surface-transparent\"\n                      )}\n                    >\n                      <UserAvatar user={user} size=\"md\" />\n\n                      <div className=\"glass-flex-1 glass-min-w-0\">\n                        <div className=\"glass-flex glass-items-center glass-gap-2\">\n                          <span className=\"glass-text-sm glass-font-medium glass-text-secondary glass-truncate\">\n                            {user.name}\n                            {isCurrentUser && \" (You)\"}\n                          </span>\n                          {!isActive && (\n                            <span className=\"glass-text-xs glass-text-secondary\">\n                              Away\n                            </span>\n                          )}\n                        </div>\n                        <span className=\"glass-text-xs glass-text-secondary glass-truncate\">\n                          {user.email}\n                        </span>\n                      </div>\n\n                      {user.cursor && (\n                        <span className=\"glass-text-xs glass-text-primary\">\n                          \uD83D\uDCCD\n                        </span>\n                      )}\n                    </div>\n                  );\n                })}\n\n                {activeUsers.length === 0 && (\n                  <div className=\"glass-text-center glass-py-6 glass-text-secondary\">\n                    <div className=\"glass-text-2xl glass-mb-2\">\uD83D\uDC65</div>\n                    <p className=\"glass-text-sm\">No users online</p>\n                  </div>\n                )}\n              </div>\n            )}\n\n            {activeTab === \"activity\" && showActivityFeed && (\n              <div className=\"glass-p-4 glass-space-y-1\">\n                {recentActivities.map((activity: any) => {\n                  const user = resolvedUsers.find(\n                    (u) => u.id === activity.userId\n                  );\n                  return (\n                    <ActivityItem\n                      key={activity.id}\n                      activity={activity}\n                      user={user}\n                    />\n                  );\n                })}\n\n                {recentActivities.length === 0 && (\n                  <div className=\"glass-text-center glass-py-6 glass-text-secondary\">\n                    <div className=\"glass-text-2xl glass-mb-2\">\uD83D\uDCCA</div>\n                    <p className=\"glass-text-sm\">No recent activity</p>\n                  </div>\n                )}\n              </div>\n            )}\n          </div>\n\n          {/* Footer Stats */}\n          <div className=\"glass-px-4 glass-py-2 glass-surface-subtle glass-border-t glass-border-subtle glass-text-xs glass-text-secondary\">\n            <div className=\"glass-flex glass-justify-between\">\n              <span>{resolvedComments.length} comments</span>\n              <span>{resolvedActivities.length} activities</span>\n            </div>\n          </div>\n        </Glass>\n      )}\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport {\n  useCollaboration,\n  CollaborationComment,\n  CollaborationUser,\n} from \"./GlassCollaborationProvider\";\nimport { cn } from \"../../lib/utilsComprehensive\";\n\ninterface CollaborativeCommentsProps {\n  className?: string;\n  allowComments?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  \"aria-label\"?: string;\n  \"data-testid\"?: string;\n}\n\nconst DEMO_COMMENT_USER: CollaborationUser = {\n  id: \"demo-reviewer\",\n  name: \"Lumen\",\n  email: \"lumen@example.com\",\n  color: \"#38bdf8\",\n  lastActive: Date.now(),\n};\n\nconst DEMO_COMMENTS: CollaborationComment[] = [\n  {\n    id: \"demo-comment-1\",\n    userId: \"demo-reviewer\",\n    content: \"Tighten this surface copy before launch.\",\n    position: { x: 188, y: 128 },\n    timestamp: Date.now() - 90000,\n    resolved: false,\n    replies: [\n      {\n        id: \"demo-reply-1\",\n        userId: \"demo-reviewer\",\n        content: \"Keeping the note visible for review.\",\n        position: { x: 188, y: 128 },\n        timestamp: Date.now() - 45000,\n      },\n    ],\n  },\n];\n\nconst CommentBubble: React.FC<{\n  comment: CollaborationComment;\n  user: any;\n  onReply: (commentId: string, content: string) => void;\n  onResolve: (commentId: string) => void;\n  isOwner: boolean;\n  compact?: boolean;\n}> = ({ comment, user, onReply, onResolve, isOwner, compact = false }) => {\n  const [showReplies, setShowReplies] = useState(false);\n  const [replyText, setReplyText] = useState(\"\");\n  const [isReplying, setIsReplying] = useState(false);\n  const bubbleRef = useRef<HTMLDivElement>(null);\n  const avatarRef = useRef<HTMLDivElement>(null);\n  const pointerRef = useRef<HTMLDivElement>(null);\n\n  // Apply dynamic positioning and colors without JSX style attribute\n  useEffect(() => {\n    const el = bubbleRef.current;\n    if (!el) return;\n    if (compact) {\n      el.style.left = `${Math.min(Math.max(comment.position.x, 104), 210)}px`;\n      el.style.top = \"28px\";\n      el.style.transform = \"translateX(-50%)\";\n      return;\n    }\n    el.style.left = `${comment.position.x}px`;\n    el.style.top = `${comment.position.y}px`;\n    el.style.transform = \"translate(-50%, -100%)\";\n  }, [comment.position.x, comment.position.y, compact]);\n\n  useEffect(() => {\n    const ptr = pointerRef.current;\n    if (!ptr) return;\n    ptr.style.left = \"50%\";\n    ptr.style.top = \"100%\";\n    ptr.style.transform = \"translateX(-50%)\";\n    ptr.style.filter =\n      \"drop-shadow(0 2px 4px color-mix(in srgb, var(--glass-black) 10%, transparent))\";\n  }, []);\n\n  useEffect(() => {\n    if (avatarRef.current) {\n      avatarRef.current.style.backgroundColor =\n        user?.color || \"var(--glass-gray-500)\";\n    }\n  }, [user?.color]);\n\n  const handleReply = () => {\n    if (replyText.trim()) {\n      onReply(comment.id, replyText.trim());\n      setReplyText(\"\");\n      setIsReplying(false);\n    }\n  };\n\n  const formatTime = (timestamp: number) => {\n    const now = Date.now();\n    const diff = now - timestamp;\n    const minutes = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (minutes < 1) return \"Just now\";\n    if (minutes < 60) return `${minutes}m ago`;\n    if (hours < 24) return `${hours}h ago`;\n    return `${days}d ago`;\n  };\n\n  return (\n    <div\n      data-glass-component\n      ref={bubbleRef}\n      className=\"glass-absolute glass-z-40 glass-container-xs\"\n      style={{\n        opacity: comment.resolved ? 0.6 : 1,\n        width: compact ? 180 : undefined,\n        maxWidth: compact ? \"calc(100% - 32px)\" : undefined,\n      }}\n    >\n      <div className=\"glass-relative\">\n        {/* Main comment */}\n        <Glass\n          className={cn(\n            \"glass-mb-2 glass-shadow-lg glass-border-l glass-contrast-guard\",\n            compact ? \"glass-p-2\" : \"glass-p-3\"\n          )}\n          style={{\n            borderLeftWidth: 4,\n            borderLeftColor: comment.resolved\n              ? \"rgba(148, 163, 184, 0.8)\"\n              : \"hsl(var(--glass-color-primary))\",\n          }}\n        >\n          <div\n            className={cn(\n              \"glass-flex glass-items-start glass-justify-between\",\n              compact ? \"glass-mb-1\" : \"glass-mb-2\"\n            )}\n          >\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <div\n                ref={avatarRef}\n                className=\"glass-w-6 glass-h-6 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-text-xs glass-font-medium\"\n              >\n                {user?.name?.[0]?.toUpperCase() || \"?\"}\n              </div>\n              <span\n                className={cn(\n                  \"glass-font-medium glass-text-secondary\",\n                  compact ? \"glass-text-xs\" : \"glass-text-sm\"\n                )}\n              >\n                {user?.name || \"Unknown User\"}\n              </span>\n              {!compact && (\n                <span className=\"glass-text-xs glass-text-secondary\">\n                  {formatTime(comment.timestamp)}\n                </span>\n              )}\n            </div>\n            <div className=\"glass-flex glass-gap-1\">\n              {!comment.resolved &&\n                (isOwner || user?.id === comment.userId) && (\n                  <button\n                    onClick={() => onResolve(comment.id)}\n                    className=\"glass-text-primary hover:glass-text-primary glass-text-xs glass-p-1 glass-focus glass-touch-target glass-contrast-guard\"\n                    title=\"Resolve comment\"\n                  >\n                    \u2713\n                  </button>\n                )}\n              {comment.resolved && (\n                <span className=\"glass-text-primary glass-text-xs\">\n                  Resolved\n                </span>\n              )}\n            </div>\n          </div>\n\n          <p\n            className={cn(\n              \"glass-text-secondary glass-mb-2\",\n              compact ? \"glass-text-xs\" : \"glass-text-sm\"\n            )}\n          >\n            {comment.content}\n          </p>\n\n          <div className=\"glass-flex glass-items-center glass-gap-3 glass-text-xs\">\n            <button\n              onClick={() => setIsReplying(!isReplying)}\n              className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              Reply\n            </button>\n\n            {!compact && (comment.replies?.length || 0) > 0 && (\n              <button\n                onClick={() => setShowReplies(!showReplies)}\n                className=\"glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                {showReplies ? \"Hide\" : \"Show\"} {comment.replies?.length}{\" \"}\n                replies\n              </button>\n            )}\n          </div>\n        </Glass>\n\n        {/* Reply input */}\n        {isReplying && (\n          <Glass className=\"glass-p-3 glass-mb-2 glass-surface-subtle glass-contrast-guard\">\n            <textarea\n              value={replyText}\n              onChange={(e) => setReplyText(e.target.value)}\n              placeholder=\"Write a reply...\"\n              className=\"glass-w-full glass-p-2 glass-text-sm glass-border glass-border-subtle glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n              style={{ resize: \"none\" }}\n              rows={2}\n              autoFocus\n            />\n            <div className=\"glass-flex glass-justify-end glass-gap-2 glass-mt-2\">\n              <button\n                onClick={() => setIsReplying(false)}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Cancel\n              </button>\n              <button\n                onClick={handleReply}\n                disabled={!replyText.trim()}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-surface-primary glass-text-primary glass-radius disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Reply\n              </button>\n            </div>\n          </Glass>\n        )}\n\n        {/* Replies */}\n        {!compact &&\n          showReplies &&\n          comment.replies &&\n          comment.replies.length > 0 && (\n            <div className=\"glass-ml-4 glass-space-y-2\">\n              {comment.replies.map((reply: any) => {\n                const replyUser = user; // In real app, would look up by reply.userId\n                return (\n                  <Glass\n                    key={reply.id}\n                    className=\"glass-p-2 glass-surface-subtle glass-contrast-guard\"\n                  >\n                    <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-1\">\n                      <div\n                        ref={(el) => {\n                          if (el)\n                            el.style.backgroundColor =\n                              replyUser?.color || \"var(--glass-gray-500)\";\n                        }}\n                        className=\"glass-w-4 glass-h-4 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-text-xs\"\n                      >\n                        {replyUser?.name?.[0]?.toUpperCase() || \"?\"}\n                      </div>\n                      <span className=\"glass-text-xs glass-font-medium glass-text-secondary\">\n                        {replyUser?.name || \"Unknown User\"}\n                      </span>\n                      <span className=\"glass-text-xs glass-text-secondary\">\n                        {formatTime(reply.timestamp)}\n                      </span>\n                    </div>\n                    <p className=\"glass-text-xs glass-text-secondary\">\n                      {reply.content}\n                    </p>\n                  </Glass>\n                );\n              })}\n            </div>\n          )}\n\n        {/* Comment pointer */}\n        <div\n          ref={pointerRef}\n          className=\"glass-absolute\"\n          style={{\n            width: 0,\n            height: 0,\n            borderLeft: \"4px solid transparent\",\n            borderRight: \"4px solid transparent\",\n            borderTop: \"4px solid rgba(255, 255, 255, 0.9)\",\n          }}\n        />\n      </div>\n    </div>\n  );\n};\n\nconst CommentDot: React.FC<{\n  position: { x: number; y: number };\n  color: string;\n  count?: number;\n  onClick: () => void;\n  resolved?: boolean;\n}> = ({ position, color, count = 1, onClick, resolved }) => {\n  const ref = useRef<HTMLButtonElement>(null);\n  useEffect(() => {\n    const el = ref.current;\n    if (!el) return;\n    el.style.left = `${position.x}px`;\n    el.style.top = `${position.y}px`;\n    el.style.transform = \"translate(-50%, -50%)\";\n    el.style.backgroundColor = resolved ? \"var(--glass-gray-500)\" : color;\n  }, [position.x, position.y, color, resolved]);\n  return (\n    <button\n      ref={ref}\n      className={cn(\n        \"glass-absolute glass-z-30 glass-w-6 glass-h-6 glass-radius-full glass-border glass-shadow-lg glass-transition glass-focus glass-touch-target glass-contrast-guard\"\n      )}\n      style={{ opacity: resolved ? 0.6 : 1 }}\n      onClick={onClick}\n      aria-label={resolved ? \"Resolved comment\" : \"Comment\"}\n    >\n      <span className=\"glass-text-primary glass-text-xs glass-font-bold\">\n        {count}\n      </span>\n    </button>\n  );\n};\n\nexport const GlassCollaborativeComments: React.FC<\n  CollaborativeCommentsProps\n> = ({\n  className,\n  allowComments = true,\n  compact = false,\n  contained = false,\n  maxHeight,\n  \"aria-label\": ariaLabel,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    comments,\n    users,\n    currentUser,\n    addComment,\n    resolveComment,\n    replyToComment,\n    showComments,\n  } = useCollaboration();\n\n  const [isAddingComment, setIsAddingComment] = useState(false);\n  const [newCommentPosition, setNewCommentPosition] = useState<{\n    x: number;\n    y: number;\n  } | null>(null);\n  const [newCommentText, setNewCommentText] = useState(\"\");\n  const [selectedComment, setSelectedComment] = useState<string | null>(null);\n  const isCompactMode = compact || contained;\n  const boundedHeight = maxHeight ?? (isCompactMode ? 220 : undefined);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const newBubbleRef = useRef<HTMLDivElement>(null);\n  const newAvatarRef = useRef<HTMLDivElement>(null);\n  const newPointerRef = useRef<HTMLDivElement>(null);\n  const shouldUseDemoContent =\n    comments.length === 0 && users.length === 0 && !currentUser;\n  const resolvedComments = shouldUseDemoContent ? DEMO_COMMENTS : comments;\n  const resolvedUsers = shouldUseDemoContent ? [DEMO_COMMENT_USER] : users;\n  const resolvedCurrentUser = currentUser ?? resolvedUsers[0] ?? null;\n  const visibleSelectedComment =\n    selectedComment ??\n    (shouldUseDemoContent ? (resolvedComments[0]?.id ?? null) : null);\n\n  // Position and color for the new comment bubble (no JSX style attr)\n  useEffect(() => {\n    const el = newBubbleRef.current;\n    if (!el || !newCommentPosition) return;\n    el.style.left = `${newCommentPosition.x}px`;\n    el.style.top = `${newCommentPosition.y}px`;\n    el.style.transform = isCompactMode\n      ? \"translateX(-50%)\"\n      : \"translate(-50%, -100%)\";\n  }, [newCommentPosition, isCompactMode]);\n\n  useEffect(() => {\n    if (newAvatarRef.current) {\n      newAvatarRef.current.style.backgroundColor =\n        resolvedCurrentUser?.color || \"var(--glass-gray-500)\";\n    }\n  }, [resolvedCurrentUser?.color]);\n\n  useEffect(() => {\n    if (newPointerRef.current) {\n      const ptr = newPointerRef.current;\n      ptr.style.left = \"50%\";\n      ptr.style.top = \"100%\";\n      ptr.style.transform = \"translateX(-50%)\";\n      ptr.style.filter =\n        \"drop-shadow(0 2px 4px color-mix(in srgb, var(--glass-black) 10%, transparent))\";\n    }\n  }, [isAddingComment, newCommentPosition]);\n\n  useEffect(() => {\n    if (!allowComments || !showComments) return;\n\n    const handleDoubleClick = (e: MouseEvent) => {\n      if (!resolvedCurrentUser) return;\n\n      // Don't add comments on UI elements\n      const target = e.target as HTMLElement;\n      if (target.closest(\"button, input, textarea, select, a\")) return;\n\n      const rect = containerRef.current?.getBoundingClientRect();\n      if (!rect) return;\n\n      const position = {\n        x: e.clientX - rect.left,\n        y: e.clientY - rect.top,\n      };\n\n      setNewCommentPosition(\n        isCompactMode\n          ? {\n              x: Math.min(Math.max(position.x, 104), 210),\n              y: 28,\n            }\n          : position\n      );\n      setIsAddingComment(true);\n    };\n\n    const container = containerRef.current;\n    if (container) {\n      container.addEventListener(\"dblclick\", handleDoubleClick);\n    }\n\n    return () => {\n      if (container) {\n        container.removeEventListener(\"dblclick\", handleDoubleClick);\n      }\n    };\n  }, [allowComments, showComments, resolvedCurrentUser, isCompactMode]);\n\n  const handleAddComment = () => {\n    if (!newCommentText.trim() || !newCommentPosition || !resolvedCurrentUser)\n      return;\n\n    addComment({\n      userId: resolvedCurrentUser.id,\n      content: newCommentText.trim(),\n      position: newCommentPosition,\n    });\n\n    setNewCommentText(\"\");\n    setIsAddingComment(false);\n    setNewCommentPosition(null);\n  };\n\n  const handleReply = (commentId: string, content: string) => {\n    if (!resolvedCurrentUser) return;\n\n    replyToComment(commentId, {\n      userId: resolvedCurrentUser.id,\n      content,\n    });\n  };\n\n  const handleResolve = (commentId: string) => {\n    resolveComment(commentId);\n  };\n\n  // Group comments by position for clustering\n  const groupedComments = React.useMemo(() => {\n    const groups: { [key: string]: CollaborationComment[] } = {};\n\n    resolvedComments.forEach((comment: any) => {\n      const key = `${Math.floor(comment.position.x / 50)}-${Math.floor(comment.position.y / 50)}`;\n      if (!groups[key]) groups[key] = [];\n      groups[key].push(comment);\n    });\n\n    return Object.values(groups);\n  }, [resolvedComments]);\n\n  if (!showComments || !allowComments) {\n    return null;\n  }\n\n  const clampPosition = (position: { x: number; y: number }) => {\n    if (!isCompactMode) return position;\n    return {\n      x: Math.min(Math.max(position.x, 44), 260),\n      y: Math.min(Math.max(position.y, 138), 168),\n    };\n  };\n\n  const withClampedPosition = (comment: CollaborationComment) => ({\n    ...comment,\n    position: clampPosition(comment.position),\n  });\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        \"glass-relative glass-w-full glass-h-full glass-min-h-48\",\n        isCompactMode && \"glass-overflow-hidden\",\n        className\n      )}\n      style={{\n        ...(boundedHeight !== undefined\n          ? {\n              maxHeight:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n              minHeight: isCompactMode ? \"180px\" : undefined,\n              overflow: \"hidden\",\n            }\n          : null),\n      }}\n      aria-label={ariaLabel}\n      data-testid={dataTestId}\n    >\n      {/* Comment dots */}\n      {groupedComments.map((group, index) => {\n        const firstComment = group[0];\n        const user =\n          resolvedUsers.find((u) => u.id === firstComment.userId) ||\n          resolvedCurrentUser;\n        const hasUnresolved = group.some((c) => !c.resolved);\n\n        return (\n          <CommentDot\n            key={`group-${index}`}\n            position={clampPosition(firstComment.position)}\n            color={user?.color || \"var(--glass-gray-500)\"}\n            count={group.length}\n            resolved={!hasUnresolved}\n            onClick={() =>\n              setSelectedComment(\n                selectedComment === firstComment.id ? null : firstComment.id\n              )\n            }\n          />\n        );\n      })}\n\n      {/* Selected comment bubble */}\n      {visibleSelectedComment && (\n        <>\n          {resolvedComments\n            .filter((comment: any) =>\n              groupedComments.find(\n                (group) =>\n                  group.some((c) => c.id === visibleSelectedComment) &&\n                  group.includes(comment)\n              )\n            )\n            .map((comment: any) => {\n              const user =\n                resolvedUsers.find((u) => u.id === comment.userId) ||\n                resolvedCurrentUser;\n\n              return (\n                <CommentBubble\n                  key={comment.id}\n                  comment={withClampedPosition(comment)}\n                  user={user}\n                  onReply={handleReply}\n                  onResolve={handleResolve}\n                  isOwner={resolvedCurrentUser?.id === comment.userId}\n                  compact={isCompactMode}\n                />\n              );\n            })}\n        </>\n      )}\n\n      {/* New comment input */}\n      {isAddingComment && newCommentPosition && (\n        <div\n          ref={newBubbleRef}\n          className=\"glass-absolute glass-z-40 glass-container-xs\"\n          style={{\n            width: isCompactMode ? 180 : undefined,\n            maxWidth: isCompactMode ? \"calc(100% - 32px)\" : undefined,\n          }}\n        >\n          <Glass\n            className={cn(\n              \"glass-shadow-lg glass-border-l glass-contrast-guard\",\n              isCompactMode ? \"glass-p-2\" : \"glass-p-3\"\n            )}\n            style={{\n              borderLeftWidth: 4,\n              borderLeftColor: \"hsl(var(--glass-color-primary))\",\n            }}\n          >\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-2\">\n              <div\n                ref={newAvatarRef}\n                className=\"glass-w-6 glass-h-6 glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-text-xs glass-font-medium\"\n              >\n                {resolvedCurrentUser?.name?.[0]?.toUpperCase() || \"?\"}\n              </div>\n              <span className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n                {resolvedCurrentUser?.name || \"You\"}\n              </span>\n            </div>\n\n            <textarea\n              value={newCommentText}\n              onChange={(e) => setNewCommentText(e.target.value)}\n              placeholder=\"Write a comment...\"\n              className=\"glass-w-full glass-p-2 glass-text-sm glass-border glass-border-subtle glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n              style={{ resize: \"none\" }}\n              rows={isCompactMode ? 2 : 3}\n              autoFocus\n            />\n\n            <div className=\"glass-flex glass-justify-end glass-gap-2 glass-mt-2\">\n              <button\n                onClick={() => {\n                  setIsAddingComment(false);\n                  setNewCommentPosition(null);\n                  setNewCommentText(\"\");\n                }}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Cancel\n              </button>\n              <button\n                onClick={handleAddComment}\n                disabled={!newCommentText.trim()}\n                className=\"glass-px-3 glass-py-1 glass-text-xs glass-surface-primary glass-text-primary glass-radius disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Comment\n              </button>\n            </div>\n          </Glass>\n\n          {/* Comment pointer */}\n          <div\n            ref={newPointerRef}\n            className=\"glass-absolute\"\n            style={{\n              width: 0,\n              height: 0,\n              borderLeft: \"4px solid transparent\",\n              borderRight: \"4px solid transparent\",\n              borderTop: \"4px solid rgba(255, 255, 255, 0.9)\",\n            }}\n          />\n        </div>\n      )}\n\n      {/* Click outside to close */}\n      {(selectedComment || isAddingComment) && (\n        <div\n          className=\"glass-fixed glass-inset-0 glass-z-20\"\n          onClick={() => {\n            setSelectedComment(null);\n            if (isAddingComment) {\n              setIsAddingComment(false);\n              setNewCommentPosition(null);\n              setNewCommentText(\"\");\n            }\n          }}\n        />\n      )}\n\n      {/* Helper text */}\n      {resolvedComments.length === 0 && resolvedCurrentUser && (\n        <div className=\"glass-absolute glass-bottom-4 glass-right-4 glass-surface-subtle glass-text-primary glass-p-3 glass-radius-lg glass-text-sm glass-max-w-xs\">\n          \uD83D\uDCA1 Double-click anywhere to add a comment\n        </div>\n      )}\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"@/primitives\";\n\nexport interface CollaborationParticipant {\n  id: string;\n  name: string;\n  presence?: \"active\" | \"idle\" | \"offline\";\n  color?: string;\n  cursorLabel?: string;\n}\n\nexport interface MultiUserGlassEditorProps\n  extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n  users?: CollaborationParticipant[];\n  className?: string;\n  header?: string;\n  lastUpdatedAt?: Date | string;\n  onContentChange?: (value: string) => void;\n  textareaClassName?: string;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the editor inside a bounded local surface. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: number | string;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: number | string;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n}\n\nconst statusAccent: Record<\n  NonNullable<CollaborationParticipant[\"presence\"]>,\n  React.CSSProperties\n> = {\n  active: {\n    background: \"var(--glass-primary-level2-surface)\",\n  },\n  idle: {\n    background: \"var(--glass-primary-level2-surface)\",\n  },\n  offline: {\n    background: \"var(--glass-primary-level2-surface)\",\n  },\n};\n\nconst DEFAULT_USERS: CollaborationParticipant[] = [\n  {\n    id: \"1\",\n    name: \"Nova\",\n    presence: \"active\",\n    color: \"hsl(var(--glass-color-info))\",\n  },\n  {\n    id: \"2\",\n    name: \"Orion\",\n    presence: \"idle\",\n    color: \"var(--glass-color-secondary)\",\n  },\n  {\n    id: \"3\",\n    name: \"Lyra\",\n    presence: \"offline\",\n    color: \"var(--glass-color-secondary)\",\n  },\n];\n\nexport function MultiUserGlassEditor({\n  users,\n  className,\n  header = \"Collaborative Glass Editor\",\n  lastUpdatedAt,\n  onContentChange,\n  value,\n  defaultValue,\n  readOnly,\n  textareaClassName,\n  compact = false,\n  contained = false,\n  preview = false,\n  maxHeight,\n  maxWidth,\n  density = \"comfortable\",\n  ...textareaProps\n}: MultiUserGlassEditorProps) {\n  const normalizeValue = (\n    input: typeof defaultValue | typeof value\n  ): string => {\n    if (typeof input === \"string\") return input;\n    if (typeof input === \"number\") return String(input);\n    if (Array.isArray(input)) return input.join(\"\\n\");\n    return \"\";\n  };\n\n  const fallbackValue = normalizeValue(defaultValue);\n  const initialValue = normalizeValue(value) || fallbackValue;\n  const [internalValue, setInternalValue] = useState<string>(initialValue);\n\n  useEffect(() => {\n    const updated = normalizeValue(value);\n    if (value !== undefined) {\n      setInternalValue(updated);\n    }\n  }, [value]);\n\n  const participants = useMemo(() => {\n    const activeUsers = users ?? DEFAULT_USERS;\n    return activeUsers.map((user, index) => ({\n      ...user,\n      presence: user.presence ?? (index === 0 ? \"active\" : \"idle\"),\n      color:\n        user.color ??\n        [\n          \"hsl(var(--glass-color-info))\",\n          \"var(--glass-color-secondary)\",\n          \"hsl(var(--glass-color-warning))\",\n        ][index % 3],\n    }));\n  }, [users]);\n\n  const displayValue =\n    value !== undefined ? normalizeValue(value) : internalValue;\n\n  const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n    if (!readOnly && typeof value !== \"string\") {\n      setInternalValue(event.target.value);\n    }\n    onContentChange?.(event.target.value);\n    textareaProps.onChange?.(event);\n  };\n\n  const formattedTimestamp = useMemo(() => {\n    if (!lastUpdatedAt) return \"live\";\n    const date =\n      typeof lastUpdatedAt === \"string\"\n        ? new Date(lastUpdatedAt)\n        : lastUpdatedAt;\n    if (Number.isNaN(date.getTime())) return \"live\";\n    return date.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n  }, [lastUpdatedAt]);\n  const isCompact = compact || preview || density === \"compact\";\n  const bounded = contained || isCompact;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const resolvedMaxWidth =\n    typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n  return (\n    <OptimizedGlass\n      role=\"region\"\n      aria-label={header}\n      className={cn(\n        \"glass-radius-2xl glass-border glass-border-subtle\",\n        isCompact ? \"glass-p-3 glass-space-y-2\" : \"glass-p-6 glass-space-y-4\",\n        bounded && \"glass-overflow-hidden glass-w-full\",\n        className\n      )}\n      style={{\n        background: \"var(--glass-primary-level2-surface)\",\n        maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n        maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n      }}\n    >\n      <header\n        className={cn(\n          \"glass-flex glass-flex-wrap glass-items-center glass-justify-between\",\n          isCompact ? \"glass-gap-2\" : \"glass-gap-4\"\n        )}\n      >\n        <div>\n          <h2\n            className={cn(\n              \"glass-font-semibold glass-text-primary\",\n              isCompact ? \"glass-text-sm\" : \"glass-text-xl\"\n            )}\n          >\n            {header}\n          </h2>\n          <p\n            className={cn(\n              \"glass-text-primary-opacity-70\",\n              isCompact ? \"glass-sr-only\" : \"glass-text-sm\"\n            )}\n          >\n            Synced presence across team members with glass awareness.\n          </p>\n        </div>\n        <span\n          className={cn(\n            \"glass-radius-full glass-border glass-border-white/10 glass-surface-subtle/10 glass-text-xs glass-text-primary-opacity-70\",\n            isCompact ? \"glass-px-2 glass-py-0.5\" : \"glass-px-3 glass-py-1\"\n          )}\n        >\n          Updated {formattedTimestamp}\n        </span>\n      </header>\n\n      <div\n        className={cn(\n          \"glass-flex glass-flex-wrap glass-items-center\",\n          isCompact ? \"glass-gap-1\" : \"glass-gap-3\"\n        )}\n      >\n        {(isCompact ? participants.slice(0, 3) : participants).map((user) => (\n          <span\n            key={user.id}\n            className={cn(\n              \"glass-flex glass-items-center glass-gap-2 glass-radius-full glass-border glass-border-white/10 glass-surface-subtle/5 glass-text-xs glass-text-primary\",\n              isCompact ? \"glass-px-2 glass-py-0.5\" : \"glass-px-3 glass-py-1\"\n            )}\n            style={{ boxShadow: `0 0 25px -12px ${user.color}` }}\n          >\n            <span\n              className=\"glass-flex glass-radius-full\"\n              style={{\n                width: 10,\n                height: 10,\n                backgroundColor: user.presence\n                  ? undefined\n                  : \"var(--glass-gray-500)\",\n              }}\n            >\n              {user.presence && (\n                <span\n                  className=\"glass-radius-full\"\n                  style={{\n                    width: 10,\n                    height: 10,\n                    ...statusAccent[user.presence],\n                  }}\n                />\n              )}\n            </span>\n            <span className=\"glass-font-medium\" style={{ color: user.color }}>\n              {user.name}\n            </span>\n            <span\n              className={cn(\n                \"glass-text-primary-opacity-50\",\n                isCompact && \"glass-sr-only\"\n              )}\n            >\n              {user.presence ?? \"active\"}\n            </span>\n          </span>\n        ))}\n      </div>\n\n      <textarea\n        {...textareaProps}\n        readOnly={readOnly}\n        value={displayValue}\n        onChange={handleChange}\n        className={cn(\n          \"glass-w-full glass-radius-2xl glass-border glass-border-white/10 glass-surface-subtle/5 glass-p-5 glass-text-sm glass-text-primary glass-blur-backdrop glass-focus glass-touch-target glass-contrast-guard\",\n          isCompact && \"glass-p-3 glass-text-xs\",\n          readOnly && \"glass-opacity-70 glass-disabled-cursor-not-allowed\",\n          textareaClassName\n        )}\n        style={{ minHeight: isCompact ? 92 : 200, resize: \"vertical\" }}\n      />\n    </OptimizedGlass>\n  );\n}\n\nexport default MultiUserGlassEditor;\n", "\"use client\";\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useRef,\n  forwardRef,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport type ComponentPropValue = string | number | boolean | undefined;\nexport type ComponentProps = React.CSSProperties &\n  Record<string, ComponentPropValue>;\n\nexport interface ComponentDefinition {\n  id: string;\n  type: string;\n  name: string;\n  icon: string;\n  category: \"layout\" | \"content\" | \"media\" | \"interactive\" | \"advanced\";\n  defaultProps: ComponentProps;\n  editableProps: {\n    [key: string]: {\n      type:\n        | \"text\"\n        | \"number\"\n        | \"color\"\n        | \"boolean\"\n        | \"select\"\n        | \"image\"\n        | \"range\";\n      label: string;\n      options?: string[];\n      min?: number;\n      max?: number;\n      step?: number;\n    };\n  };\n  allowChildren?: boolean;\n  maxChildren?: number;\n  acceptsTypes?: string[];\n}\n\nexport interface PageComponent {\n  id: string;\n  type: string;\n  props: ComponentProps;\n  children: PageComponent[];\n  parent?: string;\n  order: number;\n  locked?: boolean;\n}\n\nexport interface DragDropState {\n  isDragging: boolean;\n  draggedItem?: ComponentDefinition | PageComponent;\n  draggedType: \"component\" | \"element\" | null;\n  dropTarget?: string;\n  dropPosition?: \"before\" | \"after\" | \"inside\";\n  previewPosition?: { x: number; y: number };\n}\n\nexport interface PageBuilderState {\n  components: PageComponent[];\n  selectedComponent?: string;\n  clipboardComponent?: PageComponent;\n  history: PageComponent[][];\n  historyIndex: number;\n  previewMode: boolean;\n  activeBreakpoint: \"desktop\" | \"tablet\" | \"mobile\";\n  showGrid: boolean;\n  snapToGrid: boolean;\n}\n\nexport interface PageExportData {\n  components: PageComponent[];\n  timestamp: string;\n  version: string;\n}\n\ninterface DragDropContextValue {\n  // Page Builder State\n  pageState: PageBuilderState;\n\n  // Component Library\n  componentLibrary: ComponentDefinition[];\n\n  // Drag & Drop\n  dragDropState: DragDropState;\n  onDragStart: (\n    item: ComponentDefinition | PageComponent,\n    type: \"component\" | \"element\"\n  ) => void;\n  onDragEnd: () => void;\n  onDragOver: (\n    targetId: string,\n    position: \"before\" | \"after\" | \"inside\"\n  ) => void;\n  onDrop: (targetId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n\n  // Component Management\n  addComponent: (\n    definition: ComponentDefinition,\n    targetId?: string,\n    position?: \"before\" | \"after\" | \"inside\"\n  ) => void;\n  updateComponent: (id: string, props: Partial<ComponentProps>) => void;\n  deleteComponent: (id: string) => void;\n  duplicateComponent: (id: string) => void;\n  moveComponent: (\n    id: string,\n    targetId: string,\n    position: \"before\" | \"after\" | \"inside\"\n  ) => void;\n\n  // Selection & Editing\n  selectComponent: (id?: string) => void;\n  getSelectedComponent: () => PageComponent | undefined;\n  getComponentById: (id: string) => PageComponent | undefined;\n\n  // History & Undo/Redo\n  undo: () => void;\n  redo: () => void;\n  canUndo: () => boolean;\n  canRedo: () => boolean;\n  saveToHistory: () => void;\n\n  // Clipboard\n  copyComponent: (id: string) => void;\n  pasteComponent: (targetId?: string) => void;\n\n  // Page Management\n  clearPage: () => void;\n  exportPage: () => PageExportData;\n  importPage: (data: Partial<PageExportData>) => void;\n\n  // View Options\n  togglePreviewMode: () => void;\n  setActiveBreakpoint: (breakpoint: \"desktop\" | \"tablet\" | \"mobile\") => void;\n  toggleGrid: () => void;\n  toggleSnapToGrid: () => void;\n}\n\nconst DragDropContext = createContext<DragDropContextValue | null>(null);\n\n// Default component library\nconst defaultComponentLibrary: ComponentDefinition[] = [\n  // Layout Components\n  {\n    id: \"container\",\n    type: \"container\",\n    name: \"Container\",\n    icon: \"\uD83D\uDCE6\",\n    category: \"layout\",\n    defaultProps: {\n      padding: \"16px\",\n      margin: \"0px\",\n      backgroundColor: \"transparent\",\n      borderRadius: \"0px\",\n      maxWidth: \"100%\",\n      display: \"block\",\n    },\n    editableProps: {\n      padding: { type: \"text\", label: \"Padding\" },\n      margin: { type: \"text\", label: \"Margin\" },\n      backgroundColor: { type: \"color\", label: \"Background Color\" },\n      borderRadius: { type: \"text\", label: \"Border Radius\" },\n      maxWidth: { type: \"text\", label: \"Max Width\" },\n      display: {\n        type: \"select\",\n        label: \"Display\",\n        options: [\"block\", \"flex\", \"grid\", \"inline-block\"],\n      },\n    },\n    allowChildren: true,\n  },\n  {\n    id: \"row\",\n    type: \"row\",\n    name: \"Row\",\n    icon: \"\u2194\uFE0F\",\n    category: \"layout\",\n    defaultProps: {\n      gap: \"16px\",\n      justifyContent: \"flex-start\",\n      alignItems: \"stretch\",\n      wrap: \"nowrap\",\n      padding: \"0px\",\n    },\n    editableProps: {\n      gap: { type: \"text\", label: \"Gap\" },\n      justifyContent: {\n        type: \"select\",\n        label: \"Justify Content\",\n        options: [\n          \"flex-start\",\n          \"center\",\n          \"flex-end\",\n          \"space-between\",\n          \"space-around\",\n        ],\n      },\n      alignItems: {\n        type: \"select\",\n        label: \"Align Items\",\n        options: [\"stretch\", \"flex-start\", \"center\", \"flex-end\"],\n      },\n      wrap: {\n        type: \"select\",\n        label: \"Flex Wrap\",\n        options: [\"nowrap\", \"wrap\", \"wrap-reverse\"],\n      },\n      padding: { type: \"text\", label: \"Padding\" },\n    },\n    allowChildren: true,\n    acceptsTypes: [\"column\", \"container\", \"text\", \"image\", \"button\"],\n  },\n  {\n    id: \"column\",\n    type: \"column\",\n    name: \"Column\",\n    icon: \"\u2195\uFE0F\",\n    category: \"layout\",\n    defaultProps: {\n      flex: \"1\",\n      padding: \"16px\",\n      gap: \"8px\",\n      alignItems: \"stretch\",\n    },\n    editableProps: {\n      flex: { type: \"text\", label: \"Flex\" },\n      padding: { type: \"text\", label: \"Padding\" },\n      gap: { type: \"text\", label: \"Gap\" },\n      alignItems: {\n        type: \"select\",\n        label: \"Align Items\",\n        options: [\"stretch\", \"flex-start\", \"center\", \"flex-end\"],\n      },\n    },\n    allowChildren: true,\n  },\n\n  // Content Components\n  {\n    id: \"text\",\n    type: \"text\",\n    name: \"Text\",\n    icon: \"\uD83D\uDCDD\",\n    category: \"content\",\n    defaultProps: {\n      content: \"Edit this text\",\n      fontSize: \"16px\",\n      fontWeight: \"400\",\n      color: \"var(--glass-gray-700)\",\n      textAlign: \"left\",\n      lineHeight: \"1.5\",\n      fontFamily: \"system-ui, -apple-system, sans-serif\",\n    },\n    editableProps: {\n      content: { type: \"text\", label: \"Content\" },\n      fontSize: { type: \"text\", label: \"Font Size\" },\n      fontWeight: {\n        type: \"select\",\n        label: \"Font Weight\",\n        options: [\n          \"100\",\n          \"200\",\n          \"300\",\n          \"400\",\n          \"500\",\n          \"600\",\n          \"700\",\n          \"800\",\n          \"900\",\n        ],\n      },\n      color: { type: \"color\", label: \"Text Color\" },\n      textAlign: {\n        type: \"select\",\n        label: \"Text Align\",\n        options: [\"left\", \"center\", \"right\", \"justify\"],\n      },\n      lineHeight: { type: \"text\", label: \"Line Height\" },\n      fontFamily: { type: \"text\", label: \"Font Family\" },\n    },\n    allowChildren: false,\n  },\n  {\n    id: \"heading\",\n    type: \"heading\",\n    name: \"Heading\",\n    icon: \"\uD83C\uDFF7\uFE0F\",\n    category: \"content\",\n    defaultProps: {\n      content: \"Heading Text\",\n      level: \"h2\",\n      fontSize: \"32px\",\n      fontWeight: \"600\",\n      color: \"var(--glass-gray-900)\",\n      textAlign: \"left\",\n      margin: \"16px 0\",\n    },\n    editableProps: {\n      content: { type: \"text\", label: \"Content\" },\n      level: {\n        type: \"select\",\n        label: \"Heading Level\",\n        options: [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n      },\n      fontSize: { type: \"text\", label: \"Font Size\" },\n      fontWeight: {\n        type: \"select\",\n        label: \"Font Weight\",\n        options: [\"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\"],\n      },\n      color: { type: \"color\", label: \"Text Color\" },\n      textAlign: {\n        type: \"select\",\n        label: \"Text Align\",\n        options: [\"left\", \"center\", \"right\"],\n      },\n      margin: { type: \"text\", label: \"Margin\" },\n    },\n    allowChildren: false,\n  },\n\n  // Media Components\n  {\n    id: \"image\",\n    type: \"image\",\n    name: \"Image\",\n    icon: \"\uD83D\uDDBC\uFE0F\",\n    category: \"media\",\n    defaultProps: {\n      src: \"https://via.placeholder.com/400x300\",\n      alt: \"Placeholder image\",\n      width: \"100%\",\n      height: \"auto\",\n      borderRadius: \"0px\",\n      objectFit: \"cover\",\n    },\n    editableProps: {\n      src: { type: \"image\", label: \"Image Source\" },\n      alt: { type: \"text\", label: \"Alt Text\" },\n      width: { type: \"text\", label: \"Width\" },\n      height: { type: \"text\", label: \"Height\" },\n      borderRadius: { type: \"text\", label: \"Border Radius\" },\n      objectFit: {\n        type: \"select\",\n        label: \"Object Fit\",\n        options: [\"cover\", \"contain\", \"fill\", \"scale-down\", \"none\"],\n      },\n    },\n    allowChildren: false,\n  },\n\n  // Interactive Components\n  {\n    id: \"button\",\n    type: \"button\",\n    name: \"Button\",\n    icon: \"\uD83D\uDD18\",\n    category: \"interactive\",\n    defaultProps: {\n      text: \"Click me\",\n      variant: \"primary\",\n      size: \"medium\",\n      disabled: false,\n      href: \"\",\n      onClick: 'alert(\"Button clicked!\")',\n    },\n    editableProps: {\n      text: { type: \"text\", label: \"Button Text\" },\n      variant: {\n        type: \"select\",\n        label: \"Variant\",\n        options: [\"primary\", \"secondary\", \"outline\", \"ghost\"],\n      },\n      size: {\n        type: \"select\",\n        label: \"Size\",\n        options: [\"small\", \"medium\", \"large\"],\n      },\n      disabled: { type: \"boolean\", label: \"Disabled\" },\n      href: { type: \"text\", label: \"Link URL\" },\n      onClick: { type: \"text\", label: \"On Click (JavaScript)\" },\n    },\n    allowChildren: false,\n  },\n\n  // Advanced Components\n  {\n    id: \"card\",\n    type: \"card\",\n    name: \"Card\",\n    icon: \"\uD83C\uDCCF\",\n    category: \"advanced\",\n    defaultProps: {\n      padding: \"24px\",\n      borderRadius: \"12px\",\n      backgroundColor: \"var(--glass-white)\",\n      boxShadow: \"var(--glass-elev-2)\",\n      border: \"1px solid var(--glass-gray-200)\",\n    },\n    editableProps: {\n      padding: { type: \"text\", label: \"Padding\" },\n      borderRadius: { type: \"text\", label: \"Border Radius\" },\n      backgroundColor: { type: \"color\", label: \"Background Color\" },\n      boxShadow: { type: \"text\", label: \"Box Shadow\" },\n      border: { type: \"text\", label: \"Border\" },\n    },\n    allowChildren: true,\n  },\n];\n\nexport interface GlassDragDropProviderProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  children?: React.ReactNode;\n}\n\nexport const DragDropProvider = forwardRef<\n  HTMLDivElement,\n  GlassDragDropProviderProps\n>(({ children, className, ...props }, ref) => {\n  const [dragDropState, setDragDropState] = useState<DragDropState>({\n    isDragging: false,\n    draggedType: null,\n  });\n\n  const [pageState, setPageState] = useState<PageBuilderState>({\n    components: [],\n    history: [[]],\n    historyIndex: 0,\n    previewMode: false,\n    activeBreakpoint: \"desktop\",\n    showGrid: false,\n    snapToGrid: true,\n  });\n\n  const componentCounter = useRef(0);\n\n  const generateId = useCallback(() => {\n    return `comp_${Date.now()}_${++componentCounter.current}`;\n  }, []);\n\n  const saveToHistory = useCallback(() => {\n    setPageState((prev) => {\n      const newHistory = prev.history.slice(0, prev.historyIndex + 1);\n      newHistory.push([...prev.components]);\n      return {\n        ...prev,\n        history: newHistory.slice(-50), // Keep last 50 states\n        historyIndex: newHistory.length - 1,\n      };\n    });\n  }, []);\n\n  const onDragStart = useCallback(\n    (\n      item: ComponentDefinition | PageComponent,\n      type: \"component\" | \"element\"\n    ) => {\n      setDragDropState({\n        isDragging: true,\n        draggedItem: item,\n        draggedType: type,\n      });\n    },\n    []\n  );\n\n  const onDragEnd = useCallback(() => {\n    setDragDropState({\n      isDragging: false,\n      draggedType: null,\n    });\n  }, []);\n\n  const onDragOver = useCallback(\n    (targetId: string, position: \"before\" | \"after\" | \"inside\") => {\n      setDragDropState((prev) => ({\n        ...prev,\n        dropTarget: targetId,\n        dropPosition: position,\n      }));\n    },\n    []\n  );\n\n  const onDrop = useCallback(\n    (targetId?: string, position?: \"before\" | \"after\" | \"inside\") => {\n      if (!dragDropState.draggedItem || !dragDropState.draggedType) return;\n\n      if (dragDropState.draggedType === \"component\") {\n        addComponent(\n          dragDropState.draggedItem as ComponentDefinition,\n          targetId,\n          position\n        );\n      } else if (dragDropState.draggedType === \"element\") {\n        const element = dragDropState.draggedItem as PageComponent;\n        if (targetId && element.id !== targetId) {\n          moveComponent(element.id, targetId, position || \"inside\");\n        }\n      }\n\n      onDragEnd();\n    },\n    [dragDropState]\n  );\n\n  const addComponent = useCallback(\n    (\n      definition: ComponentDefinition,\n      targetId?: string,\n      position?: \"before\" | \"after\" | \"inside\"\n    ) => {\n      const newComponent: PageComponent = {\n        id: generateId(),\n        type: definition.type,\n        props: { ...definition.defaultProps },\n        children: [],\n        parent: targetId && position === \"inside\" ? targetId : undefined,\n        order: 0,\n      };\n\n      setPageState((prev) => {\n        const components = [...prev.components];\n\n        if (targetId && position) {\n          const targetIndex = components.findIndex((c) => c.id === targetId);\n          if (targetIndex !== -1) {\n            switch (position) {\n              case \"before\":\n                components.splice(targetIndex, 0, newComponent);\n                break;\n              case \"after\":\n                components.splice(targetIndex + 1, 0, newComponent);\n                break;\n              case \"inside\":\n                newComponent.parent = targetId;\n                const target = components[targetIndex];\n                if (target) {\n                  target.children.push(newComponent);\n                }\n                break;\n            }\n          }\n        } else {\n          components.push(newComponent);\n        }\n\n        return {\n          ...prev,\n          components,\n          selectedComponent: newComponent.id,\n        };\n      });\n\n      saveToHistory();\n    },\n    [generateId, saveToHistory]\n  );\n\n  const updateComponent = useCallback(\n    (id: string, props: Partial<ComponentProps>) => {\n      setPageState((prev) => {\n        const updateInArray = (\n          components: PageComponent[]\n        ): PageComponent[] => {\n          return components.map((component) => {\n            if (component.id === id) {\n              return { ...component, props: { ...component.props, ...props } };\n            }\n            if (component.children.length > 0) {\n              return {\n                ...component,\n                children: updateInArray(component.children),\n              };\n            }\n            return component;\n          });\n        };\n\n        return {\n          ...prev,\n          components: updateInArray(prev.components),\n        };\n      });\n    },\n    []\n  );\n\n  const deleteComponent = useCallback(\n    (id: string) => {\n      setPageState((prev) => {\n        const removeFromArray = (\n          components: PageComponent[]\n        ): PageComponent[] => {\n          return components.filter((component) => {\n            if (component.id === id) return false;\n            component.children = removeFromArray(component.children);\n            return true;\n          });\n        };\n\n        return {\n          ...prev,\n          components: removeFromArray(prev.components),\n          selectedComponent:\n            prev.selectedComponent === id ? undefined : prev.selectedComponent,\n        };\n      });\n      saveToHistory();\n    },\n    [saveToHistory]\n  );\n\n  const duplicateComponent = useCallback(\n    (id: string) => {\n      setPageState((prev) => {\n        const findComponent = (\n          components: PageComponent[]\n        ): PageComponent | null => {\n          for (const component of components) {\n            if (component.id === id) return component;\n            const found = findComponent(component.children);\n            if (found) return found;\n          }\n          return null;\n        };\n\n        const original = findComponent(prev.components);\n        if (!original) return prev;\n\n        const duplicateRecursive = (comp: PageComponent): PageComponent => ({\n          ...comp,\n          id: generateId(),\n          children: comp.children.map(duplicateRecursive),\n        });\n\n        const duplicate = duplicateRecursive(original);\n\n        return {\n          ...prev,\n          components: [...prev.components, duplicate],\n          selectedComponent: duplicate.id,\n        };\n      });\n      saveToHistory();\n    },\n    [generateId, saveToHistory]\n  );\n\n  const moveComponent = useCallback(\n    (id: string, targetId: string, position: \"before\" | \"after\" | \"inside\") => {\n      // Implementation for moving components within the tree\n      saveToHistory();\n    },\n    [saveToHistory]\n  );\n\n  const selectComponent = useCallback((id?: string) => {\n    setPageState((prev) => ({\n      ...prev,\n      selectedComponent: id,\n    }));\n  }, []);\n\n  const getSelectedComponent = useCallback((): PageComponent | undefined => {\n    if (!pageState.selectedComponent) return undefined;\n\n    const findInArray = (\n      components: PageComponent[]\n    ): PageComponent | undefined => {\n      for (const component of components) {\n        if (component.id === pageState.selectedComponent) return component;\n        const found = findInArray(component.children);\n        if (found) return found;\n      }\n      return undefined;\n    };\n\n    return findInArray(pageState.components);\n  }, [pageState.selectedComponent, pageState.components]);\n\n  const getComponentById = useCallback(\n    (id: string): PageComponent | undefined => {\n      const findInArray = (\n        components: PageComponent[]\n      ): PageComponent | undefined => {\n        for (const component of components) {\n          if (component.id === id) return component;\n          const found = findInArray(component.children);\n          if (found) return found;\n        }\n        return undefined;\n      };\n\n      return findInArray(pageState.components);\n    },\n    [pageState.components]\n  );\n\n  const undo = useCallback(() => {\n    setPageState((prev) => {\n      if (prev.historyIndex > 0) {\n        return {\n          ...prev,\n          components: prev.history[prev.historyIndex - 1],\n          historyIndex: prev.historyIndex - 1,\n        };\n      }\n      return prev;\n    });\n  }, []);\n\n  const redo = useCallback(() => {\n    setPageState((prev) => {\n      if (prev.historyIndex < prev.history.length - 1) {\n        return {\n          ...prev,\n          components: prev.history[prev.historyIndex + 1],\n          historyIndex: prev.historyIndex + 1,\n        };\n      }\n      return prev;\n    });\n  }, []);\n\n  const canUndo = useCallback(\n    () => pageState.historyIndex > 0,\n    [pageState.historyIndex]\n  );\n  const canRedo = useCallback(\n    () => pageState.historyIndex < pageState.history.length - 1,\n    [pageState.historyIndex, pageState.history.length]\n  );\n\n  const copyComponent = useCallback(\n    (id: string) => {\n      const component = getComponentById(id);\n      if (component) {\n        setPageState((prev) => ({\n          ...prev,\n          clipboardComponent: component,\n        }));\n      }\n    },\n    [getComponentById]\n  );\n\n  const pasteComponent = useCallback(\n    (targetId?: string) => {\n      if (pageState.clipboardComponent) {\n        const definition: ComponentDefinition = {\n          id: pageState.clipboardComponent.type,\n          type: pageState.clipboardComponent.type,\n          name: pageState.clipboardComponent.type,\n          icon: \"\uD83D\uDCCB\",\n          category: \"content\",\n          defaultProps: pageState.clipboardComponent.props,\n          editableProps: {},\n        };\n        addComponent(definition, targetId);\n      }\n    },\n    [pageState.clipboardComponent, addComponent]\n  );\n\n  const clearPage = useCallback(() => {\n    setPageState((prev) => ({\n      ...prev,\n      components: [],\n      selectedComponent: undefined,\n    }));\n    saveToHistory();\n  }, [saveToHistory]);\n\n  const exportPage = useCallback((): PageExportData => {\n    return {\n      components: pageState.components,\n      timestamp: new Date().toISOString(),\n      version: \"1.0.0\",\n    };\n  }, [pageState.components]);\n\n  const importPage = useCallback(\n    (data: Partial<PageExportData>) => {\n      const importedComponents = data.components;\n      if (importedComponents) {\n        setPageState((prev) => ({\n          ...prev,\n          components: importedComponents,\n          selectedComponent: undefined,\n        }));\n        saveToHistory();\n      }\n    },\n    [saveToHistory]\n  );\n\n  const togglePreviewMode = useCallback(() => {\n    setPageState((prev) => ({ ...prev, previewMode: !prev.previewMode }));\n  }, []);\n\n  const setActiveBreakpoint = useCallback(\n    (breakpoint: \"desktop\" | \"tablet\" | \"mobile\") => {\n      setPageState((prev) => ({ ...prev, activeBreakpoint: breakpoint }));\n    },\n    []\n  );\n\n  const toggleGrid = useCallback(() => {\n    setPageState((prev) => ({ ...prev, showGrid: !prev.showGrid }));\n  }, []);\n\n  const toggleSnapToGrid = useCallback(() => {\n    setPageState((prev) => ({ ...prev, snapToGrid: !prev.snapToGrid }));\n  }, []);\n\n  const value: DragDropContextValue = {\n    pageState,\n    componentLibrary: defaultComponentLibrary,\n    dragDropState,\n    onDragStart,\n    onDragEnd,\n    onDragOver,\n    onDrop,\n    addComponent,\n    updateComponent,\n    deleteComponent,\n    duplicateComponent,\n    moveComponent,\n    selectComponent,\n    getSelectedComponent,\n    getComponentById,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    saveToHistory,\n    copyComponent,\n    pasteComponent,\n    clearPage,\n    exportPage,\n    importPage,\n    togglePreviewMode,\n    setActiveBreakpoint,\n    toggleGrid,\n    toggleSnapToGrid,\n  };\n\n  return (\n    <div\n      ref={ref}\n      className={cn(\"glass-dragdrop-provider\", className)}\n      data-glass-component\n      {...props}\n    >\n      <DragDropContext.Provider value={value}>\n        {children}\n      </DragDropContext.Provider>\n    </div>\n  );\n});\n\nDragDropProvider.displayName = \"GlassDragDropProvider\";\n\nexport { DragDropProvider as GlassDragDropProvider };\n\nconst defaultDragDropContext: DragDropContextValue = {\n  pageState: {\n    components: [],\n    history: [[]],\n    historyIndex: 0,\n    previewMode: false,\n    activeBreakpoint: \"desktop\",\n    showGrid: true,\n    snapToGrid: true,\n  },\n  componentLibrary: defaultComponentLibrary,\n  dragDropState: {\n    isDragging: false,\n    draggedType: null,\n  },\n  onDragStart: () => {},\n  onDragEnd: () => {},\n  onDragOver: () => {},\n  onDrop: () => {},\n  addComponent: () => {},\n  updateComponent: () => {},\n  deleteComponent: () => {},\n  duplicateComponent: () => {},\n  moveComponent: () => {},\n  selectComponent: () => {},\n  getSelectedComponent: () => undefined,\n  getComponentById: () => undefined,\n  undo: () => {},\n  redo: () => {},\n  canUndo: () => false,\n  canRedo: () => false,\n  saveToHistory: () => {},\n  copyComponent: () => {},\n  pasteComponent: () => {},\n  clearPage: () => {},\n  exportPage: () => ({\n    components: [],\n    timestamp: new Date(0).toISOString(),\n    version: \"standalone\",\n  }),\n  importPage: () => {},\n  togglePreviewMode: () => {},\n  setActiveBreakpoint: () => {},\n  toggleGrid: () => {},\n  toggleSnapToGrid: () => {},\n};\n\nexport const useDragDrop = () => {\n  const context = useContext(DragDropContext);\n  return context ?? defaultDragDropContext;\n};\n", "\"use client\";\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  DragDropProvider,\n  PageBuilderState,\n  PageExportData,\n  useDragDrop,\n} from \"./GlassDragDropProvider\";\nimport { GlassComponentPalette } from \"./GlassComponentPalette\";\nimport { GlassCanvas } from \"./GlassCanvas\";\nimport { GlassPropertyPanel } from \"./GlassPropertyPanel\";\nimport { GlassPageStructure } from \"./GlassPageStructure\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface PageBuilderProps {\n  className?: string;\n  initialData?: PageBuilderInitialData;\n  onSave?: (data: PageExportData) => void;\n  onPreview?: (data: PageExportData) => void;\n  onPublish?: (data: PageExportData) => void;\n  \"data-testid\"?: string;\n}\n\nexport interface PageBuilderInitialComponent {\n  id: string;\n  type: string;\n  props?: Record<string, unknown>;\n  children?: PageBuilderInitialComponent[];\n  parent?: string;\n  order?: number;\n  locked?: boolean;\n}\n\nexport interface PageBuilderInitialData\n  extends Omit<Partial<PageExportData>, \"components\"> {\n  components?: PageBuilderInitialComponent[];\n}\n\ntype BuilderBreakpoint = PageBuilderState[\"activeBreakpoint\"];\n\ninterface BreakpointOption {\n  key: BuilderBreakpoint;\n  icon: string;\n  label: string;\n}\n\nconst breakpointOptions: BreakpointOption[] = [\n  { key: \"desktop\", icon: \"\uD83D\uDDA5\uFE0F\", label: \"Desktop\" },\n  { key: \"tablet\", icon: \"\uD83D\uDCF1\", label: \"Tablet\" },\n  { key: \"mobile\", icon: \"\uD83D\uDCF1\", label: \"Mobile\" },\n];\n\nconst Toolbar: React.FC = () => {\n  const {\n    pageState,\n    undo,\n    redo,\n    canUndo,\n    canRedo,\n    togglePreviewMode,\n    setActiveBreakpoint,\n    toggleGrid,\n    toggleSnapToGrid,\n    clearPage,\n    exportPage,\n    importPage,\n  } = useDragDrop();\n\n  const handleSave = useCallback(() => {\n    const data = exportPage();\n    localStorage.setItem(\"glass-page-builder-autosave\", JSON.stringify(data));\n    // You could also call an onSave prop here\n  }, [exportPage]);\n\n  const handleLoad = useCallback(() => {\n    const saved = localStorage.getItem(\"glass-page-builder-autosave\");\n    if (saved) {\n      try {\n        const data = JSON.parse(saved);\n        importPage(data);\n      } catch {\n        // Ignore invalid saved page data.\n      }\n    }\n  }, [importPage]);\n\n  // Auto-save every 30 seconds\n  useEffect(() => {\n    const interval = setInterval(() => {\n      if (pageState.components.length > 0) {\n        handleSave();\n      }\n    }, ANIMATION.DURATION.slower * 42);\n\n    return () => clearInterval(interval);\n  }, [pageState.components.length, handleSave]);\n\n  return (\n    <div\n      data-glass-component\n      className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-surface-subtle glass-border-b glass-border-subtle\"\n    >\n      {/* Left Side - Main Actions */}\n      <div className=\"glass-flex glass-items-center glass-gap-4\">\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <h1 className=\"glass-text-xl glass-font-bold glass-text-secondary\">\n            Page Builder\n          </h1>\n          <span className=\"glass-text-xs glass-text-secondary glass-surface-subtle glass-px-2 glass-py-1 glass-radius\">\n            v1.0\n          </span>\n        </div>\n\n        <div className=\"glass-w-px glass-h-6 glass-surface-subtle\" />\n\n        {/* File Actions */}\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <button\n            onClick={clearPage}\n            className=\"glass-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2 glass-text-sm glass-text-secondary hover:glass-surface-subtle glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <span>\uD83D\uDDD1\uFE0F</span>\n            New\n          </button>\n          <button\n            onClick={handleSave}\n            className=\"glass-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2 glass-text-sm glass-text-secondary hover:glass-surface-subtle glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <span>\uD83D\uDCBE</span>\n            Save\n          </button>\n          <button\n            onClick={handleLoad}\n            className=\"glass-flex glass-items-center glass-gap-2 glass-px-3 glass-py-2 glass-text-sm glass-text-secondary hover:glass-surface-subtle glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            <span>\uD83D\uDCC1</span>\n            Load\n          </button>\n        </div>\n\n        <div className=\"glass-w-px glass-h-6 glass-surface-subtle\" />\n\n        {/* Undo/Redo */}\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          <button\n            onClick={undo}\n            disabled={!canUndo()}\n            className={cn(\n              \"p-2 rounded-md transition-colors\",\n              canUndo()\n                ? \"glass-text-secondary hover:bg-white/10 hover:glass-text-primary\"\n                : \"glass-text-disabled cursor-not-allowed\"\n            )}\n            title=\"Undo (Ctrl+Z)\"\n          >\n            \u21B6\n          </button>\n          <button\n            onClick={redo}\n            disabled={!canRedo()}\n            className={cn(\n              \"p-2 rounded-md transition-colors\",\n              canRedo()\n                ? \"glass-text-secondary hover:bg-white/10 hover:glass-text-primary\"\n                : \"glass-text-disabled cursor-not-allowed\"\n            )}\n            title=\"Redo (Ctrl+Y)\"\n          >\n            \u21B7\n          </button>\n        </div>\n      </div>\n\n      {/* Center - Breakpoint Controls */}\n      <div className=\"glass-flex glass-items-center glass-gap-2 glass-surface-subtle glass-radius-lg glass-p-1\">\n        {breakpointOptions.map((breakpoint) => (\n          <button\n            key={breakpoint.key}\n            onClick={() => setActiveBreakpoint(breakpoint.key)}\n            className={cn(\n              \"flex items-center gap-2 px-3 py-2 text-sm rounded-md transition-colors\",\n              pageState.activeBreakpoint === breakpoint.key\n                ? \"bg-white/15 glass-text-primary shadow-sm\"\n                : \"glass-text-secondary hover:glass-text-primary\"\n            )}\n            title={breakpoint.label}\n          >\n            <span>{breakpoint.icon}</span>\n            {breakpoint.label}\n          </button>\n        ))}\n      </div>\n\n      {/* Right Side - View Options & Actions */}\n      <div className=\"glass-flex glass-items-center glass-gap-4\">\n        {/* View Options */}\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <button\n            onClick={toggleGrid}\n            className={cn(\n              \"flex items-center gap-2 px-3 py-2 text-sm rounded-md transition-colors\",\n              pageState.showGrid\n                ? \"bg-blue-500/20 text-blue-200\"\n                : \"glass-text-secondary hover:bg-white/10\"\n            )}\n          >\n            <span>\u229E</span>\n            Grid\n          </button>\n          <button\n            onClick={toggleSnapToGrid}\n            className={cn(\n              \"flex items-center gap-2 px-3 py-2 text-sm rounded-md transition-colors\",\n              pageState.snapToGrid\n                ? \"bg-blue-500/20 text-blue-200\"\n                : \"glass-text-secondary hover:bg-white/10\"\n            )}\n          >\n            <span>\uD83E\uDDF2</span>\n            Snap\n          </button>\n        </div>\n\n        <div className=\"glass-w-px glass-h-6 glass-surface-subtle\" />\n\n        {/* Preview & Publish */}\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <button\n            onClick={togglePreviewMode}\n            className={cn(\n              \"flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-md transition-colors\",\n              pageState.previewMode\n                ? \"bg-green-600 text-white hover:bg-green-700\"\n                : \"bg-white/10 glass-text-secondary hover:bg-white/15\"\n            )}\n          >\n            <span>{pageState.previewMode ? \"\uD83D\uDC41\uFE0F\" : \"\u270F\uFE0F\"}</span>\n            {pageState.previewMode ? \"Exit Preview\" : \"Preview\"}\n          </button>\n          <button\n            onClick={() => {\n              exportPage();\n              alert(\"Page published! (Demo)\");\n            }}\n            className=\"glass-flex glass-items-center glass-gap-2 glass-px-4 glass-py-2 glass-text-sm glass-font-medium glass-surface-blue glass-text-primary hover:glass-surface-blue glass-radius-md glass-transition-colors\"\n          >\n            <span>\uD83D\uDE80</span>\n            Publish\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst PageBuilderCore: React.FC<PageBuilderProps> = ({\n  className,\n  initialData,\n  onSave,\n  onPreview,\n  onPublish,\n  \"data-testid\": dataTestId,\n}) => {\n  const { importPage } = useDragDrop();\n\n  const [leftPanelCollapsed, setLeftPanelCollapsed] = useState(false);\n  const [rightPanelCollapsed, setRightPanelCollapsed] = useState(false);\n  const [activeLeftPanel, setActiveLeftPanel] = useState<\n    \"components\" | \"structure\"\n  >(\"components\");\n\n  // Load initial data\n  useEffect(() => {\n    if (initialData) {\n      importPage(initialData as Partial<PageExportData>);\n    } else {\n      // Try to load from localStorage\n      const saved = localStorage.getItem(\"glass-page-builder-autosave\");\n      if (saved) {\n        try {\n          const data = JSON.parse(saved);\n          importPage(data);\n        } catch {\n          // Ignore invalid saved page data.\n        }\n      }\n    }\n  }, [initialData, importPage]);\n\n  // Keyboard shortcuts\n  useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if ((e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey) {\n        switch (e.key) {\n          case \"z\":\n            e.preventDefault();\n            // undo() would be called here if we had access to it\n            break;\n          case \"y\":\n            e.preventDefault();\n            // redo() would be called here if we had access to it\n            break;\n          case \"s\":\n            e.preventDefault();\n            if (onSave) {\n              // Call onSave prop\n            }\n            break;\n          case \"p\":\n            e.preventDefault();\n            if (onPreview) {\n              // Call onPreview prop\n            }\n            break;\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => document.removeEventListener(\"keydown\", handleKeyDown);\n  }, [onSave, onPreview]);\n\n  return (\n    <div\n      className={cn(\n        \"h-screen flex flex-col overflow-auto glass-surface-subtle\",\n        className\n      )}\n      data-testid={dataTestId}\n    >\n      {/* Toolbar */}\n      <Toolbar />\n\n      {/* Main Content */}\n      <div className=\"glass-flex-1 glass-flex glass-overflow-auto\">\n        {/* Left Panels */}\n        <div className=\"glass-flex\">\n          {/* Left Panel Tabs */}\n          {!leftPanelCollapsed && (\n            <div className=\"glass-w-12 glass-surface-subtle glass-border-r glass-border-subtle glass-flex glass-flex-col\">\n              <button\n                onClick={() => setActiveLeftPanel(\"components\")}\n                className={cn(\n                  \"flex flex-col items-center gap-1 p-3 text-xs transition-colors\",\n                  activeLeftPanel === \"components\"\n                    ? \"bg-blue-500/20 text-blue-200\"\n                    : \"glass-text-secondary hover:bg-white/10\"\n                )}\n                title=\"Components\"\n              >\n                <span className=\"glass-text-lg\">\uD83D\uDCE6</span>\n                Comp\n              </button>\n              <button\n                onClick={() => setActiveLeftPanel(\"structure\")}\n                className={cn(\n                  \"flex flex-col items-center gap-1 p-3 text-xs transition-colors\",\n                  activeLeftPanel === \"structure\"\n                    ? \"bg-blue-500/20 text-blue-200\"\n                    : \"glass-text-secondary hover:bg-white/10\"\n                )}\n                title=\"Structure\"\n              >\n                <span className=\"glass-text-lg\">\uD83C\uDF33</span>\n                Tree\n              </button>\n            </div>\n          )}\n\n          {/* Active Left Panel */}\n          <div className=\"glass-border-r glass-border-subtle\">\n            {activeLeftPanel === \"components\" ? (\n              <GlassComponentPalette\n                collapsed={leftPanelCollapsed}\n                onToggleCollapse={() =>\n                  setLeftPanelCollapsed(!leftPanelCollapsed)\n                }\n              />\n            ) : (\n              <GlassPageStructure\n                collapsed={leftPanelCollapsed}\n                onToggleCollapse={() =>\n                  setLeftPanelCollapsed(!leftPanelCollapsed)\n                }\n              />\n            )}\n          </div>\n        </div>\n\n        {/* Canvas */}\n        <GlassCanvas />\n\n        {/* Right Panel - Properties */}\n        <div className=\"glass-border-l glass-border-subtle\">\n          <GlassPropertyPanel\n            collapsed={rightPanelCollapsed}\n            onToggleCollapse={() =>\n              setRightPanelCollapsed(!rightPanelCollapsed)\n            }\n          />\n        </div>\n      </div>\n\n      {/* Status Bar */}\n      <div className=\"glass-h-6 glass-surface-primary glass-text-secondary glass-text-xs glass-flex glass-items-center glass-justify-between glass-px-4\">\n        <div className=\"glass-flex glass-items-center glass-gap-4\">\n          <span>\uD83D\uDFE2 Ready</span>\n          <span>Auto-save: ON</span>\n        </div>\n        <div className=\"glass-flex glass-items-center glass-gap-4\">\n          <span>Zoom: 100%</span>\n          <span>Grid: {`${false ? \"ON\" : \"OFF\"}`}</span>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport const GlassPageBuilder: React.FC<PageBuilderProps> = (props) => {\n  return (\n    <DragDropProvider>\n      <PageBuilderCore {...props} />\n    </DragDropProvider>\n  );\n};\n", "\"use client\";\nimport React, { useState } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useDragDrop, ComponentDefinition } from \"./GlassDragDropProvider\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ninterface ComponentPaletteProps {\n  className?: string;\n  \"data-testid\"?: string;\n  collapsed?: boolean;\n  onToggleCollapse?: () => void;\n}\n\nconst CategoryIcon: React.FC<{ category: ComponentDefinition[\"category\"] }> = ({\n  category,\n}) => {\n  const icons = {\n    layout: \"\uD83C\uDFD7\uFE0F\",\n    content: \"\uD83D\uDCDD\",\n    media: \"\uD83C\uDFAC\",\n    interactive: \"\uD83C\uDFAF\",\n    advanced: \"\u26A1\",\n  };\n\n  return <span className=\"glass-text-lg\">{icons[category]}</span>;\n};\n\nconst ComponentItem: React.FC<{\n  component: ComponentDefinition;\n  isDragging?: boolean;\n}> = ({ component, isDragging }) => {\n  const { onDragStart } = useDragDrop();\n\n  const handleDragStart = (e: React.DragEvent) => {\n    e.dataTransfer.effectAllowed = \"copy\";\n    onDragStart(component, \"component\");\n  };\n\n  const handleMouseDown = () => {\n    onDragStart(component, \"component\");\n  };\n\n  return (\n    <div\n      data-glass-component\n      draggable\n      onDragStart={handleDragStart}\n      onMouseDown={handleMouseDown}\n      className={cn(\n        \"flex items-center gap-3 p-3 rounded-lg border border-white/15 cursor-grab\",\n        \"hover:border-blue-400/50 hover:bg-blue-500/10 transition-colors\",\n        \"glass-active-cursor-grabbing active:scale-95\",\n        isDragging && \"opacity-50 scale-95\"\n      )}\n      title={`Drag to add ${component.name}`}\n    >\n      <div className=\"glass-text-2xl\">{component.icon}</div>\n      <div className=\"glass-flex-1 glass-min-w-0\">\n        <div className=\"glass-text-sm glass-font-medium glass-text-secondary glass-truncate\">\n          {component.name}\n        </div>\n        <div className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n          {component.category}\n        </div>\n      </div>\n      <div className=\"glass-text-xs glass-text-secondary\">\u22EF</div>\n    </div>\n  );\n};\n\nconst CategorySection: React.FC<{\n  category: ComponentDefinition[\"category\"];\n  components: ComponentDefinition[];\n  isExpanded: boolean;\n  onToggle: () => void;\n}> = ({ category, components, isExpanded, onToggle }) => {\n  const categoryNames = {\n    layout: \"Layout\",\n    content: \"Content\",\n    media: \"Media\",\n    interactive: \"Interactive\",\n    advanced: \"Advanced\",\n  };\n\n  return (\n    <div className=\"glass-mb-4\">\n      <button\n        onClick={onToggle}\n        className=\"glass-flex glass-items-center glass-justify-between glass-w-full glass-p-2 glass-radius-lg hover:glass-surface-subtle glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <CategoryIcon category={category} />\n          <span className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n            {categoryNames[category]}\n          </span>\n          <span className=\"glass-text-xs glass-text-secondary\">\n            ({components.length})\n          </span>\n        </div>\n        <div\n          className={cn(\n            \"glass-text-tertiary transition-transform\",\n            isExpanded ? \"rotate-90\" : \"rotate-0\"\n          )}\n        >\n          \u25B6\n        </div>\n      </button>\n\n      {isExpanded && (\n        <div className=\"glass-mt-2 glass-space-y-2 glass-pl-4\">\n          {components.map((component: any) => (\n            <ComponentItem key={component.id} component={component} />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport const GlassComponentPalette: React.FC<ComponentPaletteProps> = ({\n  className,\n  \"data-testid\": testId,\n  collapsed = false,\n  onToggleCollapse,\n}) => {\n  const { componentLibrary, dragDropState } = useDragDrop();\n  const [expandedCategories, setExpandedCategories] = useState<Set<string>>(\n    new Set([\"layout\", \"content\"])\n  );\n  const [searchQuery, setSearchQuery] = useState(\"\");\n\n  const toggleCategory = (category: string) => {\n    setExpandedCategories((prev: Set<string>) => {\n      const newSet = new Set(prev);\n      if (newSet.has(category)) {\n        newSet.delete(category);\n      } else {\n        newSet.add(category);\n      }\n      return newSet;\n    });\n  };\n\n  // Group components by category\n  const componentsByCategory = componentLibrary.reduce(\n    (acc, component) => {\n      if (!acc[component.category]) {\n        acc[component.category] = [];\n      }\n      acc[component.category].push(component);\n      return acc;\n    },\n    {} as Record<string, ComponentDefinition[]>\n  );\n\n  // Filter components by search query\n  const filteredComponents = searchQuery\n    ? componentLibrary.filter(\n        (component: any) =>\n          component.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n          component.type.toLowerCase().includes(searchQuery.toLowerCase())\n      )\n    : null;\n\n  if (collapsed) {\n    return (\n      <div className={cn(\"w-12\", className)} data-testid={testId}>\n        <Glass className=\"glass-h-full glass-contrast-guard\">\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-flex glass-items-center glass-justify-center glass-w-full glass-h-12 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Expand Component Palette\"\n          >\n            <div className=\"glass-text-lg\">\uD83D\uDCE6</div>\n          </button>\n        </Glass>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"w-80 h-full flex flex-col\", className)}\n      data-testid={testId}\n      role=\"complementary\"\n      aria-label=\"Component palette\"\n    >\n      <Glass className=\"glass-h-full glass-flex glass-flex-col glass-contrast-guard\">\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-subtle\">\n          <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n            Components\n          </h2>\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-p-2 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Collapse Palette\"\n          >\n            \u25C0\n          </button>\n        </div>\n\n        {/* Search */}\n        <div className=\"glass-p-4 glass-border-b glass-border-subtle\">\n          <div className=\"glass-relative\">\n            <input\n              type=\"text\"\n              placeholder=\"Search components...\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"glass-w-full glass-px-3 glass-py-2 glass-pl-10 glass-text-sm glass-border glass-border-subtle glass-radius-lg glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n            />\n            <div className=\"glass-absolute glass-left-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-text-secondary\">\n              \uD83D\uDD0D\n            </div>\n            {searchQuery && (\n              <button\n                onClick={() => setSearchQuery(\"\")}\n                className=\"glass-absolute glass-right-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target\"\n              >\n                \u2715\n              </button>\n            )}\n          </div>\n        </div>\n\n        {/* Components */}\n        <div className=\"glass-flex-1 glass-overflow-y-auto glass-p-4\">\n          {searchQuery && filteredComponents ? (\n            // Search Results\n            <div className=\"glass-space-y-2\">\n              <div className=\"glass-text-sm glass-text-secondary glass-mb-3\">\n                {filteredComponents.length} components found\n              </div>\n              {filteredComponents.map((component: any) => (\n                <ComponentItem\n                  key={component.id}\n                  component={component}\n                  isDragging={dragDropState.draggedItem?.id === component.id}\n                />\n              ))}\n              {filteredComponents.length === 0 && (\n                <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n                  <div className=\"glass-text-2xl glass-mb-2\">\uD83D\uDD0D</div>\n                  <p>No components found</p>\n                  <p className=\"glass-text-xs\">Try a different search term</p>\n                </div>\n              )}\n            </div>\n          ) : (\n            // Categories\n            <div>\n              {Object.entries(componentsByCategory).map(\n                ([category, components]) => (\n                  <CategorySection\n                    key={category}\n                    category={category as ComponentDefinition[\"category\"]}\n                    components={components}\n                    isExpanded={expandedCategories.has(category)}\n                    onToggle={() => toggleCategory(category)}\n                  />\n                )\n              )}\n            </div>\n          )}\n        </div>\n\n        {/* Footer */}\n        <div className=\"glass-p-4 glass-border-t glass-border-subtle glass-surface-subtle\">\n          <div className=\"glass-text-xs glass-text-secondary glass-text-center\">\n            \uD83D\uDCA1 Drag components onto the canvas to add them\n          </div>\n        </div>\n      </Glass>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useRef, useCallback, useState } from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  useDragDrop,\n  PageComponent,\n  ComponentPropValue,\n} from \"./GlassDragDropProvider\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\ninterface CanvasProps {\n  className?: string;\n}\n\ninterface DropZoneProps {\n  targetId?: string;\n  position: \"before\" | \"after\" | \"inside\";\n  isActive?: boolean;\n  onDrop: (targetId?: string, position?: \"before\" | \"after\" | \"inside\") => void;\n}\n\nconst toStringProp = (value: ComponentPropValue): string | undefined => {\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\") return String(value);\n  return undefined;\n};\n\nconst toBooleanProp = (value: ComponentPropValue): boolean | undefined =>\n  typeof value === \"boolean\" ? value : undefined;\n\nconst headingTags = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"] as const;\ntype HeadingTag = (typeof headingTags)[number];\n\nconst toHeadingTag = (value: ComponentPropValue): HeadingTag => {\n  const tag = toStringProp(value);\n  return headingTags.includes(tag as HeadingTag) ? (tag as HeadingTag) : \"h2\";\n};\n\nconst DropZone: React.FC<DropZoneProps> = ({\n  targetId,\n  position,\n  isActive,\n  onDrop,\n}) => {\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault();\n    e.dataTransfer.dropEffect = \"copy\";\n  };\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault();\n    onDrop(targetId, position);\n  };\n\n  return (\n    <div\n      data-glass-component\n      onDragOver={handleDragOver}\n      onDrop={handleDrop}\n      className={cn(\n        `transition-all duration-[${ANIMATION.DURATION.fast}ms]`,\n        position === \"inside\"\n          ? \"absolute inset-0 rounded-lg\"\n          : \"h-2 rounded-full my-1\",\n        isActive\n          ? \"bg-blue-500 bg-opacity-20 border-2 border-blue-500 border-dashed\"\n          : \"bg-transparent hover:bg-blue-500/15 border-2 border-transparent\"\n      )}\n    />\n  );\n};\n\nconst ComponentRenderer: React.FC<{\n  component: PageComponent;\n  isSelected?: boolean;\n  onSelect?: (id: string) => void;\n}> = ({ component, isSelected, onSelect }) => {\n  const { updateComponent, dragDropState, onDragStart } = useDragDrop();\n  const [isEditing, setIsEditing] = useState<string | null>(null);\n\n  const handleClick = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    onSelect?.(component.id);\n  };\n\n  const handleDoubleClick = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (component.type === \"text\" || component.type === \"heading\") {\n      setIsEditing(\"content\");\n    }\n  };\n\n  const handleInlineEdit = (prop: string, value: ComponentPropValue) => {\n    updateComponent(component.id, { [prop]: value });\n    setIsEditing(null);\n  };\n\n  const handleDragStart = (e: React.DragEvent) => {\n    e.dataTransfer.effectAllowed = \"move\";\n    onDragStart(component, \"element\");\n  };\n\n  const renderComponent = () => {\n    const baseStyle: React.CSSProperties = {\n      ...component.props,\n    };\n\n    switch (component.type) {\n      case \"container\":\n        return (\n          <div\n            style={{\n              ...baseStyle,\n              display: component.props.display || \"block\",\n              padding: component.props.padding,\n              margin: component.props.margin,\n              backgroundColor: component.props.backgroundColor,\n              borderRadius: component.props.borderRadius,\n              maxWidth: component.props.maxWidth,\n              minHeight: component.children.length === 0 ? \"100px\" : \"auto\",\n            }}\n            className={cn(\n              \"glass-relative\",\n              component.children.length === 0 &&\n                \"glass-border glass-border-2 glass-border-dashed glass-flex glass-items-center glass-justify-center\"\n            )}\n          >\n            {component.children.length === 0 ? (\n              <span className=\"glass-text-secondary glass-text-sm\">\n                Drop components here\n              </span>\n            ) : (\n              component.children.map((child) => (\n                <ComponentRenderer\n                  key={child.id}\n                  component={child}\n                  isSelected={isSelected}\n                  onSelect={onSelect}\n                />\n              ))\n            )}\n          </div>\n        );\n\n      case \"row\":\n        return (\n          <div\n            style={{\n              ...baseStyle,\n              display: \"flex\",\n              gap: component.props.gap,\n              justifyContent: component.props.justifyContent,\n              alignItems: component.props.alignItems,\n              flexWrap: component.props.wrap as React.CSSProperties[\"flexWrap\"],\n              padding: component.props.padding,\n              minHeight: component.children.length === 0 ? \"80px\" : \"auto\",\n            }}\n            className={cn(\n              \"glass-relative\",\n              component.children.length === 0 &&\n                \"glass-border glass-border-2 glass-border-dashed glass-flex glass-items-center glass-justify-center\"\n            )}\n          >\n            {component.children.length === 0 ? (\n              <span className=\"glass-text-secondary glass-text-sm\">\n                Add columns here\n              </span>\n            ) : (\n              component.children.map((child) => (\n                <ComponentRenderer\n                  key={child.id}\n                  component={child}\n                  isSelected={isSelected}\n                  onSelect={onSelect}\n                />\n              ))\n            )}\n          </div>\n        );\n\n      case \"column\":\n        return (\n          <div\n            style={{\n              ...baseStyle,\n              display: \"flex\",\n              flexDirection: \"column\",\n              flex: component.props.flex,\n              padding: component.props.padding,\n              gap: component.props.gap,\n              alignItems: component.props.alignItems,\n              minHeight: component.children.length === 0 ? \"120px\" : \"auto\",\n            }}\n            className={cn(\n              \"glass-relative\",\n              component.children.length === 0 &&\n                \"glass-border glass-border-2 glass-border-dashed glass-flex glass-items-center glass-justify-center\"\n            )}\n          >\n            {component.children.length === 0 ? (\n              <span className=\"glass-text-secondary glass-text-sm\">\n                Column content\n              </span>\n            ) : (\n              component.children.map((child) => (\n                <ComponentRenderer\n                  key={child.id}\n                  component={child}\n                  isSelected={isSelected}\n                  onSelect={onSelect}\n                />\n              ))\n            )}\n          </div>\n        );\n\n      case \"text\":\n        return (\n          <div\n            style={{\n              ...baseStyle,\n              fontSize: component.props.fontSize,\n              fontWeight: component.props.fontWeight,\n              color: component.props.color,\n              textAlign: component.props.textAlign,\n              lineHeight: component.props.lineHeight,\n              fontFamily: component.props.fontFamily,\n            }}\n          >\n            {isEditing === \"content\" ? (\n              <input\n                type=\"text\"\n                value={toStringProp(component.props.content) ?? \"\"}\n                onChange={(e) => handleInlineEdit(\"content\", e.target.value)}\n                onBlur={() => setIsEditing(null)}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\") setIsEditing(null);\n                  if (e.key === \"Escape\") setIsEditing(null);\n                }}\n                autoFocus\n                className=\"glass-bg-transparent glass-border-none glass-outline-none glass-w-full\"\n              />\n            ) : (\n              component.props.content\n            )}\n          </div>\n        );\n\n      case \"heading\":\n        const Tag = toHeadingTag(component.props.level);\n        return (\n          <Tag\n            style={{\n              ...baseStyle,\n              fontSize: component.props.fontSize,\n              fontWeight: component.props.fontWeight,\n              color: component.props.color,\n              textAlign: component.props.textAlign,\n              margin: component.props.margin,\n            }}\n          >\n            {isEditing === \"content\" ? (\n              <input\n                type=\"text\"\n                value={toStringProp(component.props.content) ?? \"\"}\n                onChange={(e) => handleInlineEdit(\"content\", e.target.value)}\n                onBlur={() => setIsEditing(null)}\n                onKeyDown={(e) => {\n                  if (e.key === \"Enter\") setIsEditing(null);\n                  if (e.key === \"Escape\") setIsEditing(null);\n                }}\n                autoFocus\n                className=\"glass-bg-transparent glass-border-none glass-outline-none glass-w-full\"\n              />\n            ) : (\n              component.props.content\n            )}\n          </Tag>\n        );\n\n      case \"image\":\n        return (\n          <img\n            src={toStringProp(component.props.src)}\n            alt={toStringProp(component.props.alt) ?? \"\"}\n            style={{\n              ...baseStyle,\n              width: component.props.width,\n              height: component.props.height,\n              borderRadius: component.props.borderRadius,\n              objectFit: component.props.objectFit,\n            }}\n          />\n        );\n\n      case \"button\":\n        const href = toStringProp(component.props.href);\n        const disabled = toBooleanProp(component.props.disabled);\n        const onClickScript = toStringProp(component.props.onClick);\n        const ButtonTag = href ? \"a\" : \"button\";\n        return (\n          <ButtonTag\n            href={href || undefined}\n            disabled={disabled}\n            onClick={\n              href\n                ? undefined\n                : () => {\n                    if (onClickScript) {\n                      try {\n                        // eslint-disable-next-line no-new-func\n                        new Function(onClickScript)();\n                      } catch {\n                        // Ignore invalid custom button scripts.\n                      }\n                    }\n                  }\n            }\n            className={cn(\n              \"glass-inline-flex glass-items-center glass-justify-center glass-font-medium glass-radius-lg\",\n              // Size variants\n              component.props.size === \"small\" &&\n                \"glass-px-3 glass-py-1-5 glass-text-sm\",\n              component.props.size === \"medium\" &&\n                \"glass-px-4 glass-py-2 glass-text-base\",\n              component.props.size === \"large\" &&\n                \"glass-px-6 glass-py-3 glass-text-lg\",\n              // Variant styles\n              component.props.variant === \"primary\" &&\n                \"glass-surface-primary glass-text-primary\",\n              component.props.variant === \"secondary\" &&\n                \"glass-surface-secondary glass-text-primary\",\n              component.props.variant === \"outline\" &&\n                \"glass-border glass-text-secondary\",\n              component.props.variant === \"ghost\" && \"glass-text-secondary\",\n              // Disabled state\n              component.props.disabled &&\n                \"glass-opacity-90 glass-cursor-pointer\"\n            )}\n            style={{ ...baseStyle }}\n          >\n            {component.props.text}\n          </ButtonTag>\n        );\n\n      case \"card\":\n        return (\n          <div\n            style={{\n              ...baseStyle,\n              ...{\n                padding: component.props.padding,\n                borderRadius: component.props.borderRadius,\n                backgroundColor: component.props.backgroundColor,\n                boxShadow: component.props.boxShadow,\n                border: component.props.border,\n                minHeight: component.children.length === 0 ? \"150px\" : \"auto\",\n              },\n            }}\n            className={cn(\n              \"glass-relative\",\n              component.children.length === 0 &&\n                \"glass-border glass-border-2 glass-border-dashed glass-flex glass-items-center glass-justify-center\"\n            )}\n          >\n            {component.children.length === 0 ? (\n              <span className=\"glass-text-secondary glass-text-sm glass-focus glass-touch-target glass-contrast-guard\">\n                Card content goes here\n              </span>\n            ) : (\n              component.children.map((child) => (\n                <ComponentRenderer\n                  key={child.id}\n                  component={child}\n                  isSelected={isSelected}\n                  onSelect={onSelect}\n                />\n              ))\n            )}\n          </div>\n        );\n\n      default:\n        return (\n          <div\n            style={{ ...baseStyle }}\n            className=\"glass-p-4 glass-border glass-border-subtle glass-surface-subtle glass-text-primary glass-contrast-guard\"\n          >\n            Unknown component type: {component.type}\n          </div>\n        );\n    }\n  };\n\n  return (\n    <div\n      draggable\n      onDragStart={handleDragStart}\n      onClick={handleClick}\n      onDoubleClick={handleDoubleClick}\n      className={cn(\n        `relative group transition-all duration-[${ANIMATION.DURATION.fast}ms] glass-focus glass-touch-target`,\n        isSelected && \"ring-2 ring-blue-500 ring-opacity-50\",\n        dragDropState.draggedItem?.id === component.id && \"opacity-50\"\n      )}\n    >\n      {renderComponent()}\n\n      {/* Selection Overlay */}\n      {isSelected && (\n        <div\n          className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-border-2 glass-radius glass-surface-overlay glass-focus glass-touch-target glass-contrast-guard\"\n          data-glass-overlay=\"true\"\n        >\n          <div className=\"glass-absolute glass-top-2 glass-left-0 glass-surface-overlay glass-text-primary glass-px-2 glass-py-1 glass-text-xs glass-radius-t glass-font-medium glass-contrast-guard\">\n            {component.type}\n          </div>\n        </div>\n      )}\n\n      {/* Hover Overlay */}\n      {!isSelected && (\n        <div\n          className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-border-2 glass-border-blue glass-radius glass-surface-subtle glass-bg-opacity-5 glass-contrast-guard\"\n          data-glass-overlay=\"true\"\n        >\n          <div className=\"glass-absolute glass--top-6 glass-left-0 glass-surface-subtle glass-text-primary glass-px-2 glass-py-1 glass-text-xs glass-radius-t glass-font-medium glass-contrast-guard\">\n            {component.type}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport const GlassCanvas: React.FC<\n  CanvasProps & { \"data-testid\"?: string }\n> = ({ className, ...props }) => {\n  const prefersReducedMotion = useReducedMotion();\n  const {\n    pageState,\n    dragDropState,\n    onDrop,\n    selectComponent,\n    getSelectedComponent,\n  } = useDragDrop();\n\n  const canvasRef = useRef<HTMLDivElement>(null);\n  const [dragOverTarget, setDragOverTarget] = useState<{\n    id?: string;\n    position?: \"before\" | \"after\" | \"inside\";\n  }>({});\n\n  const handleCanvasClick = () => {\n    selectComponent(undefined);\n  };\n\n  const handleDragOver = (e: React.DragEvent) => {\n    e.preventDefault();\n    e.dataTransfer.dropEffect =\n      dragDropState.draggedType === \"component\" ? \"copy\" : \"move\";\n  };\n\n  const handleDrop = (e: React.DragEvent) => {\n    e.preventDefault();\n    onDrop();\n    setDragOverTarget({});\n  };\n\n  const breakpointStyles = {\n    desktop: { maxWidth: \"none\", width: \"100%\" },\n    tablet: { maxWidth: \"768px\", width: \"768px\" },\n    mobile: { maxWidth: \"375px\", width: \"375px\" },\n  };\n\n  const selectedComponent = getSelectedComponent();\n\n  return (\n    <div\n      className={cn(\"flex-1 h-full flex flex-col overflow-hidden\", className)}\n      data-testid={props[\"data-testid\"]}\n      role=\"main\"\n      aria-label=\"Page canvas for drag and drop editing\"\n    >\n      <Glass className=\"glass-flex-1 glass-flex glass-flex-col glass-contrast-guard\">\n        {/* Canvas Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-subtle\">\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <span className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n              Canvas\n            </span>\n            <span className=\"glass-text-xs glass-text-secondary glass-capitalize\">\n              ({pageState.activeBreakpoint})\n            </span>\n            {pageState.previewMode && (\n              <span className=\"glass-px-2 glass-py-1 glass-text-xs glass-surface-subtle glass-text-primary glass-radius glass-contrast-guard\">\n                Preview Mode\n              </span>\n            )}\n          </div>\n\n          <div className=\"glass-text-xs glass-text-secondary\">\n            {pageState.components.length} components\n          </div>\n        </div>\n\n        {/* Canvas Content */}\n        <div\n          className=\"glass-flex-1 glass-overflow-auto glass-p-6 glass-surface-subtle glass-contrast-guard\"\n          style={{\n            backgroundImage: pageState.showGrid\n              ? \"radial-gradient(circle, var(--glass-gray-200) 1px, transparent 1px)\"\n              : \"none\",\n            backgroundSize: pageState.showGrid ? \"20px 20px\" : \"auto\",\n          }}\n        >\n          <div\n            className={`glass-mx-auto glass-surface-subtle glass-min-glass-h-full glass-shadow-sm glass-transition-all glass-duration-[${ANIMATION.DURATION.normal}ms] glass-contrast-guard`}\n            style={{ ...breakpointStyles[pageState.activeBreakpoint] }}\n          >\n            <div\n              ref={canvasRef}\n              onClick={handleCanvasClick}\n              onDragOver={handleDragOver}\n              onDrop={handleDrop}\n              className={cn(\n                `min-h-full relative transition-all duration-[${ANIMATION.DURATION.fast}ms] glass-focus glass-touch-target`,\n                dragDropState.isDragging && \"bg-blue-500/10\"\n              )}\n            >\n              {pageState.components.length === 0 ? (\n                // Empty State\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-min-glass-h-96 glass-p-12 glass-focus glass-touch-target glass-contrast-guard\">\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-6xl glass-mb-4\">\uD83C\uDFA8</div>\n                    <h3 className=\"glass-text-lg glass-font-medium glass-text-secondary glass-mb-2\">\n                      Start Building Your Page\n                    </h3>\n                    <p className=\"glass-text-secondary glass-mb-6 glass-max-w-sm\">\n                      Drag components from the palette on the left to start\n                      building your page.\n                    </p>\n                    <div className=\"glass-space-y-2 glass-text-sm glass-text-secondary\">\n                      <p>\uD83D\uDCA1 Try dragging a Container or Row component first</p>\n                      <p>\uD83D\uDDB1\uFE0F Double-click text elements to edit them inline</p>\n                      <p>\u2328\uFE0F Use Ctrl+Z to undo changes</p>\n                    </div>\n                  </div>\n                </div>\n              ) : (\n                // Render Components\n                <div className=\"glass-p-4 glass-space-y-4\">\n                  {pageState.components\n                    .filter((component) => !component.parent) // Only root components\n                    .map((component) => (\n                      <div key={component.id} className=\"glass-relative\">\n                        <DropZone\n                          position=\"before\"\n                          isActive={\n                            dragOverTarget.id === component.id &&\n                            dragOverTarget.position === \"before\"\n                          }\n                          onDrop={onDrop}\n                        />\n                        <ComponentRenderer\n                          component={component}\n                          isSelected={\n                            pageState.selectedComponent === component.id\n                          }\n                          onSelect={selectComponent}\n                        />\n                        <DropZone\n                          position=\"after\"\n                          isActive={\n                            dragOverTarget.id === component.id &&\n                            dragOverTarget.position === \"after\"\n                          }\n                          onDrop={onDrop}\n                        />\n                      </div>\n                    ))}\n\n                  {/* Final Drop Zone */}\n                  <DropZone\n                    position=\"inside\"\n                    isActive={dragDropState.isDragging && !dragOverTarget.id}\n                    onDrop={onDrop}\n                  />\n                </div>\n              )}\n\n              {/* Global Drop Zone Overlay */}\n              {dragDropState.isDragging && (\n                <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n                  <div className=\"glass-h-full glass-w-full glass-border-4 glass-border-dashed glass-border-blue glass-opacity-50 glass-radius-lg\" />\n                </div>\n              )}\n            </div>\n          </div>\n        </div>\n      </Glass>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState, useCallback } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useDragDrop, ComponentDefinition } from \"./GlassDragDropProvider\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { normalizeColorInputValue } from \"../../utils/colorInput\";\n\ninterface PropertyPanelProps {\n  className?: string;\n  collapsed?: boolean;\n  onToggleCollapse?: () => void;\n  \"data-testid\"?: string;\n}\n\ninterface PropertyInputProps {\n  label: string;\n  type: ComponentDefinition[\"editableProps\"][string][\"type\"];\n  value: any;\n  options?: string[];\n  min?: number;\n  max?: number;\n  step?: number;\n  onChange: (value: any) => void;\n}\n\nconst PropertyInput: React.FC<PropertyInputProps> = ({\n  label,\n  type,\n  value,\n  options,\n  min,\n  max,\n  step,\n  onChange,\n}) => {\n  const renderInput = () => {\n    switch (type) {\n      case \"text\":\n        return (\n          <input\n            data-glass-component\n            type=\"text\"\n            value={value || \"\"}\n            onChange={(e) => onChange(e.target.value)}\n            className=\"glass-w-full glass-px-3 glass-py-2 glass-text-sm glass-border glass-border-subtle glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n          />\n        );\n\n      case \"number\":\n        return (\n          <input\n            type=\"number\"\n            value={value || 0}\n            min={min}\n            max={max}\n            step={step}\n            onChange={(e) => onChange(Number(e.target.value))}\n            className=\"glass-w-full glass-px-3 glass-py-2 glass-text-sm glass-border glass-border-subtle glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n          />\n        );\n\n      case \"range\":\n        return (\n          <div className=\"glass-space-y-2\">\n            <input\n              type=\"range\"\n              value={value || 0}\n              min={min || 0}\n              max={max || 100}\n              step={step || 1}\n              onChange={(e) => onChange(Number(e.target.value))}\n              className=\"glass-w-full\"\n            />\n            <div className=\"glass-text-xs glass-text-secondary glass-text-center\">\n              {value}\n            </div>\n          </div>\n        );\n\n      case \"color\":\n        return (\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <input\n              type=\"color\"\n              value={normalizeColorInputValue(\n                value || \"var(--glass-black)\",\n                \"#000000\"\n              )}\n              onChange={(e) => onChange(e.target.value)}\n              className=\"glass-w-12 glass-h-8 glass-border glass-border-subtle glass-radius glass-cursor-pointer\"\n            />\n            <input\n              type=\"text\"\n              value={value || \"var(--glass-black)\"}\n              onChange={(e) => onChange(e.target.value)}\n              className=\"glass-flex-1 glass-px-3 glass-py-2 glass-text-sm glass-border glass-border-subtle glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n            />\n          </div>\n        );\n\n      case \"boolean\":\n        return (\n          <label className=\"glass-flex glass-items-center glass-cursor-pointer\">\n            <input\n              type=\"checkbox\"\n              checked={value || false}\n              onChange={(e) => onChange(e.target.checked)}\n              className=\"glass-mr-2 glass-w-4 glass-h-4 glass-text-primary glass-border-subtle glass-radius glass-focus-ring-blue-500\"\n            />\n            <span className=\"glass-text-sm glass-text-secondary\">Enabled</span>\n          </label>\n        );\n\n      case \"select\":\n        return (\n          <select\n            value={value || \"\"}\n            onChange={(e) => onChange(e.target.value)}\n            className=\"glass-w-full glass-px-3 glass-py-2 glass-text-sm glass-border glass-border-subtle glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n          >\n            {options?.map((option: any) => (\n              <option key={option} value={option}>\n                {option}\n              </option>\n            ))}\n          </select>\n        );\n\n      case \"image\":\n        return (\n          <div className=\"glass-space-y-2\">\n            <input\n              type=\"url\"\n              value={value || \"\"}\n              onChange={(e) => onChange(e.target.value)}\n              placeholder=\"https://example.com/image.jpg\"\n              className=\"glass-w-full glass-px-3 glass-py-2 glass-text-sm glass-border glass-border-subtle glass-radius-md glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n            />\n            <div className=\"glass-flex glass-gap-2\">\n              <button\n                onClick={() => {\n                  const input = document.createElement(\"input\");\n                  input.type = \"file\";\n                  input.accept = \"image/*\";\n                  input.onchange = (e) => {\n                    const file = (e.target as HTMLInputElement).files?.[0];\n                    if (file) {\n                      const reader = new FileReader();\n                      reader.onload = (e) => onChange(e.target?.result);\n                      reader.readAsDataURL(file);\n                    }\n                  };\n                  input.click();\n                }}\n                className=\"glass-px-3 glass-py-1.5 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius hover:glass-surface-subtle glass-transition-colors\"\n              >\n                Upload\n              </button>\n              <button\n                onClick={() => onChange(\"https://via.placeholder.com/400x300\")}\n                className=\"glass-px-3 glass-py-1.5 glass-text-xs glass-surface-subtle glass-text-secondary glass-radius hover:glass-surface-subtle glass-transition-colors\"\n              >\n                Placeholder\n              </button>\n            </div>\n            {value && (\n              <div className=\"glass-mt-2\">\n                <img\n                  src={value}\n                  alt=\"Preview\"\n                  className=\"glass-w-full glass-h-24 glass-object-cover glass-radius glass-border\"\n                  onError={(e) => {\n                    (e.target as HTMLImageElement).src =\n                      \"https://via.placeholder.com/400x300?text=Invalid+Image\";\n                  }}\n                />\n              </div>\n            )}\n          </div>\n        );\n\n      default:\n        return (\n          <div className=\"glass-text-sm glass-text-secondary glass-italic\">\n            Unsupported input type: {type}\n          </div>\n        );\n    }\n  };\n\n  return (\n    <div className=\"glass-space-y-2\">\n      <label className=\"glass-block glass-text-sm glass-font-medium glass-text-secondary\">\n        {label}\n      </label>\n      {renderInput()}\n    </div>\n  );\n};\n\nconst ActionButton: React.FC<{\n  onClick: () => void;\n  icon: string;\n  label: string;\n  variant?: \"default\" | \"danger\";\n}> = ({ onClick, icon, label, variant = \"default\" }) => (\n  <button\n    onClick={onClick}\n    className={cn(\n      \"flex items-center gap-2 px-3 py-2 text-sm rounded-md transition-colors glass-focus glass-touch-target\",\n      variant === \"default\"\n        ? \"bg-white/10 glass-text-secondary hover:bg-white/15\"\n        : \"bg-red-500/20 text-red-200 hover:bg-red-500/30\"\n    )}\n  >\n    <span>{icon}</span>\n    {label}\n  </button>\n);\n\nexport const GlassPropertyPanel: React.FC<PropertyPanelProps> = ({\n  className,\n  collapsed = false,\n  onToggleCollapse,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    pageState,\n    componentLibrary,\n    getSelectedComponent,\n    updateComponent,\n    duplicateComponent,\n    deleteComponent,\n    copyComponent,\n    pasteComponent,\n  } = useDragDrop();\n\n  const [activeSection, setActiveSection] = useState<\n    \"properties\" | \"styles\" | \"advanced\"\n  >(\"properties\");\n\n  const selectedComponent = getSelectedComponent();\n  const componentDefinition = selectedComponent\n    ? componentLibrary.find((def) => def.type === selectedComponent.type)\n    : null;\n\n  const handlePropertyChange = useCallback(\n    (prop: string, value: any) => {\n      if (selectedComponent) {\n        updateComponent(selectedComponent.id, { [prop]: value });\n      }\n    },\n    [selectedComponent, updateComponent]\n  );\n\n  if (collapsed) {\n    return (\n      <div className={cn(\"w-12\", className)} data-testid={dataTestId}>\n        <Glass className=\"glass-h-full glass-contrast-guard\">\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-flex glass-items-center glass-justify-center glass-w-full glass-h-12 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Expand Property Panel\"\n          >\n            <div className=\"glass-text-lg\">\u2699\uFE0F</div>\n          </button>\n        </Glass>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"w-80 h-full flex flex-col\", className)}\n      data-testid={dataTestId}\n    >\n      <Glass className=\"glass-h-full glass-flex glass-flex-col glass-contrast-guard\">\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-subtle\">\n          <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n            Properties\n          </h2>\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-p-2 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Collapse Panel\"\n          >\n            \u25B6\n          </button>\n        </div>\n\n        {!selectedComponent ? (\n          /* No Selection State */\n          <div className=\"glass-flex-1 glass-flex glass-items-center glass-justify-center glass-p-6\">\n            <div className=\"glass-text-center\">\n              <div className=\"glass-text-4xl glass-mb-4\">\uD83C\uDFAF</div>\n              <h3 className=\"glass-text-lg glass-font-medium glass-text-secondary glass-mb-2\">\n                No Component Selected\n              </h3>\n              <p className=\"glass-text-secondary glass-text-sm\">\n                Click on a component in the canvas to edit its properties.\n              </p>\n            </div>\n          </div>\n        ) : (\n          <div className=\"glass-flex-1 glass-flex glass-flex-col glass-overflow-hidden\">\n            {/* Component Info */}\n            <div className=\"glass-p-4 glass-surface-subtle glass-border-b glass-border-subtle\">\n              <div className=\"glass-flex glass-items-center glass-gap-3\">\n                <span className=\"glass-text-2xl\">\n                  {componentDefinition?.icon || \"\uD83D\uDCE6\"}\n                </span>\n                <div className=\"glass-flex-1 glass-min-w-0\">\n                  <div className=\"glass-text-sm glass-font-medium glass-text-secondary glass-truncate\">\n                    {componentDefinition?.name || selectedComponent.type}\n                  </div>\n                  <div className=\"glass-text-xs glass-text-secondary\">\n                    ID: {selectedComponent.id.split(\"_\").pop()}\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            {/* Action Buttons */}\n            <div className=\"glass-p-4 glass-border-b glass-border-subtle\">\n              <div className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n                <ActionButton\n                  onClick={() => duplicateComponent(selectedComponent.id)}\n                  icon=\"\uD83D\uDCCB\"\n                  label=\"Duplicate\"\n                />\n                <ActionButton\n                  onClick={() => copyComponent(selectedComponent.id)}\n                  icon=\"\uD83D\uDCC4\"\n                  label=\"Copy\"\n                />\n                <ActionButton\n                  onClick={() => pasteComponent(selectedComponent.id)}\n                  icon=\"\uD83D\uDCC1\"\n                  label=\"Paste\"\n                />\n                <ActionButton\n                  onClick={() => deleteComponent(selectedComponent.id)}\n                  icon=\"\uD83D\uDDD1\uFE0F\"\n                  label=\"Delete\"\n                  variant=\"danger\"\n                />\n              </div>\n            </div>\n\n            {/* Section Tabs */}\n            <div className=\"glass-flex glass-border-b glass-border-subtle\">\n              {[\n                { key: \"properties\", label: \"Properties\", icon: \"\u2699\uFE0F\" },\n                { key: \"styles\", label: \"Styles\", icon: \"\uD83C\uDFA8\" },\n                { key: \"advanced\", label: \"Advanced\", icon: \"\uD83D\uDD27\" },\n              ].map((section: any) => (\n                <button\n                  key={section.key}\n                  onClick={() => setActiveSection(section.key as any)}\n                  className={cn(\n                    \"flex-1 flex items-center justify-center gap-1 px-3 py-2 text-sm font-medium transition-colors glass-focus glass-touch-target\",\n                    activeSection === section.key\n                      ? \"text-blue-200 border-b-2 border-blue-400 bg-blue-500/15\"\n                      : \"glass-text-secondary hover:glass-text-primary\"\n                  )}\n                >\n                  <span className=\"glass-text-xs\">{section.icon}</span>\n                  {section.label}\n                </button>\n              ))}\n            </div>\n\n            {/* Properties Content */}\n            <div className=\"glass-flex-1 glass-overflow-y-auto glass-p-4\">\n              {componentDefinition?.editableProps ? (\n                <div className=\"glass-space-y-4\">\n                  {Object.entries(componentDefinition.editableProps)\n                    .filter(([key, config]) => {\n                      // Filter properties based on active section\n                      if (activeSection === \"styles\") {\n                        return [\n                          \"color\",\n                          \"backgroundColor\",\n                          \"fontSize\",\n                          \"fontWeight\",\n                          \"textAlign\",\n                          \"padding\",\n                          \"margin\",\n                          \"borderRadius\",\n                          \"border\",\n                          \"boxShadow\",\n                        ].includes(key);\n                      } else if (activeSection === \"advanced\") {\n                        return [\"onClick\", \"href\", \"className\", \"id\"].includes(\n                          key\n                        );\n                      } else {\n                        // Properties section - show main functional properties\n                        return ![\n                          \"color\",\n                          \"backgroundColor\",\n                          \"fontSize\",\n                          \"fontWeight\",\n                          \"textAlign\",\n                          \"padding\",\n                          \"margin\",\n                          \"borderRadius\",\n                          \"border\",\n                          \"boxShadow\",\n                          \"onClick\",\n                          \"href\",\n                          \"className\",\n                          \"id\",\n                        ].includes(key);\n                      }\n                    })\n                    .map(([key, config]) => (\n                      <PropertyInput\n                        key={key}\n                        label={config.label}\n                        type={config.type}\n                        value={selectedComponent.props[key]}\n                        options={config.options}\n                        min={config.min}\n                        max={config.max}\n                        step={config.step}\n                        onChange={(value) => handlePropertyChange(key, value)}\n                      />\n                    ))}\n\n                  {Object.entries(componentDefinition.editableProps).filter(\n                    ([key]) => {\n                      if (activeSection === \"styles\") {\n                        return [\n                          \"color\",\n                          \"backgroundColor\",\n                          \"fontSize\",\n                          \"fontWeight\",\n                          \"textAlign\",\n                          \"padding\",\n                          \"margin\",\n                          \"borderRadius\",\n                          \"border\",\n                          \"boxShadow\",\n                        ].includes(key);\n                      } else if (activeSection === \"advanced\") {\n                        return [\"onClick\", \"href\", \"className\", \"id\"].includes(\n                          key\n                        );\n                      } else {\n                        return ![\n                          \"color\",\n                          \"backgroundColor\",\n                          \"fontSize\",\n                          \"fontWeight\",\n                          \"textAlign\",\n                          \"padding\",\n                          \"margin\",\n                          \"borderRadius\",\n                          \"border\",\n                          \"boxShadow\",\n                          \"onClick\",\n                          \"href\",\n                          \"className\",\n                          \"id\",\n                        ].includes(key);\n                      }\n                    }\n                  ).length === 0 && (\n                    <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n                      <div className=\"glass-text-2xl glass-mb-2\">\n                        {activeSection === \"styles\"\n                          ? \"\uD83C\uDFA8\"\n                          : activeSection === \"advanced\"\n                            ? \"\uD83D\uDD27\"\n                            : \"\u2699\uFE0F\"}\n                      </div>\n                      <p className=\"glass-text-sm\">\n                        No {activeSection} available for this component\n                      </p>\n                    </div>\n                  )}\n                </div>\n              ) : (\n                <div className=\"glass-text-center glass-py-8 glass-text-secondary\">\n                  <div className=\"glass-text-2xl glass-mb-2\">\u26A0\uFE0F</div>\n                  <p className=\"glass-text-sm\">No editable properties found</p>\n                </div>\n              )}\n            </div>\n\n            {/* Component Stats */}\n            <div className=\"glass-p-4 glass-surface-subtle glass-border-t glass-border-subtle\">\n              <div className=\"glass-text-xs glass-text-secondary glass-space-y-1\">\n                <div className=\"glass-flex glass-justify-between\">\n                  <span>Children:</span>\n                  <span>{selectedComponent.children.length}</span>\n                </div>\n                <div className=\"glass-flex glass-justify-between\">\n                  <span>Parent:</span>\n                  <span>{selectedComponent.parent ? \"Yes\" : \"Root\"}</span>\n                </div>\n                {selectedComponent.locked && (\n                  <div className=\"glass-flex glass-items-center glass-gap-1 glass-text-primary\">\n                    <span>\uD83D\uDD12</span>\n                    <span>Locked</span>\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        )}\n      </Glass>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport {\n  useDragDrop,\n  PageComponent,\n  ComponentDefinition,\n  ComponentPropValue,\n} from \"./GlassDragDropProvider\";\n\ninterface PageStructureProps {\n  className?: string;\n  collapsed?: boolean;\n  onToggleCollapse?: () => void;\n  \"data-testid\"?: string;\n}\n\ninterface TreeItemProps {\n  component: PageComponent;\n  level: number;\n  isSelected?: boolean;\n  onSelect: (id: string) => void;\n  onToggleExpand: (id: string) => void;\n  expandedItems: Set<string>;\n  componentDefinition?: ComponentDefinition;\n}\n\nconst toStringProp = (value: ComponentPropValue): string => {\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\") return String(value);\n  return \"\";\n};\n\nconst TreeItem: React.FC<TreeItemProps> = ({\n  component,\n  level,\n  isSelected,\n  onSelect,\n  onToggleExpand,\n  expandedItems,\n  componentDefinition,\n}) => {\n  const {\n    deleteComponent,\n    duplicateComponent,\n    onDragStart,\n    dragDropState,\n    componentLibrary,\n  } = useDragDrop();\n\n  const [showActions, setShowActions] = useState(false);\n  const isExpanded = expandedItems.has(component.id);\n  const hasChildren = component.children.length > 0;\n\n  const handleDragStart = (e: React.DragEvent) => {\n    e.stopPropagation();\n    onDragStart(component, \"element\");\n  };\n\n  const handleClick = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    onSelect(component.id);\n  };\n\n  const handleToggleExpand = (e: React.MouseEvent) => {\n    e.stopPropagation();\n    if (hasChildren) {\n      onToggleExpand(component.id);\n    }\n  };\n\n  const getComponentIcon = (type: string): string => {\n    const definition = componentLibrary.find((def) => def.type === type);\n    return definition?.icon || \"\uD83D\uDCE6\";\n  };\n\n  return (\n    <div data-glass-component>\n      <div\n        draggable\n        onDragStart={handleDragStart}\n        onClick={handleClick}\n        onMouseEnter={() => setShowActions(true)}\n        onMouseLeave={() => setShowActions(false)}\n        className={cn(\n          \"flex items-center gap-2 py-1 px-2 rounded-md cursor-pointer transition-colors relative group\",\n          isSelected ? \"bg-blue-500/20 text-blue-100\" : \"hover:bg-white/10\",\n          dragDropState.draggedItem?.id === component.id && \"opacity-50\"\n        )}\n        style={{ paddingLeft: `${level * 16 + 8}px` }}\n      >\n        {/* Expand/Collapse Button */}\n        <button\n          onClick={handleToggleExpand}\n          className={cn(\n            \"w-4 h-4 flex items-center justify-center text-xs transition-transform glass-focus glass-touch-target\",\n            hasChildren\n              ? \"glass-text-tertiary hover:glass-text-secondary\"\n              : \"text-transparent\",\n            isExpanded ? \"rotate-90\" : \"rotate-0\"\n          )}\n        >\n          {hasChildren && \"\u25B6\"}\n        </button>\n\n        {/* Component Icon */}\n        <span className=\"glass-text-sm\">\n          {getComponentIcon(component.type)}\n        </span>\n\n        {/* Component Name */}\n        <div className=\"glass-flex-1 glass-min-w-0\">\n          <span className=\"glass-text-sm glass-font-medium glass-truncate\">\n            {componentDefinition?.name || component.type}\n          </span>\n          {toStringProp(component.props.content) && (\n            <span className=\"glass-text-xs glass-text-secondary glass-ml-1 glass-truncate\">\n              \"{toStringProp(component.props.content).substring(0, 20)}\n              {toStringProp(component.props.content).length > 20 ? \"...\" : \"\"}\"\n            </span>\n          )}\n        </div>\n\n        {/* Children Count */}\n        {hasChildren && (\n          <span className=\"glass-text-xs glass-text-secondary glass-surface-subtle glass-px-1.5 glass-py-0.5 glass-radius\">\n            {component.children.length}\n          </span>\n        )}\n\n        {/* Component Status Indicators */}\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          {component.locked && (\n            <span className=\"glass-text-xs glass-text-primary\" title=\"Locked\">\n              \uD83D\uDD12\n            </span>\n          )}\n          {!component.props.visible && (\n            <span className=\"glass-text-xs glass-text-secondary\" title=\"Hidden\">\n              \uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F\n            </span>\n          )}\n        </div>\n\n        {/* Action Buttons */}\n        {showActions && (\n          <div className=\"glass-flex glass-items-center glass-gap-1 glass-ml-2\">\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                duplicateComponent(component.id);\n              }}\n              className=\"glass-w-6 glass-h-6 glass-flex glass-items-center glass-justify-center glass-text-xs glass-text-secondary hover:glass-text-primary hover:glass-surface-subtle glass-radius glass-focus glass-touch-target\"\n              title=\"Duplicate\"\n            >\n              \uD83D\uDCCB\n            </button>\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                deleteComponent(component.id);\n              }}\n              className=\"glass-w-6 glass-h-6 glass-flex glass-items-center glass-justify-center glass-text-xs glass-text-secondary hover:glass-text-primary hover:glass-surface-subtle glass-radius glass-focus glass-touch-target\"\n              title=\"Delete\"\n            >\n              \uD83D\uDDD1\uFE0F\n            </button>\n          </div>\n        )}\n      </div>\n\n      {/* Children */}\n      {hasChildren && isExpanded && (\n        <div>\n          {component.children.map((child) => (\n            <TreeItem\n              key={child.id}\n              component={child}\n              level={level + 1}\n              isSelected={isSelected}\n              onSelect={onSelect}\n              onToggleExpand={onToggleExpand}\n              expandedItems={expandedItems}\n              componentDefinition={componentLibrary.find(\n                (def) => def.type === child.type\n              )}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport const GlassPageStructure: React.FC<PageStructureProps> = ({\n  className,\n  collapsed = false,\n  onToggleCollapse,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    pageState,\n    componentLibrary,\n    selectComponent,\n    getSelectedComponent,\n    clearPage,\n    exportPage,\n    importPage,\n  } = useDragDrop();\n\n  const [expandedItems, setExpandedItems] = useState<Set<string>>(new Set());\n  const [searchQuery, setSearchQuery] = useState(\"\");\n\n  const selectedComponent = getSelectedComponent();\n\n  const toggleExpanded = (id: string) => {\n    setExpandedItems((prev: Set<string>) => {\n      const newSet = new Set(prev);\n      if (newSet.has(id)) {\n        newSet.delete(id);\n      } else {\n        newSet.add(id);\n      }\n      return newSet;\n    });\n  };\n\n  const expandAll = () => {\n    const allIds = new Set<string>();\n    const addIds = (components: PageComponent[]) => {\n      components.forEach((component) => {\n        allIds.add(component.id);\n        addIds(component.children);\n      });\n    };\n    addIds(pageState.components);\n    setExpandedItems(allIds);\n  };\n\n  const collapseAll = () => {\n    setExpandedItems(new Set());\n  };\n\n  const handleExport = () => {\n    const data = exportPage();\n    const blob = new Blob([JSON.stringify(data, null, 2)], {\n      type: \"application/json\",\n    });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.download = \"page-structure.json\";\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n  };\n\n  const handleImport = () => {\n    const input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.accept = \".json\";\n    input.onchange = (e) => {\n      const file = (e.target as HTMLInputElement).files?.[0];\n      if (file) {\n        const reader = new FileReader();\n        reader.onload = (e) => {\n          try {\n            const data = JSON.parse(e.target?.result as string);\n            importPage(data);\n          } catch (error) {\n            alert(\"Error importing page structure: Invalid JSON file\");\n          }\n        };\n        reader.readAsText(file);\n      }\n    };\n    input.click();\n  };\n\n  // Filter components based on search\n  const filteredComponents = searchQuery\n    ? pageState.components.filter((component) => {\n        const searchInComponent = (comp: PageComponent): boolean => {\n          const definition = componentLibrary.find(\n            (def) => def.type === comp.type\n          );\n          const name = definition?.name || comp.type;\n          const content = toStringProp(comp.props.content);\n\n          const matches =\n            name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n            content.toLowerCase().includes(searchQuery.toLowerCase()) ||\n            comp.type.toLowerCase().includes(searchQuery.toLowerCase());\n\n          return matches || comp.children.some(searchInComponent);\n        };\n        return searchInComponent(component);\n      })\n    : pageState.components;\n\n  if (collapsed) {\n    return (\n      <div className={cn(\"w-12\", className)}>\n        <Glass className=\"glass-h-full glass-contrast-guard\">\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-flex glass-items-center glass-justify-center glass-w-full glass-h-12 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Expand Page Structure\"\n          >\n            <div className=\"glass-text-lg\">\uD83C\uDF33</div>\n          </button>\n        </Glass>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"w-80 h-full flex flex-col\", className)}\n      data-testid={dataTestId}\n    >\n      <Glass className=\"glass-h-full glass-flex glass-flex-col glass-contrast-guard\">\n        {/* Header */}\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-p-4 glass-border-b glass-border-subtle\">\n          <h2 className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n            Structure\n          </h2>\n          <button\n            onClick={onToggleCollapse}\n            className=\"glass-p-2 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Collapse Structure\"\n          >\n            \u25C0\n          </button>\n        </div>\n\n        {/* Controls */}\n        <div className=\"glass-p-4 glass-border-b glass-border-subtle glass-space-y-3\">\n          {/* Search */}\n          <div className=\"glass-relative\">\n            <input\n              type=\"text\"\n              placeholder=\"Search components...\"\n              value={searchQuery}\n              onChange={(e) => setSearchQuery(e.target.value)}\n              className=\"glass-w-full glass-px-3 glass-py-2 glass-pl-10 glass-text-sm glass-border glass-border-subtle glass-radius-lg glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n            />\n            <div className=\"glass-absolute glass-left-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-text-secondary\">\n              \uD83D\uDD0D\n            </div>\n            {searchQuery && (\n              <button\n                onClick={() => setSearchQuery(\"\")}\n                className=\"glass-absolute glass-right-3 glass-top-1/2 glass-transform glass--translate-y-1-2 glass-text-secondary hover:glass-text-secondary glass-focus glass-touch-target\"\n              >\n                \u2715\n              </button>\n            )}\n          </div>\n\n          {/* Action Buttons */}\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs\">\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <button\n                onClick={expandAll}\n                className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Expand All\n              </button>\n              <span className=\"glass-text-secondary\">|</span>\n              <button\n                onClick={collapseAll}\n                className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Collapse All\n              </button>\n            </div>\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <button\n                onClick={handleExport}\n                className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Export Structure\"\n              >\n                \uD83D\uDCBE\n              </button>\n              <button\n                onClick={handleImport}\n                className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Import Structure\"\n              >\n                \uD83D\uDCC1\n              </button>\n              <button\n                onClick={clearPage}\n                className=\"glass-text-primary hover:glass-text-primary glass-focus glass-touch-target glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Clear All\"\n              >\n                \uD83D\uDDD1\uFE0F\n              </button>\n            </div>\n          </div>\n        </div>\n\n        {/* Component Tree */}\n        <div className=\"glass-flex-1 glass-overflow-y-auto glass-p-2\">\n          {filteredComponents.length === 0 ? (\n            <div className=\"glass-flex glass-items-center glass-justify-center glass-h-full\">\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-4xl glass-mb-4\">\uD83C\uDF33</div>\n                <h3 className=\"glass-text-lg glass-font-medium glass-text-secondary glass-mb-2\">\n                  {searchQuery ? \"No matches found\" : \"Empty Page\"}\n                </h3>\n                <p className=\"glass-text-secondary glass-text-sm\">\n                  {searchQuery\n                    ? \"Try a different search term\"\n                    : \"Start by adding components to your page\"}\n                </p>\n              </div>\n            </div>\n          ) : (\n            <div className=\"glass-space-y-1\">\n              {filteredComponents\n                .filter((component) => !component.parent) // Only show root components\n                .map((component) => (\n                  <TreeItem\n                    key={component.id}\n                    component={component}\n                    level={0}\n                    isSelected={selectedComponent?.id === component.id}\n                    onSelect={selectComponent}\n                    onToggleExpand={toggleExpanded}\n                    expandedItems={expandedItems}\n                    componentDefinition={componentLibrary.find(\n                      (def) => def.type === component.type\n                    )}\n                  />\n                ))}\n            </div>\n          )}\n        </div>\n\n        {/* Footer Stats */}\n        <div className=\"glass-p-4 glass-surface-subtle glass-border-t glass-border-subtle\">\n          <div className=\"glass-text-xs glass-text-secondary glass-space-y-1\">\n            <div className=\"glass-flex glass-justify-between\">\n              <span>Total Components:</span>\n              <span>{pageState.components.length}</span>\n            </div>\n            <div className=\"glass-flex glass-justify-between\">\n              <span>Root Components:</span>\n              <span>\n                {\n                  pageState.components.filter((component) => !component.parent)\n                    .length\n                }\n              </span>\n            </div>\n            <div className=\"glass-flex glass-justify-between\">\n              <span>Selected:</span>\n              <span>{selectedComponent ? selectedComponent.type : \"None\"}</span>\n            </div>\n          </div>\n        </div>\n      </Glass>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useEffect,\n} from \"react\";\n\nexport interface Product {\n  id: string;\n  name: string;\n  description: string;\n  price: number;\n  originalPrice?: number;\n  currency: string;\n  images: string[];\n  thumbnail?: string;\n  category: string;\n  subcategory?: string;\n  brand?: string;\n  sku?: string;\n  stock: number;\n  rating: number;\n  reviewCount: number;\n  tags: string[];\n  features: ProductFeature[];\n  variants?: ProductVariant[];\n  specifications?: Record<string, string>;\n  dimensions?: {\n    width: number;\n    height: number;\n    depth: number;\n    weight: number;\n    unit: string;\n  };\n  shippingInfo?: {\n    freeShipping: boolean;\n    weight: number;\n    dimensions: string;\n    estimatedDays: number;\n  };\n  isOnSale?: boolean;\n  isNew?: boolean;\n  isBestseller?: boolean;\n  availability: \"in-stock\" | \"out-of-stock\" | \"pre-order\" | \"discontinued\";\n  metadata?: Record<string, unknown>;\n}\n\nexport interface ProductFeature {\n  id: string;\n  name: string;\n  value: string | number | boolean;\n  description?: string;\n  importance?: \"low\" | \"medium\" | \"high\";\n  category?: string;\n}\n\nexport interface ProductVariant {\n  id: string;\n  name: string;\n  value: string;\n  price?: number;\n  stock?: number;\n  image?: string;\n  sku?: string;\n}\n\nexport interface CartItem {\n  id: string;\n  productId: string;\n  product: Product;\n  quantity: number;\n  selectedVariants?: Record<string, string>;\n  addedAt: Date;\n  customizations?: Record<string, unknown>;\n  giftWrap?: boolean;\n  giftMessage?: string;\n}\n\nexport interface WishlistItem {\n  id: string;\n  productId: string;\n  product: Product;\n  addedAt: Date;\n  notes?: string;\n  priority: \"low\" | \"medium\" | \"high\";\n  notify?: boolean;\n}\n\nexport interface ProductReview {\n  id: string;\n  productId: string;\n  userId: string;\n  userName: string;\n  userAvatar?: string;\n  rating: number;\n  title: string;\n  content: string;\n  pros?: string[];\n  cons?: string[];\n  images?: string[];\n  verifiedPurchase: boolean;\n  helpful: number;\n  notHelpful: number;\n  createdAt: Date;\n  sentiment?: \"positive\" | \"neutral\" | \"negative\";\n  keywords?: string[];\n}\n\nexport interface PriceHistory {\n  date: Date;\n  price: number;\n  source?: string;\n}\n\nexport interface ProductComparison {\n  id: string;\n  products: Product[];\n  comparisonMatrix: ComparisonFeature[];\n  createdAt: Date;\n  title?: string;\n}\n\nexport interface ComparisonFeature {\n  name: string;\n  category: string;\n  values: (string | number | boolean)[];\n  importance: \"low\" | \"medium\" | \"high\";\n  winner?: number; // index of the winning product\n  description?: string;\n}\n\nexport interface Recommendation {\n  productId: string;\n  product: Product;\n  score: number;\n  reason:\n    | \"viewed-together\"\n    | \"bought-together\"\n    | \"similar\"\n    | \"trending\"\n    | \"personalized\";\n  explanation: string;\n  confidence: number;\n}\n\nexport interface ShippingOption {\n  id: string;\n  name: string;\n  description: string;\n  price: number;\n  estimatedDays: number;\n  trackingAvailable: boolean;\n  insuranceIncluded: boolean;\n}\n\nexport interface PaymentMethod {\n  id: string;\n  type:\n    | \"credit-card\"\n    | \"debit-card\"\n    | \"paypal\"\n    | \"apple-pay\"\n    | \"google-pay\"\n    | \"bank-transfer\";\n  name: string;\n  icon: string;\n  processingFee?: number;\n  acceptedCurrencies: string[];\n}\n\ninterface EcommerceContextValue {\n  // Product Management\n  products: Product[];\n  addProduct: (product: Product) => void;\n  updateProduct: (id: string, updates: Partial<Product>) => void;\n  removeProduct: (id: string) => void;\n  getProduct: (id: string) => Product | undefined;\n  getProductsByCategory: (category: string) => Product[];\n  searchProducts: (query: string, filters?: ProductFilters) => Product[];\n\n  // Shopping Cart\n  cart: CartItem[];\n  addToCart: (\n    productId: string,\n    quantity?: number,\n    variants?: Record<string, string>\n  ) => void;\n  updateCartItem: (itemId: string, quantity: number) => void;\n  removeFromCart: (itemId: string) => void;\n  clearCart: () => void;\n  getCartTotal: () => number;\n  getCartItemCount: () => number;\n  cartSubtotal: number;\n  cartTax: number;\n  cartShipping: number;\n  cartTotal: number;\n\n  // Wishlist\n  wishlist: WishlistItem[];\n  addToWishlist: (\n    productId: string,\n    priority?: \"low\" | \"medium\" | \"high\"\n  ) => void;\n  removeFromWishlist: (itemId: string) => void;\n  moveToCart: (wishlistItemId: string) => void;\n  shareWishlist: () => string;\n\n  // Product Recommendations\n  recommendations: Record<string, Recommendation[]>;\n  getRecommendations: (productId: string, type?: string) => Recommendation[];\n  generateRecommendations: (productId: string) => Promise<Recommendation[]>;\n\n  // Product Comparison\n  comparisons: ProductComparison[];\n  createComparison: (productIds: string[], title?: string) => ProductComparison;\n  updateComparison: (id: string, updates: Partial<ProductComparison>) => void;\n  removeComparison: (id: string) => void;\n  compareProducts: (productIds: string[]) => ComparisonFeature[];\n\n  // Reviews and Ratings\n  reviews: Record<string, ProductReview[]>;\n  addReview: (\n    productId: string,\n    review: Omit<ProductReview, \"id\" | \"createdAt\">\n  ) => void;\n  updateReview: (reviewId: string, updates: Partial<ProductReview>) => void;\n  removeReview: (reviewId: string) => void;\n  getProductReviews: (productId: string) => ProductReview[];\n  getAverageRating: (productId: string) => number;\n\n  // Price Tracking\n  priceHistory: Record<string, PriceHistory[]>;\n  trackPrice: (productId: string) => void;\n  untrackPrice: (productId: string) => void;\n  getPriceHistory: (productId: string) => PriceHistory[];\n  getPriceAlerts: () => {\n    productId: string;\n    oldPrice: number;\n    newPrice: number;\n  }[];\n\n  // Search and Filtering\n  searchQuery: string;\n  setSearchQuery: (query: string) => void;\n  filters: ProductFilters;\n  setFilters: (filters: ProductFilters) => void;\n  sortBy: SortOption;\n  setSortBy: (sort: SortOption) => void;\n\n  // Analytics\n  viewProduct: (productId: string) => void;\n  trackEvent: (event: string, data?: Record<string, unknown>) => void;\n  getAnalytics: () => EcommerceAnalytics;\n\n  // Checkout\n  shippingOptions: ShippingOption[];\n  paymentMethods: PaymentMethod[];\n  selectedShipping?: ShippingOption;\n  selectedPayment?: PaymentMethod;\n  setShippingOption: (option: ShippingOption) => void;\n  setPaymentMethod: (method: PaymentMethod) => void;\n}\n\nexport interface ProductFilters {\n  category?: string[];\n  brand?: string[];\n  priceRange?: [number, number];\n  rating?: number;\n  availability?: string[];\n  features?: Record<string, string[]>;\n  onSale?: boolean;\n  freeShipping?: boolean;\n  inStock?: boolean;\n}\n\nexport type SortOption =\n  | \"relevance\"\n  | \"price-low-high\"\n  | \"price-high-low\"\n  | \"rating\"\n  | \"newest\"\n  | \"bestseller\"\n  | \"name-az\"\n  | \"name-za\";\n\nexport interface EcommerceAnalytics {\n  totalViews: number;\n  totalPurchases: number;\n  conversionRate: number;\n  averageOrderValue: number;\n  popularProducts: { productId: string; views: number; purchases: number }[];\n  categoryPerformance: Record<string, { views: number; purchases: number }>;\n  searchQueries: { query: string; count: number; results: number }[];\n}\n\nconst EcommerceContext = createContext<EcommerceContextValue | null>(null);\n\nconst emptyAnalytics: EcommerceAnalytics = {\n  totalViews: 0,\n  totalPurchases: 0,\n  conversionRate: 0,\n  averageOrderValue: 0,\n  popularProducts: [],\n  categoryPerformance: {},\n  searchQueries: [],\n};\n\nconst defaultEcommerceContext: EcommerceContextValue = {\n  products: [],\n  addProduct: () => {},\n  updateProduct: () => {},\n  removeProduct: () => {},\n  getProduct: () => undefined,\n  getProductsByCategory: () => [],\n  searchProducts: () => [],\n  cart: [],\n  addToCart: () => {},\n  updateCartItem: () => {},\n  removeFromCart: () => {},\n  clearCart: () => {},\n  getCartTotal: () => 0,\n  getCartItemCount: () => 0,\n  cartSubtotal: 0,\n  cartTax: 0,\n  cartShipping: 0,\n  cartTotal: 0,\n  wishlist: [],\n  addToWishlist: () => {},\n  removeFromWishlist: () => {},\n  moveToCart: () => {},\n  shareWishlist: () => \"\",\n  recommendations: {},\n  getRecommendations: () => [],\n  generateRecommendations: async () => [],\n  comparisons: [],\n  createComparison: (productIds, title) => ({\n    id: \"standalone-comparison\",\n    products: [],\n    comparisonMatrix: [],\n    createdAt: new Date(0),\n    title,\n  }),\n  updateComparison: () => {},\n  removeComparison: () => {},\n  compareProducts: () => [],\n  reviews: {},\n  addReview: () => {},\n  updateReview: () => {},\n  removeReview: () => {},\n  getProductReviews: () => [],\n  getAverageRating: () => 0,\n  priceHistory: {},\n  trackPrice: () => {},\n  untrackPrice: () => {},\n  getPriceHistory: () => [],\n  getPriceAlerts: () => [],\n  searchQuery: \"\",\n  setSearchQuery: () => {},\n  filters: {},\n  setFilters: () => {},\n  sortBy: \"relevance\",\n  setSortBy: () => {},\n  viewProduct: () => {},\n  trackEvent: () => {},\n  getAnalytics: () => emptyAnalytics,\n  shippingOptions: [],\n  paymentMethods: [],\n  setShippingOption: () => {},\n  setPaymentMethod: () => {},\n};\n\nconst isProduct = (product: Product | undefined): product is Product =>\n  product !== undefined;\n\n// Mock AI recommendation engine\nconst mockRecommendationEngine = {\n  async generateRecommendations(\n    productId: string,\n    products: Product[]\n  ): Promise<Recommendation[]> {\n    await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate API call\n\n    const product = products.find((p) => p.id === productId);\n    if (!product) return [];\n\n    // Generate different types of recommendations\n    const recommendations: Recommendation[] = [];\n\n    // Similar products (same category)\n    const similarProducts = products\n      .filter(\n        (p) =>\n          p.id !== productId &&\n          p.category === product.category &&\n          Math.abs(p.price - product.price) / product.price < 0.5\n      )\n      .slice(0, 3);\n\n    similarProducts.forEach((p) => {\n      recommendations.push({\n        productId: p.id,\n        product: p,\n        score: 0.8 + Math.random() * 0.2,\n        reason: \"similar\",\n        explanation: `Similar to ${product.name} in ${product.category} category`,\n        confidence: 0.75 + Math.random() * 0.2,\n      });\n    });\n\n    // Trending products\n    const trendingProducts = products\n      .filter((p) => p.id !== productId && (p.isBestseller || p.isNew))\n      .slice(0, 2);\n\n    trendingProducts.forEach((p) => {\n      recommendations.push({\n        productId: p.id,\n        product: p,\n        score: 0.7 + Math.random() * 0.2,\n        reason: \"trending\",\n        explanation: p.isBestseller\n          ? \"Bestseller in our store\"\n          : \"New arrival that's gaining popularity\",\n        confidence: 0.8 + Math.random() * 0.15,\n      });\n    });\n\n    // Frequently bought together (mock)\n    const complementaryProducts = products\n      .filter(\n        (p) =>\n          p.id !== productId &&\n          p.category !== product.category &&\n          p.price < product.price * 0.5\n      )\n      .slice(0, 2);\n\n    complementaryProducts.forEach((p) => {\n      recommendations.push({\n        productId: p.id,\n        product: p,\n        score: 0.6 + Math.random() * 0.3,\n        reason: \"bought-together\",\n        explanation: `Frequently purchased with ${product.name}`,\n        confidence: 0.6 + Math.random() * 0.3,\n      });\n    });\n\n    return recommendations.sort((a, b) => b.score - a.score).slice(0, 8);\n  },\n};\n\nexport const EcommerceProvider: React.FC<{\n  children: React.ReactNode;\n  className?: string;\n  \"data-testid\"?: string;\n}> = ({ children, className, \"data-testid\": dataTestId }) => {\n  const [products, setProducts] = useState<Product[]>([]);\n  const [cart, setCart] = useState<CartItem[]>([]);\n  const [wishlist, setWishlist] = useState<WishlistItem[]>([]);\n  const [recommendations, setRecommendations] = useState<\n    Record<string, Recommendation[]>\n  >({});\n  const [comparisons, setComparisons] = useState<ProductComparison[]>([]);\n  const [reviews, setReviews] = useState<Record<string, ProductReview[]>>({});\n  const [priceHistory, setPriceHistory] = useState<\n    Record<string, PriceHistory[]>\n  >({});\n  const [searchQuery, setSearchQuery] = useState(\"\");\n  const [filters, setFilters] = useState<ProductFilters>({});\n  const [sortBy, setSortBy] = useState<SortOption>(\"relevance\");\n  const [selectedShipping, setSelectedShipping] = useState<ShippingOption>();\n  const [selectedPayment, setSelectedPayment] = useState<PaymentMethod>();\n\n  // Mock shipping and payment options\n  const shippingOptions: ShippingOption[] = [\n    {\n      id: \"standard\",\n      name: \"Standard Shipping\",\n      description: \"Free shipping on orders over $50\",\n      price: 0,\n      estimatedDays: 5,\n      trackingAvailable: true,\n      insuranceIncluded: false,\n    },\n    {\n      id: \"express\",\n      name: \"Express Shipping\",\n      description: \"Fast delivery with tracking\",\n      price: 9.99,\n      estimatedDays: 2,\n      trackingAvailable: true,\n      insuranceIncluded: true,\n    },\n    {\n      id: \"overnight\",\n      name: \"Overnight Delivery\",\n      description: \"Next business day delivery\",\n      price: 24.99,\n      estimatedDays: 1,\n      trackingAvailable: true,\n      insuranceIncluded: true,\n    },\n  ];\n\n  const paymentMethods: PaymentMethod[] = [\n    {\n      id: \"credit-card\",\n      type: \"credit-card\",\n      name: \"Credit Card\",\n      icon: \"\uD83D\uDCB3\",\n      acceptedCurrencies: [\"USD\", \"EUR\", \"GBP\"],\n    },\n    {\n      id: \"paypal\",\n      type: \"paypal\",\n      name: \"PayPal\",\n      icon: \"\uD83C\uDD7F\uFE0F\",\n      acceptedCurrencies: [\"USD\", \"EUR\", \"GBP\"],\n    },\n    {\n      id: \"apple-pay\",\n      type: \"apple-pay\",\n      name: \"Apple Pay\",\n      icon: \"\uD83C\uDF4E\",\n      acceptedCurrencies: [\"USD\", \"EUR\", \"GBP\"],\n    },\n  ];\n\n  // Cart calculations\n  const cartSubtotal = cart.reduce(\n    (total, item) => total + item.product.price * item.quantity,\n    0\n  );\n  const cartTax = cartSubtotal * 0.08; // 8% tax\n  const cartShipping = selectedShipping?.price || 0;\n  const cartTotal = cartSubtotal + cartTax + cartShipping;\n\n  const addProduct = useCallback((product: Product) => {\n    setProducts((prev) => [...prev, product]);\n  }, []);\n\n  const updateProduct = useCallback((id: string, updates: Partial<Product>) => {\n    setProducts((prev) =>\n      prev.map((product) =>\n        product.id === id ? { ...product, ...updates } : product\n      )\n    );\n  }, []);\n\n  const removeProduct = useCallback((id: string) => {\n    setProducts((prev) => prev.filter((product) => product.id !== id));\n  }, []);\n\n  const getProduct = useCallback(\n    (id: string) => {\n      return products.find((product) => product.id === id);\n    },\n    [products]\n  );\n\n  const getProductsByCategory = useCallback(\n    (category: string) => {\n      return products.filter((product) => product.category === category);\n    },\n    [products]\n  );\n\n  const searchProducts = useCallback(\n    (query: string, searchFilters?: ProductFilters) => {\n      let filtered = products;\n\n      // Text search\n      if (query) {\n        const lowercaseQuery = query.toLowerCase();\n        filtered = filtered.filter(\n          (product) =>\n            product.name.toLowerCase().includes(lowercaseQuery) ||\n            product.description.toLowerCase().includes(lowercaseQuery) ||\n            product.tags.some((tag) =>\n              tag.toLowerCase().includes(lowercaseQuery)\n            ) ||\n            product.brand?.toLowerCase().includes(lowercaseQuery)\n        );\n      }\n\n      // Apply filters\n      const activeFilters = searchFilters || filters;\n\n      if (activeFilters.category?.length) {\n        filtered = filtered.filter((product) =>\n          activeFilters.category!.includes(product.category)\n        );\n      }\n\n      if (activeFilters.brand?.length) {\n        filtered = filtered.filter(\n          (product) =>\n            product.brand && activeFilters.brand!.includes(product.brand)\n        );\n      }\n\n      if (activeFilters.priceRange) {\n        const [min, max] = activeFilters.priceRange;\n        filtered = filtered.filter(\n          (product) => product.price >= min && product.price <= max\n        );\n      }\n\n      if (activeFilters.rating) {\n        filtered = filtered.filter(\n          (product) => product.rating >= activeFilters.rating!\n        );\n      }\n\n      if (activeFilters.onSale) {\n        filtered = filtered.filter((product) => product.isOnSale);\n      }\n\n      if (activeFilters.inStock) {\n        filtered = filtered.filter(\n          (product) => product.availability === \"in-stock\"\n        );\n      }\n\n      // Apply sorting\n      switch (sortBy) {\n        case \"price-low-high\":\n          filtered.sort((a, b) => a.price - b.price);\n          break;\n        case \"price-high-low\":\n          filtered.sort((a, b) => b.price - a.price);\n          break;\n        case \"rating\":\n          filtered.sort((a, b) => b.rating - a.rating);\n          break;\n        case \"name-az\":\n          filtered.sort((a, b) => a.name.localeCompare(b.name));\n          break;\n        case \"name-za\":\n          filtered.sort((a, b) => b.name.localeCompare(a.name));\n          break;\n        case \"bestseller\":\n          filtered.sort(\n            (a, b) => (b.isBestseller ? 1 : 0) - (a.isBestseller ? 1 : 0)\n          );\n          break;\n      }\n\n      return filtered;\n    },\n    [products, filters, sortBy]\n  );\n\n  const addToCart = useCallback(\n    (productId: string, quantity = 1, variants?: Record<string, string>) => {\n      const product = getProduct(productId);\n      if (!product) return;\n\n      setCart((prev) => {\n        const existingItem = prev.find(\n          (item) =>\n            item.productId === productId &&\n            JSON.stringify(item.selectedVariants) === JSON.stringify(variants)\n        );\n\n        if (existingItem) {\n          return prev.map((item) =>\n            item.id === existingItem.id\n              ? { ...item, quantity: item.quantity + quantity }\n              : item\n          );\n        } else {\n          const newItem: CartItem = {\n            id: `cart_${Date.now()}_${Math.random()}`,\n            productId,\n            product,\n            quantity,\n            selectedVariants: variants,\n            addedAt: new Date(),\n          };\n          return [...prev, newItem];\n        }\n      });\n    },\n    [getProduct]\n  );\n\n  const updateCartItem = useCallback((itemId: string, quantity: number) => {\n    if (quantity <= 0) {\n      removeFromCart(itemId);\n      return;\n    }\n\n    setCart((prev) =>\n      prev.map((item) => (item.id === itemId ? { ...item, quantity } : item))\n    );\n  }, []);\n\n  const removeFromCart = useCallback((itemId: string) => {\n    setCart((prev) => prev.filter((item) => item.id !== itemId));\n  }, []);\n\n  const clearCart = useCallback(() => {\n    setCart([]);\n  }, []);\n\n  const getCartTotal = useCallback(() => {\n    return cart.reduce(\n      (total, item) => total + item.product.price * item.quantity,\n      0\n    );\n  }, [cart]);\n\n  const getCartItemCount = useCallback(() => {\n    return cart.reduce((count, item) => count + item.quantity, 0);\n  }, [cart]);\n\n  const addToWishlist = useCallback(\n    (productId: string, priority: \"low\" | \"medium\" | \"high\" = \"medium\") => {\n      const product = getProduct(productId);\n      if (!product) return;\n\n      const existingItem = wishlist.find(\n        (item) => item.productId === productId\n      );\n      if (existingItem) return;\n\n      const newItem: WishlistItem = {\n        id: `wishlist_${Date.now()}_${Math.random()}`,\n        productId,\n        product,\n        addedAt: new Date(),\n        priority,\n      };\n\n      setWishlist((prev) => [...prev, newItem]);\n    },\n    [getProduct, wishlist]\n  );\n\n  const removeFromWishlist = useCallback((itemId: string) => {\n    setWishlist((prev) => prev.filter((item) => item.id !== itemId));\n  }, []);\n\n  const moveToCart = useCallback(\n    (wishlistItemId: string) => {\n      const wishlistItem = wishlist.find((item) => item.id === wishlistItemId);\n      if (!wishlistItem) return;\n\n      addToCart(wishlistItem.productId, 1);\n      removeFromWishlist(wishlistItemId);\n    },\n    [wishlist, addToCart, removeFromWishlist]\n  );\n\n  const shareWishlist = useCallback(() => {\n    const wishlistData = JSON.stringify(wishlist.map((item) => item.productId));\n    return `${window.location.origin}/wishlist?items=${encodeURIComponent(wishlistData)}`;\n  }, [wishlist]);\n\n  const getRecommendations = useCallback(\n    (productId: string, type?: string) => {\n      return recommendations[productId] || [];\n    },\n    [recommendations]\n  );\n\n  const generateRecommendations = useCallback(\n    async (productId: string) => {\n      const recs = await mockRecommendationEngine.generateRecommendations(\n        productId,\n        products\n      );\n      setRecommendations((prev) => ({ ...prev, [productId]: recs }));\n      return recs;\n    },\n    [products]\n  );\n\n  const createComparison = useCallback(\n    (productIds: string[], title?: string) => {\n      const comparisonProducts = productIds\n        .map((id) => getProduct(id))\n        .filter(isProduct);\n      if (comparisonProducts.length < 2)\n        throw new Error(\"At least 2 products required for comparison\");\n\n      const comparisonMatrix = compareProducts(productIds);\n\n      const comparison: ProductComparison = {\n        id: `comparison_${Date.now()}`,\n        products: comparisonProducts,\n        comparisonMatrix,\n        createdAt: new Date(),\n        title: title || `Comparison of ${comparisonProducts.length} products`,\n      };\n\n      setComparisons((prev) => [...prev, comparison]);\n      return comparison;\n    },\n    [getProduct]\n  );\n\n  const updateComparison = useCallback(\n    (id: string, updates: Partial<ProductComparison>) => {\n      setComparisons((prev) =>\n        prev.map((comp) => (comp.id === id ? { ...comp, ...updates } : comp))\n      );\n    },\n    []\n  );\n\n  const removeComparison = useCallback((id: string) => {\n    setComparisons((prev) => prev.filter((comp) => comp.id !== id));\n  }, []);\n\n  const compareProducts = useCallback(\n    (productIds: string[]) => {\n      const comparisonProducts = productIds\n        .map((id) => getProduct(id))\n        .filter(isProduct);\n      const features: ComparisonFeature[] = [];\n\n      // Price comparison\n      features.push({\n        name: \"Price\",\n        category: \"General\",\n        values: comparisonProducts.map((p) => `$${p.price.toFixed(2)}`),\n        importance: \"high\",\n        winner: comparisonProducts.indexOf(\n          comparisonProducts.reduce((min, p) => (p.price < min.price ? p : min))\n        ),\n      });\n\n      // Rating comparison\n      features.push({\n        name: \"Rating\",\n        category: \"General\",\n        values: comparisonProducts.map((p) => p.rating),\n        importance: \"high\",\n        winner: comparisonProducts.indexOf(\n          comparisonProducts.reduce((max, p) =>\n            p.rating > max.rating ? p : max\n          )\n        ),\n      });\n\n      // Stock comparison\n      features.push({\n        name: \"Stock\",\n        category: \"Availability\",\n        values: comparisonProducts.map((p) => p.stock),\n        importance: \"medium\",\n      });\n\n      return features;\n    },\n    [getProduct]\n  );\n\n  const addReview = useCallback(\n    (productId: string, review: Omit<ProductReview, \"id\" | \"createdAt\">) => {\n      const newReview: ProductReview = {\n        ...review,\n        id: `review_${Date.now()}_${Math.random()}`,\n        productId,\n        createdAt: new Date(),\n      };\n\n      setReviews((prev) => ({\n        ...prev,\n        [productId]: [...(prev[productId] || []), newReview],\n      }));\n    },\n    []\n  );\n\n  const updateReview = useCallback(\n    (reviewId: string, updates: Partial<ProductReview>) => {\n      setReviews((prev) => {\n        const newReviews = { ...prev };\n        Object.keys(newReviews).forEach((productId) => {\n          newReviews[productId] = newReviews[productId].map((review) =>\n            review.id === reviewId ? { ...review, ...updates } : review\n          );\n        });\n        return newReviews;\n      });\n    },\n    []\n  );\n\n  const removeReview = useCallback((reviewId: string) => {\n    setReviews((prev) => {\n      const newReviews = { ...prev };\n      Object.keys(newReviews).forEach((productId) => {\n        newReviews[productId] = newReviews[productId].filter(\n          (review) => review.id !== reviewId\n        );\n      });\n      return newReviews;\n    });\n  }, []);\n\n  const getProductReviews = useCallback(\n    (productId: string) => {\n      return reviews[productId] || [];\n    },\n    [reviews]\n  );\n\n  const getAverageRating = useCallback(\n    (productId: string) => {\n      const productReviews = getProductReviews(productId);\n      if (productReviews.length === 0) return 0;\n\n      const sum = productReviews.reduce(\n        (total, review) => total + review.rating,\n        0\n      );\n      return sum / productReviews.length;\n    },\n    [getProductReviews]\n  );\n\n  const trackPrice = useCallback(\n    (productId: string) => {\n      const product = getProduct(productId);\n      if (!product) return;\n\n      const historyEntry: PriceHistory = {\n        date: new Date(),\n        price: product.price,\n        source: \"tracking\",\n      };\n\n      setPriceHistory((prev) => ({\n        ...prev,\n        [productId]: [...(prev[productId] || []), historyEntry],\n      }));\n    },\n    [getProduct]\n  );\n\n  const untrackPrice = useCallback((productId: string) => {\n    setPriceHistory((prev) => {\n      const newHistory = { ...prev };\n      delete newHistory[productId];\n      return newHistory;\n    });\n  }, []);\n\n  const getPriceHistory = useCallback(\n    (productId: string) => {\n      return priceHistory[productId] || [];\n    },\n    [priceHistory]\n  );\n\n  const getPriceAlerts = useCallback(() => {\n    // Mock price alerts\n    return [];\n  }, []);\n\n  const viewProduct = useCallback((productId: string) => {\n    // Track product view for analytics\n    trackEvent(\"product_view\", { productId });\n  }, []);\n\n  const trackEvent = useCallback(\n    (event: string, data?: Record<string, unknown>) => {\n      // Mock analytics tracking\n    },\n    []\n  );\n\n  const getAnalytics = useCallback((): EcommerceAnalytics => {\n    // Mock analytics data\n    return {\n      totalViews: 1250,\n      totalPurchases: 89,\n      conversionRate: 7.1,\n      averageOrderValue: 156.78,\n      popularProducts: products.slice(0, 5).map((p) => ({\n        productId: p.id,\n        views: Math.floor(Math.random() * 500) + 100,\n        purchases: Math.floor(Math.random() * 50) + 10,\n      })),\n      categoryPerformance: products.reduce(\n        (acc, p) => {\n          if (!acc[p.category]) {\n            acc[p.category] = { views: 0, purchases: 0 };\n          }\n          acc[p.category].views += Math.floor(Math.random() * 100) + 50;\n          acc[p.category].purchases += Math.floor(Math.random() * 20) + 5;\n          return acc;\n        },\n        {} as Record<string, { views: number; purchases: number }>\n      ),\n      searchQueries: [\n        { query: \"wireless headphones\", count: 45, results: 12 },\n        { query: \"laptop stand\", count: 38, results: 8 },\n        { query: \"smartphone case\", count: 32, results: 15 },\n      ],\n    };\n  }, [products]);\n\n  const setShippingOption = useCallback((option: ShippingOption) => {\n    setSelectedShipping(option);\n  }, []);\n\n  const setPaymentMethod = useCallback((method: PaymentMethod) => {\n    setSelectedPayment(method);\n  }, []);\n\n  const value: EcommerceContextValue = {\n    products,\n    addProduct,\n    updateProduct,\n    removeProduct,\n    getProduct,\n    getProductsByCategory,\n    searchProducts,\n    cart,\n    addToCart,\n    updateCartItem,\n    removeFromCart,\n    clearCart,\n    getCartTotal,\n    getCartItemCount,\n    cartSubtotal,\n    cartTax,\n    cartShipping,\n    cartTotal,\n    wishlist,\n    addToWishlist,\n    removeFromWishlist,\n    moveToCart,\n    shareWishlist,\n    recommendations,\n    getRecommendations,\n    generateRecommendations,\n    comparisons,\n    createComparison,\n    updateComparison,\n    removeComparison,\n    compareProducts,\n    reviews,\n    addReview,\n    updateReview,\n    removeReview,\n    getProductReviews,\n    getAverageRating,\n    priceHistory,\n    trackPrice,\n    untrackPrice,\n    getPriceHistory,\n    getPriceAlerts,\n    searchQuery,\n    setSearchQuery,\n    filters,\n    setFilters,\n    sortBy,\n    setSortBy,\n    viewProduct,\n    trackEvent,\n    getAnalytics,\n    shippingOptions,\n    paymentMethods,\n    selectedShipping,\n    selectedPayment,\n    setShippingOption,\n    setPaymentMethod,\n  };\n\n  return (\n    <EcommerceContext.Provider data-glass-component value={value}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </EcommerceContext.Provider>\n  );\n};\n\nexport { EcommerceProvider as GlassEcommerceProvider };\n\nexport const useEcommerce = () => {\n  const context = useContext(EcommerceContext);\n  return context ?? defaultEcommerceContext;\n};\n", "\"use client\";\nimport React, { useState, useCallback } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  useEcommerce,\n  CartItem,\n  ShippingOption,\n} from \"./GlassEcommerceProvider\";\n\nexport interface SmartShoppingCartProps {\n  className?: string;\n  items?: CartItem[];\n  variant?: \"sidebar\" | \"page\" | \"dropdown\";\n  showRecommendations?: boolean;\n  showShippingCalculator?: boolean;\n  showPromoCode?: boolean;\n  showSavedItems?: boolean;\n  maxItems?: number;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  onCheckout?: () => void;\n  onClose?: () => void;\n  \"data-testid\"?: string;\n}\n\ninterface CartItemCardProps {\n  item: CartItem;\n  onUpdateQuantity: (itemId: string, quantity: number) => void;\n  onRemove: (itemId: string) => void;\n  onMoveToWishlist: (itemId: string) => void;\n  onSaveForLater: (itemId: string) => void;\n  compact?: boolean;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({\n  item,\n  onUpdateQuantity,\n  onRemove,\n  onMoveToWishlist,\n  onSaveForLater,\n  compact = false,\n}) => {\n  const [isUpdating, setIsUpdating] = useState(false);\n  const [quantity, setQuantity] = useState(item.quantity);\n\n  const handleQuantityChange = useCallback(\n    async (newQuantity: number) => {\n      if (newQuantity < 1 || newQuantity > item.product.stock) return;\n\n      setIsUpdating(true);\n      setQuantity(newQuantity);\n\n      // Simulate API call delay\n      await new Promise((resolve) => setTimeout(resolve, 300));\n\n      onUpdateQuantity(item.id, newQuantity);\n      setIsUpdating(false);\n    },\n    [item.id, item.product.stock, onUpdateQuantity]\n  );\n\n  const itemTotal = item.product.price * quantity;\n  const isOnSale =\n    item.product.originalPrice &&\n    item.product.originalPrice > item.product.price;\n  const savings = isOnSale\n    ? (item.product.originalPrice! - item.product.price) * quantity\n    : 0;\n\n  if (compact) {\n    return (\n      <div\n        data-glass-component\n        className=\"glass-flex glass-items-center glass-gap-3 glass-p-3 glass-border-b glass-border-subtle last:glass-border-b-0\"\n      >\n        <img\n          src={item.product.thumbnail || item.product.images[0]}\n          alt={item.product.name}\n          className=\"glass-w-12 glass-h-12 glass-object-cover glass-radius\"\n        />\n\n        <div className=\"glass-flex-1 glass-min-glass-w-0\">\n          <h3 className=\"glass-font-medium glass-text-secondary glass-text-sm glass-truncate\">\n            {item.product.name}\n          </h3>\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mt-1\">\n            <span className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n              ${item.product.price.toFixed(2)}\n            </span>\n            {isOnSale && (\n              <span className=\"glass-text-xs glass-text-secondary glass-line-through\">\n                ${item.product.originalPrice!.toFixed(2)}\n              </span>\n            )}\n            <span className=\"glass-text-xs glass-text-secondary\">\n              \u00D7 {quantity}\n            </span>\n          </div>\n        </div>\n\n        <div className=\"glass-text-right\">\n          <div className=\"glass-font-medium glass-text-secondary\">\n            ${itemTotal.toFixed(2)}\n          </div>\n          {savings > 0 && (\n            <div className=\"glass-text-xs glass-text-primary\">\n              Save ${savings.toFixed(2)}\n            </div>\n          )}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"glass-flex glass-gap-4 glass-p-4 glass-border-b glass-border-subtle last:glass-border-b-0\">\n      {/* Product Image */}\n      <div className=\"glass-relative\">\n        <img\n          src={item.product.thumbnail || item.product.images[0]}\n          alt={item.product.name}\n          className=\"glass-w-20 glass-h-20 glass-object-cover glass-radius-lg\"\n        />\n        {isOnSale && (\n          <div className=\"glass-absolute glass--top-2 glass--right-2 glass-surface-red glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius-full\">\n            SALE\n          </div>\n        )}\n        {item.product.availability !== \"in-stock\" && (\n          <div className=\"glass-absolute glass-inset-0 glass-surface-dark glass-opacity-50 glass-flex glass-items-center glass-justify-center glass-radius-lg\">\n            <span className=\"glass-text-primary glass-text-xs glass-font-medium\">\n              {item.product.availability === \"out-of-stock\"\n                ? \"Out of Stock\"\n                : \"Pre-order\"}\n            </span>\n          </div>\n        )}\n      </div>\n\n      {/* Product Details */}\n      <div className=\"glass-flex-1 glass-min-glass-w-0\">\n        <div className=\"glass-flex glass-items-start glass-justify-between\">\n          <div className=\"glass-flex-1\">\n            <h3 className=\"glass-font-medium glass-text-secondary glass-mb-1\">\n              {item.product.name}\n            </h3>\n\n            {item.product.brand && (\n              <p className=\"glass-text-sm glass-text-secondary glass-mb-1\">\n                Brand: {item.product.brand}\n              </p>\n            )}\n\n            {item.selectedVariants && (\n              <div className=\"glass-flex glass-flex-wrap glass-gap-1 glass-mb-2\">\n                {Object.entries(item.selectedVariants).map(([key, value]) => (\n                  <span\n                    key={key}\n                    className=\"glass-inline-glass-block glass-px-2 glass-py-1 glass-surface-subtle glass-text-secondary glass-text-xs glass-radius\"\n                  >\n                    {key}: {value}\n                  </span>\n                ))}\n              </div>\n            )}\n\n            {/* Price */}\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-3\">\n              <span className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n                ${item.product.price.toFixed(2)}\n              </span>\n              {isOnSale && (\n                <span className=\"glass-text-sm glass-text-secondary glass-line-through\">\n                  ${item.product.originalPrice!.toFixed(2)}\n                </span>\n              )}\n              {item.product.availability === \"in-stock\" &&\n                item.product.stock < 10 && (\n                  <span className=\"glass-text-xs glass-text-primary glass-surface-subtle glass-px-2 glass-py-1 glass-radius\">\n                    Only {item.product.stock} left\n                  </span>\n                )}\n            </div>\n\n            {/* Gift Options */}\n            {item.giftWrap && (\n              <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-2\">\n                <span className=\"glass-text-sm glass-text-primary\">\n                  \uD83C\uDF81 Gift wrapped\n                </span>\n                {item.giftMessage && (\n                  <span className=\"glass-text-xs glass-text-secondary\">\n                    with message\n                  </span>\n                )}\n              </div>\n            )}\n          </div>\n\n          {/* Remove Button */}\n          <button\n            onClick={() => onRemove(item.id)}\n            className=\"glass-text-secondary hover:glass-text-primary glass-p-1 glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Remove from cart\"\n          >\n            \u2715\n          </button>\n        </div>\n\n        {/* Quantity Controls */}\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <div className=\"glass-flex glass-items-center glass-gap-3\">\n            <div className=\"glass-flex glass-items-center glass-border glass-border-subtle glass-radius\">\n              <button\n                onClick={() => handleQuantityChange(quantity - 1)}\n                disabled={quantity <= 1 || isUpdating}\n                className=\"glass-px-3 glass-py-1 hover:glass-surface-subtle disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                \u2212\n              </button>\n\n              <span className=\"glass-px-4 glass-py-1 glass-border-x glass-border-subtle glass-min-w-12 glass-text-center\">\n                {isUpdating ? \"...\" : quantity}\n              </span>\n\n              <button\n                onClick={() => handleQuantityChange(quantity + 1)}\n                disabled={quantity >= item.product.stock || isUpdating}\n                className=\"glass-px-3 glass-py-1 hover:glass-surface-subtle disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                +\n              </button>\n            </div>\n\n            {/* Action Buttons */}\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <button\n                onClick={() => onSaveForLater(item.id)}\n                className=\"glass-text-xs glass-text-primary hover:glass-text-primary glass-underline glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Save for later\n              </button>\n              <button\n                onClick={() => onMoveToWishlist(item.id)}\n                className=\"glass-text-xs glass-text-primary hover:glass-text-primary glass-underline glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Move to wishlist\n              </button>\n            </div>\n          </div>\n\n          {/* Item Total */}\n          <div className=\"glass-text-right\">\n            <div className=\"glass-font-semibold glass-text-secondary\">\n              ${itemTotal.toFixed(2)}\n            </div>\n            {savings > 0 && (\n              <div className=\"glass-text-sm glass-text-primary\">\n                You save ${savings.toFixed(2)}\n              </div>\n            )}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst ShippingCalculator: React.FC<{\n  shippingOptions: ShippingOption[];\n  selectedShipping?: ShippingOption;\n  onShippingSelect: (option: ShippingOption) => void;\n  cartSubtotal: number;\n}> = ({\n  shippingOptions,\n  selectedShipping,\n  onShippingSelect,\n  cartSubtotal,\n}) => {\n  return (\n    <div className=\"glass-space-y-3\">\n      <h3 className=\"glass-font-medium glass-text-secondary\">\n        Shipping Options\n      </h3>\n      {shippingOptions.map((option: any) => {\n        const isFree =\n          option.price === 0 ||\n          (option.id === \"standard\" && cartSubtotal >= 50);\n        const price = isFree ? 0 : option.price;\n\n        return (\n          <label\n            key={option.id}\n            className={cn(\n              \"flex items-center justify-between p-3 border rounded-lg cursor-pointer transition-colors\",\n              selectedShipping?.id === option.id\n                ? \"border-blue-400/60 bg-blue-500/15\"\n                : \"border-white/15 hover:border-white/25\"\n            )}\n          >\n            <div className=\"glass-flex glass-items-center glass-gap-3\">\n              <input\n                type=\"radio\"\n                name=\"shipping\"\n                value={option.id}\n                checked={selectedShipping?.id === option.id}\n                onChange={() => onShippingSelect(option)}\n                className=\"glass-text-primary\"\n              />\n              <div>\n                <div className=\"glass-font-medium glass-text-secondary\">\n                  {option.name}\n                  {isFree && (\n                    <span className=\"glass-text-primary glass-ml-2\">FREE</span>\n                  )}\n                </div>\n                <div className=\"glass-text-sm glass-text-secondary\">\n                  {option.description} \u2022 {option.estimatedDays} business days\n                </div>\n              </div>\n            </div>\n            <div className=\"glass-font-medium glass-text-secondary\">\n              {isFree ? \"FREE\" : `$${price.toFixed(2)}`}\n            </div>\n          </label>\n        );\n      })}\n    </div>\n  );\n};\n\nconst PromoCodeInput: React.FC<{\n  onApplyPromo: (code: string) => void;\n  appliedPromo?: { code: string; discount: number };\n}> = ({ onApplyPromo, appliedPromo }) => {\n  const [promoCode, setPromoCode] = useState(\"\");\n  const [isApplying, setIsApplying] = useState(false);\n\n  const handleApply = async () => {\n    if (!promoCode.trim()) return;\n\n    setIsApplying(true);\n    await new Promise((resolve) => setTimeout(resolve, 1000));\n    onApplyPromo(promoCode);\n    setPromoCode(\"\");\n    setIsApplying(false);\n  };\n\n  return (\n    <div className=\"glass-space-y-3\">\n      <h3 className=\"glass-font-medium glass-text-secondary\">Promo Code</h3>\n\n      {appliedPromo ? (\n        <div className=\"glass-flex glass-items-center glass-justify-between glass-p-3 glass-surface-subtle glass-border glass-border-green-200 glass-radius-lg\">\n          <div>\n            <div className=\"glass-font-medium glass-text-primary\">\n              Code \"{appliedPromo.code}\" applied\n            </div>\n            <div className=\"glass-text-sm glass-text-primary\">\n              You save ${appliedPromo.discount.toFixed(2)}\n            </div>\n          </div>\n          <button className=\"glass-text-primary hover:glass-text-primary glass-text-sm glass-underline\">\n            Remove\n          </button>\n        </div>\n      ) : (\n        <div className=\"glass-flex glass-gap-2\">\n          <input\n            type=\"text\"\n            placeholder=\"Enter promo code\"\n            value={promoCode}\n            onChange={(e) => setPromoCode(e.target.value.toUpperCase())}\n            className=\"glass-flex-1 glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500\"\n            onKeyDown={(e) => e.key === \"Enter\" && handleApply()}\n          />\n          <button\n            onClick={handleApply}\n            disabled={!promoCode.trim() || isApplying}\n            className=\"glass-px-4 glass-py-2 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            {isApplying ? \"...\" : \"Apply\"}\n          </button>\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport const GlassSmartShoppingCart: React.FC<SmartShoppingCartProps> = ({\n  className,\n  items,\n  variant = \"sidebar\",\n  showRecommendations = true,\n  showShippingCalculator = true,\n  showPromoCode = true,\n  showSavedItems = false,\n  maxItems = 20,\n  compact = false,\n  contained = false,\n  maxHeight,\n  onCheckout,\n  onClose,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    cart,\n    updateCartItem,\n    removeFromCart,\n    addToWishlist,\n    cartSubtotal,\n    cartTax,\n    cartShipping,\n    cartTotal,\n    getCartItemCount,\n    shippingOptions,\n    selectedShipping,\n    setShippingOption,\n  } = useEcommerce();\n\n  const [appliedPromo, setAppliedPromo] = useState<{\n    code: string;\n    discount: number;\n  }>();\n  const [savedItems, setSavedItems] = useState<CartItem[]>([]);\n  const displayCart = items ?? cart;\n  const displaySubtotal = items\n    ? items.reduce((sum, item) => sum + item.product.price * item.quantity, 0)\n    : cartSubtotal;\n  const displayTax = items ? displaySubtotal * 0.08 : cartTax;\n  const displayShipping = items\n    ? displaySubtotal >= 50\n      ? 0\n      : 9.99\n    : cartShipping;\n  const displayTotal = items\n    ? displaySubtotal + displayTax + displayShipping\n    : cartTotal;\n\n  const handleUpdateQuantity = useCallback(\n    (itemId: string, quantity: number) => {\n      updateCartItem(itemId, quantity);\n    },\n    [updateCartItem]\n  );\n\n  const handleRemove = useCallback(\n    (itemId: string) => {\n      removeFromCart(itemId);\n    },\n    [removeFromCart]\n  );\n\n  const handleMoveToWishlist = useCallback(\n    (itemId: string) => {\n      const item = displayCart.find((cartItem) => cartItem.id === itemId);\n      if (item) {\n        addToWishlist(item.productId);\n        removeFromCart(itemId);\n      }\n    },\n    [displayCart, addToWishlist, removeFromCart]\n  );\n\n  const handleSaveForLater = useCallback(\n    (itemId: string) => {\n      const item = displayCart.find((cartItem) => cartItem.id === itemId);\n      if (item) {\n        setSavedItems((prev: any) => [...prev, item]);\n        removeFromCart(itemId);\n      }\n    },\n    [displayCart, removeFromCart]\n  );\n\n  const handleApplyPromo = useCallback(\n    (code: string) => {\n      // Mock promo code validation\n      const validCodes = {\n        SAVE10: 10,\n        WELCOME20: 20,\n        FREESHIP: displayShipping,\n      };\n\n      if (validCodes[code as keyof typeof validCodes]) {\n        setAppliedPromo({\n          code,\n          discount: validCodes[code as keyof typeof validCodes],\n        });\n      }\n    },\n    [displayShipping]\n  );\n\n  const finalTotal = displayTotal - (appliedPromo?.discount || 0);\n  const itemCount = items\n    ? items.reduce((sum, item) => sum + item.quantity, 0)\n    : getCartItemCount();\n  const boundedHeight = maxHeight ?? (compact || contained ? 260 : undefined);\n  const effectiveMaxItems = compact ? Math.min(maxItems, 3) : maxItems;\n  const effectiveShowShipping = compact ? false : showShippingCalculator;\n  const effectiveShowPromo = compact ? false : showPromoCode;\n  const effectiveShowSaved = compact ? false : showSavedItems;\n\n  if (displayCart.length === 0) {\n    return (\n      <Glass\n        className={cn(compact ? \"glass-p-4\" : \"p-6\", className)}\n        data-testid={dataTestId}\n      >\n        <div className=\"glass-text-center\">\n          <div className=\"glass-text-6xl glass-mb-4\">\uD83D\uDED2</div>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-secondary glass-mb-2\">\n            Your cart is empty\n          </h2>\n          <p className=\"glass-text-secondary glass-mb-6\">\n            Looks like you haven't added any items to your cart yet.\n          </p>\n          <button\n            onClick={onClose}\n            className=\"glass-px-6 glass-py-3 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            Continue Shopping\n          </button>\n        </div>\n      </Glass>\n    );\n  }\n\n  return (\n    <Glass\n      className={cn(\"overflow-hidden\", className)}\n      style={{\n        ...(boundedHeight !== undefined\n          ? {\n              maxHeight:\n                typeof boundedHeight === \"number\"\n                  ? `${boundedHeight}px`\n                  : boundedHeight,\n            }\n          : null),\n        overflow: compact || contained ? \"auto\" : undefined,\n      }}\n      data-testid={dataTestId}\n    >\n      <div className=\"glass-flex glass-flex-col glass-h-full\">\n        {/* Header */}\n        <div\n          className={cn(\n            \"glass-flex glass-items-center glass-justify-between glass-border-b glass-border-subtle\",\n            compact ? \"glass-p-3\" : \"glass-p-6\"\n          )}\n        >\n          <div>\n            <h2 className=\"glass-text-xl glass-font-semibold glass-text-secondary\">\n              Shopping Cart\n            </h2>\n            <p className=\"glass-text-secondary\">\n              {itemCount} {itemCount === 1 ? \"item\" : \"items\"}\n            </p>\n          </div>\n          {onClose && (\n            <button\n              onClick={onClose}\n              className=\"glass-text-secondary hover:glass-text-secondary glass-p-2 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              \u2715\n            </button>\n          )}\n        </div>\n\n        {/* Cart Items */}\n        <div className=\"glass-flex-1 glass-overflow-y-auto\">\n          <div\n            className={cn(\n              compact ? \"glass-max-h-44\" : \"glass-max-h-96\",\n              \"glass-overflow-y-auto\"\n            )}\n          >\n            {displayCart.slice(0, effectiveMaxItems).map((item: any) => (\n              <CartItemCard\n                key={item.id}\n                item={item}\n                onUpdateQuantity={handleUpdateQuantity}\n                onRemove={handleRemove}\n                onMoveToWishlist={handleMoveToWishlist}\n                onSaveForLater={handleSaveForLater}\n                compact={compact || variant === \"dropdown\"}\n              />\n            ))}\n\n            {displayCart.length > effectiveMaxItems && (\n              <div className=\"glass-p-4 glass-text-center glass-text-secondary\">\n                And {displayCart.length - effectiveMaxItems} more items...\n              </div>\n            )}\n          </div>\n\n          {/* Saved Items */}\n          {effectiveShowSaved && savedItems.length > 0 && (\n            <div className=\"glass-border-t glass-border-subtle glass-p-4\">\n              <h3 className=\"glass-font-medium glass-text-secondary glass-mb-3\">\n                Saved for Later ({savedItems.length})\n              </h3>\n              <div className=\"glass-space-y-2\">\n                {savedItems.map((item: any) => (\n                  <CartItemCard\n                    key={item.id}\n                    item={item}\n                    onUpdateQuantity={() => {}}\n                    onRemove={(id) =>\n                      setSavedItems((prev: any) =>\n                        prev.filter((item: any) => item.id !== id)\n                      )\n                    }\n                    onMoveToWishlist={handleMoveToWishlist}\n                    onSaveForLater={() => {}}\n                    compact\n                  />\n                ))}\n              </div>\n            </div>\n          )}\n        </div>\n\n        {/* Footer */}\n        <div\n          className={cn(\n            \"glass-border-t glass-border-subtle glass-space-y-4\",\n            compact ? \"glass-p-3\" : \"glass-p-6\"\n          )}\n        >\n          {/* Shipping Calculator */}\n          {effectiveShowShipping && (\n            <ShippingCalculator\n              shippingOptions={shippingOptions}\n              selectedShipping={selectedShipping}\n              onShippingSelect={setShippingOption}\n              cartSubtotal={displaySubtotal}\n            />\n          )}\n\n          {/* Promo Code */}\n          {effectiveShowPromo && (\n            <PromoCodeInput\n              onApplyPromo={handleApplyPromo}\n              appliedPromo={appliedPromo}\n            />\n          )}\n\n          {/* Order Summary */}\n          <div className=\"glass-space-y-2 glass-pt-4 glass-border-t glass-border-subtle\">\n            <div className=\"glass-flex glass-justify-between glass-text-sm\">\n              <span>Subtotal:</span>\n              <span>${displaySubtotal.toFixed(2)}</span>\n            </div>\n\n            {displayShipping > 0 && (\n              <div className=\"glass-flex glass-justify-between glass-text-sm\">\n                <span>Shipping:</span>\n                <span>${displayShipping.toFixed(2)}</span>\n              </div>\n            )}\n\n            <div className=\"glass-flex glass-justify-between glass-text-sm\">\n              <span>Tax:</span>\n              <span>${displayTax.toFixed(2)}</span>\n            </div>\n\n            {appliedPromo && (\n              <div className=\"glass-flex glass-justify-between glass-text-sm glass-text-primary\">\n                <span>Promo ({appliedPromo.code}):</span>\n                <span>-${appliedPromo.discount.toFixed(2)}</span>\n              </div>\n            )}\n\n            <div className=\"glass-flex glass-justify-between glass-text-lg glass-font-semibold glass-pt-2 glass-border-t glass-border-subtle\">\n              <span>Total:</span>\n              <span>${finalTotal.toFixed(2)}</span>\n            </div>\n          </div>\n\n          {/* Checkout Button */}\n          <button\n            onClick={onCheckout}\n            className=\"glass-w-full glass-py-3 glass-surface-blue glass-text-primary glass-font-medium glass-radius-lg hover:glass-surface-blue glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n          >\n            Proceed to Checkout\n          </button>\n\n          {/* Security Badge */}\n          <div className=\"glass-flex glass-items-center glass-justify-center glass-gap-2 glass-text-xs glass-text-secondary\">\n            <span>\uD83D\uDD12</span>\n            <span>Secure checkout with 256-bit SSL encryption</span>\n          </div>\n        </div>\n      </div>\n    </Glass>\n  );\n};\n", "\"use client\";\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  useEcommerce,\n  Product,\n  Recommendation,\n} from \"./GlassEcommerceProvider\";\n\nexport interface ProductRecommendationsProps {\n  productId?: string;\n  products?: Array<Partial<Product> & Pick<Product, \"id\" | \"name\" | \"price\">>;\n  title?: string;\n  subtitle?: string;\n  maxItems?: number;\n  variant?: \"grid\" | \"carousel\" | \"list\" | \"compact\";\n  showPrices?: boolean;\n  showRatings?: boolean;\n  showQuickActions?: boolean;\n  recommendationType?:\n    | \"similar\"\n    | \"trending\"\n    | \"personalized\"\n    | \"bought-together\"\n    | \"viewed-together\"\n    | \"all\";\n  className?: string;\n  onProductClick?: (product: Product) => void;\n  \"data-testid\"?: string;\n}\n\ninterface ProductCardProps {\n  recommendation: Recommendation;\n  variant: \"grid\" | \"carousel\" | \"list\" | \"compact\";\n  showPrice?: boolean;\n  showRating?: boolean;\n  showQuickActions?: boolean;\n  onProductClick?: (product: Product) => void;\n  onAddToCart: (productId: string) => void;\n  onAddToWishlist: (productId: string) => void;\n}\n\nconst ProductCard: React.FC<ProductCardProps> = ({\n  recommendation,\n  variant,\n  showPrice = true,\n  showRating = true,\n  showQuickActions = true,\n  onProductClick,\n  onAddToCart,\n  onAddToWishlist,\n}) => {\n  const { product, score, reason, explanation, confidence } = recommendation;\n  const [imageError, setImageError] = useState(false);\n  const [isHovered, setIsHovered] = useState(false);\n\n  const getReasonIcon = (reason: string) => {\n    switch (reason) {\n      case \"similar\":\n        return \"\uD83D\uDD04\";\n      case \"trending\":\n        return \"\uD83D\uDCC8\";\n      case \"personalized\":\n        return \"\uD83C\uDFAF\";\n      case \"bought-together\":\n        return \"\uD83D\uDECD\uFE0F\";\n      case \"viewed-together\":\n        return \"\uD83D\uDC40\";\n      default:\n        return \"\u2728\";\n    }\n  };\n\n  const getReasonColor = (reason: string) => {\n    switch (reason) {\n      case \"similar\":\n        return \"bg-blue-500/20 text-blue-200\";\n      case \"trending\":\n        return \"bg-red-500/20 text-red-200\";\n      case \"personalized\":\n        return \"bg-purple-500/20 text-purple-200\";\n      case \"bought-together\":\n        return \"bg-green-500/20 text-green-200\";\n      case \"viewed-together\":\n        return \"bg-orange-500/20 text-orange-200\";\n      default:\n        return \"bg-white/10 glass-text-secondary\";\n    }\n  };\n\n  const renderCompactCard = () => (\n    <div className=\"glass-flex glass-items-center glass-gap-3 glass-p-3 hover:glass-surface-subtle glass-radius-lg glass-transition-colors\">\n      <img\n        src={\n          imageError\n            ? \"https://via.placeholder.com/60x60?text=No+Image\"\n            : product.thumbnail || product.images[0]\n        }\n        alt={product.name}\n        className=\"glass-w-12 glass-h-12 glass-object-cover glass-radius\"\n        onError={() => setImageError(true)}\n      />\n\n      <div className=\"glass-flex-1 glass-min-glass-w-0\">\n        <h3 className=\"glass-font-medium glass-text-secondary glass-text-sm glass-truncate\">\n          {product.name}\n        </h3>\n        {showPrice && (\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mt-1\">\n            <span className=\"glass-text-sm glass-font-medium glass-text-secondary\">\n              ${product.price.toFixed(2)}\n            </span>\n            {product.originalPrice && product.originalPrice > product.price && (\n              <span className=\"glass-text-xs glass-text-secondary glass-line-through\">\n                ${product.originalPrice.toFixed(2)}\n              </span>\n            )}\n          </div>\n        )}\n      </div>\n\n      {showQuickActions && (\n        <div className=\"glass-flex glass-items-center glass-gap-1\">\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              onAddToWishlist(product.id);\n            }}\n            className=\"glass-p-1 glass-text-secondary hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Add to wishlist\"\n          >\n            \u2661\n          </button>\n          <button\n            onClick={(e) => {\n              e.stopPropagation();\n              onAddToCart(product.id);\n            }}\n            className=\"glass-p-1 glass-text-secondary hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            title=\"Add to cart\"\n          >\n            \uD83D\uDED2\n          </button>\n        </div>\n      )}\n    </div>\n  );\n\n  const renderListCard = () => (\n    <div className=\"glass-flex glass-gap-4 glass-p-4 glass-border glass-border-subtle glass-radius-lg hover:glass-shadow-md glass-transition-all\">\n      <img\n        src={\n          imageError\n            ? \"https://via.placeholder.com/120x120?text=No+Image\"\n            : product.thumbnail || product.images[0]\n        }\n        alt={product.name}\n        className=\"glass-w-20 glass-h-20 glass-object-cover glass-radius\"\n        onError={() => setImageError(true)}\n      />\n\n      <div className=\"glass-flex-1\">\n        <div className=\"glass-flex glass-items-start glass-justify-between glass-mb-2\">\n          <h3 className=\"glass-font-medium glass-text-secondary glass-line-clamp-2\">\n            {product.name}\n          </h3>\n          <div\n            className={cn(\n              \"text-xs px-2 py-1 rounded-full\",\n              getReasonColor(reason)\n            )}\n          >\n            {getReasonIcon(reason)} {reason.replace(\"-\", \" \")}\n          </div>\n        </div>\n\n        <p className=\"glass-text-sm glass-text-secondary glass-mb-3 glass-line-clamp-2\">\n          {explanation}\n        </p>\n\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <div className=\"glass-flex glass-items-center glass-gap-3\">\n            {showPrice && (\n              <div className=\"glass-flex glass-items-center glass-gap-2\">\n                <span className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n                  ${product.price.toFixed(2)}\n                </span>\n                {product.originalPrice &&\n                  product.originalPrice > product.price && (\n                    <span className=\"glass-text-sm glass-text-secondary glass-line-through\">\n                      ${product.originalPrice.toFixed(2)}\n                    </span>\n                  )}\n              </div>\n            )}\n\n            {showRating && (\n              <div className=\"glass-flex glass-items-center glass-gap-1\">\n                <span className=\"glass-text-primary\">\u2605</span>\n                <span className=\"glass-text-sm glass-text-secondary\">\n                  {product.rating.toFixed(1)} ({product.reviewCount})\n                </span>\n              </div>\n            )}\n          </div>\n\n          {showQuickActions && (\n            <div className=\"glass-flex glass-items-center glass-gap-2\">\n              <button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  onAddToWishlist(product.id);\n                }}\n                className=\"glass-px-3 glass-py-1 glass-text-sm glass-text-secondary hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                \u2661 Wishlist\n              </button>\n              <button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  onAddToCart(product.id);\n                }}\n                className=\"glass-px-3 glass-py-1 glass-surface-blue glass-text-primary glass-text-sm glass-radius hover:glass-surface-blue glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Add to Cart\n              </button>\n            </div>\n          )}\n        </div>\n\n        {/* Confidence Indicator */}\n        <div className=\"glass-mt-2 glass-flex glass-items-center glass-gap-2\">\n          <span className=\"glass-text-xs glass-text-secondary\">\n            Match confidence:\n          </span>\n          <div className=\"glass-flex-1 glass-surface-subtle glass-radius-full glass-h-1\">\n            <div\n              className=\"glass-surface-blue glass-h-1 glass-radius-full glass-transition-all\"\n              style={{ width: `${confidence * 100}%` }}\n            />\n          </div>\n          <span className=\"glass-text-xs glass-text-secondary\">\n            {Math.round(confidence * 100)}%\n          </span>\n        </div>\n      </div>\n    </div>\n  );\n\n  const renderGridCard = () => (\n    <div\n      className=\"glass-group glass-relative glass-surface-subtle glass-border glass-border-subtle glass-radius-lg glass-overflow-hidden hover:glass-shadow-lg glass-transition-all glass-duration-300\"\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n    >\n      {/* Product Image */}\n      <div className=\"glass-relative glass-aspect-square glass-overflow-hidden\">\n        <img\n          src={\n            imageError\n              ? \"https://via.placeholder.com/300x300?text=No+Image\"\n              : product.thumbnail || product.images[0]\n          }\n          alt={product.name}\n          className=\"glass-w-full glass-h-full glass-object-cover glass-group-glass-hover-scale-105 glass-transition-transform glass-duration-300\"\n          onError={() => setImageError(true)}\n        />\n\n        {/* Badges */}\n        <div className=\"glass-absolute glass-top-2 glass-left-2 glass-flex glass-flex-col glass-gap-1\">\n          {product.isOnSale && (\n            <span className=\"glass-surface-red glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius\">\n              SALE\n            </span>\n          )}\n          {product.isNew && (\n            <span className=\"glass-surface-green glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius\">\n              NEW\n            </span>\n          )}\n          {product.isBestseller && (\n            <span className=\"glass-surface-yellow glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius\">\n              BESTSELLER\n            </span>\n          )}\n        </div>\n\n        {/* Recommendation Reason */}\n        <div className=\"glass-absolute glass-top-2 glass-right-2\">\n          <div\n            className={cn(\n              \"text-xs px-2 py-1 rounded-full\",\n              getReasonColor(reason)\n            )}\n          >\n            {getReasonIcon(reason)}\n          </div>\n        </div>\n\n        {/* Quick Actions Overlay */}\n        {showQuickActions && (\n          <div\n            className={cn(\n              \"absolute inset-0 bg-black bg-opacity-50 flex items-center justify-center gap-3 transition-opacity duration-300\",\n              isHovered ? \"opacity-100\" : \"opacity-0\"\n            )}\n          >\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                onAddToWishlist(product.id);\n              }}\n              className=\"glass-p-2 glass-surface-subtle glass-radius-full glass-text-secondary hover:glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              title=\"Add to wishlist\"\n            >\n              \u2661\n            </button>\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                onAddToCart(product.id);\n              }}\n              className=\"glass-p-2 glass-surface-blue glass-text-primary glass-radius-full hover:glass-surface-blue glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              title=\"Add to cart\"\n            >\n              \uD83D\uDED2\n            </button>\n          </div>\n        )}\n      </div>\n\n      {/* Product Info */}\n      <div className=\"glass-p-4\">\n        <h3 className=\"glass-font-medium glass-text-secondary glass-mb-2 glass-line-clamp-2\">\n          {product.name}\n        </h3>\n\n        {product.brand && (\n          <p className=\"glass-text-sm glass-text-secondary glass-mb-2\">\n            {product.brand}\n          </p>\n        )}\n\n        {showRating && (\n          <div className=\"glass-flex glass-items-center glass-gap-1 glass-mb-3\">\n            <div className=\"glass-flex glass-text-primary\">\n              {Array.from({ length: 5 }, (_, i) => (\n                <span\n                  key={i}\n                  className={\n                    i < Math.floor(product.rating)\n                      ? \"text-yellow-400\"\n                      : \"text-white/30\"\n                  }\n                >\n                  \u2605\n                </span>\n              ))}\n            </div>\n            <span className=\"glass-text-sm glass-text-secondary\">\n              ({product.reviewCount})\n            </span>\n          </div>\n        )}\n\n        {showPrice && (\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-3\">\n            <span className=\"glass-text-lg glass-font-semibold glass-text-secondary\">\n              ${product.price.toFixed(2)}\n            </span>\n            {product.originalPrice && product.originalPrice > product.price && (\n              <span className=\"glass-text-sm glass-text-secondary glass-line-through\">\n                ${product.originalPrice.toFixed(2)}\n              </span>\n            )}\n          </div>\n        )}\n\n        {/* Reason Explanation */}\n        <p className=\"glass-text-xs glass-text-secondary glass-mb-3\">\n          {explanation}\n        </p>\n\n        {/* Confidence Bar */}\n        <div className=\"glass-flex glass-items-center glass-gap-2\">\n          <span className=\"glass-text-xs glass-text-secondary\">Match:</span>\n          <div className=\"glass-flex-1 glass-surface-subtle glass-radius-full glass-h-1\">\n            <div\n              className=\"glass-surface-blue glass-h-1 glass-radius-full\"\n              style={{ width: `${confidence * 100}%` }}\n            />\n          </div>\n          <span className=\"glass-text-xs glass-text-secondary\">\n            {Math.round(confidence * 100)}%\n          </span>\n        </div>\n      </div>\n    </div>\n  );\n\n  return (\n    <div\n      data-glass-component\n      onClick={() => onProductClick?.(product)}\n      className=\"glass-cursor-pointer\"\n    >\n      {variant === \"compact\" && renderCompactCard()}\n      {variant === \"list\" && renderListCard()}\n      {(variant === \"grid\" || variant === \"carousel\") && renderGridCard()}\n    </div>\n  );\n};\n\nexport const GlassProductRecommendations: React.FC<\n  ProductRecommendationsProps\n> = ({\n  productId,\n  products,\n  title = \"Recommended for You\",\n  subtitle,\n  maxItems = 8,\n  variant = \"grid\",\n  showPrices = true,\n  showRatings = true,\n  showQuickActions = true,\n  recommendationType = \"all\",\n  className,\n  onProductClick,\n  \"data-testid\": dataTestId,\n}) => {\n  const {\n    recommendations,\n    getRecommendations,\n    generateRecommendations,\n    addToCart,\n    addToWishlist,\n  } = useEcommerce();\n\n  const [loading, setLoading] = useState(false);\n  const [currentRecommendations, setCurrentRecommendations] = useState<\n    Recommendation[]\n  >([]);\n  const [currentIndex, setCurrentIndex] = useState(0);\n\n  const explicitRecommendations = useCallback((): Recommendation[] => {\n    return (products || []).slice(0, maxItems).map((product, index) => {\n      const normalizedProduct: Product = {\n        description: \"\",\n        currency: \"USD\",\n        images: [],\n        thumbnail: undefined,\n        category: \"featured\",\n        brand: \"\",\n        rating: 0,\n        reviewCount: 0,\n        stock: 0,\n        tags: [],\n        features: [],\n        availability: \"in-stock\",\n        ...product,\n      } as Product;\n\n      return {\n        productId: normalizedProduct.id,\n        product: normalizedProduct,\n        score: Math.max(0.65, 0.96 - index * 0.08),\n        reason:\n          index === 0 ? \"personalized\" : index === 1 ? \"similar\" : \"trending\",\n        explanation: \"Provided directly to the recommendations surface.\",\n        confidence: Math.max(0.6, 0.92 - index * 0.06),\n      };\n    });\n  }, [products, maxItems]);\n\n  // Load recommendations\n  useEffect(() => {\n    if (products && products.length > 0) {\n      setCurrentRecommendations(explicitRecommendations());\n      return;\n    }\n\n    if (!productId) return;\n\n    const loadRecommendations = async () => {\n      setLoading(true);\n\n      let recs = getRecommendations(productId);\n\n      if (recs.length === 0) {\n        recs = await generateRecommendations(productId);\n      }\n\n      // Filter by recommendation type\n      if (recommendationType !== \"all\") {\n        recs = recs.filter((rec: any) => rec.reason === recommendationType);\n      }\n\n      setCurrentRecommendations(recs.slice(0, maxItems));\n      setLoading(false);\n    };\n\n    loadRecommendations();\n  }, [\n    productId,\n    products,\n    recommendationType,\n    maxItems,\n    getRecommendations,\n    generateRecommendations,\n    explicitRecommendations,\n  ]);\n\n  const handleAddToCart = useCallback(\n    (productId: string) => {\n      addToCart(productId, 1);\n      // You could show a toast notification here\n    },\n    [addToCart]\n  );\n\n  const handleAddToWishlist = useCallback(\n    (productId: string) => {\n      addToWishlist(productId);\n      // You could show a toast notification here\n    },\n    [addToWishlist]\n  );\n\n  const nextSlide = useCallback(() => {\n    setCurrentIndex((prev: any) =>\n      prev + 1 >= Math.ceil(currentRecommendations.length / getItemsPerView())\n        ? 0\n        : prev + 1\n    );\n  }, [currentRecommendations.length]);\n\n  const prevSlide = useCallback(() => {\n    setCurrentIndex((prev: any) =>\n      prev - 1 < 0\n        ? Math.ceil(currentRecommendations.length / getItemsPerView()) - 1\n        : prev - 1\n    );\n  }, [currentRecommendations.length]);\n\n  const getItemsPerView = () => {\n    switch (variant) {\n      case \"carousel\":\n        return 4;\n      case \"grid\":\n        return 8;\n      default:\n        return currentRecommendations.length;\n    }\n  };\n\n  if (loading) {\n    return (\n      <Glass className={cn(\"p-6\", className)}>\n        <div className=\"glass-flex glass-items-center glass-justify-center glass-py-12\">\n          <div className=\"glass-animate-spin glass-radius-full glass-h-12 glass-w-12 glass-border-4 glass-border-blue glass-border-t-transparent\"></div>\n        </div>\n      </Glass>\n    );\n  }\n\n  if (currentRecommendations.length === 0) {\n    return (\n      <Glass className={cn(\"p-6\", className)} data-testid={dataTestId}>\n        <div className=\"glass-text-center glass-py-12\">\n          <div className=\"glass-text-4xl glass-mb-4\">\uD83E\uDD16</div>\n          <h3 className=\"glass-text-lg glass-font-medium glass-text-secondary glass-mb-2\">\n            No recommendations available\n          </h3>\n          <p className=\"glass-text-secondary\">\n            We're still learning about your preferences. Check back later!\n          </p>\n        </div>\n      </Glass>\n    );\n  }\n\n  return (\n    <Glass className={cn(\"p-6\", className)} data-testid={dataTestId}>\n      {/* Header */}\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-6\">\n        <div>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-secondary\">\n            {title}\n          </h2>\n          {subtitle && (\n            <p className=\"glass-text-secondary glass-mt-1\">{subtitle}</p>\n          )}\n        </div>\n\n        {variant === \"carousel\" && (\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <button\n              onClick={prevSlide}\n              className=\"glass-p-2 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              \u2190\n            </button>\n            <span className=\"glass-text-sm glass-text-secondary\">\n              {currentIndex + 1} /{\" \"}\n              {Math.ceil(currentRecommendations.length / getItemsPerView())}\n            </span>\n            <button\n              onClick={nextSlide}\n              className=\"glass-p-2 glass-text-secondary hover:glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              \u2192\n            </button>\n          </div>\n        )}\n      </div>\n\n      {/* Recommendations Grid/Carousel */}\n      <div\n        className={cn(\n          variant === \"grid\" &&\n            \"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6\",\n          variant === \"carousel\" && \"overflow-hidden\",\n          variant === \"list\" && \"space-y-4\",\n          variant === \"compact\" && \"space-y-2\"\n        )}\n      >\n        {variant === \"carousel\" ? (\n          <div\n            className=\"glass-flex glass-transition-transform glass-duration-300\"\n            style={{\n              transform: `translateX(-${currentIndex * 100}%)`,\n              width: `${Math.ceil(currentRecommendations.length / getItemsPerView()) * 100}%`,\n            }}\n          >\n            {Array.from(\n              {\n                length: Math.ceil(\n                  currentRecommendations.length / getItemsPerView()\n                ),\n              },\n              (_, slideIndex) => (\n                <div\n                  key={slideIndex}\n                  className=\"glass-grid glass-grid-cols-4 glass-gap-6 glass-w-full glass-flex-shrink-0\"\n                >\n                  {currentRecommendations\n                    .slice(\n                      slideIndex * getItemsPerView(),\n                      (slideIndex + 1) * getItemsPerView()\n                    )\n                    .map((recommendation: any) => (\n                      <ProductCard\n                        key={recommendation.productId}\n                        recommendation={recommendation}\n                        variant={variant}\n                        showPrice={showPrices}\n                        showRating={showRatings}\n                        showQuickActions={showQuickActions}\n                        onProductClick={onProductClick}\n                        onAddToCart={handleAddToCart}\n                        onAddToWishlist={handleAddToWishlist}\n                      />\n                    ))}\n                </div>\n              )\n            )}\n          </div>\n        ) : (\n          currentRecommendations.map((recommendation: any) => (\n            <ProductCard\n              key={recommendation.productId}\n              recommendation={recommendation}\n              variant={variant}\n              showPrice={showPrices}\n              showRating={showRatings}\n              showQuickActions={showQuickActions}\n              onProductClick={onProductClick}\n              onAddToCart={handleAddToCart}\n              onAddToWishlist={handleAddToWishlist}\n            />\n          ))\n        )}\n      </div>\n\n      {/* AI Insights */}\n      <div className=\"glass-mt-6 glass-p-4 glass-surface-subtle glass-radius-lg\">\n        <div className=\"glass-flex glass-items-start glass-gap-3\">\n          <div className=\"glass-text-2xl\">\uD83E\uDD16</div>\n          <div>\n            <h3 className=\"glass-font-medium glass-text-primary glass-mb-1\">\n              AI Insights\n            </h3>\n            <p className=\"glass-text-sm glass-text-primary\">\n              These recommendations are personalized based on your browsing\n              history, purchase patterns, and preferences similar to users like\n              you. Our AI analyzes {currentRecommendations.length} factors to\n              suggest the best products for you.\n            </p>\n            <div className=\"glass-flex glass-flex-wrap glass-gap-2 glass-mt-3\">\n              {Array.from(\n                new Set(currentRecommendations.map((r: any) => r.reason))\n              ).map((reason: any) => (\n                <span\n                  key={reason}\n                  className={cn(\n                    \"text-xs px-2 py-1 rounded-full\",\n                    getReasonColor(reason)\n                  )}\n                >\n                  {getReasonIcon(reason)} {reason.replace(\"-\", \" \")}\n                </span>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n    </Glass>\n  );\n\n  function getReasonColor(reason: string): string {\n    switch (reason) {\n      case \"similar\":\n        return \"bg-blue-500/20 text-blue-200\";\n      case \"trending\":\n        return \"bg-red-500/20 text-red-200\";\n      case \"personalized\":\n        return \"bg-purple-500/20 text-purple-200\";\n      case \"bought-together\":\n        return \"bg-green-500/20 text-green-200\";\n      case \"viewed-together\":\n        return \"bg-orange-500/20 text-orange-200\";\n      default:\n        return \"bg-white/10 glass-text-secondary\";\n    }\n  }\n\n  function getReasonIcon(reason: string): string {\n    switch (reason) {\n      case \"similar\":\n        return \"\uD83D\uDD04\";\n      case \"trending\":\n        return \"\uD83D\uDCC8\";\n      case \"personalized\":\n        return \"\uD83C\uDFAF\";\n      case \"bought-together\":\n        return \"\uD83D\uDECD\uFE0F\";\n      case \"viewed-together\":\n        return \"\uD83D\uDC40\";\n      default:\n        return \"\u2728\";\n    }\n  }\n};\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 uses in-component mock data.\n *\n * GlassImageProcessingProvider demonstrates an AI image-processing workflow\n * (background removal, enhancement, segmentation). The processing steps are\n * simulated locally and do NOT call a real ML model or image-AI service. Wire it\n * to a real image-processing backend before production use.\n */\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useRef,\n} from \"react\";\n\nexport interface ImageFile {\n  id: string;\n  file: File;\n  name: string;\n  originalName: string;\n  size: number;\n  type: string;\n  width: number;\n  height: number;\n  aspectRatio: number;\n  url: string;\n  thumbnailUrl?: string;\n  uploadedAt: Date;\n  optimizedAt?: Date;\n  metadata: ImageMetadata;\n  editHistory: EditOperation[];\n  cloudUrls?: CloudUrls;\n  tags?: string[];\n  faces?: FaceDetection[];\n}\n\nexport interface ImageMetadata {\n  format: string;\n  quality: number;\n  colorSpace: string;\n  hasAlpha: boolean;\n  dpi?: number;\n  exifData?: Record<string, unknown>;\n  dominantColors: string[];\n  brightness: number;\n  contrast: number;\n  saturation: number;\n  sharpness: number;\n  fileSize: number;\n  compressionRatio?: number;\n}\n\nexport interface EditOperation {\n  id: string;\n  type:\n    | \"crop\"\n    | \"resize\"\n    | \"filter\"\n    | \"color\"\n    | \"rotate\"\n    | \"watermark\"\n    | \"background\";\n  timestamp: Date;\n  parameters: unknown;\n  preview?: string;\n}\n\nexport interface CloudUrls {\n  original: string;\n  optimized: string;\n  thumbnail: string;\n  responsive: {\n    small: string;\n    medium: string;\n    large: string;\n    xlarge: string;\n  };\n}\n\nexport interface FaceDetection {\n  id: string;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  confidence: number;\n  landmarks?: {\n    leftEye: { x: number; y: number };\n    rightEye: { x: number; y: number };\n    nose: { x: number; y: number };\n    mouth: { x: number; y: number };\n  };\n}\n\nexport interface OptimizationOptions {\n  targetSize?: number; // in KB\n  maxWidth?: number;\n  maxHeight?: number;\n  format?: \"auto\" | \"jpeg\" | \"png\" | \"webp\" | \"avif\";\n  quality?: number; // 1-100\n  progressive?: boolean;\n  removeMetadata?: boolean;\n  smartCrop?: boolean;\n  responsiveSizes?: number[];\n}\n\nexport interface FilterOptions {\n  brightness: number; // -100 to 100\n  contrast: number; // -100 to 100\n  saturation: number; // -100 to 100\n  hue: number; // -180 to 180\n  blur: number; // 0 to 10\n  sharpen: number; // 0 to 10\n  noise: number; // 0 to 100\n  vignette: number; // 0 to 100\n  sepia: number; // 0 to 100\n  grayscale: number; // 0 to 100\n}\n\nexport interface WatermarkOptions {\n  text?: string;\n  image?: string;\n  position:\n    | \"top-left\"\n    | \"top-right\"\n    | \"bottom-left\"\n    | \"bottom-right\"\n    | \"center\";\n  opacity: number; // 0 to 100\n  size: number; // 10 to 200 (percentage)\n  rotation: number; // -45 to 45\n  color?: string;\n  font?: string;\n}\n\nexport interface Template {\n  id: string;\n  name: string;\n  category: \"social\" | \"print\" | \"web\" | \"mobile\";\n  width: number;\n  height: number;\n  description: string;\n  thumbnail: string;\n  preset?: Partial<FilterOptions>;\n}\n\nexport interface UploadProgress {\n  imageId: string;\n  progress: number;\n  status: \"uploading\" | \"processing\" | \"optimizing\" | \"completed\" | \"error\";\n  message?: string;\n}\n\ninterface ImageProcessingContextValue {\n  // Image Management\n  images: ImageFile[];\n  addImage: (file: File) => Promise<ImageFile>;\n  addImages: (files: FileList) => Promise<ImageFile[]>;\n  removeImage: (id: string) => void;\n  getImage: (id: string) => ImageFile | undefined;\n  updateImage: (id: string, updates: Partial<ImageFile>) => void;\n\n  // Image Processing\n  optimizeImage: (\n    imageId: string,\n    options?: OptimizationOptions\n  ) => Promise<ImageFile>;\n  batchOptimize: (\n    imageIds: string[],\n    options?: OptimizationOptions\n  ) => Promise<ImageFile[]>;\n\n  // Editing Operations\n  cropImage: (\n    imageId: string,\n    cropArea: { x: number; y: number; width: number; height: number }\n  ) => Promise<ImageFile>;\n  resizeImage: (\n    imageId: string,\n    width: number,\n    height: number,\n    maintainAspect?: boolean\n  ) => Promise<ImageFile>;\n  applyFilter: (\n    imageId: string,\n    filters: Partial<FilterOptions>\n  ) => Promise<ImageFile>;\n  rotateImage: (imageId: string, degrees: number) => Promise<ImageFile>;\n  addWatermark: (\n    imageId: string,\n    watermark: WatermarkOptions\n  ) => Promise<ImageFile>;\n\n  // AI Features\n  detectFaces: (imageId: string) => Promise<FaceDetection[]>;\n  removeBackground: (imageId: string) => Promise<ImageFile>;\n  replaceBackground: (\n    imageId: string,\n    backgroundImage: string | string\n  ) => Promise<ImageFile>;\n  smartCrop: (imageId: string, aspectRatio: number) => Promise<ImageFile>;\n  enhanceImage: (imageId: string) => Promise<ImageFile>;\n  upscaleImage: (imageId: string, factor: number) => Promise<ImageFile>;\n\n  // Batch Operations\n  batchResize: (\n    imageIds: string[],\n    width: number,\n    height: number\n  ) => Promise<ImageFile[]>;\n  batchFilter: (\n    imageIds: string[],\n    filters: Partial<FilterOptions>\n  ) => Promise<ImageFile[]>;\n  batchWatermark: (\n    imageIds: string[],\n    watermark: WatermarkOptions\n  ) => Promise<ImageFile[]>;\n\n  // Cloud Integration\n  uploadToCloud: (\n    imageId: string,\n    provider?: \"aws\" | \"cloudinary\" | \"imgur\"\n  ) => Promise<CloudUrls>;\n  generateResponsiveImages: (\n    imageId: string,\n    sizes: number[]\n  ) => Promise<CloudUrls>;\n\n  // Templates\n  templates: Template[];\n  applyTemplate: (imageId: string, templateId: string) => Promise<ImageFile>;\n  createCustomTemplate: (template: Omit<Template, \"id\">) => Template;\n\n  // Analytics & Insights\n  getOptimizationStats: () => {\n    totalSaved: number;\n    averageReduction: number;\n    imagesProcessed: number;\n    mostUsedFormat: string;\n  };\n  getImageInsights: (imageId: string) => {\n    colorPalette: string[];\n    dominantColor: string;\n    brightness: number;\n    complexity: number;\n    recommendedFormats: string[];\n  };\n\n  // Upload Progress\n  uploadProgresses: UploadProgress[];\n  clearProgress: (imageId: string) => void;\n\n  // Settings\n  defaultOptimizations: OptimizationOptions;\n  setDefaultOptimizations: (options: OptimizationOptions) => void;\n  autoOptimize: boolean;\n  setAutoOptimize: (enabled: boolean) => void;\n}\n\nconst ImageProcessingContext =\n  createContext<ImageProcessingContextValue | null>(null);\n\nconst defaultImageOptimizations: OptimizationOptions = {\n  quality: 85,\n  format: \"auto\",\n  removeMetadata: true,\n  progressive: true,\n};\n\nconst defaultOptimizationStats = {\n  totalSaved: 0,\n  averageReduction: 0,\n  imagesProcessed: 0,\n  mostUsedFormat: \"N/A\",\n};\n\nconst emptyCloudUrls: CloudUrls = {\n  original: \"\",\n  optimized: \"\",\n  thumbnail: \"\",\n  responsive: {\n    small: \"\",\n    medium: \"\",\n    large: \"\",\n    xlarge: \"\",\n  },\n};\n\nconst createStandaloneFile = (name: string, type = \"image/png\"): File => {\n  if (typeof File === \"undefined\") {\n    return { name, size: 0, type } as File;\n  }\n\n  return new File([], name, { type });\n};\n\nconst createStandaloneImage = (\n  imageId: string,\n  file: File = createStandaloneFile(`${imageId}.png`)\n): ImageFile => {\n  const type = file.type || \"image/png\";\n  const name = file.name || `${imageId}.png`;\n\n  return {\n    id: imageId,\n    file,\n    name,\n    originalName: name,\n    size: file.size || 0,\n    type,\n    width: 0,\n    height: 0,\n    aspectRatio: 0,\n    url: \"\",\n    uploadedAt: new Date(0),\n    editHistory: [],\n    metadata: {\n      format: type.split(\"/\")[1] || \"unknown\",\n      quality: 100,\n      colorSpace: \"sRGB\",\n      hasAlpha: type.includes(\"png\"),\n      dominantColors: [],\n      brightness: 0,\n      contrast: 0,\n      saturation: 0,\n      sharpness: 0,\n      fileSize: file.size || 0,\n    },\n    tags: [],\n  };\n};\n\nconst standaloneOperation = async (imageId: string): Promise<ImageFile> =>\n  createStandaloneImage(imageId);\n\n// Default templates for common use cases\nconst defaultTemplates: Template[] = [\n  // Social Media\n  {\n    id: \"instagram_post\",\n    name: \"Instagram Post\",\n    category: \"social\",\n    width: 1080,\n    height: 1080,\n    description: \"Square format perfect for Instagram posts\",\n    thumbnail: \"https://via.placeholder.com/100x100/e91e63/ffffff?text=IG\",\n    preset: { saturation: 10, contrast: 5 },\n  },\n  {\n    id: \"instagram_story\",\n    name: \"Instagram Story\",\n    category: \"social\",\n    width: 1080,\n    height: 1920,\n    description: \"Vertical format for Instagram and Facebook stories\",\n    thumbnail: \"https://via.placeholder.com/56x100/e91e63/ffffff?text=Story\",\n  },\n  {\n    id: \"facebook_cover\",\n    name: \"Facebook Cover\",\n    category: \"social\",\n    width: 1200,\n    height: 630,\n    description: \"Facebook cover photo dimensions\",\n    thumbnail: \"https://via.placeholder.com/100x52/1877f2/ffffff?text=FB\",\n  },\n  {\n    id: \"twitter_header\",\n    name: \"Twitter Header\",\n    category: \"social\",\n    width: 1500,\n    height: 500,\n    description: \"Twitter profile header image\",\n    thumbnail: \"https://via.placeholder.com/100x33/1da1f2/ffffff?text=TW\",\n  },\n\n  // Web\n  {\n    id: \"blog_banner\",\n    name: \"Blog Banner\",\n    category: \"web\",\n    width: 1200,\n    height: 400,\n    description: \"Wide banner for blog posts and articles\",\n    thumbnail: \"https://via.placeholder.com/100x33/6c757d/ffffff?text=Blog\",\n  },\n  {\n    id: \"web_thumbnail\",\n    name: \"Web Thumbnail\",\n    category: \"web\",\n    width: 400,\n    height: 300,\n    description: \"Standard web thumbnail size\",\n    thumbnail: \"https://via.placeholder.com/100x75/17a2b8/ffffff?text=Thumb\",\n  },\n\n  // Print\n  {\n    id: \"business_card\",\n    name: \"Business Card\",\n    category: \"print\",\n    width: 1050,\n    height: 600,\n    description: 'Standard business card size (3.5\" x 2\")',\n    thumbnail: \"https://via.placeholder.com/100x57/28a745/ffffff?text=Card\",\n  },\n  {\n    id: \"poster_a4\",\n    name: \"A4 Poster\",\n    category: \"print\",\n    width: 2480,\n    height: 3508,\n    description: \"A4 poster size at 300 DPI\",\n    thumbnail: \"https://via.placeholder.com/71x100/ffc107/ffffff?text=A4\",\n  },\n];\n\nconst defaultImageProcessingContext: ImageProcessingContextValue = {\n  images: [],\n  addImage: async (file) => createStandaloneImage(\"standalone-image\", file),\n  addImages: async (files) =>\n    Array.from(files)\n      .filter((file) => file.type.startsWith(\"image/\"))\n      .map((file, index) =>\n        createStandaloneImage(`standalone-image-${index}`, file)\n      ),\n  removeImage: () => {},\n  getImage: () => undefined,\n  updateImage: () => {},\n  optimizeImage: standaloneOperation,\n  batchOptimize: async (imageIds) =>\n    imageIds.map((id) => createStandaloneImage(id)),\n  cropImage: standaloneOperation,\n  resizeImage: standaloneOperation,\n  applyFilter: standaloneOperation,\n  rotateImage: standaloneOperation,\n  addWatermark: standaloneOperation,\n  detectFaces: async () => [],\n  removeBackground: standaloneOperation,\n  replaceBackground: standaloneOperation,\n  smartCrop: standaloneOperation,\n  enhanceImage: standaloneOperation,\n  upscaleImage: standaloneOperation,\n  batchResize: async (imageIds) =>\n    imageIds.map((id) => createStandaloneImage(id)),\n  batchFilter: async (imageIds) =>\n    imageIds.map((id) => createStandaloneImage(id)),\n  batchWatermark: async (imageIds) =>\n    imageIds.map((id) => createStandaloneImage(id)),\n  uploadToCloud: async () => emptyCloudUrls,\n  generateResponsiveImages: async () => emptyCloudUrls,\n  templates: defaultTemplates,\n  applyTemplate: standaloneOperation,\n  createCustomTemplate: (template) => ({\n    ...template,\n    id: \"standalone-template\",\n  }),\n  getOptimizationStats: () => defaultOptimizationStats,\n  getImageInsights: () => ({\n    colorPalette: [],\n    dominantColor: \"var(--glass-black)\",\n    brightness: 0,\n    complexity: 0,\n    recommendedFormats: [],\n  }),\n  uploadProgresses: [],\n  clearProgress: () => {},\n  defaultOptimizations: defaultImageOptimizations,\n  setDefaultOptimizations: () => {},\n  autoOptimize: false,\n  setAutoOptimize: () => {},\n};\n\n// Mock AI image processing functions\nconst mockImageProcessor = {\n  async analyzeImage(imageUrl: string): Promise<Partial<ImageMetadata>> {\n    // Simulate AI analysis\n    await new Promise((resolve) => setTimeout(resolve, 1000));\n\n    return {\n      dominantColors: [\"hsl(var(--glass-color-primary))\", \"#1e40af\", \"#93c5fd\"],\n      brightness: 65 + Math.random() * 30,\n      contrast: 50 + Math.random() * 30,\n      saturation: 40 + Math.random() * 40,\n      sharpness: 60 + Math.random() * 30,\n    };\n  },\n\n  async detectFaces(imageUrl: string): Promise<FaceDetection[]> {\n    await new Promise((resolve) => setTimeout(resolve, 1500));\n\n    // Mock face detection - return 0-3 random faces\n    const faceCount = Math.floor(Math.random() * 4);\n    const faces: FaceDetection[] = [];\n\n    for (let i = 0; i < faceCount; i++) {\n      faces.push({\n        id: `face_${i}`,\n        x: Math.random() * 0.7,\n        y: Math.random() * 0.7,\n        width: 0.1 + Math.random() * 0.2,\n        height: 0.1 + Math.random() * 0.2,\n        confidence: 0.7 + Math.random() * 0.3,\n        landmarks: {\n          leftEye: { x: Math.random(), y: Math.random() },\n          rightEye: { x: Math.random(), y: Math.random() },\n          nose: { x: Math.random(), y: Math.random() },\n          mouth: { x: Math.random(), y: Math.random() },\n        },\n      });\n    }\n\n    return faces;\n  },\n\n  async optimizeImage(\n    imageUrl: string,\n    options: OptimizationOptions\n  ): Promise<string> {\n    await new Promise((resolve) => setTimeout(resolve, 2000));\n\n    // In a real implementation, this would call an AI service\n    // For demo, we'll return the same URL with a query parameter\n    return `${imageUrl}?optimized=true&q=${options.quality || 85}`;\n  },\n};\n\nconst IMAGE_SERVICE_URL =\n  process.env.NEXT_PUBLIC_IMAGE_SERVICE_URL || process.env.IMAGE_SERVICE_URL;\n\nconst wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nasync function callImageService<T>(\n  endpoint: string,\n  payload: Record<string, unknown>,\n  attempt: number = 0\n): Promise<T> {\n  if (!IMAGE_SERVICE_URL) {\n    throw new Error(\"IMAGE_SERVICE_URL is not configured\");\n  }\n\n  const normalized = IMAGE_SERVICE_URL.replace(/\\/$/, \"\");\n  const response = await fetch(`${normalized}${endpoint}`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify(payload),\n  });\n\n  if (!response.ok) {\n    if (attempt < 2) {\n      await wait(500 * (attempt + 1));\n      return callImageService<T>(endpoint, payload, attempt + 1);\n    }\n    throw new Error(\n      `Image service request failed (${response.status}): ${response.statusText}`\n    );\n  }\n\n  return (await response.json()) as T;\n}\n\nconst imageProcessor = {\n  async analyzeImage(imageUrl: string): Promise<Partial<ImageMetadata>> {\n    if (!IMAGE_SERVICE_URL) return mockImageProcessor.analyzeImage(imageUrl);\n    try {\n      const result = await callImageService<{\n        metadata?: Partial<ImageMetadata>;\n      }>(\"/analyze\", { imageUrl });\n      return result.metadata || {};\n    } catch {\n      return mockImageProcessor.analyzeImage(imageUrl);\n    }\n  },\n\n  async detectFaces(imageUrl: string): Promise<FaceDetection[]> {\n    if (!IMAGE_SERVICE_URL) return mockImageProcessor.detectFaces(imageUrl);\n    try {\n      const result = await callImageService<{ faces?: FaceDetection[] }>(\n        \"/detect-faces\",\n        { imageUrl }\n      );\n      return result.faces || [];\n    } catch {\n      return mockImageProcessor.detectFaces(imageUrl);\n    }\n  },\n\n  async optimizeImage(\n    imageUrl: string,\n    options: OptimizationOptions\n  ): Promise<string> {\n    if (!IMAGE_SERVICE_URL)\n      return mockImageProcessor.optimizeImage(imageUrl, options);\n    try {\n      const result = await callImageService<{\n        optimizedUrl?: string;\n        url?: string;\n      }>(\"/optimize\", { imageUrl, options });\n      return result.optimizedUrl || result.url || imageUrl;\n    } catch {\n      return mockImageProcessor.optimizeImage(imageUrl, options);\n    }\n  },\n};\n\nexport const ImageProcessingProvider: React.FC<{\n  children: React.ReactNode;\n  className?: string;\n  \"data-testid\"?: string;\n}> = ({ children, className, \"data-testid\": dataTestId }) => {\n  const [images, setImages] = useState<ImageFile[]>([]);\n  const [uploadProgresses, setUploadProgresses] = useState<UploadProgress[]>(\n    []\n  );\n  const [templates] = useState<Template[]>(defaultTemplates);\n  const [defaultOptimizations, setDefaultOptimizations] =\n    useState<OptimizationOptions>({\n      quality: 85,\n      format: \"auto\",\n      removeMetadata: true,\n      progressive: true,\n    });\n  const [autoOptimize, setAutoOptimize] = useState(true);\n\n  const canvasRef = useRef<HTMLCanvasElement>();\n\n  const generateId = useCallback(() => {\n    return `img_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n  }, []);\n\n  const createImageFromFile = useCallback(\n    async (file: File): Promise<ImageFile> => {\n      return new Promise((resolve, reject) => {\n        const img = new Image();\n        const canvas = document.createElement(\"canvas\");\n        const ctx = canvas.getContext(\"2d\");\n\n        img.onload = async () => {\n          canvas.width = img.width;\n          canvas.height = img.height;\n          ctx?.drawImage(img, 0, 0);\n\n          const url = URL.createObjectURL(file);\n          const metadata = await imageProcessor.analyzeImage(url);\n\n          const imageFile: ImageFile = {\n            id: generateId(),\n            file,\n            name: file.name,\n            originalName: file.name,\n            size: file.size,\n            type: file.type,\n            width: img.width,\n            height: img.height,\n            aspectRatio: img.width / img.height,\n            url,\n            uploadedAt: new Date(),\n            editHistory: [],\n            metadata: {\n              format: file.type.split(\"/\")[1],\n              quality: 100,\n              colorSpace: \"sRGB\",\n              hasAlpha: file.type.includes(\"png\"),\n              fileSize: file.size,\n              dominantColors: [\"var(--glass-black)\"],\n              brightness: 50,\n              contrast: 50,\n              saturation: 50,\n              sharpness: 50,\n              ...metadata,\n            },\n            tags: [],\n          };\n\n          resolve(imageFile);\n        };\n\n        img.onerror = () => reject(new Error(\"Failed to load image\"));\n        img.src = URL.createObjectURL(file);\n      });\n    },\n    [generateId]\n  );\n\n  const addImage = useCallback(\n    async (file: File): Promise<ImageFile> => {\n      const imageFile = await createImageFromFile(file);\n\n      setImages((prev) => [...prev, imageFile]);\n\n      // Auto-optimize if enabled\n      if (autoOptimize) {\n        setTimeout(() => {\n          optimizeImage(imageFile.id, defaultOptimizations);\n        }, 100);\n      }\n\n      return imageFile;\n    },\n    [createImageFromFile, autoOptimize, defaultOptimizations]\n  );\n\n  const addImages = useCallback(\n    async (files: FileList): Promise<ImageFile[]> => {\n      const imageFiles: ImageFile[] = [];\n\n      for (let i = 0; i < files.length; i++) {\n        const file = files[i];\n        if (file.type.startsWith(\"image/\")) {\n          try {\n            const imageFile = await createImageFromFile(file);\n            imageFiles.push(imageFile);\n\n            // Update progress\n            setUploadProgresses((prev) => [\n              ...prev,\n              {\n                imageId: imageFile.id,\n                progress: 100,\n                status: \"completed\",\n              },\n            ]);\n          } catch {\n            setUploadProgresses((prev) => [\n              ...prev,\n              {\n                imageId: file.name,\n                progress: 0,\n                status: \"error\",\n                message: \"Image processing failed\",\n              },\n            ]);\n          }\n        }\n      }\n\n      setImages((prev) => [...prev, ...imageFiles]);\n      return imageFiles;\n    },\n    [createImageFromFile]\n  );\n\n  const removeImage = useCallback((id: string) => {\n    setImages((prev) => {\n      const image = prev.find((img) => img.id === id);\n      if (image) {\n        URL.revokeObjectURL(image.url);\n        if (image.thumbnailUrl) {\n          URL.revokeObjectURL(image.thumbnailUrl);\n        }\n      }\n      return prev.filter((img) => img.id !== id);\n    });\n\n    setUploadProgresses((prev) => prev.filter((p) => p.imageId !== id));\n  }, []);\n\n  const getImage = useCallback(\n    (id: string) => {\n      return images.find((img) => img.id === id);\n    },\n    [images]\n  );\n\n  const updateImage = useCallback((id: string, updates: Partial<ImageFile>) => {\n    setImages((prev) =>\n      prev.map((img) => (img.id === id ? { ...img, ...updates } : img))\n    );\n  }, []);\n\n  const optimizeImage = useCallback(\n    async (\n      imageId: string,\n      options: OptimizationOptions = {}\n    ): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      // Update progress\n      setUploadProgresses((prev) => [\n        ...prev,\n        {\n          imageId,\n          progress: 0,\n          status: \"processing\",\n          message: \"Analyzing image...\",\n        },\n      ]);\n\n      const optimizationOptions = { ...defaultOptimizations, ...options };\n\n      try {\n        // Simulate optimization progress\n        for (let progress = 10; progress <= 90; progress += 20) {\n          await new Promise((resolve) => setTimeout(resolve, 200));\n          setUploadProgresses((prev) =>\n            prev.map((p) => (p.imageId === imageId ? { ...p, progress } : p))\n          );\n        }\n\n        const optimizedUrl = await imageProcessor.optimizeImage(\n          image.url,\n          optimizationOptions\n        );\n\n        const optimizedImage: ImageFile = {\n          ...image,\n          url: optimizedUrl,\n          optimizedAt: new Date(),\n          metadata: {\n            ...image.metadata,\n            quality: optimizationOptions.quality || 85,\n            compressionRatio: 0.3 + Math.random() * 0.4,\n          },\n          editHistory: [\n            ...image.editHistory,\n            {\n              id: generateId(),\n              type: \"color\",\n              timestamp: new Date(),\n              parameters: optimizationOptions,\n            },\n          ],\n        };\n\n        setImages((prev) =>\n          prev.map((img) => (img.id === imageId ? optimizedImage : img))\n        );\n\n        setUploadProgresses((prev) =>\n          prev.map((p) =>\n            p.imageId === imageId\n              ? {\n                  ...p,\n                  progress: 100,\n                  status: \"completed\",\n                  message: \"Optimization complete!\",\n                }\n              : p\n          )\n        );\n\n        return optimizedImage;\n      } catch (error) {\n        setUploadProgresses((prev) =>\n          prev.map((p) =>\n            p.imageId === imageId\n              ? { ...p, status: \"error\", message: \"Optimization failed\" }\n              : p\n          )\n        );\n        throw error;\n      }\n    },\n    [getImage, defaultOptimizations, generateId]\n  );\n\n  const batchOptimize = useCallback(\n    async (\n      imageIds: string[],\n      options: OptimizationOptions = {}\n    ): Promise<ImageFile[]> => {\n      const results: ImageFile[] = [];\n\n      for (const imageId of imageIds) {\n        try {\n          const optimized = await optimizeImage(imageId, options);\n          results.push(optimized);\n        } catch {\n          // Continue optimizing remaining images.\n        }\n      }\n\n      return results;\n    },\n    [optimizeImage]\n  );\n\n  const detectFaces = useCallback(\n    async (imageId: string): Promise<FaceDetection[]> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      const faces = await imageProcessor.detectFaces(image.url);\n\n      updateImage(imageId, { faces });\n\n      return faces;\n    },\n    [getImage, updateImage]\n  );\n\n  const applyFilter = useCallback(\n    async (\n      imageId: string,\n      filters: Partial<FilterOptions>\n    ): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      // Simulate filter processing\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n\n      const editOperation: EditOperation = {\n        id: generateId(),\n        type: \"filter\",\n        timestamp: new Date(),\n        parameters: filters,\n      };\n\n      const updatedImage: ImageFile = {\n        ...image,\n        editHistory: [...image.editHistory, editOperation],\n        metadata: {\n          ...image.metadata,\n          brightness: image.metadata.brightness + (filters.brightness || 0),\n          contrast: image.metadata.contrast + (filters.contrast || 0),\n          saturation: image.metadata.saturation + (filters.saturation || 0),\n        },\n      };\n\n      setImages((prev) =>\n        prev.map((img) => (img.id === imageId ? updatedImage : img))\n      );\n\n      return updatedImage;\n    },\n    [getImage, generateId]\n  );\n\n  const cropImage = useCallback(\n    async (\n      imageId: string,\n      cropArea: { x: number; y: number; width: number; height: number }\n    ): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      // Simulate crop processing\n      await new Promise((resolve) => setTimeout(resolve, 800));\n\n      const editOperation: EditOperation = {\n        id: generateId(),\n        type: \"crop\",\n        timestamp: new Date(),\n        parameters: cropArea,\n      };\n\n      const croppedImage: ImageFile = {\n        ...image,\n        width: Math.round(image.width * cropArea.width),\n        height: Math.round(image.height * cropArea.height),\n        aspectRatio: cropArea.width / cropArea.height,\n        editHistory: [...image.editHistory, editOperation],\n      };\n\n      setImages((prev) =>\n        prev.map((img) => (img.id === imageId ? croppedImage : img))\n      );\n\n      return croppedImage;\n    },\n    [getImage, generateId]\n  );\n\n  const resizeImage = useCallback(\n    async (\n      imageId: string,\n      width: number,\n      height: number,\n      maintainAspect = true\n    ): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      let newWidth = width;\n      let newHeight = height;\n\n      if (maintainAspect) {\n        const aspectRatio = image.width / image.height;\n        if (width / height > aspectRatio) {\n          newWidth = height * aspectRatio;\n        } else {\n          newHeight = width / aspectRatio;\n        }\n      }\n\n      await new Promise((resolve) => setTimeout(resolve, 600));\n\n      const editOperation: EditOperation = {\n        id: generateId(),\n        type: \"resize\",\n        timestamp: new Date(),\n        parameters: { width: newWidth, height: newHeight, maintainAspect },\n      };\n\n      const resizedImage: ImageFile = {\n        ...image,\n        width: Math.round(newWidth),\n        height: Math.round(newHeight),\n        aspectRatio: newWidth / newHeight,\n        editHistory: [...image.editHistory, editOperation],\n      };\n\n      setImages((prev) =>\n        prev.map((img) => (img.id === imageId ? resizedImage : img))\n      );\n\n      return resizedImage;\n    },\n    [getImage, generateId]\n  );\n\n  const addWatermark = useCallback(\n    async (\n      imageId: string,\n      watermark: WatermarkOptions\n    ): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      await new Promise((resolve) => setTimeout(resolve, 1200));\n\n      const editOperation: EditOperation = {\n        id: generateId(),\n        type: \"watermark\",\n        timestamp: new Date(),\n        parameters: watermark,\n      };\n\n      const watermarkedImage: ImageFile = {\n        ...image,\n        editHistory: [...image.editHistory, editOperation],\n      };\n\n      setImages((prev) =>\n        prev.map((img) => (img.id === imageId ? watermarkedImage : img))\n      );\n\n      return watermarkedImage;\n    },\n    [getImage, generateId]\n  );\n\n  const removeBackground = useCallback(\n    async (imageId: string): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      await new Promise((resolve) => setTimeout(resolve, 3000));\n\n      const editOperation: EditOperation = {\n        id: generateId(),\n        type: \"background\",\n        timestamp: new Date(),\n        parameters: { action: \"remove\" },\n      };\n\n      const processedImage: ImageFile = {\n        ...image,\n        metadata: { ...image.metadata, hasAlpha: true },\n        editHistory: [...image.editHistory, editOperation],\n      };\n\n      setImages((prev) =>\n        prev.map((img) => (img.id === imageId ? processedImage : img))\n      );\n\n      return processedImage;\n    },\n    [getImage, generateId]\n  );\n\n  const smartCrop = useCallback(\n    async (imageId: string, aspectRatio: number): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      // If faces are detected, use them for smart cropping\n      let faces = image.faces;\n      if (!faces || faces.length === 0) {\n        faces = await detectFaces(imageId);\n      }\n\n      let cropArea;\n      if (faces.length > 0) {\n        // Center crop around faces\n        const facesCenterX =\n          faces.reduce((sum, face) => sum + face.x + face.width / 2, 0) /\n          faces.length;\n        const facesCenterY =\n          faces.reduce((sum, face) => sum + face.y + face.height / 2, 0) /\n          faces.length;\n\n        const currentAspect = image.width / image.height;\n\n        if (aspectRatio > currentAspect) {\n          // Crop height\n          const newHeight = image.width / aspectRatio;\n          cropArea = {\n            x: 0,\n            y: Math.max(0, facesCenterY - newHeight / 2),\n            width: 1,\n            height: newHeight / image.height,\n          };\n        } else {\n          // Crop width\n          const newWidth = image.height * aspectRatio;\n          cropArea = {\n            x: Math.max(0, facesCenterX - newWidth / 2),\n            y: 0,\n            width: newWidth / image.width,\n            height: 1,\n          };\n        }\n      } else {\n        // Center crop\n        const currentAspect = image.width / image.height;\n\n        if (aspectRatio > currentAspect) {\n          const newHeight = image.width / aspectRatio;\n          cropArea = {\n            x: 0,\n            y: (image.height - newHeight) / 2 / image.height,\n            width: 1,\n            height: newHeight / image.height,\n          };\n        } else {\n          const newWidth = image.height * aspectRatio;\n          cropArea = {\n            x: (image.width - newWidth) / 2 / image.width,\n            y: 0,\n            width: newWidth / image.width,\n            height: 1,\n          };\n        }\n      }\n\n      return cropImage(imageId, cropArea);\n    },\n    [getImage, detectFaces, cropImage]\n  );\n\n  const enhanceImage = useCallback(\n    async (imageId: string): Promise<ImageFile> => {\n      const image = getImage(imageId);\n      if (!image) throw new Error(\"Image not found\");\n\n      // Apply AI enhancement (brightness, contrast, sharpness optimization)\n      const enhancementFilters: Partial<FilterOptions> = {\n        brightness: Math.max(\n          -20,\n          Math.min(20, 10 - image.metadata.brightness * 0.2)\n        ),\n        contrast: Math.max(\n          -20,\n          Math.min(20, 15 - image.metadata.contrast * 0.3)\n        ),\n        sharpen: Math.max(0, Math.min(10, 8 - image.metadata.sharpness * 0.1)),\n        saturation: Math.max(\n          -15,\n          Math.min(15, 5 - image.metadata.saturation * 0.15)\n        ),\n      };\n\n      return applyFilter(imageId, enhancementFilters);\n    },\n    [getImage, applyFilter]\n  );\n\n  const getOptimizationStats = useCallback(() => {\n    const processedImages = images.filter(\n      (img) => img.metadata.compressionRatio\n    );\n    const totalOriginalSize = processedImages.reduce(\n      (sum, img) => sum + img.size,\n      0\n    );\n    const totalOptimizedSize = processedImages.reduce(\n      (sum, img) => sum + img.size * (1 - (img.metadata.compressionRatio || 0)),\n      0\n    );\n\n    return {\n      totalSaved: Math.round((totalOriginalSize - totalOptimizedSize) / 1024), // KB\n      averageReduction:\n        processedImages.length > 0\n          ? Math.round(\n              (processedImages.reduce(\n                (sum, img) => sum + (img.metadata.compressionRatio || 0),\n                0\n              ) /\n                processedImages.length) *\n                100\n            )\n          : 0,\n      imagesProcessed: processedImages.length,\n      mostUsedFormat: \"JPEG\", // Mock data\n    };\n  }, [images]);\n\n  const clearProgress = useCallback((imageId: string) => {\n    setUploadProgresses((prev) => prev.filter((p) => p.imageId !== imageId));\n  }, []);\n\n  // Placeholder implementations for other methods\n  const rotateImage = useCallback(\n    async (imageId: string, degrees: number): Promise<ImageFile> => {\n      // Implementation would go here\n      return getImage(imageId)!;\n    },\n    [getImage]\n  );\n\n  const replaceBackground = useCallback(\n    async (imageId: string, backgroundImage: string): Promise<ImageFile> => {\n      // Implementation would go here\n      return getImage(imageId)!;\n    },\n    [getImage]\n  );\n\n  const upscaleImage = useCallback(\n    async (imageId: string, factor: number): Promise<ImageFile> => {\n      // Implementation would go here\n      return getImage(imageId)!;\n    },\n    [getImage]\n  );\n\n  const batchResize = useCallback(\n    async (\n      imageIds: string[],\n      width: number,\n      height: number\n    ): Promise<ImageFile[]> => {\n      const results: ImageFile[] = [];\n      for (const imageId of imageIds) {\n        try {\n          const resized = await resizeImage(imageId, width, height);\n          results.push(resized);\n        } catch {\n          // Continue resizing remaining images.\n        }\n      }\n      return results;\n    },\n    [resizeImage]\n  );\n\n  const batchFilter = useCallback(\n    async (\n      imageIds: string[],\n      filters: Partial<FilterOptions>\n    ): Promise<ImageFile[]> => {\n      const results: ImageFile[] = [];\n      for (const imageId of imageIds) {\n        try {\n          const filtered = await applyFilter(imageId, filters);\n          results.push(filtered);\n        } catch {\n          // Continue filtering remaining images.\n        }\n      }\n      return results;\n    },\n    [applyFilter]\n  );\n\n  const batchWatermark = useCallback(\n    async (\n      imageIds: string[],\n      watermark: WatermarkOptions\n    ): Promise<ImageFile[]> => {\n      const results: ImageFile[] = [];\n      for (const imageId of imageIds) {\n        try {\n          const watermarked = await addWatermark(imageId, watermark);\n          results.push(watermarked);\n        } catch {\n          // Continue watermarking remaining images.\n        }\n      }\n      return results;\n    },\n    [addWatermark]\n  );\n\n  const uploadToCloud = useCallback(\n    async (imageId: string, provider = \"cloudinary\"): Promise<CloudUrls> => {\n      // Mock cloud upload\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n\n      const baseUrl = `https://${provider}.example.com`;\n      return {\n        original: `${baseUrl}/original/${imageId}`,\n        optimized: `${baseUrl}/optimized/${imageId}`,\n        thumbnail: `${baseUrl}/thumb/${imageId}`,\n        responsive: {\n          small: `${baseUrl}/w_400/${imageId}`,\n          medium: `${baseUrl}/w_800/${imageId}`,\n          large: `${baseUrl}/w_1200/${imageId}`,\n          xlarge: `${baseUrl}/w_1600/${imageId}`,\n        },\n      };\n    },\n    []\n  );\n\n  const generateResponsiveImages = useCallback(\n    async (imageId: string, sizes: number[]): Promise<CloudUrls> => {\n      return uploadToCloud(imageId);\n    },\n    [uploadToCloud]\n  );\n\n  const applyTemplate = useCallback(\n    async (imageId: string, templateId: string): Promise<ImageFile> => {\n      const template = templates.find((t) => t.id === templateId);\n      if (!template) throw new Error(\"Template not found\");\n\n      let result = await resizeImage(\n        imageId,\n        template.width,\n        template.height,\n        false\n      );\n\n      if (template.preset) {\n        result = await applyFilter(imageId, template.preset);\n      }\n\n      return result;\n    },\n    [templates, resizeImage, applyFilter]\n  );\n\n  const createCustomTemplate = useCallback(\n    (template: Omit<Template, \"id\">): Template => {\n      const newTemplate: Template = {\n        ...template,\n        id: generateId(),\n      };\n      // In a real app, you'd save this to state or backend\n      return newTemplate;\n    },\n    [generateId]\n  );\n\n  const getImageInsights = useCallback(\n    (imageId: string) => {\n      const image = getImage(imageId);\n      if (!image)\n        return {\n          colorPalette: [],\n          dominantColor: \"var(--glass-black)\",\n          brightness: 0,\n          complexity: 0,\n          recommendedFormats: [],\n        };\n\n      return {\n        colorPalette: image.metadata.dominantColors,\n        dominantColor: image.metadata.dominantColors[0] || \"var(--glass-black)\",\n        brightness: image.metadata.brightness,\n        complexity: Math.random() * 100, // Mock complexity score\n        recommendedFormats: image.metadata.hasAlpha\n          ? [\"PNG\", \"WebP\"]\n          : [\"JPEG\", \"WebP\", \"AVIF\"],\n      };\n    },\n    [getImage]\n  );\n\n  const value: ImageProcessingContextValue = {\n    images,\n    addImage,\n    addImages,\n    removeImage,\n    getImage,\n    updateImage,\n    optimizeImage,\n    batchOptimize,\n    cropImage,\n    resizeImage,\n    applyFilter,\n    rotateImage,\n    addWatermark,\n    detectFaces,\n    removeBackground,\n    replaceBackground,\n    smartCrop,\n    enhanceImage,\n    upscaleImage,\n    batchResize,\n    batchFilter,\n    batchWatermark,\n    uploadToCloud,\n    generateResponsiveImages,\n    templates,\n    applyTemplate,\n    createCustomTemplate,\n    getOptimizationStats,\n    getImageInsights,\n    uploadProgresses,\n    clearProgress,\n    defaultOptimizations,\n    setDefaultOptimizations,\n    autoOptimize,\n    setAutoOptimize,\n  };\n\n  return (\n    <ImageProcessingContext.Provider data-glass-component value={value}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </ImageProcessingContext.Provider>\n  );\n};\n\nexport { ImageProcessingProvider as GlassImageProcessingProvider };\n\nexport const useImageProcessing = () => {\n  const context = useContext(ImageProcessingContext);\n  return context ?? defaultImageProcessingContext;\n};\n", "\"use client\";\nimport React, { useState, useCallback, useRef, useEffect } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  useImageProcessing,\n  ImageFile,\n  FilterOptions,\n  WatermarkOptions,\n  Template,\n  OptimizationOptions,\n} from \"./GlassImageProcessingProvider\";\n\nexport interface IntelligentImageUploaderProps {\n  className?: string;\n  maxFiles?: number;\n  acceptedFormats?: string[];\n  maxFileSize?: number; // MB\n  showEditor?: boolean;\n  showOptimization?: boolean;\n  showTemplates?: boolean;\n  showAIFeatures?: boolean;\n  compact?: boolean;\n  onImagesUploaded?: (images: ImageFile[]) => void;\n  onImageEdited?: (image: ImageFile) => void;\n  \"data-testid\"?: string;\n  \"aria-label\"?: string;\n}\n\ninterface ImageEditorProps {\n  image: ImageFile;\n  onSave: (image: ImageFile) => void;\n  onClose: () => void;\n}\n\nconst ImageEditor: React.FC<ImageEditorProps> = ({\n  image,\n  onSave,\n  onClose,\n}) => {\n  const {\n    optimizeImage,\n    applyFilter,\n    cropImage,\n    resizeImage,\n    addWatermark,\n    detectFaces,\n    removeBackground,\n    enhanceImage,\n    smartCrop,\n    templates,\n    applyTemplate,\n  } = useImageProcessing();\n\n  const [activeTab, setActiveTab] = useState<\n    \"basic\" | \"filters\" | \"ai\" | \"templates\"\n  >(\"basic\");\n  const [isProcessing, setIsProcessing] = useState(false);\n  const [filters, setFilters] = useState<Partial<FilterOptions>>({\n    brightness: 0,\n    contrast: 0,\n    saturation: 0,\n    hue: 0,\n    blur: 0,\n    sharpen: 0,\n  });\n\n  const handleOptimize = async () => {\n    setIsProcessing(true);\n    try {\n      const optimized = await optimizeImage(image.id, { quality: 85 });\n      onSave(optimized);\n    } catch {\n      // Keep the editor open so the user can retry.\n    } finally {\n      setIsProcessing(false);\n    }\n  };\n\n  const handleFilterChange = async (\n    filterType: keyof FilterOptions,\n    value: number\n  ) => {\n    const newFilters = { ...filters, [filterType]: value };\n    setFilters(newFilters);\n\n    try {\n      await applyFilter(image.id, { [filterType]: value });\n    } catch {\n      // Ignore failed previews; subsequent filter changes can retry.\n    }\n  };\n\n  const handleAIEnhance = async () => {\n    setIsProcessing(true);\n    try {\n      const enhanced = await enhanceImage(image.id);\n      onSave(enhanced);\n    } catch {\n      // Keep the editor open so the user can retry.\n    } finally {\n      setIsProcessing(false);\n    }\n  };\n\n  const handleRemoveBackground = async () => {\n    setIsProcessing(true);\n    try {\n      const processed = await removeBackground(image.id);\n      onSave(processed);\n    } catch {\n      // Keep the editor open so the user can retry.\n    } finally {\n      setIsProcessing(false);\n    }\n  };\n\n  const handleTemplateApply = async (templateId: string) => {\n    setIsProcessing(true);\n    try {\n      const templated = await applyTemplate(image.id, templateId);\n      onSave(templated);\n    } catch {\n      // Keep the editor open so the user can retry.\n    } finally {\n      setIsProcessing(false);\n    }\n  };\n\n  return (\n    <div\n      data-glass-component\n      className=\"glass-fixed glass-inset-0 glass-z-50 glass-flex glass-items-center glass-justify-center glass-surface-dark glass-bg-glass-opacity-75\"\n    >\n      <Glass className=\"glass-w-full glass-max-w-6xl glass-max-h-90vh glass-m-4 glass-overflow-hidden\">\n        <div className=\"glass-flex glass-h-full\">\n          {/* Image Preview */}\n          <div className=\"glass-flex-1 glass-flex glass-items-center glass-justify-center glass-surface-subtle glass-p-4\">\n            <div className=\"glass-relative glass-max-w-full glass-max-h-full\">\n              <img\n                src={image.url}\n                alt={image.name}\n                className=\"glass-max-w-full glass-max-h-full glass-object-contain\"\n                ref={(el) => {\n                  if (el) el.style.maxHeight = \"70vh\";\n                }}\n              />\n              {isProcessing && (\n                <div className=\"glass-absolute glass-inset-0 glass-surface-dark glass-opacity-50 glass-flex glass-items-center glass-justify-center\">\n                  <div className=\"glass-surface-subtle glass-radius-lg glass-p-4 glass-flex glass-items-center glass-gap-3\">\n                    <div className=\"glass-animate-spin glass-w-6 glass-h-6 glass-border-2 glass-border-blue glass-border-t-transparent glass-radius-full\"></div>\n                    <span>Processing...</span>\n                  </div>\n                </div>\n              )}\n            </div>\n          </div>\n\n          {/* Controls Panel */}\n          <div className=\"glass-w-80 glass-border-l glass-border-subtle glass-flex glass-flex-col\">\n            {/* Header */}\n            <div className=\"glass-p-4 glass-border-b glass-border-subtle\">\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <h3 className=\"glass-text-lg glass-font-semibold\">\n                  {image.name}\n                </h3>\n                <button\n                  onClick={onClose}\n                  className=\"glass-text-secondary hover:glass-text-secondary glass-p-1 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  \u2715\n                </button>\n              </div>\n              <div className=\"glass-text-sm glass-text-secondary glass-mt-1\">\n                {image.width} \u00D7 {image.height} \u2022{\" \"}\n                {(image.size / 1024).toFixed(1)} KB\n              </div>\n            </div>\n\n            {/* Tabs */}\n            <div className=\"glass-flex glass-border-b glass-border-subtle\">\n              {[\n                { key: \"basic\", label: \"Basic\", icon: \"\u2699\uFE0F\" },\n                { key: \"filters\", label: \"Filters\", icon: \"\uD83C\uDFA8\" },\n                { key: \"ai\", label: \"AI\", icon: \"\uD83E\uDD16\" },\n                { key: \"templates\", label: \"Templates\", icon: \"\uD83D\uDCD0\" },\n              ].map((tab: any) => (\n                <button\n                  key={tab.key}\n                  onClick={() => setActiveTab(tab.key as any)}\n                  className={cn(\n                    \"flex-1 flex items-center justify-center gap-1 py-3 text-sm font-medium glass-transition\",\n                    activeTab === tab.key\n                      ? \"glass-text-primary glass-border-b-2 glass-border glass-surface-primary/10\"\n                      : \"glass-text-secondary hover:glass-text-primary\"\n                  )}\n                >\n                  <span className=\"glass-text-xs\">{tab.icon}</span>\n                  {tab.label}\n                </button>\n              ))}\n            </div>\n\n            {/* Tab Content */}\n            <div className=\"glass-flex-1 glass-overflow-y-auto glass-p-4\">\n              {activeTab === \"basic\" && (\n                <div className=\"glass-space-y-4\">\n                  <div>\n                    <h4 className=\"glass-font-medium glass-mb-3\">\n                      Optimization\n                    </h4>\n                    <button\n                      onClick={handleOptimize}\n                      disabled={isProcessing}\n                      className=\"glass-w-full glass-py-2 glass-surface-blue glass-text-primary glass-radius hover:glass-surface-blue disabled:glass-opacity-50 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                      aria-label=\"Run smart optimization\"\n                    >\n                      {isProcessing ? \"Optimizing...\" : \"Smart Optimize\"}\n                    </button>\n                    <p className=\"glass-text-xs glass-text-secondary glass-mt-2\">\n                      Reduces file size while maintaining quality\n                    </p>\n                  </div>\n\n                  <div>\n                    <h4 className=\"glass-font-medium glass-mb-3\">\n                      Quick Actions\n                    </h4>\n                    <div className=\"glass-space-y-2\">\n                      <button\n                        className=\"glass-w-full glass-py-2 glass-border glass-border-subtle glass-radius hover:glass-surface-subtle glass-transition-colors glass-focus\"\n                        aria-label=\"Crop and resize image\"\n                      >\n                        Crop & Resize\n                      </button>\n                      <button\n                        className=\"glass-w-full glass-py-2 glass-border glass-border-subtle glass-radius hover:glass-surface-subtle glass-transition-colors glass-focus\"\n                        aria-label=\"Add watermark\"\n                      >\n                        Add Watermark\n                      </button>\n                      <button className=\"glass-w-full glass-py-2 glass-border glass-border-subtle glass-radius hover:glass-surface-subtle glass-transition-colors\">\n                        Download\n                      </button>\n                    </div>\n                  </div>\n\n                  <div>\n                    <h4 className=\"glass-font-medium glass-mb-3\">Image Info</h4>\n                    <div className=\"glass-space-y-2 glass-text-sm\">\n                      <div className=\"glass-flex glass-justify-between\">\n                        <span className=\"glass-text-secondary\">Format:</span>\n                        <span>{image.metadata.format.toUpperCase()}</span>\n                      </div>\n                      <div className=\"glass-flex glass-justify-between\">\n                        <span className=\"glass-text-secondary\">Quality:</span>\n                        <span>{image.metadata.quality}%</span>\n                      </div>\n                      <div className=\"glass-flex glass-justify-between\">\n                        <span className=\"glass-text-secondary\">\n                          Color Space:\n                        </span>\n                        <span>{image.metadata.colorSpace}</span>\n                      </div>\n                      <div className=\"glass-flex glass-justify-between\">\n                        <span className=\"glass-text-secondary\">Has Alpha:</span>\n                        <span>{image.metadata.hasAlpha ? \"Yes\" : \"No\"}</span>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              )}\n\n              {activeTab === \"filters\" && (\n                <div className=\"glass-space-y-4\">\n                  <h4 className=\"glass-font-medium glass-mb-3\">\n                    Adjust Filters\n                  </h4>\n\n                  {Object.entries(filters).map(([key, value]) => (\n                    <div key={key}>\n                      <div className=\"glass-flex glass-justify-between glass-mb-2\">\n                        <label className=\"glass-text-sm glass-font-medium glass-capitalize\">\n                          {key}\n                        </label>\n                        <span className=\"glass-text-sm glass-text-secondary\">\n                          {value}\n                        </span>\n                      </div>\n                      <input\n                        type=\"range\"\n                        min={key === \"blur\" || key === \"sharpen\" ? 0 : -100}\n                        max={key === \"blur\" || key === \"sharpen\" ? 10 : 100}\n                        value={value}\n                        onChange={(e) =>\n                          handleFilterChange(\n                            key as keyof FilterOptions,\n                            Number(e.target.value)\n                          )\n                        }\n                        className=\"glass-w-full\"\n                      />\n                    </div>\n                  ))}\n\n                  <button\n                    onClick={() =>\n                      setFilters({\n                        brightness: 0,\n                        contrast: 0,\n                        saturation: 0,\n                        hue: 0,\n                        blur: 0,\n                        sharpen: 0,\n                      })\n                    }\n                    className=\"glass-w-full glass-py-2 glass-border glass-border-subtle glass-radius hover:glass-surface-subtle glass-transition-colors\"\n                  >\n                    Reset Filters\n                  </button>\n                </div>\n              )}\n\n              {activeTab === \"ai\" && (\n                <div className=\"glass-space-y-4\">\n                  <h4 className=\"glass-font-medium glass-mb-3\">\n                    AI-Powered Features\n                  </h4>\n\n                  <div className=\"glass-space-y-3\">\n                    <button\n                      onClick={handleAIEnhance}\n                      disabled={isProcessing}\n                      className=\"glass-w-full glass-py-3 glass-surface-primary glass-text-primary glass-radius hover:glass-surface-subtle disabled:glass-opacity-50 glass-transition-colors glass-flex glass-items-center glass-justify-center glass-gap-2 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      <span>\uD83E\uDD16</span>\n                      AI Auto-Enhance\n                    </button>\n\n                    <button\n                      onClick={handleRemoveBackground}\n                      disabled={isProcessing}\n                      className=\"glass-w-full glass-py-3 glass-surface-green glass-text-primary glass-radius hover:glass-surface-green disabled:glass-opacity-50 glass-transition-colors glass-flex glass-items-center glass-justify-center glass-gap-2 glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      <span>\u2702\uFE0F</span>\n                      Remove Background\n                    </button>\n\n                    <button\n                      onClick={() => detectFaces(image.id)}\n                      disabled={isProcessing}\n                      className=\"glass-w-full glass-py-3 glass-surface-primary glass-text-primary glass-radius hover:glass-surface-subtle disabled:glass-opacity-50 glass-transition-colors glass-flex glass-items-center glass-justify-center glass-gap-2\"\n                    >\n                      <span>\uD83D\uDC64</span>\n                      Detect Faces\n                    </button>\n\n                    <button\n                      onClick={() => smartCrop(image.id, 1.0)}\n                      disabled={isProcessing}\n                      className=\"glass-w-full glass-py-3 glass-surface-indigo glass-text-primary glass-radius glass-hover-bg-indigo-700 disabled:glass-opacity-50 glass-transition-colors glass-flex glass-items-center glass-justify-center glass-gap-2\"\n                    >\n                      <span>\uD83C\uDFAF</span>\n                      Smart Crop\n                    </button>\n                  </div>\n\n                  <div className=\"glass-surface-subtle glass-p-3 glass-radius-lg\">\n                    <h5 className=\"glass-font-medium glass-text-primary glass-mb-1\">\n                      AI Insights\n                    </h5>\n                    <p className=\"glass-text-sm glass-text-primary\">\n                      Dominant colors:{\" \"}\n                      {image.metadata.dominantColors.slice(0, 3).join(\", \")}\n                    </p>\n                    <p className=\"glass-text-sm glass-text-primary\">\n                      Brightness: {Math.round(image.metadata.brightness)}% \u2022\n                      Contrast: {Math.round(image.metadata.contrast)}%\n                    </p>\n                  </div>\n                </div>\n              )}\n\n              {activeTab === \"templates\" && (\n                <div className=\"glass-space-y-4\">\n                  <h4 className=\"glass-font-medium glass-mb-3\">Templates</h4>\n\n                  <div className=\"glass-grid glass-grid-cols-2 glass-gap-3\">\n                    {templates.map((template: any) => (\n                      <button\n                        key={template.id}\n                        onClick={() => handleTemplateApply(template.id)}\n                        disabled={isProcessing}\n                        className=\"glass-p-3 glass-border glass-border-subtle glass-radius-lg hover:glass-border-blue hover:glass-surface-subtle glass-transition-colors glass-text-left disabled:glass-opacity-50\"\n                      >\n                        <div className=\"glass-text-sm glass-font-medium\">\n                          {template.name}\n                        </div>\n                        <div className=\"glass-text-xs glass-text-secondary glass-mt-1\">\n                          {template.width} \u00D7 {template.height}\n                        </div>\n                        <div className=\"glass-text-xs glass-text-primary glass-mt-1 glass-capitalize\">\n                          {template.category}\n                        </div>\n                      </button>\n                    ))}\n                  </div>\n                </div>\n              )}\n            </div>\n\n            {/* Footer */}\n            <div className=\"glass-p-4 glass-border-t glass-border-subtle glass-flex glass-gap-2\">\n              <button\n                onClick={onClose}\n                className=\"glass-flex-1 glass-py-2 glass-border glass-border-subtle glass-radius hover:glass-surface-subtle glass-transition-colors glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n              >\n                Cancel\n              </button>\n              <button\n                onClick={() => onSave(image)}\n                className=\"glass-flex-1 glass-py-2 glass-surface-blue glass-text-primary glass-radius hover:glass-surface-blue glass-transition-colors\"\n              >\n                Save Changes\n              </button>\n            </div>\n          </div>\n        </div>\n      </Glass>\n    </div>\n  );\n};\n\nexport const GlassIntelligentImageUploader: React.FC<\n  IntelligentImageUploaderProps\n> = ({\n  className,\n  maxFiles = 10,\n  acceptedFormats = [\n    \"image/jpeg\",\n    \"image/jpg\",\n    \"image/png\",\n    \"image/webp\",\n    \"image/gif\",\n  ],\n  maxFileSize = 10, // MB\n  showEditor = false,\n  showOptimization = false,\n  showTemplates = true,\n  showAIFeatures = false,\n  compact = false,\n  onImagesUploaded,\n  onImageEdited,\n  \"data-testid\": dataTestId,\n  \"aria-label\": ariaLabel,\n}) => {\n  const {\n    images,\n    addImages,\n    removeImage,\n    uploadProgresses,\n    clearProgress,\n    getOptimizationStats,\n    autoOptimize,\n  } = useImageProcessing();\n\n  const [dragActive, setDragActive] = useState(false);\n  const [selectedImage, setSelectedImage] = useState<ImageFile | null>(null);\n  const [showStats, setShowStats] = useState(false);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n\n  const handleDragEnter = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setDragActive(true);\n  }, []);\n\n  const handleDragLeave = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setDragActive(false);\n  }, []);\n\n  const handleDragOver = useCallback((e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n  }, []);\n\n  const handleDrop = useCallback(async (e: React.DragEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    setDragActive(false);\n\n    const files = e.dataTransfer.files;\n    if (files.length > 0) {\n      await handleFiles(files);\n    }\n  }, []);\n\n  const handleFiles = useCallback(\n    async (files: FileList) => {\n      const validFiles = Array.from(files).filter((file: any) => {\n        if (!acceptedFormats.includes(file.type)) {\n          return false;\n        }\n        if (file.size > maxFileSize * 1024 * 1024) {\n          return false;\n        }\n        return true;\n      });\n\n      if (validFiles.length === 0) return;\n\n      const filesToProcess = validFiles.slice(0, maxFiles - images.length);\n      const fileList = new DataTransfer();\n      filesToProcess.forEach((file: any) => fileList.items.add(file));\n\n      try {\n        const uploadedImages = await addImages(fileList.files);\n        onImagesUploaded?.(uploadedImages);\n      } catch {\n        // Upload progress state from the provider surfaces per-file failures.\n      }\n    },\n    [\n      acceptedFormats,\n      maxFileSize,\n      maxFiles,\n      images.length,\n      addImages,\n      onImagesUploaded,\n    ]\n  );\n\n  const handleFileSelect = useCallback(\n    async (e: React.ChangeEvent<HTMLInputElement>) => {\n      if (e.target.files && e.target.files.length > 0) {\n        await handleFiles(e.target.files);\n      }\n    },\n    [handleFiles]\n  );\n\n  const optimizationStats = getOptimizationStats();\n\n  return (\n    <Glass\n      className={cn(\n        \"glass-intelligent-image-uploader glass-p-4 glass-max-w-full glass-overflow-auto\",\n        className\n      )}\n      data-glass-component\n      data-testid={dataTestId}\n      aria-label={ariaLabel}\n      style={{\n        maxHeight: \"100%\",\n        minWidth: 0,\n        padding: compact ? 12 : undefined,\n        overflow: \"hidden\",\n      }}\n    >\n      <div\n        className=\"glass-space-y-3\"\n        style={{ display: \"grid\", gap: compact ? 10 : 12 }}\n      >\n        {/* Header */}\n        <div\n          className=\"glass-flex glass-items-start glass-justify-between glass-gap-3\"\n          style={{ display: compact ? \"none\" : undefined }}\n        >\n          <div className=\"glass-min-w-0\">\n            <h2 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-leading-tight\">\n              \uD83E\uDD16 Intelligent Image Uploader\n            </h2>\n            <p className=\"glass-text-secondary glass-mt-1 glass-text-sm\">\n              AI-powered image optimization and editing\n            </p>\n          </div>\n\n          {showOptimization && (\n            <button\n              onClick={() => setShowStats(!showStats)}\n              className=\"glass-px-3 glass-py-2 glass-surface-subtle glass-text-primary glass-radius-lg hover:glass-surface-subtle glass-transition-colors\"\n            >\n              \uD83D\uDCCA Stats\n            </button>\n          )}\n        </div>\n\n        {/* Stats Panel */}\n        {showStats && showOptimization && (\n          <div className=\"glass-surface-subtle glass-border glass-border-green-200 glass-radius-lg glass-p-4\">\n            <h3 className=\"glass-font-medium glass-text-primary glass-mb-3\">\n              Optimization Statistics\n            </h3>\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-4 glass-gap-4 glass-text-sm\">\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {optimizationStats.totalSaved}KB\n                </div>\n                <div className=\"glass-text-primary\">Total Saved</div>\n              </div>\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {optimizationStats.averageReduction}%\n                </div>\n                <div className=\"glass-text-primary\">Avg. Reduction</div>\n              </div>\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {optimizationStats.imagesProcessed}\n                </div>\n                <div className=\"glass-text-primary\">Images Processed</div>\n              </div>\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-2xl glass-font-bold glass-text-primary\">\n                  {optimizationStats.mostUsedFormat}\n                </div>\n                <div className=\"glass-text-primary\">Most Used Format</div>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Upload Area */}\n        <div\n          className={cn(\n            \"glass-relative glass-border glass-border-dashed glass-radius-lg glass-p-4 glass-text-center glass-transition-colors glass-overflow-hidden\",\n            dragActive\n              ? \"glass-border-blue glass-surface-blue\"\n              : \"glass-border-white/20 glass-surface-subtle/5 hover:glass-border-white/30\"\n          )}\n          style={{\n            padding: compact ? 14 : undefined,\n            minHeight: compact ? 150 : undefined,\n            display: \"flex\",\n            alignItems: \"center\",\n            justifyContent: \"center\",\n          }}\n          onDragEnter={handleDragEnter}\n          onDragLeave={handleDragLeave}\n          onDragOver={handleDragOver}\n          onDrop={handleDrop}\n        >\n          <div className=\"glass-space-y-2\">\n            <div\n              className=\"glass-text-2xl\"\n              style={{ fontSize: compact ? 22 : undefined }}\n            >\n              \uD83D\uDCF8\n            </div>\n            <div>\n              <h3 className=\"glass-text-base glass-font-medium glass-text-primary glass-leading-snug\">\n                Drop images here or click to upload\n              </h3>\n              <p className=\"glass-text-secondary glass-mt-1 glass-text-xs\">\n                Supports JPEG, PNG, WebP, GIF up to {maxFileSize}MB each\n              </p>\n            </div>\n\n            <button\n              onClick={() => fileInputRef.current?.click()}\n              className=\"glass-px-3 glass-py-1.5 glass-surface-blue glass-text-primary glass-radius-lg hover:glass-surface-blue glass-transition-colors glass-text-sm\"\n            >\n              Choose Files\n            </button>\n\n            {showOptimization && autoOptimize && (\n              <div className=\"glass-flex glass-items-center glass-justify-center glass-gap-2 glass-text-xs glass-text-secondary\">\n                <span>\u2705</span>\n                <span>Auto-optimization enabled</span>\n              </div>\n            )}\n          </div>\n\n          <input\n            ref={fileInputRef}\n            type=\"file\"\n            multiple\n            accept={acceptedFormats.join(\",\")}\n            onChange={handleFileSelect}\n            aria-label=\"Upload images\"\n            className=\"glass-hidden glass-touch-target glass-contrast-guard\"\n          />\n        </div>\n\n        {/* Upload Progress */}\n        {uploadProgresses.length > 0 && (\n          <div className=\"glass-space-y-3\">\n            <h3 className=\"glass-font-medium glass-text-secondary\">\n              Processing Images\n            </h3>\n            {uploadProgresses.map((progress: any) => (\n              <div key={progress.imageId} className=\"glass-space-y-2\">\n                <div className=\"glass-flex glass-justify-between glass-text-sm\">\n                  <span>{progress.message || \"Processing...\"}</span>\n                  <span>{progress.progress}%</span>\n                </div>\n                <div className=\"glass-w-full glass-surface-subtle glass-radius-full glass-h-2\">\n                  <div\n                    className={cn(\n                      \"h-2 rounded-full transition-all\",\n                      progress.status === \"error\" ? \"bg-red-500\" : \"bg-blue-500\"\n                    )}\n                    ref={(el) => {\n                      if (el) el.style.width = `${progress.progress}%`;\n                    }}\n                  />\n                </div>\n              </div>\n            ))}\n          </div>\n        )}\n\n        {/* Image Gallery */}\n        {images.length > 0 && (\n          <div className=\"glass-space-y-4\">\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <h3 className=\"glass-font-medium glass-text-secondary\">\n                Uploaded Images ({images.length})\n              </h3>\n              {images.length > 1 && (\n                <div className=\"glass-flex glass-gap-2\">\n                  <button className=\"glass-px-3 glass-py-1 glass-text-sm glass-surface-subtle glass-text-primary glass-radius hover:glass-surface-subtle glass-transition-colors\">\n                    Batch Optimize\n                  </button>\n                  <button className=\"glass-px-3 glass-py-1 glass-text-sm glass-surface-subtle glass-text-primary glass-radius hover:glass-surface-subtle glass-transition-colors\">\n                    Batch Download\n                  </button>\n                </div>\n              )}\n            </div>\n\n            <div className=\"glass-grid glass-grid-cols-2 md:glass-grid-cols-3 lg:glass-grid-cols-4 glass-gap-4\">\n              {images.map((image: any) => (\n                <div key={image.id} className=\"glass-group glass-relative\">\n                  <div className=\"glass-aspect-square glass-surface-subtle glass-radius-lg glass-overflow-hidden\">\n                    <img\n                      src={image.url}\n                      alt={image.name}\n                      className=\"glass-w-full glass-h-full glass-object-cover glass-group-glass-hover-scale-105 glass-transition-transform\"\n                    />\n                  </div>\n\n                  {/* Overlay */}\n                  <div className=\"glass-absolute glass-inset-0 glass-surface-dark glass-bg-glass-opacity-0 glass-group-hover:glass-opacity-50 glass-transition-opacity glass-radius-lg glass-flex glass-items-center glass-justify-center\">\n                    <div className=\"glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-flex glass-gap-2\">\n                      {showEditor && (\n                        <button\n                          onClick={() => setSelectedImage(image)}\n                          className=\"glass-p-2 glass-surface-subtle glass-radius-full glass-text-secondary hover:glass-text-primary glass-transition-colors\"\n                          title=\"Edit Image\"\n                        >\n                          \u270F\uFE0F\n                        </button>\n                      )}\n                      <button\n                        onClick={() => removeImage(image.id)}\n                        className=\"glass-p-2 glass-surface-subtle glass-radius-full glass-text-secondary hover:glass-text-primary glass-transition-colors\"\n                        title=\"Remove Image\"\n                      >\n                        \uD83D\uDDD1\uFE0F\n                      </button>\n                    </div>\n                  </div>\n\n                  {/* Info */}\n                  <div className=\"glass-mt-2 glass-text-xs glass-text-secondary\">\n                    <div className=\"glass-truncate glass-font-medium\">\n                      {image.name}\n                    </div>\n                    <div>\n                      {image.width} \u00D7 {image.height} \u2022{\" \"}\n                      {(image.size / 1024).toFixed(1)}KB\n                    </div>\n                    {image.optimizedAt && (\n                      <div className=\"glass-text-primary\">\u2705 Optimized</div>\n                    )}\n                  </div>\n                </div>\n              ))}\n            </div>\n          </div>\n        )}\n\n        {/* Features Grid */}\n        {showAIFeatures && (\n          <div className=\"glass-grid glass-grid-cols-1 md:glass-grid-cols-3 glass-gap-4\">\n            <div className=\"glass-text-center glass-p-4 glass-surface-subtle glass-radius-lg\">\n              <div className=\"glass-text-2xl glass-mb-2\">\uD83E\uDD16</div>\n              <h3 className=\"glass-font-medium glass-text-primary\">\n                AI Enhancement\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary glass-mt-1\">\n                Automatic brightness, contrast, and sharpness optimization\n              </p>\n            </div>\n            <div className=\"glass-text-center glass-p-4 glass-surface-subtle glass-radius-lg\">\n              <div className=\"glass-text-2xl glass-mb-2\">\u2702\uFE0F</div>\n              <h3 className=\"glass-font-medium glass-text-primary\">\n                Smart Tools\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary glass-mt-1\">\n                Background removal, face detection, and smart cropping\n              </p>\n            </div>\n            <div className=\"glass-text-center glass-p-4 glass-surface-subtle glass-radius-lg\">\n              <div className=\"glass-text-2xl glass-mb-2\">\u26A1</div>\n              <h3 className=\"glass-font-medium glass-text-primary\">\n                Optimization\n              </h3>\n              <p className=\"glass-text-sm glass-text-primary glass-mt-1\">\n                Reduce file sizes by up to 80% while maintaining quality\n              </p>\n            </div>\n          </div>\n        )}\n      </div>\n\n      {/* Image Editor Modal */}\n      {selectedImage && showEditor && (\n        <ImageEditor\n          image={selectedImage}\n          onSave={(editedImage) => {\n            onImageEdited?.(editedImage);\n            setSelectedImage(null);\n          }}\n          onClose={() => setSelectedImage(null)}\n        />\n      )}\n    </Glass>\n  );\n};\n", "\"use client\";\nimport React, {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useRef,\n  useEffect,\n} from \"react\";\n\nexport interface MediaFile {\n  id: string;\n  type: \"audio\" | \"video\";\n  src: string;\n  title?: string;\n  description?: string;\n  duration?: number;\n  thumbnail?: string;\n  poster?: string;\n  size?: number;\n  format?: string;\n  quality?:\n    | \"auto\"\n    | \"144p\"\n    | \"240p\"\n    | \"360p\"\n    | \"480p\"\n    | \"720p\"\n    | \"1080p\"\n    | \"1440p\"\n    | \"2160p\";\n  chapters?: MediaChapter[];\n  subtitles?: MediaSubtitle[];\n  metadata?: Record<string, unknown>;\n}\n\nexport interface MediaChapter {\n  id: string;\n  title: string;\n  startTime: number;\n  endTime: number;\n  thumbnail?: string;\n  description?: string;\n}\n\nexport interface MediaSubtitle {\n  id: string;\n  language: string;\n  label: string;\n  src?: string;\n  content?: SubtitleEntry[];\n  isDefault?: boolean;\n}\n\nexport interface SubtitleEntry {\n  id: string;\n  startTime: number;\n  endTime: number;\n  text: string;\n  speaker?: string;\n  confidence?: number;\n}\n\nexport interface TranscriptEntry {\n  id: string;\n  startTime: number;\n  endTime: number;\n  text: string;\n  speaker?: string;\n  confidence?: number;\n  keywords?: string[];\n  sentiment?: \"positive\" | \"neutral\" | \"negative\";\n  summary?: string;\n}\n\nexport interface MediaAnalytics {\n  totalViews: number;\n  averageWatchTime: number;\n  completionRate: number;\n  engagementPoints: Array<{ time: number; engagement: number }>;\n  heatmapData: Array<{ time: number; views: number }>;\n  deviceStats: Record<string, number>;\n  locationStats: Record<string, number>;\n}\n\nexport interface PlaybackState {\n  mediaId: string;\n  currentTime: number;\n  duration: number;\n  isPlaying: boolean;\n  isLoading: boolean;\n  isError: boolean;\n  volume: number;\n  playbackRate: number;\n  quality: string;\n  isFullscreen: boolean;\n  isMuted: boolean;\n  buffered: TimeRanges | null;\n  activeChapter?: string;\n  activeSubtitle?: string;\n}\n\ninterface MediaContextValue {\n  // Media Management\n  mediaFiles: MediaFile[];\n  addMediaFile: (file: MediaFile) => void;\n  removeMediaFile: (id: string) => void;\n  getMediaFile: (id: string) => MediaFile | undefined;\n  updateMediaFile: (id: string, updates: Partial<MediaFile>) => void;\n\n  // Playback Control\n  playbackState: PlaybackState | null;\n  setPlaybackState: (state: PlaybackState | null) => void;\n\n  // Player Controls\n  play: (mediaId: string) => void;\n  pause: () => void;\n  stop: () => void;\n  seekTo: (time: number) => void;\n  setVolume: (volume: number) => void;\n  setPlaybackRate: (rate: number) => void;\n  toggleMute: () => void;\n  toggleFullscreen: () => void;\n  setQuality: (quality: string) => void;\n\n  // Transcription Features\n  transcripts: Record<string, TranscriptEntry[]>;\n  generateTranscript: (mediaId: string) => Promise<void>;\n  searchTranscript: (mediaId: string, query: string) => TranscriptEntry[];\n  getTranscriptAtTime: (\n    mediaId: string,\n    time: number\n  ) => TranscriptEntry | undefined;\n\n  // Chapter Management\n  setActiveChapter: (mediaId: string, chapterId: string) => void;\n  getChapterAtTime: (mediaId: string, time: number) => MediaChapter | undefined;\n\n  // Subtitle Management\n  setActiveSubtitle: (mediaId: string, subtitleId: string) => void;\n  generateSubtitles: (mediaId: string, language: string) => Promise<void>;\n\n  // Analytics\n  analytics: Record<string, MediaAnalytics>;\n  trackView: (mediaId: string, watchTime: number) => void;\n  trackEngagement: (\n    mediaId: string,\n    time: number,\n    type: \"play\" | \"pause\" | \"seek\" | \"fullscreen\"\n  ) => void;\n\n  // AI Features\n  generateSummary: (mediaId: string) => Promise<string>;\n  identifySpeakers: (mediaId: string) => Promise<string[]>;\n  extractKeywords: (mediaId: string) => Promise<string[]>;\n  analyzeSentiment: (\n    mediaId: string\n  ) => Promise<Record<number, \"positive\" | \"neutral\" | \"negative\">>;\n\n  // Recording Features\n  isRecording: boolean;\n  recordingDevices: MediaDeviceInfo[];\n  startRecording: (\n    type: \"audio\" | \"video\",\n    options?: RecordingOptions\n  ) => Promise<void>;\n  stopRecording: () => Promise<MediaFile | null>;\n  pauseRecording: () => void;\n  resumeRecording: () => void;\n}\n\nexport interface RecordingOptions {\n  audio?: {\n    deviceId?: string;\n    echoCancellation?: boolean;\n    noiseSuppression?: boolean;\n    sampleRate?: number;\n  };\n  video?: {\n    deviceId?: string;\n    width?: number;\n    height?: number;\n    frameRate?: number;\n    facingMode?: \"user\" | \"environment\";\n  };\n  quality?: \"low\" | \"medium\" | \"high\";\n  format?: \"webm\" | \"mp4\" | \"ogg\";\n}\n\nconst MediaContext = createContext<MediaContextValue | null>(null);\n\nconst defaultMediaContext: MediaContextValue = {\n  mediaFiles: [],\n  addMediaFile: () => {},\n  removeMediaFile: () => {},\n  getMediaFile: () => undefined,\n  updateMediaFile: () => {},\n  playbackState: null,\n  setPlaybackState: () => {},\n  play: () => {},\n  pause: () => {},\n  stop: () => {},\n  seekTo: () => {},\n  setVolume: () => {},\n  setPlaybackRate: () => {},\n  toggleMute: () => {},\n  toggleFullscreen: () => {},\n  setQuality: () => {},\n  transcripts: {},\n  generateTranscript: async () => {},\n  searchTranscript: () => [],\n  getTranscriptAtTime: () => undefined,\n  setActiveChapter: () => {},\n  getChapterAtTime: () => undefined,\n  setActiveSubtitle: () => {},\n  generateSubtitles: async () => {},\n  analytics: {},\n  trackView: () => {},\n  trackEngagement: () => {},\n  generateSummary: async () => \"\",\n  identifySpeakers: async () => [],\n  extractKeywords: async () => [],\n  analyzeSentiment: async () => ({}),\n  isRecording: false,\n  recordingDevices: [],\n  startRecording: async () => {},\n  stopRecording: async () => null,\n  pauseRecording: () => {},\n  resumeRecording: () => {},\n};\nconst transcriptSentiments: Array<NonNullable<TranscriptEntry[\"sentiment\"]>> = [\n  \"positive\",\n  \"neutral\",\n  \"negative\",\n];\n\nconst isString = (value: unknown): value is string => typeof value === \"string\";\n\n// Mock transcription service\nconst mockTranscriptionService = {\n  async transcribe(mediaFile: MediaFile): Promise<TranscriptEntry[]> {\n    // Simulate API call delay\n    await new Promise((resolve) => setTimeout(resolve, 2000));\n\n    // Mock transcript data based on media type and duration\n    const duration = mediaFile.duration || 120;\n    const entries: TranscriptEntry[] = [];\n\n    const mockContent = [\n      \"Welcome to our presentation about advanced media components.\",\n      \"Today we'll explore the capabilities of modern web media players.\",\n      \"Our system includes automatic transcription and subtitle generation.\",\n      \"Users can search through transcripts and jump to specific moments.\",\n      \"The AI can identify speakers and analyze sentiment in real-time.\",\n      \"Chapter markers help organize content for better navigation.\",\n      \"Quality adaptation ensures smooth playback on all devices.\",\n      \"Analytics provide insights into user engagement patterns.\",\n      \"This technology represents the future of interactive media.\",\n    ];\n\n    const speakers = [\"Alice Johnson\", \"Bob Smith\", \"Dr. Sarah Chen\"];\n\n    for (\n      let i = 0;\n      i < Math.min(mockContent.length, Math.floor(duration / 15));\n      i++\n    ) {\n      const startTime = i * 15;\n      const endTime = Math.min(startTime + 12, duration);\n\n      entries.push({\n        id: `transcript_${i}`,\n        startTime,\n        endTime,\n        text: mockContent[i] || \"Additional content continues...\",\n        speaker: speakers[i % speakers.length],\n        confidence: 0.85 + Math.random() * 0.15,\n        keywords: [\"media\", \"transcription\", \"AI\", \"technology\"].slice(\n          0,\n          Math.floor(Math.random() * 3) + 1\n        ),\n        sentiment:\n          transcriptSentiments[\n            Math.floor(Math.random() * transcriptSentiments.length)\n          ],\n      });\n    }\n\n    return entries;\n  },\n\n  async generateSummary(transcript: TranscriptEntry[]): Promise<string> {\n    await new Promise((resolve) => setTimeout(resolve, 1500));\n\n    return `This ${transcript.length > 5 ? \"comprehensive\" : \"brief\"} presentation covers advanced media components including automatic transcription, AI-powered analysis, and interactive features. Key topics include speaker identification, sentiment analysis, and user engagement tracking.`;\n  },\n\n  async identifySpeakers(transcript: TranscriptEntry[]): Promise<string[]> {\n    await new Promise((resolve) => setTimeout(resolve, 1000));\n\n    const speakers = [\n      ...new Set(transcript.map((entry) => entry.speaker).filter(isString)),\n    ];\n    return speakers;\n  },\n};\n\nexport const MediaProvider: React.FC<{\n  children: React.ReactNode;\n  className?: string;\n  \"data-testid\"?: string;\n}> = ({ children, className, \"data-testid\": dataTestId }) => {\n  const [mediaFiles, setMediaFiles] = useState<MediaFile[]>([]);\n  const [playbackState, setPlaybackState] = useState<PlaybackState | null>(\n    null\n  );\n  const [transcripts, setTranscripts] = useState<\n    Record<string, TranscriptEntry[]>\n  >({});\n  const [analytics, setAnalytics] = useState<Record<string, MediaAnalytics>>(\n    {}\n  );\n  const [isRecording, setIsRecording] = useState(false);\n  const [recordingDevices, setRecordingDevices] = useState<MediaDeviceInfo[]>(\n    []\n  );\n\n  const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n  const recordedChunksRef = useRef<Blob[]>([]);\n\n  // Initialize recording devices\n  useEffect(() => {\n    const getDevices = async () => {\n      if (\n        typeof navigator === \"undefined\" ||\n        !navigator.mediaDevices ||\n        typeof navigator.mediaDevices.enumerateDevices !== \"function\"\n      ) {\n        setRecordingDevices([]);\n        return;\n      }\n\n      try {\n        const devices = await navigator.mediaDevices.enumerateDevices();\n        setRecordingDevices(\n          devices.filter(\n            (device) =>\n              device.kind === \"audioinput\" || device.kind === \"videoinput\"\n          )\n        );\n      } catch {\n        setRecordingDevices([]);\n      }\n    };\n\n    getDevices();\n  }, []);\n\n  const addMediaFile = useCallback((file: MediaFile) => {\n    setMediaFiles((prev) => [...prev, file]);\n\n    // Initialize analytics\n    setAnalytics((prev) => ({\n      ...prev,\n      [file.id]: {\n        totalViews: 0,\n        averageWatchTime: 0,\n        completionRate: 0,\n        engagementPoints: [],\n        heatmapData: [],\n        deviceStats: {},\n        locationStats: {},\n      },\n    }));\n  }, []);\n\n  const removeMediaFile = useCallback((id: string) => {\n    setMediaFiles((prev) => prev.filter((file) => file.id !== id));\n    setTranscripts((prev) => {\n      const newTranscripts = { ...prev };\n      delete newTranscripts[id];\n      return newTranscripts;\n    });\n    setAnalytics((prev) => {\n      const newAnalytics = { ...prev };\n      delete newAnalytics[id];\n      return newAnalytics;\n    });\n  }, []);\n\n  const getMediaFile = useCallback(\n    (id: string) => {\n      return mediaFiles.find((file) => file.id === id);\n    },\n    [mediaFiles]\n  );\n\n  const updateMediaFile = useCallback(\n    (id: string, updates: Partial<MediaFile>) => {\n      setMediaFiles((prev) =>\n        prev.map((file) => (file.id === id ? { ...file, ...updates } : file))\n      );\n    },\n    []\n  );\n\n  const play = useCallback(\n    (mediaId: string) => {\n      const mediaFile = getMediaFile(mediaId);\n      if (mediaFile) {\n        setPlaybackState((prev) => ({\n          ...prev,\n          mediaId,\n          isPlaying: true,\n          isLoading: false,\n          isError: false,\n          currentTime: prev?.mediaId === mediaId ? prev.currentTime : 0,\n          duration: mediaFile.duration || 0,\n          volume: prev?.volume || 1,\n          playbackRate: prev?.playbackRate || 1,\n          quality: prev?.quality || \"auto\",\n          isFullscreen: prev?.isFullscreen || false,\n          isMuted: prev?.isMuted || false,\n          buffered: null,\n        }));\n\n        trackEngagement(mediaId, playbackState?.currentTime || 0, \"play\");\n      }\n    },\n    [getMediaFile, playbackState]\n  );\n\n  const pause = useCallback(() => {\n    setPlaybackState((prev) => (prev ? { ...prev, isPlaying: false } : null));\n    if (playbackState) {\n      trackEngagement(\n        playbackState.mediaId,\n        playbackState.currentTime,\n        \"pause\"\n      );\n    }\n  }, [playbackState]);\n\n  const stop = useCallback(() => {\n    setPlaybackState(null);\n  }, []);\n\n  const seekTo = useCallback(\n    (time: number) => {\n      setPlaybackState((prev) =>\n        prev ? { ...prev, currentTime: time } : null\n      );\n      if (playbackState) {\n        trackEngagement(playbackState.mediaId, time, \"seek\");\n      }\n    },\n    [playbackState]\n  );\n\n  const setVolume = useCallback((volume: number) => {\n    setPlaybackState((prev) => (prev ? { ...prev, volume } : null));\n  }, []);\n\n  const setPlaybackRate = useCallback((rate: number) => {\n    setPlaybackState((prev) => (prev ? { ...prev, playbackRate: rate } : null));\n  }, []);\n\n  const toggleMute = useCallback(() => {\n    setPlaybackState((prev) =>\n      prev ? { ...prev, isMuted: !prev.isMuted } : null\n    );\n  }, []);\n\n  const toggleFullscreen = useCallback(() => {\n    setPlaybackState((prev) =>\n      prev ? { ...prev, isFullscreen: !prev.isFullscreen } : null\n    );\n    if (playbackState) {\n      trackEngagement(\n        playbackState.mediaId,\n        playbackState.currentTime,\n        \"fullscreen\"\n      );\n    }\n  }, [playbackState]);\n\n  const setQuality = useCallback((quality: string) => {\n    setPlaybackState((prev) => (prev ? { ...prev, quality } : null));\n  }, []);\n\n  const generateTranscript = useCallback(\n    async (mediaId: string) => {\n      const mediaFile = getMediaFile(mediaId);\n      if (!mediaFile) return;\n\n      try {\n        const transcript = await mockTranscriptionService.transcribe(mediaFile);\n        setTranscripts((prev) => ({ ...prev, [mediaId]: transcript }));\n      } catch {\n        setTranscripts((prev) => ({ ...prev, [mediaId]: [] }));\n      }\n    },\n    [getMediaFile]\n  );\n\n  const searchTranscript = useCallback(\n    (mediaId: string, query: string) => {\n      const transcript = transcripts[mediaId] || [];\n      const lowercaseQuery = query.toLowerCase();\n\n      return transcript.filter(\n        (entry) =>\n          entry.text.toLowerCase().includes(lowercaseQuery) ||\n          entry.keywords?.some((keyword) =>\n            keyword.toLowerCase().includes(lowercaseQuery)\n          )\n      );\n    },\n    [transcripts]\n  );\n\n  const getTranscriptAtTime = useCallback(\n    (mediaId: string, time: number) => {\n      const transcript = transcripts[mediaId] || [];\n      return transcript.find(\n        (entry) => time >= entry.startTime && time <= entry.endTime\n      );\n    },\n    [transcripts]\n  );\n\n  const setActiveChapter = useCallback((mediaId: string, chapterId: string) => {\n    setPlaybackState((prev) =>\n      prev && prev.mediaId === mediaId\n        ? { ...prev, activeChapter: chapterId }\n        : prev\n    );\n  }, []);\n\n  const getChapterAtTime = useCallback(\n    (mediaId: string, time: number) => {\n      const mediaFile = getMediaFile(mediaId);\n      if (!mediaFile?.chapters) return undefined;\n\n      return mediaFile.chapters.find(\n        (chapter) => time >= chapter.startTime && time <= chapter.endTime\n      );\n    },\n    [getMediaFile]\n  );\n\n  const setActiveSubtitle = useCallback(\n    (mediaId: string, subtitleId: string) => {\n      setPlaybackState((prev) =>\n        prev && prev.mediaId === mediaId\n          ? { ...prev, activeSubtitle: subtitleId }\n          : prev\n      );\n    },\n    []\n  );\n\n  const generateSubtitles = useCallback(\n    async (mediaId: string, language: string) => {\n      const transcript = transcripts[mediaId];\n      if (!transcript) return;\n\n      const subtitles: SubtitleEntry[] = transcript.map((entry) => ({\n        id: entry.id,\n        startTime: entry.startTime,\n        endTime: entry.endTime,\n        text: entry.text,\n        speaker: entry.speaker,\n      }));\n\n      updateMediaFile(mediaId, {\n        subtitles: [\n          ...(getMediaFile(mediaId)?.subtitles || []),\n          {\n            id: `subtitle_${language}`,\n            language,\n            label: language.toUpperCase(),\n            content: subtitles,\n          },\n        ],\n      });\n    },\n    [transcripts, getMediaFile, updateMediaFile]\n  );\n\n  const trackView = useCallback((mediaId: string, watchTime: number) => {\n    setAnalytics((prev) => ({\n      ...prev,\n      [mediaId]: {\n        ...prev[mediaId],\n        totalViews: (prev[mediaId]?.totalViews || 0) + 1,\n        averageWatchTime:\n          ((prev[mediaId]?.averageWatchTime || 0) + watchTime) / 2,\n      },\n    }));\n  }, []);\n\n  const trackEngagement = useCallback(\n    (\n      mediaId: string,\n      time: number,\n      type: \"play\" | \"pause\" | \"seek\" | \"fullscreen\"\n    ) => {\n      setAnalytics((prev) => ({\n        ...prev,\n        [mediaId]: {\n          ...prev[mediaId],\n          engagementPoints: [\n            ...(prev[mediaId]?.engagementPoints || []),\n            { time, engagement: type === \"play\" ? 1 : 0.5 },\n          ].slice(-100), // Keep last 100 engagement points\n        },\n      }));\n    },\n    []\n  );\n\n  const generateSummary = useCallback(\n    async (mediaId: string) => {\n      const transcript = transcripts[mediaId];\n      if (!transcript) return \"\";\n\n      return await mockTranscriptionService.generateSummary(transcript);\n    },\n    [transcripts]\n  );\n\n  const identifySpeakers = useCallback(\n    async (mediaId: string) => {\n      const transcript = transcripts[mediaId];\n      if (!transcript) return [];\n\n      return await mockTranscriptionService.identifySpeakers(transcript);\n    },\n    [transcripts]\n  );\n\n  const extractKeywords = useCallback(\n    async (mediaId: string) => {\n      const transcript = transcripts[mediaId];\n      if (!transcript) return [];\n\n      const allKeywords = transcript.flatMap((entry) => entry.keywords || []);\n      return [...new Set(allKeywords)];\n    },\n    [transcripts]\n  );\n\n  const analyzeSentiment = useCallback(\n    async (mediaId: string) => {\n      const transcript = transcripts[mediaId];\n      if (!transcript) return {};\n\n      const sentimentMap: Record<number, \"positive\" | \"neutral\" | \"negative\"> =\n        {};\n      transcript.forEach((entry) => {\n        if (entry.sentiment) {\n          sentimentMap[entry.startTime] = entry.sentiment;\n        }\n      });\n\n      return sentimentMap;\n    },\n    [transcripts]\n  );\n\n  const startRecording = useCallback(\n    async (type: \"audio\" | \"video\", options?: RecordingOptions) => {\n      try {\n        const constraints: MediaStreamConstraints = {\n          audio: type === \"audio\" || type === \"video\",\n          video: type === \"video\",\n        };\n\n        const stream = await navigator.mediaDevices.getUserMedia(constraints);\n        const mediaRecorder = new MediaRecorder(stream);\n\n        recordedChunksRef.current = [];\n\n        mediaRecorder.ondataavailable = (event) => {\n          if (event.data.size > 0) {\n            recordedChunksRef.current.push(event.data);\n          }\n        };\n\n        mediaRecorderRef.current = mediaRecorder;\n        setIsRecording(true);\n        mediaRecorder.start();\n      } catch {\n        setIsRecording(false);\n      }\n    },\n    []\n  );\n\n  const stopRecording = useCallback(async (): Promise<MediaFile | null> => {\n    if (!mediaRecorderRef.current || !isRecording) return null;\n\n    return new Promise((resolve) => {\n      mediaRecorderRef.current!.onstop = () => {\n        const blob = new Blob(recordedChunksRef.current, {\n          type: \"video/webm\",\n        });\n        const url = URL.createObjectURL(blob);\n\n        const mediaFile: MediaFile = {\n          id: `recording_${Date.now()}`,\n          type: \"video\",\n          src: url,\n          title: \"New Recording\",\n          size: blob.size,\n          format: \"webm\",\n        };\n\n        addMediaFile(mediaFile);\n        setIsRecording(false);\n        resolve(mediaFile);\n      };\n\n      mediaRecorderRef.current!.stop();\n    });\n  }, [isRecording, addMediaFile]);\n\n  const pauseRecording = useCallback(() => {\n    if (mediaRecorderRef.current && isRecording) {\n      mediaRecorderRef.current.pause();\n    }\n  }, [isRecording]);\n\n  const resumeRecording = useCallback(() => {\n    if (mediaRecorderRef.current && isRecording) {\n      mediaRecorderRef.current.resume();\n    }\n  }, [isRecording]);\n\n  const value: MediaContextValue = {\n    mediaFiles,\n    addMediaFile,\n    removeMediaFile,\n    getMediaFile,\n    updateMediaFile,\n    playbackState,\n    setPlaybackState,\n    play,\n    pause,\n    stop,\n    seekTo,\n    setVolume,\n    setPlaybackRate,\n    toggleMute,\n    toggleFullscreen,\n    setQuality,\n    transcripts,\n    generateTranscript,\n    searchTranscript,\n    getTranscriptAtTime,\n    setActiveChapter,\n    getChapterAtTime,\n    setActiveSubtitle,\n    generateSubtitles,\n    analytics,\n    trackView,\n    trackEngagement,\n    generateSummary,\n    identifySpeakers,\n    extractKeywords,\n    analyzeSentiment,\n    isRecording,\n    recordingDevices,\n    startRecording,\n    stopRecording,\n    pauseRecording,\n    resumeRecording,\n  };\n\n  return (\n    <MediaContext.Provider data-glass-component value={value}>\n      <div className={className} data-testid={dataTestId}>\n        {children}\n      </div>\n    </MediaContext.Provider>\n  );\n};\n\nexport { MediaProvider as GlassMediaProvider };\n\nexport const useMedia = () => {\n  const context = useContext(MediaContext);\n  return context ?? defaultMediaContext;\n};\n", "\"use client\";\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport {\n  useMedia,\n  MediaFile,\n  MediaChapter,\n  TranscriptEntry,\n} from \"./GlassMediaProvider\";\n\nexport interface AdvancedVideoPlayerProps {\n  mediaFile: MediaFile;\n  className?: string;\n  \"data-testid\"?: string;\n  showControls?: boolean;\n  showTranscript?: boolean;\n  showChapters?: boolean;\n  showAnalytics?: boolean;\n  autoplay?: boolean;\n  muted?: boolean;\n  loop?: boolean;\n  preload?: \"none\" | \"metadata\" | \"auto\";\n  poster?: string;\n  onTimeUpdate?: (currentTime: number) => void;\n  onEnded?: () => void;\n  onError?: (error: string) => void;\n}\n\ninterface ControlsProps {\n  isPlaying: boolean;\n  currentTime: number;\n  duration: number;\n  volume: number;\n  playbackRate: number;\n  isFullscreen: boolean;\n  isMuted: boolean;\n  quality: string;\n  buffered: number;\n  onPlayPause: () => void;\n  onSeek: (time: number) => void;\n  onVolumeChange: (volume: number) => void;\n  onPlaybackRateChange: (rate: number) => void;\n  onQualityChange: (quality: string) => void;\n  onFullscreenToggle: () => void;\n  onMuteToggle: () => void;\n}\n\nconst formatTime = (seconds: number): string => {\n  if (isNaN(seconds)) return \"0:00\";\n\n  const hours = Math.floor(seconds / 3600);\n  const minutes = Math.floor((seconds % 3600) / 60);\n  const secs = Math.floor(seconds % 60);\n\n  if (hours > 0) {\n    return `${hours}:${minutes.toString().padStart(2, \"0\")}:${secs.toString().padStart(2, \"0\")}`;\n  } else {\n    return `${minutes}:${secs.toString().padStart(2, \"0\")}`;\n  }\n};\n\nconst getInlineTranscript = (mediaFile: MediaFile): TranscriptEntry[] =>\n  mediaFile.subtitles?.flatMap(\n    (subtitle) =>\n      subtitle.content?.map((entry) => ({\n        ...entry,\n        keywords: [],\n        sentiment: \"neutral\" as const,\n      })) ?? []\n  ) ?? [];\n\nconst clampPercent = (value: number, total: number): number => {\n  if (!Number.isFinite(value) || !Number.isFinite(total) || total <= 0) {\n    return 0;\n  }\n\n  return Math.max(0, Math.min(100, (value / total) * 100));\n};\n\nconst isStorybookDataMedia = (src?: string): boolean =>\n  Boolean(src?.startsWith(\"data:video/\"));\n\nconst fallbackPoster =\n  \"data:image/svg+xml,\" +\n  encodeURIComponent(`\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1280 720\">\n      <defs>\n        <linearGradient id=\"bg\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n          <stop offset=\"0\" stop-color=\"#020617\"/>\n          <stop offset=\"0.55\" stop-color=\"#1d4ed8\"/>\n          <stop offset=\"1\" stop-color=\"#0f766e\"/>\n        </linearGradient>\n      </defs>\n      <rect width=\"1280\" height=\"720\" fill=\"url(#bg)\"/>\n      <circle cx=\"1018\" cy=\"166\" r=\"126\" fill=\"rgba(255,255,255,0.14)\"/>\n      <rect x=\"96\" y=\"104\" width=\"620\" height=\"122\" rx=\"28\" fill=\"rgba(255,255,255,0.16)\"/>\n      <path d=\"M604 360 468 280v160z\" fill=\"#ffffff\"/>\n      <rect x=\"96\" y=\"528\" width=\"1088\" height=\"16\" rx=\"8\" fill=\"rgba(255,255,255,0.24)\"/>\n      <rect x=\"96\" y=\"528\" width=\"462\" height=\"16\" rx=\"8\" fill=\"#ffffff\"/>\n      <text x=\"132\" y=\"178\" font-family=\"Inter, Arial, sans-serif\" font-size=\"52\" font-weight=\"700\" fill=\"#ffffff\">AuraGlass Video</text>\n      <text x=\"132\" y=\"604\" font-family=\"Inter, Arial, sans-serif\" font-size=\"30\" fill=\"#dbeafe\">Stable visual media preview</text>\n    </svg>\n  `);\n\nconst controlButtonStyle: React.CSSProperties = {\n  ...createGlassStyle({\n    intent: \"neutral\",\n    elevation: \"level4\",\n    interactive: true,\n  }),\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  border: \"1px solid rgba(148, 163, 184, 0.42)\",\n  color: \"#f8fafc\",\n  boxShadow:\n    \"inset 0 1px 0 rgba(255,255,255,0.12), 0 12px 28px rgba(2,6,23,0.28)\",\n};\n\nconst activeButtonStyle: React.CSSProperties = {\n  ...createGlassStyle({\n    intent: \"primary\",\n    elevation: \"level4\",\n    interactive: true,\n  }),\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  color: \"#f8fafc\",\n  borderColor: \"rgba(191, 219, 254, 0.72)\",\n  boxShadow:\n    \"inset 0 1px 0 rgba(255,255,255,0.12), 0 12px 28px rgba(2,6,23,0.28)\",\n};\n\nconst menuStyle: React.CSSProperties = {\n  ...createGlassStyle({ intent: \"neutral\", elevation: \"level4\" }),\n  color: \"#f8fafc\",\n  border: \"1px solid rgba(148, 163, 184, 0.34)\",\n  boxShadow: \"0 18px 38px rgba(2, 6, 23, 0.42)\",\n};\n\nconst rangeStyle: React.CSSProperties = {\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  color: \"#38bdf8\",\n  accentColor: \"#38bdf8\",\n};\n\nconst videoComponentStyles = `\n  .ag-advanced-video-player,\n  .ag-advanced-video-player * {\n    box-sizing: border-box;\n  }\n\n  .ag-advanced-video-player .ag-video-layout {\n    display: flex;\n    height: 100%;\n    min-height: 0;\n  }\n\n  .ag-advanced-video-player .ag-video-surface {\n    flex: 1 1 52rem;\n    min-width: 32rem;\n  }\n\n  .ag-advanced-video-player .ag-video-side-panels {\n    display: flex;\n    flex: 0 1 42rem;\n    min-width: 22rem;\n    max-width: min(46rem, 48%);\n    height: 100%;\n    overflow: hidden;\n    border-left: 1px solid rgba(226, 232, 240, 0.18);\n    background: rgba(2, 6, 23, 0.22);\n  }\n\n  .ag-advanced-video-player .ag-video-side-panel {\n    flex: 1 1 0;\n    min-width: 0;\n    height: 100%;\n    overflow: hidden;\n  }\n\n  .ag-advanced-video-player .ag-video-side-panel + .ag-video-side-panel {\n    border-left: 1px solid rgba(226, 232, 240, 0.16);\n  }\n\n  .ag-advanced-video-player .ag-video-panel-content {\n    height: 100%;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    background: linear-gradient(180deg, rgba(15, 23, 42, 0.9), rgba(15, 23, 42, 0.78));\n    border-radius: 0;\n    color: #f8fafc;\n  }\n\n  .ag-advanced-video-player .ag-video-panel-scroll {\n    flex: 1 1 auto;\n    min-height: 0;\n    overflow-y: auto;\n    overscroll-behavior: contain;\n    padding-right: 2px;\n  }\n\n  .ag-advanced-video-player .ag-video-controls {\n    border-top: 1px solid var(--glass-border-default);\n    background:\n      linear-gradient(180deg, rgba(15, 23, 42, 0.42), rgba(2, 6, 23, 0.92)),\n      rgba(2, 6, 23, 0.84);\n    backdrop-filter: blur(var(--glass-neutral-level4-blur, 40px)) var(--glass-filter-base);\n    -webkit-backdrop-filter: blur(var(--glass-neutral-level4-blur, 40px)) var(--glass-filter-base);\n  }\n\n  .ag-advanced-video-player .ag-video-control-row,\n  .ag-advanced-video-player .ag-video-control-group {\n    min-width: 0;\n  }\n\n  .ag-advanced-video-player.ag-video-compact {\n    overflow: hidden !important;\n    min-height: 0 !important;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-layout {\n    flex-direction: column;\n    height: auto;\n    overflow: hidden !important;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-surface {\n    display: flex;\n    flex: 0 0 auto;\n    flex-direction: column;\n    min-width: 0;\n    width: 100%;\n    aspect-ratio: auto;\n    min-height: 0;\n    overflow: hidden !important;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-surface > img,\n  .ag-advanced-video-player.ag-video-compact .ag-video-surface > video {\n    position: relative !important;\n    aspect-ratio: 16 / 9;\n    min-height: 160px;\n    flex: 0 0 auto;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-controls {\n    position: relative !important;\n    padding: 8px !important;\n    flex: 0 0 auto;\n    overflow: hidden;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-control-row {\n    gap: 8px !important;\n    align-items: flex-start !important;\n    flex-direction: row;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-control-group {\n    gap: 6px !important;\n    flex: 1 1 100%;\n    width: 100%;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-control-group:last-child {\n    display: none;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-controls button {\n    min-width: 34px !important;\n    min-height: 34px !important;\n    max-width: 44px;\n    padding: 6px !important;\n    font-size: 12px !important;\n  }\n\n  .ag-advanced-video-player.ag-video-compact .ag-video-controls [aria-label^=\"Playback speed\"],\n  .ag-advanced-video-player.ag-video-compact .ag-video-controls [aria-label^=\"Video quality\"] {\n    min-width: 42px !important;\n    max-width: 52px;\n  }\n\n  @media (max-width: 980px) {\n    .ag-advanced-video-player {\n      min-height: 0 !important;\n    }\n\n    .ag-advanced-video-player .ag-video-layout {\n      flex-direction: column;\n      height: auto;\n    }\n\n    .ag-advanced-video-player .ag-video-surface {\n      flex: 0 0 auto;\n      min-width: 0;\n      width: 100%;\n      aspect-ratio: 16 / 9;\n      min-height: 260px;\n    }\n\n    .ag-advanced-video-player .ag-video-side-panels {\n      flex: 0 0 auto;\n      width: 100%;\n      max-width: none;\n      min-width: 0;\n      height: auto;\n      max-height: none;\n      border-left: 0;\n      border-top: 1px solid rgba(226, 232, 240, 0.18);\n    }\n\n    .ag-advanced-video-player .ag-video-side-panel {\n      min-width: min(100%, 19rem);\n      min-height: 260px;\n      max-height: 340px;\n    }\n  }\n\n  @media (max-width: 640px) {\n    .ag-advanced-video-player {\n      overflow: hidden !important;\n    }\n\n    .ag-advanced-video-player .ag-video-layout {\n      overflow: hidden !important;\n    }\n\n    .ag-advanced-video-player .ag-video-surface {\n      display: flex;\n      flex-direction: column;\n      overflow: hidden !important;\n    }\n\n    .ag-advanced-video-player .ag-video-controls {\n      position: relative !important;\n      padding: 8px !important;\n      flex: 0 0 auto;\n      overflow: hidden;\n    }\n\n    .ag-advanced-video-player .ag-video-control-row {\n      gap: 8px !important;\n      align-items: flex-start !important;\n      flex-direction: column;\n    }\n\n    .ag-advanced-video-player .ag-video-control-group {\n      gap: 6px !important;\n      flex: 1 1 100%;\n      width: 100%;\n    }\n\n    .ag-advanced-video-player .ag-video-control-group:last-child {\n      justify-content: flex-start;\n    }\n\n    .ag-advanced-video-player .ag-video-controls button {\n      min-width: 34px !important;\n      min-height: 34px !important;\n      max-width: 44px;\n      padding: 6px !important;\n      font-size: 12px !important;\n    }\n\n    .ag-advanced-video-player .ag-video-controls [aria-label^=\"Playback speed\"],\n    .ag-advanced-video-player .ag-video-controls [aria-label^=\"Video quality\"] {\n      min-width: 42px !important;\n      max-width: 52px;\n    }\n\n    .ag-advanced-video-player .ag-video-surface {\n      aspect-ratio: auto;\n      min-height: 0;\n    }\n\n    .ag-advanced-video-player .ag-video-surface > img,\n    .ag-advanced-video-player .ag-video-surface > video {\n      position: relative !important;\n      aspect-ratio: 16 / 9;\n      min-height: 220px;\n      flex: 0 0 auto;\n    }\n\n    .ag-advanced-video-player .ag-video-side-panels {\n      flex-direction: column;\n    }\n\n    .ag-advanced-video-player .ag-video-side-panel {\n      width: 100%;\n      min-width: 0;\n      min-height: 420px;\n      height: auto;\n      max-height: none;\n      overflow: visible !important;\n    }\n\n    .ag-advanced-video-player .ag-video-panel-content {\n      height: auto;\n      max-height: 420px;\n    }\n  }\n`;\n\nconst VideoControls: React.FC<ControlsProps> = ({\n  isPlaying,\n  currentTime,\n  duration,\n  volume,\n  playbackRate,\n  isFullscreen,\n  isMuted,\n  quality,\n  buffered,\n  onPlayPause,\n  onSeek,\n  onVolumeChange,\n  onPlaybackRateChange,\n  onQualityChange,\n  onFullscreenToggle,\n  onMuteToggle,\n}) => {\n  const [showVolumeSlider, setShowVolumeSlider] = useState(false);\n  const [showSpeedMenu, setShowSpeedMenu] = useState(false);\n  const [showQualityMenu, setShowQualityMenu] = useState(false);\n  const [seeking, setSeeking] = useState(false);\n\n  const handleProgressClick = (e: React.MouseEvent<HTMLDivElement>) => {\n    const rect = e.currentTarget.getBoundingClientRect();\n    const percent = (e.clientX - rect.left) / rect.width;\n    const time = percent * duration;\n    onSeek(time);\n  };\n\n  const handleProgressDrag = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (seeking) {\n      const rect = e.currentTarget.getBoundingClientRect();\n      const percent = (e.clientX - rect.left) / rect.width;\n      const time = Math.max(0, Math.min(duration, percent * duration));\n      onSeek(time);\n    }\n  };\n\n  const playbackSpeeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n  const qualities = [\"auto\", \"144p\", \"240p\", \"360p\", \"480p\", \"720p\", \"1080p\"];\n  const playedPercent = clampPercent(currentTime, duration);\n  const bufferedPercent = clampPercent(buffered, duration);\n\n  return (\n    <div\n      data-glass-component\n      className=\"glass-absolute glass-bottom-0 glass-left-0 glass-right-0 glass-p-4 ag-video-controls\"\n      style={{\n        ...createGlassStyle({ intent: \"neutral\", elevation: \"level4\" }),\n        position: \"absolute\",\n        top: \"auto\",\n        right: 0,\n        bottom: 0,\n        left: 0,\n        zIndex: 20,\n        color: \"#f8fafc\",\n      }}\n    >\n      {/* Progress Bar */}\n      <div\n        className=\"glass-w-full glass-h-2 glass-surface-subtle/20 glass-radius-full glass-cursor-pointer glass-mb-4 glass-relative\"\n        onClick={handleProgressClick}\n        onMouseMove={handleProgressDrag}\n        onMouseDown={() => setSeeking(true)}\n        onMouseUp={() => setSeeking(false)}\n        onMouseLeave={() => setSeeking(false)}\n      >\n        {/* Buffered Progress */}\n        <div\n          className=\"glass-absolute glass-top-0 glass-left-0 glass-h-full glass-surface-subtle glass-radius-full\"\n          style={{\n            width: `${bufferedPercent}%`,\n          }}\n        />\n\n        {/* Played Progress */}\n        <div\n          className=\"glass-absolute glass-top-0 glass-left-0 glass-h-full glass-surface-primary glass-radius-full\"\n          style={{\n            width: `${playedPercent}%`,\n          }}\n        />\n\n        {/* Progress Handle */}\n        <div\n          className=\"glass-absolute glass-top-1/2 glass-transform glass--translate-y-1-2 glass-w-4 glass-h-4 glass-surface-primary glass-radius-full glass-border-2 glass-border-white glass-shadow-md\"\n          style={{ left: `calc(${playedPercent}% - 8px)` }}\n        />\n      </div>\n\n      <div\n        className=\"glass-flex glass-items-center glass-justify-between glass-text-primary ag-video-control-row\"\n        style={{ gap: 14, flexWrap: \"wrap\" }}\n      >\n        {/* Left Controls */}\n        <div\n          className=\"glass-flex glass-items-center glass-gap-3 ag-video-control-group\"\n          style={{ flexWrap: \"wrap\" }}\n        >\n          {/* Play/Pause */}\n          <button\n            onClick={onPlayPause}\n            className=\"glass-w-12 glass-h-12 glass-flex glass-items-center glass-justify-center glass-surface-subtle/20 hover:glass-surface-subtle/30 glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            style={activeButtonStyle}\n            aria-label={isPlaying ? \"Pause video\" : \"Play video\"}\n          >\n            {isPlaying ? (\n              <div className=\"glass-flex glass-gap-1\">\n                <div className=\"glass-w-1 glass-h-4 glass-surface-subtle glass-radius-full\" />\n                <div className=\"glass-w-1 glass-h-4 glass-surface-subtle glass-radius-full\" />\n              </div>\n            ) : (\n              <div className=\"glass-w-0 glass-h-0 glass-border-l-4 glass-border-l-white glass-border-y-4 glass-border-y-transparent glass-ml-1\" />\n            )}\n          </button>\n\n          {/* Volume */}\n          <div\n            className=\"glass-relative\"\n            onMouseEnter={() => setShowVolumeSlider(true)}\n            onMouseLeave={() => setShowVolumeSlider(false)}\n          >\n            <button\n              onClick={onMuteToggle}\n              className=\"glass-w-10 glass-h-10 glass-flex glass-items-center glass-justify-center hover:glass-surface-subtle/20 glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              style={controlButtonStyle}\n              aria-label={\n                isMuted || volume === 0 ? \"Unmute video\" : \"Mute video\"\n              }\n            >\n              {isMuted || volume === 0 ? \"\uD83D\uDD07\" : volume < 0.5 ? \"\uD83D\uDD09\" : \"\uD83D\uDD0A\"}\n            </button>\n\n            {showVolumeSlider && (\n              <div\n                className=\"glass-absolute glass-bottom-12 glass--left-1-2 glass-transform glass--translate-x-1-2 glass-radius-lg glass-p-2\"\n                style={menuStyle}\n              >\n                <input\n                  type=\"range\"\n                  min=\"0\"\n                  max=\"1\"\n                  step=\"0.01\"\n                  value={isMuted ? 0 : volume}\n                  onChange={(e) => onVolumeChange(Number(e.target.value))}\n                  className=\"glass-w-16 glass-h-1 glass-surface-subtle/20 glass-radius-full glass-appearance-none glass-slider-thumb-white glass-focus glass-touch-target glass-contrast-guard\"\n                  style={rangeStyle}\n                />\n              </div>\n            )}\n          </div>\n\n          {/* Time Display */}\n          <div\n            className=\"glass-text-sm glass-font-mono\"\n            style={{\n              ...createGlassStyle({ intent: \"neutral\", elevation: \"level3\" }),\n              color: \"#f8fafc\",\n              border: \"1px solid rgba(148, 163, 184, 0.3)\",\n              borderRadius: 999,\n              padding: \"8px 12px\",\n              whiteSpace: \"nowrap\",\n            }}\n          >\n            {formatTime(currentTime)} / {formatTime(duration)}\n          </div>\n        </div>\n\n        {/* Right Controls */}\n        <div\n          className=\"glass-flex glass-items-center glass-gap-3 ag-video-control-group\"\n          style={{ flexWrap: \"wrap\" }}\n        >\n          {/* Playback Speed */}\n          <div className=\"glass-relative\">\n            <button\n              onClick={() => setShowSpeedMenu(!showSpeedMenu)}\n              className=\"glass-px-3 glass-py-2 glass-text-sm hover:glass-surface-subtle/20 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              style={controlButtonStyle}\n              aria-label={`Playback speed: ${playbackRate}x`}\n            >\n              {playbackRate}x\n            </button>\n\n            {showSpeedMenu && (\n              <div\n                className=\"glass-absolute glass-bottom-12 glass-right-0 glass-radius-lg glass-p-2 glass-min-w-20\"\n                style={menuStyle}\n              >\n                {playbackSpeeds.map((speed: any) => (\n                  <button\n                    key={speed}\n                    onClick={() => {\n                      onPlaybackRateChange(speed);\n                      setShowSpeedMenu(false);\n                    }}\n                    className={cn(\n                      \"glass-block glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                      speed === playbackRate && \"glass-surface-primary\"\n                    )}\n                    style={{\n                      color: \"#f8fafc\",\n                      background:\n                        speed === playbackRate\n                          ? \"rgba(37, 99, 235, 0.96)\"\n                          : \"transparent\",\n                    }}\n                  >\n                    {speed}x\n                  </button>\n                ))}\n              </div>\n            )}\n          </div>\n\n          {/* Quality */}\n          <div className=\"glass-relative\">\n            <button\n              onClick={() => setShowQualityMenu(!showQualityMenu)}\n              className=\"glass-px-3 glass-py-2 glass-text-sm hover:glass-surface-subtle/20 glass-radius-md glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              style={controlButtonStyle}\n              aria-label={`Video quality: ${quality}`}\n            >\n              {quality}\n            </button>\n\n            {showQualityMenu && (\n              <div\n                className=\"glass-absolute glass-bottom-12 glass-right-0 glass-radius-lg glass-p-2 glass-min-w-20\"\n                style={menuStyle}\n              >\n                {qualities.map((q: any) => (\n                  <button\n                    key={q}\n                    onClick={() => {\n                      onQualityChange(q);\n                      setShowQualityMenu(false);\n                    }}\n                    className={cn(\n                      \"glass-block glass-w-full glass-text-left glass-px-3 glass-py-2 glass-text-sm glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                      q === quality && \"glass-surface-primary\"\n                    )}\n                    style={{\n                      color: \"#f8fafc\",\n                      background:\n                        q === quality\n                          ? \"rgba(37, 99, 235, 0.96)\"\n                          : \"transparent\",\n                    }}\n                  >\n                    {q}\n                  </button>\n                ))}\n              </div>\n            )}\n          </div>\n\n          {/* Fullscreen */}\n          <button\n            onClick={onFullscreenToggle}\n            className=\"glass-w-10 glass-h-10 glass-flex glass-items-center glass-justify-center hover:glass-surface-subtle/20 glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            style={controlButtonStyle}\n            aria-label={isFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"}\n          >\n            {isFullscreen ? \"\u229F\" : \"\u229E\"}\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nconst ChapterList: React.FC<{\n  chapters: MediaChapter[];\n  currentTime: number;\n  onChapterClick: (chapter: MediaChapter) => void;\n}> = ({ chapters, currentTime, onChapterClick }) => {\n  return (\n    <div className=\"ag-video-panel-content glass-surface-subtle glass-text-primary glass-p-4\">\n      <h3 className=\"glass-text-lg glass-font-semibold glass-mb-4\">Chapters</h3>\n      <div className=\"ag-video-panel-scroll glass-space-y-2\">\n        {chapters.map((chapter: any) => {\n          const isActive =\n            currentTime >= chapter.startTime && currentTime <= chapter.endTime;\n\n          return (\n            <button\n              key={chapter.id}\n              onClick={() => onChapterClick(chapter)}\n              className={cn(\n                \"glass-flex glass-items-center glass-gap-3 glass-w-full glass-p-3 glass-radius-lg glass-text-left glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                isActive ? \"glass-surface-primary\" : \"glass-surface-overlay\"\n              )}\n              style={{\n                background: isActive\n                  ? \"rgba(37, 99, 235, 0.84)\"\n                  : \"rgba(15, 23, 42, 0.66)\",\n                border: \"1px solid rgba(226, 232, 240, 0.18)\",\n                color: \"#f8fafc\",\n                minHeight: 84,\n              }}\n            >\n              {chapter.thumbnail && (\n                <img\n                  src={chapter.thumbnail}\n                  alt={chapter.title}\n                  className=\"glass-w-16 glass-h-9 glass-object-cover glass-radius\"\n                />\n              )}\n              <div className=\"glass-flex-1 glass-min-w-0\">\n                <div className=\"glass-font-medium\">{chapter.title}</div>\n                <div className=\"glass-text-sm glass-text-primary\">\n                  {formatTime(chapter.startTime)} -{\" \"}\n                  {formatTime(chapter.endTime)}\n                </div>\n                {chapter.description && (\n                  <div className=\"glass-text-xs glass-text-primary glass-mt-1\">\n                    {chapter.description}\n                  </div>\n                )}\n              </div>\n            </button>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nconst TranscriptPanel: React.FC<{\n  transcript: TranscriptEntry[];\n  currentTime: number;\n  searchQuery: string;\n  onSearchChange: (query: string) => void;\n  onTranscriptClick: (entry: TranscriptEntry) => void;\n}> = ({\n  transcript,\n  currentTime,\n  searchQuery,\n  onSearchChange,\n  onTranscriptClick,\n}) => {\n  const [highlightedResults, setHighlightedResults] = useState<\n    TranscriptEntry[]\n  >([]);\n\n  useEffect(() => {\n    if (searchQuery) {\n      const results = transcript.filter((entry: any) =>\n        entry.text.toLowerCase().includes(searchQuery.toLowerCase())\n      );\n      setHighlightedResults(results);\n    } else {\n      setHighlightedResults([]);\n    }\n  }, [searchQuery, transcript]);\n\n  const highlightText = (text: string, query: string) => {\n    if (!query) return text;\n\n    const regex = new RegExp(`(${query})`, \"gi\");\n    return text.split(regex).map((part, index) =>\n      part.toLowerCase() === query.toLowerCase() ? (\n        <mark\n          key={index}\n          className=\"glass-surface-subtle glass-text-inverse glass-radius glass-px-1\"\n        >\n          {part}\n        </mark>\n      ) : (\n        part\n      )\n    );\n  };\n\n  return (\n    <div className=\"ag-video-panel-content glass-surface-subtle glass-text-primary glass-p-4 glass-h-full glass-flex glass-flex-col\">\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n        <h3 className=\"glass-text-lg glass-font-semibold\">Transcript</h3>\n        <div className=\"glass-text-sm glass-text-primary\">\n          {transcript.length} entries\n        </div>\n      </div>\n\n      {/* Search */}\n      <div className=\"glass-mb-4\">\n        <input\n          type=\"text\"\n          placeholder=\"Search transcript...\"\n          value={searchQuery}\n          onChange={(e) => onSearchChange(e.target.value)}\n          className=\"glass-w-full glass-px-3 glass-py-2 glass-surface-overlay glass-text-primary glass-border glass-border-subtle glass-radius-lg glass-focus glass-touch-target glass-contrast-guard\"\n        />\n        {searchQuery && (\n          <div className=\"glass-text-sm glass-text-primary glass-mt-2\">\n            {highlightedResults.length} results found\n          </div>\n        )}\n      </div>\n\n      {/* Transcript Entries */}\n      <div className=\"ag-video-panel-scroll glass-flex-1 glass-space-y-3\">\n        {(searchQuery ? highlightedResults : transcript).map((entry: any) => {\n          const isActive =\n            currentTime >= entry.startTime && currentTime <= entry.endTime;\n          const confidence = entry.confidence || 0;\n\n          return (\n            <button\n              key={entry.id}\n              onClick={() => onTranscriptClick(entry)}\n              className={cn(\n                \"glass-flex glass-flex-col glass-items-start glass-gap-2 glass-w-full glass-p-3 glass-radius-lg glass-text-left glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                isActive ? \"glass-surface-primary\" : \"glass-surface-overlay\"\n              )}\n              style={{\n                background: isActive\n                  ? \"rgba(37, 99, 235, 0.84)\"\n                  : \"rgba(15, 23, 42, 0.66)\",\n                border: \"1px solid rgba(226, 232, 240, 0.18)\",\n                color: \"#f8fafc\",\n              }}\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-w-full\">\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  <span className=\"glass-text-xs glass-text-primary glass-font-mono\">\n                    {formatTime(entry.startTime)}\n                  </span>\n                  {entry.speaker && (\n                    <span className=\"glass-text-xs glass-surface-subtle glass-text-primary glass-px-2 glass-py-1 glass-radius\">\n                      {entry.speaker}\n                    </span>\n                  )}\n                </div>\n                <div className=\"glass-flex glass-items-center glass-gap-2\">\n                  {confidence > 0 && (\n                    <div\n                      className={cn(\n                        \"glass-text-xs glass-px-2 glass-py-1 glass-radius\",\n                        confidence > 0.9\n                          ? \"glass-surface-success\"\n                          : confidence > 0.7\n                            ? \"glass-surface-warning\"\n                            : \"glass-surface-danger\"\n                      )}\n                    >\n                      {Math.round(confidence * 100)}%\n                    </div>\n                  )}\n                  {entry.sentiment && (\n                    <div className=\"glass-text-xs\">\n                      {entry.sentiment === \"positive\"\n                        ? \"\uD83D\uDE0A\"\n                        : entry.sentiment === \"negative\"\n                          ? \"\uD83D\uDE14\"\n                          : \"\uD83D\uDE10\"}\n                    </div>\n                  )}\n                </div>\n              </div>\n\n              <div className=\"glass-text-sm glass-leading-relaxed\">\n                {searchQuery\n                  ? highlightText(entry.text, searchQuery)\n                  : entry.text}\n              </div>\n\n              {entry.keywords && entry.keywords.length > 0 && (\n                <div className=\"glass-flex glass-flex-wrap glass-gap-1 glass-mt-2\">\n                  {entry.keywords.map((keyword: any) => (\n                    <span\n                      key={keyword}\n                      className=\"glass-text-xs glass-surface-subtle glass-text-primary glass-px-2 glass-py-1 glass-radius\"\n                    >\n                      {keyword}\n                    </span>\n                  ))}\n                </div>\n              )}\n            </button>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nexport const GlassAdvancedVideoPlayer: React.FC<AdvancedVideoPlayerProps> = ({\n  mediaFile,\n  className,\n  \"data-testid\": dataTestId,\n  showControls = true,\n  showTranscript = false,\n  showChapters = false,\n  showAnalytics = false,\n  autoplay = false,\n  muted = false,\n  loop = false,\n  preload = \"metadata\",\n  poster,\n  onTimeUpdate,\n  onEnded,\n  onError,\n}) => {\n  const {\n    playbackState,\n    setPlaybackState,\n    play,\n    pause,\n    seekTo,\n    setVolume,\n    setPlaybackRate,\n    toggleMute,\n    toggleFullscreen,\n    setQuality,\n    transcripts,\n    generateTranscript,\n    searchTranscript,\n    getTranscriptAtTime,\n    setActiveChapter,\n    getChapterAtTime,\n    trackView,\n    trackEngagement,\n  } = useMedia();\n\n  const videoRef = useRef<HTMLVideoElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  const [showControlsOverlay, setShowControlsOverlay] = useState(showControls);\n  const [isCompact, setIsCompact] = useState(false);\n  const [controlsTimeout, setControlsTimeout] = useState<NodeJS.Timeout | null>(\n    null\n  );\n  const [transcriptSearch, setTranscriptSearch] = useState(\"\");\n  const [hasTranscript, setHasTranscript] = useState(false);\n  const inlineTranscript = React.useMemo(\n    () => getInlineTranscript(mediaFile),\n    [mediaFile]\n  );\n  const visibleTranscript = transcripts[mediaFile.id] ?? inlineTranscript;\n\n  const isPlaying =\n    playbackState?.mediaId === mediaFile.id && playbackState.isPlaying;\n  const currentTime =\n    playbackState?.mediaId === mediaFile.id ? playbackState.currentTime : 0;\n  const duration =\n    playbackState?.mediaId === mediaFile.id\n      ? playbackState.duration\n      : mediaFile.duration || 0;\n  const volume = playbackState?.volume || 1;\n  const playbackRate = playbackState?.playbackRate || 1;\n  const isFullscreen = playbackState?.isFullscreen || false;\n  const isMuted = playbackState?.isMuted || false;\n  const quality = playbackState?.quality || \"auto\";\n  const posterSrc =\n    poster || mediaFile.poster || mediaFile.thumbnail || fallbackPoster;\n  const usePosterSurface =\n    !mediaFile.src || isStorybookDataMedia(mediaFile.src);\n\n  useEffect(() => {\n    const element = containerRef.current;\n    if (!element || typeof ResizeObserver === \"undefined\") return;\n\n    const updateCompactState = () => {\n      setIsCompact(element.getBoundingClientRect().width < 560);\n    };\n\n    updateCompactState();\n    const observer = new ResizeObserver(updateCompactState);\n    observer.observe(element);\n\n    return () => observer.disconnect();\n  }, []);\n\n  // Initialize transcript\n  useEffect(() => {\n    if (!showTranscript) return;\n\n    if (inlineTranscript.length > 0) {\n      setHasTranscript(true);\n      return;\n    }\n\n    if (!transcripts[mediaFile.id] && showTranscript) {\n      generateTranscript(mediaFile.id).then(() => {\n        setHasTranscript(true);\n      });\n    } else if (transcripts[mediaFile.id]) {\n      setHasTranscript(true);\n    }\n  }, [\n    mediaFile.id,\n    showTranscript,\n    generateTranscript,\n    transcripts,\n    inlineTranscript.length,\n  ]);\n\n  // Mouse movement handling for controls\n  const handleMouseMove = useCallback(() => {\n    setShowControlsOverlay(true);\n\n    if (controlsTimeout) {\n      clearTimeout(controlsTimeout);\n    }\n\n    const timeout = setTimeout(() => {\n      if (isPlaying) {\n        setShowControlsOverlay(false);\n      }\n    }, 3000);\n\n    setControlsTimeout(timeout);\n  }, [isPlaying, controlsTimeout]);\n\n  // Video event handlers\n  const handleTimeUpdate = () => {\n    if (videoRef.current) {\n      const currentTime = videoRef.current.currentTime;\n\n      if (playbackState && playbackState.mediaId === mediaFile.id) {\n        setPlaybackState({ ...playbackState, currentTime });\n      }\n\n      onTimeUpdate?.(currentTime);\n\n      // Update active chapter\n      const activeChapter = getChapterAtTime(mediaFile.id, currentTime);\n      if (activeChapter) {\n        setActiveChapter(mediaFile.id, activeChapter.id);\n      }\n    }\n  };\n\n  const handleLoadedMetadata = () => {\n    if (videoRef.current) {\n      const duration = videoRef.current.duration;\n      if (playbackState && playbackState.mediaId === mediaFile.id) {\n        setPlaybackState({ ...playbackState, duration, isLoading: false });\n      }\n    }\n  };\n\n  const handleEnded = () => {\n    if (playbackState && playbackState.mediaId === mediaFile.id) {\n      setPlaybackState({ ...playbackState, isPlaying: false, currentTime: 0 });\n    }\n\n    trackView(mediaFile.id, duration);\n    onEnded?.();\n  };\n\n  const handleError = () => {\n    if (playbackState && playbackState.mediaId === mediaFile.id) {\n      setPlaybackState({ ...playbackState, isError: true, isLoading: false });\n    }\n\n    onError?.(\"Video playback error occurred\");\n  };\n\n  const handlePlayPause = () => {\n    if (isPlaying) {\n      pause();\n      if (videoRef.current) {\n        videoRef.current.pause();\n      }\n    } else {\n      play(mediaFile.id);\n      if (videoRef.current && !usePosterSurface) {\n        videoRef.current.play();\n      }\n    }\n  };\n\n  const handleSeek = (time: number) => {\n    seekTo(time);\n    if (videoRef.current) {\n      videoRef.current.currentTime = time;\n    }\n  };\n\n  const handleVolumeChange = (newVolume: number) => {\n    setVolume(newVolume);\n    if (videoRef.current) {\n      videoRef.current.volume = newVolume;\n    }\n  };\n\n  const handlePlaybackRateChange = (rate: number) => {\n    setPlaybackRate(rate);\n    if (videoRef.current) {\n      videoRef.current.playbackRate = rate;\n    }\n  };\n\n  const handleMuteToggle = () => {\n    toggleMute();\n    if (videoRef.current) {\n      videoRef.current.muted = !isMuted;\n    }\n  };\n\n  const handleFullscreenToggle = () => {\n    toggleFullscreen();\n\n    if (!isFullscreen) {\n      if (containerRef.current?.requestFullscreen) {\n        containerRef.current.requestFullscreen();\n      }\n    } else {\n      if (document.exitFullscreen) {\n        document.exitFullscreen();\n      }\n    }\n  };\n\n  const handleChapterClick = (chapter: MediaChapter) => {\n    handleSeek(chapter.startTime);\n    setActiveChapter(mediaFile.id, chapter.id);\n  };\n\n  const handleTranscriptClick = (entry: TranscriptEntry) => {\n    handleSeek(entry.startTime);\n  };\n  const hasVisibleChapters =\n    showChapters &&\n    Boolean(mediaFile.chapters && mediaFile.chapters.length > 0);\n  const hasVisibleTranscript =\n    showTranscript && hasTranscript && visibleTranscript.length > 0;\n\n  return (\n    <div\n      className={cn(\n        \"ag-advanced-video-player glass-relative glass-radius-lg glass-overflow-hidden\",\n        isCompact && \"ag-video-compact\",\n        className\n      )}\n      data-testid={dataTestId || \"glassadvancedvideoplayer\"}\n      style={{\n        background: \"#020617\",\n        color: \"#f8fafc\",\n        minHeight: 320,\n      }}\n    >\n      <style>{videoComponentStyles}</style>\n      <div\n        ref={containerRef}\n        className=\"ag-video-layout glass-relative glass-w-full glass-h-full\"\n        style={{ minHeight: 0 }}\n        onMouseMove={handleMouseMove}\n        onMouseLeave={() => setShowControlsOverlay(false)}\n      >\n        {/* Video Container */}\n        <div\n          className=\"ag-video-surface glass-flex-1 glass-relative\"\n          style={{ minHeight: 0, overflow: \"hidden\" }}\n        >\n          {usePosterSurface && (\n            <img\n              src={posterSrc}\n              alt={mediaFile.title || \"Video preview\"}\n              className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full glass-object-cover\"\n              style={{\n                background: \"#020617\",\n                cursor: \"pointer\",\n                minHeight: \"100%\",\n              }}\n              onClick={handlePlayPause}\n            />\n          )}\n          <video\n            ref={videoRef}\n            src={usePosterSurface ? undefined : mediaFile.src}\n            poster={posterSrc}\n            autoPlay={autoplay}\n            muted={muted}\n            loop={loop}\n            preload={preload}\n            className=\"glass-w-full glass-h-full glass-object-contain\"\n            style={usePosterSurface ? { display: \"none\" } : undefined}\n            onTimeUpdate={handleTimeUpdate}\n            onLoadedMetadata={handleLoadedMetadata}\n            onEnded={handleEnded}\n            onError={handleError}\n            onClick={handlePlayPause}\n          />\n\n          {/* Loading Overlay */}\n          {playbackState?.isLoading && (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n              style={{\n                background:\n                  \"var(--glass-primary-level2-surface)\",\n              }}\n            >\n              <div className=\"glass-animate-spin glass-radius-full glass-h-16 glass-w-16 glass-border-4 glass-border-white glass-border-t-transparent\" />\n            </div>\n          )}\n\n          {/* Error Overlay */}\n          {playbackState?.isError && (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-text-primary\"\n              style={{\n                background:\n                  \"var(--glass-primary-level2-surface)\",\n              }}\n            >\n              <div className=\"glass-text-center\">\n                <div className=\"glass-text-4xl glass-mb-4\">\u26A0\uFE0F</div>\n                <h3 className=\"glass-text-xl glass-font-semibold glass-mb-2\">\n                  Playback Error\n                </h3>\n                <p className=\"glass-text-secondary\">\n                  Unable to load video content\n                </p>\n              </div>\n            </div>\n          )}\n\n          {/* Controls Overlay */}\n          {showControlsOverlay && (\n            <VideoControls\n              isPlaying={isPlaying}\n              currentTime={currentTime}\n              duration={duration}\n              volume={volume}\n              playbackRate={playbackRate}\n              isFullscreen={isFullscreen}\n              isMuted={isMuted}\n              quality={quality}\n              buffered={\n                videoRef.current?.buffered.length\n                  ? videoRef.current.buffered.end(\n                      videoRef.current.buffered.length - 1\n                    )\n                  : 0\n              }\n              onPlayPause={handlePlayPause}\n              onSeek={handleSeek}\n              onVolumeChange={handleVolumeChange}\n              onPlaybackRateChange={handlePlaybackRateChange}\n              onQualityChange={setQuality}\n              onFullscreenToggle={handleFullscreenToggle}\n              onMuteToggle={handleMuteToggle}\n            />\n          )}\n        </div>\n\n        {/* Side Panels */}\n        {(hasVisibleChapters || hasVisibleTranscript) && (\n          <div className=\"ag-video-side-panels glass-flex\">\n            {/* Chapters Panel */}\n            {hasVisibleChapters && mediaFile.chapters && (\n              <Glass className=\"ag-video-side-panel glass-h-full glass-overflow-hidden\">\n                <ChapterList\n                  chapters={mediaFile.chapters}\n                  currentTime={currentTime}\n                  onChapterClick={handleChapterClick}\n                />\n              </Glass>\n            )}\n\n            {/* Transcript Panel */}\n            {hasVisibleTranscript && (\n              <Glass className=\"ag-video-side-panel glass-h-full glass-overflow-hidden\">\n                <TranscriptPanel\n                  transcript={visibleTranscript}\n                  currentTime={currentTime}\n                  searchQuery={transcriptSearch}\n                  onSearchChange={setTranscriptSearch}\n                  onTranscriptClick={handleTranscriptClick}\n                />\n              </Glass>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n", "\"use client\";\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { Glass } from \"../../primitives\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { useMedia, MediaFile, TranscriptEntry } from \"./GlassMediaProvider\";\n\nexport interface AdvancedAudioPlayerProps {\n  mediaFile: MediaFile;\n  className?: string;\n  variant?: \"compact\" | \"full\" | \"podcast\" | \"music\";\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  showTranscript?: boolean;\n  showPlaylist?: boolean;\n  showWaveform?: boolean;\n  showLyrics?: boolean;\n  autoplay?: boolean;\n  loop?: boolean;\n  preload?: \"none\" | \"metadata\" | \"auto\";\n  visualizerType?: \"bars\" | \"wave\" | \"circular\" | \"none\";\n  onTimeUpdate?: (currentTime: number) => void;\n  onEnded?: () => void;\n  onError?: (error: string) => void;\n  playlist?: MediaFile[];\n  \"data-testid\"?: string; // Add data-testid to props\n}\n\ninterface WaveformProps {\n  audioData: number[];\n  currentTime: number;\n  duration: number;\n  onSeek: (time: number) => void;\n}\n\ninterface AudioVisualizerProps {\n  type: \"bars\" | \"wave\" | \"circular\";\n  audioContext?: AudioContext;\n  analyzer?: AnalyserNode;\n  isPlaying: boolean;\n}\n\nconst formatTime = (seconds: number): string => {\n  if (isNaN(seconds)) return \"0:00\";\n\n  const minutes = Math.floor(seconds / 60);\n  const secs = Math.floor(seconds % 60);\n  return `${minutes}:${secs.toString().padStart(2, \"0\")}`;\n};\n\nconst getInlineTranscript = (mediaFile: MediaFile): TranscriptEntry[] =>\n  mediaFile.subtitles?.flatMap(\n    (subtitle) =>\n      subtitle.content?.map((entry) => ({\n        ...entry,\n        keywords: [],\n        sentiment: \"neutral\" as const,\n      })) ?? []\n  ) ?? [];\n\nconst clampPercent = (value: number, total: number): number => {\n  if (!Number.isFinite(value) || !Number.isFinite(total) || total <= 0) {\n    return 0;\n  }\n\n  return Math.max(0, Math.min(100, (value / total) * 100));\n};\n\nconst audioButtonStyle: React.CSSProperties = {\n  ...createGlassStyle({\n    intent: \"neutral\",\n    elevation: \"level4\",\n    interactive: true,\n  }),\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  border: \"1px solid rgba(148, 163, 184, 0.38)\",\n  color: \"#f8fafc\",\n  boxShadow:\n    \"inset 0 1px 0 rgba(255,255,255,0.12), 0 12px 28px rgba(2,6,23,0.24)\",\n};\n\nconst audioPrimaryButtonStyle: React.CSSProperties = {\n  ...createGlassStyle({\n    intent: \"primary\",\n    elevation: \"level4\",\n    interactive: true,\n  }),\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  color: \"#f8fafc\",\n  borderColor: \"rgba(191, 219, 254, 0.7)\",\n  boxShadow:\n    \"inset 0 1px 0 rgba(255,255,255,0.12), 0 12px 28px rgba(2,6,23,0.24)\",\n};\n\nconst audioRangeStyle: React.CSSProperties = {\n  appearance: \"none\",\n  WebkitAppearance: \"none\",\n  color: \"#0ea5e9\",\n  accentColor: \"#0ea5e9\",\n};\n\nconst audioComponentStyles = `\n  .ag-advanced-audio-player,\n  .ag-advanced-audio-player * {\n    box-sizing: border-box;\n  }\n\n  .ag-advanced-audio-player .ag-audio-layout {\n    display: flex;\n    flex-wrap: wrap;\n    min-width: 0;\n  }\n\n  .ag-advanced-audio-player .ag-audio-main {\n    flex: 1 1 26rem;\n    min-width: min(100%, 20rem);\n  }\n\n  .ag-advanced-audio-player .ag-audio-side-panels {\n    display: flex;\n    flex: 1 1 24rem;\n    min-width: min(100%, 20rem);\n    max-width: 44rem;\n    border-left: 1px solid rgba(15, 23, 42, 0.12);\n  }\n\n  .ag-advanced-audio-player .ag-audio-side-panel {\n    flex: 1 1 20rem;\n    min-width: min(100%, 18rem);\n    height: 24rem;\n    max-height: 24rem;\n    overflow: hidden;\n  }\n\n  .ag-advanced-audio-player .ag-audio-side-panel + .ag-audio-side-panel {\n    border-left: 1px solid rgba(15, 23, 42, 0.12);\n  }\n\n  .ag-advanced-audio-player .ag-audio-panel-content {\n    height: 100%;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    background: linear-gradient(180deg, rgba(255, 255, 255, 0.82), rgba(248, 250, 252, 0.68));\n    color: #0f172a;\n  }\n\n  .ag-advanced-audio-player .ag-audio-panel-scroll {\n    min-height: 0;\n    overflow-y: auto;\n    overscroll-behavior: contain;\n    padding-right: 2px;\n  }\n\n  @media (max-width: 920px) {\n    .ag-advanced-audio-player .ag-audio-side-panels {\n      width: 100%;\n      max-width: none;\n      border-left: 0;\n      border-top: 1px solid rgba(15, 23, 42, 0.12);\n    }\n  }\n\n  @media (max-width: 640px) {\n    .ag-advanced-audio-player .ag-audio-side-panels {\n      flex-direction: column;\n    }\n\n    .ag-advanced-audio-player .ag-audio-side-panel {\n      width: 100%;\n      max-height: 20rem;\n    }\n  }\n`;\n\nconst fallbackCover =\n  \"data:image/svg+xml,\" +\n  encodeURIComponent(`\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 720 720\">\n      <defs>\n        <linearGradient id=\"cover\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n          <stop offset=\"0\" stop-color=\"#0f172a\"/>\n          <stop offset=\"0.5\" stop-color=\"#7c3aed\"/>\n          <stop offset=\"1\" stop-color=\"#0f766e\"/>\n        </linearGradient>\n      </defs>\n      <rect width=\"720\" height=\"720\" fill=\"url(#cover)\"/>\n      <circle cx=\"360\" cy=\"360\" r=\"170\" fill=\"rgba(255,255,255,0.16)\"/>\n      <circle cx=\"360\" cy=\"360\" r=\"58\" fill=\"rgba(255,255,255,0.88)\"/>\n      <rect x=\"112\" y=\"108\" width=\"408\" height=\"74\" rx=\"22\" fill=\"rgba(255,255,255,0.18)\"/>\n      <text x=\"142\" y=\"158\" font-family=\"Inter, Arial, sans-serif\" font-size=\"34\" font-weight=\"700\" fill=\"#ffffff\">AuraGlass Audio</text>\n      <rect x=\"116\" y=\"572\" width=\"488\" height=\"12\" rx=\"6\" fill=\"rgba(255,255,255,0.24)\"/>\n      <rect x=\"116\" y=\"572\" width=\"228\" height=\"12\" rx=\"6\" fill=\"#ffffff\"/>\n    </svg>\n  `);\n\nconst Waveform: React.FC<WaveformProps> = ({\n  audioData,\n  currentTime,\n  duration,\n  onSeek,\n}) => {\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const [isHovering, setIsHovering] = useState(false);\n  const [hoverTime, setHoverTime] = useState(0);\n\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    if (!canvas || !audioData.length) return;\n\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx) return;\n\n    const { width, height } = canvas;\n    ctx.clearRect(0, 0, width, height);\n\n    // Draw waveform\n    const barWidth = width / audioData.length;\n    const progress = currentTime / duration;\n\n    audioData.forEach((amplitude, index) => {\n      const barHeight = amplitude * height * 0.8;\n      const x = index * barWidth;\n      const y = (height - barHeight) / 2;\n\n      // Color based on progress\n      const isPlayed = index / audioData.length < progress;\n      ctx.fillStyle = isPlayed\n        ? \"hsl(var(--glass-color-primary))\"\n        : \"var(--glass-gray-200)\";\n      ctx.fillRect(x, y, barWidth - 1, barHeight);\n    });\n\n    // Progress indicator\n    const progressX = progress * width;\n    ctx.strokeStyle = \"#1d4ed8\";\n    ctx.lineWidth = 2;\n    ctx.beginPath();\n    ctx.moveTo(progressX, 0);\n    ctx.lineTo(progressX, height);\n    ctx.stroke();\n\n    // Hover indicator\n    if (isHovering) {\n      const hoverX = (hoverTime / duration) * width;\n      ctx.strokeStyle = \"#64748b\";\n      ctx.lineWidth = 1;\n      ctx.beginPath();\n      ctx.moveTo(hoverX, 0);\n      ctx.lineTo(hoverX, height);\n      ctx.stroke();\n    }\n  }, [audioData, currentTime, duration, isHovering, hoverTime]);\n\n  const handleMouseMove = (e: React.MouseEvent<HTMLCanvasElement>) => {\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const rect = canvas.getBoundingClientRect();\n    const x = e.clientX - rect.left;\n    const percentage = x / rect.width;\n    const time = percentage * duration;\n\n    setHoverTime(time);\n  };\n\n  const handleClick = (e: React.MouseEvent<HTMLCanvasElement>) => {\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const rect = canvas.getBoundingClientRect();\n    const x = e.clientX - rect.left;\n    const percentage = x / rect.width;\n    const time = percentage * duration;\n\n    onSeek(time);\n  };\n\n  return (\n    <div data-glass-component className=\"glass-relative\">\n      <canvas\n        ref={canvasRef}\n        width={400}\n        height={80}\n        className=\"glass-w-full glass-h-20 glass-cursor-pointer\"\n        onMouseMove={handleMouseMove}\n        onMouseEnter={() => setIsHovering(true)}\n        onMouseLeave={() => setIsHovering(false)}\n        onClick={handleClick}\n      />\n      {isHovering && (\n        <div\n          className=\"glass-absolute glass-bottom-24 glass-surface-overlay glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius glass-pointer-events-none\"\n          style={{\n            left: `${(hoverTime / duration) * 100}%`,\n            transform: \"translateX(-50%)\",\n          }}\n        >\n          {formatTime(hoverTime)}\n        </div>\n      )}\n    </div>\n  );\n};\n\nconst AudioVisualizer: React.FC<AudioVisualizerProps> = ({\n  type,\n  audioContext,\n  analyzer,\n  isPlaying,\n}) => {\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const animationRef = useRef<number>();\n\n  const getIdleData = useCallback(() => {\n    const data = new Uint8Array(64);\n    for (let index = 0; index < data.length; index++) {\n      const wave = Math.sin(index * 0.42) * 34;\n      const pulse = Math.cos(index * 0.17) * 22;\n      data[index] = Math.max(20, Math.min(160, 84 + wave + pulse));\n    }\n    return data;\n  }, []);\n\n  const drawBars = useCallback(\n    (ctx: CanvasRenderingContext2D, dataArray: Uint8Array) => {\n      const { width, height } = ctx.canvas;\n      ctx.clearRect(0, 0, width, height);\n\n      const barWidth = (width / dataArray.length) * 2.5;\n      let x = 0;\n\n      for (let i = 0; i < dataArray.length; i++) {\n        const barHeight = (dataArray[i] / 255) * height;\n\n        const r = barHeight + 25 * (i / dataArray.length);\n        const g = 250 * (i / dataArray.length);\n        const b = 50;\n\n        ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;\n        ctx.fillRect(x, height - barHeight, barWidth, barHeight);\n        x += barWidth + 1;\n      }\n    },\n    []\n  );\n\n  const drawWave = useCallback(\n    (ctx: CanvasRenderingContext2D, dataArray: Uint8Array) => {\n      const { width, height } = ctx.canvas;\n      ctx.clearRect(0, 0, width, height);\n\n      ctx.lineWidth = 2;\n      ctx.strokeStyle = \"hsl(var(--glass-color-primary))\";\n      ctx.beginPath();\n\n      const sliceWidth = width / dataArray.length;\n      let x = 0;\n\n      for (let i = 0; i < dataArray.length; i++) {\n        const v = dataArray[i] / 128.0;\n        const y = (v * height) / 2;\n\n        if (i === 0) {\n          ctx.moveTo(x, y);\n        } else {\n          ctx.lineTo(x, y);\n        }\n\n        x += sliceWidth;\n      }\n\n      ctx.lineTo(width, height / 2);\n      ctx.stroke();\n    },\n    []\n  );\n\n  const drawCircular = useCallback(\n    (ctx: CanvasRenderingContext2D, dataArray: Uint8Array) => {\n      const { width, height } = ctx.canvas;\n      ctx.clearRect(0, 0, width, height);\n\n      const centerX = width / 2;\n      const centerY = height / 2;\n      const radius = Math.min(width, height) / 4;\n\n      ctx.strokeStyle = \"hsl(var(--glass-color-primary))\";\n      ctx.lineWidth = 2;\n\n      for (let i = 0; i < dataArray.length; i++) {\n        const angle = (i / dataArray.length) * 2 * Math.PI;\n        const amplitude = (dataArray[i] / 255) * radius;\n\n        const x1 = centerX + Math.cos(angle) * radius;\n        const y1 = centerY + Math.sin(angle) * radius;\n        const x2 = centerX + Math.cos(angle) * (radius + amplitude);\n        const y2 = centerY + Math.sin(angle) * (radius + amplitude);\n\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n      }\n    },\n    []\n  );\n\n  const animate = useCallback(() => {\n    if (!analyzer || !isPlaying) return;\n\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx) return;\n\n    const dataArray = new Uint8Array(analyzer.frequencyBinCount);\n    analyzer.getByteFrequencyData(dataArray);\n\n    switch (type) {\n      case \"bars\":\n        drawBars(ctx, dataArray);\n        break;\n      case \"wave\":\n        drawWave(ctx, dataArray);\n        break;\n      case \"circular\":\n        drawCircular(ctx, dataArray);\n        break;\n    }\n\n    animationRef.current = requestAnimationFrame(animate);\n  }, [analyzer, isPlaying, type, drawBars, drawWave, drawCircular]);\n\n  useEffect(() => {\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext(\"2d\");\n\n    if (ctx && (!isPlaying || !analyzer)) {\n      const idleData = getIdleData();\n      switch (type) {\n        case \"bars\":\n          drawBars(ctx, idleData);\n          break;\n        case \"wave\":\n          drawWave(ctx, idleData);\n          break;\n        case \"circular\":\n          drawCircular(ctx, idleData);\n          break;\n      }\n    }\n\n    if (isPlaying) {\n      animate();\n    } else if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n    }\n\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, [\n    isPlaying,\n    analyzer,\n    animate,\n    drawBars,\n    drawWave,\n    drawCircular,\n    getIdleData,\n    type,\n  ]);\n\n  return (\n    <canvas\n      ref={canvasRef}\n      width={200}\n      height={100}\n      className=\"glass-w-full glass-h-24\"\n    />\n  );\n};\n\nconst PlaylistPanel: React.FC<{\n  playlist: MediaFile[];\n  currentMediaId: string;\n  onMediaSelect: (media: MediaFile) => void;\n}> = ({ playlist, currentMediaId, onMediaSelect }) => {\n  return (\n    <div className=\"ag-audio-panel-content glass-surface-subtle glass-p-4\">\n      <h3 className=\"glass-font-semibold glass-text-secondary glass-mb-3\">\n        Playlist\n      </h3>\n      <div className=\"ag-audio-panel-scroll glass-space-y-2\">\n        {playlist.map((media, index) => (\n          <button\n            key={media.id}\n            onClick={() => onMediaSelect(media)}\n            className=\"glass-flex glass-items-center glass-gap-3 glass-w-full glass-p-3 glass-radius-lg glass-text-left glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            style={{\n              background:\n                media.id === currentMediaId\n                  ? \"rgba(219, 234, 254, 0.9)\"\n                  : \"rgba(255, 255, 255, 0.74)\",\n              border: \"1px solid rgba(15, 23, 42, 0.12)\",\n              color: \"#0f172a\",\n              minHeight: 84,\n            }}\n          >\n            <div className=\"glass-text-lg\">{index + 1}</div>\n            <div className=\"glass-flex-1 glass-min-w-0\">\n              <div className=\"glass-font-medium glass-text-secondary glass-truncate\">\n                {media.title || `Track ${index + 1}`}\n              </div>\n              {media.description && (\n                <div className=\"glass-text-sm glass-text-secondary glass-truncate\">\n                  {media.description}\n                </div>\n              )}\n              <div className=\"glass-text-xs glass-text-secondary\">\n                {media.duration ? formatTime(media.duration) : \"--:--\"}\n              </div>\n            </div>\n            {media.id === currentMediaId && (\n              <div className=\"glass-text-primary\">\u25B6</div>\n            )}\n          </button>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nconst TranscriptPanel: React.FC<{\n  transcript: TranscriptEntry[];\n  currentTime: number;\n  searchQuery: string;\n  onSearchChange: (query: string) => void;\n  onTranscriptClick: (entry: TranscriptEntry) => void;\n}> = ({\n  transcript,\n  currentTime,\n  searchQuery,\n  onSearchChange,\n  onTranscriptClick,\n}) => {\n  const [highlightedResults, setHighlightedResults] = useState<\n    TranscriptEntry[]\n  >([]);\n\n  useEffect(() => {\n    if (searchQuery) {\n      const results = transcript.filter((entry: any) =>\n        entry.text.toLowerCase().includes(searchQuery.toLowerCase())\n      );\n      setHighlightedResults(results);\n    } else {\n      setHighlightedResults([]);\n    }\n  }, [searchQuery, transcript]);\n\n  const highlightText = (text: string, query: string) => {\n    if (!query) return text;\n\n    const regex = new RegExp(`(${query})`, \"gi\");\n    return text.split(regex).map((part, index) =>\n      part.toLowerCase() === query.toLowerCase() ? (\n        <mark\n          key={index}\n          className=\"glass-surface-subtle glass-radius glass-px-1\"\n        >\n          {part}\n        </mark>\n      ) : (\n        part\n      )\n    );\n  };\n\n  return (\n    <div className=\"ag-audio-panel-content glass-surface-subtle glass-p-4 glass-h-full glass-flex glass-flex-col\">\n      <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-4\">\n        <h3 className=\"glass-font-semibold glass-text-secondary\">Transcript</h3>\n        <div className=\"glass-text-sm glass-text-secondary\">\n          {transcript.length} entries\n        </div>\n      </div>\n\n      {/* Search */}\n      <div className=\"glass-mb-4\">\n        <input\n          type=\"text\"\n          placeholder=\"Search transcript...\"\n          value={searchQuery}\n          onChange={(e) => onSearchChange(e.target.value)}\n          className=\"glass-w-full glass-px-3 glass-py-2 glass-border glass-border-subtle glass-radius-lg glass-focus-outline-none glass-focus-ring-2 glass-focus-ring-blue-500 glass-focus glass-touch-target glass-contrast-guard\"\n        />\n        {searchQuery && (\n          <div className=\"glass-text-sm glass-text-secondary glass-mt-2\">\n            {highlightedResults.length} results found\n          </div>\n        )}\n      </div>\n\n      {/* Transcript Entries */}\n      <div className=\"ag-audio-panel-scroll glass-flex-1 glass-space-y-2\">\n        {(searchQuery ? highlightedResults : transcript).map((entry: any) => {\n          const isActive =\n            currentTime >= entry.startTime && currentTime <= entry.endTime;\n\n          return (\n            <button\n              key={entry.id}\n              onClick={() => onTranscriptClick(entry)}\n              className=\"glass-flex glass-flex-col glass-items-start glass-gap-2 glass-w-full glass-p-3 glass-radius-lg glass-text-left glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n              style={{\n                background: isActive\n                  ? \"rgba(219, 234, 254, 0.9)\"\n                  : \"rgba(255, 255, 255, 0.74)\",\n                border: \"1px solid rgba(15, 23, 42, 0.12)\",\n                color: \"#0f172a\",\n              }}\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between glass-w-full\">\n                <span className=\"glass-text-xs glass-text-secondary glass-font-mono\">\n                  {formatTime(entry.startTime)}\n                </span>\n                {entry.speaker && (\n                  <span className=\"glass-text-xs glass-surface-subtle glass-text-secondary glass-px-2 glass-py-1 glass-radius\">\n                    {entry.speaker}\n                  </span>\n                )}\n              </div>\n\n              <div className=\"glass-text-sm glass-text-secondary glass-leading-relaxed\">\n                {searchQuery\n                  ? highlightText(entry.text, searchQuery)\n                  : entry.text}\n              </div>\n            </button>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nexport const GlassAdvancedAudioPlayer: React.FC<AdvancedAudioPlayerProps> = (\n  props\n) => {\n  const {\n    mediaFile,\n    className,\n    variant = \"full\",\n    compact = false,\n    contained = false,\n    maxHeight,\n    showTranscript = false,\n    showPlaylist = false,\n    showWaveform = false,\n    showLyrics = false,\n    autoplay = false,\n    loop = false,\n    preload = \"metadata\",\n    visualizerType = \"bars\",\n    onTimeUpdate,\n    onEnded,\n    onError,\n    playlist = [],\n  } = props;\n  const {\n    playbackState,\n    setPlaybackState,\n    play,\n    pause,\n    seekTo,\n    setVolume,\n    setPlaybackRate,\n    toggleMute,\n    transcripts,\n    generateTranscript,\n    trackView,\n  } = useMedia();\n\n  const audioRef = useRef<HTMLAudioElement>(null);\n  const audioContextRef = useRef<AudioContext>();\n  const analyzerRef = useRef<AnalyserNode>();\n\n  const [transcriptSearch, setTranscriptSearch] = useState(\"\");\n  const [hasTranscript, setHasTranscript] = useState(false);\n  const [waveformData, setWaveformData] = useState<number[]>([]);\n  const [currentPlaylistIndex, setCurrentPlaylistIndex] = useState(0);\n  const inlineTranscript = React.useMemo(\n    () => getInlineTranscript(mediaFile),\n    [mediaFile]\n  );\n  const visibleTranscript = transcripts[mediaFile.id] ?? inlineTranscript;\n\n  const isPlaying =\n    playbackState?.mediaId === mediaFile.id && playbackState.isPlaying;\n  const currentTime =\n    playbackState?.mediaId === mediaFile.id ? playbackState.currentTime : 0;\n  const duration =\n    playbackState?.mediaId === mediaFile.id\n      ? playbackState.duration\n      : mediaFile.duration || 0;\n  const volume = playbackState?.volume || 1;\n  const playbackRate = playbackState?.playbackRate || 1;\n  const isMuted = playbackState?.isMuted || false;\n  const coverSrc = mediaFile.thumbnail || mediaFile.poster || fallbackCover;\n  const playbackSpeeds = [0.5, 0.75, 1, 1.25, 1.5, 2];\n  const resolvedVariant = compact ? \"compact\" : variant;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n\n  // Lazily create audio context when user initiates playback\n  const ensureAudioContext = useCallback(() => {\n    if (\n      visualizerType === \"none\" ||\n      !audioRef.current ||\n      audioContextRef.current\n    )\n      return;\n    try {\n      audioContextRef.current = new (window.AudioContext ||\n        (window as any).webkitAudioContext)();\n      analyzerRef.current = audioContextRef.current.createAnalyser();\n      analyzerRef.current.fftSize = 256;\n      const source = audioContextRef.current.createMediaElementSource(\n        audioRef.current\n      );\n      source.connect(analyzerRef.current);\n      analyzerRef.current.connect(audioContextRef.current.destination);\n    } catch {\n      // Visualization is optional when the browser blocks audio analysis.\n    }\n  }, [visualizerType]);\n  // Initialize transcript\n  useEffect(() => {\n    if (!showTranscript) return;\n\n    if (inlineTranscript.length > 0) {\n      setHasTranscript(true);\n      return;\n    }\n\n    if (!transcripts[mediaFile.id] && showTranscript) {\n      generateTranscript(mediaFile.id).then(() => {\n        setHasTranscript(true);\n      });\n    } else if (transcripts[mediaFile.id]) {\n      setHasTranscript(true);\n    }\n  }, [\n    mediaFile.id,\n    showTranscript,\n    generateTranscript,\n    transcripts,\n    inlineTranscript.length,\n  ]);\n\n  // Generate mock waveform data\n  useEffect(() => {\n    if (showWaveform) {\n      const mockData = Array.from(\n        { length: 100 },\n        (_, index) =>\n          0.22 +\n          Math.abs(Math.sin(index * 0.29)) * 0.42 +\n          Math.abs(Math.cos(index * 0.11)) * 0.18\n      );\n      setWaveformData(mockData);\n    }\n  }, [showWaveform]);\n\n  // Audio event handlers\n  const handleTimeUpdate = () => {\n    if (audioRef.current) {\n      const currentTime = audioRef.current.currentTime;\n\n      if (playbackState && playbackState.mediaId === mediaFile.id) {\n        setPlaybackState({ ...playbackState, currentTime });\n      }\n\n      onTimeUpdate?.(currentTime);\n    }\n  };\n\n  const handleLoadedMetadata = () => {\n    if (audioRef.current) {\n      const duration = audioRef.current.duration;\n      if (playbackState && playbackState.mediaId === mediaFile.id) {\n        setPlaybackState({ ...playbackState, duration, isLoading: false });\n      }\n    }\n  };\n\n  const handleEnded = () => {\n    if (playlist.length > 0 && currentPlaylistIndex < playlist.length - 1) {\n      // Auto-play next track\n      const nextIndex = currentPlaylistIndex + 1;\n      setCurrentPlaylistIndex(nextIndex);\n      handleMediaSelect(playlist[nextIndex]);\n    } else {\n      if (playbackState && playbackState.mediaId === mediaFile.id) {\n        setPlaybackState({\n          ...playbackState,\n          isPlaying: false,\n          currentTime: 0,\n        });\n      }\n\n      trackView(mediaFile.id, duration);\n      onEnded?.();\n    }\n  };\n\n  const handlePlayPause = () => {\n    if (isPlaying) {\n      pause();\n      if (audioRef.current) {\n        audioRef.current.pause();\n      }\n    } else {\n      play(mediaFile.id);\n      // Create AudioContext and wiring as part of user gesture\n      ensureAudioContext();\n      if (audioRef.current) {\n        audioRef.current.play();\n      }\n    }\n  };\n\n  const handleSeek = (time: number) => {\n    seekTo(time);\n    if (audioRef.current) {\n      audioRef.current.currentTime = time;\n    }\n  };\n\n  const handleVolumeChange = (newVolume: number) => {\n    setVolume(newVolume);\n    if (audioRef.current) {\n      audioRef.current.volume = newVolume;\n    }\n  };\n\n  const handlePlaybackRateChange = (rate: number) => {\n    setPlaybackRate(rate);\n    if (audioRef.current) {\n      audioRef.current.playbackRate = rate;\n    }\n  };\n\n  const handleMuteToggle = () => {\n    toggleMute();\n    if (audioRef.current) {\n      audioRef.current.muted = !isMuted;\n    }\n  };\n\n  const handleMediaSelect = (media: MediaFile) => {\n    play(media.id);\n    const index = playlist.findIndex((item) => item.id === media.id);\n    if (index !== -1) {\n      setCurrentPlaylistIndex(index);\n    }\n  };\n\n  const handleTranscriptClick = (entry: TranscriptEntry) => {\n    handleSeek(entry.startTime);\n  };\n\n  const handleSpeedCycle = () => {\n    const currentIndex = playbackSpeeds.indexOf(playbackRate);\n    const nextSpeed =\n      playbackSpeeds[(currentIndex + 1) % playbackSpeeds.length];\n    handlePlaybackRateChange(nextSpeed);\n  };\n\n  const renderCompactPlayer = () => (\n    <div\n      className=\"glass-flex glass-items-center glass-gap-4 glass-p-4\"\n      style={{ color: \"#0f172a\", minHeight: 96 }}\n    >\n      <img\n        src={coverSrc}\n        alt=\"\"\n        className=\"glass-w-16 glass-h-16 glass-object-cover glass-radius-lg\"\n        style={{ flex: \"0 0 auto\", boxShadow: \"0 10px 24px rgba(2,6,23,0.16)\" }}\n      />\n      <button\n        onClick={handlePlayPause}\n        className=\"glass-w-12 glass-h-12 glass-flex glass-items-center glass-justify-center glass-surface-primary glass-text-primary glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n        style={audioPrimaryButtonStyle}\n        aria-label={isPlaying ? \"Pause audio\" : \"Play audio\"}\n      >\n        {isPlaying ? \"\u23F8\uFE0F\" : \"\u25B6\uFE0F\"}\n      </button>\n\n      <div className=\"glass-flex-1\">\n        <div className=\"glass-font-medium glass-text-secondary glass-truncate\">\n          {mediaFile.title || \"Untitled Track\"}\n        </div>\n        <div className=\"glass-text-sm glass-text-secondary glass-truncate\">\n          {mediaFile.description || \"No description\"}\n        </div>\n      </div>\n\n      <div\n        className=\"glass-text-sm glass-text-secondary glass-font-mono\"\n        style={{\n          ...createGlassStyle({ intent: \"neutral\", elevation: \"level1\" }),\n          color: \"#0f172a\",\n          border: \"1px solid rgba(148,163,184,0.34)\",\n          borderRadius: 999,\n          padding: \"8px 12px\",\n          whiteSpace: \"nowrap\",\n        }}\n      >\n        {formatTime(currentTime)} / {formatTime(duration)}\n      </div>\n    </div>\n  );\n\n  const renderFullPlayer = () => (\n    <div className=\"glass-p-6 glass-space-y-6\" style={{ color: \"#0f172a\" }}>\n      {/* Header */}\n      <div\n        className=\"glass-flex glass-items-center glass-gap-4\"\n        style={{ alignItems: \"center\" }}\n      >\n        <img\n          src={coverSrc}\n          alt=\"\"\n          className=\"glass-w-24 glass-h-24 glass-object-cover glass-radius-lg\"\n          style={{\n            flex: \"0 0 auto\",\n            border: \"1px solid rgba(148,163,184,0.34)\",\n            boxShadow: \"0 16px 34px rgba(2,6,23,0.18)\",\n          }}\n        />\n        <div>\n          <h2 className=\"glass-text-xl glass-font-semibold glass-text-secondary\">\n            {mediaFile.title || \"Untitled Track\"}\n          </h2>\n          {mediaFile.description && (\n            <p className=\"glass-text-secondary glass-mt-1\">\n              {mediaFile.description}\n            </p>\n          )}\n        </div>\n      </div>\n\n      {/* Waveform or Visualizer */}\n      {showWaveform ? (\n        <Waveform\n          audioData={waveformData}\n          currentTime={currentTime}\n          duration={duration}\n          onSeek={handleSeek}\n        />\n      ) : (\n        visualizerType !== \"none\" && (\n          <AudioVisualizer\n            type={visualizerType}\n            audioContext={audioContextRef.current}\n            analyzer={analyzerRef.current}\n            isPlaying={isPlaying}\n          />\n        )\n      )}\n\n      {/* Progress Bar */}\n      <div className=\"glass-space-y-2\">\n        <div className=\"glass-flex glass-justify-between glass-text-sm glass-text-secondary glass-font-mono\">\n          <span>{formatTime(currentTime)}</span>\n          <span>{formatTime(duration)}</span>\n        </div>\n        <div\n          className=\"glass-w-full glass-h-2 glass-surface-subtle glass-radius-full glass-cursor-pointer\"\n          style={createGlassStyle({ intent: \"neutral\", elevation: \"level1\" })}\n          onClick={(event) => {\n            if (duration <= 0) return;\n            const rect = event.currentTarget.getBoundingClientRect();\n            handleSeek(((event.clientX - rect.left) / rect.width) * duration);\n          }}\n        >\n          <div\n            className=\"glass-h-full glass-surface-primary glass-radius-full\"\n            style={{\n              width: `${clampPercent(currentTime, duration)}%`,\n            }}\n          />\n        </div>\n      </div>\n\n      {/* Controls */}\n      <div className=\"glass-flex glass-items-center glass-justify-center glass-gap-6\">\n        <button\n          onClick={() => handleSeek(Math.max(0, currentTime - 10))}\n          className=\"glass-w-10 glass-h-10 glass-flex glass-items-center glass-justify-center hover:glass-surface-subtle glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          style={audioButtonStyle}\n          aria-label=\"Rewind 10 seconds\"\n        >\n          \u23EA\n        </button>\n\n        <button\n          onClick={handlePlayPause}\n          className=\"glass-w-16 glass-h-16 glass-flex glass-items-center glass-justify-center glass-surface-primary glass-text-primary glass-radius-full glass-transition-colors glass-text-xl glass-focus glass-touch-target glass-contrast-guard\"\n          style={audioPrimaryButtonStyle}\n          aria-label={isPlaying ? \"Pause audio\" : \"Play audio\"}\n        >\n          {isPlaying ? \"\u23F8\uFE0F\" : \"\u25B6\uFE0F\"}\n        </button>\n\n        <button\n          onClick={() => handleSeek(Math.min(duration, currentTime + 10))}\n          className=\"glass-w-10 glass-h-10 glass-flex glass-items-center glass-justify-center hover:glass-surface-subtle glass-radius-full glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          style={audioButtonStyle}\n          aria-label=\"Forward 10 seconds\"\n        >\n          \u23E9\n        </button>\n      </div>\n\n      {/* Volume and Speed */}\n      <div\n        className=\"glass-flex glass-items-center glass-justify-between\"\n        style={{ gap: 16, flexWrap: \"wrap\" }}\n      >\n        <div className=\"glass-flex glass-items-center glass-gap-3\">\n          <button\n            onClick={handleMuteToggle}\n            className=\"glass-w-8 glass-h-8 glass-flex glass-items-center glass-justify-center hover:glass-surface-subtle glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            style={audioButtonStyle}\n            aria-label={isMuted ? \"Unmute audio\" : \"Mute audio\"}\n          >\n            {isMuted ? \"\uD83D\uDD07\" : \"\uD83D\uDD0A\"}\n          </button>\n          <input\n            type=\"range\"\n            min=\"0\"\n            max=\"1\"\n            step=\"0.01\"\n            value={isMuted ? 0 : volume}\n            onChange={(e) => handleVolumeChange(Number(e.target.value))}\n            className=\"glass-w-20 glass-focus glass-touch-target glass-contrast-guard\"\n            style={audioRangeStyle}\n            aria-label=\"Volume\"\n          />\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-gap-3\">\n          <span className=\"glass-text-sm glass-text-secondary\">Speed:</span>\n          <button\n            type=\"button\"\n            onClick={handleSpeedCycle}\n            className=\"glass-text-sm glass-border glass-border-subtle glass-radius glass-px-3 glass-py-2 glass-focus glass-touch-target glass-contrast-guard\"\n            style={audioButtonStyle}\n            aria-label={`Playback speed: ${playbackRate}x`}\n          >\n            {playbackRate}x\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n\n  return (\n    <Glass\n      className={cn(\n        \"ag-advanced-audio-player glass-overflow-hidden\",\n        className\n      )}\n      data-testid={props[\"data-testid\"]}\n      style={{\n        ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n        color: \"#0f172a\",\n        border: \"1px solid rgba(148, 163, 184, 0.28)\",\n        boxShadow: \"0 24px 70px rgba(15, 23, 42, 0.18)\",\n        maxHeight:\n          resolvedMaxHeight ?? (compact || contained ? \"220px\" : undefined),\n        overflow:\n          compact || contained || resolvedMaxHeight ? \"auto\" : undefined,\n      }}\n    >\n      <style>{audioComponentStyles}</style>\n      <div className=\"ag-audio-layout glass-flex\">\n        {/* Main Player */}\n        <div className=\"ag-audio-main glass-flex-1\">\n          <audio\n            ref={audioRef}\n            src={mediaFile.src}\n            autoPlay={autoplay}\n            loop={loop}\n            preload={preload}\n            onTimeUpdate={handleTimeUpdate}\n            onLoadedMetadata={handleLoadedMetadata}\n            onEnded={handleEnded}\n            onError={() => onError?.(\"Audio playback error occurred\")}\n          />\n\n          {resolvedVariant === \"compact\"\n            ? renderCompactPlayer()\n            : renderFullPlayer()}\n        </div>\n\n        {/* Side Panels */}\n        {(!compact && showPlaylist && playlist.length > 0) ||\n        (!compact &&\n          showTranscript &&\n          hasTranscript &&\n          visibleTranscript.length > 0) ? (\n          <div className=\"ag-audio-side-panels glass-flex\">\n            {!compact && showPlaylist && playlist.length > 0 && (\n              <div className=\"ag-audio-side-panel glass-border-l glass-border-subtle\">\n                <PlaylistPanel\n                  playlist={playlist}\n                  currentMediaId={mediaFile.id}\n                  onMediaSelect={handleMediaSelect}\n                />\n              </div>\n            )}\n\n            {showTranscript &&\n              hasTranscript &&\n              visibleTranscript.length > 0 && (\n                <div className=\"ag-audio-side-panel glass-border-l glass-border-subtle glass-overflow-hidden\">\n                  <TranscriptPanel\n                    transcript={visibleTranscript}\n                    currentTime={currentTime}\n                    searchQuery={transcriptSearch}\n                    onSearchChange={setTranscriptSearch}\n                    onTranscriptClick={handleTranscriptClick}\n                  />\n                </div>\n              )}\n          </div>\n        ) : null}\n      </div>\n    </Glass>\n  );\n};\n", "\"use client\";\n\nimport React, { forwardRef, type CSSProperties } from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\n\nexport interface LiquidGlassMediaControlsProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onVolumeChange\"> {\n  playing: boolean;\n  onPlayPause?: () => void;\n  currentTime?: number;\n  duration?: number;\n  volume?: number;\n  onSeek?: (value: number) => void;\n  onVolumeChange?: (value: number) => void;\n  variant?: \"regular\" | \"clear\";\n  localDimming?: boolean;\n  compact?: boolean;\n}\n\nconst mediaButtonStyle: CSSProperties = createGlassStyle({\n  intent: \"neutral\",\n  elevation: \"level2\",\n});\n\nconst rangeStyle: CSSProperties = {\n  accentColor: \"#2563eb\",\n  flex: \"1 1 180px\",\n  minWidth: 120,\n  maxWidth: 260,\n};\n\nconst timeStyle: CSSProperties = {\n  color: \"#f8fafc\",\n  fontVariantNumeric: \"tabular-nums\",\n  fontSize: 13,\n  lineHeight: 1,\n  minWidth: 78,\n  textAlign: \"center\",\n  textShadow: \"0 1px 8px rgba(2, 6, 23, 0.36)\",\n};\n\nconst formatMediaTime = (seconds: number): string => {\n  if (!Number.isFinite(seconds) || seconds < 0) return \"0:00\";\n  const minutes = Math.floor(seconds / 60);\n  const secs = Math.floor(seconds % 60);\n  return `${minutes}:${secs.toString().padStart(2, \"0\")}`;\n};\n\nexport const LiquidGlassMediaControls = forwardRef<\n  HTMLDivElement,\n  LiquidGlassMediaControlsProps\n>(\n  (\n    {\n      playing,\n      onPlayPause,\n      currentTime = 0,\n      duration = 0,\n      volume = 1,\n      onSeek,\n      onVolumeChange,\n      variant = \"clear\",\n      localDimming = true,\n      compact = false,\n      className,\n      ...props\n    },\n    ref\n  ) => (\n    <LiquidGlassMaterial\n      ref={ref}\n      material=\"liquid\"\n      variant={variant}\n      radius=\"full\"\n      className={cn(\"liquid-glass-media-controls\", className)}\n      data-local-dimming={localDimming ? \"true\" : \"false\"}\n      {...props}\n    >\n      <div\n        className={cn(\n          \"glass-flex glass-items-center glass-gap-3 glass-px-3 glass-py-2\",\n          compact && \"glass-gap-2\"\n        )}\n        style={{ flexWrap: \"wrap\", minWidth: 0 }}\n      >\n        <button\n          type=\"button\"\n          aria-label={playing ? \"Pause\" : \"Play\"}\n          style={mediaButtonStyle}\n          onClick={onPlayPause}\n        >\n          {playing ? \"Pause\" : \"Play\"}\n        </button>\n        <input\n          className=\"liquid-glass-range\"\n          data-glass-component=\"range\"\n          type=\"range\"\n          min={0}\n          max={duration || 1}\n          value={currentTime}\n          aria-label=\"Seek\"\n          style={rangeStyle}\n          onChange={(event) => onSeek?.(Number(event.target.value))}\n        />\n        {!compact && (\n          <span style={timeStyle}>\n            {formatMediaTime(currentTime)} / {formatMediaTime(duration)}\n          </span>\n        )}\n        {!compact && (\n          <input\n            className=\"liquid-glass-range\"\n            data-glass-component=\"range\"\n            type=\"range\"\n            min={0}\n            max={1}\n            step={0.01}\n            value={volume}\n            aria-label=\"Volume\"\n            style={rangeStyle}\n            onChange={(event) => onVolumeChange?.(Number(event.target.value))}\n          />\n        )}\n      </div>\n    </LiquidGlassMaterial>\n  )\n);\n\nLiquidGlassMediaControls.displayName = \"LiquidGlassMediaControls\";\n", "\"use client\";\n\nimport React, { forwardRef, type CSSProperties } from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { LiquidGlassBottomAccessory } from \"../navigation/LiquidGlassBottomAccessory\";\n\nexport interface LiquidGlassNowPlayingBarProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  title: string;\n  subtitle?: string;\n  artwork?: React.ReactNode;\n  playing?: boolean;\n  progress?: number;\n  onPlayPause?: () => void;\n  onExpand?: () => void;\n}\n\nconst nowPlayingMainButtonStyle: CSSProperties = {\n  border: 0,\n  background: \"transparent\",\n  color: \"inherit\",\n  cursor: \"pointer\",\n  font: \"inherit\",\n  minWidth: 0,\n};\n\nconst nowPlayingActionButtonStyle: CSSProperties = createGlassStyle({\n  intent: \"neutral\",\n  elevation: \"level2\",\n});\n\nexport const LiquidGlassNowPlayingBar = forwardRef<\n  HTMLDivElement,\n  LiquidGlassNowPlayingBarProps\n>(\n  (\n    {\n      title,\n      subtitle,\n      artwork,\n      playing = false,\n      progress = 0,\n      onPlayPause,\n      onExpand,\n      className,\n      ...props\n    },\n    ref\n  ) => (\n    <LiquidGlassBottomAccessory\n      ref={ref}\n      className={cn(\"liquid-glass-now-playing-bar\", className)}\n      {...props}\n    >\n      <button\n        type=\"button\"\n        className=\"glass-flex glass-min-w-0 glass-flex-1 glass-items-center glass-gap-3 glass-text-left\"\n        style={nowPlayingMainButtonStyle}\n        onClick={onExpand}\n      >\n        {artwork && (\n          <span\n            className=\"glass-size-10 glass-overflow-hidden glass-radius-lg\"\n            style={{ flex: \"0 0 2.5rem\" }}\n          >\n            {artwork}\n          </span>\n        )}\n        <span className=\"glass-min-w-0 glass-flex-1\">\n          <span className=\"glass-block glass-truncate glass-font-medium\">\n            {title}\n          </span>\n          {subtitle && (\n            <span className=\"glass-block glass-truncate glass-text-xs glass-text-secondary\">\n              {subtitle}\n            </span>\n          )}\n          <span className=\"glass-mt-1 glass-block glass-h-1 glass-radius-full glass-surface-subtle\">\n            <span\n              className=\"glass-block glass-h-full glass-radius-full glass-surface-primary\"\n              style={{ width: `${Math.max(0, Math.min(1, progress)) * 100}%` }}\n            />\n          </span>\n        </span>\n      </button>\n      <button\n        type=\"button\"\n        style={nowPlayingActionButtonStyle}\n        onClick={onPlayPause}\n        aria-label={playing ? \"Pause\" : \"Play\"}\n      >\n        {playing ? \"Pause\" : \"Play\"}\n      </button>\n    </LiquidGlassBottomAccessory>\n  )\n);\n\nLiquidGlassNowPlayingBar.displayName = \"LiquidGlassNowPlayingBar\";\n", "\"use client\";\n\nimport React, { forwardRef } from \"react\";\nimport { LiquidGlassInspectorPanel, type LiquidGlassInspectorPanelProps } from \"../navigation/LiquidGlassInspectorPanel\";\n\nexport interface LiquidGlassPhotoInspectorProps extends Omit<LiquidGlassInspectorPanelProps, \"sections\"> {\n  metadata?: Record<string, React.ReactNode>;\n  tags?: string[];\n  rating?: React.ReactNode;\n}\n\nexport const LiquidGlassPhotoInspector = forwardRef<HTMLElement, LiquidGlassPhotoInspectorProps>(\n  ({ metadata = {}, tags = [], rating, ...props }, ref) => (\n    <LiquidGlassInspectorPanel\n      ref={ref}\n      title={props.title ?? \"Photo Inspector\"}\n      sections={[\n        {\n          id: \"metadata\",\n          title: \"Metadata\",\n          content: (\n            <dl className=\"glass-grid glass-grid-cols-2 glass-gap-2\">\n              {Object.entries(metadata).map(([key, value]) => (\n                <React.Fragment key={key}>\n                  <dt className=\"glass-text-xs glass-text-secondary\">{key}</dt>\n                  <dd className=\"glass-text-sm\">{value}</dd>\n                </React.Fragment>\n              ))}\n            </dl>\n          ),\n        },\n        {\n          id: \"tags\",\n          title: \"Tags\",\n          content: <div className=\"glass-flex glass-flex-wrap glass-gap-1\">{tags.map((tag) => <span key={tag} className=\"glass-radius-full glass-surface-subtle glass-px-2 glass-py-1 glass-text-xs\">{tag}</span>)}</div>,\n        },\n        {\n          id: \"rating\",\n          title: \"Rating\",\n          content: rating,\n        },\n      ]}\n      {...props}\n    />\n  )\n);\n\nLiquidGlassPhotoInspector.displayName = \"LiquidGlassPhotoInspector\";\n", "'use client';\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef, useEffect, useCallback, useRef } from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { createPortal } from \"react-dom\";\nimport { LiquidGlassAdaptiveSheet } from \"../modal/LiquidGlassAdaptiveSheet\";\n\nexport interface GlassActionSheetAction {\n  /**\n   * Action label\n   */\n  label: string;\n  /**\n   * Action callback\n   */\n  onAction: () => void;\n  /**\n   * Action icon\n   */\n  icon?: React.ReactNode;\n  /**\n   * Action style variant\n   * @default 'default'\n   */\n  variant?: \"default\" | \"destructive\" | \"primary\";\n  /**\n   * Whether the action is disabled\n   * @default false\n   */\n  disabled?: boolean;\n}\n\nexport interface GlassActionSheetProps\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n  /**\n   * Whether the action sheet is open\n   */\n  open: boolean;\n  /**\n   * Callback when the action sheet should close\n   */\n  onClose: () => void;\n  /**\n   * Action sheet title\n   */\n  title?: string;\n  /**\n   * Action sheet message/description\n   */\n  message?: string;\n  /**\n   * List of actions\n   */\n  actions: GlassActionSheetAction[];\n  /**\n   * Show cancel button\n   * @default true\n   */\n  showCancel?: boolean;\n  /**\n   * Cancel button text\n   * @default 'Cancel'\n   */\n  cancelText?: string;\n  /**\n   * Glassmorphism elevation level\n   * @default 'level4'\n   */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n  /**\n   * Close on backdrop click\n   * @default true\n   */\n  closeOnBackdrop?: boolean;\n  /**\n   * Animation duration in milliseconds\n   * @default 300\n   */\n  animationDuration?: number;\n  material?: \"glass\" | \"liquid\";\n  sourceId?: string;\n  presentationMode?: \"interruptive\" | \"parallel\";\n  sourceTransition?: boolean;\n  localDimming?: boolean;\n}\n\nexport const GlassActionSheet = forwardRef<\n  HTMLDivElement,\n  GlassActionSheetProps\n>(\n  (\n    {\n      open,\n      onClose,\n      title,\n      message,\n      actions,\n      showCancel = true,\n      cancelText = \"Cancel\",\n      elevation = \"level4\",\n      closeOnBackdrop = true,\n      animationDuration = 300,\n      material = \"glass\",\n      sourceId,\n      presentationMode = \"interruptive\",\n      sourceTransition = false,\n      localDimming = true,\n      className,\n      \"aria-label\": ariaLabel,\n      ...props\n    },\n    ref\n  ) => {\n    const [isVisible, setIsVisible] = React.useState(false);\n    const [isAnimating, setIsAnimating] = React.useState(false);\n    const sheetRef = useRef<HTMLDivElement>(null);\n    const startYRef = useRef(0);\n    const currentYRef = useRef(0);\n\n    if (material === \"liquid\") {\n      return (\n        <LiquidGlassAdaptiveSheet\n          ref={ref}\n          open={open}\n          onOpenChange={(next) => {\n            if (!next) onClose();\n          }}\n          title={title}\n          sourceId={sourceTransition ? sourceId : undefined}\n          presentationMode={presentationMode}\n          materialVariant={localDimming ? \"clear\" : \"regular\"}\n          className={className}\n          aria-label={ariaLabel}\n          {...props}\n        >\n          {message && <p className=\"glass-text-sm glass-text-secondary\">{message}</p>}\n          <div className=\"glass-mt-4 glass-flex glass-flex-col glass-gap-2\">\n            {actions.map((action) => (\n              <button\n                key={action.label}\n                type=\"button\"\n                disabled={action.disabled}\n                className={cn(\"glass-radius-lg glass-px-3 glass-py-2 glass-text-left\", action.variant === \"destructive\" && \"glass-text-danger\")}\n                onClick={() => {\n                  if (action.disabled) return;\n                  action.onAction();\n                  onClose();\n                }}\n              >\n                {action.icon}\n                {action.label}\n              </button>\n            ))}\n            {showCancel && <button type=\"button\" onClick={onClose}>{cancelText}</button>}\n          </div>\n        </LiquidGlassAdaptiveSheet>\n      );\n    }\n\n    useEffect(() => {\n      if (open) {\n        setIsVisible(true);\n        setTimeout(() => setIsAnimating(true), 10);\n      } else {\n        setIsAnimating(false);\n        setTimeout(() => setIsVisible(false), animationDuration);\n      }\n    }, [open, animationDuration]);\n\n    useEffect(() => {\n      if (!isVisible) return;\n\n      const handleEscape = (e: KeyboardEvent) => {\n        if (e.key === \"Escape\") {\n          onClose();\n        }\n      };\n\n      document.addEventListener(\"keydown\", handleEscape);\n      document.body.style.overflow = \"hidden\";\n\n      return () => {\n        document.removeEventListener(\"keydown\", handleEscape);\n        document.body.style.overflow = \"\";\n      };\n    }, [isVisible, onClose]);\n\n    const handleBackdropClick = useCallback(() => {\n      if (closeOnBackdrop) {\n        onClose();\n      }\n    }, [closeOnBackdrop, onClose]);\n\n    const handleActionClick = useCallback(\n      (action: GlassActionSheetAction) => {\n        if (action.disabled) return;\n        action.onAction();\n        onClose();\n      },\n      [onClose]\n    );\n\n    const handleTouchStart = useCallback((e: React.TouchEvent) => {\n      startYRef.current = e.touches[0].clientY;\n      currentYRef.current = 0;\n    }, []);\n\n    const handleTouchMove = useCallback((e: React.TouchEvent) => {\n      const deltaY = e.touches[0].clientY - startYRef.current;\n      if (deltaY > 0) {\n        currentYRef.current = deltaY;\n        if (sheetRef.current) {\n          sheetRef.current.style.transform = `translateY(${deltaY}px)`;\n        }\n      }\n    }, []);\n\n    const handleTouchEnd = useCallback(() => {\n      if (currentYRef.current > 100) {\n        onClose();\n      } else if (sheetRef.current) {\n        sheetRef.current.style.transform = \"\";\n      }\n      currentYRef.current = 0;\n    }, [onClose]);\n\n    if (!isVisible) return null;\n\n    const content = (\n      <div\n        className={cn(\n          \"fixed inset-0 z-50 flex items-end justify-center\",\n          \"transition-colors duration-300\",\n          isAnimating ? \"bg-black/40\" : \"bg-black/0\"\n        )}\n        onClick={handleBackdropClick}\n        role=\"presentation\"\n      >\n        <div\n          ref={sheetRef}\n          onClick={(e) => e.stopPropagation()}\n          onTouchStart={handleTouchStart}\n          onTouchMove={handleTouchMove}\n          onTouchEnd={handleTouchEnd}\n          className={cn(\n            \"w-full max-w-2xl mx-auto glass-p-4 pb-safe\",\n            \"transition-transform duration-300 ease-out\",\n            isAnimating ? \"translate-y-0\" : \"translate-y-full\",\n            className\n          )}\n          role=\"dialog\"\n          aria-modal=\"true\"\n          aria-label={ariaLabel}\n          aria-labelledby={title && !ariaLabel ? \"action-sheet-title\" : undefined}\n          aria-describedby={message ? \"action-sheet-message\" : undefined}\n          data-testid={props['data-testid']}\n          {...props}\n        >\n          <OptimizedGlass\n            ref={ref}\n            elevation={elevation}\n            className={cn(\"overflow-hidden glass-radius-2xl\")}\n          >\n            {(title || message) && (\n              <div className='glass-p-4 glass-text-center glass-border-b glass-border-subtle'>\n                {title && (\n                  <h3\n                    id=\"action-sheet-title\"\n                    className='glass-text-lg glass-font-semibold glass-text-primary glass-mb-1'\n                  >\n                    {title}\n                  </h3>\n                )}\n                {message && (\n                  <p\n                    id=\"action-sheet-message\"\n                    className=\"glass-text-sm glass-text-secondary\"\n                  >\n                    {message}\n                  </p>\n                )}\n              </div>\n            )}\n\n            <div className='glass-max-h-96 glass-overflow-y-auto'>\n              {actions.map((action, index) => (\n                <button\n                  key={index}\n                  onClick={() => handleActionClick(action)}\n                  disabled={action.disabled}\n                  className={cn(\n                    \"w-full glass-p-4 flex items-center justify-center gap-3\",\n                    \"glass-text-base font-medium\",\n                    \"transition-all duration-200\",\n                    \"border-b glass-border-subtle last:border-b-0\",\n                    \"hover:bg-white/5 active:bg-white/10\",\n                    \"disabled:opacity-50 glass-disabled-cursor-not-allowed\",\n                    action.variant === \"destructive\" && \"text-red-500\",\n                    action.variant === \"primary\" &&\n                      \"text-blue-500 font-semibold\",\n                    action.variant === \"default\" && \"glass-text-primary\",\n                    !action.disabled &&\n                      \"glass-focus glass-touch-target glass-contrast-guard\"\n                  )}\n                  type=\"button\"\n                >\n                  {action.icon && (\n                    <span className=\"glass-flex-shrink-0\">{action.icon}</span>\n                  )}\n                  <span>{action.label}</span>\n                </button>\n              ))}\n            </div>\n          </OptimizedGlass>\n\n          {showCancel && (\n            <OptimizedGlass\n              elevation={elevation}\n              className='glass-mt-2 glass-overflow-hidden glass-radius-2xl'\n            >\n              <button\n                onClick={onClose}\n                className={cn(\n                  \"w-full glass-p-4 flex items-center justify-center\",\n                  \"glass-text-base font-semibold glass-text-primary\",\n                  \"transition-all duration-200\",\n                  \"hover:bg-white/5 active:bg-white/10\",\n                  \"glass-focus glass-touch-target glass-contrast-guard\"\n                )}\n                type=\"button\"\n              >\n                {cancelText}\n              </button>\n            </OptimizedGlass>\n          )}\n        </div>\n      </div>\n    );\n\n    return createPortal(content, document.body);\n  }\n);\n\nGlassActionSheet.displayName = \"GlassActionSheet\";\n\nexport default GlassActionSheet;\n", "\"use client\";\n\nimport React, { useState } from \"react\";\nimport { LiquidGlassBadgeCluster } from \"../data-display/LiquidGlassBadgeCluster\";\nimport { LiquidGlassMediaControls } from \"../media/LiquidGlassMediaControls\";\nimport { LiquidGlassNowPlayingBar } from \"../media/LiquidGlassNowPlayingBar\";\nimport { LiquidGlassInsetSidebar } from \"../navigation/LiquidGlassInsetSidebar\";\nimport { LiquidGlassTabBar } from \"../navigation/LiquidGlassTabBar\";\nimport { LiquidGlassToolbar } from \"../navigation/LiquidGlassToolbar\";\nimport { LiquidGlassSearchField } from \"../search/LiquidGlassSearchField\";\nimport { LiquidGlassAdaptiveSheet } from \"../modal/LiquidGlassAdaptiveSheet\";\n\nexport function LiquidGlassShowcase() {\n  const [tab, setTab] = useState(\"home\");\n  const [sheetOpen, setSheetOpen] = useState(false);\n\n  return (\n    <div\n      className=\"liquid-glass-showcase\"\n      data-bg=\"light\"\n      data-liquid-glass-showcase=\"true\"\n      style={{\n        position: \"relative\",\n        minHeight: \"100vh\",\n        padding: 28,\n        boxSizing: \"border-box\",\n        overflow: \"hidden\",\n        color: \"#0f172a\",\n        background:\n          \"linear-gradient(135deg, #eef6ff 0%, #f8fbff 42%, #effdf8 100%)\",\n      }}\n    >\n      <style>{`\n        .liquid-glass-showcase {\n          --glass-text-primary: rgba(15, 23, 42, 0.92);\n          --glass-text-secondary: rgba(71, 85, 105, 0.92);\n          --glass-text-tertiary: rgba(100, 116, 139, 0.9);\n        }\n\n        .liquid-glass-showcase-layout {\n          grid-template-columns: 260px minmax(0, 1fr);\n        }\n\n        .liquid-glass-showcase-content {\n          grid-template-columns: minmax(0, 1.4fr) minmax(280px, 0.6fr);\n        }\n\n        @media (max-width: 820px) {\n          .liquid-glass-showcase {\n            padding: 18px;\n            overflow: auto;\n          }\n\n          .liquid-glass-showcase-layout,\n          .liquid-glass-showcase-content {\n            grid-template-columns: 1fr;\n          }\n        }\n      `}</style>\n      <div\n        aria-hidden=\"true\"\n        style={{\n          position: \"absolute\",\n          inset: 0,\n          pointerEvents: \"none\",\n          background:\n            \"var(--glass-primary-level3-surface)\",\n        }}\n      />\n      <div\n        className=\"liquid-glass-showcase-layout\"\n        style={{\n          position: \"relative\",\n          display: \"grid\",\n          gap: 24,\n          minHeight: \"calc(100vh - 56px)\",\n        }}\n      >\n        <LiquidGlassInsetSidebar\n          items={[\n            { id: \"home\", label: \"Home\", badge: \"Live\" },\n            { id: \"media\", label: \"Media\" },\n            { id: \"settings\", label: \"Settings\" },\n          ]}\n          selectedId={tab}\n          onSelect={setTab}\n          style={{ width: \"100%\", minHeight: \"100%\" }}\n        />\n        <main\n          style={{\n            display: \"grid\",\n            gridTemplateRows: \"auto minmax(0, 1fr) auto\",\n            gap: 20,\n            minWidth: 0,\n          }}\n        >\n          <LiquidGlassToolbar\n            floating\n            scrollEdge=\"soft\"\n            left={\n              <div style={{ minWidth: 170 }}>\n                <strong style={{ display: \"block\", fontSize: 16 }}>\n                  Aura Liquid Glass\n                </strong>\n                <span\n                  style={{ display: \"block\", fontSize: 12, color: \"#475569\" }}\n                >\n                  Production app chrome\n                </span>\n              </div>\n            }\n            center={\n              <LiquidGlassSearchField\n                placeholder=\"Search surfaces\"\n                scope=\"Workspace\"\n                style={{ width: 280 }}\n              />\n            }\n            right={\n              <button\n                type=\"button\"\n                onClick={() => setSheetOpen(true)}\n                style={{\n                  border: 0,\n                  borderRadius: 999,\n                  background:\n                    \"var(--glass-primary-level2-surface)\",\n                  color: \"#0f172a\",\n                  cursor: \"pointer\",\n                  font: \"inherit\",\n                  padding: \"7px 14px\",\n                }}\n              >\n                Open\n              </button>\n            }\n            groups={[\n              {\n                id: \"view\",\n                items: [\n                  { id: \"grid\", label: \"Grid\" },\n                  { id: \"list\", label: \"List\" },\n                ],\n              },\n            ]}\n          />\n          <section\n            className=\"liquid-glass-showcase-content\"\n            style={{\n              display: \"grid\",\n              gap: 20,\n              minHeight: 0,\n            }}\n          >\n            <div\n              style={{\n                minHeight: 360,\n                borderRadius: 28,\n                padding: 20,\n                display: \"flex\",\n                alignItems: \"flex-end\",\n                background:\n                  \"linear-gradient(135deg, #1d4ed8 0%, #2563eb 38%, #14b8a6 100%)\",\n                boxShadow: \"0 24px 80px rgba(15, 23, 42, 0.18)\",\n              }}\n            >\n              <LiquidGlassMediaControls\n                playing={false}\n                duration={100}\n                currentTime={40}\n              />\n            </div>\n            <div style={{ display: \"grid\", gap: 16, alignContent: \"start\" }}>\n              <LiquidGlassBadgeCluster\n                expanded\n                items={[\n                  { id: \"a\", label: \"Adaptive\" },\n                  { id: \"b\", label: \"Grouped\" },\n                  { id: \"c\", label: \"Accessible\" },\n                  { id: \"d\", label: \"Motion-safe\" },\n                ]}\n              />\n              <div\n                style={{\n                  borderRadius: 24,\n                  padding: 18,\n                  background:\n                    \"var(--glass-neutral-level3-surface)\",\n                  boxShadow: \"inset 0 0 0 1px rgba(255,255,255,0.66)\",\n                }}\n              >\n                <h2 style={{ margin: 0, fontSize: 18 }}>\n                  Surface intelligence\n                </h2>\n                <p style={{ margin: \"8px 0 0\", color: \"#475569\" }}>\n                  Liquid Glass groups navigation, media, search, and transient\n                  UI without making content hard to read.\n                </p>\n              </div>\n            </div>\n          </section>\n          <div style={{ maxWidth: 680, margin: \"0 auto\", width: \"100%\" }}>\n            <LiquidGlassTabBar\n              tabs={[\n                { id: \"home\", label: \"Home\" },\n                { id: \"media\", label: \"Media\" },\n                { id: \"search\", label: \"Search\" },\n              ]}\n              activeTab={tab}\n              onChange={setTab}\n              minimizeBehavior=\"never\"\n              searchTabId=\"search\"\n              bottomAccessory={\n                <LiquidGlassNowPlayingBar\n                  className=\"liquid-glass-showcase-now-playing\"\n                  title=\"Liquid Study\"\n                  subtitle=\"Aura System\"\n                  progress={0.42}\n                  style={\n                    {\n                      color: \"#f8fafc\",\n                      \"--glass-text-secondary\": \"rgba(226, 232, 240, 0.88)\",\n                    } as React.CSSProperties\n                  }\n                />\n              }\n            />\n          </div>\n        </main>\n      </div>\n      <LiquidGlassAdaptiveSheet\n        open={sheetOpen}\n        onOpenChange={setSheetOpen}\n        title=\"Source Sheet\"\n      >\n        <p>\n          This sheet demonstrates an adaptive Liquid Glass presentation surface.\n        </p>\n      </LiquidGlassAdaptiveSheet>\n    </div>\n  );\n}\n\nexport default LiquidGlassShowcase;\n", "\"use client\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, {\n  forwardRef,\n  useState,\n  useRef,\n  useCallback,\n  useEffect,\n} from \"react\";\nimport { OptimizedGlass } from \"../../primitives\";\n\nexport interface GlassPullToRefreshProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  /**\n   * Callback when refresh is triggered\n   */\n  onRefresh: () => Promise<void> | void;\n  /**\n   * Whether the component is currently refreshing\n   */\n  refreshing?: boolean;\n  /**\n   * Pull distance threshold to trigger refresh (in pixels)\n   * @default 80\n   */\n  threshold?: number;\n  /**\n   * Maximum pull distance (in pixels)\n   * @default 120\n   */\n  maxDistance?: number;\n  /**\n   * Whether to show the pull indicator\n   * @default true\n   */\n  showIndicator?: boolean;\n  /**\n   * Custom refresh indicator\n   */\n  indicator?: React.ReactNode;\n  /**\n   * Custom loading indicator\n   */\n  loadingIndicator?: React.ReactNode;\n  /**\n   * Pull instruction text\n   * @default 'Pull to refresh'\n   */\n  pullText?: string;\n  /**\n   * Release instruction text\n   * @default 'Release to refresh'\n   */\n  releaseText?: string;\n  /**\n   * Refreshing text\n   * @default 'Refreshing...'\n   */\n  refreshingText?: string;\n  /**\n   * Glassmorphism elevation level\n   * @default 'level2'\n   */\n  elevation?: \"level1\" | \"level2\" | \"level3\" | \"level4\" | \"level5\";\n  /**\n   * Disable pull to refresh\n   * @default false\n   */\n  disabled?: boolean;\n}\n\nconst RefreshIcon = ({ rotation }: { rotation: number }) => (\n  <svg\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    className=\"glass-w-6 glass-h-6\"\n    style={{\n      transform: `rotate(${rotation}deg)`,\n      transition: \"transform 0.2s ease-out\",\n    }}\n  >\n    <path\n      d=\"M21.5 2V8H15.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M2.5 22V16H8.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M19.13 5.86998C18.29 4.99998 17.27 4.31998 16.14 3.87998C15.01 3.43998 13.79 3.24998 12.56 3.32998C11.33 3.40998 10.14 3.75998 9.07 4.35998C8 4.95998 7.07 5.79998 6.35 6.81998M4.87 18.13C5.71 19 6.73 19.68 7.86 20.12C8.99 20.56 10.21 20.75 11.44 20.67C12.67 20.59 13.86 20.24 14.93 19.64C16 19.04 16.93 18.2 17.65 17.18\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst SpinnerIcon = () => (\n  <svg\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    className=\"glass-w-6 glass-h-6 glass-animate-spin\"\n  >\n    <circle\n      cx=\"12\"\n      cy=\"12\"\n      r=\"10\"\n      stroke=\"currentColor\"\n      strokeWidth=\"2\"\n      strokeLinecap=\"round\"\n      strokeDasharray=\"60\"\n      strokeDashoffset=\"20\"\n      opacity=\"0.5\"\n    />\n  </svg>\n);\n\nexport const GlassPullToRefresh = forwardRef<\n  HTMLDivElement,\n  GlassPullToRefreshProps\n>(\n  (\n    {\n      children,\n      onRefresh,\n      refreshing = false,\n      threshold = 80,\n      maxDistance = 120,\n      showIndicator = true,\n      indicator,\n      loadingIndicator,\n      pullText = \"Pull to refresh\",\n      releaseText = \"Release to refresh\",\n      refreshingText = \"Refreshing...\",\n      elevation = \"level2\",\n      disabled = false,\n      className,\n      ...props\n    },\n    ref\n  ) => {\n    const [pullDistance, setPullDistance] = useState(0);\n    const [isDragging, setIsDragging] = useState(false);\n    const [isRefreshing, setIsRefreshing] = useState(refreshing);\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const startYRef = useRef(0);\n    const scrollTopRef = useRef(0);\n\n    useEffect(() => {\n      setIsRefreshing(refreshing);\n    }, [refreshing]);\n\n    const handleTouchStart = useCallback(\n      (event: TouchEvent) => {\n        if (disabled || isRefreshing) return;\n\n        const container = containerRef.current;\n        if (!container) return;\n\n        scrollTopRef.current = container.scrollTop;\n\n        if (scrollTopRef.current === 0) {\n          startYRef.current = event.touches[0].clientY;\n          setIsDragging(true);\n        }\n      },\n      [disabled, isRefreshing]\n    );\n\n    const handleTouchMove = useCallback(\n      (event: TouchEvent) => {\n        if (!isDragging || disabled || isRefreshing) return;\n\n        const container = containerRef.current;\n        if (!container || container.scrollTop > 0) {\n          setIsDragging(false);\n          setPullDistance(0);\n          return;\n        }\n\n        const currentY = event.touches[0].clientY;\n        const distance = currentY - startYRef.current;\n\n        if (distance > 0) {\n          event.preventDefault();\n          const dampedDistance = Math.min(\n            maxDistance,\n            distance * (1 - distance / (maxDistance * 2))\n          );\n          setPullDistance(dampedDistance);\n        }\n      },\n      [isDragging, disabled, isRefreshing, maxDistance]\n    );\n\n    const handleTouchEnd = useCallback(async () => {\n      if (!isDragging) return;\n\n      setIsDragging(false);\n\n      if (pullDistance >= threshold && !disabled && !isRefreshing) {\n        setIsRefreshing(true);\n\n        try {\n          await onRefresh();\n        } catch {\n          // Consumers can surface refresh failures from their own callback state.\n        } finally {\n          setTimeout(() => {\n            setIsRefreshing(false);\n            setPullDistance(0);\n          }, 300);\n        }\n      } else {\n        setPullDistance(0);\n      }\n    }, [\n      isDragging,\n      pullDistance,\n      threshold,\n      disabled,\n      isRefreshing,\n      onRefresh,\n    ]);\n\n    useEffect(() => {\n      const container = containerRef.current;\n      if (!container) return;\n\n      container.addEventListener(\"touchstart\", handleTouchStart, {\n        passive: false,\n      });\n      container.addEventListener(\"touchmove\", handleTouchMove, {\n        passive: false,\n      });\n      container.addEventListener(\"touchend\", handleTouchEnd);\n\n      return () => {\n        container.removeEventListener(\"touchstart\", handleTouchStart);\n        container.removeEventListener(\"touchmove\", handleTouchMove);\n        container.removeEventListener(\"touchend\", handleTouchEnd);\n      };\n    }, [handleTouchStart, handleTouchMove, handleTouchEnd]);\n\n    const pullProgress = Math.min(pullDistance / threshold, 1);\n    const rotation = pullProgress * 360;\n    const opacity = Math.min(pullProgress * 2, 1);\n    const scale = 0.5 + pullProgress * 0.5;\n\n    const indicatorContent = isRefreshing\n      ? loadingIndicator || <SpinnerIcon />\n      : indicator || <RefreshIcon rotation={rotation} />;\n\n    const indicatorText = isRefreshing\n      ? refreshingText\n      : pullDistance >= threshold\n        ? releaseText\n        : pullText;\n\n    return (\n      <div\n        data-glass-component\n        ref={ref}\n        className={cn(\"relative overflow-hidden\", className)}\n        {...props}\n      >\n        {showIndicator && (pullDistance > 0 || isRefreshing) && (\n          <OptimizedGlass\n            elevation={elevation}\n            className=\"glass-absolute glass-left-0 glass-right-0 glass-top-0 glass-z-50 glass-flex glass-items-center glass-justify-center glass-p-4\"\n            style={{\n              transform: `translateY(${isRefreshing ? 0 : pullDistance - 60}px)`,\n              opacity: isRefreshing ? 1 : opacity,\n              transition:\n                isRefreshing || !isDragging\n                  ? \"transform 0.3s ease-out, opacity 0.3s ease-out\"\n                  : \"none\",\n            }}\n          >\n            <div\n              className=\"glass-flex glass-flex-col glass-items-center glass-gap-2\"\n              style={{\n                transform: `scale(${isRefreshing ? 1 : scale})`,\n                transition:\n                  isRefreshing || !isDragging\n                    ? \"transform 0.3s ease-out\"\n                    : \"none\",\n              }}\n            >\n              <div className=\"glass-text-primary\">{indicatorContent}</div>\n              <span className=\"glass-text-sm glass-text-secondary\">\n                {indicatorText}\n              </span>\n            </div>\n          </OptimizedGlass>\n        )}\n\n        <div\n          ref={containerRef}\n          className={cn(\n            \"h-full overflow-auto\",\n            (isDragging || isRefreshing) && \"overscroll-none\"\n          )}\n          style={{\n            transform: `translateY(${isRefreshing ? 60 : 0}px)`,\n            transition: isRefreshing ? \"transform 0.3s ease-out\" : \"none\",\n          }}\n        >\n          {children}\n        </div>\n      </div>\n    );\n  }\n);\n\nGlassPullToRefresh.displayName = \"GlassPullToRefresh\";\n\nexport default GlassPullToRefresh;\n", "'use client';\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport {\n  AnimatePresence,\n  motion,\n  HTMLMotionProps,\n  PanInfo,\n  useMotionValue,\n} from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  MutableRefObject,\n} from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\n// Touch-Optimized Glass Component\ninterface TouchGlassProps\n  extends Omit<HTMLMotionProps<\"div\">, \"ref\" | \"children\"> {\n  children: React.ReactNode;\n  onTap?: () => void;\n  onLongPress?: () => void;\n  onSwipe?: (direction: \"left\" | \"right\" | \"up\" | \"down\") => void;\n  touchFeedback?: boolean;\n  rippleEffect?: boolean;\n  hapticsEnabled?: boolean;\n  glassIntensity?: \"light\" | \"medium\" | \"heavy\";\n}\n\nexport const TouchOptimizedGlass = forwardRef<HTMLDivElement, TouchGlassProps>(\n  ({\n    children,\n    onTap,\n    onLongPress,\n    onSwipe,\n    className,\n    touchFeedback = true,\n    rippleEffect = true,\n    hapticsEnabled = true,\n    glassIntensity = \"medium\",\n    ...rest\n  },\n  ref\n) => {\n  const prefersReducedMotion = useReducedMotion();\n  const [isPressed, setIsPressed] = useState(false);\n  const [ripples, setRipples] = useState<\n    Array<{ id: number; x: number; y: number; timestamp: number }>\n  >([]);\n  const [longPressTimer, setLongPressTimer] = useState<NodeJS.Timeout | null>(\n    null\n  );\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  const scale = useMotionValue(1);\n  const opacity = useMotionValue(1);\n\n  // Haptic feedback function\n  const triggerHaptics = useCallback(\n    (type: \"light\" | \"medium\" | \"heavy\" = \"light\") => {\n      if (!hapticsEnabled || typeof window === \"undefined\") return;\n\n      if (\"navigator\" in window && \"vibrate\" in navigator) {\n        const patterns = {\n          light: [10],\n          medium: [20],\n          heavy: [30, 10, 30],\n        };\n        navigator.vibrate(patterns[type]);\n      }\n    },\n    [hapticsEnabled]\n  );\n\n  // Handle touch start\n  const handleTouchStart = useCallback(\n    (e: React.TouchEvent) => {\n      e.preventDefault();\n      setIsPressed(true);\n      scale.set(0.95);\n\n      if (touchFeedback) {\n        triggerHaptics(\"light\");\n      }\n\n      // Start long press timer\n      if (onLongPress) {\n        const timer = setTimeout(() => {\n          triggerHaptics(\"medium\");\n          onLongPress();\n          setLongPressTimer(null);\n        }, 500);\n        setLongPressTimer(timer);\n      }\n\n      // Add ripple effect\n      if (rippleEffect && containerRef.current) {\n        const rect = containerRef.current.getBoundingClientRect();\n        const touch = e.touches[0];\n        const x = touch.clientX - rect.left;\n        const y = touch.clientY - rect.top;\n\n        const newRipple = {\n          id: Date.now(),\n          x,\n          y,\n          timestamp: Date.now(),\n        };\n\n        setRipples((prev: any) => [...prev, newRipple]);\n\n        // Remove ripple after animation\n        setTimeout(() => {\n          setRipples((prev: any) =>\n            prev.filter((r: any) => r.id !== newRipple.id)\n          );\n        }, 600);\n      }\n    },\n    [touchFeedback, rippleEffect, onLongPress, triggerHaptics, scale]\n  );\n\n  // Handle touch end\n  const handleTouchEnd = useCallback(() => {\n    setIsPressed(false);\n    scale.set(1);\n\n    // Clear long press timer\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      setLongPressTimer(null);\n    }\n\n    // Trigger tap if no long press occurred\n    if (onTap && !longPressTimer) {\n      triggerHaptics(\"light\");\n      onTap();\n    }\n  }, [longPressTimer, onTap, triggerHaptics, scale]);\n\n  // Handle pan gesture for swipe detection\n  const handlePanEnd = useCallback(\n    (event: any, info: PanInfo) => {\n      const { offset, velocity } = info;\n      const swipeThreshold = 50;\n      const velocityThreshold = 500;\n\n      if (\n        Math.abs(offset.x) > swipeThreshold ||\n        Math.abs(velocity.x) > velocityThreshold\n      ) {\n        const direction = offset.x > 0 ? \"right\" : \"left\";\n        onSwipe?.(direction);\n        triggerHaptics(\"medium\");\n      } else if (\n        Math.abs(offset.y) > swipeThreshold ||\n        Math.abs(velocity.y) > velocityThreshold\n      ) {\n        const direction = offset.y > 0 ? \"down\" : \"up\";\n        onSwipe?.(direction);\n        triggerHaptics(\"medium\");\n      }\n    },\n    [onSwipe, triggerHaptics]\n  );\n\n  const glassStyles = {\n    light: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n    medium: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n    heavy: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  };\n\n  const glassStyle = glassStyles[glassIntensity];\n\n  return (\n    <motion.div\n      ref={(node) => {\n        containerRef.current = node;\n        if (typeof ref === 'function') {\n          ref(node);\n        } else if (ref) {\n          (ref as MutableRefObject<HTMLDivElement | null>).current = node;\n        }\n      }}\n      className={cn('relative overflow-hidden touch-none select-none', className)}\n      style={{\n        ...glassStyle,\n        // Use createGlassStyle() instead,\n        borderRadius: \"12px\",\n        minHeight: \"44px\", // iOS minimum touch target\n        minWidth: \"44px\",\n        scale,\n        opacity,\n      }}\n      onTouchStart={handleTouchStart}\n      onTouchEnd={handleTouchEnd}\n      onPanEnd={handlePanEnd}\n      drag=\"x\"\n      dragConstraints={{ left: 0, right: 0 }}\n      dragElastic={0.1}\n      {...rest}\n    >\n      {children}\n\n      {/* Ripple effects */}\n      <AnimatePresence>\n        {ripples.map((ripple) => (\n          <motion.div\n            key={ripple.id}\n            className='glass-absolute glass-pointer-events-none'\n            style={{\n              left: ripple.x - 20,\n              top: ripple.y - 20,\n              width: 40,\n              height: 40,\n              borderRadius: \"50%\",\n              background:\n                \"var(--glass-neutral-level2-surface)\",\n            }}\n            initial={{ scale: 0, opacity: 1 }}\n            animate={prefersReducedMotion ? {} : { scale: 3, opacity: 0 }}\n            exit={{ opacity: 0 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: 0.6, ease: \"easeOut\" }\n            }\n          />\n        ))}\n      </AnimatePresence>\n\n      {/* Touch feedback overlay */}\n      {touchFeedback && (\n        <AnimatePresence>\n          {isPressed && (\n            <motion.div\n              className='glass-absolute glass-inset-0 glass-pointer-events-none'\n              style={{\n                background:\n                  \"var(--glass-neutral-level2-surface)\",\n                borderRadius: \"inherit\",\n              }}\n              initial={{ opacity: 0 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1 }}\n              exit={{ opacity: 0 }}\n              transition={\n                prefersReducedMotion ? { duration: 0 } : { duration: 0.1 }\n              }\n            />\n          )}\n        </AnimatePresence>\n      )}\n    </motion.div>\n  );\n});\n\nTouchOptimizedGlass.displayName = \"TouchOptimizedGlass\";\n\nexport const TouchGlassOptimization = forwardRef<HTMLDivElement, TouchGlassProps>(\n  (props, ref) => <TouchOptimizedGlass ref={ref} {...props} />\n);\n\nTouchGlassOptimization.displayName = \"TouchGlassOptimization\";\n\nexport default TouchGlassOptimization;\ninterface MobileGlassNavigationProps {\n  children: React.ReactNode;\n  swipeThreshold?: number;\n  onSwipeLeft?: () => void;\n  onSwipeRight?: () => void;\n  onSwipeUp?: () => void;\n  onSwipeDown?: () => void;\n  className?: string;\n}\n\nexport function MobileGlassNavigation({\n  children,\n  swipeThreshold = 50,\n  onSwipeLeft,\n  onSwipeRight,\n  onSwipeUp,\n  onSwipeDown,\n  className=\"\",\n}: MobileGlassNavigationProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [swipeDirection, setSwipeDirection] = useState<string | null>(null);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  const handleSwipe = useCallback(\n    (direction: \"left\" | \"right\" | \"up\" | \"down\") => {\n      setSwipeDirection(direction);\n\n      switch (direction) {\n        case \"left\":\n          onSwipeLeft?.();\n          break;\n        case \"right\":\n          onSwipeRight?.();\n          break;\n        case \"up\":\n          onSwipeUp?.();\n          break;\n        case \"down\":\n          onSwipeDown?.();\n          break;\n      }\n\n      // Reset swipe direction after animation\n      setTimeout(() => setSwipeDirection(null), 300);\n    },\n    [onSwipeLeft, onSwipeRight, onSwipeUp, onSwipeDown]\n  );\n\n  return (\n    <motion.div\n      ref={containerRef}\n      className={`relative ${className}`}\n      style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n      drag=\"x\"\n      dragConstraints={{ left: 0, right: 0 }}\n      dragElastic={0.2}\n      onDragEnd={(event, info) => {\n        const { offset, velocity } = info;\n\n        if (Math.abs(offset.x) > swipeThreshold || Math.abs(velocity.x) > 500) {\n          const direction = offset.x > 0 ? \"right\" : \"left\";\n          handleSwipe(direction);\n        } else if (\n          Math.abs(offset.y) > swipeThreshold ||\n          Math.abs(velocity.y) > 500\n        ) {\n          const direction = offset.y > 0 ? \"down\" : \"up\";\n          handleSwipe(direction);\n        }\n      }}\n      animate={\n        swipeDirection\n          ? {\n              x:\n                swipeDirection === \"left\"\n                  ? -50\n                  : swipeDirection === \"right\"\n                    ? 50\n                    : 0,\n              y:\n                swipeDirection === \"up\"\n                  ? -50\n                  : swipeDirection === \"down\"\n                    ? 50\n                    : 0,\n              opacity: 0.7,\n            }\n          : {\n              x: 0,\n              y: 0,\n              opacity: 1,\n            }\n      }\n      transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }}\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Adaptive Glass Density Component\ninterface AdaptiveGlassDensityProps {\n  children: React.ReactNode;\n  screenSize?: \"small\" | \"medium\" | \"large\" | \"xlarge\";\n  devicePixelRatio?: number;\n  autoAdapt?: boolean;\n  className?: string;\n}\n\nexport function AdaptiveGlassDensity({\n  children,\n  screenSize,\n  devicePixelRatio,\n  autoAdapt = true,\n  className=\"\",\n}: AdaptiveGlassDensityProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [currentDensity, setCurrentDensity] = useState<\n    \"light\" | \"medium\" | \"heavy\"\n  >(\"medium\");\n\n  useEffect(() => {\n    if (!autoAdapt) return;\n\n    const updateDensity = () => {\n      const width = window.innerWidth;\n      const pixelRatio = devicePixelRatio || window.devicePixelRatio || 1;\n\n      let density: \"light\" | \"medium\" | \"heavy\" = \"medium\";\n\n      if (width < 768) {\n        density = pixelRatio > 2 ? \"light\" : \"medium\";\n      } else if (width < 1200) {\n        density = pixelRatio > 1.5 ? \"medium\" : \"heavy\";\n      } else {\n        density = pixelRatio > 1.5 ? \"heavy\" : \"medium\";\n      }\n\n      setCurrentDensity(density);\n    };\n\n    updateDensity();\n    window.addEventListener(\"resize\", updateDensity);\n    return () => window.removeEventListener(\"resize\", updateDensity);\n  }, [autoAdapt, devicePixelRatio]);\n\n  const densityStyles = {\n    light: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n    medium: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n    heavy: createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n  };\n\n  const style = densityStyles[currentDensity];\n\n  return (\n    <motion.div\n      className={className}\n      style={{\n        ...style,\n        // Use createGlassStyle() instead,\n        borderRadius: \"12px\",\n        transition: \"all 0.3s ease-in-out\",\n      }}\n      animate={prefersReducedMotion ? {} : { opacity: 1 }}\n      initial={{ opacity: 0 }}\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Touch Ripple Effects Component\ninterface TouchRippleEffectsProps {\n  children: React.ReactNode;\n  color?: string;\n  maxRipples?: number;\n  rippleDuration?: number;\n  className?: string;\n}\n\nexport function TouchRippleEffects({\n  children,\n  color = \"var(--glass-bg-hover)\",\n  maxRipples = 3,\n  rippleDuration = 600,\n  className=\"\",\n}: TouchRippleEffectsProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [ripples, setRipples] = useState<\n    Array<{ id: number; x: number; y: number }>\n  >([]);\n  const containerRef = useRef<HTMLDivElement | null>(null);\n\n  const handleTouchStart = useCallback(\n    (e: React.TouchEvent) => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      const touch = e.touches[0];\n      const x = touch.clientX - rect.left;\n      const y = touch.clientY - rect.top;\n\n      const newRipple = { id: Date.now(), x, y };\n      setRipples((prev: any) => {\n        const updated = [...prev, newRipple];\n        return updated.slice(-maxRipples); // Keep only the latest ripples\n      });\n\n      // Remove ripple after animation\n      setTimeout(() => {\n        setRipples((prev: any) =>\n          prev.filter((r: any) => r.id !== newRipple.id)\n        );\n      }, rippleDuration);\n    },\n    [maxRipples, rippleDuration]\n  );\n\n  return (\n    <div\n      ref={containerRef}\n      className={`relative overflow-hidden ${className}`}\n      onTouchStart={handleTouchStart}\n    >\n      {children}\n\n      <AnimatePresence>\n        {ripples.map((ripple) => (\n          <motion.div\n            key={ripple.id}\n            className='glass-absolute glass-pointer-events-none glass-radius-full'\n            style={{\n              left: ripple.x - 20,\n              top: ripple.y - 20,\n              width: 40,\n              height: 40,\n              background: color,\n            }}\n            initial={{ scale: 0, opacity: 1 }}\n            animate={prefersReducedMotion ? {} : { scale: 4, opacity: 0 }}\n            exit={{ opacity: 0 }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : { duration: rippleDuration / 1000, ease: \"easeOut\" }\n            }\n          />\n        ))}\n      </AnimatePresence>\n    </div>\n  );\n}\n\n// Mobile Glass Bottom Sheet Component\ninterface MobileGlassBottomSheetProps {\n  isOpen: boolean;\n  onClose: () => void;\n  children: React.ReactNode;\n  height?: string;\n  snapPoints?: string[];\n  className?: string;\n}\n\nexport function MobileGlassBottomSheet({\n  isOpen,\n  onClose,\n  children,\n  height = \"50vh\",\n  snapPoints = [\"25vh\", \"50vh\", \"75vh\"],\n  className=\"\",\n}: MobileGlassBottomSheetProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const [currentHeight, setCurrentHeight] = useState(height);\n\n  const handleDragEnd = useCallback(\n    (event: any, info: PanInfo) => {\n      const { offset, velocity } = info;\n      const swipeThreshold = 100;\n\n      if (offset.y > swipeThreshold || velocity.y > 500) {\n        // Close the sheet if dragged down significantly\n        onClose();\n      } else {\n        // Snap to nearest snap point\n        const currentY = info.point.y;\n        const closestSnapPoint = snapPoints.reduce((closest, snapPoint) => {\n          const snapY = parseFloat(snapPoint);\n          const currentDiff = Math.abs(currentY - snapY);\n          const closestDiff = Math.abs(currentY - parseFloat(closest));\n          return currentDiff < closestDiff ? snapPoint : closest;\n        });\n\n        setCurrentHeight(closestSnapPoint);\n      }\n    },\n    [onClose, snapPoints]\n  );\n\n  return (\n    <AnimatePresence>\n      {isOpen && (\n        <>\n          {/* Backdrop */}\n          <motion.div\n            className={cn(\n              \"glass-foundation-complete glass-position-fixed glass-inset-0 glass-surface-overlay glass-z-40\"\n            )}\n            initial={{ opacity: 0 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1 }}\n            exit={{ opacity: 0 }}\n            onClick={onClose}\n          />\n\n          {/* Bottom Sheet */}\n          <motion.div\n            className={`fixed bottom-0 left-0 right-0 z-50 ${className}`}\n            style={createGlassStyle({ intent: \"neutral\", elevation: \"level2\" })}\n            initial={{ y: \"100%\" }}\n            animate={prefersReducedMotion ? {} : { y: 0 }}\n            exit={{ y: \"100%\" }}\n            transition={\n              prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n            }\n            drag=\"y\"\n            dragConstraints={{ top: 0, bottom: 0 }}\n            dragElastic={0.1}\n            onDragEnd={handleDragEnd}\n          >\n            {/* Handle */}\n            <div className=\"glass-flex glass-justify-center glass-py-3\">\n              <div\n                className={cn(\n                  \"glass-w-12 glass-h-1.5 glass-surface-secondary glass-radius-full\"\n                )}\n              />\n            </div>\n\n            {/* Content */}\n            <div className='glass-px-6 glass-pb-6 glass-overflow-y-auto glass-max-h-full'>\n              {children}\n            </div>\n          </motion.div>\n        </>\n      )}\n    </AnimatePresence>\n  );\n}\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useMemo } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\nexport interface GlassPresenceIndicatorProps {\n  users?: Array<{\n    id: string;\n    name: string;\n    avatar?: string;\n    status: \"online\" | \"away\" | \"busy\" | \"offline\";\n    lastSeen?: Date;\n    activity?: string;\n    location?: string;\n    timezone?: string;\n    isTyping?: boolean;\n    customStatus?: {\n      emoji?: string;\n      text?: string;\n    };\n  }>;\n  maxVisible?: number;\n  showAvatars?: boolean;\n  showNames?: boolean;\n  showStatus?: boolean;\n  showActivity?: boolean;\n  showLastSeen?: boolean;\n  showTypingIndicator?: boolean;\n  layout?: \"horizontal\" | \"vertical\" | \"grid\" | \"stack\";\n  size?: \"small\" | \"medium\" | \"large\";\n  groupSimilarStatus?: boolean;\n  realTimeSync?: boolean;\n  soundEnabled?: boolean;\n  animateChanges?: boolean;\n  theme?: \"light\" | \"dark\" | \"auto\";\n  onUserClick?: (userId: string) => void;\n  onStatusChange?: (userId: string, status: string) => void;\n  className?: string;\n}\n\nconst statusColors = {\n  online: \"hsl(var(--glass-color-success))\",\n  away: \"hsl(var(--glass-color-warning))\",\n  busy: \"hsl(var(--glass-color-danger))\",\n  offline: \"var(--glass-gray-500)\",\n};\n\nconst statusLabels = {\n  online: \"Online\",\n  away: \"Away\",\n  busy: \"Busy\",\n  offline: \"Offline\",\n};\n\nexport const GlassPresenceIndicator = forwardRef<\n  HTMLDivElement,\n  GlassPresenceIndicatorProps\n>(\n  (\n    {\n      users,\n      maxVisible = 5,\n      showAvatars = true,\n      showNames = true,\n      showStatus = true,\n      showActivity = false,\n      showLastSeen = true,\n      showTypingIndicator = true,\n      layout = \"horizontal\",\n      size = \"medium\",\n      groupSimilarStatus = false,\n      realTimeSync = false,\n      soundEnabled = true,\n      animateChanges = true,\n      theme = \"auto\",\n      onUserClick,\n      onStatusChange,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [presenceData, setPresenceData] = useState(users || []);\n    const [typingUsers, setTypingUsers] = useState<string[]>([]);\n    const { play } = useGlassSound();\n    const id = useA11yId(\"glass-presence\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Helper function to respect motion preferences\n    const respectMotionPreference = (config: any) =>\n      shouldAnimate ? config : { duration: 0 };\n\n    // Simulated real-time updates\n    useEffect(() => {\n      if (!realTimeSync || !presenceData.length) return;\n\n      const interval = setInterval(() => {\n        setPresenceData((prev: any) =>\n          prev.map((user: any) => ({\n            ...user,\n            lastSeen: user.status !== \"offline\" ? new Date() : user.lastSeen,\n            isTyping: Math.random() < 0.1 ? !user.isTyping : user.isTyping,\n          }))\n        );\n      }, 5000);\n\n      return () => clearInterval(interval);\n    }, [realTimeSync]);\n\n    // Track typing users\n    useEffect(() => {\n      const typing = presenceData\n        .filter((user: any) => user.isTyping)\n        .map((user: any) => user.id);\n      setTypingUsers(typing);\n    }, [presenceData]);\n\n    // Sound notifications for status changes\n    useEffect(() => {\n      if (soundEnabled && presenceData.length > 0) {\n        presenceData.forEach((user: any) => {\n          if (user.status === \"online\") {\n            play(\"notification\");\n          }\n        });\n      }\n    }, [presenceData, soundEnabled, play]);\n\n    const processedUsers = useMemo(() => {\n      let processedData = [...presenceData];\n\n      // Group similar statuses if enabled\n      if (groupSimilarStatus) {\n        processedData.sort((a, b) => {\n          const statusOrder = { online: 0, away: 1, busy: 2, offline: 3 };\n          return statusOrder[a.status] - statusOrder[b.status];\n        });\n      }\n\n      // Limit visible users\n      const visibleUsers = processedData.slice(0, maxVisible);\n      const hiddenCount = Math.max(0, processedData.length - maxVisible);\n\n      return {\n        visibleUsers,\n        hiddenCount,\n        totalOnline: processedData.filter((u: any) => u.status === \"online\")\n          .length,\n      };\n    }, [presenceData, maxVisible, groupSimilarStatus]);\n\n    const formatLastSeen = (lastSeen?: Date) => {\n      if (!lastSeen) return \"Never\";\n      const now = new Date();\n      const diff = now.getTime() - lastSeen.getTime();\n      const minutes = Math.floor(diff / 60000);\n      const hours = Math.floor(diff / 3600000);\n      const days = Math.floor(diff / 86400000);\n\n      if (minutes < 1) return \"Just now\";\n      if (minutes < 60) return `${minutes}m ago`;\n      if (hours < 24) return `${hours}h ago`;\n      return `${days}d ago`;\n    };\n\n    const getSizeClasses = () => {\n      switch (size) {\n        case \"small\":\n          return \"glass-text-xs\";\n        case \"large\":\n          return \"glass-text-lg\";\n        default:\n          return \"glass-text-sm\";\n      }\n    };\n\n    const getLayoutClasses = () => {\n      switch (layout) {\n        case \"vertical\":\n          return \"glass-flex glass-flex-col glass-space-y-2\";\n        case \"grid\":\n          return \"glass-grid glass-grid-cols-2 glass-gap-2\";\n        case \"stack\":\n          return \"glass-flex glass-flex-col glass-space-y-1\";\n        default:\n          return \"glass-flex glass-flex-wrap glass-gap-2\";\n      }\n    };\n\n    const UserPresence = ({\n      user,\n      index,\n    }: {\n      user: (typeof presenceData)[0];\n      index: number;\n    }) => (\n      <motion.div\n        key={user.id}\n        layout={animateChanges}\n        initial={{ opacity: 0, scale: 0.8 }}\n        animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1 }}\n        exit={{ opacity: 0, scale: 0.8 }}\n        transition={respectMotionPreference({\n          duration: 0.3,\n          delay: index * 0.05,\n        })}\n        className=\"glass-flex glass-items-center glass-space-x-2 glass-p-2 glass-radius-lg glass-cursor-pointer glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n        style={{\n          ...createGlassStyle({ variant: \"default\", radius: \"lg\" }),\n          transitionDuration: \"200ms\",\n        }}\n        onClick={() => onUserClick?.(user.id)}\n      >\n        {showAvatars && (\n          <div className=\"glass-relative\">\n            <div\n              className={cn(\n                \"glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-font-semibold glass-overflow-hidden\",\n                size === \"small\"\n                  ? \"glass-w-6 glass-h-6\"\n                  : size === \"large\"\n                    ? \"glass-w-12 glass-h-12\"\n                    : \"glass-w-8 glass-h-8\"\n              )}\n              style={createGlassStyle({ variant: \"default\", radius: \"full\" })}\n            >\n              {user.avatar ? (\n                <img\n                  src={user.avatar}\n                  alt={user.name}\n                  className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                />\n              ) : (\n                user.name.charAt(0).toUpperCase()\n              )}\n            </div>\n\n            {showStatus && (\n              <motion.div\n                className={cn(\n                  \"glass-absolute glass-radius-full glass-border-2 glass-border-white\",\n                  size === \"large\"\n                    ? \"glass-w-4 glass-h-4\"\n                    : \"glass-w-3 glass-h-3\"\n                )}\n                style={{\n                  backgroundColor: statusColors[user.status],\n                  right: -2,\n                  bottom: -2,\n                }}\n                animate={user.status === \"online\" ? { scale: [1, 1.2, 1] } : {}}\n                transition={respectMotionPreference({\n                  duration: 2,\n                  repeat: Infinity,\n                  repeatType: \"loop\",\n                })}\n              />\n            )}\n          </div>\n        )}\n\n        <div className=\"glass-flex-1 glass-min-w-0\">\n          {showNames && (\n            <div className=\"glass-flex glass-items-center glass-space-x-1\">\n              <p\n                className={cn(\n                  \"glass-font-medium glass-text-primary glass-truncate\",\n                  getSizeClasses()\n                )}\n              >\n                {user.name}\n              </p>\n              {user.customStatus?.emoji && (\n                <span className=\"glass-text-xs\">{user.customStatus.emoji}</span>\n              )}\n            </div>\n          )}\n\n          {showActivity && user.activity && (\n            <p\n              className={cn(\n                \"glass-text-secondary glass-truncate\",\n                size === \"large\" ? \"glass-text-sm\" : \"glass-text-xs\"\n              )}\n            >\n              {user.activity}\n            </p>\n          )}\n\n          {user.customStatus?.text && (\n            <p\n              className={cn(\n                \"glass-text-secondary glass-truncate\",\n                size === \"large\" ? \"glass-text-sm\" : \"glass-text-xs\"\n              )}\n            >\n              {user.customStatus.text}\n            </p>\n          )}\n\n          {showLastSeen && user.status === \"offline\" && (\n            <p\n              className={cn(\n                \"glass-text-tertiary\",\n                size === \"large\" ? \"glass-text-sm\" : \"glass-text-xs\"\n              )}\n            >\n              {formatLastSeen(user.lastSeen)}\n            </p>\n          )}\n        </div>\n\n        {showTypingIndicator && user.isTyping && (\n          <motion.div\n            className=\"glass-flex glass-space-x-1\"\n            animate={prefersReducedMotion ? {} : { opacity: [0.4, 1, 0.4] }}\n            transition={respectMotionPreference({\n              duration: 1.5,\n              repeat: Infinity,\n              ease: \"easeInOut\",\n            })}\n          >\n            {[0, 1, 2].map((i: any) => (\n              <motion.div\n                key={i}\n                className=\"glass-w-1.5 glass-h-1.5 glass-surface-primary glass-radius-full\"\n                animate={prefersReducedMotion ? {} : { y: [-2, 0, -2] }}\n                transition={respectMotionPreference({\n                  duration: 0.6,\n                  repeat: Infinity,\n                  delay: i * 0.1,\n                  ease: \"easeInOut\",\n                })}\n              />\n            ))}\n          </motion.div>\n        )}\n\n        {showStatus && !showAvatars && (\n          <div\n            className=\"glass-w-3 glass-h-3 glass-radius-full\"\n            style={{ backgroundColor: statusColors[user.status] }}\n          />\n        )}\n      </motion.div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        intensity=\"subtle\"\n        className={cn(\"glass-p-4\", className)}\n        {...props}\n      >\n        <div className={getLayoutClasses()}>\n          {processedUsers.visibleUsers.map((user, index) => (\n            <UserPresence key={user.id} user={user} index={index} />\n          ))}\n\n          {processedUsers.hiddenCount > 0 && (\n            <motion.div\n              className=\"glass-flex glass-items-center glass-space-x-2 glass-p-2 glass-radius-lg glass-text-secondary\"\n              style={createGlassStyle({ variant: \"default\", radius: \"lg\" })}\n              initial={{ opacity: 0 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1 }}\n              transition={respectMotionPreference({ delay: 0.3 })}\n            >\n              <div\n                className={cn(\n                  \"glass-radius-full glass-surface-subtle/20 glass-flex glass-items-center glass-justify-center glass-font-medium\",\n                  size === \"small\"\n                    ? \"glass-w-6 glass-h-6\"\n                    : size === \"large\"\n                      ? \"glass-w-12 glass-h-12\"\n                      : \"glass-w-8 glass-h-8\",\n                  getSizeClasses()\n                )}\n              >\n                +{processedUsers.hiddenCount}\n              </div>\n              <span className={getSizeClasses()}>\n                {processedUsers.hiddenCount} more{\" \"}\n                {processedUsers.hiddenCount === 1 ? \"user\" : \"users\"}\n              </span>\n            </motion.div>\n          )}\n        </div>\n\n        {showTypingIndicator && typingUsers.length > 0 && (\n          <motion.div\n            className=\"glass-mt-3 glass-pt-3 glass-border-t glass-border-white/10\"\n            initial={{ opacity: 0, y: 10 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: 10 }}\n          >\n            <p className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n              {typingUsers.length === 1\n                ? `${presenceData.find((u) => u.id === typingUsers[0])?.name} is typing...`\n                : typingUsers.length === 2\n                  ? `${presenceData.find((u) => u.id === typingUsers[0])?.name} and ${presenceData.find((u) => u.id === typingUsers[1])?.name} are typing...`\n                  : `${typingUsers.length} people are typing...`}\n            </p>\n          </motion.div>\n        )}\n\n        <motion.div\n          className=\"glass-mt-3 glass-pt-3 glass-border-t glass-border-white/10 glass-flex glass-justify-between glass-items-center glass-text-xs glass-text-primary-glass-opacity-50\"\n          initial={{ opacity: 0 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1 }}\n          transition={respectMotionPreference({ delay: 0.5 })}\n        >\n          <span>{processedUsers.totalOnline} online</span>\n          <span>{presenceData.length} total</span>\n        </motion.div>\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useCallback,\n  useRef,\n  useMemo,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\nexport interface ReactionBubble {\n  id: string;\n  emoji: string;\n  userId: string;\n  userName: string;\n  userColor?: string;\n  x: number;\n  y: number;\n  timestamp: number;\n  size?: number;\n  velocity?: { x: number; y: number };\n  life: number;\n  maxLife: number;\n}\n\nexport interface GlassReactionBubblesProps {\n  width?: number;\n  height?: number;\n  reactions?: ReactionBubble[];\n  availableEmojis?: string[];\n  showControls?: boolean;\n  showUserNames?: boolean;\n  bubbleLifetime?: number;\n  maxBubbles?: number;\n  gravity?: number;\n  windForce?: number;\n  bounceEnabled?: boolean;\n  fadeOut?: boolean;\n  soundEnabled?: boolean;\n  realTimeMode?: boolean;\n  interactive?: boolean;\n  /**\n   * Starts the reaction field with a visible, package-owned demo state.\n   * Use `\"idle\"` when an empty field is required.\n   */\n  demoState?: \"active\" | \"idle\";\n  /** Alias for `demoState=\"active\"` for docs/catalog previews. */\n  autoplay?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  onReactionAdd?: (emoji: string, x?: number, y?: number) => void;\n  onReactionClick?: (reaction: ReactionBubble) => void;\n  className?: string;\n}\n\nconst defaultEmojis = [\n  \"\u2764\uFE0F\",\n  \"\uD83D\uDE00\",\n  \"\uD83D\uDE02\",\n  \"\uD83C\uDF89\",\n  \"\uD83D\uDC4F\",\n  \"\uD83D\uDD25\",\n  \"\uD83D\uDCAF\",\n  \"\u2B50\",\n  \"\uD83D\uDC4D\",\n  \"\uD83D\uDC4E\",\n  \"\uD83D\uDE0D\",\n  \"\uD83E\uDD14\",\n  \"\uD83D\uDE2E\",\n  \"\uD83D\uDE22\",\n  \"\uD83D\uDCAA\",\n  \"\uD83D\uDE4C\",\n];\n\nconst reactionColors = [\n  \"#FF6B6B\",\n  \"#4ECDC4\",\n  \"#45B7D1\",\n  \"#96CEB4\",\n  \"#FECA57\",\n  \"#FF9FF3\",\n  \"#54A0FF\",\n  \"#5F27CD\",\n  \"#00D2D3\",\n  \"#FF9F43\",\n];\n\nconst createDefaultReactions = (baseTimestamp = 0): ReactionBubble[] => {\n  return [\n    {\n      id: \"demo-reaction-1\",\n      emoji: \"\uD83C\uDF89\",\n      userId: \"demo-a\",\n      userName: \"Aurora\",\n      userColor: \"#38bdf8\",\n      x: 96,\n      y: 86,\n      timestamp: baseTimestamp - 1200,\n      size: 34,\n      velocity: { x: 0.2, y: -0.4 },\n      life: 4200,\n      maxLife: 5000,\n    },\n    {\n      id: \"demo-reaction-2\",\n      emoji: \"\u2728\",\n      userId: \"demo-b\",\n      userName: \"Lumen\",\n      userColor: \"#a3e635\",\n      x: 168,\n      y: 118,\n      timestamp: baseTimestamp - 2400,\n      size: 30,\n      velocity: { x: -0.1, y: -0.2 },\n      life: 3600,\n      maxLife: 5000,\n    },\n    {\n      id: \"demo-reaction-3\",\n      emoji: \"\uD83D\uDC8E\",\n      userId: \"demo-c\",\n      userName: \"Orbit\",\n      userColor: \"#22d3ee\",\n      x: 238,\n      y: 76,\n      timestamp: baseTimestamp - 3600,\n      size: 32,\n      velocity: { x: 0.1, y: -0.3 },\n      life: 3000,\n      maxLife: 5000,\n    },\n  ];\n};\n\nconst createSeededRandom = (seed = 1234) => {\n  let value = seed >>> 0;\n  return () => {\n    value = (value * 1664525 + 1013904223) % 4294967296;\n    return value / 4294967296;\n  };\n};\n\nexport const GlassReactionBubbles = forwardRef<\n  HTMLDivElement,\n  GlassReactionBubblesProps\n>(\n  (\n    {\n      width = 360,\n      height = 260,\n      reactions = [],\n      availableEmojis = defaultEmojis,\n      showControls = true,\n      showUserNames = true,\n      bubbleLifetime = 5000,\n      maxBubbles = 50,\n      gravity = 0.1,\n      windForce = 0.05,\n      bounceEnabled = true,\n      fadeOut = true,\n      soundEnabled = true,\n      realTimeMode = false,\n      interactive = true,\n      demoState = \"active\",\n      autoplay,\n      compact = false,\n      contained = false,\n      maxHeight,\n      onReactionAdd,\n      onReactionClick,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldShowDemoBubbles =\n      reactions.length === 0 && (autoplay || demoState === \"active\");\n    const [bubbles, setBubbles] = useState<ReactionBubble[]>(\n      reactions.length > 0\n        ? reactions\n        : shouldShowDemoBubbles\n          ? createDefaultReactions(0)\n          : []\n    );\n    const [selectedEmoji, setSelectedEmoji] = useState(availableEmojis[0]);\n    const [isAnimating, setIsAnimating] = useState(false);\n    const { play } = useGlassSound();\n    const id = useA11yId(\"glass-reaction-bubbles\");\n    const { shouldAnimate } = useMotionPreference();\n    const randomRef = useRef<() => number>();\n    const isTestEnv =\n      typeof process !== \"undefined\" &&\n      process.env?.JEST_WORKER_ID !== undefined;\n\n    if (!randomRef.current) {\n      randomRef.current =\n        process.env.NODE_ENV === \"test\"\n          ? createSeededRandom()\n          : createSeededRandom();\n    }\n\n    const random = randomRef.current;\n\n    // Simulated reactions in real-time mode\n    useEffect(() => {\n      if (isTestEnv) return;\n\n      if (!realTimeMode) return;\n\n      const interval = setInterval(() => {\n        if (random() < 0.3) {\n          const emoji =\n            availableEmojis[Math.floor(random() * availableEmojis.length)];\n          const x = random() * (width - 40) + 20;\n          const y = random() * (height - 40) + 20;\n          addReaction(emoji, x, y, `user-${Date.now()}`, \"Anonymous\");\n        }\n      }, 2000);\n\n      return () => clearInterval(interval);\n    }, [realTimeMode, availableEmojis, width, height]);\n\n    // Physics simulation\n    useEffect(() => {\n      if (isTestEnv) return;\n\n      if (bubbles.length === 0) return;\n\n      const animationFrame = requestAnimationFrame(() => {\n        setBubbles((prev: any) =>\n          prev\n            .map((bubble: any) => {\n              // Update lifetime\n              const newLife = bubble.life - 16; // Assuming ~60fps\n              if (newLife <= 0) return null;\n\n              // Update position based on physics\n              const newVelocity = { ...bubble.velocity! };\n              newVelocity.y += gravity; // Apply gravity\n              newVelocity.x += (random() - 0.5) * windForce; // Apply wind\n\n              let newX = bubble.x + newVelocity.x;\n              let newY = bubble.y + newVelocity.y;\n\n              // Bounce off walls if enabled\n              if (bounceEnabled) {\n                if (newX <= 0 || newX >= width - 40) {\n                  newVelocity.x *= -0.7; // Damping on bounce\n                  newX = Math.max(0, Math.min(width - 40, newX));\n                }\n                if (newY <= 0 || newY >= height - 40) {\n                  newVelocity.y *= -0.7; // Damping on bounce\n                  newY = Math.max(0, Math.min(height - 40, newY));\n                }\n              } else {\n                // Wrap around\n                if (newX < -40) newX = width;\n                if (newX > width) newX = -40;\n                if (newY < -40) newY = height;\n                if (newY > height) newY = -40;\n              }\n\n              return {\n                ...bubble,\n                x: newX,\n                y: newY,\n                velocity: newVelocity,\n                life: newLife,\n              };\n            })\n            .filter(\n              (bubble: any): bubble is NonNullable<typeof bubble> =>\n                bubble !== null\n            )\n        );\n      });\n\n      return () => cancelAnimationFrame(animationFrame);\n    }, [bubbles, gravity, windForce, bounceEnabled, width, height]);\n\n    const addReaction = useCallback(\n      (\n        emoji: string,\n        x?: number,\n        y?: number,\n        userId?: string,\n        userName?: string\n      ) => {\n        const newBubble: ReactionBubble = {\n          id: `reaction-${Date.now()}-${random()}`,\n          emoji,\n          userId: userId || \"current\",\n          userName: userName || \"You\",\n          userColor:\n            reactionColors[Math.floor(random() * reactionColors.length)],\n          x: x ?? random() * (width - 40) + 20,\n          y: y ?? random() * (height - 40) + 20,\n          timestamp: Date.now(),\n          size: 30 + random() * 20,\n          velocity: {\n            x: (random() - 0.5) * 4,\n            y: (random() - 0.5) * 4 - 2, // Slight upward bias\n          },\n          life: bubbleLifetime,\n          maxLife: bubbleLifetime,\n        };\n\n        setBubbles((prev: any) => {\n          const updated = [...prev, newBubble].slice(-maxBubbles);\n          return updated;\n        });\n\n        if (soundEnabled) {\n          play(\"notification\");\n        }\n\n        onReactionAdd?.(emoji, newBubble.x, newBubble.y);\n      },\n      [\n        width,\n        height,\n        bubbleLifetime,\n        maxBubbles,\n        soundEnabled,\n        play,\n        onReactionAdd,\n      ]\n    );\n\n    const handleCanvasClick = useCallback(\n      (e: React.MouseEvent<HTMLDivElement>) => {\n        if (!interactive) return;\n\n        const rect = e.currentTarget.getBoundingClientRect();\n        const x = e.clientX - rect.left;\n        const y = e.clientY - rect.top;\n\n        addReaction(selectedEmoji, x, y);\n      },\n      [interactive, selectedEmoji, addReaction]\n    );\n\n    const handleBubbleClick = useCallback(\n      (bubble: ReactionBubble, e: React.MouseEvent) => {\n        e.stopPropagation();\n        onReactionClick?.(bubble);\n\n        // Add a small burst effect\n        for (let i = 0; i < 3; i++) {\n          addReaction(\n            bubble.emoji,\n            bubble.x + (random() - 0.5) * 20,\n            bubble.y + (random() - 0.5) * 20\n          );\n        }\n      },\n      [onReactionClick, addReaction]\n    );\n\n    const getBubbleOpacity = (bubble: ReactionBubble) => {\n      if (!fadeOut) return 1;\n      return Math.max(0.1, bubble.life / bubble.maxLife);\n    };\n\n    const getBubbleScale = (bubble: ReactionBubble) => {\n      const ageRatio = 1 - bubble.life / bubble.maxLife;\n      return 0.8 + Math.sin(ageRatio * Math.PI) * 0.4;\n    };\n\n    const ReactionBubbleComponent = ({\n      bubble,\n    }: {\n      bubble: ReactionBubble;\n    }) => (\n      <motion.div\n        className={cn(\n          \"glass-absolute glass-cursor-pointer glass-select-none glass-z-10\"\n        )}\n        style={{\n          left: bubble.x,\n          top: bubble.y,\n          fontSize: bubble.size || 30,\n        }}\n        initial={{ scale: 0, opacity: 0 }}\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                scale: getBubbleScale(bubble),\n                opacity: getBubbleOpacity(bubble),\n                rotate:\n                  Math.sin(\n                    (bubble.maxLife - bubble.life) / 1000 + bubble.timestamp\n                  ) * 10,\n              }\n        }\n        exit={{\n          scale: 0,\n          opacity: 0,\n          y: bubble.y - 50,\n        }}\n        transition={\n          shouldAnimate\n            ? {\n                type: \"spring\",\n                stiffness: 300,\n                damping: 20,\n              }\n            : { duration: 0 }\n        }\n        onClick={(e) => handleBubbleClick(bubble, e)}\n        whileHover={{ scale: getBubbleScale(bubble) * 1.1 }}\n        whileTap={{ scale: getBubbleScale(bubble) * 0.9 }}\n      >\n        <div\n          className={cn(\n            \"glass-relative glass-inline-flex glass-items-center glass-justify-center glass-radius-full glass-border glass-border-white/20\",\n            createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background\n          )}\n        >\n          <span className={cn(\"glass-text-2xl\")}>{bubble.emoji}</span>\n\n          {effectiveShowUserNames && (\n            <motion.div\n              className={cn(\n                \"glass-absolute glass-bottom-8-neg glass-left-1/2 glass-transform glass-translate-x-1/2-neg\"\n              )}\n              initial={{ opacity: 0, y: 10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 0.8, y: 0 }}\n              exit={{ opacity: 0, y: 10 }}\n              transition={shouldAnimate ? { delay: 0.2 } : { duration: 0 }}\n            >\n              <div\n                className={cn(\n                  \"glass-px-2 glass-py-1 glass-text-xs glass-font-medium glass-text-primary glass-radius glass-border glass-border-white/20 glass-whitespace-nowrap\",\n                  createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background\n                )}\n              >\n                {bubble.userName}\n              </div>\n            </motion.div>\n          )}\n\n          {/* Particle trail effect */}\n          <motion.div\n            className={cn(\"glass-absolute glass-inset-0 glass-radius-full\")}\n            style={{\n              background: `radial-gradient(circle, ${bubble.userColor || \"#FF6B6B\"}40 0%, transparent 70%)`,\n            }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    scale: [1, 1.5, 1],\n                    opacity: [0.3, 0.1, 0.3],\n                  }\n            }\n            transition={\n              shouldAnimate\n                ? {\n                    duration: 2,\n                    repeat: Infinity,\n                    ease: \"easeInOut\",\n                  }\n                : { duration: 0 }\n            }\n          />\n        </div>\n      </motion.div>\n    );\n\n    const EmojiSelector = () => (\n      <motion.div\n        className={cn(\n          \"glass-flex glass-flex-wrap glass-gap-2 glass-p-3 glass-radius-lg glass-max-w-xs\",\n          createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background\n        )}\n        initial={{ opacity: 0, y: 20 }}\n        animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n        transition={shouldAnimate ? { duration: 0.3 } : { duration: 0 }}\n      >\n        {availableEmojis.map((emoji: any) => (\n          <button\n            key={emoji}\n            onClick={() => setSelectedEmoji(emoji)}\n            className={cn(\n              \"glass-w-10 glass-h-10 glass-radius-lg glass-flex glass-items-center glass-justify-center glass-text-xl glass-focus glass-touch-target glass-contrast-guard\",\n              selectedEmoji === emoji\n                ? \"glass-surface-subtle/20 glass-ring-2 glass-ring-primary\"\n                : \"glass-surface-transparent\"\n            )}\n          >\n            {emoji}\n          </button>\n        ))}\n      </motion.div>\n    );\n\n    const stats = {\n      totalReactions: bubbles.length,\n      recentReactions: bubbles.filter((b: any) => b.life > 0).length,\n      mostUsedEmoji: bubbles.reduce(\n        (acc, bubble) => {\n          acc[bubble.emoji] = (acc[bubble.emoji] || 0) + 1;\n          return acc;\n        },\n        {} as Record<string, number>\n      ),\n    };\n\n    const mostUsed = Object.entries(stats.mostUsedEmoji).sort(\n      ([, a], [, b]) => b - a\n    )[0];\n\n    const effectiveHeight = maxHeight ?? (compact || contained ? 220 : height);\n    const numericHeight =\n      typeof effectiveHeight === \"number\" ? effectiveHeight : height;\n    const effectiveShowControls = compact ? false : showControls;\n    const effectiveShowUserNames = compact ? false : showUserNames;\n\n    const ambientParticles = useMemo(() => {\n      if (isTestEnv) {\n        return Array.from({ length: 5 }, (_, i) => ({\n          left: (width / 6) * (i + 1),\n          top: (numericHeight / 6) * (i + 1),\n          duration: 3 + i * 0.25,\n          delay: i * 0.2,\n        }));\n      }\n\n      return Array.from({ length: 5 }, () => ({\n        left: random() * width,\n        top: random() * numericHeight,\n        duration: 3 + random() * 2,\n        delay: random() * 2,\n      }));\n    }, [numericHeight, isTestEnv, random, width]);\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        intensity=\"subtle\"\n        className={cn(\"glass-relative glass-overflow-hidden\", className)}\n        style={{\n          width: \"100%\",\n          maxWidth: \"100%\",\n          height:\n            typeof effectiveHeight === \"number\"\n              ? `${effectiveHeight}px`\n              : effectiveHeight,\n          maxHeight:\n            typeof effectiveHeight === \"number\"\n              ? `${effectiveHeight}px`\n              : effectiveHeight,\n        }}\n        {...props}\n      >\n        {/* Main reaction area */}\n        <div\n          className={cn(\"glass-absolute glass-inset-0 glass-cursor-crosshair\")}\n          onClick={handleCanvasClick}\n          style={{ width: \"100%\", height: numericHeight }}\n        >\n          <AnimatePresence>\n            {bubbles.map((bubble: any) => (\n              <ReactionBubbleComponent key={bubble.id} bubble={bubble} />\n            ))}\n          </AnimatePresence>\n\n          {/* Floating particles for ambiance */}\n          {ambientParticles.map((particle, i) => (\n            <motion.div\n              key={i}\n              className={cn(\n                \"glass-absolute glass-w-2 glass-h-2 glass-surface-muted glass-radius-full\"\n              )}\n              style={{\n                left: particle.left,\n                top: particle.top,\n              }}\n              animate={\n                prefersReducedMotion\n                  ? {}\n                  : {\n                      y: [0, -20, 0],\n                      opacity: [0.2, 0.8, 0.2],\n                      scale: [0.5, 1, 0.5],\n                    }\n              }\n              transition={\n                shouldAnimate\n                  ? {\n                      duration: particle.duration,\n                      repeat: Infinity,\n                      delay: particle.delay,\n                      ease: \"easeInOut\",\n                    }\n                  : { duration: 0 }\n              }\n            />\n          ))}\n        </div>\n\n        {/* Controls */}\n        {effectiveShowControls && (\n          <div\n            className={cn(\n              \"glass-absolute glass-top-4 glass-left-4 glass-z-20 glass-max-w-48\"\n            )}\n          >\n            <EmojiSelector />\n          </div>\n        )}\n\n        {/* Stats */}\n        {!compact && (\n          <motion.div\n            className={cn(\n              \"glass-absolute glass-top-4 glass-right-4 glass-z-20 glass-p-3 glass-radius-lg\",\n              createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background\n            )}\n            initial={{ opacity: 0, x: 20 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, x: 0 }}\n            transition={shouldAnimate ? { delay: 0.5 } : { duration: 0 }}\n          >\n            <div\n              className={cn(\n                \"glass-text-sm glass-text-secondary glass-space-y-1\"\n              )}\n            >\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-gap-2 glass-whitespace-nowrap\"\n                )}\n              >\n                <span>{stats.totalReactions}</span>\n                <span className={cn(\"glass-text-muted\")}>total</span>\n              </div>\n              <div\n                className={cn(\n                  \"glass-flex glass-items-center glass-gap-2 glass-whitespace-nowrap\"\n                )}\n              >\n                <span>{stats.recentReactions}</span>\n                <span className={cn(\"glass-text-muted\")}>recent</span>\n              </div>\n              {mostUsed && (\n                <div\n                  className={cn(\n                    \"glass-flex glass-items-center glass-gap-2 glass-whitespace-nowrap\"\n                  )}\n                >\n                  <span>{mostUsed[0]}</span>\n                  <span className={cn(\"glass-text-muted\")}>{mostUsed[1]}x</span>\n                </div>\n              )}\n            </div>\n          </motion.div>\n        )}\n\n        {/* Instructions */}\n        {interactive && showControls && height >= 300 && (\n          <motion.div\n            className={cn(\n              \"glass-absolute glass-bottom-4 glass-left-1-2 glass-z-20 glass-px-4 glass-py-2 glass-radius-lg glass-text-sm glass-text-secondary glass-whitespace-nowrap\",\n              createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background\n            )}\n            style={{ transform: \"translateX(-50%)\" }}\n            initial={{ opacity: 0, y: 20 }}\n            animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n            transition={shouldAnimate ? { delay: 1 } : { duration: 0 }}\n          >\n            Click anywhere to add {selectedEmoji} \u2022 Click bubbles to multiply\n            them\n          </motion.div>\n        )}\n\n        {/* Real-time indicator */}\n        {realTimeMode && (\n          <div\n            className={cn(\n              \"glass-absolute glass-bottom-4 glass-right-4 glass-z-20 glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-text-muted\"\n            )}\n          >\n            <div\n              className={cn(\n                \"glass-w-2 glass-h-2 glass-surface-success glass-radius-full\"\n              )}\n            />\n            <span>Live reactions</span>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useRef,\n  useCallback,\n} from \"react\";\nimport { motion, AnimatePresence, type Transition } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\nexport type DrawingTool = \"pen\" | \"marker\" | \"eraser\" | \"shape\";\n\nexport interface DrawingPoint {\n  x: number;\n  y: number;\n  pressure?: number;\n}\n\nexport interface DrawingStroke {\n  id: string;\n  userId: string;\n  userName: string;\n  userColor: string;\n  points: DrawingPoint[];\n  tool: DrawingTool;\n  color: string;\n  size: number;\n  opacity: number;\n  timestamp: number;\n  isComplete: boolean;\n}\n\nexport interface WhiteboardUser {\n  id: string;\n  name: string;\n  color: string;\n  avatar?: string;\n  cursorX: number;\n  cursorY: number;\n  isDrawing: boolean;\n  currentTool: string;\n  lastActivity: number;\n}\n\nexport interface GlassSharedWhiteboardProps {\n  width?: number;\n  height?: number;\n  users: WhiteboardUser[];\n  currentUserId: string;\n  strokes?: DrawingStroke[];\n  backgroundColor?: string;\n  gridVisible?: boolean;\n  showUserCursors?: boolean;\n  showToolbar?: boolean;\n  showUserList?: boolean;\n  showUndoRedo?: boolean;\n  maxStrokes?: number;\n  realTimeSync?: boolean;\n  soundEnabled?: boolean;\n  canDraw?: boolean;\n  readOnly?: boolean;\n  onStroke?: (stroke: DrawingStroke) => void;\n  onClear?: () => void;\n  onUndo?: () => void;\n  onRedo?: () => void;\n  onUserCursorMove?: (userId: string, x: number, y: number) => void;\n  className?: string;\n}\n\ninterface ToolDefinition {\n  id: DrawingTool;\n  name: string;\n  icon: string;\n}\n\nconst tools: readonly ToolDefinition[] = [\n  { id: \"pen\", name: \"Pen\", icon: \"\u270F\uFE0F\" },\n  { id: \"marker\", name: \"Marker\", icon: \"\uD83D\uDD8D\uFE0F\" },\n  { id: \"eraser\", name: \"Eraser\", icon: \"\uD83E\uDDFD\" },\n  { id: \"shape\", name: \"Shape\", icon: \"\uD83D\uDCD0\" },\n];\n\nconst colors = [\n  \"var(--glass-black)\",\n  \"#FF0000\",\n  \"#00FF00\",\n  \"#0000FF\",\n  \"#FFFF00\",\n  \"#FF00FF\",\n  \"#00FFFF\",\n  \"#FF8000\",\n  \"#8000FF\",\n  \"#FF0080\",\n];\n\nconst sizes = [2, 4, 8, 12, 16, 24] as const;\n\nexport const GlassSharedWhiteboard = forwardRef<\n  HTMLDivElement,\n  GlassSharedWhiteboardProps\n>(\n  (\n    {\n      width = 800,\n      height = 600,\n      users,\n      currentUserId,\n      strokes = [],\n      backgroundColor = \"var(--glass-white)\",\n      gridVisible = false,\n      showUserCursors = true,\n      showToolbar = true,\n      showUserList = true,\n      showUndoRedo = true,\n      maxStrokes = 1000,\n      realTimeSync = false,\n      soundEnabled = true,\n      canDraw = true,\n      readOnly = false,\n      onStroke,\n      onClear,\n      onUndo,\n      onRedo,\n      onUserCursorMove,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const [isDrawing, setIsDrawing] = useState(false);\n    const [currentStroke, setCurrentStroke] = useState<DrawingStroke | null>(\n      null\n    );\n    const [selectedTool, setSelectedTool] = useState<DrawingTool>(\"pen\");\n    const [selectedColor, setSelectedColor] = useState(\"var(--glass-black)\");\n    const [selectedSize, setSelectedSize] = useState(4);\n    const [localStrokes, setLocalStrokes] = useState<DrawingStroke[]>(strokes);\n    const [undoStack, setUndoStack] = useState<DrawingStroke[][]>([]);\n    const [redoStack, setRedoStack] = useState<DrawingStroke[][]>([]);\n    const [simulatedUsers, setSimulatedUsers] = useState(users);\n    const [gridVisibleState, setGridVisible] = useState(gridVisible);\n    const { play } = useGlassSound();\n    const id = useA11yId(\"glass-shared-whiteboard\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Helper function to respect motion preferences\n    const respectMotionPreference = (config: Transition): Transition =>\n      shouldAnimate ? config : { duration: 0 };\n\n    const currentUser = users.find((u) => u.id === currentUserId);\n\n    // Simulated collaborative activity\n    useEffect(() => {\n      if (!realTimeSync) return;\n\n      const interval = setInterval(() => {\n        setSimulatedUsers((prev) =>\n          prev.map((user) => {\n            if (user.id === currentUserId) return user;\n\n            // Randomly move cursors and simulate drawing\n            const deltaX = (Math.random() - 0.5) * 50;\n            const deltaY = (Math.random() - 0.5) * 50;\n            const newX = Math.max(0, Math.min(width, user.cursorX + deltaX));\n            const newY = Math.max(0, Math.min(height, user.cursorY + deltaY));\n\n            const isDrawing = Math.random() < 0.1;\n\n            if (isDrawing && Math.random() < 0.3) {\n              // Simulate a simple drawing stroke\n              const stroke: DrawingStroke = {\n                id: `stroke-${Date.now()}-${user.id}`,\n                userId: user.id,\n                userName: user.name,\n                userColor: user.color,\n                points: [\n                  { x: newX, y: newY },\n                  {\n                    x: newX + Math.random() * 20,\n                    y: newY + Math.random() * 20,\n                  },\n                ],\n                tool: \"pen\",\n                color: user.color,\n                size: 3,\n                opacity: 0.8,\n                timestamp: Date.now(),\n                isComplete: true,\n              };\n\n              setLocalStrokes((prev) => [\n                ...prev.slice(-maxStrokes + 1),\n                stroke,\n              ]);\n              onStroke?.(stroke);\n\n              if (soundEnabled) {\n                play(\"draw\");\n              }\n            }\n\n            onUserCursorMove?.(user.id, newX, newY);\n\n            return {\n              ...user,\n              cursorX: newX,\n              cursorY: newY,\n              isDrawing,\n              lastActivity: Date.now(),\n            };\n          })\n        );\n      }, 200);\n\n      return () => clearInterval(interval);\n    }, [\n      realTimeSync,\n      currentUserId,\n      width,\n      height,\n      maxStrokes,\n      onStroke,\n      onUserCursorMove,\n      soundEnabled,\n      play,\n    ]);\n\n    // Draw on canvas\n    const drawStrokes = useCallback(() => {\n      const canvas = canvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      // Clear canvas\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(0, 0, width, height);\n\n      // Draw grid if visible\n      if (gridVisibleState) {\n        ctx.strokeStyle = \"#E5E5E5\";\n        ctx.lineWidth = 1;\n        ctx.globalAlpha = 0.3;\n\n        for (let x = 0; x <= width; x += 20) {\n          ctx.beginPath();\n          ctx.moveTo(x, 0);\n          ctx.lineTo(x, height);\n          ctx.stroke();\n        }\n\n        for (let y = 0; y <= height; y += 20) {\n          ctx.beginPath();\n          ctx.moveTo(0, y);\n          ctx.lineTo(width, y);\n          ctx.stroke();\n        }\n      }\n\n      ctx.globalAlpha = 1;\n\n      // Draw all strokes\n      localStrokes.forEach((stroke) => {\n        if (stroke.points.length < 2) return;\n\n        ctx.strokeStyle = stroke.color;\n        ctx.lineWidth = stroke.size;\n        ctx.globalAlpha = stroke.opacity;\n        ctx.lineCap = \"round\";\n        ctx.lineJoin = \"round\";\n\n        if (stroke.tool === \"eraser\") {\n          ctx.globalCompositeOperation = \"destination-out\";\n        } else {\n          ctx.globalCompositeOperation = \"source-over\";\n        }\n\n        ctx.beginPath();\n        ctx.moveTo(stroke.points[0].x, stroke.points[0].y);\n\n        for (let i = 1; i < stroke.points.length; i++) {\n          ctx.lineTo(stroke.points[i].x, stroke.points[i].y);\n        }\n\n        ctx.stroke();\n      });\n\n      ctx.globalAlpha = 1;\n      ctx.globalCompositeOperation = \"source-over\";\n    }, [localStrokes, backgroundColor, gridVisibleState, width, height]);\n\n    useEffect(() => {\n      drawStrokes();\n    }, [drawStrokes]);\n\n    const startDrawing = useCallback(\n      (e: React.MouseEvent<HTMLCanvasElement>) => {\n        if (readOnly || !canDraw) return;\n\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = e.clientX - rect.left;\n        const y = e.clientY - rect.top;\n\n        setIsDrawing(true);\n\n        const stroke: DrawingStroke = {\n          id: `stroke-${Date.now()}-${currentUserId}`,\n          userId: currentUserId,\n          userName: currentUser?.name || \"Unknown\",\n          userColor: currentUser?.color || selectedColor,\n          points: [{ x, y }],\n          tool: selectedTool,\n          color: selectedColor,\n          size: selectedSize,\n          opacity: selectedTool === \"marker\" ? 0.7 : 1,\n          timestamp: Date.now(),\n          isComplete: false,\n        };\n\n        setCurrentStroke(stroke);\n\n        if (soundEnabled) {\n          play(\"draw\");\n        }\n      },\n      [\n        readOnly,\n        canDraw,\n        currentUserId,\n        currentUser,\n        selectedTool,\n        selectedColor,\n        selectedSize,\n        soundEnabled,\n        play,\n      ]\n    );\n\n    const draw = useCallback(\n      (e: React.MouseEvent<HTMLCanvasElement>) => {\n        if (!isDrawing || !currentStroke || readOnly) return;\n\n        const canvas = canvasRef.current;\n        if (!canvas) return;\n\n        const rect = canvas.getBoundingClientRect();\n        const x = e.clientX - rect.left;\n        const y = e.clientY - rect.top;\n\n        const updatedStroke = {\n          ...currentStroke,\n          points: [...currentStroke.points, { x, y }],\n        };\n\n        setCurrentStroke(updatedStroke);\n        setLocalStrokes((prev) => [\n          ...prev.filter((s) => s.id !== updatedStroke.id),\n          updatedStroke,\n        ]);\n      },\n      [isDrawing, currentStroke, readOnly]\n    );\n\n    const stopDrawing = useCallback(() => {\n      if (!currentStroke || readOnly) return;\n\n      const completedStroke = {\n        ...currentStroke,\n        isComplete: true,\n      };\n\n      setLocalStrokes((prev) => {\n        const newStrokes = [\n          ...prev.filter((s) => s.id !== completedStroke.id),\n          completedStroke,\n        ].slice(-maxStrokes);\n\n        setUndoStack((undoPrev) => [...undoPrev, prev]);\n        setRedoStack([]);\n\n        return newStrokes;\n      });\n\n      onStroke?.(completedStroke);\n      setCurrentStroke(null);\n      setIsDrawing(false);\n    }, [currentStroke, readOnly, maxStrokes, onStroke]);\n\n    const handleUndo = () => {\n      if (undoStack.length === 0) return;\n\n      const previousState = undoStack[undoStack.length - 1];\n      setRedoStack((prev) => [localStrokes, ...prev]);\n      setUndoStack((prev) => prev.slice(0, -1));\n      setLocalStrokes(previousState);\n      onUndo?.();\n    };\n\n    const handleRedo = () => {\n      if (redoStack.length === 0) return;\n\n      const nextState = redoStack[0];\n      setUndoStack((prev) => [...prev, localStrokes]);\n      setRedoStack((prev) => prev.slice(1));\n      setLocalStrokes(nextState);\n      onRedo?.();\n    };\n\n    const handleClear = () => {\n      setUndoStack((prev) => [...prev, localStrokes]);\n      setRedoStack([]);\n      setLocalStrokes([]);\n      onClear?.();\n    };\n\n    const UserCursor = ({ user }: { user: WhiteboardUser }) => (\n      <motion.div\n        className=\"glass-absolute glass-pointer-events-none glass-z-20\"\n        style={{\n          left: user.cursorX,\n          top: user.cursorY,\n          transform: \"translate(-2px, -2px)\",\n        }}\n        animate={\n          prefersReducedMotion\n            ? {}\n            : {\n                scale: user.isDrawing ? 1.2 : 1,\n                opacity: Date.now() - user.lastActivity < 5000 ? 1 : 0.5,\n              }\n        }\n        transition={respectMotionPreference({\n          type: \"spring\",\n          stiffness: 400,\n          damping: 30,\n        })}\n      >\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\">\n          <path\n            d=\"M5 3L19 12L12 14L9 21L5 3Z\"\n            fill={user.color}\n            stroke=\"white\"\n            strokeWidth=\"1\"\n          />\n        </svg>\n        <div\n          className=\"glass-mt-2 glass-px-2 glass-py-1 glass-text-xs glass-font-medium glass-text-primary glass-radius\"\n          style={createGlassStyle({ variant: \"default\", radius: \"sm\" })}\n        >\n          {user.name}\n        </div>\n      </motion.div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        intensity=\"subtle\"\n        className={cn(\"glass-relative\", className)}\n        {...props}\n      >\n        <div className=\"glass-flex glass-flex-col glass-space-y-4\">\n          {/* Toolbar */}\n          {showToolbar && !readOnly && (\n            <div\n              className=\"glass-flex glass-items-center glass-justify-between glass-p-3 glass-radius-lg glass-flex-wrap glass-gap-3\"\n              style={createGlassStyle({ variant: \"default\", radius: \"lg\" })}\n            >\n              <div className=\"glass-flex glass-items-center glass-flex-wrap glass-gap-3\">\n                {/* Tools */}\n                <div className=\"glass-flex glass-space-x-2\">\n                  {tools.map((tool) => (\n                    <button\n                      key={tool.id}\n                      onClick={() => setSelectedTool(tool.id)}\n                      className={cn(\n                        \"glass-p-2 glass-radius glass-text-sm glass-font-medium glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                        selectedTool === tool.id\n                          ? \"glass-surface-subtle/20 glass-text-primary\"\n                          : \"glass-text-secondary\"\n                      )}\n                      title={tool.name}\n                    >\n                      {tool.icon}\n                    </button>\n                  ))}\n                </div>\n\n                {/* Colors */}\n                <div className=\"glass-flex glass-space-x-1\">\n                  {colors.map((color, i) => (\n                    <button\n                      key={`${color}-${i}`}\n                      onClick={() => setSelectedColor(color)}\n                      className={cn(\n                        \"glass-w-6 glass-h-6 glass-radius glass-border-2 glass-transition-transform glass-focus glass-touch-target glass-contrast-guard\",\n                        selectedColor === color\n                          ? \"glass-border-white\"\n                          : \"glass-border-white/30\"\n                      )}\n                      style={{\n                        backgroundColor: color,\n                        transform:\n                          selectedColor === color ? \"scale(1.1)\" : undefined,\n                      }}\n                      aria-label={`Select color ${color}`}\n                    />\n                  ))}\n                </div>\n\n                {/* Sizes */}\n                <div className=\"glass-flex glass-space-x-1\">\n                  {sizes.map((size) => (\n                    <button\n                      key={size}\n                      onClick={() => setSelectedSize(size)}\n                      className={cn(\n                        \"glass-w-8 glass-h-8 glass-radius glass-flex glass-items-center glass-justify-center glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                        selectedSize === size\n                          ? \"glass-surface-subtle/20 glass-text-primary\"\n                          : \"glass-text-secondary\"\n                      )}\n                      aria-label={`Select brush size ${size}px`}\n                    >\n                      <div\n                        className=\"glass-bg-transparent glass-radius-full\"\n                        style={{\n                          width: Math.min(size, 16),\n                          height: Math.min(size, 16),\n                        }}\n                      />\n                    </button>\n                  ))}\n                </div>\n              </div>\n\n              {/* Actions */}\n              <div className=\"glass-flex glass-items-center glass-flex-wrap glass-gap-2\">\n                {showUndoRedo && (\n                  <>\n                    <button\n                      onClick={handleUndo}\n                      disabled={undoStack.length === 0}\n                      className=\"glass-px-3 glass-py-1 glass-text-sm glass-font-medium glass-text-primary-opacity-70 hover:glass-text-primary disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      \u21B6 Undo\n                    </button>\n                    <button\n                      onClick={handleRedo}\n                      disabled={redoStack.length === 0}\n                      className=\"glass-px-3 glass-py-1 glass-text-sm glass-font-medium glass-text-primary-opacity-70 hover:glass-text-primary disabled:glass-opacity-50 glass-disabled-cursor-not-allowed glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      \u21B7 Redo\n                    </button>\n                  </>\n                )}\n                <button\n                  onClick={handleClear}\n                  className=\"glass-px-3 glass-py-1 glass-text-sm glass-font-medium glass-text-primary hover:glass-text-secondary glass-focus glass-touch-target glass-contrast-guard glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  Clear\n                </button>\n              </div>\n            </div>\n          )}\n\n          <div className=\"glass-flex glass-flex-wrap glass-gap-4\">\n            {/* Whiteboard Canvas */}\n            <div className=\"glass-relative glass-flex-1 glass-min-w-0\">\n              <canvas\n                ref={canvasRef}\n                width={width}\n                height={height}\n                className={cn(\n                  \"glass-border glass-border-white/20 glass-radius-lg glass-cursor-crosshair\",\n                  readOnly && \"glass-cursor-not-allowed\"\n                )}\n                style={{\n                  width: \"100%\",\n                  maxWidth: width,\n                  height: \"auto\",\n                  display: \"block\",\n                }}\n                onMouseDown={startDrawing}\n                onMouseMove={draw}\n                onMouseUp={stopDrawing}\n                onMouseLeave={stopDrawing}\n              />\n\n              {/* User cursors */}\n              {showUserCursors && (\n                <AnimatePresence>\n                  {simulatedUsers\n                    .filter((user) => user.id !== currentUserId)\n                    .map((user) => (\n                      <UserCursor key={user.id} user={user} />\n                    ))}\n                </AnimatePresence>\n              )}\n\n              {/* Grid toggle */}\n              {!readOnly && (\n                <button\n                  onClick={() => setGridVisible((visible) => !visible)}\n                  className=\"glass-absolute glass-top-2 glass-right-2 glass-p-2 glass-text-primary-glass-opacity-60 hover:glass-text-primary glass-focus glass-touch-target glass-contrast-guard\"\n                  title=\"Toggle Grid\"\n                >\n                  #\n                </button>\n              )}\n            </div>\n\n            {/* User List */}\n            {showUserList && (\n              <div\n                className=\"glass-w-48 glass-p-3 glass-radius-lg glass-space-y-2\"\n                style={createGlassStyle({ variant: \"default\", radius: \"lg\" })}\n              >\n                <h3 className=\"glass-text-sm glass-font-medium glass-text-primary-glass-opacity-90 glass-mb-3\">\n                  Active Users ({simulatedUsers.length})\n                </h3>\n                {simulatedUsers.map((user) => (\n                  <div\n                    key={user.id}\n                    className=\"glass-flex glass-items-center glass-space-x-2 glass-p-2 glass-radius hover:glass-surface-subtle/5\"\n                  >\n                    <div\n                      className=\"glass-w-3 glass-h-3 glass-radius-full glass-border glass-border-white/30\"\n                      style={{ backgroundColor: user.color }}\n                    />\n                    <span className=\"glass-text-sm glass-text-primary-glass-opacity-80 glass-truncate\">\n                      {user.name}\n                      {user.id === currentUserId && \" (You)\"}\n                    </span>\n                    {user.isDrawing && (\n                      <span className=\"glass-text-xs glass-text-primary\">\n                        \u270F\uFE0F\n                      </span>\n                    )}\n                  </div>\n                ))}\n              </div>\n            )}\n          </div>\n\n          {/* Status */}\n          <div className=\"glass-flex glass-items-center glass-justify-between glass-text-xs glass-text-primary-glass-opacity-50\">\n            <div className=\"glass-flex glass-items-center glass-space-x-4\">\n              <span>{localStrokes.length} strokes</span>\n              {realTimeSync && (\n                <span className=\"glass-flex glass-items-center glass-space-x-1\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\" />\n                  <span>Synced</span>\n                </span>\n              )}\n              {readOnly && (\n                <span className=\"glass-text-primary\">Read Only</span>\n              )}\n            </div>\n            <div>\n              Canvas: {width}\u00D7{height}\n            </div>\n          </div>\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\n\nimport React, { forwardRef, useState, useEffect, useMemo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\nexport interface SocialPost {\n  id: string;\n  author: {\n    id: string;\n    name: string;\n    avatar?: string;\n    username: string;\n    verified?: boolean;\n  };\n  content: string;\n  timestamp: Date;\n  likes: number;\n  shares: number;\n  comments: number;\n  media?: {\n    type: \"image\" | \"video\" | \"gif\";\n    url: string;\n    thumbnail?: string;\n    alt?: string;\n  }[];\n  isLiked?: boolean;\n  isShared?: boolean;\n  tags?: string[];\n  mentions?: string[];\n}\n\nexport interface GlassSocialFeedProps {\n  posts: SocialPost[];\n  currentUserId?: string;\n  showInteractions?: boolean;\n  showTimestamps?: boolean;\n  showMedia?: boolean;\n  showTags?: boolean;\n  compactMode?: boolean;\n  maxHeight?: number;\n  infiniteScroll?: boolean;\n  realTimeUpdates?: boolean;\n  sortBy?: \"timestamp\" | \"likes\" | \"engagement\";\n  filterBy?: \"all\" | \"following\" | \"liked\";\n  onLike?: (postId: string) => void;\n  onShare?: (postId: string) => void;\n  onComment?: (postId: string) => void;\n  onUserClick?: (userId: string) => void;\n  onPostClick?: (postId: string) => void;\n  onLoadMore?: () => void;\n  className?: string;\n}\n\nconst engagementLevels = {\n  low: { color: \"var(--glass-gray-500)\", icon: \"\uD83D\uDCCA\" },\n  medium: { color: \"hsl(var(--glass-color-success))\", icon: \"\uD83D\uDCC8\" },\n  high: { color: \"hsl(var(--glass-color-warning))\", icon: \"\uD83D\uDD25\" },\n  viral: { color: \"hsl(var(--glass-color-danger))\", icon: \"\uD83D\uDE80\" },\n};\n\nexport const GlassSocialFeed = forwardRef<HTMLDivElement, GlassSocialFeedProps>(\n  (\n    {\n      posts,\n      currentUserId,\n      showInteractions = true,\n      showTimestamps = true,\n      showMedia = true,\n      showTags = true,\n      compactMode = false,\n      maxHeight,\n      infiniteScroll = false,\n      realTimeUpdates = false,\n      sortBy = \"timestamp\",\n      filterBy = \"all\",\n      onLike,\n      onShare,\n      onComment,\n      onUserClick,\n      onPostClick,\n      onLoadMore,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [likedPosts, setLikedPosts] = useState<Set<string>>(new Set());\n    const [sharedPosts, setSharedPosts] = useState<Set<string>>(new Set());\n    const [expandedPosts, setExpandedPosts] = useState<Set<string>>(new Set());\n    const [simulatedPosts, setSimulatedPosts] = useState(posts);\n    const id = useA11yId(\"glass-social-feed\");\n    const sortSelectId = useA11yId(\"glass-social-sort\");\n\n    // Motion preference hook\n    const { shouldAnimate } = useMotionPreference();\n\n    // Helper function to respect motion preferences\n    const respectMotionPreference = (config: any) =>\n      shouldAnimate ? config : { duration: 0 };\n\n    // Simulated real-time updates\n    useEffect(() => {\n      if (!realTimeUpdates) return;\n\n      const interval = setInterval(() => {\n        setSimulatedPosts((prev: any) =>\n          prev.map((post: any) => ({\n            ...post,\n            likes:\n              post.likes +\n              (Math.random() < 0.3 ? Math.floor(Math.random() * 3) : 0),\n            comments: post.comments + (Math.random() < 0.2 ? 1 : 0),\n            shares: post.shares + (Math.random() < 0.15 ? 1 : 0),\n          }))\n        );\n      }, ANIMATION.DURATION.slower * 7);\n\n      return () => clearInterval(interval);\n    }, [realTimeUpdates]);\n\n    const processedPosts = useMemo(() => {\n      let filtered = [...simulatedPosts];\n\n      // Apply filters\n      switch (filterBy) {\n        case \"following\":\n          // In a real app, this would filter by followed users\n          filtered = filtered.filter((post: any) => post.author.verified);\n          break;\n        case \"liked\":\n          filtered = filtered.filter((post: any) => likedPosts.has(post.id));\n          break;\n      }\n\n      // Apply sorting\n      switch (sortBy) {\n        case \"likes\":\n          filtered.sort((a, b) => b.likes - a.likes);\n          break;\n        case \"engagement\":\n          filtered.sort(\n            (a, b) =>\n              b.likes +\n              b.comments +\n              b.shares -\n              (a.likes + a.comments + a.shares)\n          );\n          break;\n        default:\n          filtered.sort(\n            (a, b) => b.timestamp.getTime() - a.timestamp.getTime()\n          );\n      }\n\n      return filtered;\n    }, [simulatedPosts, filterBy, sortBy, likedPosts]);\n\n    const formatTimeAgo = (timestamp: Date) => {\n      const now = new Date();\n      const diff = now.getTime() - timestamp.getTime();\n      const minutes = Math.floor(diff / 60000);\n      const hours = Math.floor(diff / 3600000);\n      const days = Math.floor(diff / 86400000);\n\n      if (minutes < 1) return \"Just now\";\n      if (minutes < 60) return `${minutes}m`;\n      if (hours < 24) return `${hours}h`;\n      if (days < 7) return `${days}d`;\n      return timestamp.toLocaleDateString();\n    };\n\n    const getEngagementLevel = (post: SocialPost) => {\n      const total = post.likes + post.comments + post.shares;\n      if (total > 1000) return \"viral\";\n      if (total > 100) return \"high\";\n      if (total > 10) return \"medium\";\n      return \"low\";\n    };\n\n    const handleLike = (postId: string) => {\n      setLikedPosts((prev: Set<string>) => {\n        const newSet = new Set(prev);\n        if (newSet.has(postId)) {\n          newSet.delete(postId);\n        } else {\n          newSet.add(postId);\n        }\n        return newSet;\n      });\n      onLike?.(postId);\n    };\n\n    const handleShare = (postId: string) => {\n      setSharedPosts((prev: Set<string>) => new Set(prev).add(postId));\n      onShare?.(postId);\n    };\n\n    const handlePostExpand = (postId: string) => {\n      setExpandedPosts((prev: Set<string>) => {\n        const newSet = new Set(prev);\n        if (newSet.has(postId)) {\n          newSet.delete(postId);\n        } else {\n          newSet.add(postId);\n        }\n        return newSet;\n      });\n    };\n\n    const PostCard = ({ post, index }: { post: SocialPost; index: number }) => {\n      const isExpanded = expandedPosts.has(post.id);\n      const isLiked = likedPosts.has(post.id);\n      const isShared = sharedPosts.has(post.id);\n      const engagement = getEngagementLevel(post);\n      const shouldTruncate = !compactMode && post.content.length > 200;\n\n      return (\n        <motion.div\n          layout\n          initial={{ opacity: 0, y: 20 }}\n          animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n          exit={{ opacity: 0, y: -20 }}\n          transition={respectMotionPreference({\n            duration: ANIMATION.DURATION.normal / 1000,\n            delay: index * 0.05,\n          })}\n          className=\"glass-relative glass-p-4 glass-radius-lg glass-cursor-pointer glass-transition-all glass-border glass-border-white/10\"\n          style={{\n            ...createGlassStyle({ variant: \"default\", radius: \"lg\" }),\n            transitionDuration: `${ANIMATION.DURATION.fast}ms`,\n          }}\n          onClick={() => onPostClick?.(post.id)}\n        >\n          {/* Author header */}\n          <div className=\"glass-flex glass-items-start glass-space-x-3 glass-mb-3\">\n            <motion.div\n              className=\"glass-relative glass-cursor-pointer\"\n              onClick={(e) => {\n                e.stopPropagation();\n                onUserClick?.(post.author.id);\n              }}\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.95 }}\n            >\n              <div\n                className={cn(\n                  \"glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-font-semibold glass-overflow-hidden\",\n                  compactMode ? \"glass-w-8 glass-h-8\" : \"glass-w-12 glass-h-12\"\n                )}\n                style={createGlassStyle({ variant: \"default\", radius: \"full\" })}\n              >\n                {post.author.avatar ? (\n                  <img\n                    src={post.author.avatar}\n                    alt={post.author.name}\n                    className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                  />\n                ) : (\n                  post.author.name.charAt(0).toUpperCase()\n                )}\n              </div>\n              {post.author.verified && (\n                <div\n                  className=\"glass-absolute glass-w-4 glass-h-4 glass-surface-primary glass-radius-full glass-flex glass-items-center glass-justify-center\"\n                  style={{ right: -4, bottom: -4 }}\n                >\n                  <span className=\"glass-text-primary glass-text-xs\">\u2713</span>\n                </div>\n              )}\n            </motion.div>\n\n            <div className=\"glass-flex-1 glass-min-w-0\">\n              <div className=\"glass-flex glass-items-center glass-space-x-2\">\n                <h3\n                  className={cn(\n                    \"glass-font-semibold glass-text-primary glass-truncate\",\n                    compactMode ? \"glass-text-sm\" : \"glass-text-base\"\n                  )}\n                >\n                  {post.author.name}\n                </h3>\n                <span\n                  className={cn(\n                    \"glass-text-secondary\",\n                    compactMode ? \"glass-text-xs\" : \"glass-text-sm\"\n                  )}\n                >\n                  @{post.author.username}\n                </span>\n                <div\n                  className=\"glass-w-2 glass-h-2 glass-radius-full\"\n                  style={{\n                    backgroundColor: engagementLevels[engagement].color,\n                  }}\n                  title={`${engagement} engagement`}\n                />\n              </div>\n              {showTimestamps && (\n                <p\n                  className={cn(\n                    \"glass-text-tertiary\",\n                    compactMode ? \"glass-text-xs\" : \"glass-text-sm\"\n                  )}\n                >\n                  {formatTimeAgo(post.timestamp)}\n                </p>\n              )}\n            </div>\n          </div>\n\n          {/* Content */}\n          <div className=\"glass-mb-3\">\n            <p\n              className={cn(\n                \"glass-text-primary glass-leading-relaxed\",\n                compactMode ? \"glass-text-sm\" : \"glass-text-base\"\n              )}\n            >\n              {shouldTruncate && !isExpanded\n                ? `${post.content.slice(0, 200)}...`\n                : post.content}\n              {shouldTruncate && (\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handlePostExpand(post.id);\n                  }}\n                  className=\"glass-ml-2 glass-text-primary hover:glass-text-secondary glass-text-sm glass-font-medium glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  {isExpanded ? \"Show less\" : \"Show more\"}\n                </button>\n              )}\n            </p>\n\n            {/* Tags */}\n            {showTags && post.tags && post.tags.length > 0 && (\n              <div className=\"glass-flex glass-flex-wrap glass-gap-2 glass-mt-2\">\n                {post.tags.map((tag: any) => (\n                  <span\n                    key={tag}\n                    className=\"glass-px-2 glass-py-1 glass-text-xs glass-radius-full glass-surface-info glass-text-primary glass-cursor-pointer glass-transition-colors\"\n                    style={{\n                      transitionDuration: `${ANIMATION.DURATION.fast}ms`,\n                    }}\n                  >\n                    #{tag}\n                  </span>\n                ))}\n              </div>\n            )}\n          </div>\n\n          {/* Media */}\n          {showMedia && post.media && post.media.length > 0 && (\n            <div className=\"glass-mb-3 glass-radius-lg glass-overflow-hidden\">\n              <div\n                className={cn(\n                  \"glass-grid glass-gap-2\",\n                  post.media.length === 1\n                    ? \"glass-grid-cols-1\"\n                    : \"glass-grid-cols-2\"\n                )}\n              >\n                {post.media.slice(0, 4).map((media, mediaIndex) => (\n                  <div\n                    key={mediaIndex}\n                    className=\"glass-relative glass-aspect-square glass-surface-subtle/5 glass-radius-lg glass-overflow-hidden\"\n                  >\n                    {media.type === \"image\" ? (\n                      <img\n                        src={media.url}\n                        alt={media.alt || \"Post media\"}\n                        className=\"glass-w-full glass-h-full glass-object-cover glass-hover-scale-105\"\n                        style={{\n                          transition: `transform ${ANIMATION.DURATION.normal}ms ease`,\n                        }}\n                      />\n                    ) : media.type === \"video\" ? (\n                      <video\n                        src={media.url}\n                        poster={media.thumbnail}\n                        className=\"glass-w-full glass-h-full glass-object-cover\"\n                        controls\n                      />\n                    ) : (\n                      <img\n                        src={media.url}\n                        alt={media.alt || \"GIF\"}\n                        className=\"glass-w-full glass-h-full glass-object-cover\"\n                      />\n                    )}\n                    {post.media &&\n                      post.media.length > 4 &&\n                      mediaIndex === 3 && (\n                        <div\n                          className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n                          style={{\n                            background: \"var(--glass-primary-level2-surface)\",\n                          }}\n                        >\n                          <span className=\"glass-text-primary glass-font-semibold\">\n                            +{post.media.length - 3} more\n                          </span>\n                        </div>\n                      )}\n                  </div>\n                ))}\n              </div>\n            </div>\n          )}\n\n          {/* Interactions */}\n          {showInteractions && (\n            <div className=\"glass-flex glass-items-center glass-justify-between glass-pt-3 glass-border-t glass-border-white/10\">\n              <div className=\"glass-flex glass-items-center glass-space-x-6\">\n                <motion.button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handleLike(post.id);\n                  }}\n                  className={cn(\n                    \"glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                    isLiked ? \"glass-text-danger\" : \"glass-text-secondary\"\n                  )}\n                  style={{ transitionDuration: `${ANIMATION.DURATION.fast}ms` }}\n                  whileHover={{ scale: 1.05 }}\n                  whileTap={{ scale: 0.95 }}\n                >\n                  <span>{isLiked ? \"\u2764\uFE0F\" : \"\uD83E\uDD0D\"}</span>\n                  <span>{post.likes + (isLiked ? 1 : 0)}</span>\n                </motion.button>\n\n                <button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    onComment?.(post.id);\n                  }}\n                  className=\"glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-text-secondary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  style={{ transitionDuration: \"200ms\" }}\n                >\n                  <span>\uD83D\uDCAC</span>\n                  <span>{post.comments}</span>\n                </button>\n\n                <motion.button\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    handleShare(post.id);\n                  }}\n                  className={cn(\n                    \"glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                    isShared ? \"glass-text-success\" : \"glass-text-secondary\"\n                  )}\n                  style={{ transitionDuration: `${ANIMATION.DURATION.fast}ms` }}\n                  whileHover={{ scale: 1.05 }}\n                  whileTap={{ scale: 0.95 }}\n                >\n                  <span>\uD83D\uDD04</span>\n                  <span>{post.shares + (isShared ? 1 : 0)}</span>\n                </motion.button>\n              </div>\n\n              <div className=\"glass-flex glass-items-center glass-space-x-2 glass-text-sm glass-text-primary-glass-opacity-50\">\n                <span>{engagementLevels[engagement].icon}</span>\n                <span>{post.likes + post.comments + post.shares}</span>\n              </div>\n            </div>\n          )}\n        </motion.div>\n      );\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={`${className}`}\n        style={{\n          maxHeight,\n          overflowY: maxHeight ? \"auto\" : undefined,\n          overflowX: \"hidden\",\n        }}\n        {...props}\n      >\n        <div className=\"glass-p-4 glass-space-y-4\">\n          {/* Feed controls */}\n          <div className=\"glass-flex glass-items-center glass-justify-between\">\n            <h2 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90\">\n              Social Feed ({processedPosts.length})\n            </h2>\n            <div className=\"glass-flex glass-items-center glass-space-x-2 glass-text-sm\">\n              {realTimeUpdates && (\n                <div className=\"glass-flex glass-items-center glass-space-x-1 glass-text-primary\">\n                  <div className=\"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\" />\n                  <span>Live</span>\n                </div>\n              )}\n              <label htmlFor={sortSelectId} className=\"glass-sr-only\">\n                Sort posts by\n              </label>\n              <select\n                id={sortSelectId}\n                value={sortBy}\n                onChange={(e) => {\n                  /* Would update sortBy in real implementation */\n                }}\n                className=\"glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius glass-px-2 glass-py-1 glass-text-primary glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n                aria-label=\"Sort posts by\"\n              >\n                <option value=\"timestamp\">Latest</option>\n                <option value=\"likes\">Most Liked</option>\n                <option value=\"engagement\">Most Engaging</option>\n              </select>\n            </div>\n          </div>\n\n          {/* Posts */}\n          <div\n            className={cn(\n              \"glass-space-y-4\",\n              maxHeight && \"glass-overflow-y-auto\"\n            )}\n          >\n            <AnimatePresence>\n              {processedPosts.map((post, index) => (\n                <PostCard key={post.id} post={post} index={index} />\n              ))}\n            </AnimatePresence>\n\n            {/* Load more */}\n            {infiniteScroll && onLoadMore && (\n              <motion.button\n                onClick={onLoadMore}\n                className=\"glass-w-full glass-p-4 glass-radius-lg glass-text-sm glass-font-medium glass-text-secondary glass-transition-colors glass-border glass-border-white/10 glass-focus glass-touch-target glass-contrast-guard\"\n                style={{\n                  ...createGlassStyle({ variant: \"default\", radius: \"lg\" }),\n                  transitionDuration: \"200ms\",\n                }}\n                whileHover={{ scale: 1.02 }}\n                whileTap={{ scale: 0.98 }}\n              >\n                Load More Posts\n              </motion.button>\n            )}\n          </div>\n\n          {/* Empty state */}\n          {processedPosts.length === 0 && (\n            <div className=\"glass-text-center glass-py-12\">\n              <div className=\"glass-text-6xl glass-mb-4\">\uD83D\uDCF1</div>\n              <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-opacity-70 glass-mb-2\">\n                No posts to show\n              </h3>\n              <p className=\"glass-text-primary-glass-opacity-50\">\n                {filterBy === \"liked\"\n                  ? \"You haven't liked any posts yet\"\n                  : \"Your feed is empty. Try following some users!\"}\n              </p>\n            </div>\n          )}\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport React, { forwardRef, useState, useEffect, useRef, useMemo } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\nexport interface VoiceParticipant {\n  id: string;\n  name: string;\n  avatar?: string;\n  color: string;\n  isSpeaking: boolean;\n  isMuted: boolean;\n  audioLevel: number;\n  lastActivity: number;\n  isConnected: boolean;\n}\n\nexport interface GlassVoiceWaveformProps {\n  participants: VoiceParticipant[];\n  currentUserId?: string;\n  showAvatars?: boolean;\n  showNames?: boolean;\n  showMuteStatus?: boolean;\n  showConnectionStatus?: boolean;\n  waveformStyle?: \"bars\" | \"waves\" | \"circular\" | \"spectrum\";\n  sensitivity?: number;\n  smoothing?: number;\n  colorMode?: \"participant\" | \"activity\" | \"rainbow\";\n  maxBars?: number;\n  animationSpeed?: number;\n  realTimeMode?: boolean;\n  soundVisualization?: boolean;\n  showVoiceActivity?: boolean;\n  compactMode?: boolean;\n  onParticipantClick?: (participantId: string) => void;\n  onMuteToggle?: (participantId: string) => void;\n  className?: string;\n}\n\nconst activityColors = {\n  low: \"var(--glass-gray-600)\",\n  medium: \"hsl(var(--glass-color-success))\",\n  high: \"hsl(var(--glass-color-warning))\",\n  peak: \"hsl(var(--glass-color-danger))\",\n};\n\nconst rainbowColors = [\n  \"#FF6B6B\",\n  \"#4ECDC4\",\n  \"#45B7D1\",\n  \"#96CEB4\",\n  \"#FECA57\",\n  \"#FF9FF3\",\n  \"#54A0FF\",\n  \"#5F27CD\",\n  \"#00D2D3\",\n  \"#FF9F43\",\n];\n\nexport const GlassVoiceWaveform = forwardRef<\n  HTMLDivElement,\n  GlassVoiceWaveformProps\n>(\n  (\n    {\n      participants,\n      currentUserId,\n      showAvatars = true,\n      showNames = true,\n      showMuteStatus = true,\n      showConnectionStatus = true,\n      waveformStyle = \"bars\",\n      sensitivity = 1,\n      smoothing = 0.8,\n      colorMode = \"participant\",\n      maxBars = 32,\n      animationSpeed = 1,\n      realTimeMode = false,\n      soundVisualization = true,\n      showVoiceActivity = true,\n      compactMode = false,\n      onParticipantClick,\n      onMuteToggle,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [audioData, setAudioData] = useState<Record<string, number[]>>({});\n    const [speakingHistory, setSpeakingHistory] = useState<\n      Record<string, number[]>\n    >({});\n    const [simulatedParticipants, setSimulatedParticipants] =\n      useState(participants);\n    const animationFrameRef = useRef<number>();\n    const participantsRef = useRef(simulatedParticipants);\n    const settingsRef = useRef({ maxBars, smoothing });\n    const { play } = useGlassSound();\n    const id = useA11yId(\"glass-voice-waveform\");\n    const { shouldAnimate } = useMotionPreference();\n\n    // Generate realistic audio waveform data\n    const generateWaveformData = (\n      audioLevel: number,\n      bars: number\n    ): number[] => {\n      const data: number[] = [];\n      const baseLevel = audioLevel * sensitivity;\n\n      for (let i = 0; i < bars; i++) {\n        const frequency = (i / bars) * Math.PI * 4;\n        let amplitude = Math.sin(frequency) * baseLevel;\n\n        // Add some randomness for more realistic waveform\n        amplitude += (Math.random() - 0.5) * baseLevel * 0.3;\n\n        // Apply frequency-based falloff (higher frequencies typically lower amplitude)\n        amplitude *= Math.max(0.1, 1 - (i / bars) * 0.7);\n\n        data.push(Math.max(0, Math.min(1, amplitude)));\n      }\n\n      return data;\n    };\n\n    // Simulated real-time audio activity\n    useEffect(() => {\n      if (!realTimeMode) return;\n\n      const interval = setInterval(() => {\n        setSimulatedParticipants((prev: any) =>\n          prev.map((participant: any) => {\n            if (!participant.isConnected) return participant;\n\n            const wasSpeaking = participant.isSpeaking;\n            const newIsSpeaking = Math.random() < 0.3;\n            const newAudioLevel = newIsSpeaking\n              ? Math.random() * 0.8 + 0.2\n              : Math.random() * 0.1;\n\n            // Sound notification when someone starts speaking\n            if (!wasSpeaking && newIsSpeaking && soundVisualization) {\n              play(\"notification\");\n            }\n\n            return {\n              ...participant,\n              isSpeaking: newIsSpeaking,\n              audioLevel: newAudioLevel,\n              lastActivity: newIsSpeaking\n                ? Date.now()\n                : participant.lastActivity,\n            };\n          })\n        );\n      }, 200);\n\n      return () => clearInterval(interval);\n    }, [realTimeMode, soundVisualization, play]);\n\n    // Keep refs in sync to avoid effect restarts while RAF loop runs\n    useEffect(() => {\n      participantsRef.current = simulatedParticipants;\n    }, [simulatedParticipants]);\n\n    useEffect(() => {\n      settingsRef.current = { maxBars, smoothing };\n    }, [maxBars, smoothing]);\n\n    // Update audio data for waveforms (single RAF loop gated by realTimeMode)\n    useEffect(() => {\n      if (!realTimeMode) return;\n\n      let mounted = true;\n      const updateAudioData = () => {\n        if (!mounted) return;\n        const { maxBars: bars, smoothing: smooth } = settingsRef.current;\n        const snapshot = participantsRef.current;\n\n        setAudioData((prev: any) => {\n          const updated: Record<string, number[]> = {};\n          snapshot.forEach((participant: any) => {\n            const prevData = prev[participant.id] || new Array(bars).fill(0);\n            if (participant.isSpeaking && participant.audioLevel > 0.1) {\n              const nextData = generateWaveformData(\n                participant.audioLevel,\n                bars\n              );\n              const smoothed = prevData.map(\n                (current: any, index: any) =>\n                  current * smooth + nextData[index] * (1 - smooth)\n              );\n              updated[participant.id] = smoothed;\n            } else {\n              updated[participant.id] = prevData.map((v: any) => v * 0.9);\n            }\n          });\n          return updated;\n        });\n\n        animationFrameRef.current = requestAnimationFrame(updateAudioData);\n      };\n\n      animationFrameRef.current = requestAnimationFrame(updateAudioData);\n      return () => {\n        mounted = false;\n        if (animationFrameRef.current)\n          cancelAnimationFrame(animationFrameRef.current);\n      };\n    }, [realTimeMode]);\n\n    // Track speaking history for voice activity\n    useEffect(() => {\n      if (!showVoiceActivity) return;\n\n      setSpeakingHistory((prev: any) => {\n        const newHistory = { ...prev };\n        const now = Date.now();\n\n        simulatedParticipants.forEach((participant: any) => {\n          if (!newHistory[participant.id]) {\n            newHistory[participant.id] = [];\n          }\n\n          const history = newHistory[participant.id];\n\n          if (participant.isSpeaking) {\n            history.push(now);\n          }\n\n          // Keep only last 30 seconds of history\n          newHistory[participant.id] = history.filter(\n            (timestamp: any) => now - timestamp < 30000\n          );\n        });\n\n        return newHistory;\n      });\n    }, [simulatedParticipants, showVoiceActivity]);\n\n    const getParticipantColor = (\n      participant: VoiceParticipant,\n      index: number\n    ) => {\n      switch (colorMode) {\n        case \"activity\":\n          if (!participant.isSpeaking) return activityColors.low;\n          if (participant.audioLevel < 0.3) return activityColors.medium;\n          if (participant.audioLevel < 0.6) return activityColors.high;\n          return activityColors.peak;\n        case \"rainbow\":\n          return rainbowColors[index % rainbowColors.length];\n        default:\n          return participant.color;\n      }\n    };\n\n    const VoiceActivityIndicator = ({\n      participant,\n    }: {\n      participant: VoiceParticipant;\n    }) => {\n      const history = speakingHistory[participant.id] || [];\n      const activityLevel = history.length / 10; // Normalize to 0-1 range\n\n      return (\n        <div className=\"glass-flex glass-items-center glass-space-x-1\">\n          <div className=\"glass-flex glass-space-x-0.5\">\n            {[0, 1, 2, 3, 4].map((level: any) => (\n              <div\n                key={level}\n                className=\"glass-w-1 glass-h-3 glass-radius-full\"\n                style={{\n                  background:\n                    activityLevel > level * 0.2\n                      ? \"rgba(74, 222, 128, 0.92)\"\n                      : \"rgba(255, 255, 255, 0.2)\",\n                  transition: \"all 300ms ease\",\n                }}\n              />\n            ))}\n          </div>\n          <span className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n            {history.length > 0 ? `${history.length}` : \"0\"}\n          </span>\n        </div>\n      );\n    };\n\n    const WaveformBars = ({\n      participant,\n      data,\n    }: {\n      participant: VoiceParticipant;\n      data: number[];\n    }) => (\n      <div className=\"glass-flex glass-items-end glass-space-x-1 glass-h-12\">\n        {data.map((amplitude, index) => (\n          <motion.div\n            key={index}\n            className=\"glass-radius-full\"\n            style={{\n              width: compactMode ? \"2px\" : \"3px\",\n              backgroundColor: getParticipantColor(\n                participant,\n                participants.indexOf(participant)\n              ),\n              opacity: participant.isSpeaking ? 0.8 : 0.3,\n            }}\n            animate={{\n              height: `${Math.max(2, amplitude * 48)}px`,\n              opacity: participant.isSpeaking ? 0.8 : 0.3,\n            }}\n            transition={\n              shouldAnimate\n                ? {\n                    duration: 0.1 * animationSpeed,\n                    ease: \"easeOut\",\n                  }\n                : { duration: 0 }\n            }\n          />\n        ))}\n      </div>\n    );\n\n    const WaveformWaves = ({\n      participant,\n      data,\n    }: {\n      participant: VoiceParticipant;\n      data: number[];\n    }) => (\n      <svg\n        width={compactMode ? 120 : 200}\n        height={48}\n        className=\"glass-overflow-visible\"\n      >\n        <path\n          d={`M 0 24 ${data\n            .map(\n              (amplitude, index) =>\n                `L ${(index / (data.length - 1)) * (compactMode ? 120 : 200)} ${24 - amplitude * 20}`\n            )\n            .join(\" \")} L ${compactMode ? 120 : 200} 24`}\n          fill=\"none\"\n          stroke={getParticipantColor(\n            participant,\n            participants.indexOf(participant)\n          )}\n          strokeWidth=\"2\"\n          opacity={participant.isSpeaking ? 0.8 : 0.3}\n        />\n      </svg>\n    );\n\n    const WaveformCircular = ({\n      participant,\n      data,\n    }: {\n      participant: VoiceParticipant;\n      data: number[];\n    }) => {\n      const radius = compactMode ? 20 : 30;\n      const centerX = radius + 5;\n      const centerY = radius + 5;\n\n      return (\n        <svg\n          width={(radius + 5) * 2}\n          height={(radius + 5) * 2}\n          className=\"glass-overflow-visible\"\n        >\n          {data.map((amplitude, index) => {\n            const angle = (index / data.length) * Math.PI * 2 - Math.PI / 2;\n            const innerRadius = radius * 0.6;\n            const outerRadius = innerRadius + amplitude * radius * 0.4;\n\n            const x1 = centerX + Math.cos(angle) * innerRadius;\n            const y1 = centerY + Math.sin(angle) * innerRadius;\n            const x2 = centerX + Math.cos(angle) * outerRadius;\n            const y2 = centerY + Math.sin(angle) * outerRadius;\n\n            return (\n              <line\n                key={index}\n                x1={x1}\n                y1={y1}\n                x2={x2}\n                y2={y2}\n                stroke={getParticipantColor(\n                  participant,\n                  participants.indexOf(participant)\n                )}\n                strokeWidth=\"2\"\n                opacity={participant.isSpeaking ? 0.8 : 0.3}\n              />\n            );\n          })}\n        </svg>\n      );\n    };\n\n    const WaveformSpectrum = ({\n      participant,\n      data,\n    }: {\n      participant: VoiceParticipant;\n      data: number[];\n    }) => (\n      <div className=\"glass-flex glass-items-end glass-justify-center glass-space-x-px glass-h-12 glass-w-32\">\n        {data.map((amplitude, index) => (\n          <motion.div\n            key={index}\n            className=\"glass-radius-full\"\n            style={{\n              width: `${100 / data.length}%`,\n              backgroundColor: getParticipantColor(\n                participant,\n                participants.indexOf(participant)\n              ),\n              opacity: participant.isSpeaking ? 0.8 : 0.3,\n            }}\n            animate={{\n              height: `${Math.max(1, amplitude * 48)}px`,\n            }}\n            transition={\n              shouldAnimate\n                ? {\n                    duration: 0.1 * animationSpeed,\n                  }\n                : { duration: 0 }\n            }\n          />\n        ))}\n      </div>\n    );\n\n    const renderWaveform = (participant: VoiceParticipant) => {\n      const data = audioData[participant.id] || new Array(maxBars).fill(0);\n\n      switch (waveformStyle) {\n        case \"waves\":\n          return <WaveformWaves participant={participant} data={data} />;\n        case \"circular\":\n          return <WaveformCircular participant={participant} data={data} />;\n        case \"spectrum\":\n          return <WaveformSpectrum participant={participant} data={data} />;\n        default:\n          return <WaveformBars participant={participant} data={data} />;\n      }\n    };\n\n    const ParticipantCard = ({\n      participant,\n      index,\n    }: {\n      participant: VoiceParticipant;\n      index: number;\n    }) => (\n      <motion.div\n        className=\"glass-flex glass-items-center glass-space-x-3 glass-p-3 glass-radius-lg glass-cursor-pointer glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n        style={{\n          background: createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background,\n          boxShadow: participant.isSpeaking\n            ? \"0 0 0 2px color-mix(in srgb, var(--glass-color-success, #22c55e) 55%, transparent)\"\n            : undefined,\n          transitionDuration: \"200ms\",\n        }}\n        onClick={() => onParticipantClick?.(participant.id)}\n        whileHover={{ scale: 1.02 }}\n        whileTap={{ scale: 0.98 }}\n      >\n        {showAvatars && (\n          <div className=\"glass-relative\">\n            <div\n              className={cn(\n                \"glass-radius-full glass-flex glass-items-center glass-justify-center glass-text-primary glass-font-semibold glass-overflow-hidden\",\n                compactMode ? \"glass-w-8 glass-h-8\" : \"glass-w-12 glass-h-12\"\n              )}\n              style={{\n                background: createGlassStyle({ blur: \"sm\", opacity: 0.8 })\n                  .background,\n              }}\n            >\n              {participant.avatar ? (\n                <img\n                  src={participant.avatar}\n                  alt={participant.name}\n                  className=\"glass-w-full glass-h-full glass-radius-full glass-object-cover\"\n                />\n              ) : (\n                participant.name.charAt(0).toUpperCase()\n              )}\n            </div>\n\n            {/* Connection status */}\n            {showConnectionStatus && (\n              <div\n                className={cn(\n                  \"glass-absolute glass-w-3 glass-h-3 glass-radius-full glass-border-2 glass-border-white\",\n                  participant.isConnected\n                    ? \"glass-surface-success\"\n                    : \"glass-surface-danger\"\n                )}\n                style={{ right: -4, bottom: -4 }}\n              />\n            )}\n\n            {/* Speaking indicator */}\n            {participant.isSpeaking && (\n              <motion.div\n                className=\"glass-absolute glass-top-1 glass-w-4 glass-h-4 glass-surface-success glass-radius-full\"\n                style={{ right: -4 }}\n                animate={prefersReducedMotion ? {} : { scale: [1, 1.2, 1] }}\n                transition={\n                  shouldAnimate\n                    ? {\n                        duration: 0.8,\n                        repeat: Infinity,\n                      }\n                    : { duration: 0 }\n                }\n              />\n            )}\n          </div>\n        )}\n\n        <div className=\"glass-flex-1 glass-min-w-0\">\n          {showNames && (\n            <div className=\"glass-flex glass-items-center glass-space-x-2\">\n              <p\n                className={cn(\n                  \"glass-font-medium glass-text-primary glass-truncate\",\n                  compactMode ? \"glass-text-sm\" : \"glass-text-base\"\n                )}\n              >\n                {participant.name}\n                {participant.id === currentUserId && \" (You)\"}\n              </p>\n\n              {showMuteStatus && participant.isMuted && (\n                <span className=\"glass-text-primary glass-text-xs\">\uD83D\uDD07</span>\n              )}\n            </div>\n          )}\n\n          {showVoiceActivity && !compactMode && (\n            <VoiceActivityIndicator participant={participant} />\n          )}\n        </div>\n\n        <div className=\"glass-flex glass-items-center glass-space-x-2\">\n          {renderWaveform(participant)}\n\n          {showMuteStatus && !compactMode && (\n            <button\n              onClick={(e) => {\n                e.stopPropagation();\n                onMuteToggle?.(participant.id);\n              }}\n              className={cn(\n                \"glass-p-1 glass-radius glass-text-sm glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\",\n                participant.isMuted\n                  ? \"glass-text-danger\"\n                  : \"glass-text-secondary\"\n              )}\n            >\n              {participant.isMuted ? \"\uD83D\uDD07\" : \"\uD83C\uDFA4\"}\n            </button>\n          )}\n        </div>\n      </motion.div>\n    );\n\n    const activeSpeakers = simulatedParticipants.filter(\n      (p: any) => p.isSpeaking\n    ).length;\n    const connectedParticipants = simulatedParticipants.filter(\n      (p: any) => p.isConnected\n    ).length;\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        intensity=\"subtle\"\n        className={cn(\"glass-p-4 glass-space-y-4\", className)}\n        {...props}\n      >\n        <div className=\"glass-flex glass-items-center glass-justify-between\">\n          <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary-glass-opacity-90\">\n            Voice Chat ({connectedParticipants})\n          </h3>\n          <div className=\"glass-flex glass-items-center glass-space-x-4 glass-text-sm glass-text-primary-glass-opacity-60\">\n            {activeSpeakers > 0 && (\n              <span className=\"glass-flex glass-items-center glass-space-x-1\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-success glass-radius-full glass-animate-pulse\" />\n                <span>{activeSpeakers} speaking</span>\n              </span>\n            )}\n            {realTimeMode && (\n              <span className=\"glass-flex glass-items-center glass-space-x-1\">\n                <div className=\"glass-w-2 glass-h-2 glass-surface-primary glass-radius-full glass-animate-pulse\" />\n                <span>Live</span>\n              </span>\n            )}\n          </div>\n        </div>\n\n        <div\n          className={cn(\n            \"glass-space-y-2\",\n            compactMode && \"glass-max-h-64 glass-overflow-y-auto\"\n          )}\n        >\n          <AnimatePresence>\n            {simulatedParticipants\n              .sort((a, b) => {\n                if (a.isSpeaking && !b.isSpeaking) return -1;\n                if (!a.isSpeaking && b.isSpeaking) return 1;\n                if (a.isConnected && !b.isConnected) return -1;\n                if (!a.isConnected && b.isConnected) return 1;\n                return a.name.localeCompare(b.name);\n              })\n              .map((participant, index) => (\n                <ParticipantCard\n                  key={participant.id}\n                  participant={participant}\n                  index={index}\n                />\n              ))}\n          </AnimatePresence>\n        </div>\n\n        {!compactMode && (\n          <div className=\"glass-pt-3 glass-border-t glass-border-white/10 glass-flex glass-justify-between glass-items-center glass-text-xs glass-text-primary-glass-opacity-50\">\n            <span>Waveform: {waveformStyle}</span>\n            <span>Sensitivity: {sensitivity}</span>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n", "\"use client\";\n/**\n * @demo DEMO / SHOWCASE COMPONENT \u2014 uses in-component mock data.\n *\n * VoiceGlassControl demonstrates a voice-command UI surface. Recognition results,\n * intents, and command matching are simulated in-component; it is NOT wired to a\n * real speech-recognition engine or NLU backend. Provide a real SpeechRecognition /\n * voice-intent integration before production use.\n */\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n  AlertCircle,\n  CheckCircle,\n  HelpCircle,\n  MessageCircle,\n  Mic,\n  MicOff,\n  Pause,\n  Settings,\n  SkipBack,\n  SkipForward,\n  Volume1,\n  X,\n} from \"@/icons\";\nimport { useCallback, useEffect, useState } from \"react\";\n\ninterface VoiceGlassControlProps {\n  className?: string;\n  position?: \"bottom-left\" | \"bottom-right\" | \"top-left\" | \"top-right\";\n  autoEnable?: boolean;\n  showTranscript?: boolean;\n  onVoiceCommand?: (command: string, result: VoiceCommandResult) => void;\n  onToggleControls?: (show: boolean) => void;\n  wakeWord?: string;\n  enableFeedback?: boolean;\n  showHelp?: boolean;\n  maxTranscriptLength?: number;\n  \"data-testid\"?: string;\n}\n\ninterface VoiceCommandResult {\n  type: string;\n  action: string;\n  feedback?: string;\n  originalText?: string;\n  parameters?: Record<string, unknown>;\n}\n\ninterface VoiceCommand {\n  id: string;\n  command: string;\n  description: string;\n  category: \"navigation\" | \"media\" | \"ui\" | \"system\";\n  example?: string;\n}\n\n// Mock voice control hook - in real implementation this would use actual Web Speech API\nconst useVoiceGlassControl = () => {\n  const [isEnabled, setIsEnabled] = useState(false);\n  const [isListening, setIsListening] = useState(false);\n  const [isSupported, setIsSupported] = useState(false);\n  const [transcript, setTranscript] = useState(\"\");\n  const [interimTranscript, setInterimTranscript] = useState(\"\");\n  const [lastCommand, setLastCommand] = useState<VoiceCommandResult | null>(\n    null\n  );\n  const [error, setError] = useState<string | null>(null);\n  const [wakeWordDetected, setWakeWordDetected] = useState(false);\n  const [availableVoices, setAvailableVoices] = useState<\n    SpeechSynthesisVoice[]\n  >([]);\n\n  // Mock implementation\n  useEffect(() => {\n    setIsSupported(\n      typeof window !== \"undefined\" &&\n        (\"webkitSpeechRecognition\" in window ||\n          \"SpeechRecognition\" in window) &&\n        \"speechSynthesis\" in window\n    );\n\n    if (typeof window !== \"undefined\" && \"speechSynthesis\" in window) {\n      const loadVoices = () => {\n        const voices = speechSynthesis.getVoices();\n        setAvailableVoices(voices);\n      };\n\n      loadVoices();\n      speechSynthesis.onvoiceschanged = loadVoices;\n    }\n  }, []);\n\n  const enable = useCallback(() => {\n    if (!isSupported) {\n      setError(\"Voice control not supported in this browser\");\n      return;\n    }\n    setIsEnabled(true);\n    setError(null);\n  }, [isSupported]);\n\n  const disable = useCallback(() => {\n    setIsEnabled(false);\n    setIsListening(false);\n    setWakeWordDetected(false);\n  }, []);\n\n  const toggle = useCallback(() => {\n    if (isEnabled) {\n      disable();\n    } else {\n      enable();\n    }\n  }, [isEnabled, enable, disable]);\n\n  const speak = useCallback(\n    (text: string, voice?: SpeechSynthesisVoice) => {\n      if (!isSupported) return;\n\n      const utterance = new SpeechSynthesisUtterance(text);\n      if (voice) {\n        utterance.voice = voice;\n      }\n\n      speechSynthesis.speak(utterance);\n    },\n    [isSupported]\n  );\n\n  const clearError = useCallback(() => {\n    setError(null);\n  }, []);\n\n  const getAvailableVoices = useCallback(() => {\n    return availableVoices;\n  }, [availableVoices]);\n\n  return {\n    state: {\n      isEnabled,\n      isListening,\n      isSupported,\n      transcript,\n      interimTranscript,\n      lastCommand,\n      error,\n      wakeWordDetected,\n      lastFeedback: lastCommand?.feedback,\n    },\n    actions: {\n      enable,\n      disable,\n      toggle,\n      speak,\n      clearError,\n      getAvailableVoices,\n    },\n  };\n};\n\n// Mock voice commands helper\nexport const GlassVoiceCommands = (): string[] => {\n  const commands = [\n    `\"Hey Genesis\" - wake word to activate voice control`,\n    `\"Show navigation\" - open main navigation menu`,\n    `\"Hide navigation\" - close main navigation menu`,\n    `\"Go to home\" - navigate to home page`,\n    `\"Go to settings\" - navigate to settings page`,\n    `\"Scroll up\" - scroll page up`,\n    `\"Scroll down\" - scroll page down`,\n    `\"Play music\" - start playing media`,\n    `\"Pause music\" - pause current media`,\n    `\"Next track\" - skip to next track`,\n    `\"Previous track\" - go to previous track`,\n    `\"Increase volume\" - turn up volume`,\n    `\"Decrease volume\" - turn down volume`,\n    `\"Show help\" - display voice commands help`,\n    `\"Hide help\" - close help overlay`,\n    `\"Toggle theme\" - switch between light and dark mode`,\n    `\"Show notifications\" - open notifications panel`,\n    `\"Hide notifications\" - close notifications panel`,\n    `\"Search for [term]\" - search for specific content`,\n    `\"Open [app name]\" - launch specific application`,\n    `\"Close [window]\" - close specific window or panel`,\n  ];\n\n  return commands;\n};\n\nexport default function VoiceGlassControl({\n  className,\n  position = \"top-left\",\n  autoEnable = false,\n  showTranscript = true,\n  onVoiceCommand,\n  onToggleControls,\n  wakeWord = \"Hey Genesis\",\n  enableFeedback = true,\n  showHelp = true,\n  maxTranscriptLength = 100,\n  \"data-testid\": dataTestId,\n}: VoiceGlassControlProps) {\n  const prefersReducedMotion = useReducedMotion();\n  const { state, actions } = useVoiceGlassControl();\n  const [showSettings, setShowSettings] = useState(false);\n  const [showHelpPanel, setShowHelpPanel] = useState(false);\n  const [selectedVoice, setSelectedVoice] =\n    useState<SpeechSynthesisVoice | null>(null);\n  const [feedbackEnabled, setFeedbackEnabled] = useState(enableFeedback);\n  const [currentVolume, setCurrentVolume] = useState(75);\n  const [isPlaying, setIsPlaying] = useState(false);\n\n  // Auto-enable on mount if requested\n  useEffect(() => {\n    if (autoEnable && state.isSupported && !state.isEnabled) {\n      actions.enable();\n    }\n  }, [autoEnable, state.isSupported, state.isEnabled, actions]);\n\n  // Load available voices when speech synthesis is ready\n  useEffect(() => {\n    const loadVoices = () => {\n      const voices = actions.getAvailableVoices();\n      if (voices.length > 0 && !selectedVoice) {\n        // Prefer English voices\n        const englishVoice =\n          voices.find(\n            (voice) => voice.lang.startsWith(\"en\") && voice.localService\n          ) ||\n          voices.find((voice) => voice.lang.startsWith(\"en\")) ||\n          voices[0];\n        setSelectedVoice(englishVoice);\n      }\n    };\n\n    loadVoices();\n\n    if (typeof window !== \"undefined\" && window.speechSynthesis) {\n      window.speechSynthesis.onvoiceschanged = loadVoices;\n    }\n\n    return () => {\n      if (typeof window !== \"undefined\" && window.speechSynthesis) {\n        window.speechSynthesis.onvoiceschanged = null;\n      }\n    };\n  }, [actions, selectedVoice]);\n\n  // Handle voice command callback\n  useEffect(() => {\n    if (state.lastCommand && onVoiceCommand) {\n      onVoiceCommand(\n        state.lastCommand.originalText ?? state.lastCommand.action,\n        state.lastCommand\n      );\n    }\n  }, [state.lastCommand, onVoiceCommand]);\n\n  // Handle controls visibility\n  useEffect(() => {\n    if (state.lastCommand?.type === \"TOGGLE_CONTROLS\" && onToggleControls) {\n      onToggleControls(state.lastCommand.parameters?.show === true);\n    }\n  }, [state.lastCommand, onToggleControls]);\n\n  // Mock voice command processing\n  const processVoiceCommand = useCallback(\n    (transcript: string) => {\n      const command = transcript.toLowerCase().trim();\n\n      // Navigation commands\n      if (\n        command.includes(\"show navigation\") ||\n        command.includes(\"open menu\")\n      ) {\n        setLastCommand({\n          type: \"NAVIGATION\",\n          action: \"show\",\n          feedback: \"Navigation menu opened\",\n          parameters: { target: \"navigation\" },\n        });\n      } else if (\n        command.includes(\"hide navigation\") ||\n        command.includes(\"close menu\")\n      ) {\n        setLastCommand({\n          type: \"NAVIGATION\",\n          action: \"hide\",\n          feedback: \"Navigation menu closed\",\n          parameters: { target: \"navigation\" },\n        });\n      } else if (command.includes(\"go to home\")) {\n        setLastCommand({\n          type: \"NAVIGATION\",\n          action: \"navigate\",\n          feedback: \"Navigating to home\",\n          parameters: { target: \"home\" },\n        });\n      } else if (command.includes(\"go to settings\")) {\n        setLastCommand({\n          type: \"NAVIGATION\",\n          action: \"navigate\",\n          feedback: \"Opening settings\",\n          parameters: { target: \"settings\" },\n        });\n      }\n\n      // Media commands\n      else if (command.includes(\"play music\") || command.includes(\"play\")) {\n        setIsPlaying(true);\n        setLastCommand({\n          type: \"MEDIA\",\n          action: \"play\",\n          feedback: \"Playing music\",\n          parameters: { target: \"music\" },\n        });\n      } else if (command.includes(\"pause music\") || command.includes(\"pause\")) {\n        setIsPlaying(false);\n        setLastCommand({\n          type: \"MEDIA\",\n          action: \"pause\",\n          feedback: \"Music paused\",\n          parameters: { target: \"music\" },\n        });\n      } else if (command.includes(\"next track\") || command.includes(\"next\")) {\n        setLastCommand({\n          type: \"MEDIA\",\n          action: \"next\",\n          feedback: \"Next track\",\n          parameters: { target: \"music\" },\n        });\n      } else if (\n        command.includes(\"previous track\") ||\n        command.includes(\"previous\")\n      ) {\n        setLastCommand({\n          type: \"MEDIA\",\n          action: \"previous\",\n          feedback: \"Previous track\",\n          parameters: { target: \"music\" },\n        });\n      }\n\n      // Volume commands\n      else if (\n        command.includes(\"increase volume\") ||\n        command.includes(\"volume up\")\n      ) {\n        const newVolume = Math.min(100, currentVolume + 10);\n        setCurrentVolume(newVolume);\n        setLastCommand({\n          type: \"VOLUME\",\n          action: \"increase\",\n          feedback: `Volume set to ${newVolume}%`,\n          parameters: { volume: newVolume },\n        });\n      } else if (\n        command.includes(\"decrease volume\") ||\n        command.includes(\"volume down\")\n      ) {\n        const newVolume = Math.max(0, currentVolume - 10);\n        setCurrentVolume(newVolume);\n        setLastCommand({\n          type: \"VOLUME\",\n          action: \"decrease\",\n          feedback: `Volume set to ${newVolume}%`,\n          parameters: { volume: newVolume },\n        });\n      }\n\n      // UI commands\n      else if (command.includes(\"toggle theme\")) {\n        setLastCommand({\n          type: \"UI\",\n          action: \"toggle_theme\",\n          feedback: \"Theme toggled\",\n          parameters: { target: \"theme\" },\n        });\n      } else if (command.includes(\"show help\")) {\n        setShowHelpPanel(true);\n        setLastCommand({\n          type: \"UI\",\n          action: \"show_help\",\n          feedback: \"Help panel opened\",\n          parameters: { target: \"help\" },\n        });\n      } else if (command.includes(\"hide help\")) {\n        setShowHelpPanel(false);\n        setLastCommand({\n          type: \"UI\",\n          action: \"hide_help\",\n          feedback: \"Help panel closed\",\n          parameters: { target: \"help\" },\n        });\n      } else if (command.includes(\"show notifications\")) {\n        setLastCommand({\n          type: \"UI\",\n          action: \"show_notifications\",\n          feedback: \"Notifications panel opened\",\n          parameters: { target: \"notifications\" },\n        });\n      } else if (command.includes(\"hide notifications\")) {\n        setLastCommand({\n          type: \"UI\",\n          action: \"hide_notifications\",\n          feedback: \"Notifications panel closed\",\n          parameters: { target: \"notifications\" },\n        });\n      }\n\n      // Help command\n      else if (command.includes(\"what can i say\") || command.includes(\"help\")) {\n        setShowHelpPanel(true);\n        setLastCommand({\n          type: \"HELP\",\n          action: \"show_commands\",\n          feedback: \"Showing available voice commands\",\n          parameters: { target: \"commands\" },\n        });\n      }\n\n      // Unknown command\n      else {\n        setLastCommand({\n          type: \"UNKNOWN\",\n          action: \"unknown\",\n          feedback: `I didn't understand: \"${transcript}\"`,\n          parameters: { originalText: transcript },\n        });\n      }\n    },\n    [currentVolume]\n  );\n\n  // Mock function to set last command (would be handled by the hook in real implementation)\n  const setLastCommand = (command: VoiceCommandResult) => {\n    // In real implementation, this would update the hook's state\n    if (feedbackEnabled && command.feedback) {\n      actions.speak(command.feedback, selectedVoice || undefined);\n    }\n  };\n\n  const positionClasses = {\n    \"bottom-left\": \"bottom-4 left-4\",\n    \"bottom-right\": \"bottom-4 right-4\",\n    \"top-left\": \"top-4 left-4\",\n    \"top-right\": \"top-4 right-4\",\n  };\n\n  const getStateIcon = () => {\n    if (!state.isSupported)\n      return <AlertCircle className=\"glass-h-5 glass-w-5 glass-text-primary\" />;\n    if (state.isListening)\n      return <Mic className=\"glass-h-5 glass-w-5 glass-text-primary\" />;\n    if (state.wakeWordDetected)\n      return (\n        <Mic className=\"glass-h-5 glass-w-5 glass-text-primary glass-animate-pulse\" />\n      );\n    if (state.error)\n      return <AlertCircle className=\"glass-h-5 glass-w-5 glass-text-primary\" />;\n    if (state.isEnabled)\n      return <MicOff className=\"glass-h-5 glass-w-5 glass-text-secondary\" />;\n    return <MicOff className=\"glass-h-5 glass-w-5 glass-text-secondary\" />;\n  };\n\n  const getStateColor = () => {\n    if (!state.isSupported) return \"border-red-400 bg-red-400/10\";\n    if (state.isListening) return \"border-blue-400 bg-blue-400/10\";\n    if (state.wakeWordDetected) return \"border-green-400 bg-green-400/10\";\n    if (state.error) return \"border-red-400 bg-red-400/10\";\n    return \"border-gray-400 bg-gray-400/10\";\n  };\n\n  const getStateDescription = () => {\n    if (!state.isSupported) return \"Voice control not supported\";\n    if (state.isListening) return `Listening for \"${wakeWord}\"...`;\n    if (state.wakeWordDetected)\n      return \"Wake word detected! Speak your command...\";\n    if (state.error) return state.error;\n    if (state.isEnabled) return \"Voice control active - say wake word to begin\";\n    return \"Voice control inactive\";\n  };\n\n  const handleTestCommand = () => {\n    const testCommands = [\n      \"show navigation\",\n      \"play music\",\n      \"increase volume\",\n      \"toggle theme\",\n      \"show help\",\n    ];\n    const randomCommand =\n      testCommands[Math.floor(Math.random() * testCommands.length)];\n    processVoiceCommand(randomCommand);\n  };\n\n  if (!state.isSupported) {\n    return (\n      <div\n        className={cn(\"fixed z-50\", positionClasses[position], className)}\n        data-testid={dataTestId || \"voiceglasscontrol\"}\n      >\n        <motion.div\n          className=\"glass-backdrop-blur-lg glass-border glass-border-red/20 glass-surface-red/10 glass-p-3 glass-radius-lg glass-contrast-guard\"\n          whileHover={{ scale: 1.05 }}\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2 glass-text-primary\">\n            <AlertCircle className=\"glass-h-4 glass-w-4\" />\n            <span className=\"glass-text-sm\">Voice control not supported</span>\n          </div>\n        </motion.div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={cn(\"fixed z-50\", positionClasses[position], className)}\n      data-testid={dataTestId || \"voiceglasscontrol\"}\n    >\n      <div className=\"glass-flex glass-flex-col glass-gap-2\">\n        {/* Main Control */}\n        <motion.div\n          className={cn(\n            \"glass-backdrop-blur-lg border p-3 rounded-lg transition-all duration-300 glass-contrast-guard\",\n            getStateColor()\n          )}\n          whileHover={{ scale: 1.05 }}\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-3\">\n            {/* State Icon */}\n            <button\n              onClick={actions.toggle}\n              className=\"glass-flex glass-items-center glass-justify-center glass-w-10 glass-h-10 glass-radius-full glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n            >\n              {getStateIcon()}\n            </button>\n\n            {/* State Info */}\n            <div className=\"glass-flex-1 glass-min-w-0\">\n              <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                Voice Control\n              </div>\n              <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-truncate\">\n                {getStateDescription()}\n              </div>\n            </div>\n\n            {/* Action Buttons */}\n            <div className=\"glass-flex glass-items-center glass-gap-1\">\n              {showHelp && (\n                <button\n                  onClick={() => setShowHelpPanel(true)}\n                  className=\"glass-p-1.5 hover:glass-surface-subtle/10 glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  title=\"Help\"\n                >\n                  <HelpCircle className=\"glass-h-4 glass-w-4 glass-text-primary-opacity-70\" />\n                </button>\n              )}\n              <button\n                onClick={() => setShowSettings(true)}\n                className=\"glass-p-1.5 hover:glass-surface-subtle/10 glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Settings\"\n              >\n                <Settings className=\"glass-h-4 glass-w-4 glass-text-primary-opacity-70\" />\n              </button>\n            </div>\n          </div>\n\n          {/* Wake Word Indicator */}\n          {state.wakeWordDetected && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: -10 }}\n              className=\"glass-mt-2 glass-p-2 glass-surface-green/20 glass-radius glass-text-xs glass-text-primary glass-text-center\"\n            >\n              \uD83C\uDFA4 Wake word detected - speak your command now!\n            </motion.div>\n          )}\n\n          {/* Error Display */}\n          {state.error && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n              className=\"glass-mt-2 glass-p-2 glass-surface-red/20 glass-radius glass-text-xs glass-text-primary\"\n            >\n              <div className=\"glass-flex glass-items-center glass-justify-between\">\n                <span>{state.error}</span>\n                <button\n                  onClick={actions.clearError}\n                  className=\"glass-p-0.5 hover:glass-surface-red/20 glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  <X className=\"glass-h-3 glass-w-3\" />\n                </button>\n              </div>\n            </motion.div>\n          )}\n\n          {/* Transcript Display */}\n          {showTranscript && (state.transcript || state.interimTranscript) && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n              className=\"glass-mt-2 glass-p-2 glass-surface-subtle/10 glass-radius glass-text-xs\"\n            >\n              <div className=\"glass-text-primary glass-font-medium\">\n                {state.transcript}\n                <span className=\"glass-text-primary-glass-opacity-50 glass-italic\">\n                  {state.interimTranscript}\n                </span>\n              </div>\n            </motion.div>\n          )}\n\n          {/* Last Command Feedback */}\n          {state.lastFeedback && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n              className=\"glass-mt-2 glass-p-2 glass-surface-blue/20 glass-radius glass-text-xs glass-text-primary\"\n            >\n              <div className=\"glass-flex glass-items-start glass-gap-2\">\n                <CheckCircle className=\"glass-h-3 glass-w-3 glass-mt-0-5 glass-flex-shrink-0\" />\n                <span>{state.lastFeedback}</span>\n              </div>\n            </motion.div>\n          )}\n\n          {/* Media Controls (when music is playing) */}\n          {isPlaying && (\n            <motion.div\n              initial={{ opacity: 0, y: -10 }}\n              animate={prefersReducedMotion ? {} : { opacity: 1, y: 0 }}\n              className=\"glass-mt-2 glass-flex glass-items-center glass-gap-2 glass-p-2 glass-surface-subtle/10 glass-radius\"\n            >\n              <button\n                onClick={() => setIsPlaying(false)}\n                className=\"glass-p-1 hover:glass-surface-subtle/20 glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Pause\"\n              >\n                <Pause className=\"glass-h-3 glass-w-3 glass-text-primary\" />\n              </button>\n              <button\n                onClick={() => processVoiceCommand(\"previous track\")}\n                className=\"glass-p-1 hover:glass-surface-subtle/20 glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Previous\"\n              >\n                <SkipBack className=\"glass-h-3 glass-w-3 glass-text-primary\" />\n              </button>\n              <button\n                onClick={() => processVoiceCommand(\"next track\")}\n                className=\"glass-p-1 hover:glass-surface-subtle/20 glass-radius glass-focus glass-touch-target glass-contrast-guard\"\n                title=\"Next\"\n              >\n                <SkipForward className=\"glass-h-3 glass-w-3 glass-text-primary\" />\n              </button>\n              <div className=\"glass-flex-1 glass-flex glass-items-center glass-gap-2\">\n                <Volume1 className=\"glass-h-3 glass-w-3 glass-text-primary-opacity-70\" />\n                <div className=\"glass-flex-1 glass-surface-subtle/20 glass-radius-full glass-h-1\">\n                  <div\n                    className=\"glass-surface-blue glass-h-1 glass-radius-full glass-transition-all\"\n                    style={{ width: `${currentVolume}%` }}\n                  />\n                </div>\n                <span className=\"glass-text-xs glass-text-primary-opacity-70\">\n                  {currentVolume}%\n                </span>\n              </div>\n            </motion.div>\n          )}\n        </motion.div>\n\n        {/* Settings Modal */}\n        <AnimatePresence>\n          {showSettings && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.95, y: 20 }}\n              animate={\n                prefersReducedMotion ? {} : { opacity: 1, scale: 1, y: 0 }\n              }\n              exit={{ opacity: 0, scale: 0.95, y: 20 }}\n            >\n              <div className=\"glass-backdrop-blur-lg glass-border glass-border-white/20 glass-surface-subtle/10 glass-p-4 glass-radius-lg glass-w-80 glass-contrast-guard\">\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3\">\n                  <h3 className=\"glass-font-medium glass-text-primary\">\n                    Voice Settings\n                  </h3>\n                  <button\n                    onClick={() => setShowSettings(false)}\n                    className=\"glass-p-1 hover:glass-surface-subtle/10 glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    <X className=\"glass-h-4 glass-w-4 glass-text-primary-opacity-70\" />\n                  </button>\n                </div>\n\n                <div className=\"glass-space-y-4\">\n                  {/* Wake Word */}\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\">\n                      Wake Word\n                    </label>\n                    <input\n                      type=\"text\"\n                      value={wakeWord}\n                      readOnly\n                      className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius glass-text-primary glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n                    />\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-1\">\n                      Say this to activate voice control\n                    </div>\n                  </div>\n\n                  {/* Voice Selection */}\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\">\n                      Voice\n                    </label>\n                    <select\n                      value={selectedVoice?.name || \"\"}\n                      onChange={(e) => {\n                        const voice = actions\n                          .getAvailableVoices()\n                          .find((v) => v.name === e.target.value);\n                        setSelectedVoice(voice || null);\n                      }}\n                      className=\"glass-w-full glass-p-2 glass-surface-subtle/10 glass-border glass-border-white/20 glass-radius glass-text-primary glass-text-sm glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      {actions.getAvailableVoices().map((voice: any) => (\n                        <option\n                          key={voice.name}\n                          value={voice.name}\n                          className=\"glass-surface-primary\"\n                        >\n                          {voice.name} ({voice.lang})\n                        </option>\n                      ))}\n                    </select>\n                  </div>\n\n                  {/* Voice Feedback Toggle */}\n                  <div className=\"glass-flex glass-items-center glass-justify-between\">\n                    <div>\n                      <div className=\"glass-text-sm glass-font-medium glass-text-primary\">\n                        Voice Feedback\n                      </div>\n                      <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                        Speak command confirmations\n                      </div>\n                    </div>\n                    <button\n                      onClick={() => setFeedbackEnabled(!feedbackEnabled)}\n                      className={cn(\n                        \"w-10 h-6 rounded-full transition-colors relative glass-focus glass-touch-target glass-contrast-guard\",\n                        feedbackEnabled ? \"bg-blue-500\" : \"bg-white/20\"\n                      )}\n                    >\n                      <div\n                        className={`absolute top-0.5 w-5 h-5 bg-white rounded-full transition-transform ${\n                          feedbackEnabled\n                            ? \"transform translate-x-4\"\n                            : \"translate-x-0.5\"\n                        }`}\n                      />\n                    </button>\n                  </div>\n\n                  {/* Test Commands */}\n                  <div>\n                    <label className=\"glass-block glass-text-sm glass-font-medium glass-text-primary glass-mb-2\">\n                      Test Commands\n                    </label>\n                    <button\n                      onClick={handleTestCommand}\n                      className=\"glass-w-full glass-p-2 glass-surface-blue/20 hover:glass-surface-blue/30 glass-border glass-border-blue/30 glass-radius glass-text-primary glass-text-sm glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      Try Random Command\n                    </button>\n                    <button\n                      onClick={() =>\n                        actions.speak(\n                          \"Voice control is working correctly\",\n                          selectedVoice || undefined\n                        )\n                      }\n                      className=\"glass-w-full glass-p-2 glass-surface-green/20 hover:glass-surface-green/30 glass-border glass-border-green/30 glass-radius glass-text-primary glass-text-sm glass-transition-colors glass-mt-2 glass-focus glass-touch-target glass-contrast-guard\"\n                    >\n                      Test Voice Output\n                    </button>\n                  </div>\n\n                  {/* Status Info */}\n                  <div className=\"glass-pt-3 glass-border-t glass-border-white/10 glass-space-y-1 glass-text-xs glass-text-primary-glass-opacity-60\">\n                    <div>\n                      Status: {state.isEnabled ? \"Enabled\" : \"Disabled\"}\n                    </div>\n                    <div>\n                      Listening: {state.isListening ? \"Active\" : \"Inactive\"}\n                    </div>\n                    <div>\n                      Available voices: {actions.getAvailableVoices().length}\n                    </div>\n                    <div>Volume: {currentVolume}%</div>\n                  </div>\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Help Modal */}\n        <AnimatePresence>\n          {showHelpPanel && (\n            <motion.div\n              initial={{ opacity: 0, scale: 0.95, y: 20 }}\n              animate={\n                prefersReducedMotion ? {} : { opacity: 1, scale: 1, y: 0 }\n              }\n              exit={{ opacity: 0, scale: 0.95, y: 20 }}\n            >\n              <div className=\"glass-backdrop-blur-lg glass-border glass-border-white/20 glass-surface-subtle/10 glass-p-4 glass-radius-lg glass-w-96 glass-max-h-80 glass-overflow-y-auto glass-contrast-guard\">\n                <div className=\"glass-flex glass-items-center glass-justify-between glass-mb-3\">\n                  <h3 className=\"glass-font-medium glass-text-primary\">\n                    Voice Commands\n                  </h3>\n                  <button\n                    onClick={() => setShowHelpPanel(false)}\n                    className=\"glass-p-1 hover:glass-surface-subtle/10 glass-radius glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    <X className=\"glass-h-4 glass-w-4 glass-text-primary-opacity-70\" />\n                  </button>\n                </div>\n\n                <div className=\"glass-space-y-3\">\n                  <div className=\"glass-text-sm glass-text-primary-glass-opacity-80\">\n                    Start commands with{\" \"}\n                    <span className=\"glass-font-mono glass-surface-subtle/20 glass-px-1 glass-radius\">\n                      \"{wakeWord}\"\n                    </span>\n                    :\n                  </div>\n\n                  <div className=\"glass-space-y-2\">\n                    {GlassVoiceCommands()\n                      .slice(0, 10)\n                      .map((command, index) => (\n                        <div\n                          key={index}\n                          className=\"glass-p-2 glass-surface-subtle/5 glass-radius glass-text-sm\"\n                        >\n                          <div className=\"glass-text-primary glass-font-mono\">\n                            \"{command}\"\n                          </div>\n                        </div>\n                      ))}\n                  </div>\n\n                  <div className=\"glass-pt-3 glass-border-t glass-border-white/10\">\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-60\">\n                      <div className=\"glass-flex glass-items-center glass-gap-2 glass-mb-1\">\n                        <MessageCircle className=\"glass-h-3 glass-w-3\" />\n                        <span>Tips:</span>\n                      </div>\n                      <ul className=\"glass-list-disc glass-list-inside glass-space-y-1 glass-ml-5\">\n                        <li>Speak clearly and at normal volume</li>\n                        <li>Wait for the wake word confirmation</li>\n                        <li>Use natural language variations</li>\n                        <li>Check your microphone permissions</li>\n                      </ul>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n", "import React, {\n  createContext,\n  useCallback,\n  useContext,\n  useMemo,\n  useReducer,\n} from \"react\";\n\nimport type {\n  ConsciousnessConfig,\n  ConsciousnessEventHandlers,\n} from \"@/types/consciousness\";\nimport { DEFAULT_CONSCIOUSNESS_CONFIG } from \"@/types/consciousness\";\n\ntype ConsciousnessFeatureKey = keyof ConsciousnessConfig[\"features\"];\n\nexport interface ConsciousnessStreamEvent {\n  id: string;\n  feature: ConsciousnessFeatureKey | string;\n  timestamp: number;\n  payload?: Record<string, unknown>;\n  confidence?: number;\n  status?: \"info\" | \"success\" | \"warning\" | \"error\";\n}\n\ninterface ConsciousnessStreamState {\n  config: ConsciousnessConfig;\n  handlers: ConsciousnessEventHandlers;\n  events: ConsciousnessStreamEvent[];\n}\n\ntype ConsciousnessStreamAction =\n  | { type: \"updateConfig\"; payload: Partial<ConsciousnessConfig> }\n  | { type: \"updateFeature\"; feature: ConsciousnessFeatureKey; value: boolean }\n  | { type: \"logEvent\"; event: ConsciousnessStreamEvent }\n  | { type: \"clearEvents\" }\n  | { type: \"mergeHandlers\"; handlers: Partial<ConsciousnessEventHandlers> };\n\nconst mergeConfigs = (\n  base: ConsciousnessConfig,\n  update: Partial<ConsciousnessConfig>\n): ConsciousnessConfig => ({\n  ...base,\n  ...update,\n  features: {\n    ...base.features,\n    ...update.features,\n  },\n  performance: {\n    ...base.performance,\n    ...update.performance,\n  },\n  privacy: {\n    ...base.privacy,\n    ...update.privacy,\n  },\n  accessibility: {\n    ...base.accessibility,\n    ...update.accessibility,\n  },\n});\n\nconst streamReducer = (\n  state: ConsciousnessStreamState,\n  action: ConsciousnessStreamAction\n): ConsciousnessStreamState => {\n  switch (action.type) {\n    case \"updateConfig\":\n      return {\n        ...state,\n        config: mergeConfigs(state.config, action.payload),\n      };\n    case \"updateFeature\":\n      return {\n        ...state,\n        config: {\n          ...state.config,\n          features: {\n            ...state.config.features,\n            [action.feature]: action.value,\n          },\n        },\n      };\n    case \"logEvent\":\n      return {\n        ...state,\n        events: [...state.events, action.event].slice(-200),\n      };\n    case \"clearEvents\":\n      return {\n        ...state,\n        events: [],\n      };\n    case \"mergeHandlers\":\n      return {\n        ...state,\n        handlers: { ...state.handlers, ...action.handlers },\n      };\n    default:\n      return state;\n  }\n};\n\nconst createEventId = () =>\n  `cse-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\nexport interface ConsciousnessStreamContextValue {\n  config: ConsciousnessConfig;\n  handlers: ConsciousnessEventHandlers;\n  events: ConsciousnessStreamEvent[];\n  updateConfig: (config: Partial<ConsciousnessConfig>) => void;\n  updateFeature: (feature: ConsciousnessFeatureKey, enabled: boolean) => void;\n  logEvent: (\n    event: Omit<ConsciousnessStreamEvent, \"id\" | \"timestamp\"> & {\n      id?: string;\n      timestamp?: number;\n    }\n  ) => ConsciousnessStreamEvent;\n  clearEvents: () => void;\n  registerHandlers: (handlers: Partial<ConsciousnessEventHandlers>) => void;\n}\n\nconst ConsciousnessStreamContext =\n  createContext<ConsciousnessStreamContextValue | null>(null);\n\nconst defaultConsciousnessStreamContext: ConsciousnessStreamContextValue = {\n  config: DEFAULT_CONSCIOUSNESS_CONFIG,\n  handlers: {},\n  events: [],\n  updateConfig: () => {},\n  updateFeature: () => {},\n  logEvent: (event) => ({\n    id: event.id ?? createEventId(),\n    timestamp: event.timestamp ?? Date.now(),\n    feature: event.feature,\n    payload: event.payload,\n    confidence: event.confidence,\n    status: event.status,\n  }),\n  clearEvents: () => {},\n  registerHandlers: () => {},\n};\n\nexport interface ConsciousnessStreamProviderProps {\n  children: React.ReactNode;\n  config?: Partial<ConsciousnessConfig>;\n  handlers?: Partial<ConsciousnessEventHandlers>;\n  initialEvents?: ConsciousnessStreamEvent[];\n}\n\nexport function ConsciousnessStreamProvider({\n  children,\n  config,\n  handlers,\n  initialEvents = [],\n}: ConsciousnessStreamProviderProps) {\n  const [state, dispatch] = useReducer(streamReducer, {\n    config: mergeConfigs(DEFAULT_CONSCIOUSNESS_CONFIG, config ?? {}),\n    handlers: (handlers ?? {}) as ConsciousnessEventHandlers,\n    events: initialEvents.slice(-200),\n  });\n\n  const updateConfig = useCallback((partial: Partial<ConsciousnessConfig>) => {\n    dispatch({ type: \"updateConfig\", payload: partial });\n  }, []);\n\n  const updateFeature = useCallback(\n    (feature: ConsciousnessFeatureKey, enabled: boolean) => {\n      dispatch({ type: \"updateFeature\", feature, value: enabled });\n    },\n    []\n  );\n\n  const logEvent: ConsciousnessStreamContextValue[\"logEvent\"] = useCallback(\n    (eventInput) => {\n      const event: ConsciousnessStreamEvent = {\n        id: eventInput.id ?? createEventId(),\n        timestamp: eventInput.timestamp ?? Date.now(),\n        feature: eventInput.feature,\n        payload: eventInput.payload,\n        confidence: eventInput.confidence,\n        status: eventInput.status,\n      };\n\n      dispatch({ type: \"logEvent\", event });\n      return event;\n    },\n    []\n  );\n\n  const clearEvents = useCallback(() => {\n    dispatch({ type: \"clearEvents\" });\n  }, []);\n\n  const registerHandlers = useCallback(\n    (partial: Partial<ConsciousnessEventHandlers>) => {\n      dispatch({ type: \"mergeHandlers\", handlers: partial });\n    },\n    []\n  );\n\n  const value = useMemo<ConsciousnessStreamContextValue>(\n    () => ({\n      config: state.config,\n      handlers: state.handlers,\n      events: state.events,\n      updateConfig,\n      updateFeature,\n      logEvent,\n      clearEvents,\n      registerHandlers,\n    }),\n    [\n      state.config,\n      state.handlers,\n      state.events,\n      updateConfig,\n      updateFeature,\n      logEvent,\n      clearEvents,\n      registerHandlers,\n    ]\n  );\n\n  return (\n    <ConsciousnessStreamContext.Provider value={value}>\n      {children}\n    </ConsciousnessStreamContext.Provider>\n  );\n}\n\nexport function useConsciousnessStream(): ConsciousnessStreamContextValue {\n  const context = useContext(ConsciousnessStreamContext);\n  return context ?? defaultConsciousnessStreamContext;\n}\n", "/**\n * Unified API Design for Consciousness Interface Features\n * Standardized types and interfaces across the component library\n */\n\n// Base consciousness feature configuration\nexport interface BaseConsciousnessFeatures {\n  /** Enable predictive behavior analysis and preloading */\n  predictive?: boolean;\n  /** Enable eye tracking and gaze-responsive interactions */\n  eyeTracking?: boolean;\n  /** Enable biometric adaptation based on user state */\n  adaptive?: boolean;\n  /** Enable spatial audio positioning and feedback */\n  spatialAudio?: boolean;\n  /** Enable achievement system integration */\n  trackAchievements?: boolean;\n}\n\n// Extended consciousness features for specific component types\nexport interface ExtendedConsciousnessFeatures extends BaseConsciousnessFeatures {\n  /** Preload related data/content when predictive is enabled */\n  preloadData?: boolean;\n  /** Preload navigation routes when predictive is enabled */\n  preloadRoutes?: boolean;\n  /** Preload form actions when predictive is enabled */\n  preloadActions?: boolean;\n  \n  /** Respond to user gaze with visual feedback when eyeTracking is enabled */\n  gazeResponsive?: boolean;\n  /** Highlight elements based on gaze when eyeTracking is enabled */\n  gazeHighlight?: boolean;\n  /** Show focus previews when eyeTracking is enabled */\n  focusPreview?: boolean;\n  /** Enable gaze-based navigation when eyeTracking is enabled */\n  gazeNavigation?: boolean;\n  \n  /** Respond to biometric stress levels when adaptive is enabled */\n  biometricResponsive?: boolean;\n  /** Adjust UI complexity based on stress when adaptive is enabled */\n  complexityAdjustment?: boolean;\n  /** Require calm state for certain actions when adaptive is enabled */\n  requiresCalm?: boolean;\n  /** Adapt content based on user patterns when adaptive is enabled */\n  contentAdaptation?: boolean;\n  \n  /** Provide audio feedback when spatialAudio is enabled */\n  audioFeedback?: boolean;\n  /** Enable directional audio cues when spatialAudio is enabled */\n  directionalCues?: boolean;\n  /** Position audio in 3D space when spatialAudio is enabled */\n  position?: 'left' | 'center' | 'right' | { x: number; y: number; z: number };\n  \n  /** Achievement identifier for tracking when trackAchievements is enabled */\n  achievementId?: string;\n  /** Context for achievement tracking when trackAchievements is enabled */\n  usageContext?: 'onboarding' | 'form' | 'navigation' | 'dashboard' | 'analytics' | 'report' | 'presentation' | 'exploration' | 'advanced' | 'showcase' | string;\n  /** Show progress indicators when trackAchievements is enabled */\n  progressIndicators?: boolean;\n}\n\n// Component-specific consciousness feature extensions\nexport interface NavigationConsciousnessFeatures extends ExtendedConsciousnessFeatures {\n  /** Pattern recognition for navigation behavior */\n  patternRecognition?: boolean;\n  /** Audio navigation cues */\n  audioNavigation?: boolean;\n}\n\nexport interface FormConsciousnessFeatures extends ExtendedConsciousnessFeatures {\n  /** Auto-complete based on patterns */\n  smartAutoComplete?: boolean;\n  /** Validate input in real-time */\n  predictiveValidation?: boolean;\n  /** Suggest form completions */\n  formSuggestions?: boolean;\n}\n\nexport interface ChartConsciousnessFeatures extends ExtendedConsciousnessFeatures {\n  /** Provide chart insights */\n  chartInsights?: boolean;\n  /** Analyze data patterns */\n  patternAnalysis?: boolean;\n  /** Focus on data points based on gaze */\n  dataPointFocus?: boolean;\n}\n\nexport interface ModalConsciousnessFeatures extends ExtendedConsciousnessFeatures {\n  /** Focus management with eye tracking */\n  focusManagement?: boolean;\n  /** Audio positioning for modal */\n  modalAudioPosition?: boolean;\n}\n\nexport interface CardConsciousnessFeatures extends ExtendedConsciousnessFeatures {\n  /** Focus-aware expansion */\n  focusExpansion?: boolean;\n  /** Stress-aware simplification */\n  stressAware?: boolean;\n  /** Simplification mode for high stress */\n  simplificationMode?: boolean;\n}\n\n// Consciousness event handlers\nexport interface ConsciousnessEventHandlers {\n  /** Called when predictive analysis completes */\n  onPredictiveAnalysis?: (analysis: PredictiveAnalysis) => void;\n  /** Called when eye tracking detects gaze */\n  onGazeEnter?: (target: Element) => void;\n  /** Called when eye tracking loses gaze */\n  onGazeExit?: (target: Element) => void;\n  /** Called when biometric state changes */\n  onBiometricChange?: (state: BiometricState) => void;\n  /** Called when spatial audio plays */\n  onAudioPlay?: (audioId: string, position?: SpatialPosition) => void;\n  /** Called when achievement is unlocked */\n  onAchievementUnlocked?: (achievement: Achievement) => void;\n  /** Called when consciousness feature state changes */\n  onConsciousnessChange?: (feature: string, enabled: boolean) => void;\n}\n\n// Core data types\nexport interface PredictiveAnalysis {\n  patterns: UserPattern[];\n  insights: Insight[];\n  recommendations: string[];\n  confidence: number; // 0-1\n  timestamp: number;\n}\n\nexport interface UserPattern {\n  id: string;\n  type: 'navigation' | 'interaction' | 'temporal' | 'behavioral';\n  frequency: number;\n  lastOccurrence: number;\n  confidence: number;\n  metadata: Record<string, any>;\n}\n\nexport interface Insight {\n  id: string;\n  type: 'usage' | 'performance' | 'preference' | 'optimization';\n  description: string;\n  impact: 'low' | 'medium' | 'high';\n  actionable: boolean;\n  metadata: Record<string, any>;\n}\n\nexport interface BiometricState {\n  stressLevel: number; // 0-1 (0 = calm, 1 = stressed)\n  cognitiveLoad: number; // 0-1 (0 = low, 1 = high)\n  attention: number; // 0-1 (0 = distracted, 1 = focused)\n  confidence: number; // 0-1 (0 = uncertain, 1 = confident)\n  timestamp: number;\n}\n\nexport interface SpatialPosition {\n  x: number; // -1 to 1 (left to right)\n  y: number; // -1 to 1 (bottom to top)\n  z: number; // -1 to 1 (back to front)\n}\n\nexport interface Achievement {\n  id: string;\n  name: string;\n  description: string;\n  category: string;\n  unlocked: boolean;\n  progress: number; // 0-1\n  timestamp?: number;\n  metadata: Record<string, any>;\n}\n\nexport interface GazeData {\n  x: number; // Screen coordinates\n  y: number;\n  confidence: number; // 0-1\n  timestamp: number;\n  target?: Element;\n}\n\n// Consciousness configuration\nexport interface ConsciousnessConfig {\n  /** Global enable/disable for all consciousness features */\n  enabled: boolean;\n  /** Individual feature toggles */\n  features: {\n    predictive: boolean;\n    eyeTracking: boolean;\n    adaptive: boolean;\n    spatialAudio: boolean;\n    achievements: boolean;\n  };\n  /** Performance settings */\n  performance: {\n    eyeTrackingFPS: number; // Default: 60\n    biometricUpdateInterval: number; // Default: 100ms\n    predictiveAnalysisDelay: number; // Default: 200ms\n    spatialAudioUpdateRate: number; // Default: 30fps\n  };\n  /** Privacy settings */\n  privacy: {\n    dataRetentionDays: number; // Default: 30\n    anonymizeData: boolean; // Default: true\n    shareAnalytics: boolean; // Default: false\n    requireConsent: boolean; // Default: true\n  };\n  /** Accessibility settings */\n  accessibility: {\n    respectReducedMotion: boolean; // Default: true\n    respectHighContrast: boolean; // Default: true\n    provideAudioAlternatives: boolean; // Default: true\n    announceStateChanges: boolean; // Default: true\n  };\n}\n\n// Hook configurations\nexport interface PredictiveEngineConfig {\n  enabled: boolean;\n  analysisDelay?: number;\n  maxPatterns?: number;\n  confidenceThreshold?: number;\n}\n\nexport interface EyeTrackingConfig {\n  enabled: boolean;\n  updateRate?: number; // FPS\n  gazeThreshold?: number; // pixels\n  dwellTime?: number; // ms\n  calibrationRequired?: boolean;\n}\n\nexport interface BiometricAdaptationConfig {\n  enabled: boolean;\n  updateInterval?: number; // ms\n  stressThreshold?: number; // 0-1\n  cognitiveLoadThreshold?: number; // 0-1\n  adaptationSensitivity?: number; // 0-1\n}\n\nexport interface SpatialAudioConfig {\n  enabled: boolean;\n  updateRate?: number; // FPS\n  maxSources?: number;\n  falloffDistance?: number;\n  volume?: number; // 0-1\n}\n\nexport interface AchievementSystemConfig {\n  enabled: boolean;\n  categories?: string[];\n  persistProgress?: boolean;\n  showNotifications?: boolean;\n  trackingGranularity?: 'basic' | 'detailed' | 'comprehensive';\n}\n\n// Component prop interfaces for consistency\nexport interface WithConsciousnessProps {\n  /** Consciousness feature configuration */\n  consciousnessFeatures?: ExtendedConsciousnessFeatures;\n  /** Consciousness event handlers */\n  consciousnessHandlers?: ConsciousnessEventHandlers;\n  /** Override global consciousness config */\n  consciousnessConfig?: Partial<ConsciousnessConfig>;\n  /** Disable all consciousness features for this component */\n  disableConsciousness?: boolean;\n}\n\n// Navigation-specific props\nexport interface WithNavigationConsciousnessProps extends WithConsciousnessProps {\n  consciousnessFeatures?: NavigationConsciousnessFeatures;\n}\n\n// Form-specific props\nexport interface WithFormConsciousnessProps extends WithConsciousnessProps {\n  consciousnessFeatures?: FormConsciousnessFeatures;\n}\n\n// Chart-specific props\nexport interface WithChartConsciousnessProps extends WithConsciousnessProps {\n  consciousnessFeatures?: ChartConsciousnessFeatures;\n}\n\n// Modal-specific props\nexport interface WithModalConsciousnessProps extends WithConsciousnessProps {\n  consciousnessFeatures?: ModalConsciousnessFeatures;\n}\n\n// Card-specific props\nexport interface WithCardConsciousnessProps extends WithConsciousnessProps {\n  consciousnessFeatures?: CardConsciousnessFeatures;\n}\n\n// Utility types for component variants\nexport type ConsciousnessVariant<T> = T & WithConsciousnessProps;\nexport type NavigationConsciousnessVariant<T> = T & WithNavigationConsciousnessProps;\nexport type FormConsciousnessVariant<T> = T & WithFormConsciousnessProps;\nexport type ChartConsciousnessVariant<T> = T & WithChartConsciousnessProps;\nexport type ModalConsciousnessVariant<T> = T & WithModalConsciousnessProps;\nexport type CardConsciousnessVariant<T> = T & WithCardConsciousnessProps;\n\n// Default configurations\nexport const DEFAULT_CONSCIOUSNESS_CONFIG: ConsciousnessConfig = {\n  enabled: false, // Opt-in by default for privacy\n  features: {\n    predictive: false,\n    eyeTracking: false,\n    adaptive: false,\n    spatialAudio: false,\n    achievements: false,\n  },\n  performance: {\n    eyeTrackingFPS: 60,\n    biometricUpdateInterval: 100,\n    predictiveAnalysisDelay: 200,\n    spatialAudioUpdateRate: 30,\n  },\n  privacy: {\n    dataRetentionDays: 30,\n    anonymizeData: true,\n    shareAnalytics: false,\n    requireConsent: true,\n  },\n  accessibility: {\n    respectReducedMotion: true,\n    respectHighContrast: true,\n    provideAudioAlternatives: true,\n    announceStateChanges: true,\n  },\n};\n\nexport const DEFAULT_PREDICTIVE_CONFIG: PredictiveEngineConfig = {\n  enabled: false,\n  analysisDelay: 200,\n  maxPatterns: 100,\n  confidenceThreshold: 0.7,\n};\n\nexport const DEFAULT_EYE_TRACKING_CONFIG: EyeTrackingConfig = {\n  enabled: false,\n  updateRate: 60,\n  gazeThreshold: 50,\n  dwellTime: 300,\n  calibrationRequired: true,\n};\n\nexport const DEFAULT_BIOMETRIC_CONFIG: BiometricAdaptationConfig = {\n  enabled: false,\n  updateInterval: 100,\n  stressThreshold: 0.7,\n  cognitiveLoadThreshold: 0.8,\n  adaptationSensitivity: 0.5,\n};\n\nexport const DEFAULT_SPATIAL_AUDIO_CONFIG: SpatialAudioConfig = {\n  enabled: false,\n  updateRate: 30,\n  maxSources: 8,\n  falloffDistance: 100,\n  volume: 0.5,\n};\n\nexport const DEFAULT_ACHIEVEMENT_CONFIG: AchievementSystemConfig = {\n  enabled: false,\n  categories: ['interaction', 'exploration', 'mastery', 'social'],\n  persistProgress: true,\n  showNotifications: true,\n  trackingGranularity: 'basic',\n};\n\n// Component naming conventions\nexport const CONSCIOUSNESS_COMPONENT_VARIANTS = {\n  // Standard variants\n  Conscious: 'Conscious', // e.g., ConsciousGlassButton\n  Predictive: 'Predictive', // e.g., PredictiveGlassChart\n  Adaptive: 'Adaptive', // e.g., AdaptiveGlassCard\n  Immersive: 'Immersive', // e.g., ImmersiveGlassModal\n  \n  // Specialized variants\n  EyeTracking: 'EyeTracking', // e.g., EyeTrackingGlassNavigation\n  Biometric: 'Biometric', // e.g., BiometricGlassForm\n  SpatialAudio: 'SpatialAudio', // e.g., SpatialAudioGlassButton\n  Achievement: 'Achievement', // e.g., AchievementGlassProgress\n} as const;\n\n// Consciousness feature flags for conditional rendering\nexport type ConsciousnessFeatureFlag = keyof BaseConsciousnessFeatures;\n\n// Helper function to check if any consciousness feature is enabled\nexport const hasConsciousnessFeatures = (features?: ExtendedConsciousnessFeatures): boolean => {\n  if (!features) return false;\n  return Boolean(\n    features.predictive ||\n    features.eyeTracking ||\n    features.adaptive ||\n    features.spatialAudio ||\n    features.trackAchievements\n  );\n};\n\n// Helper function to get enabled consciousness features\nexport const getEnabledConsciousnessFeatures = (features?: ExtendedConsciousnessFeatures): ConsciousnessFeatureFlag[] => {\n  if (!features) return [];\n  \n  const enabledFeatures: ConsciousnessFeatureFlag[] = [];\n  if (features.predictive) enabledFeatures.push('predictive');\n  if (features.eyeTracking) enabledFeatures.push('eyeTracking');\n  if (features.adaptive) enabledFeatures.push('adaptive');\n  if (features.spatialAudio) enabledFeatures.push('spatialAudio');\n  if (features.trackAchievements) enabledFeatures.push('trackAchievements');\n  \n  return enabledFeatures;\n};\n\n// Helper function to create consciousness feature object\nexport const createConsciousnessFeatures = (\n  features: Partial<ExtendedConsciousnessFeatures> = {}\n): ExtendedConsciousnessFeatures => {\n  return {\n    predictive: false,\n    eyeTracking: false,\n    adaptive: false,\n    spatialAudio: false,\n    trackAchievements: false,\n    ...features,\n  };\n};\n\n// Type guards\nexport const isNavigationConsciousnessFeatures = (\n  features: any\n): features is NavigationConsciousnessFeatures => {\n  return features && (\n    features.patternRecognition !== undefined ||\n    features.audioNavigation !== undefined ||\n    hasConsciousnessFeatures(features)\n  );\n};\n\nexport const isFormConsciousnessFeatures = (\n  features: any\n): features is FormConsciousnessFeatures => {\n  return features && (\n    features.smartAutoComplete !== undefined ||\n    features.predictiveValidation !== undefined ||\n    features.formSuggestions !== undefined ||\n    hasConsciousnessFeatures(features)\n  );\n};\n\nexport const isChartConsciousnessFeatures = (\n  features: any\n): features is ChartConsciousnessFeatures => {\n  return features && (\n    features.chartInsights !== undefined ||\n    features.patternAnalysis !== undefined ||\n    features.dataPointFocus !== undefined ||\n    hasConsciousnessFeatures(features)\n  );\n};\n\n// Error types\nexport class ConsciousnessError extends Error {\n  constructor(\n    message: string,\n    public readonly feature: ConsciousnessFeatureFlag,\n    public readonly code: string\n  ) {\n    super(message);\n    this.name = 'ConsciousnessError';\n  }\n}\n\nexport class ConsciousnessPermissionError extends ConsciousnessError {\n  constructor(feature: ConsciousnessFeatureFlag) {\n    super(\n      `Permission denied for consciousness feature: ${feature}`,\n      feature,\n      'PERMISSION_DENIED'\n    );\n  }\n}\n\nexport class ConsciousnessUnsupportedError extends ConsciousnessError {\n  constructor(feature: ConsciousnessFeatureFlag) {\n    super(\n      `Consciousness feature not supported: ${feature}`,\n      feature,\n      'UNSUPPORTED_FEATURE'\n    );\n  }\n}\n\n// Analytics types for consciousness features\nexport interface ConsciousnessAnalytics {\n  sessionId: string;\n  userId?: string;\n  features: ConsciousnessFeatureFlag[];\n  interactions: ConsciousnessInteraction[];\n  performance: ConsciousnessPerformanceMetrics;\n  errors: ConsciousnessError[];\n}\n\nexport interface ConsciousnessInteraction {\n  id: string;\n  type: 'gaze' | 'biometric' | 'predictive' | 'spatial' | 'achievement';\n  componentType: string;\n  timestamp: number;\n  duration?: number;\n  metadata: Record<string, any>;\n}\n\nexport interface ConsciousnessPerformanceMetrics {\n  initialization: number;\n  averageResponseTime: number;\n  memoryUsage: number;\n  errorRate: number;\n  featureUsage: Record<ConsciousnessFeatureFlag, number>;\n}", "export const COMPONENT_INVENTORY_JSON_PATH = 'reports/component_inventory.json';\n\nexport const component_inventory_json = COMPONENT_INVENTORY_JSON_PATH;\n\nexport default COMPONENT_INVENTORY_JSON_PATH;\n", "export const GILDED_TOKENS_CATALOGUE_MD = 'reports/GILDED_TOKENS_CATALOGUE.md';\nexport const REDUCED_MOTION_101_GUIDE_MD = 'reports/REDUCED_MOTION_101_GUIDE.md';\nexport const REDUCED_MOTION_100_COMPLETE_MD = 'reports/REDUCED_MOTION_100_COMPLETE.md';\n", "\"use client\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { HTMLMotionProps, motion } from \"framer-motion\";\nimport React, { forwardRef, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nexport type DepthLayer =\n  | \"background\"\n  | \"far\"\n  | \"mid-far\"\n  | \"mid\"\n  | \"mid-near\"\n  | \"near\"\n  | \"foreground\"\n  | \"overlay\";\n\nexport interface GlassDepthConfig {\n  layer: DepthLayer;\n  opacity: number;\n  blur: number;\n  brightness: number;\n  zIndex: number;\n  transform: string;\n  shadow: string;\n}\n\ninterface DepthLayerProps extends Omit<HTMLMotionProps<\"div\">, \"style\"> {\n  layer: DepthLayer;\n  customConfig?: Partial<GlassDepthConfig>;\n  children: React.ReactNode;\n  enableParallax?: boolean;\n  parallaxStrength?: number;\n  enableHover?: boolean;\n  hoverLift?: number;\n  className?: string;\n}\n\nconst DEFAULT_DEPTH_CONFIGS: Record<DepthLayer, GlassDepthConfig> = {\n  background: {\n    layer: \"background\",\n    opacity: 0.02,\n    blur: 2,\n    brightness: 0.3,\n    zIndex: 1,\n    transform: \"translateZ(-200px) scale(1.8)\",\n    shadow: \"none\",\n  },\n  far: {\n    layer: \"far\",\n    opacity: 0.05,\n    blur: 8,\n    brightness: 0.4,\n    zIndex: 10,\n    transform: \"translateZ(-150px) scale(1.5)\",\n    shadow:\n      \"0 4px 20px color-mix(in srgb, var(--glass-black) 10%, transparent)\",\n  },\n  \"mid-far\": {\n    layer: \"mid-far\",\n    opacity: 0.08,\n    blur: 12,\n    brightness: 0.5,\n    zIndex: 20,\n    transform: \"translateZ(-100px) scale(1.3)\",\n    shadow:\n      \"0 6px 25px color-mix(in srgb, var(--glass-black) 15%, transparent)\",\n  },\n  mid: {\n    layer: \"mid\",\n    opacity: 0.12,\n    blur: 16,\n    brightness: 0.6,\n    zIndex: 30,\n    transform: \"translateZ(-50px) scale(1.1)\",\n    shadow:\n      \"0 8px 30px color-mix(in srgb, var(--glass-black) 20%, transparent)\",\n  },\n  \"mid-near\": {\n    layer: \"mid-near\",\n    opacity: 0.16,\n    blur: 20,\n    brightness: 0.7,\n    zIndex: 40,\n    transform: \"translateZ(0px) scale(1)\",\n    shadow:\n      \"0 10px 35px color-mix(in srgb, var(--glass-black) 25%, transparent)\",\n  },\n  near: {\n    layer: \"near\",\n    opacity: 0.22,\n    blur: 24,\n    brightness: 0.8,\n    zIndex: 50,\n    transform: \"translateZ(50px) scale(0.9)\",\n    shadow:\n      \"0 12px 40px color-mix(in srgb, var(--glass-black) 30%, transparent)\",\n  },\n  foreground: {\n    layer: \"foreground\",\n    opacity: 0.3,\n    blur: 28,\n    brightness: 0.9,\n    zIndex: 60,\n    transform: \"translateZ(100px) scale(0.8)\",\n    shadow:\n      \"0 16px 50px color-mix(in srgb, var(--glass-black) 40%, transparent)\",\n  },\n  overlay: {\n    layer: \"overlay\",\n    opacity: 0.4,\n    blur: 32,\n    brightness: 1,\n    zIndex: 70,\n    transform: \"translateZ(200px) scale(0.6)\",\n    shadow:\n      \"0 20px 60px rgba(var(--glass-color-black) / var(--glass-opacity-50))\",\n  },\n};\n\nexport const GlassDepthLayer = forwardRef<HTMLDivElement, DepthLayerProps>(\n  (\n    {\n      layer,\n      customConfig,\n      children,\n      enableParallax = false,\n      parallaxStrength = 0.5,\n      enableHover = true,\n      hoverLift = 10,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n\n    const config = useMemo(\n      () => ({\n        ...DEFAULT_DEPTH_CONFIGS[layer],\n        ...customConfig,\n      }),\n      [layer, customConfig]\n    );\n\n    const glassStyle = useMemo(\n      () => createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n      [config]\n    );\n\n    const motionProps = {\n      style: glassStyle,\n      initial: { opacity: 0, y: 20 },\n      animate: { opacity: 1, y: 0 },\n      whileHover: enableHover\n        ? {\n            transform: `${config.transform} translateY(-${hoverLift}px)`,\n            boxShadow: `0 ${20 + hoverLift}px ${60 + hoverLift}px color-mix(in srgb, var(--glass-black) 40%, transparent)`,\n            transition: {\n              duration: ANIMATION.DURATION.normal / 1000,\n              ease: ANIMATION.EASING.easeOut,\n            },\n          }\n        : undefined,\n      ...(enableParallax && {\n        drag: false,\n        onMouseMove: (event: React.MouseEvent<HTMLDivElement>) => {\n          const rect = event.currentTarget.getBoundingClientRect();\n          const x = (event.clientX - rect.left) / rect.width;\n          const y = (event.clientY - rect.top) / rect.height;\n\n          const rotateX = (y - 0.5) * parallaxStrength * 10;\n          const rotateY = (x - 0.5) * parallaxStrength * 10;\n\n          event.currentTarget.style.transform = `${config.transform} rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n        },\n        onMouseLeave: (event: React.MouseEvent<HTMLDivElement>) => {\n          event.currentTarget.style.transform = config.transform;\n        },\n      }),\n      ...props,\n    };\n\n    return (\n      <motion.div ref={ref} className={className} {...motionProps}>\n        {children}\n      </motion.div>\n    );\n  }\n);\n\nGlassDepthLayer.displayName = \"GlassDepthLayer\";\n\ninterface DepthSceneProps {\n  children: React.ReactNode;\n  perspective?: number;\n  className?: string;\n}\n\nexport const GlassDepthScene: React.FC<DepthSceneProps> = ({\n  children,\n  perspective = 1000,\n  className = \"\",\n}) => {\n  return (\n    <div\n      className={`relative w-full h-full ${className}`}\n      style={{\n        perspective: `${perspective}px`,\n        transformStyle: \"preserve-3d\",\n        overflow: \"hidden\",\n      }}\n    >\n      {children}\n    </div>\n  );\n};\n\ninterface LayeredGlassStackProps {\n  layers: {\n    content: React.ReactNode;\n    layer: DepthLayer;\n    config?: Partial<GlassDepthConfig>;\n  }[];\n  enableParallax?: boolean;\n  enableHover?: boolean;\n  className?: string;\n}\n\nexport const LayeredGlassStack: React.FC<LayeredGlassStackProps> = ({\n  layers,\n  enableParallax = true,\n  enableHover = true,\n  className = \"\",\n}) => {\n  const sortedLayers = useMemo(\n    () =>\n      [...layers].sort(\n        (a, b) =>\n          DEFAULT_DEPTH_CONFIGS[a.layer].zIndex -\n          DEFAULT_DEPTH_CONFIGS[b.layer].zIndex\n      ),\n    [layers]\n  );\n\n  return (\n    <GlassDepthScene className={className}>\n      {sortedLayers.map((layerData, index) => (\n        <GlassDepthLayer\n          key={`${layerData.layer}-${index}`}\n          layer={layerData.layer}\n          customConfig={layerData.config}\n          enableParallax={enableParallax}\n          enableHover={enableHover}\n          className=\"glass-absolute glass-inset-0\"\n        >\n          {layerData.content}\n        </GlassDepthLayer>\n      ))}\n    </GlassDepthScene>\n  );\n};\n\nexport const useDepthAnimation = (layer: DepthLayer) => {\n  const config = DEFAULT_DEPTH_CONFIGS[layer];\n\n  return useMemo(\n    () => ({\n      initial: {\n        opacity: 0,\n        z: -200,\n        scale: 0.8,\n      },\n      animate: {\n        opacity: config.opacity,\n        z: 0,\n        scale: 1,\n        transition: {\n          duration: ANIMATION.DURATION.slower / 1000,\n          ease: ANIMATION.EASING.easeInOut,\n          delay: config.zIndex * 0.1,\n        },\n      },\n      exit: {\n        opacity: 0,\n        z: -200,\n        scale: 0.8,\n        transition: {\n          duration: ANIMATION.DURATION.slow / 1000,\n          ease: \"easeInOut\",\n        },\n      },\n    }),\n    [config]\n  );\n};\n\nexport { DEFAULT_DEPTH_CONFIGS };\n", "\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface FractalNode {\n  id: string;\n  content: React.ReactNode;\n  children?: FractalNode[];\n  depth?: number;\n  metadata?: Record<string, unknown>;\n  scale?: number;\n  rotation?: number;\n  position?: { x: number; y: number };\n}\n\nexport interface GlassFractalLayoutProps {\n  nodes: FractalNode[];\n  maxDepth?: number;\n  fractalType?:\n    | \"sierpinski\"\n    | \"mandelbrot\"\n    | \"julia\"\n    | \"tree\"\n    | \"spiral\"\n    | \"custom\";\n  scaleFactor?: number;\n  branchAngle?: number;\n  initialScale?: number;\n  recursive?: boolean;\n  animateGrowth?: boolean;\n  zoomLevel?: number;\n  centerNode?: boolean;\n  interactiveZoom?: boolean;\n  showControls?: boolean;\n  onNodeClick?: (node: FractalNode) => void;\n  onNodeHover?: (node: FractalNode | null) => void;\n  glassConfig?: {\n    blur?: number;\n    opacity?: number;\n    saturation?: number;\n    brightness?: number;\n    contrast?: number;\n  };\n  soundEnabled?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  height?: number | string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const GlassFractalLayout = forwardRef<\n  HTMLDivElement,\n  GlassFractalLayoutProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      nodes = [],\n      maxDepth = 5,\n      fractalType = \"tree\",\n      scaleFactor = 0.618, // Golden ratio\n      branchAngle = 30,\n      initialScale = 1,\n      recursive = true,\n      animateGrowth = true,\n      zoomLevel = 1,\n      centerNode = true,\n      interactiveZoom = true,\n      showControls,\n      onNodeClick,\n      onNodeHover,\n      glassConfig = {},\n      soundEnabled = true,\n      compact = false,\n      contained = false,\n      maxHeight,\n      height,\n      className = \"\",\n      style = {},\n      ...props\n    },\n    ref\n  ) => {\n    const isCompactLike = compact || contained;\n    const displayMaxDepth = isCompactLike ? Math.min(maxDepth, 2) : maxDepth;\n    const displayInitialScale = isCompactLike\n      ? Math.min(initialScale, 0.58)\n      : initialScale;\n    const displayScaleFactor = isCompactLike\n      ? Math.min(scaleFactor, 0.5)\n      : scaleFactor;\n    const displayZoomLevel = isCompactLike\n      ? Math.min(zoomLevel, 0.72)\n      : zoomLevel;\n    const nodeDistance = isCompactLike ? 56 : 100;\n    const spiralDistance = isCompactLike ? 30 : 50;\n    const triangleRadius = isCompactLike ? 48 : 80;\n    const rowDistance = isCompactLike ? 42 : 60;\n    const columnDistance = isCompactLike ? 50 : 80;\n    const [hoveredNode, setHoveredNode] = useState<string | null>(null);\n    const [selectedNode, setSelectedNode] = useState<string | null>(null);\n    const [currentZoom, setCurrentZoom] = useState(displayZoomLevel);\n    const [growthProgress, setGrowthProgress] = useState(0);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const animationRef = useRef<number>();\n\n    const { prefersReducedMotion } = useMotionPreference();\n    const layoutId = useA11yId();\n    const { play } = useGlassSound();\n    const boundedHeight =\n      maxHeight ?? height ?? (compact || contained ? 240 : 600);\n    const shouldShowControls = showControls ?? !compact;\n\n    useEffect(() => {\n      setCurrentZoom(displayZoomLevel);\n    }, [displayZoomLevel]);\n\n    useEffect(() => {\n      if (animateGrowth && !prefersReducedMotion) {\n        const startTime = Date.now();\n        const duration = 2000; // 2 seconds\n\n        const animate = () => {\n          const elapsed = Date.now() - startTime;\n          const progress = Math.min(elapsed / duration, 1);\n          setGrowthProgress(progress);\n\n          if (progress < 1) {\n            animationRef.current = requestAnimationFrame(animate);\n          }\n        };\n\n        animationRef.current = requestAnimationFrame(animate);\n      } else {\n        setGrowthProgress(1);\n      }\n\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [animateGrowth, prefersReducedMotion]);\n\n    const generateFractalPositions = useCallback(\n      (\n        nodes: FractalNode[],\n        depth: number = 0,\n        parentPos: { x: number; y: number } = { x: 0, y: 0 },\n        parentAngle: number = -90,\n        parentScale: number = displayInitialScale\n      ): FractalNode[] => {\n        if (\n          depth >= displayMaxDepth ||\n          depth >= growthProgress * displayMaxDepth\n        )\n          return [];\n\n        return nodes.map((node, index) => {\n          const currentScale =\n            parentScale * Math.pow(displayScaleFactor, depth);\n          let position = { x: 0, y: 0 };\n          let rotation = 0;\n\n          switch (fractalType) {\n            case \"tree\":\n              const angleOffset =\n                (index - (nodes.length - 1) / 2) * branchAngle;\n              const currentAngle = parentAngle + angleOffset;\n              const distance = nodeDistance * currentScale;\n              position = {\n                x:\n                  parentPos.x +\n                  Math.cos((currentAngle * Math.PI) / 180) * distance,\n                y:\n                  parentPos.y +\n                  Math.sin((currentAngle * Math.PI) / 180) * distance,\n              };\n              rotation = currentAngle + 90;\n              break;\n\n            case \"spiral\":\n              const spiralAngle = parentAngle + index * 137.5; // Golden angle\n              const spiralRadius = depth * spiralDistance * currentScale;\n              position = {\n                x:\n                  parentPos.x +\n                  Math.cos((spiralAngle * Math.PI) / 180) * spiralRadius,\n                y:\n                  parentPos.y +\n                  Math.sin((spiralAngle * Math.PI) / 180) * spiralRadius,\n              };\n              rotation = spiralAngle;\n              break;\n\n            case \"sierpinski\":\n              // Sierpinski triangle pattern\n              const triAngle = index * 120 + parentAngle;\n              const triRadius = triangleRadius * currentScale;\n              position = {\n                x:\n                  parentPos.x +\n                  Math.cos((triAngle * Math.PI) / 180) * triRadius,\n                y:\n                  parentPos.y +\n                  Math.sin((triAngle * Math.PI) / 180) * triRadius,\n              };\n              break;\n\n            case \"mandelbrot\":\n              // Approximation of Mandelbrot set pattern\n              const c = { x: -0.7269, y: 0.1889 };\n              const z = { x: index * 0.1, y: depth * 0.1 };\n              position = {\n                x: parentPos.x + z.x * 100 * currentScale,\n                y: parentPos.y + z.y * 100 * currentScale,\n              };\n              break;\n\n            default:\n              position = {\n                x:\n                  parentPos.x +\n                  (index - nodes.length / 2) * columnDistance * currentScale,\n                y: parentPos.y + depth * rowDistance * currentScale,\n              };\n          }\n\n          const processedNode: FractalNode = {\n            ...node,\n            depth,\n            scale: currentScale,\n            rotation,\n            position,\n            children:\n              node.children && recursive\n                ? generateFractalPositions(\n                    node.children,\n                    depth + 1,\n                    position,\n                    rotation || parentAngle,\n                    currentScale\n                  )\n                : [],\n          };\n\n          return processedNode;\n        });\n      },\n      [\n        displayMaxDepth,\n        fractalType,\n        displayScaleFactor,\n        branchAngle,\n        displayInitialScale,\n        recursive,\n        growthProgress,\n        nodeDistance,\n        spiralDistance,\n        triangleRadius,\n        columnDistance,\n        rowDistance,\n      ]\n    );\n\n    const processedNodes = useMemo(() => {\n      const rootPosition = centerNode ? { x: 0, y: 0 } : { x: -200, y: -200 };\n      return generateFractalPositions(nodes, 0, rootPosition);\n    }, [nodes, generateFractalPositions, centerNode]);\n\n    const flattenNodes = (nodes: FractalNode[]): FractalNode[] => {\n      return nodes.reduce((acc: FractalNode[], node) => {\n        acc.push(node);\n        if (node.children) {\n          acc.push(...flattenNodes(node.children));\n        }\n        return acc;\n      }, []);\n    };\n\n    const allNodes = useMemo(\n      () => flattenNodes(processedNodes),\n      [processedNodes]\n    );\n\n    const handleNodeClick = useCallback(\n      (node: FractalNode) => {\n        setSelectedNode(node.id);\n        onNodeClick?.(node);\n\n        if (soundEnabled) {\n          play(\"click\");\n        }\n      },\n      [onNodeClick, soundEnabled, play]\n    );\n\n    const handleNodeHover = useCallback(\n      (node: FractalNode | null) => {\n        setHoveredNode(node?.id || null);\n        onNodeHover?.(node);\n\n        if (soundEnabled && node) {\n          play(\"hover\");\n        }\n      },\n      [onNodeHover, soundEnabled, play]\n    );\n\n    const handleWheel = useCallback(\n      (e: React.WheelEvent) => {\n        if (!interactiveZoom) return;\n\n        e.preventDefault();\n        const zoomDelta = e.deltaY > 0 ? 0.9 : 1.1;\n        setCurrentZoom((prev: any) =>\n          Math.max(0.1, Math.min(5, prev * zoomDelta))\n        );\n      },\n      [interactiveZoom]\n    );\n\n    const getNodeVariants = () => ({\n      hidden: {\n        opacity: 0,\n      },\n      visible: (delay: number) => ({\n        opacity: 1,\n        transition: {\n          type: \"spring\",\n          tension: 300,\n          friction: 25,\n          delay: prefersReducedMotion ? 0 : delay * 0.1,\n        },\n      }),\n      hover: {\n        opacity: 1,\n        transition: {\n          type: \"spring\",\n          tension: 400,\n          friction: 20,\n        },\n      },\n      selected: {\n        opacity: 1,\n        transition: {\n          type: \"spring\",\n          tension: 400,\n          friction: 20,\n        },\n      },\n    });\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        className={`glass-fractal-layout relative overflow-hidden ${className}`}\n        style={{\n          width: \"100%\",\n          height:\n            typeof boundedHeight === \"number\"\n              ? `${boundedHeight}px`\n              : boundedHeight,\n          maxHeight:\n            typeof boundedHeight === \"number\"\n              ? `${boundedHeight}px`\n              : boundedHeight,\n          ...style,\n        }}\n        glassConfig={{\n          blur: 15,\n          opacity: 0.9,\n          saturation: 1.1,\n          brightness: 1.05,\n          ...glassConfig,\n        }}\n        onWheel={handleWheel}\n        role=\"application\"\n        aria-label=\"Fractal layout visualization\"\n        id={layoutId}\n        {...props}\n      >\n        <div\n          ref={containerRef}\n          className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n        >\n          <AnimatePresence>\n            {allNodes.map((node, index) => {\n              const isHovered = hoveredNode === node.id;\n              const isSelected = selectedNode === node.id;\n              const nodeScale = (node.scale || 1) * currentZoom;\n              const nodeX = (node.position?.x || 0) * currentZoom;\n              const nodeY = (node.position?.y || 0) * currentZoom;\n\n              return (\n                <motion.div\n                  key={`${node.id}-${node.depth}`}\n                  className=\"glass-absolute glass-cursor-pointer\"\n                  style={{\n                    left: \"50%\",\n                    top: \"50%\",\n                    transform: `translate(-50%, -50%) translate(${nodeX}px, ${nodeY}px) scale(${nodeScale}) rotate(${node.rotation || 0}deg)`,\n                  }}\n                  custom={node.depth || 0}\n                  variants={getNodeVariants()}\n                  initial=\"hidden\"\n                  animate={\n                    isSelected ? \"selected\" : isHovered ? \"hover\" : \"visible\"\n                  }\n                  exit=\"hidden\"\n                  onMouseEnter={() => handleNodeHover(node)}\n                  onMouseLeave={() => handleNodeHover(null)}\n                  onClick={() => handleNodeClick(node)}\n                >\n                  <div\n                    className={`\n                      glass-surface rounded-lg border border-white/20 glass-backdrop-blur-md\n                      transition-all duration-200\n                      ${isCompactLike ? \"p-1 min-w-[28px] min-h-[28px] text-[10px]\" : \"p-2 min-w-[40px] min-h-[40px]\"}\n                      flex items-center justify-center\n                      ${\n                        isHovered || isSelected\n                          ? \"bg-white/20 border-white/40\"\n                          : \"bg-white/10 border-white/20\"\n                      }\n                    `}\n                    style={{\n                      opacity: Math.max(0.3, 1 - (node.depth || 0) * 0.2),\n                    }}\n                  >\n                    {node.content}\n                  </div>\n\n                  {/* Connection lines to children */}\n                  {node.children?.map((child, childIndex) => (\n                    <div\n                      key={`line-${child.id}`}\n                      className=\"glass-absolute glass-border-l glass-border-white/30\"\n                      style={{\n                        left: \"50%\",\n                        top: \"50%\",\n                        height:\n                          Math.sqrt(\n                            Math.pow(\n                              (child.position?.x || 0) -\n                                (node.position?.x || 0),\n                              2\n                            ) +\n                              Math.pow(\n                                (child.position?.y || 0) -\n                                  (node.position?.y || 0),\n                                2\n                              )\n                          ) * currentZoom,\n                        transformOrigin: \"0 0\",\n                        transform: `rotate(${Math.atan2(\n                          (child.position?.y || 0) - (node.position?.y || 0),\n                          (child.position?.x || 0) - (node.position?.x || 0)\n                        )}rad)`,\n                      }}\n                    />\n                  ))}\n\n                  {/* Depth indicator */}\n                  {!isCompactLike && (node.depth || 0) > 0 && (\n                    <div className=\"glass-absolute glass-top-1 glass--right-1 glass-surface-dark/50 glass-text-primary glass-text-xs glass-radius-full glass-w-4 glass-h-4 glass-flex glass-items-center glass-justify-center\">\n                      {node.depth}\n                    </div>\n                  )}\n                </motion.div>\n              );\n            })}\n          </AnimatePresence>\n        </div>\n\n        {/* Controls */}\n        {shouldShowControls && (\n          <div className=\"glass-absolute glass-bottom-4 glass-left-4 glass-flex glass-flex-col glass-gap-2\">\n            <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Type: {fractalType}\n            </div>\n            <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Depth: {Math.floor(growthProgress * maxDepth)}/{maxDepth}\n            </div>\n            <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Nodes: {allNodes.length}\n            </div>\n            {interactiveZoom && (\n              <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n                Zoom: {(currentZoom * 100).toFixed(0)}%\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Growth progress indicator */}\n        {!compact && animateGrowth && growthProgress < 1 && (\n          <div className=\"glass-absolute glass-top-4 glass-right-4\">\n            <div className=\"glass-w-32 glass-h-2 glass-surface-dark/20 glass-radius-full glass-backdrop-blur-sm glass-contrast-guard\">\n              <div\n                className=\"glass-h-full glass-surface-subtle/50 glass-radius-full glass-transition-all glass-duration-100\"\n                style={{ width: `${growthProgress * 100}%` }}\n              />\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassFractalLayout.displayName = \"GlassFractalLayout\";\n", "\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\n\nexport interface GoldenRatioItem {\n  id: string;\n  content: React.ReactNode;\n  priority?: number;\n  category?: string;\n  aspectRatio?: number;\n  minSize?: { width: number; height: number };\n  maxSize?: { width: number; height: number };\n  metadata?: Record<string, unknown>;\n}\n\nexport interface GoldenRatioSection {\n  width: number;\n  height: number;\n  x: number;\n  y: number;\n  item?: GoldenRatioItem;\n  level: number;\n  ratio: number;\n}\n\nexport interface GlassGoldenRatioGridProps {\n  items: GoldenRatioItem[];\n  containerWidth?: number;\n  containerHeight?: number;\n  goldenRatio?: number;\n  subdivisionLevels?: number;\n  spacing?: number;\n  animateLayout?: boolean;\n  showGrid?: boolean;\n  showRatioLines?: boolean;\n  showEmptyLabels?: boolean;\n  responsive?: boolean;\n  onItemClick?: (item: GoldenRatioItem) => void;\n  onItemHover?: (item: GoldenRatioItem | null) => void;\n  onLayoutChange?: (sections: GoldenRatioSection[]) => void;\n  glassConfig?: {\n    blur?: number;\n    opacity?: number;\n    saturation?: number;\n    brightness?: number;\n    contrast?: number;\n  };\n  soundEnabled?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const GlassGoldenRatioGrid = forwardRef<\n  HTMLDivElement,\n  GlassGoldenRatioGridProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      items = [],\n      containerWidth = 800,\n      containerHeight = 600,\n      goldenRatio = 1.618,\n      subdivisionLevels = 4,\n      spacing = 8,\n      animateLayout = true,\n      showGrid = false,\n      showRatioLines = true,\n      showEmptyLabels = false,\n      responsive = true,\n      onItemClick,\n      onItemHover,\n      onLayoutChange,\n      glassConfig = {},\n      soundEnabled = true,\n      compact = false,\n      contained = false,\n      maxHeight,\n      className = \"\",\n      style = {},\n      ...props\n    },\n    ref\n  ) => {\n    const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n    const [selectedItem, setSelectedItem] = useState<string | null>(null);\n    const [dimensions, setDimensions] = useState({\n      width: containerWidth,\n      height: containerHeight,\n    });\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    const { prefersReducedMotion } = useMotionPreference();\n    const gridId = useA11yId();\n    const { play } = useGlassSound();\n    const effectiveWidth = compact ? 360 : containerWidth;\n    const effectiveHeight = compact ? 220 : containerHeight;\n    const effectiveLevels = compact\n      ? Math.min(subdivisionLevels, 3)\n      : subdivisionLevels;\n    const effectiveShowGrid = compact ? false : showGrid;\n    const effectiveShowRatioLines = compact ? false : showRatioLines;\n    const boundedHeight =\n      maxHeight ?? (compact || contained ? effectiveHeight : undefined);\n\n    // Responsive dimension handling\n    useEffect(() => {\n      if (!responsive || !containerRef.current) return;\n\n      const resizeObserver = new ResizeObserver((entries) => {\n        for (let entry of entries) {\n          const { width, height } = entry.contentRect;\n          setDimensions({ width, height });\n        }\n      });\n\n      resizeObserver.observe(containerRef.current);\n      return () => resizeObserver.disconnect();\n    }, [responsive]);\n\n    // Generate golden ratio subdivisions\n    const generateGoldenSections = useCallback((): GoldenRatioSection[] => {\n      const sections: GoldenRatioSection[] = [];\n      const queue: Array<{\n        x: number;\n        y: number;\n        width: number;\n        height: number;\n        level: number;\n      }> = [\n        {\n          x: 0,\n          y: 0,\n          width: compact ? effectiveWidth : dimensions.width,\n          height: compact ? effectiveHeight : dimensions.height,\n          level: 0,\n        },\n      ];\n\n      while (\n        queue.length > 0 &&\n        sections.length < Math.pow(2, effectiveLevels)\n      ) {\n        const current = queue.shift()!;\n\n        if (current.level >= effectiveLevels) {\n          sections.push({\n            ...current,\n            ratio: current.width / current.height,\n          });\n          continue;\n        }\n\n        // Apply golden ratio subdivision\n        const isHorizontalSplit = current.width > current.height;\n\n        if (isHorizontalSplit) {\n          // Split horizontally using golden ratio\n          const majorWidth = current.width / goldenRatio;\n          const minorWidth = current.width - majorWidth;\n\n          queue.push({\n            x: current.x,\n            y: current.y,\n            width: majorWidth,\n            height: current.height,\n            level: current.level + 1,\n          });\n\n          queue.push({\n            x: current.x + majorWidth,\n            y: current.y,\n            width: minorWidth,\n            height: current.height,\n            level: current.level + 1,\n          });\n        } else {\n          // Split vertically using golden ratio\n          const majorHeight = current.height / goldenRatio;\n          const minorHeight = current.height - majorHeight;\n\n          queue.push({\n            x: current.x,\n            y: current.y,\n            width: current.width,\n            height: majorHeight,\n            level: current.level + 1,\n          });\n\n          queue.push({\n            x: current.x,\n            y: current.y + majorHeight,\n            width: current.width,\n            height: minorHeight,\n            level: current.level + 1,\n          });\n        }\n      }\n\n      return sections;\n    }, [\n      compact,\n      dimensions,\n      effectiveHeight,\n      effectiveLevels,\n      effectiveWidth,\n      goldenRatio,\n    ]);\n\n    // Assign items to sections based on priority and size requirements\n    const assignItemsToSections = useCallback(\n      (sections: GoldenRatioSection[]): GoldenRatioSection[] => {\n        const sortedItems = [...items].sort(\n          (a, b) => (b.priority || 0) - (a.priority || 0)\n        );\n        const sortedSections = [...sections].sort(\n          (a, b) => b.width * b.height - a.width * a.height\n        );\n\n        const assignedSections = sortedSections.map((section, index) => {\n          const item = sortedItems[index];\n          return {\n            ...section,\n            item: item || undefined,\n          };\n        });\n\n        return assignedSections;\n      },\n      [items]\n    );\n\n    const sections = useMemo(() => {\n      const goldenSections = generateGoldenSections();\n      const assignedSections = assignItemsToSections(goldenSections);\n\n      // Notify about layout changes\n      onLayoutChange?.(assignedSections);\n\n      return assignedSections;\n    }, [generateGoldenSections, assignItemsToSections, onLayoutChange]);\n\n    // Generate spiral golden ratio curve points\n    const generateGoldenSpiral = useCallback((): Array<{\n      x: number;\n      y: number;\n    }> => {\n      const points: Array<{ x: number; y: number }> = [];\n      const centerX = dimensions.width / 2;\n      const centerY = dimensions.height / 2;\n      const maxRadius = Math.min(dimensions.width, dimensions.height) / 3;\n\n      for (let i = 0; i < 200; i++) {\n        const angle = i * 0.2;\n        const radius =\n          (maxRadius / 20) * Math.pow(goldenRatio, angle / (Math.PI * 2));\n\n        const x = centerX + radius * Math.cos(angle);\n        const y = centerY + radius * Math.sin(angle);\n\n        if (\n          x >= 0 &&\n          x <= dimensions.width &&\n          y >= 0 &&\n          y <= dimensions.height\n        ) {\n          points.push({ x, y });\n        }\n      }\n\n      return points;\n    }, [dimensions, goldenRatio]);\n\n    const spiralPoints = useMemo(\n      () => generateGoldenSpiral(),\n      [generateGoldenSpiral]\n    );\n\n    const handleItemClick = useCallback(\n      (item: GoldenRatioItem) => {\n        setSelectedItem(item.id);\n        onItemClick?.(item);\n\n        if (soundEnabled) {\n          play(\"click\");\n        }\n      },\n      [onItemClick, soundEnabled, play]\n    );\n\n    const handleItemHover = useCallback(\n      (item: GoldenRatioItem | null) => {\n        setHoveredItem(item?.id || null);\n        onItemHover?.(item);\n\n        if (soundEnabled && item) {\n          play(\"hover\");\n        }\n      },\n      [onItemHover, soundEnabled, play]\n    );\n\n    const getItemVariants = () => ({\n      hidden: {\n        scale: 0,\n        opacity: 0,\n      },\n      visible: (delay: number) => ({\n        scale: 1,\n        opacity: 1,\n        transition: {\n          type: \"spring\",\n          tension: 300,\n          friction: 25,\n          delay: prefersReducedMotion ? 0 : delay * 0.05,\n        },\n      }),\n      hover: {\n        scale: 1.02,\n        transition: {\n          type: \"spring\",\n          tension: 400,\n          friction: 20,\n        },\n      },\n      selected: {\n        scale: 1.05,\n        transition: {\n          type: \"spring\",\n          tension: 400,\n          friction: 20,\n        },\n      },\n    });\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        className={`glass-golden-ratio-grid relative overflow-auto ${className}`}\n        style={{\n          width: responsive ? \"100%\" : effectiveWidth,\n          minWidth: responsive || compact ? undefined : effectiveWidth,\n          height: compact\n            ? effectiveHeight\n            : responsive\n              ? \"100%\"\n              : effectiveHeight,\n          minHeight: compact ? effectiveHeight : effectiveHeight,\n          maxHeight:\n            typeof boundedHeight === \"number\"\n              ? `${boundedHeight}px`\n              : boundedHeight,\n          overflowX: \"auto\",\n          overflowY: \"auto\",\n          ...style,\n        }}\n        glassConfig={{\n          blur: 12,\n          opacity: 0.95,\n          saturation: 1.05,\n          brightness: 1.02,\n          ...glassConfig,\n        }}\n        role=\"grid\"\n        aria-label=\"Golden ratio layout grid\"\n        id={gridId}\n        {...props}\n      >\n        <div\n          ref={containerRef}\n          className=\"glass-absolute glass-inset-0\"\n          style={{\n            width: compact ? effectiveWidth : dimensions.width,\n            height: compact ? effectiveHeight : dimensions.height,\n          }}\n        >\n          {/* Golden spiral overlay */}\n          {effectiveShowRatioLines && (\n            <svg\n              className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n              width={dimensions.width}\n              height={dimensions.height}\n            >\n              <path\n                d={`M ${spiralPoints.map((p: any) => `${p.x},${p.y}`).join(\" L \")}`}\n                stroke=\"rgba(255, 215, 0, 0.3)\"\n                strokeWidth=\"2\"\n                fill=\"none\"\n                strokeDasharray=\"5,5\"\n              />\n            </svg>\n          )}\n\n          {/* Grid lines */}\n          {effectiveShowGrid && (\n            <svg\n              className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n              width={dimensions.width}\n              height={dimensions.height}\n            >\n              {sections.map((section, index) => (\n                <rect\n                  key={`grid-${index}`}\n                  x={section.x}\n                  y={section.y}\n                  width={section.width}\n                  height={section.height}\n                  stroke=\"rgba(var(--glass-color-white) / var(--glass-opacity-20))\"\n                  strokeWidth=\"1\"\n                  fill=\"none\"\n                  strokeDasharray=\"3,3\"\n                />\n              ))}\n            </svg>\n          )}\n\n          {/* Grid sections with items */}\n          <AnimatePresence>\n            {sections.map((section, index) => {\n              const hasItem = !!section.item;\n              const isHovered = hasItem && hoveredItem === section.item!.id;\n              const isSelected = hasItem && selectedItem === section.item!.id;\n\n              return (\n                <motion.div\n                  key={`section-${index}`}\n                  className={`\n                    absolute overflow-visible\n                    ${hasItem ? \"cursor-pointer\" : \"cursor-default\"}\n                  `}\n                  style={{\n                    left: section.x + spacing / 2,\n                    top: section.y + spacing / 2,\n                    width: section.width - spacing,\n                    height: section.height - spacing,\n                    boxSizing: \"border-box\",\n                  }}\n                  custom={index}\n                  variants={getItemVariants()}\n                  initial=\"hidden\"\n                  animate={\n                    isSelected ? \"selected\" : isHovered ? \"hover\" : \"visible\"\n                  }\n                  exit=\"hidden\"\n                  onMouseEnter={() => hasItem && handleItemHover(section.item!)}\n                  onMouseLeave={() => handleItemHover(null)}\n                  onClick={() => hasItem && handleItemClick(section.item!)}\n                  role=\"row\"\n                >\n                  {hasItem ? (\n                    <div\n                      className={`\n                                          w-full h-full box-border glass-surface rounded-lg border border-white/20\n                                          glass-backdrop-blur-md transition-all duration-200 p-3\n                                          flex min-w-0 min-h-0 items-center justify-center text-center\n                                          ${\n                                            isHovered || isSelected\n                                              ? \"bg-white/20 border-white/40\"\n                                              : \"bg-white/10 border-white/20\"\n                                          }\n                                        `}\n                      style={{\n                        width: \"100%\",\n                        height: \"100%\",\n                        boxSizing: \"border-box\",\n                        overflow: \"hidden\",\n                      }}\n                      role=\"gridcell\"\n                    >\n                      {section.item!.content}\n                    </div>\n                  ) : (\n                    <div\n                      className=\"glass-w-full glass-h-full glass-border glass-border-dashed glass-border-white/10 glass-radius-lg glass-flex glass-items-center glass-justify-center glass-text-primary-glass-opacity-30\"\n                      style={{\n                        width: \"100%\",\n                        height: \"100%\",\n                        boxSizing: \"border-box\",\n                        overflow: \"hidden\",\n                      }}\n                      role=\"gridcell\"\n                    >\n                      {showEmptyLabels && (\n                        <div className=\"glass-text-xs\">Empty</div>\n                      )}\n                    </div>\n                  )}\n                  {/* Section info overlay */}\n                  {(effectiveShowGrid || (isHovered && !compact)) && (\n                    <div\n                      className=\"glass-absolute glass-top-1 glass-left-1 glass-surface-dark/50 glass-text-primary glass-text-xs glass-px-1 glass-py-0.5 glass-radius glass-backdrop-blur-sm glass-contrast-guard\"\n                      data-glass-overlay=\"true\"\n                    >\n                      {section.ratio.toFixed(2)}\n                    </div>\n                  )}\n\n                  {/* Golden ratio indicator */}\n                  {Math.abs(section.ratio - goldenRatio) < 0.1 && (\n                    <div\n                      className=\"glass-absolute glass-top-1 glass-right-1 glass-w-2 glass-h-2 glass-surface-yellow glass-radius-full glass-opacity-70\"\n                      data-glass-overlay=\"true\"\n                    />\n                  )}\n                </motion.div>\n              );\n            })}\n          </AnimatePresence>\n        </div>\n\n        {/* Statistics panel */}\n        {!compact && (\n          <div className=\"glass-absolute glass-bottom-4 glass-left-4 glass-flex glass-flex-col glass-gap-1 glass-text-xs glass-text-primary-opacity-70\">\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Sections: {sections.length}\n            </div>\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Items: {items.length}\n            </div>\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Golden Ratio: {goldenRatio}\n            </div>\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Levels: {effectiveLevels}\n            </div>\n          </div>\n        )}\n\n        {/* Legend */}\n        {!compact && (\n          <div className=\"glass-absolute glass-top-4 glass-right-4 glass-flex glass-flex-col glass-gap-1 glass-text-xs glass-text-primary-opacity-70\">\n            <div className=\"glass-flex glass-items-center glass-gap-2 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              <div className=\"glass-w-2 glass-h-2 glass-surface-yellow glass-radius-full\" />\n              Golden Ratio\n            </div>\n            {effectiveShowRatioLines && (\n              <div className=\"glass-flex glass-items-center glass-gap-2 glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n                <div\n                  className=\"glass-w-4 glass-h-0-5 glass-surface-yellow glass-opacity-50\"\n                  style={{\n                    background:\n                      \"repeating-linear-gradient(to right, var(--glass-color-warning-light) 0, var(--glass-color-warning-light) 3px, transparent 3px, transparent 6px)\",\n                  }}\n                />\n                Spiral\n              </div>\n            )}\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassGoldenRatioGrid.displayName = \"GlassGoldenRatioGrid\";\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { motion } from \"framer-motion\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION, BORDER_RADIUS } from \"../../tokens/designConstants\";\n\nexport interface Island {\n  id: string;\n  content: React.ReactNode;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n  zIndex?: number;\n  category?: string;\n  pinned?: boolean;\n  minimized?: boolean;\n  resizable?: boolean;\n  draggable?: boolean;\n  connections?: string[];\n  metadata?: Record<string, unknown>;\n}\n\nexport interface IslandConnection {\n  from: string;\n  to: string;\n  type: \"solid\" | \"dashed\" | \"dotted\" | \"animated\";\n  color?: string;\n  strength?: number;\n}\n\nexport interface LayoutConfig {\n  containerPadding: number;\n  islandSpacing: number;\n  connectionDistance: number;\n  animationSpeed: number;\n  gravityStrength: number;\n  repulsionStrength: number;\n  enablePhysics: boolean;\n  enableAutoArrange: boolean;\n  enableCollisionDetection: boolean;\n}\n\nexport interface GlassIslandLayoutProps {\n  islands: Island[];\n  connections?: IslandConnection[];\n  config?: Partial<LayoutConfig>;\n  showMinimap?: boolean;\n  showConnections?: boolean;\n  showGrid?: boolean;\n  showStats?: boolean;\n  enablePhysics?: boolean;\n  enableDragging?: boolean;\n  enableResizing?: boolean;\n  enableZooming?: boolean;\n  zoomLevel?: number;\n  width?: string | number;\n  height?: string | number;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  centerOnLoad?: boolean;\n  onIslandMove?: (island: Island, x: number, y: number) => void;\n  onIslandResize?: (island: Island, width: number, height: number) => void;\n  onIslandSelect?: (island: Island) => void;\n  onConnectionCreate?: (from: string, to: string) => void;\n  className?: string;\n}\n\nconst defaultConfig: LayoutConfig = {\n  containerPadding: 50,\n  islandSpacing: 100,\n  connectionDistance: 300,\n  animationSpeed: 1.0,\n  gravityStrength: 0.02,\n  repulsionStrength: 100,\n  enablePhysics: false,\n  enableAutoArrange: false,\n  enableCollisionDetection: true,\n};\n\ninterface PhysicsIsland extends Island {\n  vx: number;\n  vy: number;\n  mass: number;\n  fixed: boolean;\n}\n\nexport const GlassIslandLayout = forwardRef<\n  HTMLDivElement,\n  GlassIslandLayoutProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      islands,\n      connections = [],\n      config = {},\n      showMinimap = true,\n      showConnections = true,\n      showGrid = false,\n      showStats = true,\n      enablePhysics = false,\n      enableDragging = true,\n      enableResizing = false,\n      enableZooming = true,\n      zoomLevel = 1.0,\n      width = \"min(1120px, calc(100vw - 48px))\",\n      height = 600,\n      compact = false,\n      contained = false,\n      maxHeight,\n      centerOnLoad = true,\n      onIslandMove,\n      onIslandResize,\n      onIslandSelect,\n      onConnectionCreate,\n      className = \"\",\n      ...props\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const [layoutIslands, setLayoutIslands] = useState<Island[]>(islands);\n    const [physicsIslands, setPhysicsIslands] = useState<PhysicsIsland[]>([]);\n    const [selectedIsland, setSelectedIsland] = useState<string | null>(null);\n    const [isDragging, setIsDragging] = useState(false);\n    const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n    const [viewportOffset, setViewportOffset] = useState({ x: 0, y: 0 });\n    const [currentZoom, setCurrentZoom] = useState(zoomLevel);\n    const [isResizing, setIsResizing] = useState<string | null>(null);\n    const [connectionMode, setConnectionMode] = useState(false);\n    const [pendingConnection, setPendingConnection] = useState<string | null>(\n      null\n    );\n\n    const containerRef = useRef<HTMLDivElement>(null);\n    const canvasRef = useRef<HTMLCanvasElement>(null);\n    const animationFrameRef = useRef<number>();\n\n    const [layoutConfig] = useState<LayoutConfig>({\n      ...defaultConfig,\n      ...config,\n    });\n\n    const id = useA11yId(\"glass-island-layout\");\n    const { shouldAnimate } = useMotionPreference();\n    const { play } = useGlassSound();\n    const effectiveHeight = maxHeight ?? (compact || contained ? 240 : height);\n    const effectiveWidth = compact ? \"100%\" : width;\n    const effectiveShowMinimap = compact ? false : showMinimap;\n    const effectiveShowStats = compact ? false : showStats;\n    const effectiveEnableZooming = compact ? false : enableZooming;\n    const effectiveShowConnections = compact ? false : showConnections;\n\n    // Auto-arrange islands in a spiral pattern\n    const autoArrange = useCallback(() => {\n      if (!layoutConfig.enableAutoArrange) return;\n\n      const arranged = islands.map((island, index) => {\n        const angle = index * 0.618 * 2 * Math.PI; // Golden angle\n        const radius = Math.sqrt(index + 1) * layoutConfig.islandSpacing;\n\n        return {\n          ...island,\n          x: Math.cos(angle) * radius + 400,\n          y: Math.sin(angle) * radius + 400,\n        };\n      });\n\n      setLayoutIslands(arranged);\n    }, [islands, layoutConfig]);\n\n    // Initialize physics islands\n    const initializePhysics = useCallback(() => {\n      if (!enablePhysics) return;\n\n      const physics = layoutIslands.map((island: any) => ({\n        ...island,\n        vx: 0,\n        vy: 0,\n        mass: (island.width * island.height) / 10000,\n        fixed: island.pinned || false,\n      }));\n\n      setPhysicsIslands(physics);\n    }, [layoutIslands, enablePhysics]);\n\n    // Physics simulation step\n    const updatePhysics = useCallback(() => {\n      if (!enablePhysics || physicsIslands.length === 0) return;\n\n      setPhysicsIslands((prevIslands) => {\n        const newIslands = prevIslands.map((island: any) => ({ ...island }));\n\n        // Apply forces between islands\n        for (let i = 0; i < newIslands.length; i++) {\n          const island1 = newIslands[i];\n          if (island1.fixed) continue;\n\n          let fx = 0;\n          let fy = 0;\n\n          for (let j = 0; j < newIslands.length; j++) {\n            if (i === j) continue;\n\n            const island2 = newIslands[j];\n            const dx =\n              island2.x + island2.width / 2 - (island1.x + island1.width / 2);\n            const dy =\n              island2.y + island2.height / 2 - (island1.y + island1.height / 2);\n            const distance = Math.sqrt(dx * dx + dy * dy);\n\n            if (distance > 0) {\n              // Repulsion force\n              const repulsion =\n                layoutConfig.repulsionStrength / (distance * distance);\n              fx -= (dx / distance) * repulsion;\n              fy -= (dy / distance) * repulsion;\n\n              // Connection attraction\n              const hasConnection = connections.some(\n                (conn) =>\n                  (conn.from === island1.id && conn.to === island2.id) ||\n                  (conn.to === island1.id && conn.from === island2.id)\n              );\n\n              if (hasConnection) {\n                const attraction = layoutConfig.gravityStrength * distance;\n                fx += (dx / distance) * attraction;\n                fy += (dy / distance) * attraction;\n              }\n            }\n          }\n\n          // Apply forces\n          island1.vx += fx / island1.mass;\n          island1.vy += fy / island1.mass;\n\n          // Damping\n          island1.vx *= 0.95;\n          island1.vy *= 0.95;\n\n          // Update position\n          island1.x += island1.vx * layoutConfig.animationSpeed;\n          island1.y += island1.vy * layoutConfig.animationSpeed;\n\n          // Boundary constraints\n          if (island1.x < layoutConfig.containerPadding) {\n            island1.x = layoutConfig.containerPadding;\n            island1.vx = 0;\n          }\n          if (island1.y < layoutConfig.containerPadding) {\n            island1.y = layoutConfig.containerPadding;\n            island1.vy = 0;\n          }\n        }\n\n        return newIslands;\n      });\n    }, [enablePhysics, physicsIslands, connections, layoutConfig]);\n\n    // Physics animation loop\n    useEffect(() => {\n      if (!enablePhysics) return;\n\n      const animate = () => {\n        updatePhysics();\n        animationFrameRef.current = requestAnimationFrame(animate);\n      };\n\n      animationFrameRef.current = requestAnimationFrame(animate);\n\n      return () => {\n        if (animationFrameRef.current) {\n          cancelAnimationFrame(animationFrameRef.current);\n        }\n      };\n    }, [enablePhysics, updatePhysics]);\n\n    // Update layout islands from physics\n    useEffect(() => {\n      if (enablePhysics && physicsIslands.length > 0) {\n        setLayoutIslands(physicsIslands);\n      }\n    }, [physicsIslands, enablePhysics]);\n\n    // Draw connections on canvas\n    const drawConnections = useCallback(() => {\n      if (!effectiveShowConnections || !canvasRef.current) return;\n\n      const canvas = canvasRef.current;\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n      ctx.save();\n      ctx.scale(currentZoom, currentZoom);\n      ctx.translate(viewportOffset.x, viewportOffset.y);\n\n      connections.forEach((connection: any) => {\n        const fromIsland = layoutIslands.find((i) => i.id === connection.from);\n        const toIsland = layoutIslands.find((i) => i.id === connection.to);\n\n        if (!fromIsland || !toIsland) return;\n\n        const fromX = fromIsland.x + fromIsland.width / 2;\n        const fromY = fromIsland.y + fromIsland.height / 2;\n        const toX = toIsland.x + toIsland.width / 2;\n        const toY = toIsland.y + toIsland.height / 2;\n\n        ctx.strokeStyle = connection.color || \"var(--glass-bg-hover)\";\n        ctx.lineWidth = (connection.strength || 1) * 2;\n\n        if (connection.type === \"dashed\") {\n          ctx.setLineDash([5, 5]);\n        } else if (connection.type === \"dotted\") {\n          ctx.setLineDash([2, 3]);\n        } else {\n          ctx.setLineDash([]);\n        }\n\n        ctx.beginPath();\n        ctx.moveTo(fromX, fromY);\n\n        // Curved connection\n        const controlX = (fromX + toX) / 2;\n        const controlY = Math.min(fromY, toY) - Math.abs(toX - fromX) / 4;\n        ctx.quadraticCurveTo(controlX, controlY, toX, toY);\n\n        ctx.stroke();\n\n        // Draw arrow\n        const angle = Math.atan2(toY - controlY, toX - controlX);\n        const arrowLength = 10;\n\n        ctx.fillStyle = connection.color || \"var(--glass-border-hover)\";\n        ctx.beginPath();\n        ctx.moveTo(toX, toY);\n        ctx.lineTo(\n          toX - arrowLength * Math.cos(angle - Math.PI / 6),\n          toY - arrowLength * Math.sin(angle - Math.PI / 6)\n        );\n        ctx.lineTo(\n          toX - arrowLength * Math.cos(angle + Math.PI / 6),\n          toY - arrowLength * Math.sin(angle + Math.PI / 6)\n        );\n        ctx.closePath();\n        ctx.fill();\n      });\n\n      ctx.restore();\n    }, [\n      effectiveShowConnections,\n      connections,\n      layoutIslands,\n      currentZoom,\n      viewportOffset,\n    ]);\n\n    // Handle island dragging\n    const handleMouseDown = useCallback(\n      (e: React.MouseEvent, island: Island) => {\n        if (!enableDragging) return;\n\n        setIsDragging(true);\n        setSelectedIsland(island.id);\n        setDragOffset({\n          x: e.clientX - island.x * currentZoom,\n          y: e.clientY - island.y * currentZoom,\n        });\n\n        if (connectionMode) {\n          if (pendingConnection) {\n            // Create connection\n            onConnectionCreate?.(pendingConnection, island.id);\n            setPendingConnection(null);\n            setConnectionMode(false);\n            play(\"connect\");\n          } else {\n            setPendingConnection(island.id);\n          }\n          return;\n        }\n\n        onIslandSelect?.(island);\n        play(\"select\");\n      },\n      [\n        enableDragging,\n        currentZoom,\n        connectionMode,\n        pendingConnection,\n        onConnectionCreate,\n        onIslandSelect,\n        play,\n      ]\n    );\n\n    const handleMouseMove = useCallback(\n      (e: React.MouseEvent) => {\n        if (!isDragging || !selectedIsland) return;\n\n        const newX = (e.clientX - dragOffset.x) / currentZoom;\n        const newY = (e.clientY - dragOffset.y) / currentZoom;\n\n        setLayoutIslands((prev: any) =>\n          prev.map((island: any) =>\n            island.id === selectedIsland\n              ? { ...island, x: newX, y: newY }\n              : island\n          )\n        );\n\n        // Update physics island if physics is enabled\n        if (enablePhysics) {\n          setPhysicsIslands((prev: any) =>\n            prev.map((island: any) =>\n              island.id === selectedIsland\n                ? { ...island, x: newX, y: newY, vx: 0, vy: 0 }\n                : island\n            )\n          );\n        }\n\n        const island = layoutIslands.find((i) => i.id === selectedIsland);\n        if (island) {\n          onIslandMove?.(island, newX, newY);\n        }\n      },\n      [\n        isDragging,\n        selectedIsland,\n        dragOffset,\n        currentZoom,\n        enablePhysics,\n        layoutIslands,\n        onIslandMove,\n      ]\n    );\n\n    const handleMouseUp = useCallback(() => {\n      setIsDragging(false);\n      setSelectedIsland(null);\n      setIsResizing(null);\n    }, []);\n\n    // Center view on load\n    useEffect(() => {\n      if (centerOnLoad && layoutIslands.length > 0 && containerRef.current) {\n        const bounds = layoutIslands.reduce(\n          (acc, island) => ({\n            minX: Math.min(acc.minX, island.x),\n            minY: Math.min(acc.minY, island.y),\n            maxX: Math.max(acc.maxX, island.x + island.width),\n            maxY: Math.max(acc.maxY, island.y + island.height),\n          }),\n          { minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity }\n        );\n\n        const centerX = (bounds.minX + bounds.maxX) / 2;\n        const centerY = (bounds.minY + bounds.maxY) / 2;\n        const containerRect = containerRef.current.getBoundingClientRect();\n\n        setViewportOffset({\n          x: containerRect.width / 2 - centerX * currentZoom,\n          y: containerRect.height / 2 - centerY * currentZoom,\n        });\n      }\n    }, [centerOnLoad, layoutIslands, currentZoom]);\n\n    // Initialize\n    useEffect(() => {\n      setLayoutIslands(islands);\n      if (layoutConfig.enableAutoArrange) {\n        autoArrange();\n      }\n    }, [islands, autoArrange, layoutConfig.enableAutoArrange]);\n\n    useEffect(() => {\n      initializePhysics();\n    }, [initializePhysics]);\n\n    useEffect(() => {\n      drawConnections();\n    }, [drawConnections]);\n\n    // Event listeners\n    useEffect(() => {\n      document.addEventListener(\"mousemove\", handleMouseMove as any);\n      document.addEventListener(\"mouseup\", handleMouseUp);\n\n      return () => {\n        document.removeEventListener(\"mousemove\", handleMouseMove as any);\n        document.removeEventListener(\"mouseup\", handleMouseUp);\n      };\n    }, [handleMouseMove, handleMouseUp]);\n\n    const Minimap = () => {\n      const minimapScale = 0.1;\n      const minimapWidth = 200;\n      const minimapHeight = 150;\n\n      return (\n        <div\n          className=\"glass-island-layout-minimap glass-absolute glass-right-4 glass-w-50 glass-h-38 glass-surface-dark/50 glass-border glass-border-white/20 glass-radius-lg glass-p-2\"\n          style={{ top: 96 }}\n        >\n          <div className=\"glass-text-xs glass-text-primary-opacity-70 glass-mb-1\">\n            Overview\n          </div>\n          <div\n            className=\"glass-relative glass-surface-dark/30 glass-radius\"\n            style={{ width: minimapWidth, height: minimapHeight }}\n          >\n            {layoutIslands.map((island: any) => (\n              <div\n                key={`mini-${island.id}`}\n                className={`absolute rounded ${\n                  selectedIsland === island.id ? \"bg-blue-400\" : \"bg-white/40\"\n                }`}\n                style={{\n                  left: island.x * minimapScale,\n                  top: island.y * minimapScale,\n                  width: Math.max(2, island.width * minimapScale),\n                  height: Math.max(2, island.height * minimapScale),\n                }}\n              />\n            ))}\n\n            {/* Viewport indicator */}\n            <div\n              className=\"glass-absolute glass-border glass-border-blue glass-pointer-events-none\"\n              style={{\n                left: (-viewportOffset.x * minimapScale) / currentZoom,\n                top: (-viewportOffset.y * minimapScale) / currentZoom,\n                width: (200 * minimapScale) / currentZoom,\n                height: (150 * minimapScale) / currentZoom,\n              }}\n            />\n          </div>\n        </div>\n      );\n    };\n\n    const StatsPanel = () => (\n      <div\n        className={`\n        absolute bottom-4 left-4 p-3 rounded-lg border border-white/10\n        ${createGlassStyle({ blur: \"sm\", opacity: 0.8 }).background}\n      `}\n      >\n        <div className=\"glass-text-xs glass-text-primary-glass-opacity-90 glass-space-y-1\">\n          <div>Islands: {layoutIslands.length}</div>\n          <div>Connections: {connections.length}</div>\n          <div>Zoom: {Math.round(currentZoom * 100)}%</div>\n          {enablePhysics && <div>Physics: ON</div>}\n        </div>\n      </div>\n    );\n\n    const Controls = () => (\n      <div\n        className=\"glass-island-layout-controls glass-absolute glass-left-4 glass-flex glass-flex-col glass-space-y-2\"\n        style={{ top: 96 }}\n      >\n        <motion.button\n          className=\"glass-p-2 glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-border glass-border-white/20 glass-radius-lg glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          whileHover={shouldAnimate ? { scale: 1.05 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.95 } : {}}\n          onClick={() => setCurrentZoom((prev: any) => Math.min(3, prev * 1.2))}\n        >\n          \uD83D\uDD0D+\n        </motion.button>\n\n        <motion.button\n          className=\"glass-p-2 glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-border glass-border-white/20 glass-radius-lg glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          whileHover={shouldAnimate ? { scale: 1.05 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.95 } : {}}\n          onClick={() =>\n            setCurrentZoom((prev: any) => Math.max(0.2, prev / 1.2))\n          }\n        >\n          \uD83D\uDD0D-\n        </motion.button>\n\n        <motion.button\n          className={`p-2 border border-white/20 ${BORDER_RADIUS.lg} text-white transition-colors glass-focus glass-touch-target glass-contrast-guard ${\n            connectionMode ? \"bg-blue-500/50\" : \"bg-white/10 hover:bg-white/20\"\n          }`}\n          whileHover={shouldAnimate ? { scale: 1.05 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.95 } : {}}\n          onClick={() => setConnectionMode(!connectionMode)}\n        >\n          \uD83D\uDD17\n        </motion.button>\n\n        <motion.button\n          className=\"glass-p-2 glass-surface-subtle/10 hover:glass-surface-subtle/20 glass-border glass-border-white/20 glass-radius-lg glass-text-primary glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n          whileHover={shouldAnimate ? { scale: 1.05 } : {}}\n          whileTap={shouldAnimate ? { scale: 0.95 } : {}}\n          onClick={autoArrange}\n        >\n          \u26A1\n        </motion.button>\n      </div>\n    );\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        variant=\"frosted\"\n        className={`glass-island-layout relative overflow-auto ${className}`}\n        style={{\n          width: effectiveWidth,\n          maxWidth: \"100%\",\n          height:\n            typeof effectiveHeight === \"number\"\n              ? `${effectiveHeight}px`\n              : effectiveHeight,\n          maxHeight:\n            typeof effectiveHeight === \"number\"\n              ? `${effectiveHeight}px`\n              : effectiveHeight,\n          overflowX: \"auto\",\n          overflowY: \"auto\",\n        }}\n        {...props}\n      >\n        {/* Header */}\n        {!compact && (\n          <div className=\"glass-absolute glass-top-0 glass-left-0 glass-right-0 glass-p-4 glass-z-10\">\n            <div className=\"glass-flex glass-items-center glass-justify-between\">\n              <div>\n                <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary-glass-opacity-90\">\n                  Island Layout\n                </h3>\n                <p className=\"glass-text-sm glass-text-primary-glass-opacity-60\">\n                  Floating content islands with connections\n                </p>\n              </div>\n\n              {connectionMode && (\n                <div className=\"glass-px-3 glass-py-1 glass-surface-blue/20 glass-border glass-border-blue/50 glass-radius-lg glass-text-secondary glass-text-sm\">\n                  {pendingConnection\n                    ? \"Select target island\"\n                    : \"Select source island\"}\n                </div>\n              )}\n            </div>\n          </div>\n        )}\n\n        {/* Main container */}\n        <div\n          ref={containerRef}\n          className=\"glass-absolute glass-inset-0 glass-overflow-visible glass-cursor-move\"\n          style={{\n            width: 2000,\n            height: 2000,\n            transform: `scale(${currentZoom}) translate(${viewportOffset.x}px, ${viewportOffset.y}px)`,\n            transformOrigin: \"0 0\",\n          }}\n        >\n          {/* Grid background */}\n          {showGrid && (\n            <div\n              className=\"glass-absolute glass-inset-0 glass-opacity-10\"\n              style={{\n                backgroundImage: `\n                  linear-gradient(var(--glass-bg-default) 1px, transparent 1px),\n                  linear-gradient(90deg, var(--glass-bg-default) 1px, transparent 1px)\n                `,\n                backgroundSize: \"50px 50px\",\n              }}\n            />\n          )}\n\n          {/* Canvas for connections */}\n          <canvas\n            ref={canvasRef}\n            data-glass-overlay=\"true\"\n            className=\"glass-absolute glass-inset-0 glass-pointer-events-none\"\n            width={2000}\n            height={2000}\n          />\n\n          {/* Islands */}\n          {layoutIslands.map((island, index) => (\n            <motion.div\n              key={island.id}\n              className={`absolute cursor-pointer transition-all duration-[${ANIMATION.DURATION.fast}ms] ${\n                selectedIsland === island.id ? \"ring-2 ring-blue-400\" : \"\"\n              } ${island.minimized ? \"opacity-50\" : \"\"}`}\n              style={{\n                left: island.x,\n                top: island.y,\n                width: island.width,\n                height: island.minimized ? 40 : island.height,\n                zIndex:\n                  island.zIndex ||\n                  (selectedIsland === island.id ? 1000 : index),\n              }}\n              initial={shouldAnimate ? { opacity: 0, scale: 0.8 } : false}\n              animate={prefersReducedMotion ? {} : { opacity: 1, scale: 1 }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: ANIMATION.DURATION.normal / 1000 }\n              }\n              onMouseDown={(e) => handleMouseDown(e, island)}\n            >\n              <OptimizedGlass\n                variant=\"frosted\"\n                className={`w-full h-full box-border p-4 hover:bg-white/10 transition-all duration-[${ANIMATION.DURATION.fast}ms] ${\n                  island.pinned ? \"border-yellow-400/50\" : \"\"\n                } ${connectionMode ? \"hover:border-blue-400\" : \"\"}`}\n                style={{ boxSizing: \"border-box\", overflow: \"hidden\" }}\n              >\n                {!island.minimized && island.content}\n\n                {/* Island controls */}\n                <div\n                  className=\"glass-absolute glass-top-2 glass-right-2 glass-flex glass-space-x-1 glass-opacity-0 glass-hover-opacity-100 glass-transition-opacity\"\n                  data-glass-overlay=\"true\"\n                >\n                  {island.category && (\n                    <span className=\"glass-px-2 glass-py-1 glass-surface-dark/30 glass-text-primary-opacity-70 glass-radius glass-text-xs\">\n                      {island.category}\n                    </span>\n                  )}\n\n                  <button\n                    tabIndex={-1}\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      setLayoutIslands((prev: any) =>\n                        prev.map((i: any) =>\n                          i.id === island.id\n                            ? { ...i, minimized: !i.minimized }\n                            : i\n                        )\n                      );\n                    }}\n                    className=\"glass-w-6 glass-h-6 glass-surface-subtle/20 hover:glass-surface-subtle/30 glass-radius glass-text-primary-glass-opacity-80 glass-text-xs glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    {island.minimized ? \"\u25A1\" : \"_\"}\n                  </button>\n                </div>\n\n                {/* Resize handle */}\n                {enableResizing && !island.minimized && (\n                  <div\n                    className=\"glass-absolute glass-bottom-0 glass-right-0 glass-w-4 glass-h-4 glass-surface-subtle/20 glass-cursor-se-resize glass-opacity-0 glass-hover-opacity-100 glass-transition-opacity\"\n                    onMouseDown={(e) => {\n                      e.stopPropagation();\n                      setIsResizing(island.id);\n                    }}\n                  >\n                    \u22EE\u22EE\n                  </div>\n                )}\n              </OptimizedGlass>\n            </motion.div>\n          ))}\n        </div>\n\n        {/* Controls */}\n        {effectiveEnableZooming && <Controls />}\n\n        {/* Minimap */}\n        {effectiveShowMinimap && <Minimap />}\n\n        {/* Stats */}\n        {effectiveShowStats && <StatsPanel />}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassIslandLayout.displayName = \"GlassIslandLayout\";\n", "\"use client\";\nimport {\n  AnimatePresence,\n  motion,\n  useMotionValue,\n  useTransform,\n} from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\n\nexport interface OrbitalMenuItem {\n  id: string;\n  label: string;\n  icon?: React.ReactNode;\n  onClick?: () => void;\n  disabled?: boolean;\n  shortcut?: string;\n  category?: string;\n  priority?: number;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface GlassOrbitalMenuProps {\n  items: OrbitalMenuItem[];\n  centerElement?: React.ReactNode;\n  radius?: number;\n  itemSize?: number;\n  isOpen?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  rotationSpeed?: number;\n  autoRotate?: boolean;\n  hoverExpansion?: number;\n  springTension?: number;\n  springFriction?: number;\n  glassConfig?: {\n    blur?: number;\n    opacity?: number;\n    saturation?: number;\n    brightness?: number;\n    contrast?: number;\n  };\n  soundEnabled?: boolean;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport const GlassOrbitalMenu = forwardRef<\n  HTMLDivElement,\n  GlassOrbitalMenuProps\n>(\n  (\n    {\n      items = [],\n      centerElement,\n      radius = 120,\n      itemSize = 48,\n      isOpen = false,\n      onOpenChange,\n      rotationSpeed = 0.5,\n      autoRotate = false,\n      hoverExpansion = 1.2,\n      springTension = 300,\n      springFriction = 25,\n      glassConfig = {},\n      soundEnabled = true,\n      className = \"\",\n      style = {},\n      ...props\n    },\n    ref\n  ) => {\n    const [activeItem, setActiveItem] = useState<string | null>(null);\n    const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n    const [rotation, setRotation] = useState(0);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const animationRef = useRef<number>();\n\n    const { prefersReducedMotion } = useMotionPreference();\n    const menuId = useA11yId();\n    const { play } = useGlassSound();\n\n    const rotationValue = useMotionValue(0);\n    const rotationTransform = useTransform(rotationValue, [0, 360], [0, 360]);\n\n    useEffect(() => {\n      if (autoRotate && isOpen && !prefersReducedMotion) {\n        const animate = () => {\n          setRotation((prev: any) => (prev + rotationSpeed) % 360);\n          rotationValue.set(rotation);\n          animationRef.current = requestAnimationFrame(animate);\n        };\n        animationRef.current = requestAnimationFrame(animate);\n      }\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [\n      autoRotate,\n      isOpen,\n      rotationSpeed,\n      prefersReducedMotion,\n      rotation,\n      rotationValue,\n    ]);\n\n    const handleCenterClick = useCallback(() => {\n      onOpenChange?.(!isOpen);\n      if (soundEnabled) {\n        play(\"tap\");\n      }\n    }, [isOpen, onOpenChange, soundEnabled, play]);\n\n    const handleItemClick = useCallback(\n      (item: OrbitalMenuItem) => {\n        if (item.disabled) return;\n\n        setActiveItem(item.id);\n        item.onClick?.();\n\n        if (soundEnabled) {\n          play(\"tap\");\n        }\n\n        setTimeout(() => setActiveItem(null), 200);\n      },\n      [soundEnabled, play]\n    );\n\n    const handleItemHover = useCallback(\n      (itemId: string | null) => {\n        setHoveredItem(itemId);\n        if (soundEnabled && itemId) {\n          play(\"hover\");\n        }\n      },\n      [soundEnabled, play]\n    );\n\n    const calculateItemPosition = useCallback(\n      (index: number, total: number) => {\n        const angle = ((360 / total) * index + rotation) * (Math.PI / 180);\n        const x = Math.cos(angle) * radius;\n        const y = Math.sin(angle) * radius;\n        return { x, y, angle: angle * (180 / Math.PI) };\n      },\n      [radius, rotation]\n    );\n\n    const getItemVariants = () => ({\n      hidden: {\n        scale: 0,\n        opacity: 0,\n        x: 0,\n        y: 0,\n      },\n      visible: (i: number) => ({\n        scale: 1,\n        opacity: 1,\n        x: calculateItemPosition(i, items.length).x,\n        y: calculateItemPosition(i, items.length).y,\n        transition: {\n          type: \"spring\",\n          tension: springTension,\n          friction: springFriction,\n          delay: prefersReducedMotion ? 0 : i * 0.1,\n        },\n      }),\n      hover: {\n        scale: hoverExpansion,\n        transition: {\n          type: \"spring\",\n          tension: springTension * 2,\n          friction: springFriction,\n        },\n      },\n      active: {\n        scale: 0.9,\n        transition: {\n          type: \"spring\",\n          tension: springTension * 3,\n          friction: springFriction,\n        },\n      },\n    });\n\n    const centerVariants = {\n      closed: {\n        rotate: 0,\n        scale: 1,\n      },\n      open: {\n        rotate: prefersReducedMotion ? 0 : 180,\n        scale: 1.1,\n        transition: {\n          type: \"spring\",\n          tension: springTension,\n          friction: springFriction,\n        },\n      },\n    };\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        className={`glass-orbital-menu relative ${className}`}\n        style={{\n          width: (radius + itemSize) * 2 + 40,\n          height: (radius + itemSize) * 2 + 40,\n          ...style,\n        }}\n        glassConfig={{\n          blur: 20,\n          opacity: 0.8,\n          saturation: 1.2,\n          brightness: 1.1,\n          ...glassConfig,\n        }}\n        aria-label=\"Orbital navigation menu\"\n        role=\"toolbar\"\n        id={menuId}\n        {...props}\n      >\n        <div\n          ref={containerRef}\n          className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n        >\n          {/* Center Button */}\n          <motion.button\n            className=\"glass-relative glass-z-20 glass-flex glass-items-center glass-justify-center glass-surface glass-radius-full glass-border glass-border-white/20 glass-backdrop-blur-md glass-surface-subtle/10 hover:glass-surface-subtle/15 glass-transition-colors glass-contrast-guard\"\n            style={{\n              width: itemSize + 8,\n              height: itemSize + 8,\n            }}\n            variants={centerVariants}\n            animate={isOpen ? \"open\" : \"closed\"}\n            onClick={handleCenterClick}\n            aria-expanded={isOpen}\n            aria-controls={`${menuId}-items`}\n            aria-label={isOpen ? \"Close menu\" : \"Open menu\"}\n          >\n            {centerElement || (\n              <motion.div\n                className=\"glass-w-6 glass-h-6 glass-flex glass-flex-col glass-items-center glass-justify-center\"\n                animate={{ rotate: isOpen ? 45 : 0 }}\n              >\n                <div className=\"glass-w-4 glass-h-0-5 glass-surface-subtle/70 glass-mb-1\" />\n                <div className=\"glass-w-4 glass-h-0-5 glass-surface-subtle/70\" />\n              </motion.div>\n            )}\n          </motion.button>\n\n          {/* Orbital Items */}\n          <div\n            id={`${menuId}-items`}\n            className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center glass-pointer-events-none\"\n            role=\"group\"\n          >\n            <AnimatePresence>\n              {isOpen &&\n                items.map((item, index) => {\n                  const position = calculateItemPosition(index, items.length);\n                  const isHovered = hoveredItem === item.id;\n                  const isActive = activeItem === item.id;\n\n                  return (\n                    <motion.div\n                      key={item.id}\n                      className=\"glass-absolute glass-pointer-events-auto\"\n                      custom={index}\n                      variants={getItemVariants()}\n                      initial={prefersReducedMotion ? false : \"hidden\"}\n                      animate={prefersReducedMotion ? false : \"visible\"}\n                      exit=\"hidden\"\n                      whileHover={\n                        !prefersReducedMotion && !item.disabled\n                          ? \"hover\"\n                          : undefined\n                      }\n                      style={{\n                        x: position.x,\n                        y: position.y,\n                      }}\n                    >\n                      <motion.button\n                        className={`\n                        relative flex items-center justify-center glass-surface rounded-full\n                        border border-white/20 glass-backdrop-blur-md transition-all duration-200\n                        ${\n                          item.disabled\n                            ? \"bg-white/5 text-white/40 cursor-not-allowed\"\n                            : \"bg-white/10 hover:bg-white/15 text-white/90 hover:text-white\"\n                        }\n                        ${isActive ? \"ring-2 ring-white/40\" : \"\"}\n                      `}\n                        style={{\n                          width: itemSize,\n                          height: itemSize,\n                        }}\n                        onClick={() => handleItemClick(item)}\n                        onMouseEnter={() => handleItemHover(item.id)}\n                        onMouseLeave={() => handleItemHover(null)}\n                        disabled={item.disabled}\n                        role=\"button\"\n                        aria-label={item.label}\n                        title={\n                          item.shortcut\n                            ? `${item.label} (${item.shortcut})`\n                            : item.label\n                        }\n                      >\n                        {item.icon && (\n                          <div className=\"glass-text-lg\">{item.icon}</div>\n                        )}\n\n                        {item.shortcut && (\n                          <div className=\"glass-absolute glass--top-2 glass--right-2 glass-surface-dark/50 glass-text-primary-opacity-70 glass-text-xs glass-px-1 glass-py-0.5 glass-radius glass-text-10px glass-backdrop-blur-sm glass-contrast-guard\">\n                            {item.shortcut}\n                          </div>\n                        )}\n\n                        {/* Hover Label */}\n                        <AnimatePresence>\n                          {isHovered && !prefersReducedMotion && (\n                            <motion.div\n                              className=\"glass-absolute glass-top-full glass-mt-2 glass-surface-dark/80 glass-text-primary glass-text-xs glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-whitespace-nowrap glass-contrast-guard\"\n                              initial={{ opacity: 0, y: -5 }}\n                              animate={{ opacity: 1, y: 0 }}\n                              exit={{ opacity: 0, y: -5 }}\n                              transition={{ duration: 0.15 }}\n                            >\n                              {item.label}\n                            </motion.div>\n                          )}\n                        </AnimatePresence>\n                      </motion.button>\n                    </motion.div>\n                  );\n                })}\n            </AnimatePresence>\n          </div>\n\n          {/* Orbital Ring Indicator */}\n          <AnimatePresence>\n            {isOpen && (\n              <motion.div\n                className=\"glass-absolute glass-border glass-border-white/10 glass-radius-full glass-pointer-events-none\"\n                style={{\n                  width: radius * 2,\n                  height: radius * 2,\n                }}\n                initial={{ opacity: 0, scale: 0.5 }}\n                animate={{ opacity: 1, scale: 1 }}\n                exit={{ opacity: 0, scale: 0.5 }}\n                transition={{\n                  type: \"spring\",\n                  tension: springTension,\n                  friction: springFriction,\n                }}\n              />\n            )}\n          </AnimatePresence>\n        </div>\n\n        {/* Status Display */}\n        <div className=\"glass-absolute glass-bottom-2 glass-right-2 glass-text-xs glass-text-primary-glass-opacity-60\">\n          {items.length} items\n        </div>\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassOrbitalMenu.displayName = \"GlassOrbitalMenu\";\n", "\"use client\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useMotionPreference } from \"../../hooks/useMotionPreference\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { useGlassSound } from \"../../utils/soundDesign\";\nimport {\n  ContrastGuard,\n  TextWithContrast,\n} from \"@/components/accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nexport interface TessellationTile {\n  id: string;\n  content: React.ReactNode;\n  shape: \"triangle\" | \"square\" | \"hexagon\" | \"rhombus\" | \"pentagon\" | \"octagon\";\n  size?: number;\n  rotation?: number;\n  color?: string;\n  priority?: number;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface TilePosition {\n  x: number;\n  y: number;\n  rotation: number;\n  scale: number;\n}\n\nexport interface GlassTessellationProps {\n  tiles: TessellationTile[];\n  tessellationType?:\n    | \"triangular\"\n    | \"square\"\n    | \"hexagonal\"\n    | \"rhombic\"\n    | \"pentagonal\"\n    | \"mixed\";\n  containerWidth?: number;\n  containerHeight?: number;\n  tileSize?: number;\n  spacing?: number;\n  animatePattern?: boolean;\n  morphPattern?: boolean;\n  morphSpeed?: number;\n  showGrid?: boolean;\n  interactive?: boolean;\n  onTileClick?: (tile: TessellationTile) => void;\n  onTileHover?: (tile: TessellationTile | null) => void;\n  glassConfig?: {\n    blur?: number;\n    opacity?: number;\n    saturation?: number;\n    brightness?: number;\n    contrast?: number;\n  };\n  soundEnabled?: boolean;\n  compact?: boolean;\n  contained?: boolean;\n  maxHeight?: number | string;\n  height?: number | string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nfunction parseColorToRgb(\n  color: string | undefined\n): { r: number; g: number; b: number } | null {\n  if (!color) return null;\n  const trimmed = color.trim();\n  const hex = trimmed.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);\n  if (hex) {\n    const value = hex[1];\n    const full =\n      value.length === 3\n        ? value\n            .split(\"\")\n            .map((char) => char + char)\n            .join(\"\")\n        : value;\n    return {\n      r: parseInt(full.slice(0, 2), 16),\n      g: parseInt(full.slice(2, 4), 16),\n      b: parseInt(full.slice(4, 6), 16),\n    };\n  }\n\n  const rgb = trimmed.match(\n    /^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)(?:\\s*,\\s*[\\d.]+)?\\s*\\)$/i\n  );\n  if (rgb) {\n    return {\n      r: Number(rgb[1]),\n      g: Number(rgb[2]),\n      b: Number(rgb[3]),\n    };\n  }\n\n  return null;\n}\n\nfunction getReadableTextColor(color: string | undefined) {\n  const rgb = parseColorToRgb(color);\n  if (!rgb) return \"rgba(248,250,252,0.96)\";\n  const normalize = (channel: number) => {\n    const c = channel / 255;\n    return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n  };\n  const luminance =\n    0.2126 * normalize(rgb.r) +\n    0.7152 * normalize(rgb.g) +\n    0.0722 * normalize(rgb.b);\n  return luminance > 0.48 ? \"rgba(8,13,24,0.92)\" : \"rgba(248,250,252,0.96)\";\n}\n\nexport const GlassTessellation = forwardRef<\n  HTMLDivElement,\n  GlassTessellationProps\n>(\n  (\n    {\n      // ContrastGuard layout text coverage is tracked in the manual accessibility QA report.\n\n      tiles = [],\n      tessellationType = \"hexagonal\",\n      containerWidth = 800,\n      containerHeight = 600,\n      tileSize = 60,\n      spacing = 2,\n      animatePattern = true,\n      morphPattern = false,\n      morphSpeed = 2000,\n      showGrid = false,\n      interactive = true,\n      onTileClick,\n      onTileHover,\n      glassConfig = {},\n      soundEnabled = true,\n      compact = false,\n      contained = false,\n      maxHeight,\n      height,\n      className = \"\",\n      style = {},\n      ...props\n    },\n    ref\n  ) => {\n    const [hoveredTile, setHoveredTile] = useState<string | null>(null);\n    const [selectedTile, setSelectedTile] = useState<string | null>(null);\n    const [morphPhase, setMorphPhase] = useState(0);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const animationRef = useRef<number>();\n\n    const { prefersReducedMotion } = useMotionPreference();\n    const tessellationId = useA11yId();\n    const { play } = useGlassSound();\n    const isCompactLike = compact || contained;\n    const effectiveContainerWidth = isCompactLike\n      ? Math.min(containerWidth, 320)\n      : containerWidth;\n    const effectiveContainerHeight =\n      typeof (maxHeight ?? height) === \"number\"\n        ? ((maxHeight ?? height) as number)\n        : isCompactLike\n          ? Math.min(containerHeight, 220)\n          : containerHeight;\n    const effectiveTileSize = isCompactLike ? Math.min(tileSize, 36) : tileSize;\n    const effectiveSpacing = isCompactLike ? Math.max(spacing, 6) : spacing;\n    const boundedHeight = maxHeight ?? height ?? effectiveContainerHeight;\n\n    // Morphing animation\n    useEffect(() => {\n      if (!morphPattern || prefersReducedMotion) return;\n\n      const startTime = Date.now();\n      const animate = () => {\n        const elapsed = Date.now() - startTime;\n        const phase = (elapsed / morphSpeed) % 1;\n        setMorphPhase(phase);\n        animationRef.current = requestAnimationFrame(animate);\n      };\n\n      animationRef.current = requestAnimationFrame(animate);\n      return () => {\n        if (animationRef.current) {\n          cancelAnimationFrame(animationRef.current);\n        }\n      };\n    }, [morphPattern, morphSpeed, prefersReducedMotion]);\n\n    // Generate tessellation pattern positions\n    const generateTessellationPositions = useCallback((): Map<\n      string,\n      TilePosition\n    > => {\n      const positions = new Map<string, TilePosition>();\n      const effectiveSize = effectiveTileSize + effectiveSpacing;\n\n      switch (tessellationType) {\n        case \"triangular\": {\n          // Triangular tessellation\n          const rowHeight = (effectiveSize * Math.sqrt(3)) / 2;\n          let tileIndex = 0;\n\n          for (\n            let row = 0;\n            row * rowHeight < effectiveContainerHeight &&\n            tileIndex < tiles.length;\n            row++\n          ) {\n            const cols =\n              Math.floor(effectiveContainerWidth / effectiveSize) + (row % 2);\n            const offsetX = row % 2 ? effectiveSize / 2 : 0;\n\n            for (let col = 0; col < cols && tileIndex < tiles.length; col++) {\n              const x = col * effectiveSize + offsetX;\n              const y = row * rowHeight;\n              const rotation = row % 2 ? 180 : 0;\n\n              positions.set(tiles[tileIndex].id, {\n                x,\n                y,\n                rotation,\n                scale: 1,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n\n        case \"square\": {\n          // Square tessellation\n          let tileIndex = 0;\n          const cols = Math.floor(effectiveContainerWidth / effectiveSize);\n          const rows = Math.floor(effectiveContainerHeight / effectiveSize);\n\n          for (let row = 0; row < rows && tileIndex < tiles.length; row++) {\n            for (let col = 0; col < cols && tileIndex < tiles.length; col++) {\n              const x = col * effectiveSize;\n              const y = row * effectiveSize;\n\n              positions.set(tiles[tileIndex].id, {\n                x,\n                y,\n                rotation: 0,\n                scale: 1,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n\n        case \"hexagonal\": {\n          // Hexagonal tessellation\n          const hexWidth = effectiveSize * Math.sqrt(3);\n          const hexHeight = effectiveSize * 2;\n          let tileIndex = 0;\n\n          for (\n            let row = 0;\n            row * hexHeight * 0.75 < effectiveContainerHeight &&\n            tileIndex < tiles.length;\n            row++\n          ) {\n            const cols = Math.floor(effectiveContainerWidth / hexWidth) + 1;\n            const offsetX = row % 2 ? hexWidth / 2 : 0;\n\n            for (let col = 0; col < cols && tileIndex < tiles.length; col++) {\n              const x = col * hexWidth + offsetX;\n              const y = row * hexHeight * 0.75;\n\n              positions.set(tiles[tileIndex].id, {\n                x,\n                y,\n                rotation: 0,\n                scale: 1,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n\n        case \"rhombic\": {\n          // Rhombic tessellation\n          const rhombWidth = effectiveSize * 1.5;\n          const rhombHeight = effectiveSize;\n          let tileIndex = 0;\n\n          for (\n            let row = 0;\n            row * rhombHeight < effectiveContainerHeight &&\n            tileIndex < tiles.length;\n            row++\n          ) {\n            const cols = Math.floor(effectiveContainerWidth / rhombWidth) + 1;\n            const offsetX = row % 2 ? rhombWidth / 2 : 0;\n\n            for (let col = 0; col < cols && tileIndex < tiles.length; col++) {\n              const x = col * rhombWidth + offsetX;\n              const y = row * rhombHeight;\n              const rotation = (row + col) % 2 ? 45 : -45;\n\n              positions.set(tiles[tileIndex].id, {\n                x,\n                y,\n                rotation,\n                scale: 1,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n\n        case \"pentagonal\": {\n          // Pentagonal tessellation (approximation)\n          const pentSize = effectiveSize * 0.8;\n          let tileIndex = 0;\n\n          for (\n            let row = 0;\n            row * pentSize < effectiveContainerHeight &&\n            tileIndex < tiles.length;\n            row++\n          ) {\n            const cols = Math.floor(effectiveContainerWidth / pentSize) + 1;\n            const offsetX = row % 2 ? pentSize / 2 : 0;\n            const offsetY = row % 3 ? pentSize / 3 : 0;\n\n            for (let col = 0; col < cols && tileIndex < tiles.length; col++) {\n              const x = col * pentSize + offsetX;\n              const y = row * pentSize + offsetY;\n              const rotation = (row * col * 72) % 360;\n\n              positions.set(tiles[tileIndex].id, {\n                x,\n                y,\n                rotation,\n                scale: 1,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n\n        case \"mixed\": {\n          // Mixed tessellation pattern\n          let tileIndex = 0;\n          const baseSize = effectiveSize * 0.7;\n\n          for (\n            let y = 0;\n            y < effectiveContainerHeight - baseSize && tileIndex < tiles.length;\n            y += baseSize\n          ) {\n            for (\n              let x = 0;\n              x < effectiveContainerWidth - baseSize &&\n              tileIndex < tiles.length;\n              x += baseSize\n            ) {\n              const variation = Math.sin(\n                x * 0.01 + y * 0.01 + morphPhase * Math.PI * 2\n              );\n              const scale = 0.8 + variation * 0.4;\n              const rotation = variation * 60;\n\n              positions.set(tiles[tileIndex].id, {\n                x: x + variation * 20,\n                y: y + variation * 20,\n                rotation,\n                scale,\n              });\n              tileIndex++;\n            }\n          }\n          break;\n        }\n      }\n\n      return positions;\n    }, [\n      tessellationType,\n      tiles,\n      effectiveTileSize,\n      effectiveSpacing,\n      effectiveContainerWidth,\n      effectiveContainerHeight,\n      morphPhase,\n    ]);\n\n    const tilePositions = useMemo(\n      () => generateTessellationPositions(),\n      [generateTessellationPositions]\n    );\n    const visualInset = Math.max(effectiveTileSize, 24);\n    const svgViewBox = `${-visualInset} ${-visualInset} ${effectiveContainerWidth + visualInset * 2} ${effectiveContainerHeight + visualInset * 2}`;\n\n    const handleTileClick = useCallback(\n      (tile: TessellationTile) => {\n        setSelectedTile(tile.id);\n        onTileClick?.(tile);\n\n        if (soundEnabled) {\n          play(\"tap\");\n        }\n\n        setTimeout(() => setSelectedTile(null), ANIMATION.DURATION.normal);\n      },\n      [onTileClick, soundEnabled, play]\n    );\n\n    const handleTileHover = useCallback(\n      (tile: TessellationTile | null) => {\n        setHoveredTile(tile?.id || null);\n        onTileHover?.(tile);\n\n        if (soundEnabled && tile) {\n          play(\"hover\");\n        }\n      },\n      [onTileHover, soundEnabled, play]\n    );\n\n    const renderTileShape = (\n      tile: TessellationTile,\n      position: TilePosition\n    ) => {\n      const isHovered = hoveredTile === tile.id;\n      const isSelected = selectedTile === tile.id;\n      const effectiveSize = effectiveTileSize * position.scale;\n      const tileFill =\n        tile.color ??\n        (isHovered || isSelected\n          ? \"rgba(125,211,252,0.44)\"\n          : \"rgba(125,211,252,0.30)\");\n      const tileStroke =\n        isHovered || isSelected\n          ? \"rgba(248,250,252,0.72)\"\n          : \"rgba(248,250,252,0.36)\";\n      const textColor = getReadableTextColor(tileFill);\n\n      const shapeProps = {\n        className: \"transition-all cursor-pointer\",\n        fill: tileFill,\n        stroke: tileStroke,\n        strokeWidth: 1.5,\n      };\n\n      const pathCommands = {\n        triangle: `M ${effectiveSize / 2} 0 L ${effectiveSize} ${(effectiveSize * Math.sqrt(3)) / 2} L 0 ${(effectiveSize * Math.sqrt(3)) / 2} Z`,\n        square: `M 0 0 L ${effectiveSize} 0 L ${effectiveSize} ${effectiveSize} L 0 ${effectiveSize} Z`,\n        hexagon: (() => {\n          const points = [];\n          for (let i = 0; i < 6; i++) {\n            const angle = (i * Math.PI) / 3;\n            const x = effectiveSize / 2 + (effectiveSize / 2) * Math.cos(angle);\n            const y = effectiveSize / 2 + (effectiveSize / 2) * Math.sin(angle);\n            points.push(`${x} ${y}`);\n          }\n          return `M ${points.join(\" L \")} Z`;\n        })(),\n        rhombus: `M ${effectiveSize / 2} 0 L ${effectiveSize} ${effectiveSize / 2} L ${effectiveSize / 2} ${effectiveSize} L 0 ${effectiveSize / 2} Z`,\n        pentagon: (() => {\n          const points = [];\n          for (let i = 0; i < 5; i++) {\n            const angle = (i * 2 * Math.PI) / 5 - Math.PI / 2;\n            const x = effectiveSize / 2 + (effectiveSize / 2) * Math.cos(angle);\n            const y = effectiveSize / 2 + (effectiveSize / 2) * Math.sin(angle);\n            points.push(`${x} ${y}`);\n          }\n          return `M ${points.join(\" L \")} Z`;\n        })(),\n        octagon: (() => {\n          const points = [];\n          for (let i = 0; i < 8; i++) {\n            const angle = (i * Math.PI) / 4;\n            const x = effectiveSize / 2 + (effectiveSize / 2) * Math.cos(angle);\n            const y = effectiveSize / 2 + (effectiveSize / 2) * Math.sin(angle);\n            points.push(`${x} ${y}`);\n          }\n          return `M ${points.join(\" L \")} Z`;\n        })(),\n      };\n\n      return (\n        <g>\n          <path\n            d={pathCommands[tile.shape] || pathCommands.hexagon}\n            {...shapeProps}\n          />\n          <foreignObject\n            x=\"0\"\n            y=\"0\"\n            width={effectiveSize}\n            height={effectiveSize}\n            className=\"glass-pointer-events-none\"\n          >\n            <div\n              className=\"glass-w-full glass-h-full glass-flex glass-items-center glass-justify-center glass-text-xs\"\n              style={{\n                color: textColor,\n                fontWeight: 650,\n                textShadow: textColor.startsWith(\"rgba(8\")\n                  ? \"0 1px 2px rgba(255,255,255,0.18)\"\n                  : \"0 1px 2px rgba(0,0,0,0.45)\",\n              }}\n            >\n              {tile.content}\n            </div>\n          </foreignObject>\n        </g>\n      );\n    };\n\n    const getTileVariants = () => ({\n      hidden: {\n        scale: 0,\n        opacity: 0,\n        rotate: -180,\n      },\n      visible: (delay: number) => ({\n        scale: 1,\n        opacity: 1,\n        rotate: 0,\n        transition: {\n          type: \"spring\",\n          tension: 300,\n          friction: 25,\n          delay: prefersReducedMotion ? 0 : delay * 0.02,\n        },\n      }),\n      hover: {\n        scale: 1.05,\n        transition: {\n          type: \"spring\",\n          tension: 400,\n          friction: 20,\n        },\n      },\n      selected: {\n        scale: 1.1,\n        transition: {\n          type: \"spring\",\n          tension: 500,\n          friction: 15,\n        },\n      },\n    });\n\n    return (\n      <OptimizedGlass\n        ref={ref}\n        className={`glass-tessellation relative overflow-auto ${className}`}\n        style={{\n          width: isCompactLike\n            ? \"100%\"\n            : `min(${effectiveContainerWidth}px, calc(100vw - 48px))`,\n          maxWidth: \"100%\",\n          height:\n            typeof boundedHeight === \"number\"\n              ? `${boundedHeight}px`\n              : boundedHeight,\n          maxHeight:\n            isCompactLike || maxHeight !== undefined || height !== undefined\n              ? typeof boundedHeight === \"number\"\n                ? `${boundedHeight}px`\n                : boundedHeight\n              : undefined,\n          minWidth: isCompactLike ? undefined : Math.min(containerWidth, 320),\n          overflowX: isCompactLike ? \"hidden\" : \"auto\",\n          overflowY: isCompactLike ? \"hidden\" : \"auto\",\n          boxSizing: \"border-box\",\n          ...style,\n        }}\n        glassConfig={{\n          blur: 10,\n          opacity: 0.95, // Using opacity value for glass effect\n          saturation: 1.1,\n          brightness: 1.05,\n          ...glassConfig,\n        }}\n        role=\"application\"\n        aria-label={`${tessellationType} tessellation pattern`}\n        id={tessellationId}\n        {...props}\n      >\n        <div\n          ref={containerRef}\n          className=\"glass-relative\"\n          style={{\n            width: effectiveContainerWidth,\n            height: effectiveContainerHeight,\n            minWidth: isCompactLike ? undefined : effectiveContainerWidth,\n            minHeight: isCompactLike ? undefined : effectiveContainerHeight,\n            overflow: \"visible\",\n          }}\n        >\n          {/* Grid overlay */}\n          {showGrid && (\n            <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none\">\n              <svg\n                width={effectiveContainerWidth}\n                height={effectiveContainerHeight}\n                viewBox={`0 0 ${effectiveContainerWidth} ${effectiveContainerHeight}`}\n              >\n                <defs>\n                  <pattern\n                    id=\"grid\"\n                    width=\"20\"\n                    height=\"20\"\n                    patternUnits=\"userSpaceOnUse\"\n                  >\n                    <path\n                      d=\"M 20 0 L 0 0 0 20\"\n                      fill=\"none\"\n                      stroke=\"white\"\n                      strokeWidth=\"0.5\"\n                      opacity=\"0.2\"\n                    />\n                  </pattern>\n                </defs>\n                <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n              </svg>\n            </div>\n          )}\n\n          {/* Tessellation tiles */}\n          <svg\n            width={effectiveContainerWidth}\n            height={effectiveContainerHeight}\n            viewBox={svgViewBox}\n            className=\"glass-absolute glass-inset-0 glass-overflow-visible\"\n            style={{ overflow: \"visible\" }}\n          >\n            <AnimatePresence>\n              {tiles.map((tile, index) => {\n                const position = tilePositions.get(tile.id);\n                if (!position) return null;\n\n                const isHovered = hoveredTile === tile.id;\n                const isSelected = selectedTile === tile.id;\n\n                return (\n                  <motion.g\n                    key={tile.id}\n                    custom={index}\n                    variants={getTileVariants()}\n                    initial=\"hidden\"\n                    animate={\n                      isSelected ? \"selected\" : isHovered ? \"hover\" : \"visible\"\n                    }\n                    exit=\"hidden\"\n                    style={{\n                      transformOrigin: `${position.x + effectiveTileSize / 2}px ${position.y + effectiveTileSize / 2}px`,\n                    }}\n                    onMouseEnter={() => interactive && handleTileHover(tile)}\n                    onMouseLeave={() => interactive && handleTileHover(null)}\n                    onClick={() => interactive && handleTileClick(tile)}\n                  >\n                    <g\n                      transform={`translate(${position.x}, ${position.y}) rotate(${position.rotation + (tile.rotation || 0)})`}\n                    >\n                      {renderTileShape(tile, position)}\n                    </g>\n                  </motion.g>\n                );\n              })}\n            </AnimatePresence>\n          </svg>\n        </div>\n\n        {/* Info panel */}\n        {!isCompactLike && (\n          <div\n            className=\"glass-absolute glass-bottom-4 glass-left-4 glass-flex glass-flex-col glass-gap-1 glass-text-xs glass-text-primary-opacity-70\"\n            data-glass-overlay=\"true\"\n          >\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Pattern: {tessellationType}\n            </div>\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Tiles: {tiles.length}\n            </div>\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              Size: {tileSize}px\n            </div>\n            {morphPattern && (\n              <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n                Morph: {Math.round(morphPhase * 100)}%\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Legend */}\n        {!isCompactLike && (\n          <div\n            className=\"glass-absolute glass-top-4 glass-right-4 glass-text-xs glass-text-primary-opacity-70\"\n            data-glass-overlay=\"true\"\n          >\n            <div className=\"glass-surface-dark/20 glass-px-2 glass-py-1 glass-radius glass-backdrop-blur-sm glass-contrast-guard\">\n              {tessellationType.charAt(0).toUpperCase() +\n                tessellationType.slice(1)}{\" \"}\n              Tessellation\n            </div>\n          </div>\n        )}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassTessellation.displayName = \"GlassTessellation\";\n", "\"use client\";\n/**\n * DimensionalGlass Component\n *\n * A modern glass surface with enhanced depth and dimensional effects.\n * Migrated to use OptimizedGlass architecture.\n */\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport React, { forwardRef } from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { LiquidGlassMaterial } from \"../../primitives/LiquidGlassMaterial\";\nimport { DimensionalGlassProps } from \"./types\";\n\n/**\n * DimensionalGlass Component\n * Modern implementation using OptimizedGlass with dimensional effects\n */\nexport const DimensionalGlass = forwardRef<\n  HTMLDivElement,\n  DimensionalGlassProps\n>(\n  (\n    {\n      children,\n      className,\n      style,\n      elevation = \"level2\",\n      blurStrength = \"standard\",\n      opacity = \"medium\",\n      borderOpacity = \"medium\",\n      borderWidth = 1,\n      fullWidth = false,\n      fullHeight = false,\n      borderRadius = 12,\n      interactive = true,\n      padding = 16,\n      depth = 0.5,\n      dynamicShadow = true,\n      animate = false,\n      zIndex = 1,\n      backgroundColor,\n      maxTilt = 5,\n      hoverScale = 1.02,\n      animationConfig,\n      disableAnimation,\n      motionSensitivity,\n      material = \"glass\",\n      materialProps,\n      ...rest\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldAnimate = animate && !disableAnimation && !prefersReducedMotion;\n\n    // Map blur strength to intensity\n    const intensityMap = {\n      none: \"subtle\" as const,\n      light: \"subtle\" as const,\n      standard: \"medium\" as const,\n      heavy: \"strong\" as const,\n    };\n\n    // Map elevation to OptimizedGlass elevation levels\n    const getElevationLevel = (elev: any) => {\n      if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n        return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n      }\n      // Map numeric elevation to level\n      const numElev = typeof elev === \"number\" ? elev : 2;\n      if (numElev <= 1) return \"level1\";\n      if (numElev <= 2) return \"level2\";\n      if (numElev <= 3) return \"level3\";\n      return \"level4\";\n    };\n\n    // Calculate depth transform\n    const depthTransform = depth > 0 ? `translateZ(${depth * 10}px)` : \"\";\n\n    return (\n      <Motion\n        preset={shouldAnimate ? \"fadeIn\" : \"none\"}\n        className={cn(\n          \"transform-gpu\",\n          shouldAnimate && \"animate-pulse-subtle\",\n          className\n        )}\n      >\n        {material === \"liquid\" ? (\n          <LiquidGlassMaterial\n            ref={ref}\n            ior={materialProps?.ior || 1.52}\n            thickness={materialProps?.thickness || depth * 20 + 8}\n            tint={\n              materialProps?.tint || {\n                r: 0,\n                g: 0,\n                b: 0,\n                a: depth * 0.05 + 0.03,\n              }\n            }\n            variant={\n              materialProps?.variant === \"clear\"\n                ? (\"clear\" as const)\n                : materialProps?.variant === \"regular\"\n                  ? (\"regular\" as const)\n                  : (\"regular\" as const)\n            }\n            quality={materialProps?.quality || \"ultra\"}\n            environmentAdaptation\n            motionResponsive\n            interactive={interactive}\n            className={cn(\n              // Base styles\n              \"relative overflow-hidden transition-all duration-300\",\n              \"liquid-glass-dimensional-surface\",\n\n              // Dimensions\n              fullWidth && \"w-full\",\n              fullHeight && \"h-full\",\n\n              // Interactive states\n              interactive && [\n                \"hover:scale-[var(--hover-scale)] active:scale-95\",\n                \"cursor-pointer\",\n              ],\n\n              // Animation states\n              shouldAnimate && \"animate-dimensional-float\",\n\n              className\n            )}\n            style={{\n              ...(style || {}),\n              ...({\n                \"--hover-scale\": hoverScale.toString(),\n                \"--liquid-glass-dimensional-depth\": depth.toString(),\n                \"--liquid-glass-tilt-max\": `${maxTilt}deg`,\n              } as React.CSSProperties),\n              transform: depthTransform,\n              zIndex,\n              padding: typeof padding === \"number\" ? `${padding}px` : padding,\n              borderRadius:\n                typeof borderRadius === \"number\"\n                  ? `${borderRadius}px`\n                  : borderRadius,\n            }}\n            data-liquid-glass-dimensional=\"true\"\n            data-dimensional-depth={depth}\n            data-dimensional-elevation={elevation}\n            {...Object.fromEntries(\n              Object.entries(rest).filter(([key]) => key !== \"variant\")\n            )}\n          >\n            {children}\n          </LiquidGlassMaterial>\n        ) : (\n          <OptimizedGlass\n            ref={ref}\n            intent=\"neutral\"\n            elevation={getElevationLevel(elevation)}\n            intensity={intensityMap[blurStrength]}\n            depth={Math.round(depth * 4)} // Convert to 0-4 range\n            tint=\"neutral\"\n            border={borderOpacity === \"none\" ? \"none\" : \"subtle\"}\n            animation={shouldAnimate ? \"float\" : \"none\"}\n            performanceMode=\"medium\"\n            liftOnHover={interactive}\n            press={interactive}\n            className={cn(\n              // Base styles\n              \"relative overflow-hidden transition-all duration-300\",\n\n              // Dimensional effects\n              \"transform-style-preserve-3d\",\n              depthTransform && \"[transform:\" + depthTransform + \"]\",\n\n              // Size\n              fullWidth && \"w-full\",\n              fullHeight && \"h-full\",\n\n              // Spacing\n              typeof padding === \"number\"\n                ? `p-${Math.round(padding / 4)}`\n                : \"glass-p-4\",\n\n              // Border radius\n              typeof borderRadius === \"number\"\n                ? borderRadius <= 4\n                  ? \"glass-radius-md\"\n                  : borderRadius <= 8\n                    ? \"glass-radius-lg\"\n                    : \"glass-radius-xl\"\n                : \"glass-radius-xl\",\n\n              // Z-index\n              zIndex > 1 && `z-${Math.min(zIndex, 50)}`,\n\n              className\n            )}\n            style={{\n              backgroundColor,\n              borderWidth: borderWidth > 0 ? `${borderWidth}px` : undefined,\n              perspective: interactive ? \"1000px\" : undefined,\n              ...style,\n            }}\n            {...rest}\n          >\n            <div\n              className={cn(\n                \"relative h-full w-full\",\n                interactive &&\n                  \"transform-gpu transition-transform duration-200\",\n                depth > 0 && \"transform-style-preserve-3d\"\n              )}\n              style={{\n                transform: depth > 0 ? `translateZ(${depth * 5}px)` : undefined,\n              }}\n            >\n              {children}\n            </div>\n          </OptimizedGlass>\n        )}\n      </Motion>\n    );\n  }\n);\n\nDimensionalGlass.displayName = \"DimensionalGlass\";\n\nexport default DimensionalGlass;\n", "\"use client\";\n/**\n * FrostedGlass Component\n *\n * A modern glass surface with frosted ice effects.\n * Migrated to use OptimizedGlass architecture.\n */\nimport React, { forwardRef, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useGlassParallax } from \"../../hooks/useGlassParallax\";\nimport { FrostedGlassProps } from \"./types\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\n/**\n * FrostedGlass Component\n * Modern implementation using OptimizedGlass with frost effects\n */\nexport const FrostedGlass = forwardRef<HTMLDivElement, FrostedGlassProps>(\n  (\n    {\n      children,\n      className,\n      style,\n      elevation = \"level2\",\n      blurStrength = \"standard\",\n      opacity = \"medium\",\n      borderOpacity = \"medium\",\n      borderWidth = 1,\n      fullWidth = false,\n      fullHeight = false,\n      borderRadius = \"md\",\n      interactive = true,\n      padding = 16,\n      intensity = 0.5,\n      frostColor = \"color-mix(in srgb, var(--glass-white) 80%, transparent)\",\n      animate = true,\n      pattern = \"noise\",\n      backgroundColor,\n      specular = true,\n      glow = false,\n      lightAngle = 135,\n      parallax = false,\n      parallaxStrength = 10,\n      ...rest\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldAnimate = animate && !prefersReducedMotion;\n    const [isHovered, setIsHovered] = useState(false);\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    // Handle parallax when enabled\n    useGlassParallax(containerRef, {\n      strength: parallaxStrength,\n      enabled: parallax && !prefersReducedMotion,\n    });\n\n    // Map blur strength to intensity\n    const intensityMap = {\n      none: \"subtle\" as const,\n      light: \"subtle\" as const,\n      standard: \"medium\" as const,\n      heavy: \"strong\" as const,\n    };\n\n    // Map border radius\n    const radiusMap = {\n      none: \"rounded-none\",\n      sm: \"glass-radius-sm\",\n      md: \"glass-radius-md\",\n      lg: \"glass-radius-lg\",\n      xl: \"glass-radius-xl\",\n      full: \"glass-radius-full\",\n    };\n\n    // Map elevation to OptimizedGlass elevation levels\n    const getElevationLevel = (elev: any) => {\n      if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n        return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n      }\n      const numElev = typeof elev === \"number\" ? elev : 2;\n      if (numElev <= 1) return \"level1\";\n      if (numElev <= 2) return \"level2\";\n      if (numElev <= 3) return \"level3\";\n      return \"level4\";\n    };\n\n    // Generate frost pattern styles\n    const getFrostPattern = () => {\n      switch (pattern) {\n        case \"lines\":\n          return {\n            backgroundImage: `\n              linear-gradient(90deg, ${frostColor} 1px, transparent 1px),\n              linear-gradient(${frostColor} 1px, transparent 1px)\n            `,\n            backgroundSize: \"20px 20px\",\n          };\n        case \"crystals\":\n          return {\n            backgroundImage: `\n              radial-gradient(${frostColor} 5%, transparent 5%), \n              radial-gradient(${frostColor} 5%, transparent 5%)\n            `,\n            backgroundSize: \"30px 30px\",\n            backgroundPosition: \"0 0, 15px 15px\",\n          };\n        case \"noise\":\n        default:\n          return {\n            backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E\")`,\n            backgroundSize: \"100px 100px\",\n          };\n      }\n    };\n\n    // Handle mouse events\n    const handleMouseEnter = () => setIsHovered(true);\n    const handleMouseLeave = () => setIsHovered(false);\n\n    // Merge refs\n    const setRefs = (node: HTMLDivElement | null) => {\n      (containerRef as any).current = node;\n      if (typeof ref === \"function\") ref(node);\n      else if (ref)\n        (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n    };\n\n    const frostPatternStyles = getFrostPattern();\n    const glowColor =\n      typeof glow === \"string\" ? glow : glow === true ? \"primary\" : false;\n\n    return (\n      <Motion\n        preset={shouldAnimate ? \"fadeIn\" : \"none\"}\n        className=\"glass-relative glass-isolate\"\n      >\n        <OptimizedGlass\n          ref={setRefs}\n          intent=\"neutral\"\n          elevation={getElevationLevel(elevation)}\n          intensity={intensityMap[blurStrength]}\n          depth={2}\n          tint=\"cool\"\n          border={borderOpacity === \"none\" ? \"none\" : \"subtle\"}\n          animation={shouldAnimate ? \"breathe\" : \"none\"}\n          performanceMode=\"high\"\n          liftOnHover={interactive}\n          press={interactive}\n          className={cn(\n            // Base styles\n            \"relative block box-border overflow-hidden isolate\",\n            `transition-all`,\n            `duration-[${ANIMATION.DURATION.normal}ms]`,\n\n            // Size\n            fullWidth && \"w-full\",\n            fullHeight && \"h-full\",\n            !fullWidth && !fullHeight && \"w-auto h-auto\",\n\n            // Border radius\n            typeof borderRadius === \"string\"\n              ? radiusMap[borderRadius]\n              : `rounded-[${borderRadius}px]`,\n\n            // Padding\n            typeof padding === \"number\"\n              ? `p-${Math.round(padding / 4)}`\n              : \"glass-p-4\",\n\n            // Interactive styles\n            interactive && [\n              \"cursor-pointer\",\n              \"glass-hover--translate-y-0-5\",\n              \"active:translate-y-0\",\n            ],\n\n            // Glow effect\n            glowColor &&\n              {\n                primary:\n                  \"drop-shadow-[0_0_18px_hsl(var(--glass-color-primary)/0.28)]\",\n                success:\n                  \"drop-shadow-[0_0_18px_hsl(var(--glass-color-success)/0.28)]\",\n                warning:\n                  \"drop-shadow-[0_0_18px_hsl(var(--glass-color-warning)/0.28)]\",\n                danger:\n                  \"drop-shadow-[0_0_18px_hsl(var(--glass-color-danger)/0.28)]\",\n                info: \"drop-shadow-[0_0_18px_color-mix(in_srgb,hsl(var(--glass-color-info))_28%,transparent)]\",\n              }[glowColor],\n\n            className\n          )}\n          style={{\n            backgroundColor,\n            borderWidth: borderWidth > 0 ? `${borderWidth}px` : undefined,\n            ...(style || {}),\n          }}\n          onMouseEnter={handleMouseEnter}\n          onMouseLeave={handleMouseLeave}\n          {...rest}\n        >\n          {/* Frost pattern overlay */}\n          <div\n            className={cn(\n              \"absolute inset-0 pointer-events-none\",\n              shouldAnimate && \"animate-frost-grow\"\n            )}\n            style={{\n              ...frostPatternStyles,\n              // Reduce overlay strength to avoid washing out label text\n              opacity: 0.18 + intensity * 0.22,\n              // Use soft-light for gentler interaction with backdrop\n              mixBlendMode: \"soft-light\",\n            }}\n          />\n\n          {/* Frost sparkles */}\n          <div\n            className={cn(\n              \"absolute inset-0 pointer-events-none\",\n              shouldAnimate && \"animate-frost-sparkle\"\n            )}\n            style={{\n              backgroundImage: `radial-gradient(${frostColor} 1px, transparent 1px)`,\n              backgroundSize: \"30px 30px\",\n              // Tone down sparkle overlay for readability\n              opacity: Math.min(0.22, intensity * 0.25),\n            }}\n          />\n\n          {/* Specular highlight and edge frost */}\n          <div\n            className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit\"\n            style={{\n              // Edge frost (less aggressive)\n              boxShadow: `inset 0 0 ${4 + intensity * 9}px ${frostColor}`,\n              opacity: isHovered\n                ? 0.24 + intensity * 0.25\n                : 0.18 + intensity * 0.2,\n              // Specular highlight (dimmed)\n              background: specular\n                ? `\n                radial-gradient(${intensity * 70 + 40}% ${intensity * 35 + 40}% at 50% -10%, color-mix(in srgb, var(--glass-white) ${Math.min(25, (0.1 + intensity * 0.22) * 100)}%, transparent) 0%, color-mix(in srgb, var(--glass-white) 0%, transparent) 60%),\n                linear-gradient(${lightAngle}deg, color-mix(in srgb, var(--glass-white) 12%, transparent), color-mix(in srgb, var(--glass-white) 0%, transparent) 35%)\n              `\n                : undefined,\n              // Softer blending to preserve label contrast\n              mixBlendMode: specular ? \"overlay\" : \"normal\",\n              transform: parallax\n                ? \"translate(var(--glass-parallax-x), var(--glass-parallax-y))\"\n                : undefined,\n              transition: `transform ${ANIMATION.DURATION.fast}ms ${ANIMATION.EASING.easeOut}, opacity ${ANIMATION.DURATION.normal}ms ${ANIMATION.EASING.ease}`,\n            }}\n          />\n\n          {/* Content */}\n          <div className=\"glass-relative glass-z-10\">{children}</div>\n        </OptimizedGlass>\n      </Motion>\n    );\n  }\n);\n\nFrostedGlass.displayName = \"FrostedGlass\";\n\nexport default FrostedGlass;\n", "'use client';\nimport { useEffect } from 'react';\n\nexport interface UseGlassParallaxOptions {\n  strength?: number; // px offset at extremes\n  enabled?: boolean;\n}\n\n/**\n * Applies a lightweight pointer-based parallax by updating CSS variables\n * --glass-parallax-x and --glass-parallax-y on the target element.\n * Works with CSS utilities that read these variables (e.g., specular overlays).\n */\nexport function useGlassParallax<T extends HTMLElement>(\n  targetRef: React.RefObject<T>,\n  { strength = 10, enabled = true }: UseGlassParallaxOptions = {}\n) {\n  useEffect(() => {\n    if (!enabled) return;\n    const el = targetRef.current;\n    if (!el) return;\n\n    let raf = 0;\n    let pending = false;\n    let nextX = 0;\n    let nextY = 0;\n\n    const setVars = () => {\n      pending = false;\n      el.style.setProperty('--glass-parallax-x', `${nextX}px`);\n      el.style.setProperty('--glass-parallax-y', `${nextY}px`);\n    };\n\n    const onMove = (e: MouseEvent) => {\n      const rect = el.getBoundingClientRect();\n      const cx = rect.left + rect.width / 2;\n      const cy = rect.top + rect.height / 2;\n      const nx = (e.clientX - cx) / (rect.width / 2); // -1..1\n      const ny = (e.clientY - cy) / (rect.height / 2); // -1..1\n      const clampedX = Math.max(-1, Math.min(1, nx));\n      const clampedY = Math.max(-1, Math.min(1, ny));\n      nextX = clampedX * strength;\n      nextY = clampedY * strength;\n      if (!pending) {\n        pending = true;\n        raf = window.requestAnimationFrame(setVars);\n      }\n    };\n\n    const onLeave = () => {\n      nextX = 0;\n      nextY = 0;\n      if (!pending) {\n        pending = true;\n        raf = window.requestAnimationFrame(setVars);\n      }\n    };\n\n    el.addEventListener('mousemove', onMove);\n    el.addEventListener('mouseleave', onLeave);\n\n    return () => {\n      el.removeEventListener('mousemove', onMove);\n      el.removeEventListener('mouseleave', onLeave);\n      if (raf) cancelAnimationFrame(raf);\n    };\n  }, [targetRef, enabled, strength]);\n}\n\nexport default useGlassParallax;", "\"use client\";\n/**\n * HeatGlass Component\n *\n * A modern glass surface with heat distortion effects.\n * Migrated to use OptimizedGlass architecture.\n */\nimport React, { forwardRef, useState } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { HeatGlassProps } from \"./types\";\n\n// SVG filters for heat distortion effect\nconst HeatDistortionFilters = React.memo(() => (\n  <svg width=\"0\" height=\"0\" className=\"glass-absolute glass-invisible\">\n    <defs>\n      <filter id=\"heat-distortion-0\">\n        <feTurbulence\n          type=\"fractalNoise\"\n          baseFrequency=\"0.01\"\n          numOctaves=\"3\"\n          seed=\"0\"\n        />\n        <feDisplacementMap in=\"SourceGraphic\" scale=\"5\" />\n      </filter>\n      <filter id=\"heat-distortion-25\">\n        <feTurbulence\n          type=\"fractalNoise\"\n          baseFrequency=\"0.01\"\n          numOctaves=\"3\"\n          seed=\"1\"\n        />\n        <feDisplacementMap in=\"SourceGraphic\" scale=\"5\" />\n      </filter>\n      <filter id=\"heat-distortion-50\">\n        <feTurbulence\n          type=\"fractalNoise\"\n          baseFrequency=\"0.01\"\n          numOctaves=\"3\"\n          seed=\"2\"\n        />\n        <feDisplacementMap in=\"SourceGraphic\" scale=\"5\" />\n      </filter>\n      <filter id=\"heat-distortion-75\">\n        <feTurbulence\n          type=\"fractalNoise\"\n          baseFrequency=\"0.01\"\n          numOctaves=\"3\"\n          seed=\"3\"\n        />\n        <feDisplacementMap in=\"SourceGraphic\" scale=\"5\" />\n      </filter>\n    </defs>\n  </svg>\n));\n\nHeatDistortionFilters.displayName = \"HeatDistortionFilters\";\n\n/**\n * HeatGlass Component\n * Modern implementation using OptimizedGlass with heat distortion effects\n */\nexport const HeatGlass = forwardRef<HTMLDivElement, HeatGlassProps>(\n  (\n    {\n      children,\n      className,\n      style,\n      elevation = \"level2\",\n      blurStrength = \"standard\",\n      borderRadius = \"md\",\n      interactive = true,\n      heatColor = \"rgba(255, 100, 50, 0.7)\",\n      animate = true,\n      backgroundColor,\n      ...rest\n    },\n    ref\n  ) => {\n    const prefersReducedMotion = useReducedMotion();\n    const shouldAnimate = animate && !prefersReducedMotion;\n    const [isHovered, setIsHovered] = useState(false);\n\n    // Map blur strength to intensity\n    const intensityMap = {\n      none: \"subtle\" as const,\n      light: \"subtle\" as const,\n      standard: \"medium\" as const,\n      heavy: \"strong\" as const,\n    };\n\n    // Map border radius\n    const radiusMap = {\n      none: \"rounded-none\",\n      sm: \"glass-radius-sm\",\n      md: \"glass-radius-md\",\n      lg: \"glass-radius-lg\",\n      xl: \"glass-radius-xl\",\n      full: \"glass-radius-full\",\n    };\n\n    // Map elevation to OptimizedGlass elevation levels\n    const getElevationLevel = (elev: any) => {\n      if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n        return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n      }\n      const numElev = typeof elev === \"number\" ? elev : 2;\n      if (numElev <= 1) return \"level1\";\n      if (numElev <= 2) return \"level2\";\n      if (numElev <= 3) return \"level3\";\n      return \"level4\";\n    };\n\n    // Handle mouse events\n    const handleMouseEnter = () => setIsHovered(true);\n    const handleMouseLeave = () => setIsHovered(false);\n\n    return (\n      <>\n        {/* SVG Filters for heat distortion */}\n        {shouldAnimate && <HeatDistortionFilters />}\n\n        <Motion\n          preset={shouldAnimate ? \"pulseIn\" : \"none\"}\n          className=\"glass-relative\"\n        >\n          <OptimizedGlass\n            ref={ref}\n            intent=\"danger\"\n            elevation={getElevationLevel(elevation)}\n            intensity={intensityMap[blurStrength]}\n            depth={3}\n            tint=\"warm\"\n            border=\"subtle\"\n            animation={shouldAnimate ? \"pulse\" : \"none\"}\n            performanceMode=\"high\"\n            liftOnHover={interactive}\n            press={interactive}\n            className={cn(\n              // Base styles\n              \"relative block w-full min-h-[100px] glass-p-4 box-border overflow-hidden\",\n              \"transition-all duration-300\",\n\n              // Border radius\n              radiusMap[borderRadius],\n\n              // Heat glow effect\n              \"shadow-heat-glow\",\n\n              // Interactive styles\n              interactive && [\n                \"cursor-pointer\",\n                \"glass-hover--translate-y-0-5\",\n                \"active:translate-y-0\",\n              ],\n\n              // Heat pulse animation (respects reduced motion via shouldAnimate)\n              shouldAnimate && \"glass-animate-heat-pulse\",\n\n              className\n            )}\n            style={{\n              // Heat glow box shadow\n              boxShadow: `0 0 20px 5px ${heatColor}`,\n              backgroundColor,\n              ...(style || {}),\n            }}\n            onMouseEnter={handleMouseEnter}\n            onMouseLeave={handleMouseLeave}\n            {...rest}\n          >\n            {/* Heat radial gradient background */}\n            <div\n              className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit glass--z-10 glass-opacity-30\"\n              style={{\n                background: `radial-gradient(circle at 50% 50%, ${heatColor} 0%, transparent 70%)`,\n              }}\n            />\n\n            {/* Content with heat distortion */}\n            <div\n              className={cn(\n                \"relative z-10\",\n                shouldAnimate && [\n                  \"glass-animate-heat-distortion\",\n                  \"will-change-auto\", // Use will-change-auto instead of will-change-filter\n                ]\n              )}\n              style={{\n                // Apply heat distortion filters\n                filter: shouldAnimate ? \"url(#heat-distortion-0)\" : undefined,\n                animationDelay: shouldAnimate\n                  ? `${Math.random() * 2}s`\n                  : undefined,\n              }}\n            >\n              {children}\n            </div>\n\n            {/* Enhanced hover glow */}\n            {interactive && isHovered && (\n              <div\n                className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit glass-transition-opacity glass-duration-300\"\n                style={{\n                  boxShadow: `0 0 30px 10px ${heatColor}`,\n                  opacity: 0.8,\n                }}\n              />\n            )}\n          </OptimizedGlass>\n        </Motion>\n      </>\n    );\n  }\n);\n\nHeatGlass.displayName = \"HeatGlass\";\n\nexport default HeatGlass;\n", "'use client';\n/**\n * PageGlassContainer Component\n *\n * A glass container for full page layouts with enhanced glass effects.\n * Migrated to use OptimizedGlass architecture.\n */\nimport React, { forwardRef, useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nimport { PageGlassContainerProps } from \"./types\";\n\n/**\n * PageGlassContainer Component\n * Modern implementation using OptimizedGlass with full page layout capabilities\n */\nexport const PageGlassContainer = React.memo(\n  forwardRef<HTMLDivElement, PageGlassContainerProps>(\n    (\n      {\n        children,\n        className,\n        style,\n        elevation = \"level2\",\n        blurStrength = \"standard\",\n        borderRadius = \"none\",\n        fullWidth = true,\n        fullHeight = false,\n        fullPage = false,\n        maxWidth,\n        backgroundColor,\n        scrollFade = false,\n        dimensionalChildren = false,\n        ...rest\n      },\n      ref\n    ) => {\n      const prefersReducedMotion = useReducedMotion();\n      const shouldAnimate = !prefersReducedMotion;\n      const [scrollPosition, setScrollPosition] = useState(0);\n\n      // Map blur strength to intensity\n      const intensityMap = {\n        none: \"subtle\" as const,\n        light: \"subtle\" as const,\n        standard: \"medium\" as const,\n        heavy: \"strong\" as const,\n      };\n\n      // Map border radius\n      const radiusMap = {\n        none: \"rounded-none\",\n        sm: \"glass-radius-sm\",\n        md: \"glass-radius-md\",\n        lg: \"glass-radius-lg\",\n        xl: \"glass-radius-xl\",\n        full: \"glass-radius-full\",\n      };\n\n      // Map elevation to OptimizedGlass elevation levels\n      const getElevationLevel = (elev: any) => {\n        if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n          return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n        }\n        const numElev = typeof elev === \"number\" ? elev : 2;\n        if (numElev <= 1) return \"level1\";\n        if (numElev <= 2) return \"level2\";\n        if (numElev <= 3) return \"level3\";\n        return \"level4\";\n      };\n\n      // Handle scroll events for scroll fade effect\n      useEffect(() => {\n        if (!scrollFade || prefersReducedMotion) return;\n\n        const handleScroll = () => {\n          setScrollPosition(window.scrollY);\n        };\n\n        window.addEventListener(\"scroll\", handleScroll, { passive: true });\n        return () => {\n          window.removeEventListener(\"scroll\", handleScroll);\n        };\n      }, [scrollFade, prefersReducedMotion]);\n\n      // Calculate max width style\n      const maxWidthStyle = maxWidth\n        ? typeof maxWidth === \"number\"\n          ? { maxWidth: `${maxWidth}px` }\n          : { maxWidth }\n        : {};\n\n      return (\n        <Motion preset={shouldAnimate ? \"fadeIn\" : \"none\"} className='glass-relative'>\n          <OptimizedGlass\n            ref={ref}\n            intent=\"neutral\"\n            elevation={getElevationLevel(elevation)}\n            intensity={intensityMap[blurStrength]}\n            depth={1}\n            tint=\"neutral\"\n            border=\"subtle\"\n            animation={shouldAnimate && scrollFade ? \"breathe\" : \"none\"}\n            performanceMode=\"high\"\n            className={cn(\n              // Base positioning and sizing\n              fullPage ? \"fixed inset-0\" : \"relative\",\n              fullWidth ? \"w-full\" : \"w-auto\",\n              fullHeight || fullPage ? \"h-full\" : \"h-auto\",\n              !fullWidth && \"mx-auto\",\n\n              // Border radius\n              radiusMap[borderRadius],\n\n              // Layout and spacing\n              \"p-5 box-border z-0\",\n              fullPage ? \"overflow-auto\" : \"overflow-hidden\",\n\n              // Scroll fade effect\n              scrollFade && shouldAnimate && \"transition-opacity duration-300\",\n\n              className\n            )}\n            style={{\n              backgroundColor,\n              ...maxWidthStyle,\n              // Scroll fade opacity\n              opacity:\n                scrollFade && scrollPosition > 0\n                  ? Math.max(0.3, 1 - scrollPosition / 500)\n                  : 1,\n              ...style,\n            }}\n            {...rest}\n          >\n            {/* Content wrapper with dimensional effects */}\n            <div\n              className={cn(\n                \"relative z-10\",\n                dimensionalChildren && shouldAnimate && \"preserve-3d\"\n              )}\n              style={{\n                // Parallax effect for dimensional children\n                ...(dimensionalChildren &&\n                  shouldAnimate && {\n                    transform: `translateZ(${Math.min(20, scrollPosition / 20)}px)`,\n                    transition: \"transform 100ms ease-out\",\n                  }),\n              }}\n            >\n              {children}\n            </div>\n          </OptimizedGlass>\n        </Motion>\n      );\n    }\n  )\n);\n\nPageGlassContainer.displayName = \"PageGlassContainer\";\n\nexport default PageGlassContainer;", "'use client';\n/**\n * WidgetGlass Component\n *\n * A specialized glass component for UI widgets with enhanced effects.\n * Migrated to use OptimizedGlass architecture.\n */\nimport React, { forwardRef, useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { OptimizedGlass, Motion } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nimport { WidgetGlassProps } from \"./types\";\n\n/**\n * WidgetGlass Component\n * Modern implementation using OptimizedGlass with widget-specific features\n */\nexport const WidgetGlass = React.memo(\n  forwardRef<HTMLDivElement, WidgetGlassProps>(\n    (\n      {\n        children,\n        className,\n        style,\n        elevation = \"level2\",\n        blurStrength = \"standard\",\n        opacity = \"medium\",\n        borderOpacity = \"medium\",\n        borderWidth = 1,\n        fullWidth = false,\n        fullHeight = false,\n        borderRadius = \"md\",\n        interactive = true,\n        padding = 16,\n        widgetType = \"card\",\n        highlightOnHover = true,\n        animateOnMount = true,\n        priority = \"medium\",\n        backgroundColor,\n        ...rest\n      },\n      ref\n    ) => {\n      const prefersReducedMotion = useReducedMotion();\n      const shouldAnimate = animateOnMount && !prefersReducedMotion;\n      const [isHovered, setIsHovered] = useState(false);\n      const [isMounted, setIsMounted] = useState(false);\n\n      // Map blur strength to intensity\n      const intensityMap = {\n        none: \"subtle\" as const,\n        light: \"subtle\" as const,\n        standard: \"medium\" as const,\n        heavy: \"strong\" as const,\n      };\n\n      // Map border radius\n      const radiusMap = {\n        none: \"rounded-none\",\n        sm: \"glass-radius-sm\",\n        md: \"glass-radius-md\",\n        lg: \"glass-radius-lg\",\n        xl: \"glass-radius-xl\",\n        full: \"glass-radius-full\",\n      };\n\n      // Map elevation to OptimizedGlass elevation levels\n      const getElevationLevel = (elev: any) => {\n        if (typeof elev === \"string\" && elev.startsWith(\"level\")) {\n          return elev as \"level1\" | \"level2\" | \"level3\" | \"level4\";\n        }\n        const numElev = typeof elev === \"number\" ? elev : 2;\n        if (numElev <= 1) return \"level1\";\n        if (numElev <= 2) return \"level2\";\n        if (numElev <= 3) return \"level3\";\n        return \"level4\";\n      };\n\n      // Calculate depth based on priority\n      const getDepth = (priority: \"low\" | \"medium\" | \"high\") => {\n        switch (priority) {\n          case \"high\":\n            return 4;\n          case \"low\":\n            return 1;\n          default:\n            return 2;\n        }\n      };\n\n      // Calculate z-index based on priority\n      const getZIndex = (priority: \"low\" | \"medium\" | \"high\") => {\n        switch (priority) {\n          case \"high\":\n            return 10;\n          case \"low\":\n            return 1;\n          default:\n            return 5;\n        }\n      };\n\n      // Handle mouse events\n      const handleMouseEnter = () => setIsHovered(true);\n      const handleMouseLeave = () => setIsHovered(false);\n\n      // Mount animation\n      useEffect(() => {\n        if (shouldAnimate) {\n          const timer = setTimeout(() => setIsMounted(true), 50);\n          return () => clearTimeout(timer);\n        } else {\n          setIsMounted(true);\n        }\n      }, [shouldAnimate]);\n\n      return (\n        <Motion\n          preset={shouldAnimate ? \"bounceIn\" : \"none\"}\n          className='glass-relative'\n        >\n          <OptimizedGlass\n            ref={ref}\n            intent=\"neutral\"\n            elevation={getElevationLevel(elevation)}\n            intensity={intensityMap[blurStrength]}\n            depth={getDepth(priority)}\n            tint=\"neutral\"\n            border={borderOpacity === \"none\" ? \"none\" : \"subtle\"}\n            animation={shouldAnimate ? \"breathe\" : \"none\"}\n            performanceMode=\"high\"\n            liftOnHover={interactive && highlightOnHover}\n            press={interactive}\n            className={cn(\n              // Base styles\n              \"relative block box-border overflow-hidden transition-all duration-300\",\n\n              // Widget type styles\n              widgetType === \"card\" &&\n                \"bg-gradient-to-br from-white/10 to-white/5\",\n              widgetType === \"panel\" &&\n                \"bg-gradient-to-r from-white/8 to-white/12\",\n              widgetType === \"container\" && \"bg-white/5\",\n              widgetType === \"overlay\" &&\n                \"bg-white/20 glass-backdrop-blur\",\n\n              // Size\n              fullWidth && \"w-full\",\n              fullHeight && \"h-full\",\n              !fullWidth && !fullHeight && \"w-auto h-auto\",\n\n              // Border radius\n              typeof borderRadius === \"string\"\n                ? radiusMap[borderRadius]\n                : `rounded-[${borderRadius}px]`,\n\n              // Padding\n              typeof padding === \"number\"\n                ? `p-${Math.round(padding / 4)}`\n                : \"glass-p-4\",\n\n              // Interactive styles\n              interactive && [\n                \"cursor-pointer\",\n                \"glass-hover--translate-y-0-5 hover:shadow-lg\",\n                \"active:translate-y-0 active:scale-[0.98]\",\n              ],\n\n              // Priority-based shadow\n              priority === \"high\" && \"shadow-2xl\",\n              priority === \"medium\" && \"shadow-lg\",\n              priority === \"low\" && \"shadow-md\",\n\n              // Highlight on hover\n              highlightOnHover &&\n                isHovered &&\n                \"ring-2 ring-blue-500/30 shadow-blue-500/20\",\n\n              // Mount animation\n              shouldAnimate && [\n                !isMounted\n                  ? \"opacity-0 scale-95 translate-y-2\"\n                  : \"opacity-100 scale-100 translate-y-0\",\n              ],\n\n              className\n            )}\n            style={{\n              backgroundColor,\n              borderWidth: borderWidth > 0 ? `${borderWidth}px` : undefined,\n              zIndex: getZIndex(priority),\n              ...style,\n            }}\n            onMouseEnter={handleMouseEnter}\n            onMouseLeave={handleMouseLeave}\n            {...rest}\n          >\n            {/* Widget highlight overlay */}\n            {highlightOnHover && isHovered && interactive && (\n              <div\n                className='glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit glass-transition-opacity glass-duration-200'\n                style={{\n                  background:\n                    \"var(--glass-primary-level2-surface)\",\n                  opacity: 0.6,\n                }}\n              />\n            )}\n\n            {/* Pulse animation for high priority widgets */}\n            {priority === \"high\" && shouldAnimate && (\n              <div\n                className='glass-absolute glass-inset-0 glass-pointer-events-none glass-radius-inherit glass-animate-pulse'\n                style={{\n                  boxShadow: \"0 0 0 2px rgba(99, 102, 241, 0.2)\",\n                  opacity: isHovered ? 0.6 : 0.3,\n                  transition: \"opacity 300ms ease\",\n                }}\n              />\n            )}\n\n            {/* Content */}\n            <div className='glass-relative glass-z-10'>{children}</div>\n          </OptimizedGlass>\n        </Motion>\n      );\n    }\n  )\n);\n\nWidgetGlass.displayName = \"WidgetGlass\";\n\nexport default WidgetGlass;", "\"use client\";\n/**\n * AtmosphericBackground Component\n *\n * A dynamic background component with atmospheric effects.\n */\nimport React, { forwardRef, useState, useEffect, useRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { AtmosphericBackgroundProps } from \"./types\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport styles from \"./AtmosphericBackground.module.css\";\n\n// Default gradient colors\nconst defaultGradientColors = [\n  \"color-mix(in srgb, hsl(var(--glass-color-primary)) 50%, transparent)\", // Blue\n  \"color-mix(in srgb, var(--glass-color-secondary) 50%, transparent)\", // Indigo\n  \"color-mix(in srgb, var(--glass-color-accent) 50%, transparent)\", // Purple\n  \"color-mix(in srgb, hsl(var(--glass-color-info)) 50%, transparent)\", // Pink\n];\n\n/**\n * AtmosphericBackground Component Implementation\n */\nconst AtmosphericBackgroundComponent = (\n  props: AtmosphericBackgroundProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) => {\n  const {\n    children,\n    className,\n    style,\n    baseColor = \"color-mix(in srgb, var(--glass-black) 80%, transparent)\",\n    gradientColors = defaultGradientColors,\n    intensity = 0.7,\n    animate = true,\n    animationDuration = ANIMATION.DURATION.slower / 1000,\n    interactive = false,\n    blur = false,\n    blurAmount = 5,\n    intent = \"neutral\",\n    elevation = \"level2\",\n    tier = \"medium\",\n    respectMotionPreference = true,\n    ...rest\n  } = props;\n\n  // Accessibility and motion preferences\n  const componentId = useA11yId(\"atmospheric-bg\");\n  const prefersReducedMotion = useReducedMotion();\n  const { prefersReducedMotion: motionPrefersReduced } =\n    useMotionPreferenceContext();\n\n  // Determine if motion should be reduced based on all preferences\n  const shouldReduceMotion =\n    respectMotionPreference && (prefersReducedMotion || motionPrefersReduced);\n  const isDecorative = React.Children.count(children) === 0;\n\n  // State for mouse position\n  const [mousePosition, setMousePosition] = useState({ x: 50, y: 50 });\n\n  // Ref for background container\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  // Handle mouse movement for interactive mode\n  useEffect(() => {\n    if (!interactive || shouldReduceMotion) return;\n\n    const handleMouseMove = (e: MouseEvent) => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n\n      // Calculate mouse position as percentage\n      const x = ((e.clientX - rect.left) / rect.width) * 100;\n      const y = ((e.clientY - rect.top) / rect.height) * 100;\n\n      setMousePosition({ x, y });\n    };\n\n    if (typeof window === \"undefined\") return;\n\n    window.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n    };\n  }, [interactive, shouldReduceMotion]);\n\n  // Handle forwarded ref\n  const setRefs = (element: HTMLDivElement) => {\n    if (containerRef.current !== element) {\n      (containerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n        element;\n    }\n\n    // Handle the forwarded ref\n    if (typeof ref === \"function\") {\n      ref(element);\n    } else if (ref) {\n      (ref as React.MutableRefObject<HTMLDivElement | null>).current = element;\n    }\n  };\n\n  const gradientStyle: React.CSSProperties & Record<string, string | number> = {\n    backgroundColor: baseColor,\n    backgroundImage: `linear-gradient(125deg, ${gradientColors.join(\", \")})`,\n    opacity: intensity,\n  };\n\n  if (interactive && !shouldReduceMotion) {\n    gradientStyle.backgroundPosition = `${50 + (mousePosition.x - 50) * 0.2}% ${50 + (mousePosition.y - 50) * 0.2}%`;\n  }\n\n  if (animate && !shouldReduceMotion && !interactive) {\n    gradientStyle[\"--atmosphere-gradient-duration\"] = `${animationDuration}s`;\n  }\n\n  const gradientClasses = cn(\n    styles.gradientLayer,\n    interactive && !shouldReduceMotion && styles.gradientInteractive,\n    animate && !shouldReduceMotion && !interactive && styles.animateGradient,\n    shouldReduceMotion && styles.reduceMotion\n  );\n\n  const effectClasses = cn(\n    styles.atmosphericEffect,\n    animate && !shouldReduceMotion && styles.animateClouds,\n    shouldReduceMotion && styles.reduceMotion\n  );\n\n  const blurStyle: React.CSSProperties = {\n    // Use createGlassStyle() instead,\n    // Use createGlassStyle() instead,\n  };\n\n  return (\n    <OptimizedGlass\n      ref={setRefs}\n      intent={intent as any}\n      elevation={elevation as any}\n      tier={tier as any}\n      className={cn(\n        \"glass-atmospheric-background\",\n        styles.container,\n        className\n      )}\n      style={{ ...(style || {}) }}\n      id={componentId}\n      role={isDecorative ? \"img\" : undefined}\n      aria-label={\n        isDecorative\n          ? `Atmospheric background with ${animate && !shouldReduceMotion ? \"animated\" : \"static\"} ${gradientColors.length} color gradient`\n          : undefined\n      }\n      tabIndex={interactive ? 0 : undefined}\n      {...rest}\n    >\n      <div\n        className={gradientClasses}\n        style={{ ...gradientStyle }}\n        aria-hidden=\"true\"\n      />\n\n      <div className={effectClasses} aria-hidden=\"true\" />\n\n      <div\n        className={styles.blurLayer}\n        style={{ ...blurStyle }}\n        aria-hidden=\"true\"\n      />\n\n      <div className={styles.contentLayer}>{children}</div>\n    </OptimizedGlass>\n  );\n};\n\n/**\n * AtmosphericBackground Component\n *\n * A dynamic background component with atmospheric effects.\n */\nconst AtmosphericBackground = forwardRef(AtmosphericBackgroundComponent);\nAtmosphericBackground.displayName = \"AtmosphericBackground\";\n\nexport default AtmosphericBackground;\nexport { AtmosphericBackground };\n", "@keyframes gradientShift {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n\n@keyframes cloudMove {\n  0% {\n    transform: translateX(-5%) translateY(0);\n  }\n  50% {\n    transform: translateX(5%) translateY(-3%);\n  }\n  100% {\n    transform: translateX(-5%) translateY(0);\n  }\n}\n\n.container {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  outline: none;\n}\n\n.container:focus {\n  outline: 2px solid var(--glass-border-focus, rgba(255, 255, 255, 0.6));\n  outline-offset: 2px;\n}\n\n.gradientLayer {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  background-size: 200% 200%;\n  background-position: 0% 0%;\n  opacity: 0.7;\n  transition:\n    background-position 0.3s ease,\n    opacity 240ms ease;\n  will-change: background-position, opacity;\n}\n\n.gradientInteractive {\n  background-size: 300% 300%;\n}\n\n.animateGradient {\n  animation-name: gradientShift;\n  animation-timing-function: ease;\n  animation-iteration-count: infinite;\n  animation-duration: var(--atmosphere-gradient-duration, 15s);\n}\n\n.atmosphericEffect {\n  position: absolute;\n  inset: 0;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 600' width='600' height='600' opacity='0.15'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.005' numOctaves='5' stitchTiles='stitch' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.15'/%3E%3C/svg%3E\");\n  background-size: cover;\n  opacity: 0.4;\n  mix-blend-mode: overlay;\n  pointer-events: none;\n  transition: opacity 240ms ease;\n}\n\n.animateClouds {\n  animation-name: cloudMove;\n  animation-timing-function: ease;\n  animation-iteration-count: infinite;\n  animation-duration: 30s;\n}\n\n.blurLayer {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n}\n\n.contentLayer {\n  position: relative;\n  z-index: 1;\n  width: 100%;\n  height: 100%;\n}\n\n.reduceMotion,\n.reduceMotion::before,\n.reduceMotion::after {\n  animation-duration: 0s !important;\n  animation-iteration-count: 1 !important;\n  animation-name: none !important;\n  transition-duration: 0s !important;\n}\n", "\"use client\";\n/**\n * ParticleBackground Component\n *\n * A dynamic background with animated particles.\n */\nimport React, {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  useMemo,\n  useCallback,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { OptimizedGlass } from \"../../primitives\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport { useA11yId } from \"../../utils/a11y\";\nimport { ParticleBackgroundProps } from \"./types\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport styles from \"./ParticleBackground.module.css\";\n\n// Particle interface\ninterface Particle {\n  x: number;\n  y: number;\n  size: number;\n  speedX: number;\n  speedY: number;\n  opacity: number;\n  color: string;\n}\n\n/**\n * ParticleBackground Component Implementation\n */\nconst ParticleBackgroundComponent = (\n  props: ParticleBackgroundProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) => {\n  const {\n    children,\n    className,\n    style,\n    baseColor = \"color-mix(in srgb, var(--glass-black) 80%, transparent)\",\n    particleColor = \"color-mix(in srgb, var(--glass-white) 70%, transparent)\",\n    particleCount = 50,\n    particleSize = 2,\n    particleSpeed = 1,\n    connectParticles = true,\n    interactive = true,\n    blur = false,\n    blurAmount = 5,\n    count,\n    size,\n    speed,\n    color,\n    intent = \"neutral\",\n    elevation = \"level2\",\n    tier = \"medium\",\n    respectMotionPreference = true,\n    ...rest\n  } = props;\n\n  // Accessibility and motion preferences\n  const componentId = useA11yId(\"particle-bg\");\n  const prefersReducedMotion = useReducedMotion();\n  const { prefersReducedMotion: motionPrefersReduced } =\n    useMotionPreferenceContext();\n\n  // Determine if motion should be reduced based on all preferences\n  const shouldReduceMotion =\n    respectMotionPreference && (prefersReducedMotion || motionPrefersReduced);\n\n  // Refs\n  const containerRef = useRef<HTMLDivElement>(null);\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const animationRef = useRef<number | null>(null);\n\n  // State for mouse position\n  const [mousePosition, setMousePosition] = useState<{\n    x: number;\n    y: number;\n  } | null>(null);\n\n  // CRITICAL SSR FIX: Initialize particles as empty array, populate in useEffect\n  // This prevents Math.random() from generating different values on server vs client\n  const [particles, setParticles] = useState<Particle[]>([]);\n\n  // Use correct property names with fallbacks\n  const actualCount = count ?? particleCount ?? 50;\n  const actualSize = size ?? particleSize ?? 2;\n  const actualSpeed = speed ?? particleSpeed ?? 1;\n  const actualColor =\n    color ??\n    particleColor ??\n    \"color-mix(in srgb, var(--glass-white) 70%, transparent)\";\n\n  // Helper function to get color values from CSS variables or color-mix\n  const getColorValues = (\n    colorStr: string\n  ): { r: number; g: number; b: number; a?: number } => {\n    if (colorStr.startsWith(\"rgba(\")) {\n      const match = colorStr.match(\n        /rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/\n      );\n      if (match) {\n        return {\n          r: parseInt(match[1]),\n          g: parseInt(match[2]),\n          b: parseInt(match[3]),\n          a: match[4] ? parseFloat(match[4]) : 1,\n        };\n      }\n    }\n    if (\n      colorStr.includes(\"var(--glass-white)\") ||\n      colorStr.includes(\"color-mix\")\n    ) {\n      // For CSS variables, extract white RGB values (255, 255, 255)\n      // In a real implementation, you'd parse the CSS variable at runtime\n      return { r: 255, g: 255, b: 255, a: 0.7 };\n    }\n    // Default fallback - use CSS variable white\n    return { r: 255, g: 255, b: 255, a: 1 };\n  };\n\n  // CRITICAL SSR FIX: Generate particles only on client-side mount\n  // This ensures deterministic behavior and prevents server/client mismatches\n  useEffect(() => {\n    const newParticles: Particle[] = [];\n\n    for (let i = 0; i < actualCount; i++) {\n      newParticles.push({\n        x: Math.random() * 100, // Percentage\n        y: Math.random() * 100, // Percentage\n        size: Math.random() * actualSize + 1,\n        speedX: (Math.random() - 0.5) * actualSpeed * 0.1,\n        speedY: (Math.random() - 0.5) * actualSpeed * 0.1,\n        opacity: Math.random() * 0.5 + 0.3,\n        color: actualColor,\n      });\n    }\n\n    setParticles(newParticles);\n  }, [actualCount, actualSize, actualSpeed, actualColor]);\n\n  // Handle canvas animation\n  useEffect(() => {\n    if (shouldReduceMotion) return;\n\n    const canvas = canvasRef.current;\n    const container = containerRef.current;\n    if (!canvas || !container) return;\n\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx) return;\n\n    // Set canvas size\n    const resizeCanvas = () => {\n      const { width, height } = container.getBoundingClientRect();\n      canvas.width = Math.max(\n        1,\n        Math.round(width || container.clientWidth || 320)\n      );\n      canvas.height = Math.max(\n        1,\n        Math.round(height || container.clientHeight || 220)\n      );\n    };\n\n    resizeCanvas();\n    window.addEventListener(\"resize\", resizeCanvas);\n\n    // Animation loop\n    const animate = () => {\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      // Update and draw particles\n      particles.forEach((particle, index) => {\n        // Convert percentage to actual coordinates\n        const x = (particle.x / 100) * canvas.width;\n        const y = (particle.y / 100) * canvas.height;\n\n        // Draw particle\n        ctx.beginPath();\n        ctx.arc(x, y, particle.size, 0, Math.PI * 2);\n        const colorValues = getColorValues(particle.color);\n        ctx.fillStyle = `rgba(${colorValues.r}, ${colorValues.g}, ${colorValues.b}, ${particle.opacity})`;\n        ctx.fill();\n\n        // Draw connections\n        if (connectParticles) {\n          for (let j = index + 1; j < particles.length; j++) {\n            const otherParticle = particles[j];\n            const otherX = (otherParticle.x / 100) * canvas.width;\n            const otherY = (otherParticle.y / 100) * canvas.height;\n\n            const distance = Math.sqrt(\n              Math.pow(x - otherX, 2) + Math.pow(y - otherY, 2)\n            );\n\n            if (distance < canvas.width * 0.07) {\n              ctx.beginPath();\n              const connectionOpacity =\n                0.3 - (distance / (canvas.width * 0.07)) * 0.3;\n              ctx.strokeStyle = `rgba(${colorValues.r}, ${colorValues.g}, ${colorValues.b}, ${connectionOpacity})`;\n              ctx.lineWidth = 0.5;\n              ctx.moveTo(x, y);\n              ctx.lineTo(otherX, otherY);\n              ctx.stroke();\n            }\n          }\n        }\n\n        // Connect to mouse if interactive and motion is allowed\n        if (interactive && mousePosition && !shouldReduceMotion) {\n          const mouseX = mousePosition.x * canvas.width;\n          const mouseY = mousePosition.y * canvas.height;\n\n          const distance = Math.sqrt(\n            Math.pow(x - mouseX, 2) + Math.pow(y - mouseY, 2)\n          );\n\n          if (distance < canvas.width * 0.1) {\n            ctx.beginPath();\n            const mouseConnectionOpacity =\n              0.5 - (distance / (canvas.width * 0.1)) * 0.5;\n            ctx.strokeStyle = `rgba(${colorValues.r}, ${colorValues.g}, ${colorValues.b}, ${mouseConnectionOpacity})`;\n            ctx.lineWidth = 1;\n            ctx.moveTo(x, y);\n            ctx.lineTo(mouseX, mouseY);\n            ctx.stroke();\n          }\n        }\n\n        // Update position\n        particle.x += particle.speedX;\n        particle.y += particle.speedY;\n\n        // Handle boundaries\n        if (particle.x < 0 || particle.x > 100) {\n          particle.speedX *= -1;\n        }\n\n        if (particle.y < 0 || particle.y > 100) {\n          particle.speedY *= -1;\n        }\n      });\n\n      // Continue animation\n      animationRef.current = requestAnimationFrame(animate);\n    };\n\n    // Start animation\n    animate();\n\n    // Clean up\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n      window.removeEventListener(\"resize\", resizeCanvas);\n    };\n  }, [\n    particles,\n    connectParticles,\n    interactive,\n    mousePosition,\n    shouldReduceMotion,\n  ]);\n\n  // Handle mouse movement\n  useEffect(() => {\n    if (!interactive || shouldReduceMotion) return;\n\n    const handleMouseMove = (e: MouseEvent) => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      setMousePosition({\n        x: (e.clientX - rect.left) / rect.width,\n        y: (e.clientY - rect.top) / rect.height,\n      });\n    };\n\n    window.addEventListener(\"mousemove\", handleMouseMove);\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n    };\n  }, [interactive, shouldReduceMotion]);\n\n  // Combine external ref with internal containerRef\n  const setRefs = useCallback(\n    (node: HTMLDivElement | null) => {\n      if (containerRef.current !== node) {\n        (\n          containerRef as React.MutableRefObject<HTMLDivElement | null>\n        ).current = node;\n      }\n      if (ref) {\n        if (typeof ref === \"function\") {\n          ref(node);\n        } else {\n          (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n        }\n      }\n    },\n    [ref]\n  );\n\n  const blurStyle = useMemo(\n    () =>\n      ({\n        \"--particle-blur\": blur ? `blur(${blurAmount}px)` : \"none\",\n      }) as React.CSSProperties,\n    [blur, blurAmount]\n  );\n\n  return (\n    <OptimizedGlass\n      ref={setRefs}\n      className={cn(styles.container, \"glass-particle-background\", className)}\n      intent={intent as any}\n      elevation={elevation as any}\n      tier={tier as any}\n      style={{\n        width: typeof style?.width === \"undefined\" ? \"100%\" : style.width,\n        minHeight:\n          typeof style?.height === \"undefined\" &&\n          typeof style?.minHeight === \"undefined\"\n            ? 220\n            : style.minHeight,\n        ...(style || {}),\n      }}\n      id={componentId}\n      role=\"img\"\n      aria-label={`Interactive particle background with ${actualCount} ${connectParticles ? \"connected\" : \"floating\"} particles${interactive && !shouldReduceMotion ? \", responding to mouse movement\" : \"\"}`}\n      tabIndex={interactive ? 0 : -1}\n      {...rest}\n    >\n      <div\n        className={styles.backgroundLayer}\n        style={{ backgroundColor: baseColor }}\n      />\n      <canvas\n        ref={canvasRef}\n        aria-hidden=\"true\"\n        role=\"presentation\"\n        className={styles.canvas}\n      />\n      <div\n        aria-hidden=\"true\"\n        className={styles.blurLayer}\n        style={{ ...blurStyle }}\n      />\n      <div className={styles.contentLayer}>{children}</div>\n    </OptimizedGlass>\n  );\n};\n\n// Wrap the component function with forwardRef\nconst ParticleBackground = forwardRef(ParticleBackgroundComponent);\nParticleBackground.displayName = \"ParticleBackground\";\n\nexport default ParticleBackground;\n", ".container {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: none;\n}\n\n.container:focus {\n  outline: 2px solid var(--aura-color-global-border-strong);\n  outline-offset: 2px;\n}\n\n.canvas {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 0;\n  pointer-events: none;\n}\n\n.blurLayer {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  z-index: 1;\n  backdrop-filter: var(--particle-blur, none);\n  -webkit-backdrop-filter: var(--particle-blur, none);\n}\n\n.backgroundLayer {\n  position: absolute;\n  inset: 0;\n  z-index: -1;\n}\n\n.contentLayer {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: 100%;\n}\n", "\"use client\";\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useCallback,\n  useMemo,\n  useRef,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport SpeedDialAction from \"./SpeedDialAction\";\nimport SpeedDialIcon from \"./SpeedDialIcon\";\nimport { SpeedDialProps, SpeedDialActionProps } from \"./types\";\nimport styles from \"./SpeedDial.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nconst COLOR_VARIANT_CLASS: Record<string, keyof typeof styles> = {\n  primary: \"fabSolidPrimary\",\n  secondary: \"fabSolidSecondary\",\n  error: \"fabSolidError\",\n  info: \"fabSolidInfo\",\n  success: \"fabSolidSuccess\",\n  warning: \"fabSolidWarning\",\n  default: \"fabSolidDefault\",\n};\n\nconst resolvePositionStyle = (position: SpeedDialProps[\"position\"]) => {\n  if (!position) return undefined;\n  const entries = Object.entries(position);\n  if (entries.length === 0) return undefined;\n  return entries.reduce<Record<string, string>>((acc, [key, value]) => {\n    if (value === undefined) return acc;\n    acc[key] = typeof value === \"number\" ? `${value}px` : value;\n    return acc;\n  }, {});\n};\n\nconst mergeRefs =\n  <T,>(\n    ...refs: Array<\n      | React.ForwardedRef<T>\n      | React.MutableRefObject<T | null>\n      | null\n      | undefined\n    >\n  ) =>\n  (value: T | null) => {\n    refs.forEach((ref) => {\n      if (!ref) return;\n      if (typeof ref === \"function\") {\n        ref(value);\n      } else {\n        (ref as React.MutableRefObject<T | null>).current = value;\n      }\n    });\n  };\n\n/**\n * SpeedDial Component Implementation\n */\nfunction SpeedDialComponent(\n  props: SpeedDialProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    className,\n    style,\n    icon,\n    children,\n    defaultOpen = false,\n    open: controlledOpen,\n    direction = \"up\",\n    disabled = false,\n    onOpen,\n    onClose,\n    onActionClick,\n    hideOnScroll = false,\n    positionStrategy = \"fixed\",\n    showBackdrop = true,\n    position = { bottom: 16, right: 16 },\n    size = \"medium\",\n    color = \"default\",\n    glass = false,\n    glassActions = false,\n    showTooltips = true,\n    ariaLabel,\n    transition = true,\n    ...rest\n  } = props;\n\n  // Refs\n  const rootRef = useRef<HTMLDivElement | null>(null);\n\n  // State for uncontrolled component\n  const [internalOpen, setInternalOpen] = useState(defaultOpen);\n  const [visible, setVisible] = useState(true);\n\n  // Determine if component is controlled\n  const isControlled = controlledOpen !== undefined;\n  const open = isControlled ? controlledOpen : internalOpen;\n\n  const colorClass = useMemo(() => {\n    const key = COLOR_VARIANT_CLASS[color] ?? COLOR_VARIANT_CLASS.default;\n    return styles[key] ?? styles.fabSolidDefault;\n  }, [color]);\n\n  // Toggle open state\n  const toggle = useCallback(() => {\n    if (disabled) return;\n\n    const newOpen = !open;\n\n    if (!isControlled) {\n      setInternalOpen(newOpen);\n    }\n\n    if (newOpen && onOpen) {\n      onOpen();\n    } else if (!newOpen && onClose) {\n      onClose();\n    }\n  }, [disabled, open, isControlled, onOpen, onClose]);\n\n  // Handle action click\n  const handleActionClick = useCallback(\n    (event: React.MouseEvent<HTMLDivElement>, actionIndex: number) => {\n      if (onActionClick) {\n        onActionClick(event, actionIndex);\n      }\n\n      // Close the speed dial after an action is clicked\n      if (!isControlled) {\n        setInternalOpen(false);\n      }\n\n      if (onClose) {\n        onClose();\n      }\n    },\n    [isControlled, onClose, onActionClick]\n  );\n\n  // Handle backdrop click\n  const handleBackdropClick = useCallback(() => {\n    if (!isControlled) {\n      setInternalOpen(false);\n    }\n\n    if (onClose) {\n      onClose();\n    }\n  }, [isControlled, onClose]);\n\n  // Hide on scroll\n  useEffect(() => {\n    if (!hideOnScroll) return;\n\n    let lastScrollTop =\n      window.pageYOffset || document.documentElement.scrollTop;\n    let scrollTimer: number | undefined;\n\n    const handleScroll = () => {\n      const scrollTop =\n        window.pageYOffset || document.documentElement.scrollTop;\n\n      if (scrollTop > lastScrollTop + 10) {\n        // Scrolling down\n        setVisible(false);\n\n        // Close the speed dial\n        if (open && !isControlled) {\n          setInternalOpen(false);\n        }\n      } else if (scrollTop < lastScrollTop - 10) {\n        // Scrolling up\n        setVisible(true);\n      }\n\n      lastScrollTop = scrollTop;\n\n      // Clear the previous timer\n      if (scrollTimer) {\n        window.clearTimeout(scrollTimer);\n      }\n\n      // Set a new timer to show the speed dial after scrolling stops\n      scrollTimer = window.setTimeout(() => {\n        setVisible(true);\n      }, 1000);\n    };\n\n    window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n      if (scrollTimer) {\n        window.clearTimeout(scrollTimer);\n      }\n    };\n  }, [hideOnScroll, open, isControlled]);\n\n  // Handle keyboard events\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\" && open) {\n        if (!isControlled) {\n          setInternalOpen(false);\n        }\n\n        if (onClose) {\n          onClose();\n        }\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [open, isControlled, onClose]);\n\n  return (\n    <>\n      {/* Backdrop */}\n      {showBackdrop && (\n        <div\n          className={cn(styles.backdrop, open && styles.backdropVisible)}\n          onClick={handleBackdropClick}\n          aria-hidden=\"true\"\n        />\n      )}\n\n      {/* SpeedDial */}\n      <div\n        ref={mergeRefs(ref, rootRef)}\n        className={cn(\n          styles.root,\n          \"glass-speed-dial\",\n          !visible && styles.hidden,\n          className\n        )}\n        style={{\n          position: positionStrategy,\n          ...resolvePositionStyle(position),\n          ...(style ?? {}),\n        }}\n        {...rest}\n      >\n        <div className={styles.container}>\n          <div\n            className={cn(\n              styles.actions,\n              open && styles.actionsOpen,\n              direction === \"up\" || direction === \"down\"\n                ? styles.actionsVertical\n                : styles.actionsHorizontal\n            )}\n            aria-hidden={!open}\n          >\n            {React.Children.toArray(children).map((child, index) => {\n              // Check if the action is a valid React element before rendering\n              if (!React.isValidElement(child)) {\n                return null;\n              }\n\n              // Extract props from the valid element\n              const actionProps = child.props as SpeedDialActionProps;\n\n              return (\n                <SpeedDialAction\n                  key={child.key || index}\n                  {...actionProps}\n                  onClick={(event) => handleActionClick(event, index)}\n                  glass={glassActions}\n                  index={index}\n                  totalActions={React.Children.count(children)}\n                  direction={direction}\n                  transition={transition}\n                  open={open}\n                  showTooltip={showTooltips}\n                  size={size}\n                />\n              );\n            })}\n          </div>\n\n          {/* Main button */}\n          <button\n            type=\"button\"\n            onClick={toggle}\n            aria-label={ariaLabel}\n            aria-expanded={open}\n            aria-haspopup=\"true\"\n            disabled={disabled}\n            className={cn(\n              styles.fab,\n              glass ? styles.fabGlass : colorClass,\n              size === \"small\" && styles.fabSmall,\n              size === \"medium\" && styles.fabMedium,\n              size === \"large\" && styles.fabLarge,\n              disabled && styles.fabDisabled\n            )}\n          >\n            <SpeedDialIcon icon={icon} open={open} />\n          </button>\n        </div>\n      </div>\n    </>\n  );\n}\n\n/**\n * SpeedDial Component\n *\n * A floating action button that expands to show multiple actions.\n */\nconst SpeedDial = forwardRef(SpeedDialComponent);\n\n/**\n * GlassSpeedDial Component\n *\n * Glass variant of the SpeedDial component.\n */\nconst GlassSpeedDial = forwardRef<HTMLDivElement, SpeedDialProps>(\n  (props, ref) => (\n    <SpeedDial {...props} glass={true} glassActions={true} ref={ref} />\n  )\n);\n\nGlassSpeedDial.displayName = \"GlassSpeedDial\";\n\nexport default SpeedDial;\nexport { SpeedDial, GlassSpeedDial };\n", "'use client';\nimport React, { forwardRef, useCallback, useMemo } from 'react';\nimport { cn } from '@/lib/utils';\n\nimport { SpeedDialActionProps } from './types';\nimport styles from './SpeedDialAction.module.css';\n\n// Calculate the position based on direction\nconst getPosition = (\n  direction: 'up' | 'down' | 'left' | 'right',\n  index: number,\n  totalActions: number,\n  size: 'small' | 'medium' | 'large'\n): { top?: string; right?: string; bottom?: string; left?: string } => {\n  // Base spacing between buttons\n  const spacing = size === 'small' ? 40 : size === 'large' ? 65 : 55;\n  const offset = (index + 1) * spacing;\n\n  switch (direction) {\n    case 'up':\n      return { bottom: `${offset}px` };\n    case 'down':\n      return { top: `${offset}px` };\n    case 'left':\n      return { right: `${offset}px` };\n    case 'right':\n      return { left: `${offset}px` };\n    default:\n      return { top: `${offset}px` };\n  }\n};\n\nconst getTransitionDelay = (index: number, totalActions: number, opening: boolean): string => {\n  if (!opening) {\n    return `${(totalActions - 1 - index) * 30}ms`;\n  }\n  return `${index * 30}ms`;\n};\n\nconst SpeedDialActionComponent = (\n  props: SpeedDialActionProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) => {\n  const {\n    className,\n    style,\n    icon,\n    tooltipTitle,\n    tooltip,\n    disabled = false,\n    onClick,\n    glass = false,\n    index = 0,\n    totalActions = 1,\n    direction = 'up',\n    transition = true,\n    showTooltip = true,\n    size = 'medium',\n    open = false,\n    'data-testid': dataTestId,\n    children,\n    'aria-label': ariaLabel,\n    ...rest\n  } = props;\n\n  const positionStyle = useMemo(() => getPosition(direction, index, totalActions, size), [\n    direction,\n    index,\n    totalActions,\n    size,\n  ]);\n\n  const transitionDelay = useMemo(\n    () => (transition ? getTransitionDelay(index, totalActions, open) : '0ms'),\n    [index, totalActions, open, transition]\n  );\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent<HTMLDivElement>) => {\n      event.stopPropagation();\n      if (!disabled) {\n        onClick?.(event);\n      }\n    },\n    [disabled, onClick]\n  );\n\n  const handleKeyDown = useCallback(\n    (event: React.KeyboardEvent<HTMLDivElement>) => {\n      if (disabled) return;\n      if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault();\n        onClick?.(event as unknown as React.MouseEvent<HTMLDivElement>);\n      }\n    },\n    [disabled, onClick]\n  );\n\n  const tooltipContent = tooltipTitle ?? tooltip;\n  // Use children, tooltipContent, or aria-label as accessible name\n  const accessibleName = ariaLabel ?? (typeof children === 'string' ? children : tooltipContent);\n\n  const actionClassName = cn(\n    styles.action,\n    glass ? styles.actionGlass : styles.actionSolid,\n    size === 'small' && styles.sizeSmall,\n    size === 'medium' && styles.sizeMedium,\n    size === 'large' && styles.sizeLarge,\n    !open && direction === 'up' && styles.hiddenUp,\n    !open && direction === 'down' && styles.hiddenDown,\n    !open && direction === 'left' && styles.hiddenLeft,\n    !open && direction === 'right' && styles.hiddenRight,\n    disabled && styles.actionDisabled,\n    !transition && styles.actionNoTransition,\n    className,\n  );\n\n  const tooltipClassName = cn(\n    styles.tooltip,\n    direction === 'up' && styles.tooltipUp,\n    direction === 'down' && styles.tooltipDown,\n    direction === 'left' && styles.tooltipLeft,\n    direction === 'right' && styles.tooltipRight,\n    open && showTooltip && tooltipContent && styles.tooltipVisible,\n  );\n\n  return (\n    <div\n      ref={ref}\n      className={cn('glass-speed-dial-action', actionClassName)}\n      role=\"button\"\n      tabIndex={disabled ? -1 : 0}\n      aria-disabled={disabled}\n      aria-label={accessibleName}\n      data-testid={dataTestId || 'speeddialaction'}\n      style={{\n        ...positionStyle,\n        transitionDelay,\n        ...(style ?? {}),\n      }}\n      onClick={handleClick}\n      onKeyDown={handleKeyDown}\n      {...rest}\n    >\n      {icon}\n      {children && typeof children !== 'string' && children}\n      {tooltipContent && (\n        <div className={tooltipClassName}>{tooltipContent}</div>\n      )}\n    </div>\n  );\n};\n\nconst SpeedDialAction = forwardRef(SpeedDialActionComponent);\nSpeedDialAction.displayName = 'SpeedDialAction';\n\nexport default SpeedDialAction;\n", ".action {\n  position: absolute;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: var(--glass-radius-pill, 9999px);\n  box-shadow: var(--aura-shadow-elevation-sm);\n  transition:\n    transform 220ms cubic-bezier(0.2, 0.8, 0.2, 1),\n    opacity 220ms cubic-bezier(0.2, 0.8, 0.2, 1),\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n  color: var(--aura-color-global-text-on-primary);\n  cursor: pointer;\n}\n\n.actionGlass {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 85%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 80%, transparent);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n}\n\n.actionSolid {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-surface-base) 92%,\n    transparent\n  );\n}\n\n.actionDisabled {\n  opacity: 0.45;\n  pointer-events: none;\n}\n\n.sizeSmall {\n  width: 32px;\n  height: 32px;\n}\n\n.sizeMedium {\n  width: 40px;\n  height: 40px;\n}\n\n.sizeLarge {\n  width: 48px;\n  height: 48px;\n}\n\n.hiddenUp,\n.hiddenDown,\n.hiddenLeft,\n.hiddenRight {\n  opacity: 0;\n  transform: scale(0.6);\n  pointer-events: none;\n}\n\n.hiddenUp {\n  transform: translate3d(0, 12px, 0) scale(0.6);\n}\n\n.hiddenDown {\n  transform: translate3d(0, -12px, 0) scale(0.6);\n}\n\n.hiddenLeft {\n  transform: translate3d(12px, 0, 0) scale(0.6);\n}\n\n.hiddenRight {\n  transform: translate3d(-12px, 0, 0) scale(0.6);\n}\n\n.tooltip {\n  position: absolute;\n  pointer-events: none;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0.3rem 0.5rem;\n  font-size: 0.75rem;\n  border-radius: var(--aura-radius-md);\n  background: var(--aura-color-overlay-surface-strong);\n  color: var(--aura-color-global-text-primary);\n  box-shadow: var(--aura-shadow-elevation-sm);\n  opacity: 0;\n  transform: translate3d(0, 0, 0);\n  transition:\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard),\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n  white-space: nowrap;\n}\n\n.tooltipVisible {\n  opacity: 1;\n}\n\n.tooltipUp {\n  bottom: calc(100% + 4px);\n  left: 50%;\n  transform: translate3d(-50%, -6px, 0);\n}\n\n.tooltipDown {\n  top: calc(100% + 4px);\n  left: 50%;\n  transform: translate3d(-50%, 6px, 0);\n}\n\n.tooltipLeft {\n  right: calc(100% + 4px);\n  top: 50%;\n  transform: translate3d(-6px, -50%, 0);\n}\n\n.tooltipRight {\n  left: calc(100% + 4px);\n  top: 50%;\n  transform: translate3d(6px, -50%, 0);\n}\n\n.actionNoTransition {\n  transition: none !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .action,\n  .tooltip {\n    transition: none;\n  }\n}\n", "\"use client\";\nimport React, { forwardRef } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { SpeedDialIconProps } from \"./types\";\nimport styles from \"./SpeedDialIcon.module.css\";\n\n// Default icons\nconst DefaultIcon = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M19 13H13V19H11V13H5V11H11V5H13V11H19V13Z\" fill=\"currentColor\" />\n  </svg>\n);\n\nconst DefaultOpenIcon = () => (\n  <svg\n    width=\"24\"\n    height=\"24\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path d=\"M19 13H5V11H19V13Z\" fill=\"currentColor\" />\n  </svg>\n);\n\nconst isOpenIconProvided = (props: SpeedDialIconProps) =>\n  Object.prototype.hasOwnProperty.call(props, \"openIcon\");\n\nfunction SpeedDialIconComponent(\n  props: SpeedDialIconProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const { className, style, icon, openIcon, open = false, ...rest } = props;\n\n  // Default icons\n  const iconToShow = icon || <DefaultIcon />;\n  const openIconToShow = openIcon || <DefaultOpenIcon />;\n\n  // If only using one icon, rotate it\n  if (!openIcon && !isOpenIconProvided(props)) {\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          \"glass-speed-dial-icon\",\n          styles.icon,\n          open && styles.iconOpen,\n          className\n        )}\n        style={{ ...(style || {}) }}\n        {...rest}\n      >\n        {iconToShow}\n      </div>\n    );\n  }\n\n  // Using two separate icons for open/closed states\n  return (\n    <div\n      ref={ref}\n      className={cn(\"glass-speed-dial-icon\", styles.iconContainer, className)}\n      style={{ ...(style || {}) }}\n      {...rest}\n    >\n      <div className={cn(styles.iconLayer, !open && styles.iconLayerActive)}>\n        {iconToShow}\n      </div>\n      <div className={cn(styles.iconLayer, open && styles.iconLayerActive)}>\n        {openIconToShow}\n      </div>\n    </div>\n  );\n}\n\n/**\n * SpeedDialIcon Component\n *\n * An icon component for the SpeedDial that transitions between open and closed states.\n */\nexport const SpeedDialIcon = forwardRef(SpeedDialIconComponent);\n\nexport default SpeedDialIcon;\n", ".icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 24px;\n  height: 24px;\n  transition: transform var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.iconOpen {\n  transform: rotate(45deg);\n}\n\n.iconContainer {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n.iconLayer {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard),\n    transform var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n  opacity: 0;\n  transform: scale(0.6);\n}\n\n.iconLayerActive {\n  opacity: 1;\n  transform: scale(1);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .icon,\n  .iconLayer {\n    transition: none;\n  }\n}\n", ".root {\n  position: fixed;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  z-index: var(--aura-z-overlay, 1050);\n  transition:\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.hidden {\n  transform: scale(0);\n  opacity: 0;\n}\n\n.container {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.fab {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: var(--glass-radius-pill, 9999px);\n  box-shadow: var(--aura-shadow-elevation-md);\n  cursor: pointer;\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n  color: var(--aura-color-global-text-on-primary);\n}\n\n.fab:not(.fabDisabled):hover {\n  box-shadow: var(--aura-shadow-elevation-lg);\n  transform: scale(1.02);\n}\n\n.fab:not(.fabDisabled):active {\n  transform: scale(0.96);\n}\n\n.fabGlass {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 85%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 80%, transparent);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n}\n\n.fabSolidPrimary {\n  background: var(--aura-color-semantic-primary);\n}\n\n.fabSolidSecondary {\n  background: var(--aura-color-semantic-secondary);\n}\n\n.fabSolidError {\n  background: var(--aura-color-semantic-danger);\n}\n\n.fabSolidInfo {\n  background: var(--aura-color-semantic-info);\n}\n\n.fabSolidSuccess {\n  background: var(--aura-color-semantic-success);\n}\n\n.fabSolidWarning {\n  background: var(--aura-color-semantic-warning);\n}\n\n.fabSolidDefault {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-surface-base) 88%,\n    transparent\n  );\n}\n\n.fabDisabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.fabSmall {\n  width: 40px;\n  height: 40px;\n}\n\n.fabMedium {\n  width: 56px;\n  height: 56px;\n}\n\n.fabLarge {\n  width: 64px;\n  height: 64px;\n}\n\n.fabHover {\n  background: color-mix(in srgb, currentColor 22%, transparent);\n}\n\n.fabActive {\n  transform: scale(0.96);\n}\n\n.actions {\n  position: absolute;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  pointer-events: none;\n}\n\n.actionsOpen {\n  pointer-events: auto;\n}\n\n.actionsVertical {\n  flex-direction: column;\n}\n\n.actionsHorizontal {\n  flex-direction: row;\n}\n\n.backdrop {\n  position: fixed;\n  inset: 0;\n  background: color-mix(\n    in srgb,\n    var(--aura-color-overlay-surface-strong) 50%,\n    transparent\n  );\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity var(--aura-motion-duration-fast)\n    var(--aura-motion-easing-standard);\n  z-index: calc(var(--aura-z-overlay, 1050) - 1);\n}\n\n.backdropVisible {\n  opacity: 1;\n  pointer-events: auto;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .root,\n  .fab,\n  .actions {\n    transition: none;\n  }\n}\n", "\"use client\";\n/**\n * Glass ToggleButton Component\n *\n * A button that can be toggled on/off, with glass morphism styling.\n */\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useRef,\n  useState,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Motion, OptimizedGlass } from \"../../primitives\";\nimport { createButtonA11y, useA11yId } from \"../../utils/a11y\";\nimport { useAchievements } from \"../advanced/GlassAchievementSystem\";\nimport { useBiometricAdaptation } from \"../advanced/GlassBiometricAdaptation\";\nimport { useEyeTracking } from \"../advanced/GlassEyeTracking\";\nimport {\n  useInteractionRecorder,\n  usePredictiveEngine,\n} from \"../advanced/GlassPredictiveEngine\";\nimport { useSpatialAudio } from \"../advanced/GlassSpatialAudio\";\nimport type { ConsciousnessFeatures } from \"../layout/GlassContainer\";\nimport { getSafeWindow } from \"../../utils/env\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nimport { ToggleButtonProps } from \"./types\";\n\n// Get color intent mapping\nconst getColorIntent = (\n  color: string\n): \"neutral\" | \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" => {\n  switch (color) {\n    case \"primary\":\n      return \"primary\";\n    case \"secondary\":\n      return \"info\";\n    case \"success\":\n      return \"success\";\n    case \"error\":\n      return \"danger\";\n    case \"warning\":\n      return \"warning\";\n    case \"info\":\n      return \"info\";\n    default:\n      return \"neutral\";\n  }\n};\n\n// Get variant classes\nconst getVariantClasses = (\n  variant: string,\n  selected: boolean,\n  color: string\n) => {\n  const baseClasses = \"transition-all duration-200 ease-in-out\";\n  const outlinedColorClasses: Record<\n    string,\n    { selected: string; unselected: string }\n  > = {\n    default: {\n      selected: \"bg-white/15 glass-text-primary border-white/30\",\n      unselected:\n        \"bg-transparent glass-text-secondary border-white/20 hover:bg-white/10\",\n    },\n    primary: {\n      selected: \"bg-primary-500 glass-text-primary border-primary-600\",\n      unselected:\n        \"bg-transparent text-primary-400 border-primary-300 hover:bg-primary-500/10\",\n    },\n    secondary: {\n      selected: \"bg-secondary-500 glass-text-primary border-secondary-600\",\n      unselected:\n        \"bg-transparent text-secondary-400 border-secondary-300 hover:bg-secondary-500/10\",\n    },\n    success: {\n      selected: \"bg-success-500 glass-text-primary border-success-600\",\n      unselected:\n        \"bg-transparent text-success-400 border-success-300 hover:bg-success-500/10\",\n    },\n    error: {\n      selected: \"bg-danger-500 glass-text-primary border-danger-600\",\n      unselected:\n        \"bg-transparent text-danger-400 border-danger-300 hover:bg-danger-500/10\",\n    },\n    warning: {\n      selected: \"bg-warning-500 glass-text-primary border-warning-600\",\n      unselected:\n        \"bg-transparent text-warning-400 border-warning-300 hover:bg-warning-500/10\",\n    },\n    info: {\n      selected: \"bg-info-500 glass-text-primary border-info-600\",\n      unselected:\n        \"bg-transparent text-info-400 border-info-300 hover:bg-info-500/10\",\n    },\n  };\n\n  switch (variant) {\n    case \"primary\":\n      return cn(\n        baseClasses,\n        selected\n          ? \"bg-primary-500 glass-text-primary border-primary-600 shadow-md\"\n          : \"bg-transparent text-primary-400 border-primary-300 hover:bg-primary-500/10\"\n      );\n    case \"secondary\":\n      return cn(\n        baseClasses,\n        selected\n          ? \"bg-secondary-500 glass-text-primary border-secondary-600 shadow-md\"\n          : \"bg-transparent text-secondary-400 border-secondary-300 hover:bg-secondary-500/10\"\n      );\n    case \"outlined\": {\n      const outlinedClasses =\n        outlinedColorClasses[color] || outlinedColorClasses.default;\n      return cn(\n        baseClasses,\n        \"border-2\",\n        selected ? outlinedClasses.selected : outlinedClasses.unselected\n      );\n    }\n    default:\n      return cn(\n        baseClasses,\n        selected\n          ? \"bg-white/15 glass-text-primary border-white/30 shadow-md\"\n          : \"bg-transparent glass-text-secondary border-white/20 hover:bg-white/10\"\n      );\n  }\n};\n\n// Get size classes\nconst getSizeClasses = (size: string) => {\n  switch (size) {\n    case \"sm\":\n      return \"h-8 px-3 text-sm min-w-16\";\n    case \"lg\":\n      return \"h-12 px-6 text-base min-w-24\";\n    case \"md\":\n    case \"medium\":\n    default:\n      return \"h-10 px-4 text-sm min-w-20\";\n  }\n};\n\n// Get group classes\nconst getGroupClasses = (\n  grouped: boolean,\n  groupOrientation: \"horizontal\" | \"vertical\" = \"horizontal\",\n  isGroupStart: boolean = false,\n  isGroupEnd: boolean = false\n) => {\n  if (!grouped) return \"\";\n\n  const classes = [];\n\n  if (groupOrientation === \"horizontal\") {\n    if (!isGroupStart) classes.push(\"rounded-l-none border-l-0 -ml-px\");\n    if (!isGroupEnd) classes.push(\"rounded-r-none\");\n  } else {\n    if (!isGroupStart) classes.push(\"rounded-t-none border-t-0 -mt-px\");\n    if (!isGroupEnd) classes.push(\"rounded-b-none\");\n  }\n\n  return classes.join(\" \");\n};\n\n// Enhanced toggle button props interface\ninterface EnhancedToggleButtonProps\n  extends ToggleButtonProps,\n    ConsciousnessFeatures {\n  /** Accessible label for the button */\n  \"aria-label\"?: string;\n  /** ID of element that labels the button */\n  \"aria-labelledby\"?: string;\n  /** ID of element(s) that describe the button */\n  \"aria-describedby\"?: string;\n  /** Whether button controls expanded content */\n  \"aria-expanded\"?: boolean;\n  /** ID of element controlled by this button */\n  \"aria-controls\"?: string;\n  /** Whether button has popup menu or dialog */\n  \"aria-haspopup\"?:\n    | boolean\n    | \"false\"\n    | \"true\"\n    | \"menu\"\n    | \"listbox\"\n    | \"tree\"\n    | \"grid\"\n    | \"dialog\";\n  /** Description text for complex buttons (automatically creates describedby) */\n  description?: string;\n}\n\n/**\n * ToggleButton Component Implementation\n */\nfunction ToggleButtonComponent(\n  props: EnhancedToggleButtonProps,\n  ref: React.ForwardedRef<HTMLButtonElement>\n) {\n  const {\n    value,\n    selected = false,\n    disabled = false,\n    onChange,\n    children,\n    className,\n    style,\n    glass = false,\n    // Prevent custom props from leaking to DOM\n    glassVariant,\n    blurStrength,\n    color = \"default\",\n    size = \"medium\",\n    fullWidth = false,\n    variant = \"outlined\",\n    // Group props\n    grouped = false,\n    groupOrientation = \"horizontal\",\n    isGroupStart = false,\n    isGroupEnd = false,\n    // Glass props\n    intent = \"neutral\",\n    elevation = \"level2\",\n    tier = \"medium\",\n    // Accessibility props\n    description,\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": ariaLabelledBy,\n    \"aria-describedby\": ariaDescribedBy,\n    \"aria-expanded\": ariaExpanded,\n    \"aria-controls\": ariaControls,\n    \"aria-haspopup\": ariaHaspopup,\n    // Consciousness features\n    predictive = false,\n    preloadContent = false,\n    eyeTracking = false,\n    gazeResponsive = false,\n    adaptive = false,\n    biometricResponsive = false,\n    spatialAudio = false,\n    audioFeedback = false,\n    trackAchievements = false,\n    achievementId,\n    usageContext = \"toggle\",\n    ...rest\n  } = props;\n\n  const buttonRef = useRef<HTMLButtonElement>(null);\n  const prefersReducedMotion = useReducedMotion();\n  const [isHovered, setIsHovered] = useState(false);\n  const [clickCount, setClickCount] = useState(0);\n\n  // Consciousness feature hooks - only initialize if features are enabled\n  const predictiveEngine = predictive ? usePredictiveEngine() : null;\n  const eyeTracker = eyeTracking ? useEyeTracking() : null;\n  const biometricAdapter = adaptive ? useBiometricAdaptation() : null;\n  const spatialAudioEngine = spatialAudio ? useSpatialAudio() : null;\n  const achievementTracker = trackAchievements ? useAchievements() : null;\n  const { recordInteraction } = usePredictiveEngine();\n  const interactionRecorder =\n    predictive || trackAchievements\n      ? useInteractionRecorder(`glass-toggle-${variant}-${usageContext}`)\n      : null;\n\n  // Generate unique ID for accessibility\n  const componentId = useA11yId(\"glass-toggle\");\n  const descriptionId = description\n    ? useA11yId(\"glass-toggle-desc\")\n    : undefined;\n\n  // Handle ref forwarding\n  useImperativeHandle(ref, () => buttonRef.current as HTMLButtonElement);\n\n  // Eye tracking effects\n  useEffect(() => {\n    if (!gazeResponsive || !eyeTracker || !buttonRef.current) return;\n\n    const handleGazeEnter = () => {\n      if (!disabled) {\n        setIsHovered(true);\n\n        if (spatialAudioEngine && audioFeedback) {\n          spatialAudioEngine.playGlassSound(\"toggle_gaze_enter\", {\n            x: buttonRef.current?.offsetLeft || 0,\n            y: buttonRef.current?.offsetTop || 0,\n            z: 0,\n          });\n        }\n      }\n    };\n\n    const handleGazeExit = () => {\n      setIsHovered(false);\n    };\n\n    // Eye tracking methods not available in current implementation\n    // eyeTracker.onGazeEnter(buttonRef.current, handleGazeEnter);\n    // eyeTracker.onGazeExit(buttonRef.current, handleGazeExit);\n\n    return () => {\n      if (buttonRef.current) {\n        // eyeTracker.offGazeEnter(buttonRef.current, handleGazeEnter);\n        // eyeTracker.offGazeExit(buttonRef.current, handleGazeExit);\n      }\n    };\n  }, [gazeResponsive, eyeTracker, disabled, spatialAudioEngine, audioFeedback]);\n\n  // Enhanced interaction tracking\n  const handleClick = useCallback(\n    (event: React.MouseEvent) => {\n      if (disabled) return;\n\n      setClickCount((prev: any) => prev + 1);\n\n      // Record interaction for predictive learning\n      if (recordInteraction) {\n        const safeWindow = getSafeWindow();\n        const viewportWidth = safeWindow?.innerWidth ?? 1024;\n        const viewportHeight = safeWindow?.innerHeight ?? 768;\n        recordInteraction({\n          type: \"click\",\n          element: \"toggle-button\",\n          context: {\n            viewport: { width: viewportWidth, height: viewportHeight },\n            timeOfDay: new Date().getHours(),\n            deviceType:\n              viewportWidth < 768\n                ? \"mobile\"\n                : viewportWidth < 1024\n                  ? \"tablet\"\n                  : \"desktop\",\n          },\n          metadata: { action: \"toggle-click\", selected: !selected },\n        });\n      }\n\n      // Play spatial audio feedback\n      if (spatialAudioEngine && audioFeedback) {\n        spatialAudioEngine.playGlassSound(\"toggle_click\", {\n          x: buttonRef.current?.offsetLeft || 0,\n          y: buttonRef.current?.offsetTop || 0,\n          z: 0,\n        });\n      }\n\n      // Track achievements\n      if (achievementTracker && trackAchievements) {\n        achievementTracker.recordAction(achievementId || \"toggle_interaction\", {\n          variant,\n          context: usageContext,\n          selected: !selected,\n          clickCount,\n          timestamp: Date.now(),\n        });\n      }\n\n      // Call original onChange handler\n      if (onChange && value !== undefined) {\n        onChange(event as React.MouseEvent<HTMLButtonElement>, value);\n      }\n    },\n    [\n      disabled,\n      recordInteraction,\n      spatialAudioEngine,\n      audioFeedback,\n      achievementTracker,\n      trackAchievements,\n      achievementId,\n      variant,\n      usageContext,\n      selected,\n      clickCount,\n      onChange,\n      value,\n    ]\n  );\n\n  // Create accessibility attributes\n  const a11yProps = createButtonA11y({\n    id: componentId,\n    label: ariaLabel,\n    description,\n    pressed: selected,\n    expanded:\n      typeof ariaExpanded === \"boolean\"\n        ? ariaExpanded\n        : ariaExpanded === \"true\"\n          ? true\n          : ariaExpanded === \"false\"\n            ? false\n            : undefined,\n    controls: ariaControls,\n    haspopup:\n      ariaHaspopup === \"false\"\n        ? false\n        : ariaHaspopup === \"true\"\n          ? true\n          : (ariaHaspopup as any),\n    disabled: disabled,\n    descriptionId,\n  });\n\n  // Get computed classes\n  const colorIntent = getColorIntent(color);\n  const variantClasses = getVariantClasses(variant, selected, color);\n  const sizeClasses = getSizeClasses(size);\n  const groupClasses = getGroupClasses(\n    grouped,\n    groupOrientation,\n    isGroupStart,\n    isGroupEnd\n  );\n\n  const baseClasses = cn(\n    // Base styles\n    \"inline-flex items-center justify-center relative\",\n    \"box-border outline-none border-0 m-0\",\n    \"select-none align-middle appearance-none no-underline\",\n    \"font-medium leading-7\",\n    \"glass-radius-md border\",\n    prefersReducedMotion && \"transition-none\",\n    // Size classes\n    sizeClasses,\n    // Variant classes\n    variantClasses,\n    // Group classes\n    groupClasses,\n    // Full width\n    fullWidth && \"w-full\",\n    // Disabled state\n    disabled && \"cursor-default pointer-events-none opacity-50\",\n    !disabled && \"cursor-pointer glass-focus glass-touch-target\",\n    // Consciousness feature styles\n    gazeResponsive &&\n      isHovered /* || (eyeTracker?.isGazing && !disabled) */ &&\n      \"ring-2 ring-blue-400/40\",\n    className\n  );\n\n  const combinedStyle = { ...style };\n\n  if (glass) {\n    return (\n      <Motion\n        data-glass-component\n        preset=\"scaleIn\"\n        animateOnHover={!disabled && !prefersReducedMotion}\n        duration={prefersReducedMotion ? 0 : 0.2}\n        className=\"glass-inline-glass-block\"\n      >\n        <OptimizedGlass\n          ref={(node) => {\n            if (ref) {\n              if (typeof ref === \"function\") {\n                ref(node as any);\n              } else {\n                ref.current = node as any;\n              }\n            }\n            if (buttonRef.current !== undefined) {\n              (buttonRef as any).current = node;\n            }\n          }}\n          as=\"button\"\n          intent={intent}\n          elevation={elevation}\n          tier={tier}\n          variant=\"frosted\"\n          intensity=\"medium\"\n          border=\"subtle\"\n          interactive\n          hoverSheen\n          liftOnHover\n          press\n          className={baseClasses}\n          style={{ ...(combinedStyle || {}) }}\n          type=\"button\"\n          disabled={disabled}\n          onClick={handleClick}\n          onMouseEnter={() => setIsHovered(true)}\n          onMouseLeave={() => setIsHovered(false)}\n          {...a11yProps}\n          {...rest}\n        >\n          <span className=\"glass-relative glass-z-10\">{children}</span>\n          {description && (\n            <span id={descriptionId} className=\"glass-sr-only\">\n              {description}\n            </span>\n          )}\n        </OptimizedGlass>\n      </Motion>\n    );\n  }\n\n  return (\n    <Motion\n      preset=\"scaleIn\"\n      animateOnHover={!disabled && !prefersReducedMotion}\n      duration={prefersReducedMotion ? 0 : 0.2}\n      className=\"glass-inline-glass-block\"\n    >\n      <button\n        ref={(node) => {\n          if (ref) {\n            if (typeof ref === \"function\") {\n              ref(node as HTMLButtonElement);\n            } else {\n              ref.current = node as HTMLButtonElement;\n            }\n          }\n          if (buttonRef.current !== undefined) {\n            (buttonRef as any).current = node;\n          }\n        }}\n        className={baseClasses}\n        style={{ ...(combinedStyle || {}) }}\n        type=\"button\"\n        disabled={disabled}\n        onClick={handleClick}\n        onMouseEnter={() => setIsHovered(true)}\n        onMouseLeave={() => setIsHovered(false)}\n        {...a11yProps}\n        {...rest}\n      >\n        {children}\n        {description && (\n          <span id={descriptionId} className=\"glass-sr-only\">\n            {description}\n          </span>\n        )}\n      </button>\n    </Motion>\n  );\n}\n\n/**\n * ToggleButton Component\n *\n * A button that can be toggled on/off, with glass morphism styling.\n */\nconst ToggleButton = forwardRef(ToggleButtonComponent);\n\n/**\n * GlassToggleButton Component\n *\n * Glass variant of the ToggleButton component.\n */\nconst GlassToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n  (props, ref) => {\n    // Convert Booleanish aria-expanded to boolean\n    const processedProps = {\n      ...props,\n      \"aria-expanded\":\n        typeof props[\"aria-expanded\"] === \"boolean\"\n          ? props[\"aria-expanded\"]\n          : props[\"aria-expanded\"] === \"true\"\n            ? true\n            : props[\"aria-expanded\"] === \"false\"\n              ? false\n              : props[\"aria-expanded\"],\n    };\n\n    return <ToggleButton {...processedProps} glass={true} ref={ref} />;\n  }\n);\n\nGlassToggleButton.displayName = \"GlassToggleButton\";\n\nexport default ToggleButton;\nexport { GlassToggleButton, ToggleButton };\n", "\"use client\";\n/**\n * ToggleButtonGroup Component\n *\n * A group of toggle buttons with glass morphism styling.\n */\nimport React, {\n  forwardRef,\n  Children,\n  isValidElement,\n  cloneElement,\n  useState,\n  useCallback,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { OptimizedGlass } from \"../../primitives\";\nimport { Motion } from \"../../primitives\";\nimport { ToggleButtonGroupProps, ToggleButtonProps } from \"./types\";\n\n// Get group orientation classes\nconst getGroupOrientationClasses = (\n  orientation: \"horizontal\" | \"vertical\",\n  fullWidth: boolean\n) => {\n  return cn(\n    \"inline-flex glass-radius-md\",\n    orientation === \"vertical\" ? \"flex-col\" : \"flex-row\",\n    fullWidth ? \"w-full\" : \"w-auto\"\n  );\n};\n\n/**\n * ToggleButtonGroup Component Implementation\n */\nfunction ToggleButtonGroupComponent(\n  props: ToggleButtonGroupProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    children,\n    value: controlledValue,\n    defaultValue,\n    onChange,\n    exclusive = false,\n    orientation = \"horizontal\",\n    className,\n    style,\n    glass = false,\n    // Prevent custom props from leaking to DOM\n    glassVariant,\n    blurStrength,\n    color = \"primary\",\n    size = \"medium\",\n    fullWidth = false,\n    variant = \"outlined\",\n    ...rest\n  } = props;\n\n  // State for uncontrolled component\n  const [internalValue, setInternalValue] = useState<any | any[]>(\n    defaultValue !== undefined\n      ? exclusive && Array.isArray(defaultValue)\n        ? (defaultValue[0] ?? null)\n        : defaultValue\n      : null\n  );\n\n  // Determine if component is controlled\n  const isControlled = controlledValue !== undefined;\n  const value = isControlled ? controlledValue : internalValue;\n\n  // Handle button selection\n  const handleButtonSelection = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>, buttonValue: any) => {\n      // Always stop propagation to prevent parent handlers from being notified\n      event.stopPropagation();\n\n      let newValue: any | any[];\n\n      if (exclusive) {\n        // In exclusive mode, only one button can be selected\n        newValue = value === buttonValue ? null : buttonValue;\n      } else {\n        // In non-exclusive mode, multiple buttons can be selected\n        const valueArray = Array.isArray(value) ? value : value ? [value] : [];\n\n        if (valueArray.includes(buttonValue)) {\n          newValue = valueArray.filter((v: any) => v !== buttonValue);\n          if ((newValue?.length || 0) === 0) newValue = null;\n        } else {\n          newValue = [...valueArray, buttonValue];\n        }\n      }\n\n      // Update internal value if uncontrolled\n      if (!isControlled) {\n        setInternalValue(newValue);\n      }\n\n      // Notify parent if callback provided\n      if (onChange) {\n        onChange(event, newValue);\n      }\n    },\n    [value, exclusive, isControlled, onChange]\n  );\n\n  // Prepare children with additional props\n  const childrenCount = Children.count(children);\n  const childrenWithProps = Children.map(children, (child, index) => {\n    if (!isValidElement<ToggleButtonProps>(child)) {\n      return child;\n    }\n\n    // Calculate group position flags\n    const isGroupStart = index === 0;\n    const isGroupEnd = index === childrenCount - 1;\n\n    // Determine if this button is selected\n    const isSelected = exclusive\n      ? child.props?.value === value\n      : Array.isArray(value)\n        ? value.includes(child.props?.value)\n        : child.props?.value === value;\n\n    // Create props for the child button\n    const childProps = {\n      color,\n      size,\n      fullWidth,\n      variant,\n      glass,\n      glassVariant,\n      blurStrength,\n      selected: isSelected,\n      onChange: handleButtonSelection,\n      grouped: true,\n      groupOrientation: orientation,\n      isGroupStart,\n      isGroupEnd,\n    };\n\n    return cloneElement(child, childProps);\n  });\n\n  const groupClasses = getGroupOrientationClasses(orientation, fullWidth);\n\n  return (\n    <div\n      data-glass-component\n      ref={ref}\n      role=\"group\"\n      className={cn(groupClasses, className)}\n      style={{ ...(style || {}) }}\n      {...rest}\n    >\n      {childrenWithProps}\n    </div>\n  );\n}\n\n/**\n * ToggleButtonGroup Component\n *\n * A group of toggle buttons.\n */\nconst ToggleButtonGroup = forwardRef(ToggleButtonGroupComponent);\n\n/**\n * GlassToggleButtonGroup Component\n *\n * Glass variant of the ToggleButtonGroup component.\n */\nconst GlassToggleButtonGroup = forwardRef<\n  HTMLDivElement,\n  ToggleButtonGroupProps\n>((props, ref) => <ToggleButtonGroup {...props} glass={true} ref={ref} />);\n\nGlassToggleButtonGroup.displayName = \"GlassToggleButtonGroup\";\n\nexport default ToggleButtonGroup;\nexport { ToggleButtonGroup, GlassToggleButtonGroup };\n", "\"use client\";\n/**\n * TreeItem Component\n *\n * A item component for the TreeView.\n */\nimport React, {\n  forwardRef,\n  useContext,\n  useRef,\n  useMemo,\n  useState,\n  useEffect,\n  useLayoutEffect,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport {\n  SpringConfig,\n  SpringPresets,\n} from \"../../animations/physics/springPhysics\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { TreeViewContext } from \"./TreeView\";\nimport styles from \"./TreeItem.module.css\";\n\n// TreeItem props interface\ninterface TreeItemProps extends React.HTMLAttributes<HTMLLIElement> {\n  nodeId: string;\n  label: string;\n  children?: React.ReactNode;\n  glass?: boolean;\n  color?: string;\n  icon?: React.ReactNode;\n  expandIcon?: React.ReactNode;\n  collapseIcon?: React.ReactNode;\n  endIcon?: React.ReactNode;\n  disabled?: boolean;\n  animationConfig?: Partial<SpringConfig>;\n  disableAnimation?: boolean;\n  motionSensitivity?: number;\n}\n\n// Default icons\nconst DefaultExpandIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M8.59 16.59L13.17 12L8.59 7.41L10 6L16 12L10 18L8.59 16.59Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nconst DefaultCollapseIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M7.41 8.59L12 13.17L16.59 8.59L18 10L12 16L6 10L7.41 8.59Z\"\n      fill=\"currentColor\"\n    />\n  </svg>\n);\n\nconst DefaultEndIcon = () => (\n  <svg\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\" />\n  </svg>\n);\n\n/**\n * TreeItem Component Implementation\n */\nfunction TreeItemComponent(\n  props: TreeItemProps,\n  ref: React.ForwardedRef<HTMLLIElement>\n) {\n  const {\n    nodeId,\n    label,\n    children,\n    className,\n    style,\n    glass: propGlass,\n    color,\n    icon,\n    expandIcon,\n    collapseIcon,\n    endIcon,\n    disabled = false,\n    animationConfig,\n    disableAnimation,\n    motionSensitivity,\n    ...rest\n  } = props;\n\n  const prefersReducedMotion = useReducedMotion();\n  const { defaultSpring } = useAnimationContext();\n  const finalDisableAnimation = disableAnimation ?? prefersReducedMotion;\n\n  // Refs\n  const contentRef = useRef<HTMLDivElement>(null);\n  const childrenRef = useRef<HTMLUListElement>(null);\n\n  // Get TreeView context\n  const treeContext = useContext(TreeViewContext);\n\n  if (!treeContext) {\n    throw new Error(\"TreeItem must be used within a TreeView\");\n  }\n\n  const {\n    expanded,\n    selected,\n    focused,\n    size,\n    disabled: contextDisabled,\n    glass: contextGlass,\n    selectNode,\n    toggleNode,\n    focusNode,\n  } = treeContext;\n\n  // Merge props with context\n  const finalGlass = propGlass !== undefined ? propGlass : contextGlass;\n  const finalDisabled = disabled || contextDisabled;\n\n  // Check if the node has children\n  const hasChildren = React.Children.count(children) > 0;\n\n  // Check if the node is expanded\n  const isExpanded = hasChildren && expanded.includes(nodeId);\n\n  // Check if the node is selected\n  const isSelected = selected.includes(nodeId);\n\n  // Check if the node is focused\n  const isFocused = focused.includes(nodeId);\n\n  // Animation Context and Config Calculation\n  const finalSpringConfig = useMemo(() => {\n    const baseConfig: SpringConfig = SpringPresets.default;\n    let contextConfig: Partial<SpringConfig> = {};\n    if (typeof defaultSpring === \"string\" && defaultSpring in SpringPresets) {\n      contextConfig =\n        SpringPresets[defaultSpring as keyof typeof SpringPresets];\n    } else if (typeof defaultSpring === \"object\") {\n      contextConfig = defaultSpring ?? {};\n    }\n\n    let propConfig: Partial<SpringConfig> = {};\n    const propSource = animationConfig;\n    if (typeof propSource === \"string\" && propSource in SpringPresets) {\n      propConfig = SpringPresets[propSource as keyof typeof SpringPresets];\n    } else if (typeof propSource === \"object\") {\n      propConfig = propSource ?? {};\n    }\n\n    // Return merged config\n    return { ...baseConfig, ...contextConfig, ...propConfig };\n  }, [defaultSpring, animationConfig]);\n\n  // State for measuring height\n  const [measuredHeight, setMeasuredHeight] = useState<number | \"auto\">(\"auto\");\n\n  // UseLayoutEffect to measure height before animation\n  useLayoutEffect(() => {\n    let rafId: number | null = null;\n    if (isExpanded && childrenRef.current) {\n      // Use requestAnimationFrame to defer measurement slightly\n      rafId = requestAnimationFrame(() => {\n        if (childrenRef.current) {\n          // Check ref again inside RAF\n          const height = childrenRef.current.scrollHeight;\n          setMeasuredHeight(height);\n        }\n      });\n    } else {\n      // Set to 0 when collapsed or no children\n      setMeasuredHeight(0);\n    }\n\n    // Cleanup RAF on effect change or unmount\n    return () => {\n      if (rafId !== null) {\n        cancelAnimationFrame(rafId);\n      }\n    };\n  }, [isExpanded, children]); // Rerun when expansion state or children change\n\n  // Define spring targets using useMemo\n  const animationTargets = useMemo(\n    () => ({\n      // Use measuredHeight, ensuring it's a number for the spring\n      height:\n        isExpanded && typeof measuredHeight === \"number\" ? measuredHeight : 0,\n      opacity: isExpanded ? 1 : 0,\n    }),\n    [isExpanded, measuredHeight]\n  );\n\n  // Simple animation style calculation\n  const animatedStyle = finalDisableAnimation\n    ? {\n        height: animationTargets.height,\n        opacity: animationTargets.opacity,\n        transform: isExpanded\n          ? \"perspective(800px) rotateX(0deg)\"\n          : \"perspective(800px) rotateX(-5deg)\",\n        transformOrigin: \"top\",\n      }\n    : {\n        height: animationTargets.height,\n        opacity: animationTargets.opacity,\n        transform: isExpanded\n          ? \"perspective(800px) rotateX(0deg)\"\n          : \"perspective(800px) rotateX(-5deg)\",\n        transformOrigin: \"top\",\n        transition: `height ${ANIMATION.DURATION.normal}ms ${ANIMATION.EASING.ease}, opacity ${ANIMATION.DURATION.normal}ms ${ANIMATION.EASING.ease}, transform ${ANIMATION.DURATION.normal}ms ${ANIMATION.EASING.ease}`,\n      };\n\n  // Handle click event\n  const handleClick = (event: React.MouseEvent<HTMLDivElement>) => {\n    event.stopPropagation();\n\n    // Select the node\n    if (!finalDisabled && selectNode) {\n      selectNode(nodeId);\n    }\n  };\n\n  // Handle expand/collapse\n  const handleToggle = (event: React.MouseEvent<HTMLDivElement>) => {\n    event.stopPropagation();\n\n    // Toggle the node\n    if (!finalDisabled && hasChildren && toggleNode) {\n      toggleNode(nodeId);\n    }\n  };\n\n  // Handle keyboard events\n  const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n    if (finalDisabled) return;\n\n    switch (event.key) {\n      case \" \":\n      case \"Enter\":\n        event.preventDefault();\n        if (selectNode) {\n          selectNode(nodeId);\n        }\n        break;\n      case \"ArrowRight\":\n        event.preventDefault();\n        if (hasChildren && !isExpanded && toggleNode) {\n          toggleNode(nodeId);\n        }\n        break;\n      case \"ArrowLeft\":\n        event.preventDefault();\n        if (hasChildren && isExpanded && toggleNode) {\n          toggleNode(nodeId);\n        }\n        break;\n      default:\n        break;\n    }\n  };\n\n  // Handle focus\n  const handleFocus = (event: React.FocusEvent<HTMLDivElement>) => {\n    if (!finalDisabled && focusNode) {\n      focusNode(nodeId);\n    }\n  };\n\n  // Determine which icon to show\n  const renderToggleIcon = () => {\n    if (!hasChildren) {\n      return endIcon || <DefaultEndIcon />;\n    }\n\n    if (isExpanded) {\n      return collapseIcon || <DefaultCollapseIcon />;\n    }\n\n    return expandIcon || <DefaultExpandIcon />;\n  };\n\n  const sizeClass =\n    (size === \"small\" && styles.sizeSmall) ||\n    (size === \"large\" && styles.sizeLarge) ||\n    styles.sizeMedium;\n\n  const contentClassName = cn(\n    styles.content,\n    sizeClass,\n    finalGlass && styles.glass,\n    finalDisabled && styles.disabled,\n    isSelected && styles.selected,\n    isFocused && styles.focused,\n    \"glass-focus glass-touch-target glass-contrast-guard\"\n  );\n\n  const toggleIconClass = cn(\n    styles.icon,\n    hasChildren && styles.toggleIcon,\n    hasChildren && \"glass-focus glass-touch-target\"\n  );\n  const iconClass = cn(styles.icon);\n  const labelClass = styles.label;\n  const rootClass = cn(styles.root, className);\n\n  const itemStyleVars: React.CSSProperties | undefined = color\n    ? ({ \"--tree-view-color\": color } as React.CSSProperties)\n    : undefined;\n\n  return (\n    <li\n      ref={ref}\n      className={rootClass}\n      style={{ ...(style ?? {}) }}\n      role=\"treeitem\"\n      aria-expanded={hasChildren ? isExpanded : undefined}\n      aria-selected={isSelected}\n      {...rest}\n    >\n      <div\n        ref={contentRef}\n        onClick={handleClick}\n        onDoubleClick={handleToggle}\n        onKeyDown={handleKeyDown}\n        onFocus={handleFocus}\n        tabIndex={finalDisabled ? -1 : 0}\n        aria-disabled={finalDisabled}\n        className={contentClassName}\n        style={{ ...(itemStyleVars ?? {}) }}\n      >\n        <div\n          onClick={hasChildren ? handleToggle : undefined}\n          className={toggleIconClass}\n          role={hasChildren ? \"button\" : undefined}\n          aria-hidden={!hasChildren}\n        >\n          {renderToggleIcon()}\n        </div>\n\n        {icon && <div className={iconClass}>{icon}</div>}\n\n        <div className={labelClass}>{label}</div>\n      </div>\n\n      {hasChildren && (\n        <ul\n          ref={childrenRef}\n          role=\"group\"\n          key={`children-${nodeId}`}\n          className={styles.children}\n          style={{\n            ...animatedStyle,\n            willChange: \"height, opacity, transform\",\n          }}\n        >\n          {children}\n        </ul>\n      )}\n    </li>\n  );\n}\n\n/**\n * TreeItem Component\n *\n * A item component for the TreeView.\n */\nconst TreeItem = forwardRef(TreeItemComponent);\n\n/**\n * GlassTreeItem Component\n *\n * Glass variant of the TreeItem component.\n */\nconst GlassTreeItem = forwardRef<HTMLLIElement, TreeItemProps>((props, ref) => (\n  <TreeItem {...props} glass={true} ref={ref} />\n));\n\nGlassTreeItem.displayName = \"GlassTreeItem\";\n\nexport default TreeItem;\nexport { TreeItem, GlassTreeItem };\n", "\"use client\";\n/**\n * Glass TreeView Component\n *\n * A hierarchical list with collapsible items.\n */\nimport React, {\n  forwardRef,\n  useState,\n  useCallback,\n  useMemo,\n  createContext,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { TreeViewProps, TreeViewContextProps } from \"./types\";\nimport styles from \"./TreeView.module.css\";\n\nconst TREE_COLOR_MAP: Record<\n  NonNullable<TreeViewProps[\"color\"]>,\n  { accent: string; highlight: string }\n> = {\n  default: {\n    accent: \"color-mix(in srgb, var(--glass-gray-50) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-primary)) 14%, transparent)\",\n  },\n  primary: {\n    accent:\n      \"color-mix(in srgb, hsl(var(--glass-color-primary)) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-primary)) 18%, transparent)\",\n  },\n  secondary: {\n    accent: \"color-mix(in srgb, var(--glass-color-secondary) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, var(--glass-color-secondary) 16%, transparent)\",\n  },\n  success: {\n    accent:\n      \"color-mix(in srgb, hsl(var(--glass-color-success)) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-success)) 18%, transparent)\",\n  },\n  warning: {\n    accent:\n      \"color-mix(in srgb, hsl(var(--glass-color-warning)) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-warning)) 18%, transparent)\",\n  },\n  danger: {\n    accent:\n      \"color-mix(in srgb, hsl(var(--glass-color-danger)) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-danger)) 18%, transparent)\",\n  },\n  info: {\n    accent: \"color-mix(in srgb, hsl(var(--glass-color-info)) 90%, transparent)\",\n    highlight:\n      \"color-mix(in srgb, hsl(var(--glass-color-info)) 18%, transparent)\",\n  },\n};\n\n// Create context for TreeView state\nexport const TreeViewContext = createContext<TreeViewContextProps | null>(null);\n\n/**\n * TreeView Component Implementation\n */\nfunction TreeViewComponent(\n  props: TreeViewProps,\n  ref: React.ForwardedRef<HTMLUListElement>\n) {\n  const {\n    selectedIds,\n    expandedIds,\n    onSelectionChange,\n    onExpansionChange,\n    multiSelect = false,\n    showIcons = false,\n    showLines = false,\n    size = \"medium\",\n    disabled = false,\n    glass = true,\n    color = \"default\",\n    children,\n    className,\n    style,\n    ...rest\n  } = props;\n\n  // State for uncontrolled component\n  const [internalExpanded, setInternalExpanded] = useState<string[]>(\n    expandedIds || []\n  );\n  const [internalSelected, setInternalSelected] = useState<string[]>(\n    selectedIds || []\n  );\n  const [internalFocused, setInternalFocused] = useState<string | null>(null);\n\n  // Determine if component is controlled\n  const isExpandedControlled = expandedIds !== undefined;\n  const isSelectedControlled = selectedIds !== undefined;\n\n  // Get values based on controlled/uncontrolled state\n  const expanded = isExpandedControlled ? expandedIds : internalExpanded;\n  const selected = isSelectedControlled ? selectedIds : internalSelected;\n\n  const currentExpanded = expanded ?? [];\n  const currentSelected = selected ?? [];\n  const focusedIds = internalFocused ? [internalFocused] : [];\n\n  // Toggle node expansion\n  const toggleNode = useCallback(\n    (nodeId: string) => {\n      const isOpen = currentExpanded.includes(nodeId);\n      const nextExpanded = isOpen\n        ? currentExpanded.filter((id) => id !== nodeId)\n        : [...currentExpanded, nodeId];\n\n      if (!isExpandedControlled) {\n        setInternalExpanded(nextExpanded);\n      }\n\n      onExpansionChange?.(nextExpanded);\n    },\n    [currentExpanded, isExpandedControlled, onExpansionChange]\n  );\n\n  // Select node\n  const selectNode = useCallback(\n    (nodeId: string) => {\n      let nextSelected: string[];\n\n      if (multiSelect) {\n        const isActive = currentSelected.includes(nodeId);\n        nextSelected = isActive\n          ? currentSelected.filter((id) => id !== nodeId)\n          : [...currentSelected, nodeId];\n      } else {\n        nextSelected = [nodeId];\n      }\n\n      if (!isSelectedControlled) {\n        setInternalSelected(nextSelected);\n      }\n\n      onSelectionChange?.(nextSelected);\n    },\n    [currentSelected, isSelectedControlled, multiSelect, onSelectionChange]\n  );\n\n  // Focus node\n  const focusNode = useCallback((nodeId: string) => {\n    setInternalFocused(nodeId);\n  }, []);\n\n  // Create context value\n  const contextValue = useMemo<TreeViewContextProps>(\n    () => ({\n      expanded: currentExpanded,\n      selected: currentSelected,\n      focused: focusedIds,\n      multiSelect,\n      size,\n      disabled,\n      glass,\n      selectNode,\n      toggleNode,\n      focusNode,\n      showIcons,\n      showLines,\n    }),\n    [\n      currentExpanded,\n      currentSelected,\n      focusedIds,\n      multiSelect,\n      size,\n      disabled,\n      glass,\n      selectNode,\n      toggleNode,\n      focusNode,\n      showIcons,\n      showLines,\n    ]\n  );\n\n  // Extract compatible HTML attributes (rest already contains HTML attributes from props)\n  const compatibleRest = rest;\n\n  const sizeClass =\n    size === \"small\"\n      ? styles.sizeSmall\n      : size === \"large\"\n        ? styles.sizeLarge\n        : styles.sizeMedium;\n\n  const containerVars = useMemo<React.CSSProperties>(\n    () =>\n      ({\n        \"--tree-view-color\": (TREE_COLOR_MAP[color] ?? TREE_COLOR_MAP.default)\n          .accent,\n        \"--tree-view-selected-bg\": (\n          TREE_COLOR_MAP[color] ?? TREE_COLOR_MAP.default\n        ).highlight,\n      }) as React.CSSProperties,\n    [color]\n  );\n\n  return (\n    <TreeViewContext.Provider data-glass-component value={contextValue}>\n      <ul\n        ref={ref}\n        role=\"tree\"\n        className={cn(\n          styles.root,\n          sizeClass,\n          disabled && styles.disabled,\n          className\n        )}\n        style={{ ...containerVars, ...style }}\n        aria-multiselectable={multiSelect}\n        {...compatibleRest}\n      >\n        {children}\n      </ul>\n    </TreeViewContext.Provider>\n  );\n}\n\n/**\n * TreeView Component\n *\n * A hierarchical list with collapsible items.\n */\nconst TreeView = forwardRef(TreeViewComponent);\n\n/**\n * GlassTreeView Component\n *\n * Glass variant of the TreeView component.\n */\nconst GlassTreeView = forwardRef<HTMLUListElement, TreeViewProps>(\n  (props, ref) => <TreeView {...props} ref={ref} />\n);\n\nGlassTreeView.displayName = \"GlassTreeView\";\n\nexport default TreeView;\nexport { TreeView, GlassTreeView };\n", ".root {\n  --tree-view-color: var(--aura-color-global-text-primary);\n  --tree-view-selected-bg: var(--aura-color-highlight);\n  --tree-view-hover-bg: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 35%,\n    transparent\n  );\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  outline: 0;\n  width: 100%;\n  background: var(--aura-color-glass-surface);\n  border: 1px solid var(--aura-color-glass-border);\n  border-radius: var(--aura-radius-xl);\n  padding: var(--aura-space-3);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  box-shadow: var(--aura-color-glass-shadow);\n  transition:\n    box-shadow var(--aura-motion-duration-normal)\n      var(--aura-motion-easing-standard),\n    transform var(--aura-motion-duration-normal)\n      var(--aura-motion-easing-standard);\n}\n\n.root:hover {\n  box-shadow: var(\n    --glass-elev-treeview-hover,\n    0 14px 48px color-mix(in srgb, var(--glass-gray-900) 35%, transparent)\n  );\n}\n\n.sizeSmall {\n  font-size: 0.8125rem;\n}\n\n.sizeMedium {\n  font-size: 0.875rem;\n}\n\n.sizeLarge {\n  font-size: 1rem;\n}\n\n.disabled {\n  opacity: 0.55;\n  pointer-events: none;\n}\n", ".root {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  outline: 0;\n  width: 100%;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n}\n\n.content {\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-2);\n  border-radius: var(--aura-radius-lg);\n  cursor: pointer;\n  user-select: none;\n  color: var(--aura-color-global-text-secondary);\n  background: transparent;\n  transition:\n    background var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard),\n    color var(--aura-motion-duration-fast) var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-standard);\n  outline: none;\n}\n\n.sizeSmall {\n  padding: calc(var(--aura-space-1) + 0.125rem) var(--aura-space-2);\n}\n\n.sizeMedium {\n  padding: var(--aura-space-2) var(--aura-space-3);\n}\n\n.sizeLarge {\n  padding: var(--aura-space-3) var(--aura-space-4);\n}\n\n.content:not(.disabled):hover {\n  background: var(\n    --tree-view-hover-bg,\n    color-mix(in srgb, var(--aura-color-glass-surface) 35%, transparent)\n  );\n  color: var(--aura-color-global-text-primary);\n}\n\n.glass {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 40%,\n    transparent\n  );\n  border: 1px solid\n    color-mix(in srgb, var(--aura-color-glass-border) 80%, transparent);\n}\n\n.glass:not(.disabled):hover {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 60%,\n    transparent\n  );\n}\n\n.selected {\n  background: var(--tree-view-selected-bg, var(--aura-color-highlight));\n  color: var(--tree-view-color, var(--aura-color-global-text-primary));\n  font-weight: var(--aura-font-weight-medium);\n}\n\n.focused {\n  outline: 1px dashed\n    var(--tree-view-color, var(--aura-color-global-border-strong));\n}\n\n.content:focus-visible {\n  outline: none;\n  box-shadow: var(\n    --glass-elev-treeitem-focus,\n    0 0 0 2px\n      var(\n        --glass-treeitem-focus-inner,\n        color-mix(in srgb, var(--glass-gray-500) 45%, transparent)\n      ),\n    0 0 0 6px\n      var(\n        --glass-treeitem-focus-outer,\n        color-mix(in srgb, hsl(var(--glass-color-primary)) 28%, transparent)\n      )\n  );\n}\n\n.disabled {\n  cursor: default;\n  opacity: 0.55;\n  pointer-events: none;\n}\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-right: var(--aura-space-1);\n  color: inherit;\n  flex-shrink: 0;\n}\n\n.toggleIcon {\n  cursor: pointer;\n}\n\n.label {\n  flex: 1;\n  margin-left: var(--aura-space-1);\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.children {\n  list-style: none;\n  margin: 0;\n  padding: 0 0 0 var(--aura-space-4);\n  overflow: hidden;\n  transform-origin: top;\n}\n", "'use client';\n/**\n * FocusIndicator Component\n *\n * A component that provides accessible focus indicators.\n */\nimport React, { forwardRef, useMemo } from 'react';\nimport { cn } from '@/lib/utils';\n\nimport { useReducedMotion } from '../../hooks/useReducedMotion';\nimport { useAnimationContext } from '../../contexts/AnimationContext';\nimport { useAccessibilitySettings } from '../../hooks/useAccessibilitySettings';\nimport { useMultiSpring } from '../../animations/hooks/useMultiSpringBasic';\nimport { SpringPresets, type SpringConfig } from '../../animations/physics/springPhysics';\n\nimport { FocusIndicatorProps } from './types';\n\n// Convert color string to RGB values\nconst colorToRgb = (color: string): string => {\n  // Convert named colors to their RGB values\n  switch (color) {\n    case 'primary':\n      return '99, 102, 241'; // Indigo\n    case 'secondary':\n      return '156, 39, 176'; // Purple\n    case 'error':\n      return '240, 82, 82'; // Red\n    case 'info':\n      return '3, 169, 244'; // Light Blue\n    case 'success':\n      return '76, 175, 80'; // Green\n    case 'warning':\n      return '255, 152, 0'; // Orange\n    default:\n      // If it's already an RGB value in format 'r, g, b'\n      if (/^\\d+,\\s*\\d+,\\s*\\d+$/.test(color)) {\n        return color;\n      }\n      // Default color (white)\n      return '255, 255, 255';\n  }\n};\n\n/**\n * FocusIndicator Component Implementation\n */\nfunction FocusIndicatorComponent(\n  props: FocusIndicatorProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    children,\n    visible = false,\n    color: propColor,\n    thickness: propThickness,\n    style: propFocusStyle,\n    glass = false,\n    highContrast: propHighContrast,\n    className,\n    componentStyle,\n    disableAnimation: propDisableAnimation,\n    animationConfig: propAnimationConfig,\n    ...rest\n  } = props;\n\n  // --- Get Context Defaults ---\n  const { defaultSpring } = useAnimationContext();\n  const {\n      settings: accessibilitySettings\n  } = useAccessibilitySettings();\n\n  // --- Determine Final Values --- \n  const finalFocusStyle = propFocusStyle ?? 'solid';\n  const finalColor = propColor ?? 'primary';\n  const finalThickness = propThickness ?? 2;\n  const finalHighContrast = propHighContrast ?? accessibilitySettings.highContrast ?? false;\n  \n  const prefersReducedMotion = useReducedMotion();\n  const shouldAnimate = !(propDisableAnimation ?? prefersReducedMotion);\n\n  // --- Calculate Spring Config ---\n  const finalSpringConfig = useMemo(() => {\n    const baseConfig: SpringConfig = SpringPresets.default;\n    let contextResolvedConfig: Partial<SpringConfig> = {};\n    if (typeof defaultSpring === 'object' && defaultSpring !== null) {\n        contextResolvedConfig = defaultSpring;\n    }\n    let propResolvedConfig: Partial<SpringConfig> = {};\n    if (typeof propAnimationConfig === 'string' && propAnimationConfig in SpringPresets) {\n        propResolvedConfig = SpringPresets[propAnimationConfig as keyof typeof SpringPresets];\n    } else if (typeof propAnimationConfig === 'object' && propAnimationConfig !== null) {\n        propResolvedConfig = propAnimationConfig;\n    }\n    return { ...baseConfig, ...contextResolvedConfig, ...propResolvedConfig };\n  }, [defaultSpring, propAnimationConfig]);\n\n  // --- Define Animation Targets --- \n  const getTargets = () => {\n    const rgbColor = colorToRgb(finalColor);\n    const _hcColor = finalHighContrast ? '255, 255, 0' : rgbColor; // Yellow or original\n    const hcOpacity = finalHighContrast ? 1 : 0.8;\n    const shadowOpacity = finalHighContrast ? 1 : 0.5;\n\n    if (!visible) {\n      return {\n          shadowSpread1: 0, shadowSpread2: 0, shadowOpacity: 0, \n          outlineWidth: 0, outlineOpacity: 0, \n      };\n    }\n\n    switch (finalFocusStyle) {\n      case 'glow':\n        return {\n          shadowSpread1: finalThickness, shadowSpread2: finalThickness * 2, shadowOpacity: 0.4,\n          outlineWidth: 0, outlineOpacity: 0,\n        };\n      case 'dashed':\n      case 'dotted':\n        return {\n          shadowSpread1: 0, shadowSpread2: 0, shadowOpacity: 0,\n          outlineWidth: finalThickness, outlineOpacity: hcOpacity,\n        };\n      case 'solid':\n      default:\n        return {\n          shadowSpread1: finalThickness, shadowSpread2: 0, shadowOpacity: shadowOpacity,\n          outlineWidth: 0, outlineOpacity: 0,\n        };\n    }\n  };\n\n  // --- Initialize Spring Hook ---\n  const { values: animatedValues, start: startFocusAnimation } = useMultiSpring(\n    {\n      shadowSpread1: 0,\n      shadowSpread2: 0,\n      shadowOpacity: 0,\n      outlineWidth: 0,\n      outlineOpacity: 0,\n    },\n    {\n      config: finalSpringConfig,\n    }\n  );\n\n  // --- Construct Animated Style --- \n  const animatedStyle = useMemo(() => {\n    const rgbColor = colorToRgb(finalColor);\n    const hcColor = finalHighContrast ? '255, 255, 0' : rgbColor;\n    const outlineStyle = finalFocusStyle === 'dashed' ? 'dashed' : (finalFocusStyle === 'dotted' ? 'dotted' : 'solid');\n\n    const style: React.CSSProperties = {\n        ...componentStyle,\n        boxShadow: `0 0 0 ${animatedValues.shadowSpread1}px rgba(${rgbColor}, ${animatedValues.shadowOpacity * 0.5}), 0 0 ${animatedValues.shadowSpread2}px rgba(${rgbColor}, ${animatedValues.shadowOpacity})`,\n        outline: `${animatedValues.outlineWidth}px ${outlineStyle} rgba(${hcColor}, ${animatedValues.outlineOpacity})`,\n        outlineOffset: '2px',\n    };\n    \n    // Add blur for glow + glass\n    if (finalFocusStyle === 'glow' && glass) {\n      style.backdropFilter = 'blur(var(--glass-blur-sm))';\n    }\n\n    return style;\n  }, [componentStyle, animatedValues, finalFocusStyle, finalColor, finalHighContrast, glass]);\n\n  return (\n    <div\n      ref={ref}\n      className={cn('glass-focus-indicator', className)}\n      style={{\n        position: 'relative',\n        display: 'inline-block',\n        outline: 'none',\n        willChange: 'box-shadow, outline, opacity',\n        ...animatedStyle,\n      }}\n      {...rest}\n    >\n      {children}\n    </div>\n  );\n}\n\n/**\n * FocusIndicator Component\n *\n * A component that provides accessible focus indicators.\n */\nconst FocusIndicator = forwardRef(FocusIndicatorComponent);\n\nexport default FocusIndicator;\n", "\"use client\";\n/**\n * RippleButton Component\n *\n * A button component with ripple effect feedback.\n */\nimport React, {\n  forwardRef,\n  useState,\n  useRef,\n  useCallback,\n  useMemo,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton as Button } from \"../button\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n// Import base Button\nimport { GlassButtonProps as ButtonProps } from \"../button/types\"; // Import ButtonProps from correct file\n\nimport { RippleButtonProps } from \"./types\";\nimport styles from \"./RippleButton.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Convert color string to RGB values\nconst colorToRgb = (color: string): string => {\n  // Convert named colors to their RGB values\n  switch (color) {\n    case \"primary\":\n      return \"99, 102, 241\"; // Indigo\n    case \"secondary\":\n      return \"156, 39, 176\"; // Purple\n    case \"error\":\n      return \"240, 82, 82\"; // Red\n    case \"info\":\n      return \"3, 169, 244\"; // Light Blue\n    case \"success\":\n      return \"76, 175, 80\"; // Green\n    case \"warning\":\n      return \"255, 152, 0\"; // Orange\n    case \"white\":\n      return \"255, 255, 255\";\n    default:\n      // If it's already an RGB value in format 'r, g, b'\n      if (/^\\d+,\\s*\\d+,\\s*\\d+$/.test(color)) {\n        return color;\n      }\n      // Default color (white)\n      return \"255, 255, 255\";\n  }\n};\n\n// Get ripple size based on button size\nconst getRippleSize = (size: string): number => {\n  switch (size) {\n    case \"small\":\n      return 100;\n    case \"large\":\n      return 200;\n    case \"medium\":\n    default:\n      return 150;\n  }\n};\n\n// Get ripple duration based on speed - Adjusted default\nconst getRippleDuration = (speed: string): number => {\n  switch (speed) {\n    case \"slow\":\n      return 900;\n    case \"fast\":\n      return 400;\n    case \"medium\":\n    default:\n      return 300; // Shortened default duration further for better sync with physics\n  }\n};\n\n/**\n * RippleButton Component Implementation\n * Wraps the base Button component to add a ripple effect.\n */\nfunction RippleButtonComponent(\n  // Inherit ButtonProps and add Ripple-specific props\n  props: RippleButtonProps & Omit<ButtonProps, \"onClick\" | \"onMouseDown\">,\n  ref: React.ForwardedRef<HTMLButtonElement>\n) {\n  const {\n    children,\n    disabled = false,\n    rippleColor = \"white\",\n    rippleSize: rippleSizeProp, // Rename prop to avoid conflict\n    rippleSpeed = \"medium\",\n    centerRipple = false,\n    onClick,\n    onMouseDown, // Capture original onMouseDown\n    // Extract Button props\n    variant = \"primary\",\n    size = \"md\",\n    fullWidth = false,\n    className,\n    style,\n    \"data-testid\": dataTestId,\n    ...rest // Rest are Button props\n  } = props;\n\n  const prefersReducedMotion = useReducedMotion();\n  const [ripples, setRipples] = useState<\n    Array<{ id: number; x: number; y: number }>\n  >([]);\n  const rippleCount = useRef(0);\n  const wrapperRef = useRef<HTMLDivElement>(null); // Ref for the wrapper\n\n  // Handle ripple creation on mouse down\n  const handleMouseDown = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      if (disabled || prefersReducedMotion) {\n        if (onMouseDown) onMouseDown(event); // Call original handler\n        return;\n      }\n\n      const wrapper = wrapperRef.current;\n      if (!wrapper) return;\n\n      const rect = wrapper.getBoundingClientRect();\n      let x, y;\n\n      if (centerRipple) {\n        x = rect.width / 2;\n        y = rect.height / 2;\n      } else {\n        x = event.clientX - rect.left;\n        y = event.clientY - rect.top;\n      }\n\n      const id = rippleCount.current++;\n      const duration = getRippleDuration(rippleSpeed);\n\n      // Start ripple animation\n      setRipples((prev: any) => [...prev, { id, x, y }]);\n\n      // Schedule ripple removal after animation duration\n      setTimeout(() => {\n        setRipples((prev: any) => prev.filter((r: any) => r.id !== id));\n      }, duration);\n\n      // Call the original onMouseDown handler if provided\n      if (onMouseDown) {\n        onMouseDown(event);\n      }\n    },\n    [disabled, prefersReducedMotion, centerRipple, rippleSpeed, onMouseDown]\n  ); // Added dependencies\n\n  const buttonVariant = variant;\n  const rippleSizeValue = rippleSizeProp\n    ? getRippleSize(rippleSizeProp)\n    : getRippleSize(size); // Use prop or button size\n  const rippleDuration = getRippleDuration(rippleSpeed);\n  const rippleColorRgb = colorToRgb(rippleColor);\n\n  const wrapperStyle = useMemo<React.CSSProperties>(() => {\n    const base = createGlassStyle({\n      intent: \"neutral\",\n      elevation: \"level2\",\n      tier: \"high\",\n    });\n    const { position, ...rest } = base;\n    return {\n      ...rest,\n      \"--ripple-color-rgb\": rippleColorRgb,\n    };\n  }, [rippleColorRgb]);\n\n  return (\n    // Apply ripple color CSS variable to the wrapper\n    <div\n      ref={wrapperRef}\n      style={{ ...wrapperStyle }}\n      className={cn(\n        styles.wrapper,\n        \"glass-ripple-button glass-contrast-guard\",\n        className\n      )} // Pass className to wrapper for styling\n      data-testid={dataTestId}\n    >\n      <Button\n        ref={ref} // Forward the ref to the underlying Button\n        variant={buttonVariant}\n        size={size}\n        disabled={disabled}\n        fullWidth={fullWidth}\n        className=\"glass-focus glass-touch-target\"\n        style={{ ...(style ?? {}) }} // Pass style to Button\n        onClick={onClick} // Pass original onClick\n        onMouseDown={handleMouseDown} // Use our wrapper mouse down\n        {...{\n          ...rest,\n          \"aria-pressed\":\n            rest[\"aria-pressed\"] === \"true\"\n              ? true\n              : rest[\"aria-pressed\"] === \"false\"\n                ? false\n                : rest[\"aria-pressed\"] === \"mixed\"\n                  ? undefined\n                  : rest[\"aria-pressed\"],\n          \"aria-expanded\":\n            rest[\"aria-expanded\"] === \"true\"\n              ? true\n              : rest[\"aria-expanded\"] === \"false\"\n                ? false\n                : rest[\"aria-expanded\"],\n        }} // Pass rest of Button props with aria attribute transformations\n      >\n        {children}\n      </Button>\n\n      {/* Render ripples */}\n      {!prefersReducedMotion && (\n        <div className={styles.ripples} aria-hidden=\"true\">\n          {ripples.map((ripple) => (\n            <span\n              key={ripple.id}\n              className={styles.ripple}\n              style={{\n                left: ripple.x - rippleSizeValue / 2,\n                top: ripple.y - rippleSizeValue / 2,\n                width: rippleSizeValue,\n                height: rippleSizeValue,\n                animationDuration: `${rippleDuration}ms`,\n              }}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\n/**\n * RippleButton Component\n *\n * A button component that wraps the base Button to add a ripple effect feedback.\n * It inherits physics interactions from the base Button.\n */\nconst RippleButton = forwardRef(RippleButtonComponent);\n\nexport default RippleButton;\nexport { RippleButton };\n", ".wrapper {\n  position: relative;\n  display: inline-block;\n  overflow: hidden;\n  border-radius: var(--glass-radius-md, 8px);\n}\n\n.ripples {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  overflow: hidden;\n}\n\n.ripple {\n  position: absolute;\n  border-radius: 50%;\n  background-color: var(\n    --glass-ripple-button-bg,\n    rgba(var(--ripple-color-rgb, 255, 255, 255), 0.3)\n  );\n  transform: scale(0);\n  pointer-events: none;\n  animation-name: auraRippleButton;\n  animation-timing-function: ease-out;\n  animation-fill-mode: forwards;\n  z-index: 0;\n}\n\n.content {\n  position: relative;\n  z-index: 1;\n  display: flex;\n}\n\n@keyframes auraRippleButton {\n  to {\n    transform: scale(2);\n    opacity: 0;\n  }\n}\n", "\"use client\";\n/**\n * StateIndicator Component\n *\n * A component that visually indicates the current state of a UI element.\n */\nimport React, { forwardRef, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\nimport { StateIndicatorProps } from \"./types\";\nimport styles from \"./StateIndicator.module.css\";\n\n// Convert color string to RGB values\nconst colorToRgb = (color: string): string => {\n  // Convert named colors to their RGB values\n  switch (color) {\n    case \"primary\":\n      return \"99, 102, 241\"; // Indigo\n    case \"secondary\":\n      return \"156, 39, 176\"; // Purple\n    case \"error\":\n      return \"240, 82, 82\"; // Red\n    case \"info\":\n      return \"3, 169, 244\"; // Light Blue\n    case \"success\":\n      return \"76, 175, 80\"; // Green\n    case \"warning\":\n      return \"255, 152, 0\"; // Orange\n    default:\n      // If it's already an RGB value in format 'r, g, b'\n      if (/^\\d+,\\s*\\d+,\\s*\\d+$/.test(color)) {\n        return color;\n      }\n      // Default color (white)\n      return \"255, 255, 255\";\n  }\n};\n\n// Get color for each state\nconst getStateColor = (state: string, color: string): string => {\n  const userColor = colorToRgb(color);\n\n  switch (state) {\n    case \"hover\":\n      return `color-mix(in srgb, rgb(${userColor}) 15%, transparent)`;\n    case \"active\":\n      return `color-mix(in srgb, rgb(${userColor}) 30%, transparent)`;\n    case \"focus\":\n      return `color-mix(in srgb, rgb(${userColor}) 20%, transparent)`;\n    case \"disabled\":\n      return \"color-mix(in srgb, var(--glass-gray-400) 20%, transparent)\";\n    case \"loading\":\n      return `color-mix(in srgb, rgb(${userColor}) 20%, transparent)`;\n    case \"success\":\n      return \"color-mix(in srgb, hsl(var(--glass-color-success)) 15%, transparent)\";\n    case \"error\":\n      return \"color-mix(in srgb, hsl(var(--glass-color-danger)) 15%, transparent)\";\n    case \"default\":\n    default:\n      return \"transparent\";\n  }\n};\n\n/**\n * StateIndicator Component Implementation\n */\nfunction StateIndicatorComponent(\n  props: StateIndicatorProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    children,\n    state = \"default\",\n    glass = false,\n    blend = true,\n    intensity = 0.7,\n    color = \"primary\",\n    animationDuration = ANIMATION.DURATION.slower * 2,\n    className,\n    style,\n    ...rest\n  } = props;\n\n  // Check if reduced motion is preferred\n  const prefersReducedMotion = useReducedMotion();\n\n  const overlayStyle = useMemo<React.CSSProperties>(() => {\n    if (state === \"default\") {\n      return {};\n    }\n\n    const glassBase = glass\n      ? createGlassStyle({ elev: 2, variant: \"default\" })\n      : undefined;\n    const { position, overflow, ...rest } = glassBase ?? {};\n\n    const style: React.CSSProperties = {\n      ...rest,\n      backgroundColor: getStateColor(state, color),\n      opacity: intensity,\n      mixBlendMode: blend ? \"overlay\" : \"normal\",\n    };\n\n    if (state === \"loading\") {\n      style.animationDuration = `${animationDuration}ms`;\n    }\n\n    return style;\n  }, [state, color, intensity, blend, glass, animationDuration]);\n\n  return (\n    <div\n      ref={ref}\n      className={cn(styles.container, \"glass-state-indicator\", className)}\n      style={{ ...(style ?? {}) }}\n      {...rest}\n    >\n      {children}\n\n      {state !== \"default\" && (\n        <div\n          className={cn(\n            styles.overlay,\n            state === \"loading\" && !prefersReducedMotion && styles.loading,\n            state === \"disabled\" && styles.disabled\n          )}\n          style={{ ...overlayStyle }}\n        />\n      )}\n    </div>\n  );\n}\n\n/**\n * StateIndicator Component\n *\n * A component that visually indicates the current state of a UI element.\n */\nconst StateIndicator = forwardRef(StateIndicatorComponent);\n\nexport default StateIndicator;\n", ".container {\n  position: relative;\n  display: inline-block;\n}\n\n.overlay {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  border-radius: inherit;\n  z-index: 1;\n}\n\n.loading {\n  animation-name: auraStateIndicatorPulse;\n  animation-iteration-count: infinite;\n  animation-timing-function: ease-in-out;\n}\n\n.disabled {\n  z-index: 5;\n}\n\n@keyframes auraStateIndicatorPulse {\n  0% {\n    opacity: 0.5;\n  }\n  50% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0.5;\n  }\n}\n", "\"use client\";\n/**\n * VisualFeedback Component\n *\n * A component that provides visual feedback effects.\n */\nimport React, { forwardRef, useState, useRef, useEffect, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\nimport { VisualFeedbackProps } from \"./types\";\nimport styles from \"./VisualFeedback.module.css\";\n\n// Convert color string to RGB values\nconst colorToRgb = (color: string): string => {\n  // Convert named colors to their RGB values\n  switch (color) {\n    case \"primary\":\n      return \"99, 102, 241\"; // Indigo\n    case \"secondary\":\n      return \"156, 39, 176\"; // Purple\n    case \"error\":\n      return \"240, 82, 82\"; // Red\n    case \"info\":\n      return \"3, 169, 244\"; // Light Blue\n    case \"success\":\n      return \"76, 175, 80\"; // Green\n    case \"warning\":\n      return \"255, 152, 0\"; // Orange\n    default:\n      // If it's already an RGB value in format 'r, g, b'\n      if (/^\\d+,\\s*\\d+,\\s*\\d+$/.test(color)) {\n        return color;\n      }\n      // Default color (white)\n      return \"255, 255, 255\";\n  }\n};\n\n/**\n * VisualFeedback Component Implementation\n */\nfunction VisualFeedbackComponent(\n  props: VisualFeedbackProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    children,\n    effect = \"highlight\",\n    active = false,\n    color = \"primary\",\n    duration = 1000,\n    glass = false,\n    intensity = 0.5,\n    className,\n    style,\n    ...rest\n  } = props;\n\n  // Check if reduced motion is preferred\n  const prefersReducedMotion = useReducedMotion();\n\n  // Refs\n  const containerRef = useRef<HTMLDivElement>(null);\n\n  // State for ripple effect\n  const [ripples, setRipples] = useState<\n    Array<{ id: number; x: number; y: number; size: number }>\n  >([]);\n  const rippleCount = useRef(0);\n\n  // Handle ripple effect\n  const handleRipple = (event: React.MouseEvent<HTMLDivElement>) => {\n    if (effect !== \"ripple\" || !active || prefersReducedMotion) return;\n\n    const container = containerRef.current;\n    if (!container) return;\n\n    const rect = container.getBoundingClientRect();\n    const size = Math.max(rect.width, rect.height);\n    const x = event.clientX - rect.left;\n    const y = event.clientY - rect.top;\n\n    // Add new ripple\n    const id = rippleCount.current;\n    rippleCount.current += 1;\n\n    const newRipple = { id, x, y, size };\n    setRipples((prevRipples) => [...prevRipples, newRipple]);\n\n    // Remove ripple after animation completes\n    setTimeout(() => {\n      setRipples((prevRipples) => prevRipples.filter((r: any) => r.id !== id));\n    }, duration);\n  };\n\n  // Clean up ripples when component unmounts\n  useEffect(() => {\n    return () => {\n      setRipples([]);\n    };\n  }, []);\n\n  // Handle forwarded ref\n  const setRefs = (element: HTMLDivElement | null) => {\n    (containerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n      element;\n\n    // Handle the forwarded ref\n    if (typeof ref === \"function\") {\n      ref(element);\n    } else if (ref) {\n      (ref as React.MutableRefObject<HTMLDivElement | null>).current = element;\n    }\n  };\n\n  const animationClass = useMemo(() => {\n    if (!active || effect === \"none\" || prefersReducedMotion) {\n      return undefined;\n    }\n\n    switch (effect) {\n      case \"pulse\":\n        return styles.pulse;\n      case \"glow\":\n        return styles.glow;\n      case \"highlight\":\n        return styles.highlight;\n      case \"bounce\":\n        return styles.bounce;\n      case \"shake\":\n        return styles.shake;\n      default:\n        return undefined;\n    }\n  }, [active, effect, prefersReducedMotion]);\n\n  const containerClassName = cn(\n    styles.container,\n    effect === \"ripple\" && styles.rippleOverflow,\n    animationClass,\n    \"glass-visual-feedback\",\n    className\n  );\n\n  const containerStyle = useMemo<React.CSSProperties>(\n    () => ({\n      \"--feedback-color-rgb\": colorToRgb(color),\n      animationDuration: `${duration}ms`,\n      ...style,\n    }),\n    [color, duration, style]\n  );\n\n  return (\n    <div\n      ref={setRefs}\n      className={containerClassName}\n      style={{ ...containerStyle }}\n      onClick={effect === \"ripple\" ? handleRipple : undefined}\n      {...rest}\n    >\n      {glass && active && !prefersReducedMotion ? (\n        <div\n          className={styles.glassOverlay}\n          style={{\n            opacity: intensity * 0.5,\n            ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n          }}\n        />\n      ) : null}\n\n      <div className={styles.content}>{children}</div>\n\n      {effect === \"ripple\" && (\n        <div className={styles.ripples}>\n          {ripples.map((ripple) => (\n            <div\n              key={ripple.id}\n              className={styles.ripple}\n              style={{\n                top: ripple.y,\n                left: ripple.x,\n                width: ripple.size,\n                height: ripple.size,\n                animationDuration: `${duration}ms`,\n              }}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\n/**\n * VisualFeedback Component\n *\n * A component that provides visual feedback effects.\n */\nconst VisualFeedback = forwardRef(VisualFeedbackComponent);\n\nexport default VisualFeedback;\n", ".container {\n  position: relative;\n  display: inline-block;\n  overflow: visible;\n}\n\n.rippleOverflow {\n  overflow: hidden;\n}\n\n.pulse {\n  animation-name: auraPulse;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n}\n\n.glow {\n  animation-name: auraGlow;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n}\n\n.highlight {\n  animation-name: auraHighlight;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n}\n\n.bounce {\n  animation-name: auraBounce;\n  animation-timing-function: ease-out;\n  animation-iteration-count: infinite;\n}\n\n.shake {\n  animation-name: auraShake;\n  animation-timing-function: ease-in-out;\n  animation-iteration-count: infinite;\n}\n\n.glassOverlay {\n  position: absolute;\n  inset: 0;\n  pointer-events: none;\n  z-index: 1;\n  border-radius: inherit;\n}\n\n.content {\n  position: relative;\n  z-index: 2;\n}\n\n.ripples {\n  position: absolute;\n  inset: 0;\n  overflow: hidden;\n  pointer-events: none;\n}\n\n.ripple {\n  position: absolute;\n  border-radius: 50%;\n  background: var(\n    --glass-visual-feedback-ripple-bg,\n    rgba(var(--feedback-color-rgb, 255, 255, 255), 0.3)\n  );\n  transform: scale(0);\n  pointer-events: none;\n  animation-name: auraRipple;\n  animation-timing-function: linear;\n  animation-fill-mode: forwards;\n}\n\n@keyframes auraPulse {\n  0% {\n    transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    transform: scale(1.05);\n    opacity: 0.85;\n  }\n  100% {\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n@keyframes auraGlow {\n  0% {\n    box-shadow: var(--glass-elev-feedback-glow-base, var(--glass-elev-0));\n  }\n  50% {\n    box-shadow: var(--glass-elev-feedback-glow-active, var(--glass-elev-3));\n  }\n  100% {\n    box-shadow: var(--glass-elev-feedback-glow-base, var(--glass-elev-0));\n  }\n}\n\n@keyframes auraHighlight {\n  0% {\n    filter: brightness(1);\n  }\n  50% {\n    filter: brightness(1.12);\n  }\n  100% {\n    filter: brightness(1);\n  }\n}\n\n@keyframes auraBounce {\n  0% {\n    transform: translateY(0);\n  }\n  50% {\n    transform: translateY(-4px);\n  }\n  100% {\n    transform: translateY(0);\n  }\n}\n\n@keyframes auraShake {\n  0% {\n    transform: translateX(0);\n  }\n  25% {\n    transform: translateX(-4px);\n  }\n  50% {\n    transform: translateX(4px);\n  }\n  75% {\n    transform: translateX(-2px);\n  }\n  100% {\n    transform: translateX(0);\n  }\n}\n\n@keyframes auraRipple {\n  to {\n    transform: scale(4);\n    opacity: 0;\n  }\n}\n", "'use client';\n/**\n * Glass ImageList Component\n *\n * A grid of images with glass morphism styling.\n */\nimport React, { forwardRef, createContext, useMemo, useRef, useEffect } from 'react';\nimport { cn } from '@/lib/utils';\n\nimport { ImageListProps } from './types'; \nimport styles from './ImageList.module.css';\n\n// Create ImageList context\nexport interface ImageListContextProps {\n  variant: 'standard' | 'quilted' | 'masonry' | 'woven';\n  rowHeight: number | 'auto';\n  gap: number;\n  cols: number;\n  glass: boolean;\n  variableSize: boolean;\n  glassRadiusMd: boolean;\n}\n\nexport const ImageListContext = createContext<ImageListContextProps>({\n  variant: 'standard',\n  rowHeight: 'auto',\n  gap: 8,\n  cols: 2,\n  glass: false,\n  variableSize: false,\n  glassRadiusMd: false,\n});\n\n/**\n * ImageList Component Implementation\n */\nfunction ImageListComponent(props: ImageListProps, ref: React.ForwardedRef<HTMLUListElement>) {\n  const {\n    children,\n    className,\n    style,\n    cols = 2,\n    gap = 8,\n    rowHeight = 'auto',\n    variant = 'standard',\n    glass = false,\n    glassRadiusMd = false,\n    variableSize = false,\n    enableEntranceAnimation = true,\n    animationConfig,\n    disableAnimation,\n    motionSensitivity,\n    ...rest\n  } = props;\n\n  // Ref for the root ul element\n  const rootRef = useRef<HTMLUListElement>(null);\n\n  // Assign forwarded ref to internal ref if provided\n  useEffect(() => {\n    if (!ref) return;\n    if (typeof ref === 'function') {\n      ref(rootRef.current);\n    } else {\n      ref.current = rootRef.current;\n    }\n  }, [ref]);\n\n  // Create context value\n  const contextValue = useMemo<ImageListContextProps>(\n    () => ({\n      variant,\n      rowHeight,\n      gap,\n      cols,\n      glass,\n      variableSize,\n      glassRadiusMd,\n    }),\n    [\n      variant, rowHeight, gap, cols, glass, variableSize, glassRadiusMd\n    ]\n  );\n\n  const styleVars = useMemo<React.CSSProperties>(() => {\n    const normalizedCols = Math.max(1, cols);\n    const gapValue = `${gap}px`;\n    const rowHeightValue = typeof rowHeight === 'number' ? `${rowHeight}px` : rowHeight;\n\n    return {\n      '--image-list-gap': gapValue,\n      '--image-list-cols': String(normalizedCols),\n      '--image-list-row-height': rowHeightValue === undefined ? 'auto' : rowHeightValue,\n      '--image-list-padding': glass ? gapValue : '0px',\n    } as React.CSSProperties;\n  }, [cols, gap, rowHeight, glass]);\n\n  const rootClassName = cn(\n    styles.root,\n    variant === 'masonry' ? styles.masonry : styles.grid,\n    variant === 'standard' && styles.variantStandard,\n    variant === 'quilted' && styles.variantQuilted,\n    variant === 'woven' && styles.variantWoven,\n    glass && styles.glass,\n    glassRadiusMd && styles.radiusMd,\n    className\n  );\n\n  return (\n    <ImageListContext.Provider value={contextValue}>\n      <ul\n        ref={rootRef}\n        className={rootClassName}\n        style={{ ...style, ...styleVars }}\n        {...rest}\n      >\n        {/* Ensure children (ImageListItem) have the class name */}\n        {React.Children.map(children, (child) => {\n          if (React.isValidElement<React.HTMLAttributes<HTMLElement>>(child)) {\n            // Clone element, merging className\n            return React.cloneElement(child, {\n              className: `${child.props?.className || ''} galileo-image-list-item`,\n            });\n          }\n          return child;\n        })}\n      </ul>\n    </ImageListContext.Provider>\n  );\n}\n\n/**\n * ImageList Component\n *\n * A grid of images.\n */\nconst ImageList = forwardRef<HTMLUListElement, ImageListProps>(ImageListComponent);\n\n/**\n * GlassImageList Component\n *\n * Glass variant of the ImageList component.\n */\nconst GlassImageList = forwardRef<HTMLUListElement, ImageListProps>((props, ref) => (\n  <ImageList {...props} glass={true} ref={ref} />\n));\n\nGlassImageList.displayName = 'GlassImageList';\n\nexport default ImageList;\nexport { ImageList, GlassImageList };\n", ".root {\n  list-style: none;\n  margin: 0;\n  padding: var(--image-list-padding, 0);\n  box-sizing: border-box;\n  width: 100%;\n}\n\n.grid {\n  display: grid;\n  gap: var(--image-list-gap, var(--aura-space-3));\n  grid-template-columns: repeat(var(--image-list-cols, 2), minmax(0, 1fr));\n}\n\n.variantStandard {\n  grid-auto-rows: var(--image-list-row-height, auto);\n}\n\n.variantQuilted {\n  grid-auto-flow: dense;\n}\n\n.variantWoven {\n  grid-auto-rows: var(--image-list-row-height, auto);\n}\n\n.masonry {\n  display: block;\n  column-count: var(--image-list-cols, 2);\n  column-gap: var(--image-list-gap, var(--aura-space-3));\n}\n\n.masonry :global(li) {\n  break-inside: avoid;\n  margin-bottom: var(--image-list-gap, var(--aura-space-3));\n}\n\n.glass {\n  background: var(--aura-color-glass-surface);\n  border: 1px solid var(--aura-color-glass-border);\n  border-radius: var(--aura-radius-xl);\n  box-shadow: var(--aura-color-glass-shadow);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n}\n\n.radiusMd {\n  border-radius: var(--aura-radius-xl);\n  overflow: hidden;\n}\n", "\"use client\";\n/**\n * ImageListItem Component\n *\n * An item component for the ImageList with glass morphism styling.\n * Features comprehensive accessibility support including ARIA labels,\n * keyboard navigation, and screen reader announcements.\n */\nimport React, {\n  forwardRef,\n  useContext,\n  useState,\n  useMemo,\n  useCallback,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { ImageListItemProps } from \"./types\";\nimport { ImageListContext } from \"./ImageList\";\nimport styles from \"./ImageListItem.module.css\";\n\nconst elevationClassMap: Record<string, string | undefined> = {\n  level1: styles.elevationLevel1,\n  level2: styles.elevationLevel2,\n  level3: styles.elevationLevel3,\n  level4: styles.elevationLevel4,\n};\n\n/**\n * ImageListItem Component Implementation\n */\nfunction ImageListItemComponent(\n  props: ImageListItemProps,\n  ref: React.ForwardedRef<HTMLLIElement>\n) {\n  const {\n    children,\n    className,\n    style,\n    cols: propCols,\n    rows: propRows,\n    glass: propGlass,\n    hoverOverlay = false,\n    elevation = 0,\n    rounded: propRounded,\n    alt,\n    src,\n    srcSet,\n    onClick,\n    onKeyDown,\n    \"aria-label\": ariaLabel,\n    \"aria-describedby\": ariaDescribedBy,\n    role,\n    ...rest\n  } = props;\n\n  // Check if reduced motion is preferred\n  const prefersReducedMotion = useReducedMotion();\n\n  const context = useContext(ImageListContext);\n  const variant = context?.variant ?? \"standard\";\n  const contextGlass = context?.glass ?? false;\n  const variableSize = context?.variableSize ?? false;\n  const contextRounded = context?.glassRadiusMd ?? false;\n\n  // Calculate cols and rows based on variableSize\n  const cols =\n    propCols !== undefined\n      ? propCols\n      : // If variable size is enabled, allow items to span multiple columns/rows\n        // Otherwise, enforce single-cell items\n        variableSize\n        ? 1\n        : 1;\n  const rows = propRows !== undefined ? propRows : variableSize ? 1 : 1;\n\n  // Merge props with context\n  const glass = propGlass !== undefined ? propGlass : contextGlass;\n  const glassRadiusMd =\n    propRounded !== undefined ? propRounded : contextRounded;\n\n  // Simplified animation settings\n  const finalDisableAnimation = prefersReducedMotion;\n\n  // State for hover and focus\n  const [isFocused, setIsFocused] = useState(false);\n  const [isHovered, setIsHovered] = useState(false);\n\n  // Accessibility handlers\n  const handleClick = useCallback(\n    (event: React.MouseEvent<HTMLLIElement>) => {\n      onClick?.(event);\n    },\n    [onClick]\n  );\n\n  const handleKeyDown = useCallback(\n    (event: React.KeyboardEvent<HTMLLIElement>) => {\n      // Handle Enter and Space key activation\n      if (event.key === \"Enter\" || event.key === \" \") {\n        event.preventDefault();\n        if (onClick) {\n          onClick(event as any);\n        }\n      }\n      // Pass through any custom key handling\n      onKeyDown?.(event);\n    },\n    [onClick, onKeyDown]\n  );\n\n  // Generate accessible description\n  const accessibleDescription = useMemo(() => {\n    if (alt) return alt;\n    if (ariaLabel) return ariaLabel;\n    return \"Image in gallery\";\n  }, [alt, ariaLabel]);\n\n  // Determine if this item is interactive\n  const isInteractive = Boolean(onClick);\n\n  // Generate ARIA attributes\n  const ariaAttributes = useMemo(() => {\n    const attributes: Record<string, any> = {};\n\n    if (isInteractive) {\n      attributes.role = role || \"button\";\n      attributes[\"aria-label\"] = ariaLabel || accessibleDescription;\n      if (ariaDescribedBy) {\n        attributes[\"aria-describedby\"] = ariaDescribedBy;\n      }\n    } else {\n      attributes.role = role || \"listitem\";\n      attributes[\"aria-label\"] = ariaLabel || accessibleDescription;\n    }\n\n    // Add state information\n    if (hoverOverlay && (isHovered || isFocused)) {\n      attributes[\"aria-expanded\"] = \"true\";\n    }\n\n    return attributes;\n  }, [\n    role,\n    ariaLabel,\n    ariaDescribedBy,\n    accessibleDescription,\n    isInteractive,\n    hoverOverlay,\n    isHovered,\n    isFocused,\n  ]);\n\n  // Prepare image element if src is provided with enhanced accessibility\n  const image = src ? (\n    <img\n      src={src}\n      srcSet={srcSet}\n      alt={alt || accessibleDescription}\n      loading=\"lazy\"\n      role={alt ? undefined : \"presentation\"}\n      {...rest}\n    />\n  ) : null;\n\n  const itemStyle = useMemo<React.CSSProperties>(() => {\n    const styleVars: React.CSSProperties = {\n      \"--image-item-col-span\": String(Math.max(1, cols)),\n      \"--image-item-row-span\": String(Math.max(1, rows)),\n      \"--image-item-scale\": (!finalDisableAnimation && (isHovered || isFocused)\n        ? 1.03\n        : 1\n      ).toString(),\n    } as React.CSSProperties;\n\n    if (finalDisableAnimation) {\n      styleVars.transition = \"none\";\n    }\n\n    return { ...style, ...styleVars };\n  }, [cols, rows, finalDisableAnimation, isHovered, isFocused, style]);\n\n  const elevationClass = useMemo(() => {\n    if (glass) return undefined;\n    if (typeof elevation === \"string\") {\n      return elevationClassMap[elevation];\n    }\n    return undefined;\n  }, [glass, elevation]);\n\n  const rootClassName = cn(\n    styles.item,\n    glass && styles.glass,\n    glassRadiusMd && styles.rounded,\n    variant === \"masonry\" && styles.masonryItem,\n    isInteractive && styles.clickable,\n    elevationClass,\n    \"galileo-image-list-item\",\n    className\n  );\n\n  const overlayClassName = cn(\n    styles.overlay,\n    (isHovered || isFocused) && styles.overlayVisible,\n    finalDisableAnimation && styles.noTransition\n  );\n\n  return (\n    <li\n      ref={ref}\n      className={rootClassName}\n      style={{ ...itemStyle }}\n      tabIndex={isInteractive ? 0 : -1}\n      onClick={isInteractive ? handleClick : undefined}\n      onKeyDown={isInteractive ? handleKeyDown : undefined}\n      onMouseEnter={() => {\n        setIsHovered(true);\n      }}\n      onMouseLeave={() => {\n        setIsHovered(false);\n      }}\n      onFocus={() => {\n        setIsFocused(true);\n      }}\n      onBlur={() => {\n        setIsFocused(false);\n      }}\n      {...ariaAttributes}\n      {...rest}\n    >\n      <div className={styles.media}>\n        {image}\n        {children}\n\n        {hoverOverlay && (\n          <div className={overlayClassName} aria-hidden=\"true\" />\n        )}\n      </div>\n    </li>\n  );\n}\n\n/**\n * ImageListItem Component\n *\n * An item component for the ImageList.\n */\nconst ImageListItem = forwardRef<HTMLLIElement, ImageListItemProps>(\n  ImageListItemComponent\n);\n\n/**\n * GlassImageListItem Component\n *\n * Glass variant of the ImageListItem component.\n */\nconst GlassImageListItem = forwardRef<HTMLLIElement, ImageListItemProps>(\n  (props, ref) => <ImageListItem {...props} glass={true} ref={ref} />\n);\n\nGlassImageListItem.displayName = \"GlassImageListItem\";\n\nexport default ImageListItem;\nexport { ImageListItem, GlassImageListItem };\n", ".item {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  outline: none;\n  z-index: 1;\n  border-radius: var(--image-item-radius, var(--aura-radius-lg));\n  transform: scale(var(--image-item-scale, 1));\n  transition:\n    transform var(--aura-motion-duration-normal)\n      var(--aura-motion-easing-standard),\n    box-shadow var(--aura-motion-duration-normal)\n      var(--aura-motion-easing-standard);\n  grid-column: span var(--image-item-col-span, 1);\n  grid-row: span var(--image-item-row-span, 1);\n}\n\n.item:focus-visible {\n  outline: none;\n  box-shadow: var(\n    --glass-elev-image-item-focus,\n    0 0 0 2px var(--glass-image-focus-ring-inner, rgba(99, 102, 241, 0.45)),\n    0 0 0 6px var(--glass-image-focus-ring-outer, rgba(99, 102, 241, 0.25))\n  );\n}\n\n.clickable {\n  cursor: pointer;\n}\n\n.glass {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 88%,\n    transparent\n  );\n  border: 1px solid var(--aura-color-glass-border);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  box-shadow: var(--aura-color-glass-shadow);\n}\n\n.rounded {\n  border-radius: var(--aura-radius-xl);\n}\n\n.media {\n  position: relative;\n  display: block;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n\n.media > :global(img) {\n  display: block;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n\n.overlay {\n  position: absolute;\n  inset: 0;\n  background: var(--glass-image-overlay, rgba(15, 23, 42, 0.4));\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  opacity: 0;\n  transition: opacity var(--aura-motion-duration-normal)\n    var(--aura-motion-easing-standard);\n  pointer-events: none;\n}\n\n.overlayVisible {\n  opacity: 1;\n}\n\n.noTransition {\n  transition: none;\n}\n\n.masonryItem {\n  break-inside: avoid;\n  margin-bottom: var(--image-list-gap, var(--aura-space-3));\n}\n\n.elevationLevel1 {\n  box-shadow: var(\n    --glass-elev-image-item-level1,\n    0 8px 24px rgba(15, 23, 42, 0.16)\n  );\n}\n\n.elevationLevel2 {\n  box-shadow: var(\n    --glass-elev-image-item-level2,\n    0 12px 32px rgba(15, 23, 42, 0.2)\n  );\n}\n\n.elevationLevel3 {\n  box-shadow: var(\n    --glass-elev-image-item-level3,\n    0 16px 40px rgba(15, 23, 42, 0.24)\n  );\n}\n\n.elevationLevel4 {\n  box-shadow: var(\n    --glass-elev-image-item-level4,\n    0 20px 52px rgba(15, 23, 42, 0.28)\n  );\n}\n", "\"use client\";\n/**\n * ImageListItemBar Component\n *\n * A title bar for an ImageListItem with glass morphism styling.\n */\n// Typography tokens available via typography.css (imported in index.css)\nimport React, { forwardRef, useState } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\nimport { ImageListItemBarProps } from \"./types\";\nimport styles from \"./ImageListItemBar.module.css\";\n\n/**\n * ImageListItemBar Component Implementation\n */\nfunction ImageListItemBarComponent(\n  props: ImageListItemBarProps,\n  ref: React.ForwardedRef<HTMLDivElement>\n) {\n  const {\n    children,\n    className,\n    style,\n    title,\n    subtitle,\n    position = \"bottom\",\n    glass = false,\n    actionIcon,\n    actionPosition = \"right\",\n    showOnHover = false,\n    ...rest\n  } = props;\n\n  // Check if reduced motion is preferred\n  const prefersReducedMotion = useReducedMotion();\n\n  // State for hover\n  const [isHovered, setIsHovered] = useState(false);\n\n  const rootClassName = cn(\n    styles.root,\n    position === \"top\" && styles.positionTop,\n    position === \"bottom\" && styles.positionBottom,\n    position === \"below\" && styles.positionBelow,\n    glass && styles.glass,\n    actionPosition === \"left\" && styles.actionLeft,\n    showOnHover && styles.showOnHover,\n    showOnHover && (isHovered || prefersReducedMotion) && styles.visible,\n    prefersReducedMotion && styles.noTransition,\n    className\n  );\n\n  const actionClassName = cn(\n    styles.action,\n    actionPosition === \"left\" && styles.actionLeftAction\n  );\n\n  return (\n    <div\n      ref={ref}\n      className={rootClassName}\n      style={{ ...(style ?? {}) }}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      {...rest}\n    >\n      <div className={styles.titleWrapper}>\n        {title && <div className={styles.title}>{title}</div>}\n        {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n      </div>\n\n      {actionIcon && <div className={actionClassName}>{actionIcon}</div>}\n\n      {children}\n    </div>\n  );\n}\n\n/**\n * ImageListItemBar Component\n *\n * A title bar for an ImageListItem.\n */\nconst ImageListItemBar = forwardRef(ImageListItemBarComponent);\n\n/**\n * GlassImageListItemBar Component\n *\n * Glass variant of the ImageListItemBar component.\n */\nconst GlassImageListItemBar = forwardRef<HTMLDivElement, ImageListItemBarProps>(\n  (props, ref) => <ImageListItemBar {...props} glass={true} ref={ref} />\n);\n\nGlassImageListItemBar.displayName = \"GlassImageListItemBar\";\n\nexport default ImageListItemBar;\nexport { ImageListItemBar, GlassImageListItemBar };\n", ".root {\n  position: absolute;\n  left: 0;\n  right: 0;\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-3);\n  padding: var(--aura-space-3) var(--aura-space-4);\n  color: var(--aura-color-global-text-primary);\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 88%,\n    rgba(var(--glass-color-black) / var(--glass-opacity-20))\n  );\n  border-block: 1px solid\n    color-mix(in srgb, var(--aura-color-global-border-soft) 58%, transparent);\n  text-shadow: 0 1px 2px\n    color-mix(\n      in srgb,\n      rgba(var(--glass-color-black) / var(--glass-opacity-45)) 92%,\n      transparent\n    );\n  transition: opacity var(--aura-motion-duration-normal)\n    var(--aura-motion-easing-standard);\n  pointer-events: auto;\n}\n\n.positionTop {\n  top: 0;\n  border-radius: 0 0 var(--aura-radius-lg) var(--aura-radius-lg);\n}\n\n.positionBottom {\n  bottom: 0;\n  border-radius: var(--aura-radius-lg) var(--aura-radius-lg) 0 0;\n}\n\n.positionBelow {\n  position: relative;\n  margin-top: var(--aura-space-3);\n  border-radius: var(--aura-radius-lg);\n}\n\n.glass {\n  background: color-mix(\n    in srgb,\n    var(--aura-color-glass-surface) 92%,\n    rgba(var(--glass-color-black) / var(--glass-opacity-30))\n  );\n  border: 1px solid var(--aura-color-glass-border);\n  backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  -webkit-backdrop-filter: blur(var(--aura-glass-neutral-level2-backdrop-blur));\n  box-shadow: var(--aura-color-glass-shadow);\n}\n\n.actionLeft {\n  flex-direction: row-reverse;\n}\n\n.titleWrapper {\n  flex: 1;\n  min-width: 0;\n}\n\n.title {\n  font-size: 0.875rem;\n  font-weight: var(--aura-font-weight-medium);\n  line-height: 1.2;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  color: var(--aura-color-global-text-primary);\n}\n\n.subtitle {\n  margin-top: var(--glass-space-image-item-bar-subtitle, 2px);\n  font-size: 0.75rem;\n  line-height: 1.2;\n  opacity: 0.75;\n  color: color-mix(\n    in srgb,\n    var(--aura-color-global-text-primary) 82%,\n    transparent\n  );\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.action {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-left: var(--aura-space-3);\n}\n\n.actionLeftAction {\n  margin-left: 0;\n  margin-right: var(--aura-space-3);\n}\n\n.showOnHover {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.visible {\n  opacity: 1;\n  pointer-events: auto;\n}\n\n.noTransition {\n  transition: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .root {\n    transition: none;\n  }\n}\n", "\"use client\";\nimport React, { forwardRef, useEffect, useState, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { GlassButton as Button } from \"../button\";\nimport { Typography } from \"../data-display/Typography\";\n\nimport { useGalileoStateSpring } from \"../../hooks/useGalileoStateSpring\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport {\n  SpringConfig,\n  SpringPresets,\n} from \"../../animations/physics/springPhysics\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport styles from \"./CompactCookieNotice.module.css\";\n\ninterface CompactCookieNoticeProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  position?:\n    | \"bottom\"\n    | \"top\"\n    | \"bottom-left\"\n    | \"bottom-right\"\n    | \"top-left\"\n    | \"top-right\";\n  glassIntensity?: number;\n  message?: string;\n  acceptText?: string;\n  declineText?: string;\n  moreInfoText?: string;\n  privacyPolicyUrl?: string;\n  onAccept?: () => void;\n  onDecline?: () => void;\n  onMoreInfo?: () => void;\n  theme?: unknown;\n  animate?: boolean;\n  forceVisible?: boolean;\n}\n\n// Cookie management utility\nconst setCookie = (name: string, value: string, days: number): void => {\n  const date = new Date();\n  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n  const expires = `expires=${date.toUTCString()}`;\n  document.cookie = `${name}=${value};${expires};path=/`;\n};\n\nconst getCookie = (name: string): string | null => {\n  const nameEQ = `${name}=`;\n  const ca = document.cookie.split(\";\");\n  for (let i = 0; i < ca.length; i++) {\n    let c = ca[i];\n    while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n    if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n  }\n  return null;\n};\n\nconst POSITION_CLASS_MAP: Record<\n  NonNullable<CompactCookieNoticeProps[\"position\"]>,\n  string\n> = {\n  bottom: styles.positionBottom,\n  top: styles.positionTop,\n  \"bottom-left\": styles.positionBottomLeft,\n  \"bottom-right\": styles.positionBottomRight,\n  \"top-left\": styles.positionTopLeft,\n  \"top-right\": styles.positionTopRight,\n};\n\ntype CookieStyleVars = React.CSSProperties & {\n  [\"--cookie-blur-scale\"]?: string | number;\n  [\"--cookie-box-shadow\"]?: string;\n};\n\n/**\n * A compact cookie consent notice that takes minimal screen space\n */\nexport const CompactCookieNotice = forwardRef<\n  HTMLDivElement,\n  CompactCookieNoticeProps\n>(\n  (\n    {\n      message = \"We use cookies for a better experience.\",\n      acceptText = \"Accept\",\n      moreInfoText = \"More Info\",\n      onAccept,\n      onMoreInfo,\n      style,\n      className,\n      glassIntensity = 0.6,\n      position = \"bottom-left\",\n      animate = true,\n      forceVisible = false,\n      ...rest\n    }: CompactCookieNoticeProps,\n    ref\n  ) => {\n    const [visible, setVisible] = useState(forceVisible);\n    const prefersReducedMotion = useReducedMotion();\n    const { defaultSpring } = useAnimationContext();\n\n    const shouldAnimate = animate && !prefersReducedMotion;\n\n    useEffect(() => {\n      if (forceVisible) {\n        setVisible(true);\n        return;\n      }\n\n      // Check if user has already made a choice\n      const consentValue = getCookie(\"cookie-consent\");\n      if (!consentValue) {\n        // Show the notice\n        setVisible(true);\n      }\n    }, [forceVisible]);\n\n    const handleAccept = () => {\n      setCookie(\"cookie-consent\", \"accepted\", 365);\n      setVisible(false);\n      if (onAccept) {\n        onAccept();\n      }\n    };\n\n    const handleMoreInfo = () => {\n      if (onMoreInfo) {\n        onMoreInfo();\n      }\n    };\n\n    // --- Animation Setup ---\n    const finalSpringConfig = useMemo(() => {\n      const baseConfig: SpringConfig = SpringPresets.default;\n      let contextConfig: Partial<SpringConfig> = {};\n      if (typeof defaultSpring === \"string\" && defaultSpring in SpringPresets) {\n        contextConfig =\n          SpringPresets[defaultSpring as keyof typeof SpringPresets];\n      } else if (typeof defaultSpring === \"object\") {\n        contextConfig = defaultSpring ?? {};\n      }\n      return { ...baseConfig, ...contextConfig };\n    }, [defaultSpring]);\n\n    const isTop = position?.startsWith(\"top\");\n    const exitY = isTop ? -15 : 15;\n\n    // Spring for Opacity\n    const { value: animatedOpacity } = useGalileoStateSpring(visible ? 1 : 0, {\n      ...finalSpringConfig,\n      immediate: !shouldAnimate,\n    });\n\n    // Spring for TranslateY\n    const { value: animatedTranslateY } = useGalileoStateSpring(\n      visible ? 0 : exitY,\n      {\n        ...finalSpringConfig,\n        immediate: !shouldAnimate,\n      }\n    );\n\n    // Calculate transform\n    const isCentered = position === \"top\" || position === \"bottom\";\n    const animatedStyle: React.CSSProperties = {\n      opacity: animatedOpacity,\n      transform: `translateY(${animatedTranslateY}px)${isCentered ? \" translateX(-50%)\" : \"\"}`,\n    };\n\n    const positionClass =\n      POSITION_CLASS_MAP[position ?? \"bottom-left\"] ??\n      styles.positionBottomLeft;\n    const depth = Math.max(0.5, Math.min(2, glassIntensity));\n    const shadowDepth = (24 * depth).toFixed(2);\n    const containerStyleVars: CookieStyleVars = {\n      \"--cookie-blur-scale\": depth,\n      \"--cookie-box-shadow\": `0 10px ${shadowDepth}px color-mix(in srgb, var(--glass-black) 16%, transparent)`,\n    };\n    if (!visible) {\n      return (\n        <div\n          ref={ref}\n          className={cn(styles.container, positionClass, className)}\n          style={{ ...containerStyleVars, display: \"none\", ...style }}\n          aria-hidden\n          {...rest}\n        />\n      );\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(styles.container, positionClass, className)}\n        style={{ ...containerStyleVars, ...animatedStyle, ...style }}\n        aria-hidden={!visible}\n        {...rest}\n      >\n        <Typography variant=\"p\">{message}</Typography>\n\n        <div className={styles.buttonGroup}>\n          <Button variant=\"link\" onClick={handleMoreInfo} size=\"sm\">\n            {moreInfoText}\n          </Button>\n\n          <Button variant=\"primary\" onClick={handleAccept} size=\"sm\">\n            {acceptText}\n          </Button>\n        </div>\n      </div>\n    );\n  }\n);\n\nCompactCookieNotice.displayName = \"CompactCookieNotice\";\n\n// Glass version of the CompactCookieNotice\nexport const GlassCompactCookieNotice = forwardRef<\n  HTMLDivElement,\n  CompactCookieNoticeProps\n>((props: CompactCookieNoticeProps, ref) => (\n  <CompactCookieNotice ref={ref} glassIntensity={0.75} {...props} />\n));\n\nGlassCompactCookieNotice.displayName = \"GlassCompactCookieNotice\";\n", "'use client';\nimport React from 'react';\nimport { useState } from 'react';\nimport { springConfig } from '../animations/physics/springPhysics';\n\nexport interface GalileoStateSpringOptions {\n  stiffness?: number;\n  damping?: number;\n  mass?: number;\n  immediate?: boolean;\n}\n\nexport function useGalileoStateSpring<T>(initialValue: T, options?: GalileoStateSpringOptions) {\n  const [value, setValue] = useState(initialValue);\n\n  const setSpringValue = (newValue: T) => {\n    // Spring animation implementation - integrates with physics system\n    setValue(newValue);\n  };\n\n  return {\n    value,\n    setValue: setSpringValue,\n    isAnimating: false\n  };\n}", ".container {\n  --cookie-blur-scale: 1;\n  --cookie-box-shadow: var(--aura-color-glass-shadow);\n  position: fixed;\n  z-index: 1000;\n  padding: var(--aura-space-3) var(--aura-space-4);\n  border-radius: var(--aura-radius-lg);\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: var(--aura-space-3);\n  width: auto;\n  max-width: 100%;\n  box-sizing: border-box;\n  background: var(--aura-color-glass-surface);\n  backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  -webkit-backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  border: 1px solid var(--aura-color-glass-border);\n  box-shadow: var(--cookie-box-shadow);\n  will-change: transform, opacity;\n  transition:\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-emphasized),\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.positionBottom {\n  bottom: var(--aura-space-4);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionTop {\n  top: var(--aura-space-4);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionBottomLeft {\n  bottom: var(--aura-space-4);\n  left: var(--aura-space-4);\n}\n\n.positionBottomRight {\n  bottom: var(--aura-space-4);\n  right: var(--aura-space-4);\n}\n\n.positionTopLeft {\n  top: var(--aura-space-4);\n  left: var(--aura-space-4);\n}\n\n.positionTopRight {\n  top: var(--aura-space-4);\n  right: var(--aura-space-4);\n}\n\n@media (max-width: 600px) {\n  .container {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: var(--aura-space-3);\n  }\n\n  .positionBottom,\n  .positionTop {\n    left: var(--aura-space-4);\n    right: var(--aura-space-4);\n    width: calc(100% - 2 * var(--aura-space-4));\n    transform: none;\n  }\n\n  .container {\n    max-width: calc(100% - 2 * var(--aura-space-4));\n  }\n}\n\n.buttonGroup {\n  display: flex;\n  gap: var(--aura-space-3);\n  margin-left: var(--aura-space-4);\n}\n\n@media (max-width: 600px) {\n  .buttonGroup {\n    margin-left: 0;\n    width: 100%;\n  }\n\n  .buttonGroup > :global(button) {\n    flex: 1;\n  }\n}\n", "\"use client\";\n// Typography tokens available via typography.css (imported in index.css)\nimport React, { forwardRef, useEffect, useState, useMemo } from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { Box } from \"../layout/Box\";\nimport { GlassButton as Button } from \"../button\";\nimport { Typography } from \"../data-display/Typography\";\n// Import correct path for glowEffects\n\nimport { GlobalCookieConsentProps as CookieConsentProps } from \"./types\";\nimport styles from \"./CookieConsent.module.css\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Physics/Animation Imports\nimport { useGalileoStateSpring } from \"../../hooks/useGalileoStateSpring\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport {\n  SpringConfig,\n  SpringPresets,\n} from \"../../animations/physics/springPhysics\";\n\n// Cookie management utility\nconst setCookie = (name: string, value: string, days: number): void => {\n  const date = new Date();\n  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n  const expires = `expires=${date.toUTCString()}`;\n  document.cookie = `${name}=${value};${expires};path=/`;\n};\n\nconst getCookie = (name: string): string | null => {\n  const nameEQ = `${name}=`;\n  const ca = document.cookie.split(\";\");\n  for (let i = 0; i < ca.length; i++) {\n    let c = ca[i];\n    while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n    if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n  }\n  return null;\n};\n\nconst POSITION_CLASS_MAP: Record<\n  NonNullable<CookieConsentProps[\"position\"]>,\n  string\n> = {\n  bottom: styles.positionCenterBottom,\n  top: styles.positionCenterTop,\n  \"bottom-left\": styles.positionBottomLeft,\n  \"bottom-right\": styles.positionBottomRight,\n  \"top-left\": styles.positionTopLeft,\n  \"top-right\": styles.positionTopRight,\n};\n\ntype CookieConsentStyleVars = React.CSSProperties & {\n  [\"--cookie-blur-scale\"]?: string | number;\n  [\"--cookie-box-shadow\"]?: string;\n};\n\n/**\n * Cookie Consent component for displaying cookie consent banners\n */\nexport const CookieConsent = forwardRef<HTMLDivElement, CookieConsentProps>(\n  (\n    {\n      title = \"Cookie Consent\",\n      message = \"We use cookies to improve your experience on our site.\",\n      position = \"bottom-right\",\n      acceptButtonText = \"Accept\",\n      declineButtonText = \"Decline\",\n      settingsButtonText = \"Customize\",\n      onAccept,\n      onDecline,\n      onSettings,\n      enableSettings = false,\n      glassIntensity = 0.7,\n      privacyPolicyUrl,\n      privacyPolicyText = \"Privacy Policy\",\n      className,\n      animate = true,\n      delay = 500,\n      timeout = 0,\n      onTimeout,\n      dismissible = true,\n      cookieExpiration = 365,\n      style,\n      animationConfig,\n      disableAnimation,\n      motionSensitivity,\n      forceVisible = false,\n      ...rest\n    }: CookieConsentProps,\n    ref\n  ) => {\n    const [visible, setVisible] = useState(forceVisible);\n    const prefersReducedMotion = useReducedMotion();\n    const { defaultSpring } = useAnimationContext();\n\n    const finalDisableAnimation = disableAnimation ?? prefersReducedMotion;\n    const shouldAnimate = animate && !finalDisableAnimation;\n\n    useEffect(() => {\n      if (forceVisible) {\n        setVisible(true);\n        return;\n      }\n\n      // Check if user has already made a choice\n      const consentValue = getCookie(\"cookie-consent\");\n      if (!consentValue) {\n        // Show the consent banner after delay\n        const timer = setTimeout(() => {\n          setVisible(true);\n        }, delay);\n\n        return () => clearTimeout(timer);\n      }\n    }, [delay, forceVisible]);\n\n    useEffect(() => {\n      if (visible && timeout > 0) {\n        const timer = setTimeout(() => {\n          setVisible(false);\n          if (onTimeout) {\n            onTimeout();\n          }\n        }, timeout);\n\n        return () => clearTimeout(timer);\n      }\n    }, [visible, timeout, onTimeout]);\n\n    const finalSpringConfig = useMemo(() => {\n      const baseConfig: SpringConfig = SpringPresets.default;\n      let contextConfig: Partial<SpringConfig> = {};\n      const contextSource = defaultSpring;\n      if (typeof contextSource === \"string\" && contextSource in SpringPresets) {\n        contextConfig =\n          SpringPresets[contextSource as keyof typeof SpringPresets];\n      } else if (typeof contextSource === \"object\") {\n        contextConfig = contextSource ?? {};\n      }\n      let propConfig = {};\n      const propSource = animationConfig;\n      if (typeof propSource === \"string\" && propSource in SpringPresets) {\n        propConfig = SpringPresets[propSource as keyof typeof SpringPresets];\n      } else if (\n        typeof propSource === \"object\" &&\n        (\"tension\" in propSource || \"friction\" in propSource)\n      ) {\n        propConfig = propSource as Partial<SpringConfig>;\n      }\n      return { ...baseConfig, ...contextConfig, ...propConfig };\n    }, [defaultSpring, animationConfig]);\n\n    const isTop = position?.startsWith(\"top\");\n    const exitY = isTop ? -20 : 20;\n\n    const { value: animatedOpacity } = useGalileoStateSpring(visible ? 1 : 0, {\n      ...finalSpringConfig,\n      immediate: !shouldAnimate,\n    });\n\n    const { value: animatedTranslateY } = useGalileoStateSpring(\n      visible ? 0 : exitY,\n      {\n        ...finalSpringConfig,\n        immediate: !shouldAnimate,\n      }\n    );\n\n    const positionClass =\n      POSITION_CLASS_MAP[position ?? \"bottom-right\"] ??\n      styles.positionBottomRight;\n    const depth = Math.max(0.5, Math.min(2, glassIntensity));\n    const shadowDepth = (28 * depth).toFixed(2);\n    const containerStyleVars: CookieConsentStyleVars = {\n      \"--cookie-blur-scale\": depth,\n      \"--cookie-box-shadow\": `0 12px ${shadowDepth}px color-mix(in srgb, var(--glass-gray-900) 18%, transparent)`,\n    };\n\n    const isCentered = position === \"top\" || position === \"bottom\";\n    const animatedStyle: React.CSSProperties = {\n      opacity: animatedOpacity,\n      transform: `translateY(${animatedTranslateY}px)${isCentered ? \" translateX(-50%)\" : \"\"}`,\n    };\n\n    if (!visible) {\n      return (\n        <div\n          ref={ref}\n          className={cn(styles.container, positionClass, className)}\n          style={{ ...containerStyleVars, display: \"none\", ...style }}\n          aria-hidden\n          {...rest}\n        />\n      );\n    }\n\n    return (\n      <div\n        ref={ref}\n        className={cn(styles.container, positionClass, className)}\n        style={{ ...containerStyleVars, ...animatedStyle, ...style }}\n        aria-hidden={!visible}\n        {...rest}\n      >\n        <Box>\n          {title && (\n            <Typography variant=\"h6\" className=\"glass-mb-2 glass-font-semibold\">\n              {title}\n            </Typography>\n          )}\n\n          <Typography variant=\"p\">\n            {message}\n            {privacyPolicyUrl && (\n              <>\n                {\" \"}\n                <a\n                  href={privacyPolicyUrl}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className=\"glass-focus glass-touch-target glass-contrast-guard\"\n                >\n                  {privacyPolicyText}\n                </a>\n              </>\n            )}\n          </Typography>\n\n          <div className={styles.buttonContainer}>\n            {dismissible && (\n              <Button\n                variant=\"outline\"\n                onClick={onDecline}\n                size=\"sm\"\n                className=\"glass-focus glass-touch-target\"\n              >\n                {declineButtonText}\n              </Button>\n            )}\n\n            {enableSettings && (\n              <Button\n                variant=\"outline\"\n                onClick={onSettings}\n                size=\"sm\"\n                className=\"glass-focus glass-touch-target\"\n              >\n                {settingsButtonText}\n              </Button>\n            )}\n\n            <Button\n              variant=\"primary\"\n              onClick={onAccept}\n              size=\"sm\"\n              className=\"glass-focus glass-touch-target\"\n            >\n              {acceptButtonText}\n            </Button>\n          </div>\n        </Box>\n      </div>\n    );\n  }\n);\n\nCookieConsent.displayName = \"CookieConsent\";\n\n// Glass version of the CookieConsent component\nexport const GlassCookieConsent = forwardRef<\n  HTMLDivElement,\n  CookieConsentProps\n>((props: CookieConsentProps, ref) => (\n  <CookieConsent ref={ref} glassIntensity={0.8} {...props} />\n));\n\nGlassCookieConsent.displayName = \"GlassCookieConsent\";\n", ".container {\n  --cookie-blur-scale: 1;\n  --cookie-box-shadow: var(--aura-color-glass-shadow);\n  position: fixed;\n  z-index: 1000;\n  padding: var(--aura-space-5);\n  border-radius: var(--aura-radius-xl);\n  width: 100%;\n  max-width: 420px;\n  box-sizing: border-box;\n  background: var(--aura-color-glass-surface);\n  backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  -webkit-backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  border: 1px solid var(--aura-color-glass-border);\n  box-shadow: var(--cookie-box-shadow);\n  will-change: transform, opacity;\n  transition:\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-emphasized),\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.positionCenterBottom {\n  bottom: var(--aura-space-5);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionCenterTop {\n  top: var(--aura-space-5);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionBottomLeft {\n  bottom: var(--aura-space-5);\n  left: var(--aura-space-5);\n}\n\n.positionBottomRight {\n  bottom: var(--aura-space-5);\n  right: var(--aura-space-5);\n}\n\n.positionTopLeft {\n  top: var(--aura-space-5);\n  left: var(--aura-space-5);\n}\n\n.positionTopRight {\n  top: var(--aura-space-5);\n  right: var(--aura-space-5);\n}\n\n@media (max-width: 540px) {\n  .container {\n    max-width: 100%;\n    width: calc(100% - 2 * var(--aura-space-5));\n    left: var(--aura-space-5);\n    right: var(--aura-space-5);\n    transform: none;\n  }\n\n  .positionCenterBottom,\n  .positionCenterTop {\n    left: var(--aura-space-5);\n    right: var(--aura-space-5);\n  }\n}\n\n.buttonContainer {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--aura-space-4);\n  margin-top: var(--aura-space-4);\n  justify-content: flex-end;\n}\n\n@media (max-width: 540px) {\n  .buttonContainer {\n    flex-direction: column;\n  }\n\n  .buttonContainer > :global(button) {\n    width: 100%;\n  }\n}\n", "\"use client\";\n// Typography tokens available via typography.css (imported in index.css)\nimport React, {\n  forwardRef,\n  useState,\n  useEffect,\n  useMemo,\n  useCallback,\n  useRef,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport styles from \"./GlobalCookieConsent.module.css\";\n\nimport { createThemeContext } from \"../../core/themeContext\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { useAnimationContext } from \"../../contexts/AnimationContext\";\nimport { Box } from \"../layout/Box\";\nimport { GlassButton as Button } from \"../button\";\nimport { Typography } from \"../data-display/Typography\";\nimport { GlassModal as Modal } from \"../modal/GlassModal\";\nimport { GlassCheckbox as Checkbox } from \"../input/GlassCheckbox\";\n\nimport { GlobalCookieConsentProps, CookieCategory } from \"./types\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\n\n// Cookie management utilities\nconst setCookie = (name: string, value: string, days: number): void => {\n  const date = new Date();\n  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n  const expires = `expires=${date.toUTCString()}`;\n  document.cookie = `${name}=${value};${expires};path=/`;\n};\n\nconst getCookie = (name: string): string | null => {\n  const nameEQ = `${name}=`;\n  const ca = document.cookie.split(\";\");\n  for (let i = 0; i < ca.length; i++) {\n    let c = ca[i];\n    while (c.charAt(0) === \" \") c = c.substring(1, c.length);\n    if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n  }\n  return null;\n};\n\n// Physics/Animation Imports\nimport {\n  useGalileoStateSpring,\n  GalileoStateSpringOptions,\n} from \"../../hooks/useGalileoStateSpring\";\nimport {\n  SpringConfig,\n  SpringPresets,\n} from \"../../animations/physics/springPhysics\";\n\nconst POSITION_CLASS_MAP: Record<\n  NonNullable<GlobalCookieConsentProps[\"position\"]>,\n  string\n> = {\n  bottom: styles.positionCenterBottom,\n  top: styles.positionCenterTop,\n  \"bottom-left\": styles.positionBottomLeft,\n  \"bottom-right\": styles.positionBottomRight,\n  \"top-left\": styles.positionTopLeft,\n  \"top-right\": styles.positionTopRight,\n};\n\n/**\n * Global Cookie Consent component for comprehensive cookie consent management\n */\nexport const GlobalCookieConsent = forwardRef<\n  HTMLDivElement,\n  GlobalCookieConsentProps\n>(\n  (\n    {\n      title = \"Manage Cookie Preferences\",\n      message = \"We use cookies to enhance your browsing experience, analyze site traffic, and personalize content.\",\n      position = \"bottom\",\n      acceptButtonText = \"Accept All\",\n      declineButtonText = \"Decline All\",\n      settingsButtonText = \"Save Preferences\",\n      onAccept,\n      onDecline,\n      onSave,\n      onCategoryChange,\n      enableSettings = true,\n      glassIntensity = 0.8,\n      privacyPolicyUrl,\n      privacyPolicyText = \"Privacy Policy\",\n      className,\n      animate = true,\n      delay = 700,\n      timeout = 0,\n      onTimeout,\n      dismissible = true,\n      cookieExpiration = 365,\n      style,\n      cookieCategories = [],\n      customContent,\n      initiallyExpanded = false,\n      useModalForDetails = false,\n      defaultSelectedCategories = [],\n      forceVisible = false,\n      ...rest\n    }: GlobalCookieConsentProps,\n    ref\n  ) => {\n    const [visible, setVisible] = useState(forceVisible);\n    const [expanded, setExpanded] = useState(initiallyExpanded);\n    const [showDetailsModal, setShowDetailsModal] = useState(false);\n    const [selectedCategories, setSelectedCategories] = useState<string[]>([]);\n    const prefersReducedMotion = useReducedMotion();\n    const { defaultSpring } = useAnimationContext();\n\n    const shouldAnimate = animate && !prefersReducedMotion;\n\n    // Memoize initial categories to prevent infinite loops\n    const initialCategories = useMemo(() => {\n      const categories = [...defaultSelectedCategories];\n\n      // Always include required categories\n      cookieCategories\n        .filter((category: any) => category.required)\n        .forEach((category: any) => {\n          if (!categories.includes(category.id)) {\n            categories.push(category.id);\n          }\n        });\n\n      return categories;\n    }, [cookieCategories, defaultSelectedCategories]);\n\n    // Track if categories have been initialized to prevent loops\n    const categoriesInitialized = useRef(false);\n\n    // Set initial selected categories only once\n    useEffect(() => {\n      if (!categoriesInitialized.current) {\n        setSelectedCategories(initialCategories);\n        categoriesInitialized.current = true;\n      }\n    }, [initialCategories]);\n\n    // Check if consent was previously given\n    useEffect(() => {\n      if (forceVisible) {\n        setVisible(true);\n        return;\n      }\n\n      const consentValue = getCookie(\"cookie-consent\");\n      if (!consentValue) {\n        const timer = setTimeout(() => {\n          setVisible(true);\n        }, delay);\n\n        return () => clearTimeout(timer);\n      }\n    }, [delay, forceVisible]);\n\n    // Handle timeout\n    useEffect(() => {\n      if (visible && timeout > 0) {\n        const timer = setTimeout(() => {\n          setVisible(false);\n          if (onTimeout) {\n            onTimeout();\n          }\n        }, timeout);\n\n        return () => clearTimeout(timer);\n      }\n    }, [visible, timeout, onTimeout]);\n\n    const handleToggleCategory = (categoryId: string, required = false) => {\n      if (required) return; // Can't toggle required categories\n\n      setSelectedCategories((prevSelected) => {\n        const newSelected = prevSelected.includes(categoryId)\n          ? prevSelected.filter((id: any) => id !== categoryId)\n          : [...prevSelected, categoryId];\n\n        if (onCategoryChange) {\n          onCategoryChange(newSelected);\n        }\n\n        return newSelected;\n      });\n    };\n\n    const handleAcceptAll = () => {\n      const allCategoryIds = cookieCategories.map(\n        (category: any) => category.id\n      );\n      setCookie(\"cookie-consent\", \"accepted\", cookieExpiration);\n      setCookie(\n        \"cookie-categories\",\n        JSON.stringify(allCategoryIds),\n        cookieExpiration\n      );\n      setVisible(false);\n\n      if (onAccept) {\n        onAccept();\n      }\n    };\n\n    const handleDeclineAll = () => {\n      // Only include required categories when declining all\n      const requiredCategoryIds = cookieCategories\n        .filter((category: any) => category.required)\n        .map((category: any) => category.id);\n\n      setCookie(\"cookie-consent\", \"declined\", cookieExpiration);\n      setCookie(\n        \"cookie-categories\",\n        JSON.stringify(requiredCategoryIds),\n        cookieExpiration\n      );\n      setVisible(false);\n\n      if (onDecline) {\n        onDecline();\n      }\n    };\n\n    const handleSavePreferences = () => {\n      setCookie(\"cookie-consent\", \"customized\", cookieExpiration);\n      setCookie(\n        \"cookie-categories\",\n        JSON.stringify(selectedCategories),\n        cookieExpiration\n      );\n      setVisible(false);\n\n      if (onSave) {\n        onSave(selectedCategories);\n      }\n    };\n\n    const toggleExpanded = () => {\n      setExpanded(!expanded);\n    };\n\n    const handleShowDetails = () => {\n      if (useModalForDetails) {\n        setShowDetailsModal(true);\n      } else {\n        setExpanded(true);\n      }\n    };\n\n    // Calculate final spring config\n    const finalSpringConfig = useMemo(() => {\n      const baseConfig: SpringConfig = SpringPresets.default;\n      let contextConfig: Partial<SpringConfig> = {};\n      if (typeof defaultSpring === \"string\" && defaultSpring in SpringPresets) {\n        contextConfig =\n          SpringPresets[defaultSpring as keyof typeof SpringPresets];\n      } else if (typeof defaultSpring === \"object\") {\n        contextConfig = defaultSpring ?? {};\n      }\n      return { ...baseConfig, ...contextConfig };\n    }, [defaultSpring]);\n\n    const positionClass = useMemo(() => {\n      const key = position ?? \"bottom\";\n      return POSITION_CLASS_MAP[key] ?? styles.positionCenterBottom;\n    }, [position]);\n\n    const containerStyleVars = useMemo<React.CSSProperties>(() => {\n      const depth = Math.max(0.5, Math.min(2, glassIntensity));\n      const shadowDepth = (32 * depth).toFixed(2);\n      return {\n        \"--cookie-blur-scale\": depth,\n        \"--cookie-box-shadow\": `0 12px ${shadowDepth}px color-mix(in srgb, var(--glass-black) 18%, transparent)`,\n      } as React.CSSProperties;\n    }, [glassIntensity]);\n\n    const isTop = position?.startsWith(\"top\");\n    const exitY = isTop ? -30 : 30; // Use 30px like original CSS\n\n    // Spring for Opacity\n    const { value: animatedOpacity } = useGalileoStateSpring(visible ? 1 : 0, {\n      ...finalSpringConfig,\n      immediate: !shouldAnimate,\n    });\n\n    // Spring for TranslateY\n    const { value: animatedTranslateY } = useGalileoStateSpring(\n      visible ? 0 : exitY,\n      {\n        ...finalSpringConfig,\n        immediate: !shouldAnimate,\n      }\n    );\n\n    // Calculate transform\n    const isCentered = position === \"top\" || position === \"bottom\";\n    const animatedStyle: React.CSSProperties = {\n      opacity: animatedOpacity,\n      transform: `translateY(${animatedTranslateY}px)${isCentered ? \" translateX(-50%)\" : \"\"}`,\n    };\n    if (!visible) {\n      return (\n        <div\n          ref={ref}\n          className={cn(styles.container, positionClass, className)}\n          style={{ ...containerStyleVars, display: \"none\", ...style }}\n          aria-hidden\n          {...rest}\n        />\n      );\n    }\n\n    // Create the categories section\n    const renderCategories = () => (\n      <div className={styles.categoryContainer}>\n        {cookieCategories.map((category: any) => (\n          <div key={category.id} className={styles.categoryItem}>\n            <div className={styles.categoryHeader}>\n              <Checkbox\n                checked={selectedCategories.includes(category.id)}\n                onCheckedChange={() =>\n                  handleToggleCategory(category.id, category.required)\n                }\n                disabled={category.required}\n              />\n              <Typography variant=\"span\" className=\"glass-font-semibold\">\n                {category.name} {category.required && <em>(Required)</em>}\n              </Typography>\n            </div>\n\n            <div className={styles.categoryDescription}>\n              <Typography variant=\"p\">{category.description}</Typography>\n            </div>\n\n            {category.cookies && category.cookies.length > 0 && (\n              <>\n                <button\n                  type=\"button\"\n                  className={styles.detailsToggle}\n                  aria-expanded={expanded}\n                  aria-controls=\"cookie-details\"\n                  onClick={(e) => {\n                    // Logic to show cookie details could be expanded here\n                  }}\n                >\n                  Show cookie details\n                </button>\n\n                {/* Cookie details could be expanded here */}\n              </>\n            )}\n          </div>\n        ))}\n      </div>\n    );\n\n    return (\n      <>\n        <div\n          ref={ref}\n          className={cn(styles.container, positionClass, className)}\n          style={{ ...containerStyleVars, ...animatedStyle, ...style }}\n          aria-hidden={!visible}\n          {...rest}\n        >\n          <Box>\n            <Typography variant=\"h6\" className=\"glass-mb-2 glass-font-semibold\">\n              {title}\n            </Typography>\n\n            <Typography variant=\"p\">\n              {message}\n              {privacyPolicyUrl && (\n                <>\n                  {\" \"}\n                  <a\n                    href={privacyPolicyUrl}\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\"\n                    className=\"glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    {privacyPolicyText}\n                  </a>\n                </>\n              )}\n            </Typography>\n\n            {customContent && <Box className=\"glass-mt-4\">{customContent}</Box>}\n\n            {!expanded && cookieCategories.length > 0 && (\n              <Button\n                variant=\"ghost\"\n                onClick={handleShowDetails}\n                size=\"sm\"\n                className=\"glass-focus glass-touch-target\"\n              >\n                Customize settings\n              </Button>\n            )}\n\n            {(expanded || initiallyExpanded) && cookieCategories.length > 0 && (\n              <div id=\"cookie-details\">{renderCategories()}</div>\n            )}\n\n            <div className={styles.buttonContainer}>\n              {dismissible && (\n                <Button\n                  variant=\"outline\"\n                  onClick={handleDeclineAll}\n                  size=\"sm\"\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  {declineButtonText}\n                </Button>\n              )}\n\n              {expanded && enableSettings && (\n                <Button\n                  variant=\"outline\"\n                  onClick={handleSavePreferences}\n                  size=\"sm\"\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  {settingsButtonText}\n                </Button>\n              )}\n\n              <Button\n                variant=\"primary\"\n                onClick={handleAcceptAll}\n                size=\"sm\"\n                className=\"glass-focus glass-touch-target\"\n              >\n                {acceptButtonText}\n              </Button>\n            </div>\n          </Box>\n        </div>\n\n        {useModalForDetails && (\n          <Modal\n            open={showDetailsModal}\n            onClose={() => setShowDetailsModal(false)}\n          >\n            <div className=\"dialog-container\">\n              <div className=\"dialog-header\">\n                <Typography variant=\"h6\">Cookie Settings</Typography>\n                <Button\n                  variant=\"ghost\"\n                  onClick={(e) => setShowDetailsModal(false)}\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  \u00D7\n                </Button>\n              </div>\n              <div className=\"dialog-content\">{renderCategories()}</div>\n              <div className=\"dialog-actions\">\n                <Button\n                  variant=\"outline\"\n                  onClick={(e) => setShowDetailsModal(false)}\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  Cancel\n                </Button>\n                <Button\n                  variant=\"primary\"\n                  onClick={(e) => {\n                    handleSavePreferences();\n                    setShowDetailsModal(false);\n                  }}\n                  className=\"glass-focus glass-touch-target\"\n                >\n                  Save Preferences\n                </Button>\n              </div>\n            </div>\n          </Modal>\n        )}\n      </>\n    );\n  }\n);\n\nGlobalCookieConsent.displayName = \"GlobalCookieConsent\";\n\n// Glass version of the GlobalCookieConsent\nexport const GlassGlobalCookieConsent = forwardRef<\n  HTMLDivElement,\n  GlobalCookieConsentProps\n>((props: GlobalCookieConsentProps, ref) => (\n  <GlobalCookieConsent ref={ref} glassIntensity={0.9} {...props} />\n));\n\nGlassGlobalCookieConsent.displayName = \"GlassGlobalCookieConsent\";\n", ".container {\n  --cookie-blur-scale: 1;\n  --cookie-box-shadow: var(--aura-color-glass-shadow);\n  position: fixed;\n  z-index: 1000;\n  padding: var(--aura-space-6);\n  border-radius: var(--aura-radius-xl);\n  width: 100%;\n  max-width: 500px;\n  box-sizing: border-box;\n  background: var(--aura-color-glass-surface);\n  backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  -webkit-backdrop-filter: var(\n    --glass-cookie-backdrop-filter,\n    blur(\n      calc(\n        var(--aura-glass-neutral-level2-backdrop-blur) *\n          var(--cookie-blur-scale)\n      )\n    )\n  );\n  border: 1px solid var(--aura-color-glass-border);\n  box-shadow: var(--cookie-box-shadow);\n  will-change: transform, opacity;\n  transition:\n    transform var(--aura-motion-duration-fast)\n      var(--aura-motion-easing-emphasized),\n    opacity var(--aura-motion-duration-fast) var(--aura-motion-easing-standard);\n}\n\n.positionCenterBottom {\n  bottom: var(--aura-space-6);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionCenterTop {\n  top: var(--aura-space-6);\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.positionBottomLeft {\n  bottom: var(--aura-space-6);\n  left: var(--aura-space-6);\n}\n\n.positionBottomRight {\n  bottom: var(--aura-space-6);\n  right: var(--aura-space-6);\n}\n\n.positionTopLeft {\n  top: var(--aura-space-6);\n  left: var(--aura-space-6);\n}\n\n.positionTopRight {\n  top: var(--aura-space-6);\n  right: var(--aura-space-6);\n}\n\n@media (max-width: 540px) {\n  .container {\n    max-width: 100%;\n    width: calc(100% - 2 * var(--aura-space-6));\n    left: var(--aura-space-6);\n    right: var(--aura-space-6);\n    transform: none;\n  }\n\n  .positionCenterBottom,\n  .positionCenterTop {\n    left: var(--aura-space-6);\n    right: var(--aura-space-6);\n  }\n}\n\n.buttonContainer {\n  display: flex;\n  flex-wrap: wrap;\n  gap: var(--aura-space-4);\n  margin-top: var(--aura-space-5);\n  justify-content: flex-end;\n}\n\n@media (max-width: 540px) {\n  .buttonContainer {\n    flex-direction: column;\n  }\n\n  .buttonContainer > :global(button) {\n    width: 100%;\n  }\n}\n\n.categoryContainer {\n  margin-top: var(--aura-space-6);\n  max-height: 300px;\n  overflow-y: auto;\n  padding-right: 0.5rem;\n  scrollbar-width: thin;\n}\n\n.categoryContainer::-webkit-scrollbar {\n  width: 6px;\n}\n\n.categoryContainer::-webkit-scrollbar-track {\n  background: var(--aura-color-muted);\n  border-radius: var(--aura-radius-lg);\n}\n\n.categoryContainer::-webkit-scrollbar-thumb {\n  background: var(--aura-color-glass-border);\n  border-radius: var(--aura-radius-lg);\n}\n\n.categoryItem {\n  padding: var(--aura-space-3);\n  border-radius: var(--aura-radius-lg);\n  margin-bottom: var(--aura-space-3);\n  background: var(--aura-color-highlight);\n}\n\n.categoryItem:last-child {\n  margin-bottom: 0;\n}\n\n.categoryHeader {\n  display: flex;\n  align-items: center;\n  gap: var(--aura-space-3);\n  margin-bottom: var(--aura-space-2);\n}\n\n.categoryDescription {\n  margin-left: 2rem;\n  font-size: 0.875rem;\n  opacity: 0.85;\n}\n\n.cookieDetailContainer {\n  margin-top: var(--aura-space-3);\n  margin-left: 2rem;\n  padding: var(--aura-space-2);\n  font-size: 0.8rem;\n  background: var(--aura-color-muted);\n  border-radius: var(--aura-radius-md);\n}\n\n.detailsToggle {\n  background: transparent;\n  border: none;\n  color: inherit;\n  text-decoration: underline;\n  cursor: pointer;\n  padding: 0;\n  font-size: 0.8rem;\n  opacity: 0.7;\n  margin-top: var(--aura-space-2);\n  display: block;\n  margin-left: 2rem;\n}\n\n.detailsToggle:hover {\n  opacity: 1;\n}\n", "'use client';\nimport React from 'react';\n// PerformantGlass removed - using OptimizedGlass\nimport { OptimizedGlassCore as OptimizedGlass, OptimizedGlassProps } from '../../primitives/OptimizedGlassCore';\nimport { cn } from '@/lib/utils';\n\nexport interface GlassPanelProps extends Omit<OptimizedGlassProps, 'variant' | 'elevation'> {\n  /**\n   * Panel variant style\n   */\n  variant?: 'default' | 'primary' | 'success' | 'warning' | 'error';\n  /**\n   * Panel elevation\n   */\n  elevation?: 'level1' | 'level2' | 'level3' | 'level4';\n  /**\n   * Whether the panel is interactive\n   */\n  interactive?: boolean;\n  /**\n   * Panel padding\n   */\n  padding?: 'none' | 'sm' | 'md' | 'lg' | 'xl';\n  /**\n   * Panel content\n   */\n  children: React.ReactNode;\n}\n\n/**\n * GlassPanel component\n * A glassmorphism panel using the proper PerformantGlass primitive\n */\nconst GlassPanel = React.forwardRef<HTMLDivElement, GlassPanelProps>(\n  ({\n    className,\n    elevation = 'level1',\n    variant = 'default',\n    interactive = false,\n    padding = 'md',\n    children,\n    ...props\n  }, ref) => {\n    const getGlassIntent = (): 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' => {\n      switch (variant) {\n        case 'primary':\n          return 'primary';\n        case 'success':\n          return 'success';\n        case 'warning':\n          return 'warning';\n        case 'error':\n          return 'danger';\n        default:\n          return 'neutral';\n      }\n    };\n\n    return (\n      <OptimizedGlass data-glass-component\n        ref={ref}\n        elevation={elevation}\n        intent={getGlassIntent()}\n        interactive={interactive}\n        className={cn(\n          'relative overflow-hidden transition-all duration-200',\n          // Map padding to className since OptimizedGlass doesn't have padding prop\n          padding === 'none' ? 'glass-p-0' :\n            padding === 'sm' ? 'glass-p-2' :\n              padding === 'md' ? 'glass-p-4' :\n                padding === 'lg' ? 'glass-p-6' :\n                  padding === 'xl' ? 'p-8' : 'glass-p-4',\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </OptimizedGlass>\n    );\n  }\n);\n\nGlassPanel.displayName = 'GlassPanel';\n\nexport { GlassPanel };", "'use client';\nimport React from 'react';\nimport {\n  GlassAccordion as BaseGlassAccordion,\n  type GlassAccordionProps,\n  type AccordionItem,\n} from '../data-display/GlassAccordion';\n\nexport type { GlassAccordionProps as AccordionProps, AccordionItem };\n\nexport const GlassAccordionUI: React.FC<GlassAccordionProps> = (props) => (\n  <BaseGlassAccordion {...props} />\n);\n\nexport { BaseGlassAccordion as GlassAccordion, BaseGlassAccordion as Accordion };\n\nexport default GlassAccordionUI;\n", "'use client';\nimport React from 'react';\nimport {\n  GlassCheckbox as BaseGlassCheckbox,\n  type GlassCheckboxProps,\n} from '../input/GlassCheckbox';\n\nexport type { GlassCheckboxProps as CheckboxProps };\nexport { BaseGlassCheckbox as GlassCheckbox, BaseGlassCheckbox as Checkbox };\n\nexport const GlassCheckboxUI: React.FC<GlassCheckboxProps> = (props) => (\n  <BaseGlassCheckbox {...props} />\n);\n\nexport default GlassCheckboxUI;\n", "'use client';\nimport React from \"react\";\n\nimport { forwardRef, AnchorHTMLAttributes } from \"react\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { createGlassStyle } from \"../../utils/createGlassStyle\";\n\ninterface GlassLinkButtonProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n  variant?: \"primary\" | \"secondary\" | \"ghost\";\n  size?: \"sm\" | \"md\" | \"lg\";\n  intent?: \"primary\" | \"neutral\" | \"success\" | \"warning\";\n  noise?: boolean;\n  children: React.ReactNode;\n}\n\nconst GlassLinkButton = forwardRef<HTMLAnchorElement, GlassLinkButtonProps>(\n  (\n    {\n      className,\n      variant = \"primary\",\n      size = \"md\",\n      intent = \"primary\",\n      noise = false,\n      children,\n      ...props\n    },\n    ref\n  ) => {\n    return (\n      <a\n        data-glass-component\n        ref={ref}\n        className={cn(\n          \"group relative inline-flex items-center justify-center rounded-glass font-semibold transition-all duration-200 ease-out hover:glass-text-primary\",\n          \"focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/60 focus-visible:ring-offset-2\",\n          \"active:translate-y-px disabled:opacity-50 disabled:pointer-events-none isolate\",\n\n          {\n            \"h-8 px-3 text-sm touch-target\": size === \"sm\",\n            \"h-10 px-4 text-sm touch-target\": size === \"md\",\n            \"h-12 px-6 text-base touch-target\": size === \"lg\",\n          },\n\n          {\n            \"glass-text-primary bg-gradient-to-r from-blue-500/80 to-purple-500/80 border border-white/20 glass-backdrop-blur-md-medium shadow-glass\":\n              variant === \"primary\",\n            \"hover:shadow-glass-strong sm:glass-hover--translate-y-0-5\":\n              variant === \"primary\",\n\n            \"glass-foundation-complete glass-text-primary border border-white/14 glass-backdrop-blur-md-subtle\":\n              variant === \"secondary\",\n            \"hover:bg-white/10 hover:border-white/25\": variant === \"secondary\",\n\n            \"bg-transparent glass-text-primary/88 border border-white/10\":\n              variant === \"ghost\",\n            \"hover:bg-white/5 hover:glass-text-primary hover:border-white/20\":\n              variant === \"ghost\",\n          },\n\n          variant !== \"primary\" &&\n            intent === \"primary\" &&\n            \"bg-gradient-to-r from-cyan-400/15 to-purple-500/15\",\n          variant !== \"primary\" &&\n            intent === \"success\" &&\n            \"bg-gradient-to-r from-emerald-400/10 to-cyan-400/10\",\n          variant !== \"primary\" &&\n            intent === \"warning\" &&\n            \"bg-gradient-to-r from-amber-400/10 to-orange-500/10\",\n\n          className\n        )}\n        {...props}\n      >\n        {(variant === \"primary\" || variant === \"secondary\") && (\n          <div\n            aria-hidden\n            className='glass-pointer-events-none glass-absolute glass-inset-0'\n            style={{\n              borderRadius: \"inherit\",\n              padding: \"1px\",\n              ...createGlassStyle({ variant: \"default\", elev: 3 }),\n              mask: \"linear-gradient(var(--glass-black) 0 0) content-box, linear-gradient(var(--glass-black) 0 0)\",\n              WebkitMask:\n                \"linear-gradient(var(--glass-black) 0 0) content-box, linear-gradient(var(--glass-black) 0 0)\",\n              WebkitMaskComposite: \"xor\",\n              maskComposite: \"exclude\",\n              opacity: 0.8,\n            }}\n          />\n        )}\n\n        {variant === \"primary\" && (\n          <div\n            aria-hidden\n            className='glass-pointer-events-none glass-absolute glass-inset-0 glass-opacity-0 glass-hover-opacity-100 glass-transition-opacity glass-duration-200'\n            style={{\n              borderRadius: \"inherit\",\n              ...createGlassStyle({ variant: \"default\", elev: 3 }),\n            }}\n          />\n        )}\n\n        <span className='glass-relative glass-z-10 glass-flex glass-items-center glass-gap-2 glass-text-primary glass-group-hover:text-indigo-50'>\n          {children}\n        </span>\n      </a>\n    );\n  }\n);\n\nGlassLinkButton.displayName = \"GlassLinkButton\";\n\nexport { GlassLinkButton };\nexport type { GlassLinkButtonProps };", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport { cn } from \"@/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\nimport { useState, useRef, useEffect } from \"react\";\nimport useAutoTextContrast from \"../../hooks/useAutoTextContrast\";\nimport { ArrowRight, Zap, Target, Sparkles } from \"@/icons\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\n\n// Deterministic seed-based random generator for consistent server/client rendering\nfunction seededRandom(seed: number) {\n  const x = Math.sin(seed) * 10000;\n  return x - Math.floor(x);\n}\n\ninterface ComparisonData {\n  category: string;\n  auraone: {\n    value: string;\n    description: string;\n    color: string;\n  };\n  competitor: {\n    value: string;\n    description: string;\n    color: string;\n  };\n}\n\nconst COMPARISON_DATA: ComparisonData[] = [\n  {\n    category: \"Performance\",\n    auraone: {\n      value: \"10,000x\",\n      description: \"Quantum-accelerated training\",\n      color: \"from-cyan-400 to-blue-500\",\n    },\n    competitor: {\n      value: \"1x\",\n      description: \"Traditional CPU/GPU training\",\n      color: \"from-gray-400 to-gray-600\",\n    },\n  },\n  {\n    category: \"Safety\",\n    auraone: {\n      value: \"100%\",\n      description: \"Formal verification built-in\",\n      color: \"from-green-400 to-emerald-500\",\n    },\n    competitor: {\n      value: \"~30%\",\n      description: \"Manual testing only\",\n      color: \"from-red-400 to-red-600\",\n    },\n  },\n  {\n    category: \"Time to Deploy\",\n    auraone: {\n      value: \"1 Hour\",\n      description: \"One-click production deploy\",\n      color: \"from-purple-400 to-pink-500\",\n    },\n    competitor: {\n      value: \"6 Months\",\n      description: \"Complex integration required\",\n      color: \"from-yellow-600 to-orange-600\",\n    },\n  },\n  {\n    category: \"Compliance\",\n    auraone: {\n      value: \"ISO 26262, DO-178C, FDA\",\n      description: \"Automatic certification\",\n      color: \"from-indigo-400 to-purple-500\",\n    },\n    competitor: {\n      value: \"None\",\n      description: \"Manual compliance process\",\n      color: \"from-gray-500 to-gray-700\",\n    },\n  },\n];\n\nexport function GlassPrismComparison({\n  className,\n  \"data-testid\": dataTestId,\n  ...props\n}: React.HTMLAttributes<HTMLElement> = {}) {\n  const prefersReducedMotion = useReducedMotion();\n  const sectionRef = useRef<HTMLElement>(null);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [currentComparison, setCurrentComparison] = useState(0);\n  const [isHovering, setIsHovering] = useState(false);\n  const [isCompact, setIsCompact] = useState(false);\n  const [prismPosition, setPrismPosition] = useState(50); // Center position\n\n  const mouseX = useMotionValue(0);\n  const mouseY = useMotionValue(0);\n\n  const springConfig = ANIMATION.SPRING.stiff;\n  const x = useSpring(mouseX, springConfig);\n  const y = useSpring(mouseY, springConfig);\n\n  // Use default values to ensure motion values are always valid\n  const rotateX = useTransform(y, [-300, 300], [30, -30], { clamp: true });\n  const rotateY = useTransform(x, [-300, 300], [-30, 30], { clamp: true });\n\n  // Ensure motion values are always numbers (fallback for test environments)\n  const safeRotateX = prefersReducedMotion ? 0 : (rotateX.get() ?? 0);\n  const safeRotateY = prefersReducedMotion ? 0 : (rotateY.get() ?? 0);\n\n  useAutoTextContrast(containerRef, { threshold: 0.55, observe: true });\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setCurrentComparison(\n        (prev) => (prev + 1) % (COMPARISON_DATA?.length || 0)\n      );\n    }, ANIMATION.DURATION.slower * 7);\n\n    const prismStyle = {\n      left: `${prismPosition}%`,\n      transform: \"translateX(-50%)\",\n      ...(prefersReducedMotion\n        ? { rotateX: 0, rotateY: 0 }\n        : {\n            rotateX:\n              typeof rotateX === \"number\" ? rotateX : (rotateX?.get?.() ?? 0),\n            rotateY:\n              typeof rotateY === \"number\" ? rotateY : (rotateY?.get?.() ?? 0),\n          }),\n    } as React.CSSProperties;\n\n    return () => clearInterval(interval);\n  }, []);\n\n  useEffect(() => {\n    const element = sectionRef.current;\n    if (!element || typeof ResizeObserver === \"undefined\") return;\n\n    const updateCompactState = () => {\n      const rect = element.getBoundingClientRect();\n      setIsCompact(rect.width < 700 || rect.height < 560);\n    };\n\n    updateCompactState();\n    const observer = new ResizeObserver(updateCompactState);\n    observer.observe(element);\n\n    return () => observer.disconnect();\n  }, []);\n\n  const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n    if (containerRef.current) {\n      const rect = containerRef.current.getBoundingClientRect();\n      const centerX = rect.width / 2;\n      const centerY = rect.height / 2;\n      mouseX.set(e.clientX - rect.left - centerX);\n      mouseY.set(e.clientY - rect.top - centerY);\n\n      // Update prism position based on mouse\n      const newPosition = ((e.clientX - rect.left) / rect.width) * 100;\n      setPrismPosition(Math.max(10, Math.min(90, newPosition)));\n    }\n  };\n\n  const currentData = COMPARISON_DATA[currentComparison];\n\n  const prismStyle = {\n    left: `${prismPosition}%`,\n    transform: \"translateX(-50%)\",\n    ...(prefersReducedMotion\n      ? { rotateX: 0, rotateY: 0 }\n      : {\n          rotateX:\n            typeof rotateX === \"number\" ? rotateX : (rotateX?.get?.() ?? 0),\n          rotateY:\n            typeof rotateY === \"number\" ? rotateY : (rotateY?.get?.() ?? 0),\n        }),\n  } as React.CSSProperties;\n\n  if (isCompact) {\n    return (\n      <section\n        ref={sectionRef}\n        className={cn(\n          \"glass-relative glass-overflow-hidden glass-radius-2xl glass-border glass-border-white/20 glass-contrast-guard\",\n          className\n        )}\n        style={{\n          ...createGlassStyle({ intent: \"neutral\", elevation: \"level2\" }),\n          width: \"100%\",\n          minHeight: 220,\n          padding: 16,\n        }}\n        data-testid={dataTestId}\n        {...props}\n      >\n        <div\n          className=\"glass-relative glass-h-full glass-min-w-0\"\n          style={{ display: \"grid\", gap: 14 }}\n        >\n          <div style={{ display: \"grid\", gap: 4 }}>\n            <div\n              style={{\n                fontSize: \"0.68rem\",\n                letterSpacing: \"0.16em\",\n                textTransform: \"uppercase\",\n                color: \"rgba(124, 211, 255, 0.82)\",\n              }}\n            >\n              Prism comparison\n            </div>\n            <div\n              style={{\n                fontSize: \"1.2rem\",\n                lineHeight: 1.05,\n                fontWeight: 800,\n                color: \"rgba(248, 250, 252, 0.96)\",\n              }}\n            >\n              {currentData.category}\n            </div>\n          </div>\n\n          <div\n            style={{\n              position: \"relative\",\n              display: \"grid\",\n              gridTemplateColumns: \"1fr 1fr\",\n              minHeight: 118,\n              overflow: \"hidden\",\n              borderRadius: 16,\n              border: \"1px solid rgba(148, 163, 184, 0.22)\",\n              background:\n                \"color-mix(in srgb, var(--glass-surface) 68%, transparent)\",\n            }}\n          >\n            <div\n              style={{\n                display: \"grid\",\n                alignContent: \"center\",\n                gap: 4,\n                padding: \"0.8rem\",\n                background:\n                  \"color-mix(in srgb, var(--glass-text-primary) 8%, transparent)\",\n              }}\n            >\n              <span\n                style={{\n                  fontSize: \"1.25rem\",\n                  lineHeight: 1,\n                  fontWeight: 820,\n                  color: \"rgba(203, 213, 225, 0.92)\",\n                }}\n              >\n                {currentData.competitor.value}\n              </span>\n              <span\n                style={{\n                  fontSize: \"0.68rem\",\n                  color: \"rgba(203, 213, 225, 0.66)\",\n                  lineHeight: 1.35,\n                }}\n              >\n                {currentData.competitor.description}\n              </span>\n            </div>\n            <div\n              style={{\n                display: \"grid\",\n                alignContent: \"center\",\n                gap: 4,\n                padding: \"0.8rem\",\n                background:\n                  \"linear-gradient(135deg, color-mix(in srgb, hsl(var(--glass-color-primary)) 14%, transparent), color-mix(in srgb, var(--glass-color-secondary, hsl(var(--glass-color-primary))) 16%, transparent))\",\n              }}\n            >\n              <span\n                style={{\n                  fontSize: \"1.25rem\",\n                  lineHeight: 1,\n                  fontWeight: 820,\n                  color: \"rgba(125, 211, 252, 0.98)\",\n                }}\n              >\n                {currentData.auraone.value}\n              </span>\n              <span\n                style={{\n                  fontSize: \"0.68rem\",\n                  color: \"rgba(226, 232, 240, 0.78)\",\n                  lineHeight: 1.35,\n                }}\n              >\n                {currentData.auraone.description}\n              </span>\n            </div>\n            <div\n              aria-hidden\n              style={{\n                position: \"absolute\",\n                top: 0,\n                bottom: 0,\n                left: \"50%\",\n                width: 2,\n                transform: \"translateX(-50%)\",\n                background:\n                  \"linear-gradient(180deg, transparent, hsl(var(--glass-color-primary)), var(--glass-color-secondary), transparent)\",\n                boxShadow: \"0 0 24px rgba(125, 211, 252, 0.6)\",\n              }}\n            />\n          </div>\n        </div>\n      </section>\n    );\n  }\n\n  return (\n    <section\n      ref={sectionRef}\n      className={cn(\n        \"relative overflow-hidden glass-gradient-primary cv-auto\",\n        isCompact ? \"glass-py-4\" : \"glass-py-32\",\n        className\n      )}\n      data-testid={dataTestId}\n      {...props}\n    >\n      <div\n        className={cn(\"container-responsive\", isCompact && \"glass-px-3\")}\n        style={isCompact ? { maxWidth: \"100%\" } : undefined}\n      >\n        {/* Section Header */}\n        <motion.div\n          initial={{ opacity: 0, y: 50 }}\n          whileInView={{ opacity: 1, y: 0 }}\n          viewport={{ once: true }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: ANIMATION.DURATION.slower / 1000 }\n          }\n          className={cn(\n            \"glass-text-center\",\n            isCompact ? \"glass-mb-3\" : \"glass-mb-20\"\n          )}\n        >\n          <h2\n            className={cn(\n              \"glass-font-black\",\n              isCompact\n                ? \"glass-mb-2\"\n                : \"glass-text-5xl glass-md-text-7xl glass-mb-8\"\n            )}\n            style={\n              isCompact\n                ? {\n                    fontSize: \"clamp(1.6rem, 10vw, 2.65rem)\",\n                    lineHeight: 0.92,\n                    letterSpacing: 0,\n                  }\n                : undefined\n            }\n          >\n            <motion.span\n              className=\"glass-inline-glass-block glass-relative\"\n              ref={(el) => {\n                if (!el) return;\n                el.style.background =\n                  \"linear-gradient(45deg, hsl(var(--glass-color-info)), var(--glass-color-secondary), hsl(var(--glass-color-warning)), hsl(var(--glass-color-info)))\";\n                el.style.backgroundSize = \"400% 400%\";\n                (el.style as any).webkitBackgroundClip = \"text\";\n                el.style.backgroundClip = \"text\";\n                (el.style as any).webkitTextFillColor = \"transparent\";\n                el.style.color = \"transparent\";\n              }}\n              animate={{\n                backgroundPosition: [\"0% 50%\", \"100% 50%\", \"0% 50%\"],\n              }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : {\n                      duration: (ANIMATION.DURATION.slower * 6) / 1000,\n                      repeat: Infinity,\n                      repeatType: \"loop\",\n                      ease: \"easeInOut\",\n                    }\n              }\n            >\n              THE IMPOSSIBLE\n              {/* Backup text for better visibility */}\n              <span className=\"glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-purple-400 glass-gradient-primary glass-bg-clip-text glass-text-transparent glass-opacity-90\">\n                THE IMPOSSIBLE\n              </span>\n            </motion.span>\n            <br />\n            <span className=\"glass-text-primary\">DIFFERENCE</span>\n          </h2>\n\n          {!isCompact && (\n            <motion.p\n              className=\"glass-text-2xl glass-text-primary-opacity-70 glass-max-w-3xl glass-mx-auto glass-leading-relaxed\"\n              animate={prefersReducedMotion ? {} : { opacity: [0.7, 1, 0.7] }}\n              transition={\n                prefersReducedMotion\n                  ? { duration: 0 }\n                  : { duration: 3, repeat: Infinity }\n              }\n            >\n              Move the prism to reveal how{\" \"}\n              <span className=\"glass-text-primary glass-font-bold\">\n                AuraOne transcends\n              </span>{\" \"}\n              traditional limitations\n            </motion.p>\n          )}\n        </motion.div>\n\n        {/* Interactive Prism Comparison */}\n        <motion.div\n          ref={containerRef}\n          className={cn(\n            \"glass-relative glass-max-w-7xl glass-mx-auto glass-foundation-complete glass-backdrop-blur-md2xl glass-radius-3xl glass-border glass-border-white/20 glass-overflow-hidden glass-cursor-none glass-contrast-guard\",\n            isCompact ? \"glass-h-40\" : \"glass-h-96\"\n          )}\n          onMouseMove={handleMouseMove}\n          onMouseEnter={() => setIsHovering(true)}\n          onMouseLeave={() => setIsHovering(false)}\n          style={{\n            perspective: 1000,\n            background: \"transparent\",\n          }}\n        >\n          {/* Background Pattern */}\n          <div className=\"glass-absolute glass-inset-0 glass-opacity-10\">\n            <div\n              className=\"glass-absolute glass-inset-0\"\n              ref={(el) => {\n                if (!el) return;\n                el.style.backgroundImage =\n                  \"linear-gradient(color-mix(in srgb, hsl(var(--glass-color-info)) 10%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--glass-color-secondary) 10%, transparent) 1px, transparent 1px)\";\n                el.style.backgroundSize = \"30px 30px\";\n              }}\n            />\n          </div>\n\n          {/* Competitor Side (Left) */}\n          <motion.div\n            className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n            style={{\n              clipPath: `polygon(0% 0%, ${prismPosition || 50}% 0%, ${prismPosition || 50}% 100%, 0% 100%)`,\n            }}\n          >\n            <div\n              className={cn(\n                \"glass-text-center\",\n                isCompact ? \"glass-p-3\" : \"glass-p-8\"\n              )}\n            >\n              <div className={isCompact ? \"glass-mb-2\" : \"glass-mb-6\"}>\n                <motion.div\n                  className={cn(\n                    \"glass-font-black\",\n                    isCompact\n                      ? \"glass-mb-1\"\n                      : \"glass-text-6xl glass-md-text-8xl glass-mb-4\"\n                  )}\n                  style={\n                    isCompact\n                      ? {\n                          fontSize: \"clamp(1.45rem, 10vw, 2.4rem)\",\n                          lineHeight: 0.95,\n                          letterSpacing: 0,\n                        }\n                      : undefined\n                  }\n                  animate={\n                    prefersReducedMotion ? {} : { opacity: [0.6, 0.8, 0.6] }\n                  }\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : {\n                          duration: (ANIMATION.DURATION.slower * 3) / 1000,\n                          repeat: Infinity,\n                        }\n                  }\n                >\n                  <span\n                    className={`bg-gradient-to-r ${currentData.competitor.color} bg-clip-text text-transparent`}\n                  >\n                    {currentData.competitor.value}\n                  </span>\n                </motion.div>\n                <p\n                  className={cn(\n                    \"glass-text-primary-glass-opacity-60\",\n                    isCompact\n                      ? \"glass-text-sm glass-mb-1\"\n                      : \"glass-text-xl glass-mb-2\"\n                  )}\n                >\n                  Competitors\n                </p>\n                <p className=\"glass-text-primary-glass-opacity-40 glass-text-xs\">\n                  {currentData.competitor.description}\n                </p>\n              </div>\n\n              {!isCompact && (\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-gap-4 glass-text-primary-glass-opacity-30\">\n                  <Target className=\"glass-w-6 glass-h-6\" />\n                  <span className=\"glass-text-lg\">Limited Capabilities</span>\n                </div>\n              )}\n            </div>\n          </motion.div>\n\n          {/* AuraOne Side (Right) */}\n          <motion.div\n            className=\"glass-absolute glass-inset-0 glass-flex glass-items-center glass-justify-center\"\n            style={{\n              clipPath: `polygon(${prismPosition || 50}% 0%, 100% 0%, 100% 100%, ${prismPosition || 50}% 100%)`,\n            }}\n          >\n            <div\n              className={cn(\n                \"glass-text-center\",\n                isCompact ? \"glass-p-3\" : \"glass-p-8\"\n              )}\n            >\n              <div className={isCompact ? \"glass-mb-2\" : \"glass-mb-6\"}>\n                <motion.div\n                  className={cn(\n                    \"glass-font-black glass-relative\",\n                    isCompact\n                      ? \"glass-mb-1\"\n                      : \"glass-text-6xl glass-md-text-8xl glass-mb-4\"\n                  )}\n                  style={\n                    isCompact\n                      ? {\n                          fontSize: \"clamp(1.45rem, 10vw, 2.4rem)\",\n                          lineHeight: 0.95,\n                          letterSpacing: 0,\n                        }\n                      : undefined\n                  }\n                  animate={\n                    prefersReducedMotion\n                      ? {}\n                      : {\n                          scale: [1, 1.05, 1],\n                          textShadow: [\n                            \"0 0 20px currentColor\",\n                            \"0 0 40px currentColor\",\n                            \"0 0 20px currentColor\",\n                          ],\n                        }\n                  }\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : {\n                          duration: (ANIMATION.DURATION.slower * 3) / 1000,\n                          repeat: Infinity,\n                        }\n                  }\n                >\n                  <span\n                    className={`bg-gradient-to-r ${currentData.auraone.color} bg-clip-text text-transparent`}\n                  >\n                    {currentData.auraone.value}\n                  </span>\n\n                  {/* Sparkle effects */}\n                  <motion.div\n                    className=\"glass-absolute glass--top-4 glass--right-4\"\n                    animate={\n                      prefersReducedMotion\n                        ? {}\n                        : {\n                            rotate: 360,\n                            scale: [0, 1, 0],\n                          }\n                    }\n                    transition={{\n                      rotate: {\n                        duration: (ANIMATION.DURATION.slower * 4) / 1000,\n                        repeat: Infinity,\n                        repeatType: \"loop\",\n                        ease: \"linear\",\n                      },\n                      scale: {\n                        duration: 2,\n                        repeat: Infinity,\n                        repeatType: \"loop\",\n                        repeatDelay: 1,\n                      },\n                    }}\n                  >\n                    <Sparkles\n                      className={cn(\n                        isCompact\n                          ? \"glass-w-4 glass-h-4\"\n                          : \"glass-w-8 glass-h-8\",\n                        \"glass-text-primary\"\n                      )}\n                    />\n                  </motion.div>\n                </motion.div>\n                <p\n                  className={cn(\n                    \"glass-text-primary glass-font-bold\",\n                    isCompact\n                      ? \"glass-text-sm glass-mb-1\"\n                      : \"glass-text-xl glass-mb-2\"\n                  )}\n                >\n                  AuraOne\n                </p>\n                <p className=\"glass-text-primary-glass-opacity-80 glass-text-xs\">\n                  {currentData.auraone.description}\n                </p>\n              </div>\n\n              {!isCompact && (\n                <motion.div\n                  className=\"glass-flex glass-items-center glass-justify-center glass-gap-4 glass-text-primary\"\n                  animate={\n                    prefersReducedMotion ? {} : { opacity: [0.8, 1, 0.8] }\n                  }\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : { duration: 1.5, repeat: Infinity }\n                  }\n                >\n                  <Zap className=\"glass-w-6 glass-h-6\" />\n                  <span className=\"glass-text-lg glass-font-bold\">\n                    Beyond Possible\n                  </span>\n                </motion.div>\n              )}\n            </div>\n          </motion.div>\n\n          {/* Glass Prism */}\n          <motion.div\n            className=\"glass-absolute glass-top-0 glass-bottom-0 glass-w-1 glass-pointer-events-none\"\n            style={{ ...prismStyle }}\n          >\n            {/* Prism body */}\n            <div className=\"glass-relative glass-w-full glass-h-full\">\n              <motion.div\n                className=\"glass-absolute glass-inset-0 glass-gradient-primary glass-gradient-primary glass-via-white-glass-opacity-40 glass-gradient-primary glass-backdrop-blur-md glass-border-l glass-border-r glass-border-white/60 glass-contrast-guard\"\n                animate={\n                  prefersReducedMotion\n                    ? {}\n                    : {\n                        background: [\n                          \"linear-gradient(90deg, transparent, rgba(0,245,255,0.4), transparent)\",\n                          \"linear-gradient(90deg, transparent, rgba(255,0,245,0.4), transparent)\",\n                          \"linear-gradient(90deg, transparent, rgba(245,255,0,0.4), transparent)\",\n                          \"linear-gradient(90deg, transparent, rgba(0,245,255,0.4), transparent)\",\n                        ],\n                      }\n                }\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : { duration: 3, repeat: Infinity }\n                }\n              />\n\n              {/* Prism refraction effects */}\n              {Array.from({ length: 5 }).map((_: any, i: any) => (\n                <motion.div\n                  key={i}\n                  className=\"glass-absolute glass-w-20 glass-h-0-5 glass-gradient-primary glass-gradient-primary glass-via-white-glass-opacity-60 glass-gradient-primary\"\n                  style={{\n                    top: `${20 + i * 15}%`,\n                    left: `-${40 + i * 5}px`,\n                    transform: `rotate(${-30 + i * 15}deg)`,\n                  }}\n                  animate={\n                    prefersReducedMotion\n                      ? {}\n                      : {\n                          opacity: [0, 0.8, 0],\n                          scaleX: [0, 1, 0],\n                        }\n                  }\n                  transition={\n                    prefersReducedMotion\n                      ? { duration: 0 }\n                      : {\n                          duration: 2,\n                          repeat: Infinity,\n                          repeatType: \"loop\",\n                          delay: i * 0.3,\n                        }\n                  }\n                />\n              ))}\n\n              {/* Rainbow spectrum effect */}\n              <motion.div\n                className=\"glass-absolute glass-top-1/2 glass--right-20 glass-w-32 glass-h-1 glass-gradient-primary glass-gradient-primary glass-via-yellow-400 glass-via-green-400 glass-via-blue-400 glass-gradient-primary\"\n                style={{\n                  transform: \"translateY(-50%) rotate(-15deg)\",\n                }}\n                animate={\n                  prefersReducedMotion\n                    ? {}\n                    : {\n                        opacity: isHovering ? 0.8 : 0.4,\n                        scaleX: isHovering ? 1.2 : 1,\n                      }\n                }\n                transition={\n                  prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }\n                }\n              />\n            </div>\n          </motion.div>\n\n          {/* Custom cursor */}\n          <motion.div\n            className=\"glass-absolute glass-pointer-events-none glass-z-50\"\n            style={{\n              x: mouseX,\n              y: mouseY,\n              left: \"50%\",\n              top: \"50%\",\n            }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    scale: isHovering ? 1.5 : 0,\n                    rotate: 360,\n                  }\n            }\n            transition={{\n              scale: { duration: 0.2 },\n              rotate: {\n                duration: 2,\n                repeat: Infinity,\n                repeatType: \"loop\",\n                ease: \"linear\",\n              },\n            }}\n          >\n            <div className=\"glass-w-8 glass-h-8 glass-radius-full glass-surface-subtle/30 glass-backdrop-blur-md glass-border glass-border-white/50 glass-flex glass-items-center glass-justify-center glass-contrast-guard\">\n              <ArrowRight className=\"glass-w-4 glass-h-4 glass-text-primary\" />\n            </div>\n          </motion.div>\n        </motion.div>\n\n        {/* Category Indicators */}\n        <motion.div\n          className={cn(\n            \"glass-flex glass-justify-center\",\n            isCompact\n              ? \"glass-gap-2 glass-mt-3 glass-flex-wrap\"\n              : \"glass-gap-6 glass-mt-12\"\n          )}\n          initial={{ opacity: 0, y: 30 }}\n          whileInView={{ opacity: 1, y: 0 }}\n          viewport={{ once: true }}\n          transition={\n            prefersReducedMotion\n              ? { duration: 0 }\n              : { duration: 0.8, delay: 0.5 }\n          }\n        >\n          {COMPARISON_DATA.map((data, index) => (\n            <motion.button\n              key={index}\n              onClick={(e) => setCurrentComparison(index)}\n              className={`${isCompact ? \"glass-px-3 glass-py-1 glass-text-xs\" : \"glass-px-6 glass-py-3\"} glass-radius-full border-2 transition-all duration-300 ${\n                currentComparison === index\n                  ? \"glass-border glass-surface-primary/20 glass-text-primary\"\n                  : \"border-white/30 glass-text-primary/60 hover:border-white/50 hover:glass-text-primary/80\"\n              }`}\n              whileHover={{ scale: 1.05 }}\n              whileTap={{ scale: 0.95 }}\n            >\n              <span className=\"glass-font-medium\">{data?.category}</span>\n            </motion.button>\n          ))}\n        </motion.div>\n\n        {/* Instruction Text */}\n        {!isCompact && (\n          <motion.div\n            className=\"glass-text-center glass-mt-12\"\n            animate={prefersReducedMotion ? {} : { opacity: [0.5, 1, 0.5] }}\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: (ANIMATION.DURATION.slower * 3) / 1000,\n                    repeat: Infinity,\n                  }\n            }\n          >\n            <p className=\"glass-text-primary-glass-opacity-50 glass-text-lg\">\n              <motion.span\n                animate={\n                  prefersReducedMotion\n                    ? {}\n                    : {\n                        color: [\n                          \"var(--glass-white)\",\n                          \"#00f5ff\",\n                          \"var(--glass-white)\",\n                        ],\n                      }\n                }\n                transition={\n                  prefersReducedMotion\n                    ? { duration: 0 }\n                    : {\n                        duration: (ANIMATION.DURATION.slower * 3) / 1000,\n                        repeat: Infinity,\n                      }\n                }\n              >\n                Move your mouse\n              </motion.span>{\" \"}\n              to control the prism and see the impossible difference\n            </p>\n          </motion.div>\n        )}\n      </div>\n\n      {/* Background Effects */}\n      <div\n        className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-overflow-hidden\"\n        data-glass-overlay=\"true\"\n      >\n        {/* Floating particles */}\n        {Array.from({ length: isCompact ? 8 : 20 }).map((_: any, i: any) => (\n          <motion.div\n            key={i}\n            className=\"glass-absolute glass-w-2 glass-h-2 glass-surface-primary/30 glass-radius-full\"\n            style={{\n              left: `${seededRandom(i * 19000) * 100}%`,\n              top: `${seededRandom(i * 20000) * 100}%`,\n            }}\n            animate={\n              prefersReducedMotion\n                ? {}\n                : {\n                    y: [0, -30, 0],\n                    opacity: [0.3, 1, 0.3],\n                    scale: [1, 1.5, 1],\n                  }\n            }\n            transition={\n              prefersReducedMotion\n                ? { duration: 0 }\n                : {\n                    duration: Math.max(3 + seededRandom(i * 21000) * 2, 0.5),\n                    repeat: Infinity,\n                    repeatType: \"loop\",\n                    delay: Math.max(seededRandom(i * 22000) * 2, 0),\n                  }\n            }\n          />\n        ))}\n      </div>\n    </section>\n  );\n}\n", "\"use client\";\nimport { useEffect } from \"react\";\n\ntype Options = {\n  threshold?: number; // 0..1 luminance threshold; below means dark bg\n  observe?: boolean; // attach observers for dynamic changes\n};\n\n// Parse rgb/rgba/hsl/hsla/hex color strings to [r,g,b,a]\nfunction parseColor(input: string): [number, number, number, number] | null {\n  if (!input) return null;\n  const s = input.trim();\n  const rgba = s.match(/^rgba?\\(([^)]+)\\)/i);\n  if (rgba) {\n    const parts = rgba[1].split(\",\").map((v: any) => v.trim());\n    const r = parseFloat(parts[0]);\n    const g = parseFloat(parts[1]);\n    const b = parseFloat(parts[2]);\n    const a = parts[3] !== undefined ? parseFloat(parts[3]) : 1;\n    return [r, g, b, isNaN(a) ? 1 : a];\n  }\n  const hsla = s.match(/^hsla?\\(([^)]+)\\)/i);\n  if (hsla) {\n    const parts = hsla[1].split(\",\").map((v: any) => v.trim().replace(\"%\", \"\"));\n    const h = parseFloat(parts[0]);\n    const ss = parseFloat(parts[1]) / 100;\n    const l = parseFloat(parts[2]) / 100;\n    const a = parts[3] !== undefined ? parseFloat(parts[3]) : 1;\n    // hsl -> rgb\n    const c = (1 - Math.abs(2 * l - 1)) * ss;\n    const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n    const m = l - c / 2;\n    let r1 = 0,\n      g1 = 0,\n      b1 = 0;\n    if (0 <= h && h < 60) {\n      r1 = c;\n      g1 = x;\n      b1 = 0;\n    } else if (60 <= h && h < 120) {\n      r1 = x;\n      g1 = c;\n      b1 = 0;\n    } else if (120 <= h && h < 180) {\n      r1 = 0;\n      g1 = c;\n      b1 = x;\n    } else if (180 <= h && h < 240) {\n      r1 = 0;\n      g1 = x;\n      b1 = c;\n    } else if (240 <= h && h < 300) {\n      r1 = x;\n      g1 = 0;\n      b1 = c;\n    } else {\n      r1 = c;\n      g1 = 0;\n      b1 = x;\n    }\n    const r = Math.round((r1 + m) * 255);\n    const g = Math.round((g1 + m) * 255);\n    const b = Math.round((b1 + m) * 255);\n    return [r, g, b, isNaN(a) ? 1 : a];\n  }\n  const hex = s.match(/^#([0-9a-f]{3,8})$/i);\n  if (hex) {\n    let v = hex[1];\n    if (v.length === 3)\n      v = v\n        .split(\"\")\n        .map((ch: any) => ch + ch)\n        .join(\"\");\n    if (v.length === 6) v += \"ff\";\n    const num = parseInt(v, 16);\n    const r = (num >> 24) & 0xff;\n    const g = (num >> 16) & 0xff;\n    const b = (num >> 8) & 0xff;\n    const a = (num & 0xff) / 255;\n    return [r, g, b, a];\n  }\n  return null;\n}\n\nfunction relativeLuminance([r, g, b, _a]: [\n  number,\n  number,\n  number,\n  number,\n]): number {\n  // sRGB \u2192 linear\n  const srgb = [r, g, b].map((v: any) => v / 255);\n  const lin = srgb.map((c: any) =>\n    c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4)\n  );\n  return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];\n}\n\nfunction extractFirstColorFromBackground(\n  bg: string\n): [number, number, number, number] | null {\n  if (!bg) return null;\n  const re = /(rgba?\\([^\\)]+\\)|hsla?\\([^\\)]+\\)|#[0-9a-fA-F]{3,8})/g;\n  const match = re.exec(bg);\n  if (match) return parseColor(match[1]);\n  return null;\n}\n\nfunction compositeColor(\n  foreground: [number, number, number, number],\n  background: [number, number, number, number]\n): [number, number, number, number] {\n  const alpha = foreground[3] + background[3] * (1 - foreground[3]);\n  if (alpha <= 0) return [0, 0, 0, 0];\n\n  return [\n    Math.round(\n      (foreground[0] * foreground[3] +\n        background[0] * background[3] * (1 - foreground[3])) /\n        alpha\n    ),\n    Math.round(\n      (foreground[1] * foreground[3] +\n        background[1] * background[3] * (1 - foreground[3])) /\n        alpha\n    ),\n    Math.round(\n      (foreground[2] * foreground[3] +\n        background[2] * background[3] * (1 - foreground[3])) /\n        alpha\n    ),\n    alpha,\n  ];\n}\n\nfunction elementSurfaceColor(\n  element: HTMLElement\n): [number, number, number, number] | null {\n  const cs = getComputedStyle(element);\n  let color = parseColor(cs.backgroundColor);\n  if (!color || color[3] === 0) {\n    color = extractFirstColorFromBackground(cs.backgroundImage);\n  }\n  return color;\n}\n\nfunction effectiveBackgroundColor(\n  element: HTMLElement\n): [number, number, number, number] | null {\n  const stack: HTMLElement[] = [];\n  let current: HTMLElement | null = element;\n\n  while (current) {\n    stack.unshift(current);\n    current = current.parentElement;\n  }\n\n  let composed: [number, number, number, number] = [0, 0, 0, 1];\n  let sawColor = false;\n\n  for (const item of stack) {\n    const color = elementSurfaceColor(item);\n    if (color && color[3] > 0) {\n      composed = compositeColor(color, composed);\n      sawColor = true;\n    }\n  }\n\n  return sawColor ? composed : null;\n}\n\nexport function useAutoTextContrast(\n  ref: React.RefObject<HTMLElement>,\n  options: Options = {}\n) {\n  const { threshold = 0.55, observe = true } = options;\n\n  useEffect(() => {\n    const el = ref.current;\n    if (!el) return;\n\n    const decide = () => {\n      const color = effectiveBackgroundColor(el);\n      if (!color) return; // bail if unknown\n      const lum = relativeLuminance(color);\n      const mode = lum < threshold ? \"dark\" : \"light\";\n      if (el.getAttribute(\"data-bg\") !== mode) {\n        el.setAttribute(\"data-bg\", mode);\n      }\n    };\n\n    decide();\n\n    if (!observe) return;\n    const ro = new ResizeObserver(() => decide());\n    ro.observe(el);\n    const mo = new MutationObserver(() => decide());\n    mo.observe(el, { attributes: true, attributeFilter: [\"style\", \"class\"] });\n    const id = window.setInterval(decide, 1000);\n    return () => {\n      ro.disconnect();\n      mo.disconnect();\n      window.clearInterval(id);\n    };\n  }, [ref, threshold, observe]);\n}\n\nexport default useAutoTextContrast;\n", "\"use client\";\nimport React from \"react\";\nimport { useReducedMotion } from \"@/hooks/useReducedMotion\";\nimport {\n  useAnimationDuration,\n  useMotionAwareAnimation,\n} from \"../../hooks/useMotionPreference\";\nimport { cn } from \"@/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"framer-motion\";\nimport { useCallback, useEffect, useRef, useState, memo } from \"react\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\n\n// Memoized icons for handle indicators to prevent unnecessary re-renders\nconst ChevronLeftIcon = memo(() => (\n  <svg className=\"glass-w-3 glass-h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n    <path\n      fillRule=\"evenodd\"\n      d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n      clipRule=\"evenodd\"\n    />\n  </svg>\n));\n\nconst ChevronRightIcon = memo(() => (\n  <svg className=\"glass-w-3 glass-h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n    <path\n      fillRule=\"evenodd\"\n      d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n      clipRule=\"evenodd\"\n    />\n  </svg>\n));\n\nconst ChevronUpIcon = memo(() => (\n  <svg className=\"glass-w-3 glass-h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n    <path\n      fillRule=\"evenodd\"\n      d=\"M14.707 12.707a1 1 0 01-1.414 0L10 9.414l-3.293 3.293a1 1 0 01-1.414-1.414l4-4a1 1 0 011.414 0l4 4a1 1 0 010 1.414z\"\n      clipRule=\"evenodd\"\n    />\n  </svg>\n));\n\nconst ChevronDownIcon = memo(() => (\n  <svg className=\"glass-w-3 glass-h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n    <path\n      fillRule=\"evenodd\"\n      d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n      clipRule=\"evenodd\"\n    />\n  </svg>\n));\n\n// Preset positions for common comparisons\nexport const SLIDER_PRESETS = {\n  BEFORE_ONLY: 0,\n  QUARTER: 25,\n  HALF: 50,\n  THREE_QUARTER: 75,\n  AFTER_ONLY: 100,\n} as const;\n\ntype PresetPosition = (typeof SLIDER_PRESETS)[keyof typeof SLIDER_PRESETS];\n\nexport interface SliderMetric {\n  label: string;\n  beforeValue: string | number;\n  afterValue: string | number;\n  unit?: string;\n  format?: \"number\" | \"percentage\" | \"currency\" | \"time\";\n  highlight?: boolean;\n}\n\nexport interface ComparisonLabels {\n  before: string;\n  after: string;\n  beforeDescription?: string;\n  afterDescription?: string;\n}\n\ninterface GlassWipeSliderProps\n  extends Omit<\n    React.HTMLAttributes<HTMLDivElement>,\n    keyof {\n      beforeContent: React.ReactNode;\n      afterContent: React.ReactNode;\n      initialPosition?: number;\n      orientation?: \"horizontal\" | \"vertical\";\n      enableSnapping?: boolean;\n      snapThreshold?: number;\n      enableMomentum?: boolean;\n      momentumMultiplier?: number;\n      debounceMs?: number;\n      handleSize?: \"sm\" | \"md\" | \"lg\";\n      showLabels?: boolean;\n      showProgress?: boolean;\n      showMetrics?: boolean;\n      labels?: ComparisonLabels;\n      metrics?: SliderMetric[];\n      trackStyle?: \"default\" | \"minimal\" | \"bold\";\n      gradientOverlay?: boolean;\n      height?: string | number;\n      minHeight?: string | number;\n      compact?: boolean;\n      contained?: boolean;\n      preview?: boolean;\n      maxHeight?: string | number;\n      maxWidth?: string | number;\n      density?: \"compact\" | \"comfortable\" | \"spacious\";\n      onPositionChange?: (position: number) => void;\n      onSnapToPreset?: (preset: PresetPosition) => void;\n      onDragStart?: () => void;\n      onDragEnd?: () => void;\n    }\n  > {\n  // Content\n  beforeContent: React.ReactNode;\n  afterContent: React.ReactNode;\n\n  // Configuration\n  initialPosition?: number; // 0-100\n  orientation?: \"horizontal\" | \"vertical\";\n\n  // Behavior\n  enableSnapping?: boolean;\n  snapThreshold?: number; // Distance to snap to presets (default: 5)\n  enableMomentum?: boolean;\n  momentumMultiplier?: number;\n  debounceMs?: number;\n\n  // Visual customization\n  handleSize?: \"sm\" | \"md\" | \"lg\";\n  showLabels?: boolean;\n  showProgress?: boolean;\n  showMetrics?: boolean;\n  labels?: ComparisonLabels;\n  metrics?: SliderMetric[];\n\n  // Track styling\n  trackStyle?: \"default\" | \"minimal\" | \"bold\";\n  gradientOverlay?: boolean;\n\n  // Layout\n  height?: string | number;\n  minHeight?: string | number;\n  /** Compact density for constrained cards, drawers, and documentation previews. */\n  compact?: boolean;\n  /** Keep the slider inside a bounded local surface. */\n  contained?: boolean;\n  /** Alias for compact preview rendering. */\n  preview?: boolean;\n  /** Maximum rendered height when contained or compact. */\n  maxHeight?: string | number;\n  /** Maximum rendered width when contained or compact. */\n  maxWidth?: string | number;\n  /** Optional density override for embedded surfaces. */\n  density?: \"compact\" | \"comfortable\" | \"spacious\";\n\n  // Callbacks\n  onPositionChange?: (position: number) => void;\n  onSnapToPreset?: (preset: PresetPosition) => void;\n  onDragStart?: () => void;\n  onDragEnd?: () => void;\n}\n\nconst GlassWipeSliderComponent = ({\n  beforeContent,\n  afterContent,\n  className,\n  initialPosition = 50,\n  orientation = \"horizontal\",\n  enableSnapping = true,\n  snapThreshold = 5,\n  enableMomentum = true,\n  momentumMultiplier = 0.3,\n  debounceMs = 16,\n  handleSize = \"md\",\n  showLabels = true,\n  showProgress = true,\n  showMetrics = false,\n  labels = { before: \"Before\", after: \"After\" },\n  metrics = [],\n  trackStyle = \"default\",\n  gradientOverlay = true,\n  height = \"24rem\", // h-96\n  minHeight,\n  compact = false,\n  contained = false,\n  preview = false,\n  maxHeight,\n  maxWidth,\n  density = \"comfortable\",\n  onPositionChange,\n  onSnapToPreset,\n  onDragStart,\n  onDragEnd,\n  ...props\n}: GlassWipeSliderProps) => {\n  // Separate HTML attributes that should go to the root container\n  const {\n    \"aria-label\": ariaLabel,\n    \"aria-describedby\": ariaDescribedBy,\n    \"aria-expanded\": ariaExpanded,\n    \"data-testid\": dataTestId,\n    ...containerProps\n  } = props;\n  // Motion-aware hooks\n  const { getAnimationProps, getTransition } = useMotionAwareAnimation();\n  const { duration } = useAnimationDuration(200);\n\n  // State management\n  const [position, setPosition] = useState(initialPosition);\n  const [isDragging, setIsDragging] = useState(false);\n  const [isHovered, setIsHovered] = useState(false);\n  const [isFocused, setIsFocused] = useState(false);\n  const [velocity, setVelocity] = useState(0);\n\n  // Refs\n  const containerRef = useRef<HTMLDivElement>(null);\n  const handleRef = useRef<HTMLDivElement>(null);\n  const lastUpdateTime = useRef(Date.now());\n  const lastPosition = useRef(initialPosition);\n  const animationFrame = useRef<number | null>(null);\n  const debounceTimeout = useRef<NodeJS.Timeout | null>(null);\n\n  // Memoized motion configuration to prevent unnecessary spring recreations\n  const springConfig = ANIMATION.SPRING.stiff;\n\n  // Motion values for smooth animations\n  const motionX = useMotionValue(initialPosition);\n  const motionY = useMotionValue(initialPosition);\n  const springX = useSpring(motionX, springConfig);\n  const springY = useSpring(motionY, springConfig);\n\n  const handleTransform = useTransform(\n    orientation === \"horizontal\" ? springX : springY,\n    [0, 100],\n    [\"translateX(-50%) translateY(-50%)\", \"translateX(-50%) translateY(-50%)\"]\n  );\n\n  // Memoized preset values to prevent recreation on every render\n  const presetValues = React.useMemo(() => Object.values(SLIDER_PRESETS), []);\n\n  // Optimized snap to preset positions\n  const snapToNearestPreset = useCallback(\n    (currentPos: number) => {\n      if (!enableSnapping) return currentPos;\n\n      const nearest = presetValues.reduce((prev, curr) =>\n        Math.abs(curr - currentPos) < Math.abs(prev - currentPos) ? curr : prev\n      );\n\n      if (Math.abs(nearest - currentPos) <= snapThreshold) {\n        onSnapToPreset?.(nearest as PresetPosition);\n        return nearest;\n      }\n\n      return currentPos;\n    },\n    [enableSnapping, snapThreshold, onSnapToPreset, presetValues]\n  );\n\n  // Apply momentum when drag ends\n  const applyMomentum = useCallback(() => {\n    if (!enableMomentum || Math.abs(velocity) < 0.1) return;\n\n    const startPos = position;\n    const targetPos = Math.max(\n      0,\n      Math.min(100, position + velocity * momentumMultiplier * 10)\n    );\n    const snappedPos = snapToNearestPreset(targetPos);\n\n    // Animate to final position\n    const startTime = Date.now();\n    const duration = Math.min(800, Math.abs(snappedPos - startPos) * 20);\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const progress = Math.min(elapsed / duration, 1);\n\n      // Easing function (ease-out cubic)\n      const easedProgress = 1 - Math.pow(1 - progress, 3);\n      const currentPos = startPos + (snappedPos - startPos) * easedProgress;\n\n      setPosition(currentPos);\n      motionX.set(currentPos);\n      motionY.set(currentPos);\n\n      if (progress < 1) {\n        animationFrame.current = requestAnimationFrame(animate);\n      } else {\n        setVelocity(0);\n      }\n    };\n\n    animationFrame.current = requestAnimationFrame(animate);\n  }, [\n    position,\n    velocity,\n    enableMomentum,\n    momentumMultiplier,\n    snapToNearestPreset,\n  ]);\n\n  const handleMouseDown = (e: React.MouseEvent) => {\n    e.preventDefault();\n    setIsDragging(true);\n    onDragStart?.();\n\n    if (animationFrame.current) {\n      cancelAnimationFrame(animationFrame.current);\n    }\n\n    const clientPos = orientation === \"horizontal\" ? e.clientX : e.clientY;\n    handleMove(clientPos);\n\n    // Reset velocity tracking\n    lastUpdateTime.current = Date.now();\n    lastPosition.current = position;\n  };\n\n  // Optimized handle move with better performance\n  const handleMove = useCallback(\n    (clientPos: number) => {\n      if (!containerRef.current) return;\n\n      const rect = containerRef.current.getBoundingClientRect();\n      const size = orientation === \"horizontal\" ? rect.width : rect.height;\n      const offset =\n        orientation === \"horizontal\"\n          ? clientPos - rect.left\n          : clientPos - rect.top;\n\n      const newPosition = (offset / size) * 100;\n      const clampedPosition = Math.max(0, Math.min(100, newPosition));\n\n      // Calculate velocity for momentum (optimized)\n      const now = Date.now();\n      const timeDelta = now - lastUpdateTime.current;\n\n      if (timeDelta > 0) {\n        const positionDelta = clampedPosition - lastPosition.current;\n        setVelocity(positionDelta / timeDelta);\n        lastUpdateTime.current = now;\n        lastPosition.current = clampedPosition;\n      }\n\n      setPosition(clampedPosition);\n      motionX.set(clampedPosition);\n      motionY.set(clampedPosition);\n\n      // Debounced callback with cleanup\n      if (debounceTimeout.current) {\n        clearTimeout(debounceTimeout.current);\n      }\n      debounceTimeout.current = setTimeout(() => {\n        onPositionChange?.(clampedPosition);\n      }, debounceMs);\n    },\n    [orientation, onPositionChange, debounceMs]\n  );\n\n  useEffect(() => {\n    const handleMouseMove = (e: MouseEvent) => {\n      if (isDragging) {\n        const clientPos = orientation === \"horizontal\" ? e.clientX : e.clientY;\n        handleMove(clientPos);\n      }\n    };\n\n    const handleMouseUp = () => {\n      if (isDragging) {\n        setIsDragging(false);\n        onDragEnd?.();\n\n        // Apply momentum and snapping\n        setTimeout(() => {\n          applyMomentum();\n        }, 0);\n      }\n    };\n\n    const handleTouchMove = (e: TouchEvent) => {\n      if (isDragging && e.touches?.[0]) {\n        e.preventDefault();\n        const touch = e.touches?.[0];\n        const clientPos =\n          orientation === \"horizontal\" ? touch.clientX : touch.clientY;\n        handleMove(clientPos);\n      }\n    };\n\n    if (isDragging) {\n      document.addEventListener(\"mousemove\", handleMouseMove, {\n        passive: false,\n      });\n      document.addEventListener(\"mouseup\", handleMouseUp);\n      document.addEventListener(\"touchmove\", handleTouchMove, {\n        passive: false,\n      });\n      document.addEventListener(\"touchend\", handleMouseUp);\n    }\n\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.removeEventListener(\"touchmove\", handleTouchMove);\n      document.removeEventListener(\"touchend\", handleMouseUp);\n    };\n  }, [isDragging, handleMove, orientation, applyMomentum, onDragEnd]);\n\n  const handleTouchStart = (e: React.TouchEvent) => {\n    e.preventDefault();\n    setIsDragging(true);\n    onDragStart?.();\n\n    if (animationFrame.current) {\n      cancelAnimationFrame(animationFrame.current);\n    }\n\n    if (e.touches?.[0]) {\n      const touch = e.touches?.[0];\n      const clientPos =\n        orientation === \"horizontal\" ? touch.clientX : touch.clientY;\n      handleMove(clientPos);\n\n      // Reset velocity tracking\n      lastUpdateTime.current = Date.now();\n      lastPosition.current = position;\n    }\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    const step = e.shiftKey ? 10 : e.ctrlKey || e.metaKey ? 25 : 1;\n    let newPosition = position;\n    let shouldSnap = false;\n\n    switch (e.key) {\n      case \"ArrowLeft\":\n      case \"ArrowUp\":\n        e.preventDefault();\n        newPosition = Math.max(0, position - step);\n        break;\n      case \"ArrowRight\":\n      case \"ArrowDown\":\n        e.preventDefault();\n        newPosition = Math.min(100, position + step);\n        break;\n      case \"Home\":\n        e.preventDefault();\n        newPosition = SLIDER_PRESETS.BEFORE_ONLY;\n        shouldSnap = true;\n        break;\n      case \"End\":\n        e.preventDefault();\n        newPosition = SLIDER_PRESETS.AFTER_ONLY;\n        shouldSnap = true;\n        break;\n      case \"PageUp\":\n        e.preventDefault();\n        newPosition = SLIDER_PRESETS.QUARTER;\n        shouldSnap = true;\n        break;\n      case \"PageDown\":\n        e.preventDefault();\n        newPosition = SLIDER_PRESETS.THREE_QUARTER;\n        shouldSnap = true;\n        break;\n      case \" \":\n      case \"Enter\":\n        e.preventDefault();\n        newPosition = SLIDER_PRESETS.HALF;\n        shouldSnap = true;\n        break;\n      case \"0\":\n      case \"1\":\n      case \"2\":\n      case \"3\":\n      case \"4\":\n      case \"5\":\n        e.preventDefault();\n        const presetIndex = parseInt(e.key);\n        const presetValues = Object.values(SLIDER_PRESETS);\n        if (presetIndex < (presetValues?.length || 0)) {\n          newPosition = presetValues[presetIndex];\n          shouldSnap = true;\n        }\n        break;\n    }\n\n    if (newPosition !== position) {\n      setPosition(newPosition);\n      motionX.set(newPosition);\n      motionY.set(newPosition);\n      onPositionChange?.(newPosition);\n\n      if (shouldSnap) {\n        onSnapToPreset?.(newPosition as PresetPosition);\n      }\n    }\n  };\n\n  // Memoized handle size variants to prevent recreation\n  const handleSizes = React.useMemo(\n    () => ({\n      sm: \"w-10 h-10\",\n      md: \"w-12 h-12\",\n      lg: \"w-14 glass-h-14\",\n    }),\n    []\n  );\n  const isCompact = compact || preview || density === \"compact\";\n  const bounded = contained || isCompact;\n  const effectiveHeight = isCompact && height === \"24rem\" ? \"180px\" : height;\n  const effectiveHandleSize = isCompact ? \"sm\" : handleSize;\n  const effectiveShowLabels = isCompact ? false : showLabels;\n  const effectiveShowProgress = isCompact ? false : showProgress;\n  const resolvedMaxHeight =\n    typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight;\n  const resolvedMaxWidth =\n    typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth;\n\n  // Memoized dynamic styles based on props\n  const containerStyles = React.useMemo(\n    () => ({\n      height:\n        typeof effectiveHeight === \"string\"\n          ? effectiveHeight\n          : `${effectiveHeight}px`,\n      minHeight: minHeight\n        ? typeof minHeight === \"string\"\n          ? minHeight\n          : `${minHeight}px`\n        : undefined,\n      maxHeight: resolvedMaxHeight ?? (bounded ? \"220px\" : undefined),\n      maxWidth: resolvedMaxWidth ?? (bounded ? \"320px\" : undefined),\n    }),\n    [effectiveHeight, minHeight, resolvedMaxHeight, resolvedMaxWidth, bounded]\n  );\n\n  // Clean up on unmount\n  useEffect(() => {\n    return () => {\n      if (animationFrame.current) {\n        cancelAnimationFrame(animationFrame.current);\n      }\n      if (debounceTimeout.current) {\n        clearTimeout(debounceTimeout.current);\n      }\n    };\n  }, []);\n\n  // Memoized computed values for better performance\n  const computedValues = React.useMemo(() => {\n    const isVertical = orientation === \"vertical\";\n    const cursorClass = isVertical ? \"cursor-row-resize\" : \"cursor-col-resize\";\n    const clipPath = isVertical\n      ? `inset(${100 - position}% 0 0 0)`\n      : `inset(0 ${100 - position}% 0 0)`;\n\n    return { isVertical, cursorClass, clipPath };\n  }, [orientation, position]);\n\n  const { isVertical, cursorClass, clipPath } = computedValues;\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\n        \"relative w-full overflow-hidden glass-radius-lg select-none glass-card-motion-aware\",\n        bounded && \"glass-w-full\",\n        cursorClass,\n        {\n          \"h-96\": !height || height === \"24rem\",\n        },\n        className\n      )}\n      style={{ ...containerStyles }}\n      role=\"slider\"\n      aria-valuemin={0}\n      aria-valuemax={100}\n      aria-valuenow={Math.round(position)}\n      aria-label={\n        ariaLabel ||\n        `${labels.before} vs ${labels.after} comparison slider. Use arrow keys, Home, End, or number keys 0-5 for presets.`\n      }\n      aria-describedby={\n        ariaDescribedBy\n          ? showMetrics && (metrics?.length || 0) > 0\n            ? `${ariaDescribedBy} slider-metrics`\n            : ariaDescribedBy\n          : showMetrics && (metrics?.length || 0) > 0\n            ? \"slider-metrics\"\n            : undefined\n      }\n      aria-expanded={ariaExpanded}\n      data-testid={dataTestId}\n      tabIndex={0}\n      onKeyDown={handleKeyDown}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      onFocus={() => setIsFocused(true)}\n      onBlur={() => setIsFocused(false)}\n      {...containerProps}\n    >\n      {/* Before content (background layer) */}\n      <div className=\"glass-absolute glass-inset-0 glass-w-full glass-h-full\">\n        {beforeContent}\n      </div>\n\n      {/* After content (clipped layer) */}\n      <div\n        className={`glass-absolute glass-inset-0 glass-transition-all glass-duration-[${ANIMATION.DURATION.fast / 4}ms] glass-ease-out`}\n        style={{\n          clipPath,\n          ...(isVertical\n            ? { width: \"100%\", height: \"100%\" }\n            : { width: \"100%\", height: \"100%\" }),\n        }}\n      >\n        {afterContent}\n      </div>\n\n      {/* Gradient overlay for smooth transitions */}\n      {gradientOverlay && (\n        <div\n          className={`glass-absolute glass-pointer-events-none glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n          style={{\n            ...(isVertical\n              ? {\n                  top: `${position}%`,\n                  left: 0,\n                  right: 0,\n                  height: \"20px\",\n                  transform: \"translateY(-50%)\",\n                  background:\n                    \"var(--glass-primary-level2-surface)\",\n                }\n              : {\n                  left: `${position}%`,\n                  top: 0,\n                  bottom: 0,\n                  width: \"20px\",\n                  transform: \"translateX(-50%)\",\n                  background:\n                    \"var(--glass-primary-level2-surface)\",\n                }),\n            opacity: isHovered || isDragging ? 0.5 : 0.2,\n          }}\n        />\n      )}\n\n      {/* Glass divider line */}\n      <div\n        className={cn(\n          `absolute glass-backdrop-blur-md shadow-lg transition-all duration-[${ANIMATION.DURATION.fast}ms] ease-out`,\n          {\n            // Horizontal orientation\n            \"top-0 bottom-0 bg-gradient-to-b from-white/40 via-white/60 to-white/40\":\n              !isVertical,\n            \"w-0.5\": !isVertical && trackStyle === \"minimal\",\n            \"w-1\": !isVertical && trackStyle === \"default\",\n            \"w-2\": !isVertical && trackStyle === \"bold\",\n\n            // Vertical orientation\n            \"left-0 right-0 bg-gradient-to-r from-white/40 via-white/60 to-white/40\":\n              isVertical,\n            \"h-0.5\": isVertical && trackStyle === \"minimal\",\n            \"h-1\": isVertical && trackStyle === \"default\",\n            \"h-2\": isVertical && trackStyle === \"bold\",\n          }\n        )}\n        style={{\n          ...(isVertical\n            ? {\n                top: `${position}%`,\n                transform: \"translateY(-50%)\",\n              }\n            : {\n                left: `${position}%`,\n                transform: \"translateX(-50%)\",\n              }),\n          boxShadow:\n            isDragging || isHovered\n              ? '0 0 20px ${glassStyles.borderColor || \"hsl(var(--glass-color-primary)/0.6)\"}'\n              : '0 0 10px ${glassStyles.borderColor || \"var(--glass-bg-hover)\"}',\n        }}\n      >\n        {/* Glass effect overlay */}\n        <div\n          className={cn(\n            \"absolute inset-0\",\n            isVertical\n              ? \"bg-gradient-to-t from-transparent via-white/20 to-transparent\"\n              : \"bg-gradient-to-r from-transparent via-white/20 to-transparent\"\n          )}\n        />\n\n        {/* Active glow effect */}\n        <div\n          className={cn(\n            `absolute inset-0 transition-opacity duration-[${ANIMATION.DURATION.normal}ms]`,\n            isVertical\n              ? \"bg-gradient-to-t from-cyan-500/20 via-blue-500/30 to-cyan-500/20\"\n              : \"bg-gradient-to-r from-cyan-500/20 via-blue-500/30 to-cyan-500/20\"\n          )}\n          style={{\n            opacity: isDragging || isHovered ? 0.8 : 0,\n          }}\n        />\n      </div>\n\n      {/* Interactive handle */}\n      <motion.div\n        ref={handleRef}\n        className={cn(\n          \"absolute cursor-grab glass-active-cursor-grabbing touch-target z-20\",\n          handleSizes?.[effectiveHandleSize],\n          {\n            \"top-1/2 -translate-y-1/2\": !isVertical,\n            \"left-1/2 -translate-x-1/2\": isVertical,\n          }\n        )}\n        style={{\n          ...(isVertical\n            ? {\n                left: \"50%\",\n                top: `${position}%`,\n                transform: \"translateY(-50%) translateX(-50%)\",\n              }\n            : {\n                top: \"50%\",\n                left: `${position}%`,\n                transform: \"translateX(-50%) translateY(-50%)\",\n              }),\n        }}\n        onMouseDown={handleMouseDown}\n        onTouchStart={handleTouchStart}\n        {...getAnimationProps({\n          whileHover: { scale: 1.1 },\n          whileTap: { scale: 0.95 },\n          animate: {\n            boxShadow:\n              isDragging || isFocused\n                ? '0 0 30px ${glassStyles.borderColor || \"hsl(var(--glass-color-primary)/0.6)\"}'\n                : isHovered\n                  ? \"0 0 25px var(--glass-border-default)\"\n                  : '0 0 20px ${glassStyles.borderColor || \"var(--glass-bg-hover)\"}',\n          },\n        })}\n        transition={getTransition(duration / 1000)}\n      >\n        {/* Glass handle */}\n        <div className=\"glass-w-full glass-h-full glass-radius-full glass-foundation-complete glass-bg-gradient-strong glass-backdrop-blur-md-medium glass-border glass-border-white/30 glass-flex glass-items-center glass-justify-center glass-group glass-relative glass-overflow-hidden glass-contrast-guard\">\n          {/* Arrow indicators */}\n          <div\n            className={cn(\n              `flex items-center glass-gap-1 glass-text-primary/70 group-hover:glass-text-primary/90 transition-colors duration-[${ANIMATION.DURATION.fast}ms] relative z-10`,\n              isVertical ? \"flex-col\" : \"flex-row\"\n            )}\n          >\n            {isVertical ? (\n              <>\n                <ChevronUpIcon />\n                <div className=\"glass-w-1 glass-h-1 glass-radius-full glass-bg-transparent glass-opacity-50\" />\n                <ChevronDownIcon />\n              </>\n            ) : (\n              <>\n                <ChevronLeftIcon />\n                <div className=\"glass-w-1 glass-h-1 glass-radius-full glass-bg-transparent glass-opacity-50\" />\n                <ChevronRightIcon />\n              </>\n            )}\n          </div>\n\n          {/* Multi-layer glow effects */}\n          <div\n            className={`glass-absolute glass-inset-0 glass-radius-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-opacity-0 glass-group-glass-hover-opacity-100 glass-transition-opacity glass-duration-[${ANIMATION.DURATION.normal}ms]`}\n          />\n\n          <div\n            className={`glass-absolute glass-inset-0 glass-radius-full glass-gradient-primary glass-gradient-primary glass-gradient-primary glass-transition-opacity glass-duration-[${ANIMATION.DURATION.fast}ms]`}\n            style={{\n              opacity: isDragging ? 0.7 : 0,\n            }}\n          />\n\n          {/* Focus ring */}\n          {isFocused && (\n            <div className=\"glass-absolute glass--inset-1 glass-radius-full glass-border-2 glass-border-blue/50 glass-animate-pulse\" />\n          )}\n\n          {/* Ripple effect for interactions */}\n          <div\n            className=\"glass-absolute glass-inset-0 glass-radius-full glass-surface-subtle/20 glass-scale-0 glass-transition-transform glass-duration-200\"\n            style={{\n              transform: isDragging ? \"scale(1.5)\" : \"scale(0)\",\n              opacity: isDragging ? 0.3 : 0,\n            }}\n          />\n        </div>\n      </motion.div>\n\n      {/* Labels */}\n      {effectiveShowLabels && (\n        <>\n          <motion.div\n            className={cn(\n              \"absolute chip chip-muted glass-text-sm pointer-events-none z-10\",\n              isVertical\n                ? \"top-4 left-1/2 transform -translate-x-1/2\"\n                : \"top-4 left-4\"\n            )}\n            {...getAnimationProps({\n              initial: { opacity: 0, scale: 0.9 },\n              animate: { opacity: 1, scale: 1 },\n            })}\n            transition={getTransition(0.3, \"ease-out\")}\n          >\n            <div className=\"glass-font-medium\">{labels.after}</div>\n            {labels.afterDescription && (\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-0-5\">\n                {labels.afterDescription}\n              </div>\n            )}\n          </motion.div>\n\n          <motion.div\n            className={cn(\n              \"absolute chip chip-muted glass-text-sm pointer-events-none z-10\",\n              isVertical\n                ? \"bottom-4 left-1/2 transform -translate-x-1/2\"\n                : \"top-4 right-4\"\n            )}\n            {...getAnimationProps({\n              initial: { opacity: 0, scale: 0.9 },\n              animate: { opacity: 1, scale: 1 },\n            })}\n            transition={getTransition(0.3, \"ease-out\")}\n          >\n            <div className=\"glass-font-medium\">{labels.before}</div>\n            {labels.beforeDescription && (\n              <div className=\"glass-text-xs glass-text-primary-glass-opacity-60 glass-mt-0-5\">\n                {labels.beforeDescription}\n              </div>\n            )}\n          </motion.div>\n        </>\n      )}\n\n      {/* Progress indicator */}\n      {effectiveShowProgress && (\n        <motion.div\n          className={cn(\n            \"absolute chip chip-muted glass-text-xs pointer-events-none z-10\",\n            isVertical\n              ? \"bottom-4 right-4\"\n              : \"bottom-4 left-1/2 transform -translate-x-1/2\"\n          )}\n          {...getAnimationProps({\n            initial: { opacity: 0, y: 10 },\n            animate: { opacity: 1, y: 0 },\n          })}\n          transition={getTransition(0.3, \"ease-out\")}\n        >\n          <div className=\"glass-flex glass-items-center glass-gap-2\">\n            <div className=\"glass-font-mono glass-font-medium\">\n              {Math.round(position)}%\n            </div>\n            {enableSnapping && (\n              <div className=\"glass-w-1 glass-h-1 glass-radius-full glass-surface-subtle/40\" />\n            )}\n          </div>\n        </motion.div>\n      )}\n\n      {/* Preset position indicators */}\n      {enableSnapping && (\n        <div className=\"glass-absolute glass-inset-0 glass-pointer-events-none glass-z-5\">\n          {Object.entries(SLIDER_PRESETS).map(([key, value]) => (\n            <div\n              key={key}\n              className={cn(\n                \"absolute w-2 h-2 glass-radius-full bg-white/30 glass-backdrop-blur-md border border-white/20 transition-all duration-200\",\n                Math.abs(position - value) <= snapThreshold\n                  ? \"glass-surface-primary/60 scale-125\"\n                  : \"\"\n              )}\n              style={{\n                ...(isVertical\n                  ? {\n                      top: `${value}%`,\n                      left: \"50%\",\n                      transform: \"translateX(-50%) translateY(-50%)\",\n                    }\n                  : {\n                      left: `${value}%`,\n                      top: \"50%\",\n                      transform: \"translateX(-50%) translateY(-50%)\",\n                    }),\n              }}\n            />\n          ))}\n        </div>\n      )}\n\n      {/* Metrics comparison overlay */}\n      {showMetrics && (metrics?.length || 0) > 0 && (\n        <div\n          id=\"slider-metrics\"\n          className={cn(\n            \"absolute glass-foundation-complete bg-glass-gradient-strong glass-backdrop-blur-md-medium border border-white/20 glass-radius-lg glass-p-4 z-10 max-w-sm\",\n            isVertical\n              ? \"top-1/2 right-4 transform -translate-y-1/2\"\n              : \"top-4 left-1/2 transform -translate-x-1/2\"\n          )}\n          style={{\n            opacity: isHovered || isDragging || isFocused ? 0.95 : 0.7,\n          }}\n        >\n          <div className=\"glass-auto-gap glass-auto-gap-sm\">\n            {metrics.map((metric, index) => (\n              <div\n                key={index}\n                className={cn(\n                  \"flex items-center justify-between glass-text-sm\",\n                  metric?.highlight\n                    ? \"glass-text-primary font-semibold\"\n                    : \"glass-text-primary/80\"\n                )}\n              >\n                <span className=\"glass-font-medium\">{metric?.label}</span>\n                <div className=\"glass-flex glass-items-center glass-gap-2 glass-font-mono\">\n                  <span className=\"glass-text-danger\">\n                    {metric?.beforeValue}\n                    {metric?.unit}\n                  </span>\n                  <span className=\"glass-text-primary-glass-opacity-50\">\u2192</span>\n                  <span className=\"glass-text-success\">\n                    {metric?.afterValue}\n                    {metric?.unit}\n                  </span>\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {/* Keyboard instructions */}\n      <div className=\"glass-sr-only\">\n        Use arrow keys to adjust the comparison. Press Home for 0%, End for\n        100%, Space for 50%. Number keys 0-5 jump to preset positions.\n        Shift+arrows for larger steps.\n      </div>\n    </div>\n  );\n};\n\n// Export optimized memoized component\nexport const GlassWipeSlider = memo(GlassWipeSliderComponent);\n\n// Comparison content components for common use cases\nexport function ComparisonImage({\n  src,\n  alt,\n  className,\n  loading = \"lazy\",\n}: {\n  src: string;\n  alt: string;\n  className?: string;\n  loading?: \"lazy\" | \"eager\";\n}) {\n  return (\n    <img\n      src={src}\n      alt={alt}\n      width={1200}\n      height={800}\n      className={cn(\n        `w-full h-full object-cover transition-all`,\n        `duration-[${ANIMATION.DURATION.normal}ms]`,\n        className\n      )}\n      loading={loading}\n    />\n  );\n}\n\nexport function ComparisonContent({\n  children,\n  className,\n  background = \"gradient\",\n}: {\n  children: React.ReactNode;\n  className?: string;\n  background?: \"gradient\" | \"solid\" | \"glass\" | \"transparent\";\n}) {\n  const backgroundClasses = {\n    gradient: \"bg-gradient-to-br from-slate-900 via-blue-900 to-slate-900\",\n    solid: \"glass-surface-primary\",\n    glass:\n      \"glass-foundation-complete bg-glass-gradient-subtle glass-backdrop-blur-md-medium\",\n    transparent: \"bg-transparent\",\n  };\n\n  return (\n    <div\n      className={cn(\n        `w-full h-full flex items-center justify-center p-8 transition-all`,\n        `duration-[${ANIMATION.DURATION.normal}ms]`,\n        backgroundClasses?.[background],\n        className\n      )}\n    >\n      {children}\n    </div>\n  );\n}\n\n// Pre-built comparison layouts\nexport function FeatureComparison({\n  beforeFeatures,\n  afterFeatures,\n  title,\n  className,\n}: {\n  beforeFeatures: Array<{\n    name: string;\n    available: boolean;\n    highlight?: boolean;\n  }>;\n  afterFeatures: Array<{\n    name: string;\n    available: boolean;\n    highlight?: boolean;\n  }>;\n  title?: string;\n  className?: string;\n}) {\n  return (\n    <ComparisonContent className={className} background=\"glass\">\n      <div className=\"glass-w-full glass-max-w-md glass-auto-gap glass-auto-gap-lg\">\n        {title && (\n          <h3 className=\"glass-text-lg glass-font-semibold glass-text-primary glass-text-center glass-mb-6\">\n            {title}\n          </h3>\n        )}\n        <div className=\"glass-auto-gap glass-auto-gap-sm\">\n          {beforeFeatures.map((feature, index) => {\n            const afterFeature = afterFeatures?.[index];\n            return (\n              <div\n                key={feature.name}\n                className=\"glass-flex glass-items-center glass-justify-between glass-py-2 glass-px-3 glass-surface-1\"\n              >\n                <span\n                  className={cn(\n                    \"glass-text-sm\",\n                    feature.highlight\n                      ? \"glass-text-primary font-medium\"\n                      : \"glass-text-primary/90\"\n                  )}\n                >\n                  {feature.name}\n                </span>\n                <div className=\"glass-flex glass-items-center glass-gap-3\">\n                  <div\n                    className={cn(\n                      \"w-2 h-2 glass-radius-full\",\n                      feature.available\n                        ? \"glass-surface-success\"\n                        : \"glass-surface-danger\"\n                    )}\n                  />\n                  {afterFeature && (\n                    <>\n                      <span className=\"glass-text-primary-glass-opacity-40\">\n                        \u2192\n                      </span>\n                      <div\n                        className={cn(\n                          \"w-2 h-2 glass-radius-full\",\n                          afterFeature.available\n                            ? \"glass-surface-success\"\n                            : \"glass-surface-danger\"\n                        )}\n                      />\n                    </>\n                  )}\n                </div>\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    </ComparisonContent>\n  );\n}\n\n// Performance metrics comparison\nexport function MetricsComparison({\n  metrics,\n  title,\n  className,\n}: {\n  metrics: SliderMetric[];\n  title?: string;\n  className?: string;\n}) {\n  return (\n    <ComparisonContent className={className} background=\"glass\">\n      <div className=\"glass-w-full glass-max-w-lg glass-auto-gap glass-auto-gap-lg\">\n        {title && (\n          <h3 className=\"glass-text-xl glass-font-semibold glass-text-primary glass-text-center glass-mb-6\">\n            {title}\n          </h3>\n        )}\n        <div className=\"glass-grid glass-gap-4\">\n          {metrics.map((metric, index) => (\n            <div key={index} className=\"glass-surface-1 glass-p-4\">\n              <div className=\"glass-text-center glass-auto-gap glass-auto-gap-md\">\n                <div\n                  className={cn(\n                    \"glass-text-sm font-medium\",\n                    metric?.highlight\n                      ? \"glass-text-primary\"\n                      : \"glass-text-primary/80\"\n                  )}\n                >\n                  {metric?.label}\n                </div>\n                <div className=\"glass-flex glass-items-center glass-justify-center glass-gap-4\">\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-2xl glass-font-bold glass-text-danger glass-font-mono\">\n                      {metric?.beforeValue}\n                      {metric?.unit}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-mt-1\">\n                      Before\n                    </div>\n                  </div>\n                  <div className=\"glass-text-primary-glass-opacity-40 glass-text-xl\">\n                    \u2192\n                  </div>\n                  <div className=\"glass-text-center\">\n                    <div className=\"glass-text-2xl glass-font-bold glass-text-success glass-font-mono\">\n                      {metric?.afterValue}\n                      {metric?.unit}\n                    </div>\n                    <div className=\"glass-text-xs glass-text-primary-glass-opacity-50 glass-mt-1\">\n                      After\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    </ComparisonContent>\n  );\n}\n\n// Usage examples for AuraOne vs competitors\nexport const AURAONE_COMPARISON_EXAMPLES = {\n  SCALE_AI: {\n    labels: {\n      before: \"Scale AI\",\n      after: \"AuraOne\",\n      beforeDescription: \"Traditional approach\",\n      afterDescription: \"Next-gen platform\",\n    },\n    metrics: [\n      {\n        label: \"Model Training Speed\",\n        beforeValue: \"2-4\",\n        afterValue: \"< 1\",\n        unit: \" weeks\",\n        highlight: true,\n      },\n      {\n        label: \"Accuracy Improvement\",\n        beforeValue: \"85\",\n        afterValue: \"97\",\n        unit: \"%\",\n        highlight: true,\n      },\n      {\n        label: \"Infrastructure Cost\",\n        beforeValue: \"$10K\",\n        afterValue: \"$2K\",\n        unit: \"/month\",\n        highlight: true,\n      },\n      {\n        label: \"Setup Complexity\",\n        beforeValue: \"High\",\n        afterValue: \"Low\",\n        unit: \"\",\n      },\n    ],\n  },\n  OPENAI_GYM: {\n    labels: {\n      before: \"OpenAI Gym\",\n      after: \"AuraOne\",\n      beforeDescription: \"Research-focused\",\n      afterDescription: \"Production-ready\",\n    },\n    metrics: [\n      {\n        label: \"Environment Setup\",\n        beforeValue: \"Hours\",\n        afterValue: \"Minutes\",\n        unit: \"\",\n        highlight: true,\n      },\n      {\n        label: \"Scalability\",\n        beforeValue: \"Limited\",\n        afterValue: \"Unlimited\",\n        unit: \"\",\n        highlight: true,\n      },\n      {\n        label: \"Production Features\",\n        beforeValue: \"Basic\",\n        afterValue: \"Enterprise\",\n        unit: \"\",\n        highlight: true,\n      },\n    ],\n  },\n} as const;\n", "import { Variants } from 'framer-motion';\n\nexport const createMotionAwareVariants = {\n  fadeInScale: (prefersReducedMotion: boolean) => ({\n    hidden: prefersReducedMotion ? { opacity: 1, scale: 1 } : { opacity: 0, scale: 0.8 },\n    visible: prefersReducedMotion ? { opacity: 1, scale: 1, transition: { duration: 0 } } : { opacity: 1, scale: 1, transition: { duration: 0.3, ease: 'easeOut' } },\n  }),\n\n  slideIn: (direction: 'left' | 'right' | 'up' | 'down', prefersReducedMotion: boolean) => {\n    const directionMap = {\n      left: { x: -50 },\n      right: { x: 50 },\n      up: { y: -50 },\n      down: { y: 50 },\n    };\n\n    return {\n      hidden: prefersReducedMotion ? { opacity: 1, ...directionMap[direction] } : { opacity: 0, ...directionMap[direction] },\n      visible: prefersReducedMotion ? { opacity: 1, x: 0, y: 0, transition: { duration: 0 } } : { opacity: 1, x: 0, y: 0, transition: { duration: 0.4, ease: 'easeOut' } },\n    };\n  },\n\n  fadeInUp: (prefersReducedMotion: boolean) => ({\n    hidden: prefersReducedMotion ? { opacity: 1, y: 0 } : { opacity: 0, y: 20 },\n    visible: prefersReducedMotion ? { opacity: 1, y: 0, transition: { duration: 0 } } : { opacity: 1, y: 0, transition: { duration: 0.3, ease: 'easeOut' } },\n  }),\n};\n\nexport const createMotionAwareInteractive = {\n  button: (prefersReducedMotion: boolean) => ({\n    whileHover: prefersReducedMotion ? {} : { scale: 1.02 },\n    whileTap: prefersReducedMotion ? {} : { scale: 0.98 },\n    transition: prefersReducedMotion ? { duration: 0 } : { duration: 0.2 },\n  }),\n\n  card: (prefersReducedMotion: boolean) => ({\n    whileHover: prefersReducedMotion ? {} : { y: -2, scale: 1.01 },\n    transition: prefersReducedMotion ? { duration: 0 } : { duration: 0.2 },\n  }),\n};\n", "\"use client\";\nimport { useMotionPreferenceContext } from \"../../contexts/MotionPreferenceContext\";\nimport {\n  createMotionAwareInteractive,\n  createMotionAwareVariants,\n} from \"../../lib/motionPrimitives\";\nimport { cn } from \"../../lib/utilsComprehensive\";\nimport { motion } from \"framer-motion\";\nimport React, { forwardRef } from \"react\";\nimport { createGlassStyle } from \"../../core/mixins/glassMixins\";\nimport { ANIMATION } from \"../../tokens/designConstants\";\nimport { ContrastGuard } from \"../accessibility/ContrastGuard\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n\ninterface MotionAwareGlassProps\n  extends Omit<\n    React.ComponentProps<typeof motion.div>,\n    \"variants\" | \"initial\" | \"animate\" | \"whileHover\" | \"whileTap\"\n  > {\n  variant?: \"base\" | \"subtle\" | \"strong\" | \"card\" | \"button\" | \"input\";\n  interactive?: boolean;\n  animationType?: \"fadeInUp\" | \"fadeInScale\" | \"slideLeft\" | \"slideRight\";\n  children: React.ReactNode;\n  className?: string;\n  asButton?: boolean;\n  disabled?: boolean;\n}\n\n/**\n * Motion-aware Glass component that automatically respects user's motion preferences\n * Provides beautiful glass morphism effects while being fully accessible\n */\nexport const MotionAwareGlass = forwardRef<\n  HTMLDivElement,\n  MotionAwareGlassProps\n>(\n  (\n    {\n      variant = \"base\",\n      interactive = false,\n      animationType = \"fadeInUp\",\n      children,\n      className,\n      asButton = false,\n      disabled = false,\n      ...props\n    },\n    ref\n  ) => {\n    const { prefersReducedMotion, isMotionSafe } = useMotionPreferenceContext();\n\n    // Get appropriate glass variant classes\n    const getVariantClasses = () => {\n      const baseClasses =\n        \"backdrop-filter border border-opacity-20 glass-radius-lg\";\n\n      switch (variant) {\n        case \"subtle\":\n          return cn(baseClasses, \"glass-subtle bg-white/5 border-white/10\");\n        case \"strong\":\n          return cn(baseClasses, \"glass-strong bg-white/10 border-white/20\");\n        case \"card\":\n          return cn(\n            baseClasses,\n            \"glass-foundation-complete bg-white/8 border-white/15 glass-p-6 shadow-lg\"\n          );\n        case \"button\":\n          return cn(\n            baseClasses,\n            \"glass-button-secondary bg-white/8 border-white/15 glass-px-6 glass-py-3 cursor-pointer\"\n          );\n        case \"input\":\n          return cn(\n            baseClasses,\n            \"glass-input bg-white/5 border-white/10 glass-px-4 glass-py-2\"\n          );\n        default:\n          return cn(\n            baseClasses,\n            \"glass-foundation-complete bg-white/8 border-white/15\"\n          );\n      }\n    };\n\n    // Get motion variants based on animation type and motion preference\n    const getAnimationVariants = () => {\n      switch (animationType) {\n        case \"fadeInScale\":\n          return createMotionAwareVariants.fadeInScale(prefersReducedMotion);\n        case \"slideLeft\":\n          return createMotionAwareVariants.slideIn(\n            \"left\",\n            prefersReducedMotion\n          );\n        case \"slideRight\":\n          return createMotionAwareVariants.slideIn(\n            \"right\",\n            prefersReducedMotion\n          );\n        default:\n          return createMotionAwareVariants.fadeInUp(prefersReducedMotion);\n      }\n    };\n\n    // Get interactive variants for hover/tap effects\n    const getInteractiveVariants = () => {\n      if (!interactive || disabled) return {};\n\n      if (variant === \"button\" || asButton) {\n        return createMotionAwareInteractive.button(prefersReducedMotion);\n      }\n\n      if (variant === \"card\") {\n        return createMotionAwareInteractive.card(prefersReducedMotion);\n      }\n\n      // Default interactive behavior\n      if (prefersReducedMotion) {\n        return {\n          hover: {\n            backgroundColor:\n              \"var(--glass-neutral-level2-surface)\",\n            borderColor: \"var(--glass-bg-default)\",\n            transition: { duration: ANIMATION.DURATION.instant / 1000 },\n          },\n        };\n      }\n\n      return {\n        hover: {\n          backgroundColor:\n            \"var(--glass-neutral-level2-surface)\",\n          borderColor: \"var(--glass-bg-default)\",\n          y: -2,\n          transition: { duration: ANIMATION.DURATION.fast / 1000 },\n        },\n        tap: {\n          y: -1,\n          transition: { duration: ANIMATION.DURATION.fast / 2000 },\n        },\n      };\n    };\n\n    const combinedClassName = cn(\n      getVariantClasses(),\n      {\n        \"glass-card-motion-aware\": interactive && !prefersReducedMotion,\n        \"cursor-pointer\": (interactive || asButton) && !disabled,\n        \"cursor-not-allowed opacity-50\": disabled,\n        \"focus:outline-none focus:ring-3 glass-focus-ring-blue-500/50\":\n          asButton || interactive,\n        \"transition-none\": prefersReducedMotion,\n      },\n      className\n    );\n\n    const animationVariants = getAnimationVariants();\n    const interactiveVariants = getInteractiveVariants();\n\n    // Combine all motion props\n    const motionProps = {\n      variants: animationVariants,\n      initial: \"hidden\",\n      animate: \"visible\",\n      ...(interactive &&\n        interactiveVariants &&\n        typeof interactiveVariants === \"object\" && {\n          whileHover: \"hover\" in interactiveVariants ? \"hover\" : undefined,\n          whileTap: \"tap\" in interactiveVariants ? \"tap\" : undefined,\n        }),\n      ...props,\n    };\n\n    // Add accessibility attributes for buttons\n    const accessibilityProps =\n      asButton || interactive\n        ? {\n            role: asButton ? \"button\" : undefined,\n            tabIndex: disabled ? -1 : 0,\n            \"aria-disabled\": disabled,\n            onKeyDown: (e: React.KeyboardEvent) => {\n              if (\n                (e.key === \"Enter\" || e.key === \" \") &&\n                (asButton || interactive) &&\n                !disabled\n              ) {\n                e.preventDefault();\n                props?.onClick?.(e as any);\n              }\n            },\n          }\n        : {};\n\n    return (\n      <motion.div\n        ref={ref}\n        className={combinedClassName}\n        variants={animationVariants}\n        initial=\"hidden\"\n        animate=\"visible\"\n        whileHover={\n          interactive && \"hover\" in interactiveVariants ? \"hover\" : undefined\n        }\n        whileTap={\n          interactive && \"tap\" in interactiveVariants ? \"tap\" : undefined\n        }\n        {...props}\n        {...accessibilityProps}\n      >\n        {children}\n\n        {/* Screen reader information for motion preference */}\n        {prefersReducedMotion && (\n          <span className=\"glass-sr-only\">\n            Motion reduced for accessibility\n          </span>\n        )}\n      </motion.div>\n    );\n  }\n);\n\nMotionAwareGlass.displayName = \"MotionAwareGlass\";\n\n// Specialized variants for common use cases\nexport const MotionAwareGlassCard = forwardRef<\n  HTMLDivElement,\n  Omit<MotionAwareGlassProps, \"variant\">\n>((props, ref) => (\n  <MotionAwareGlass ref={ref} variant=\"card\" interactive {...props} />\n));\nMotionAwareGlassCard.displayName = \"MotionAwareGlassCard\";\n\nexport const MotionAwareGlassButton = forwardRef<\n  HTMLDivElement,\n  Omit<MotionAwareGlassProps, \"variant\" | \"asButton\" | \"interactive\">\n>((props, ref) => (\n  <MotionAwareGlass\n    ref={ref}\n    variant=\"button\"\n    asButton\n    interactive\n    {...props}\n  />\n));\nMotionAwareGlassButton.displayName = \"MotionAwareGlassButton\";\n\nexport const MotionAwareGlassInput = forwardRef<\n  HTMLDivElement,\n  Omit<MotionAwareGlassProps, \"variant\">\n>((props, ref) => <MotionAwareGlass ref={ref} variant=\"input\" {...props} />);\nMotionAwareGlassInput.displayName = \"MotionAwareGlassInput\";\n\n// Hook for easy access to motion-aware glass styles\nexport const useMotionAwareGlassStyles: () => {\n  getGlassStyle: (\n    variant?: MotionAwareGlassProps[\"variant\"]\n  ) => React.CSSProperties;\n  prefersReducedMotion: boolean;\n} = () => {\n  const { prefersReducedMotion } = useMotionPreferenceContext();\n\n  return {\n    getGlassStyle: (variant: MotionAwareGlassProps[\"variant\"] = \"base\") => {\n      const baseStyle = createGlassStyle({\n        intent: \"neutral\",\n        elevation: \"level2\",\n      });\n\n      switch (variant) {\n        case \"subtle\":\n          return {\n            ...baseStyle,\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n          };\n        case \"strong\":\n          return {\n            ...baseStyle,\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n          };\n        case \"card\":\n          return {\n            ...baseStyle,\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n            padding: \"24px\",\n            boxShadow: \"var(--glass-elev-2)\",\n          };\n        default:\n          return {\n            ...baseStyle,\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n          };\n      }\n    },\n    prefersReducedMotion,\n  };\n};\n\nexport default MotionAwareGlass;\n", "\"use client\";\nimport React from \"react\";\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport {\n  PerformanceMonitor,\n  getAdaptivePerformanceConfig,\n  createCleanupManager,\n  type PerformanceOptions,\n} from \"../core/mixins/performanceMixins\";\nimport { detectDevice } from \"../utils/deviceCapabilities\";\n\nexport interface PerformanceMetrics {\n  renderTime: number;\n  memoryUsage: number;\n  frameRate: number;\n  networkSpeed: string;\n  deviceCapabilities: {\n    supportsGPU: boolean;\n    supportsBackdropFilter: boolean;\n    devicePixelRatio: number;\n  };\n}\n\nexport interface PerformanceState {\n  isOptimized: boolean;\n  performanceMode: \"high\" | \"balanced\" | \"low\";\n  metrics: PerformanceMetrics | null;\n  isLoading: boolean;\n  error: string | null;\n}\n\n/**\n * Enhanced performance monitoring and optimization hook\n */\nexport function useEnhancedPerformance(\n  options: {\n    enableMetrics?: boolean;\n    metricsInterval?: number;\n    adaptiveMode?: boolean;\n    onPerformanceChange?: (state: PerformanceState) => void;\n  } = {}\n): PerformanceState & {\n  startMeasure: (name: string) => void;\n  endMeasure: (name: string) => number | null;\n  optimizeForDevice: () => void;\n  clearMetrics: () => void;\n} {\n  const {\n    enableMetrics = true,\n    metricsInterval = 5000,\n    adaptiveMode = true,\n    onPerformanceChange,\n  } = options;\n\n  const [state, setState] = useState<PerformanceState>({\n    isOptimized: false,\n    performanceMode: \"balanced\",\n    metrics: null,\n    isLoading: true,\n    error: null,\n  });\n\n  const performanceMonitor = useRef(PerformanceMonitor.getInstance());\n  const metricsIntervalRef = useRef<NodeJS.Timeout>();\n  const frameCountRef = useRef(0);\n  const lastFrameTimeRef = useRef(performance.now());\n  const cleanupManager = useRef(createCleanupManager());\n\n  // Measure frame rate\n  const measureFrameRate = useCallback(() => {\n    let frameCount = 0;\n    let startTime = performance.now();\n\n    const countFrame = () => {\n      frameCount++;\n      const currentTime = performance.now();\n\n      if (currentTime - startTime >= 1000) {\n        frameCountRef.current = frameCount;\n        frameCount = 0;\n        startTime = currentTime;\n      }\n\n      requestAnimationFrame(countFrame);\n    };\n\n    requestAnimationFrame(countFrame);\n  }, []);\n\n  // Collect performance metrics\n  const collectMetrics =\n    useCallback(async (): Promise<PerformanceMetrics | null> => {\n      if (!enableMetrics || typeof window === \"undefined\") return null;\n\n      try {\n        // Memory usage (if available)\n        const memoryInfo = (performance as any).memory;\n        const memoryUsage = memoryInfo\n          ? memoryInfo.usedJSHeapSize / memoryInfo.jsHeapSizeLimit\n          : 0;\n\n        // Network speed\n        const connection = (navigator as any).connection;\n        const networkSpeed = connection?.effectiveType || \"unknown\";\n\n        // Device capabilities (cached, avoids creating WebGL contexts repeatedly)\n        const deviceInfo = detectDevice();\n        const deviceCapabilities = {\n          supportsGPU: deviceInfo.capabilities.webgl,\n          supportsBackdropFilter:\n            CSS.supports(\"backdrop-filter\", \"blur(1px)\") ||\n            CSS.supports(\"-webkit-backdrop-filter\", \"blur(1px)\"),\n          devicePixelRatio: window.devicePixelRatio || 1,\n        };\n\n        // Render time (average from performance monitor)\n        const renderTime =\n          performanceMonitor.current.getAverageMetric(\"render\") || 0;\n\n        return {\n          renderTime,\n          memoryUsage,\n          frameRate: frameCountRef.current,\n          networkSpeed,\n          deviceCapabilities,\n        };\n      } catch {\n        return null;\n      }\n    }, [enableMetrics]);\n\n  // Optimize performance based on current metrics\n  const optimizeForDevice = useCallback(() => {\n    const config = getAdaptivePerformanceConfig();\n\n    setState((prev: any) => ({\n      ...prev,\n      performanceMode: config.mode || \"balanced\",\n      isOptimized: true,\n    }));\n  }, []);\n\n  // Start performance measurement\n  const startMeasure = useCallback((name: string) => {\n    performanceMonitor.current.startMeasure(name);\n  }, []);\n\n  // End performance measurement\n  const endMeasure = useCallback((name: string): number | null => {\n    return performanceMonitor.current.endMeasure(name);\n  }, []);\n\n  // Clear metrics\n  const clearMetrics = useCallback(() => {\n    performanceMonitor.current.clearMetrics();\n    frameCountRef.current = 0;\n  }, []);\n\n  // Initialize performance monitoring\n  useEffect(() => {\n    const initialize = async () => {\n      try {\n        setState((prev: any) => ({ ...prev, isLoading: true, error: null }));\n\n        // Start frame rate monitoring\n        if (enableMetrics) {\n          measureFrameRate();\n        }\n\n        // Adaptive optimization\n        if (adaptiveMode) {\n          optimizeForDevice();\n        }\n\n        // Set up metrics collection interval\n        if (enableMetrics && metricsInterval > 0) {\n          const intervalId = setInterval(async () => {\n            const metrics = await collectMetrics();\n            if (metrics) {\n              setState((prev: any) => {\n                const newState = { ...prev, metrics };\n                onPerformanceChange?.(newState);\n                return newState;\n              });\n            }\n          }, metricsInterval);\n\n          metricsIntervalRef.current = intervalId;\n          cleanupManager.current.add(() => clearInterval(intervalId));\n        }\n\n        // Initial metrics collection\n        const initialMetrics = await collectMetrics();\n\n        setState((prev: any) => ({\n          ...prev,\n          metrics: initialMetrics,\n          isLoading: false,\n        }));\n      } catch (error) {\n        setState((prev: any) => ({\n          ...prev,\n          error:\n            error instanceof Error\n              ? error.message\n              : \"Performance initialization failed\",\n          isLoading: false,\n        }));\n      }\n    };\n\n    initialize();\n\n    return () => {\n      cleanupManager.current.cleanup();\n      if (metricsIntervalRef.current) {\n        clearInterval(metricsIntervalRef.current);\n      }\n    };\n  }, [\n    enableMetrics,\n    metricsInterval,\n    adaptiveMode,\n    measureFrameRate,\n    collectMetrics,\n    optimizeForDevice,\n    onPerformanceChange,\n  ]);\n\n  return {\n    ...state,\n    startMeasure,\n    endMeasure,\n    optimizeForDevice,\n    clearMetrics,\n  };\n}\n\n/**\n * Hook for performance-aware rendering\n */\nexport function usePerformanceAwareRendering<T>(\n  data: T[],\n  options: {\n    itemsPerPage?: number;\n    enableVirtualization?: boolean;\n    performanceThreshold?: number;\n  } = {}\n): {\n  visibleData: T[];\n  shouldVirtualize: boolean;\n  currentPage: number;\n  totalPages: number;\n  setPage: (page: number) => void;\n} {\n  const {\n    itemsPerPage = 50,\n    enableVirtualization = true,\n    performanceThreshold = 100,\n  } = options;\n\n  const [currentPage, setCurrentPage] = useState(0);\n  const { metrics } = useEnhancedPerformance();\n\n  const shouldVirtualize =\n    enableVirtualization &&\n    ((data?.length || 0) > performanceThreshold ||\n      (metrics?.frameRate || 60) < 30 ||\n      (metrics?.memoryUsage || 0) > 0.8);\n\n  const totalPages = Math.ceil((data?.length || 0) / itemsPerPage);\n\n  const visibleData = shouldVirtualize\n    ? data?.slice(currentPage * itemsPerPage, (currentPage + 1) * itemsPerPage)\n    : data;\n\n  const setPage = useCallback(\n    (page: number) => {\n      setCurrentPage(Math.max(0, Math.min(page, totalPages - 1)));\n    },\n    [totalPages]\n  );\n\n  return {\n    visibleData,\n    shouldVirtualize,\n    currentPage,\n    totalPages,\n    setPage,\n  };\n}\n\n/**\n * Hook for lazy loading with performance awareness\n */\nexport function usePerformanceLazyLoading(\n  enabled: boolean = true,\n  options: {\n    threshold?: number;\n    rootMargin?: string;\n    performanceMode?: \"high\" | \"balanced\" | \"low\";\n  } = {}\n): {\n  ref: React.RefObject<HTMLElement>;\n  isIntersecting: boolean;\n  shouldLoad: boolean;\n} {\n  const { threshold = 0.1, rootMargin = \"50px\", performanceMode } = options;\n  const [isIntersecting, setIsIntersecting] = useState(false);\n  const ref = useRef<HTMLElement>(null);\n  const { performanceMode: detectedMode } = useEnhancedPerformance();\n\n  const effectiveMode = performanceMode || detectedMode;\n  const shouldLoad = !enabled || isIntersecting || effectiveMode === \"high\";\n\n  useEffect(() => {\n    if (\n      !enabled ||\n      !ref.current ||\n      typeof IntersectionObserver === \"undefined\"\n    ) {\n      setIsIntersecting(true);\n      return;\n    }\n\n    const observer = new IntersectionObserver(\n      ([entry]) => {\n        setIsIntersecting(entry.isIntersecting);\n      },\n      {\n        threshold: effectiveMode === \"low\" ? 0.5 : threshold,\n        rootMargin: effectiveMode === \"low\" ? \"0px\" : rootMargin,\n      }\n    );\n\n    observer.observe(ref.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [enabled, threshold, rootMargin, effectiveMode]);\n\n  return {\n    ref,\n    isIntersecting,\n    shouldLoad,\n  };\n}\n\n/**\n * Hook for adaptive image loading based on performance\n */\nexport function useAdaptiveImageLoading(\n  src: string,\n  options: {\n    lowQualitySrc?: string;\n    webpSrc?: string;\n    avifSrc?: string;\n    sizes?: string;\n  } = {}\n): {\n  currentSrc: string;\n  isLoading: boolean;\n  error: string | null;\n} {\n  const { lowQualitySrc, webpSrc, avifSrc } = options;\n  const [currentSrc, setCurrentSrc] = useState(lowQualitySrc || src);\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n  const { metrics, performanceMode } = useEnhancedPerformance();\n\n  useEffect(() => {\n    const loadImage = async () => {\n      setIsLoading(true);\n      setError(null);\n\n      try {\n        // Determine best image format based on performance and support\n        let targetSrc = src;\n\n        if (performanceMode === \"high\" && metrics?.networkSpeed === \"4g\") {\n          // Use best quality format available\n          if (avifSrc && CSS.supports(\"image-format\", \"avif\")) {\n            targetSrc = avifSrc;\n          } else if (webpSrc && CSS.supports(\"image-format\", \"webp\")) {\n            targetSrc = webpSrc;\n          }\n        } else if (\n          performanceMode === \"low\" ||\n          metrics?.networkSpeed === \"2g\"\n        ) {\n          // Use low quality version if available\n          if (lowQualitySrc) {\n            targetSrc = lowQualitySrc;\n          }\n        }\n\n        // Preload image\n        const img = new Image();\n        img.onload = () => {\n          setCurrentSrc(targetSrc);\n          setIsLoading(false);\n        };\n        img.onerror = () => {\n          setError(\"Failed to load image\");\n          setCurrentSrc(src); // Fallback to original\n          setIsLoading(false);\n        };\n        img.src = targetSrc;\n      } catch (err) {\n        setError(err instanceof Error ? err.message : \"Image loading failed\");\n        setIsLoading(false);\n      }\n    };\n\n    loadImage();\n  }, [\n    src,\n    lowQualitySrc,\n    webpSrc,\n    avifSrc,\n    performanceMode,\n    metrics?.networkSpeed,\n  ]);\n\n  return {\n    currentSrc,\n    isLoading,\n    error,\n  };\n}\n", "import React from \"react\";\nimport { CSSProperties } from \"react\";\nimport { detectDevice } from \"../../utils/deviceCapabilities\";\n\nexport type PerformanceMode = \"high\" | \"balanced\" | \"low\";\nexport type RenderingOptimization = \"gpu\" | \"cpu\" | \"auto\";\n\nexport interface PerformanceOptions {\n  mode?: PerformanceMode;\n  rendering?: RenderingOptimization;\n  prefersReducedMotion?: boolean;\n  enableLazyLoading?: boolean;\n  enableVirtualization?: boolean;\n}\n\nexport interface BrowserMemoryInfo {\n  jsHeapSizeLimit: number;\n  totalJSHeapSize?: number;\n  usedJSHeapSize?: number;\n}\n\nexport interface DeviceCapabilitySummary {\n  supportsGPU: boolean;\n  supportsBackdropFilter: boolean;\n  prefersReducedMotion: boolean;\n  connectionSpeed: string;\n  memoryInfo: BrowserMemoryInfo | null;\n  devicePixelRatio?: number;\n}\n\ninterface NavigatorWithConnection extends Navigator {\n  connection?: {\n    effectiveType?: string;\n  };\n}\n\ninterface PerformanceWithMemory extends Performance {\n  memory?: BrowserMemoryInfo;\n}\n\n/**\n * Performance-optimized CSS properties based on device capabilities\n */\nexport const createPerformanceMixin = (\n  options: PerformanceOptions = {}\n): CSSProperties => {\n  const {\n    mode = \"balanced\",\n    rendering = \"auto\",\n    prefersReducedMotion = false,\n  } = options;\n\n  let styles: CSSProperties = {};\n\n  // Base performance optimizations\n  switch (mode) {\n    case \"high\":\n      styles = {\n        willChange: \"transform, opacity\",\n        backfaceVisibility: \"hidden\",\n        perspective: \"1000px\",\n        transformStyle: \"preserve-3d\",\n        contain: \"layout style paint\",\n      };\n      break;\n\n    case \"balanced\":\n      styles = {\n        willChange: \"auto\",\n        backfaceVisibility: \"visible\",\n        contain: \"layout paint\",\n      };\n      break;\n\n    case \"low\":\n      styles = {\n        willChange: \"auto\",\n        transform: \"none\",\n        filter: \"none\",\n        // Use createGlassStyle() instead,\n        // Use createGlassStyle() instead,\n      };\n      break;\n  }\n\n  // GPU acceleration optimizations\n  if (rendering === \"gpu\" && mode !== \"low\") {\n    styles.transform = \"translateZ(0)\";\n    styles.isolation = \"isolate\";\n  }\n\n  // Reduced motion support\n  if (prefersReducedMotion) {\n    styles.animation = \"none\";\n    styles.transition = \"none\";\n    styles.transform = \"none\";\n  }\n\n  return styles;\n};\n\n/**\n * Optimized transition mixin with fallbacks\n */\nexport const createOptimizedTransition = (\n  properties: string[],\n  duration: number = 200,\n  easing: string = \"cubic-bezier(0.4, 0, 0.2, 1)\",\n  prefersReducedMotion: boolean = false\n): CSSProperties => {\n  if (prefersReducedMotion) {\n    return {};\n  }\n\n  return {\n    transition: properties\n      .map((prop) => `${prop} ${duration}ms ${easing}`)\n      .join(\", \"),\n    transitionProperty: properties.join(\", \"),\n    transitionDuration: `${duration}ms`,\n    transitionTimingFunction: easing,\n  };\n};\n\n/**\n * Memory-efficient animation mixin\n */\nexport const createMemoryEfficientAnimation = (\n  name: string,\n  duration: number = 1000,\n  iterationCount: number | \"infinite\" = 1,\n  options: {\n    playState?: \"running\" | \"paused\";\n    fillMode?: \"none\" | \"forwards\" | \"backwards\" | \"both\";\n    prefersReducedMotion?: boolean;\n  } = {}\n): CSSProperties => {\n  const {\n    playState = \"running\",\n    fillMode = \"both\",\n    prefersReducedMotion = false,\n  } = options;\n\n  if (prefersReducedMotion) {\n    return {};\n  }\n\n  return {\n    animation: `${name} ${duration}ms ${iterationCount} ${fillMode}`,\n    animationPlayState: playState,\n    animationFillMode: fillMode,\n  };\n};\n\n/**\n * Lazy loading optimization styles\n */\nexport const createLazyLoadMixin = (\n  isLoaded: boolean = false,\n  placeholder?: string\n): CSSProperties => {\n  if (isLoaded) {\n    return {\n      opacity: 1,\n      transform: \"none\",\n    };\n  }\n\n  return {\n    opacity: 0,\n    transform: \"scale(0.95)\",\n    transition: \"opacity 300ms ease, transform 300ms ease\",\n    backgroundImage: placeholder ? `url(${placeholder})` : undefined,\n    backgroundSize: \"cover\",\n    backgroundPosition: \"center\",\n  };\n};\n\n/**\n * Virtualization container styles\n */\nexport const createVirtualizationMixin = (\n  itemHeight: number,\n  containerHeight: number,\n  overscan: number = 3\n): CSSProperties => ({\n  height: containerHeight,\n  overflow: \"auto\",\n  contain: \"strict\",\n  scrollBehavior: \"smooth\",\n  WebkitOverflowScrolling: \"touch\", // iOS momentum scrolling\n});\n\n/**\n * Intersection Observer optimization\n */\nexport const createIntersectionObserverOptions = (\n  threshold: number[] = [0, 0.25, 0.5, 0.75, 1],\n  rootMargin: string = \"50px\"\n): IntersectionObserverInit => ({\n  threshold,\n  rootMargin,\n});\n\n/**\n * Performance monitoring utilities\n */\nexport class PerformanceMonitor {\n  private static instance: PerformanceMonitor;\n  private metrics: Map<string, number[]> = new Map();\n\n  static getInstance(): PerformanceMonitor {\n    if (!PerformanceMonitor.instance) {\n      PerformanceMonitor.instance = new PerformanceMonitor();\n    }\n    return PerformanceMonitor.instance;\n  }\n\n  startMeasure(name: string): void {\n    if (typeof performance !== \"undefined\") {\n      performance.mark(`${name}-start`);\n    }\n  }\n\n  endMeasure(name: string): number | null {\n    if (typeof performance === \"undefined\") return null;\n\n    try {\n      performance.mark(`${name}-end`);\n      performance.measure(name, `${name}-start`, `${name}-end`);\n\n      const measure = performance.getEntriesByName(name, \"measure\")[0];\n      const duration = measure.duration;\n\n      // Store metric\n      if (!this.metrics.has(name)) {\n        this.metrics.set(name, []);\n      }\n      this.metrics.get(name)!.push(duration);\n\n      // Cleanup\n      performance.clearMarks(`${name}-start`);\n      performance.clearMarks(`${name}-end`);\n      performance.clearMeasures(name);\n\n      return duration;\n    } catch {\n      return null;\n    }\n  }\n\n  getAverageMetric(name: string): number | null {\n    const metrics = this.metrics.get(name);\n    if (!metrics || metrics.length === 0) return null;\n\n    return metrics.reduce((sum, value) => sum + value, 0) / metrics.length;\n  }\n\n  clearMetrics(name?: string): void {\n    if (name) {\n      this.metrics.delete(name);\n    } else {\n      this.metrics.clear();\n    }\n  }\n}\n\n/**\n * Device capability detection\n */\nexport const detectDeviceCapabilities = (): DeviceCapabilitySummary => {\n  if (typeof window === \"undefined\") {\n    return {\n      supportsGPU: false,\n      supportsBackdropFilter: false,\n      prefersReducedMotion: false,\n      connectionSpeed: \"unknown\",\n      memoryInfo: null,\n    };\n  }\n\n  const device = detectDevice();\n\n  return {\n    supportsGPU: device.capabilities.webgl,\n    supportsBackdropFilter:\n      CSS.supports(\"backdrop-filter\", \"blur(1px)\") ||\n      CSS.supports(\"-webkit-backdrop-filter\", \"blur(1px)\"),\n    prefersReducedMotion: window.matchMedia(\"(prefers-reduced-motion: reduce)\")\n      .matches,\n    connectionSpeed:\n      (navigator as NavigatorWithConnection).connection?.effectiveType ||\n      \"unknown\",\n    memoryInfo: (performance as PerformanceWithMemory).memory || null,\n    devicePixelRatio: window.devicePixelRatio || 1,\n  };\n};\n\n/**\n * Adaptive performance configuration\n */\nexport const getAdaptivePerformanceConfig = (): PerformanceOptions => {\n  const capabilities = detectDeviceCapabilities();\n\n  // Low-end device detection\n  const isLowEnd =\n    !capabilities.supportsGPU ||\n    capabilities.connectionSpeed === \"slow-2g\" ||\n    capabilities.connectionSpeed === \"2g\" ||\n    (capabilities.memoryInfo &&\n      capabilities.memoryInfo.jsHeapSizeLimit < 1000000000); // < 1GB\n\n  // High-end device detection\n  const isHighEnd =\n    capabilities.supportsGPU &&\n    capabilities.supportsBackdropFilter &&\n    (capabilities.connectionSpeed === \"4g\" ||\n      capabilities.connectionSpeed === \"5g\") &&\n    (capabilities.devicePixelRatio ?? 1) >= 2;\n\n  if (isLowEnd) {\n    return {\n      mode: \"low\",\n      rendering: \"cpu\",\n      prefersReducedMotion: true,\n      enableLazyLoading: true,\n      enableVirtualization: true,\n    };\n  }\n\n  if (isHighEnd) {\n    return {\n      mode: \"high\",\n      rendering: \"gpu\",\n      prefersReducedMotion: capabilities.prefersReducedMotion,\n      enableLazyLoading: false,\n      enableVirtualization: false,\n    };\n  }\n\n  return {\n    mode: \"balanced\",\n    rendering: \"auto\",\n    prefersReducedMotion: capabilities.prefersReducedMotion,\n    enableLazyLoading: true,\n    enableVirtualization: true,\n  };\n};\n\n/**\n * Debounced resize observer for performance\n */\nexport const createDebouncedResizeObserver = (\n  callback: (entries: ResizeObserverEntry[]) => void,\n  delay: number = 100\n): ResizeObserver | null => {\n  if (typeof ResizeObserver === \"undefined\") return null;\n\n  let timeoutId: NodeJS.Timeout;\n\n  return new ResizeObserver((entries) => {\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(() => callback(entries), delay);\n  });\n};\n\n/**\n * Memory leak prevention utilities\n */\nexport const createCleanupManager = () => {\n  const cleanupFunctions: (() => void)[] = [];\n\n  return {\n    add: (cleanup: () => void) => {\n      cleanupFunctions.push(cleanup);\n    },\n    cleanup: () => {\n      cleanupFunctions.forEach((fn) => {\n        try {\n          fn();\n        } catch {\n          // Continue running remaining cleanup callbacks.\n        }\n      });\n      cleanupFunctions.length = 0;\n    },\n  };\n};\n\n/**\n * Optimized scroll handling\n */\nexport const createOptimizedScrollHandler = (\n  handler: (event: Event) => void,\n  options: {\n    throttle?: number;\n    passive?: boolean;\n  } = {}\n) => {\n  const { throttle = 16, passive = true } = options; // 60fps by default\n  let ticking = false;\n\n  const throttledHandler = (event: Event) => {\n    if (!ticking) {\n      requestAnimationFrame(() => {\n        handler(event);\n        ticking = false;\n      });\n      ticking = true;\n    }\n  };\n\n  return {\n    handler: throttledHandler,\n    options: { passive },\n  };\n};\n", "\"use client\";\nimport React, { useState, useCallback, useEffect, useRef } from \"react\";\n\nexport interface ErrorInfo {\n  componentStack: string;\n  errorBoundary?: string;\n  timestamp: number;\n}\n\nexport interface ErrorState {\n  hasError: boolean;\n  error: Error | null;\n  errorInfo: ErrorInfo | null;\n  errorId: string | null;\n  retryCount: number;\n}\n\nexport interface ErrorBoundaryOptions {\n  maxRetries?: number;\n  resetOnPropsChange?: boolean;\n  resetTimeout?: number;\n  onError?: (error: Error, errorInfo: ErrorInfo) => void;\n  onReset?: () => void;\n  fallback?: React.ComponentType<{\n    error: Error;\n    errorInfo: ErrorInfo;\n    retry: () => void;\n  }>;\n}\n\n/**\n * Enhanced error boundary hook with retry logic and error reporting\n */\nexport function useErrorBoundary(options: ErrorBoundaryOptions = {}) {\n  const {\n    maxRetries = 3,\n    resetOnPropsChange = true,\n    resetTimeout = 5000,\n    onError,\n    onReset,\n  } = options;\n\n  const [errorState, setErrorState] = useState<ErrorState>({\n    hasError: false,\n    error: null,\n    errorInfo: null,\n    errorId: null,\n    retryCount: 0,\n  });\n\n  const resetTimeoutRef = useRef<NodeJS.Timeout>();\n  const propsHashRef = useRef<string>(\"\");\n\n  // Generate error ID for tracking\n  const generateErrorId = useCallback(() => {\n    return `error-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n  }, []);\n\n  // Capture error with enhanced information\n  const captureError = useCallback(\n    (error: Error, errorInfo?: Partial<ErrorInfo>) => {\n      const enhancedErrorInfo: ErrorInfo = {\n        componentStack: errorInfo?.componentStack || \"\",\n        errorBoundary: errorInfo?.errorBoundary || \"useErrorBoundary\",\n        timestamp: Date.now(),\n      };\n\n      const errorId = generateErrorId();\n\n      setErrorState((prev) => {\n        const newErrorState = {\n          hasError: true,\n          error,\n          errorInfo: enhancedErrorInfo,\n          errorId,\n          retryCount: prev.retryCount,\n        };\n\n        // Report error to external service\n        onError?.(error, enhancedErrorInfo);\n\n        // Auto-reset after timeout if retries available\n        if (resetTimeout > 0 && prev.retryCount < maxRetries) {\n          resetTimeoutRef.current = setTimeout(() => {\n            retry();\n          }, resetTimeout);\n        }\n\n        return newErrorState;\n      });\n    },\n    [generateErrorId, onError, resetTimeout, maxRetries]\n  );\n\n  // Reset error state\n  const resetError = useCallback(() => {\n    setErrorState({\n      hasError: false,\n      error: null,\n      errorInfo: null,\n      errorId: null,\n      retryCount: 0,\n    });\n\n    if (resetTimeoutRef.current) {\n      clearTimeout(resetTimeoutRef.current);\n    }\n\n    onReset?.();\n  }, [onReset]);\n\n  // Retry with incremented counter\n  const retry = useCallback(() => {\n    setErrorState((prev) => {\n      if (prev.retryCount >= maxRetries) {\n        return prev; // Don't retry if max retries reached\n      }\n\n      return {\n        hasError: false,\n        error: null,\n        errorInfo: null,\n        errorId: null,\n        retryCount: prev.retryCount + 1,\n      };\n    });\n\n    if (resetTimeoutRef.current) {\n      clearTimeout(resetTimeoutRef.current);\n    }\n\n    onReset?.();\n  }, [maxRetries, onReset]);\n\n  // Create error boundary wrapper\n  const withErrorBoundary = useCallback(\n    <P extends object>(\n      Component: React.ComponentType<P>,\n      fallback?: React.ComponentType<{\n        error: Error;\n        errorInfo: ErrorInfo;\n        retry: () => void;\n      }>\n    ) => {\n      return React.forwardRef<unknown, P>((props, ref) => {\n        try {\n          if (errorState.hasError && errorState.error && errorState.errorInfo) {\n            if (fallback) {\n              const FallbackComponent = fallback;\n              return (\n                <FallbackComponent\n                  error={errorState.error}\n                  errorInfo={errorState.errorInfo}\n                  retry={retry}\n                />\n              );\n            }\n\n            // Default fallback UI\n            return (\n              <div className=\"glass-p-4 glass-border glass-border-red/20 glass-surface-danger/10 glass-radius-lg\">\n                <h3 className=\"glass-text-primary glass-font-semibold glass-mb-2\">\n                  Something went wrong\n                </h3>\n                <p className=\"glass-text-secondary glass-text-sm glass-mb-3\">\n                  {errorState.error.message}\n                </p>\n                {errorState.retryCount < maxRetries && (\n                  <button\n                    onClick={retry}\n                    className=\"glass-px-3 glass-py-1 glass-surface-danger/20 glass-text-secondary glass-radius hover:glass-surface-red/30 glass-transition-colors glass-focus glass-touch-target glass-contrast-guard\"\n                  >\n                    Try Again ({maxRetries - errorState.retryCount} attempts\n                    left)\n                  </button>\n                )}\n              </div>\n            );\n          }\n\n          const ComponentWithRef = Component as React.ComponentType<\n            React.PropsWithoutRef<P> & React.RefAttributes<unknown>\n          >;\n          return <ComponentWithRef {...props} ref={ref} />;\n        } catch (error) {\n          captureError(error as Error);\n          return null;\n        }\n      });\n    },\n    [errorState, retry, maxRetries, captureError]\n  );\n\n  // Reset on props change (if enabled)\n  useEffect(() => {\n    if (!resetOnPropsChange) return;\n\n    const currentPropsHash = JSON.stringify(arguments);\n    if (propsHashRef.current !== currentPropsHash && errorState.hasError) {\n      resetError();\n    }\n    propsHashRef.current = currentPropsHash;\n  }, [resetOnPropsChange, errorState.hasError, resetError]);\n\n  // Cleanup timeouts\n  useEffect(() => {\n    return () => {\n      if (resetTimeoutRef.current) {\n        clearTimeout(resetTimeoutRef.current);\n      }\n    };\n  }, []);\n\n  return {\n    ...errorState,\n    captureError,\n    resetError,\n    retry,\n    withErrorBoundary,\n    canRetry: errorState.retryCount < maxRetries,\n  };\n}\n\n/**\n * Hook for async error handling with retry logic\n */\nexport function useAsyncError() {\n  const [error, setError] = useState<Error | null>(null);\n  const [isRetrying, setIsRetrying] = useState(false);\n  const retryCountRef = useRef(0);\n\n  const captureAsyncError = useCallback((error: Error) => {\n    setError(error);\n  }, []);\n\n  const retryAsync = useCallback(\n    async <T,>(\n      asyncFn: () => Promise<T>,\n      maxRetries: number = 3\n    ): Promise<T> => {\n      setIsRetrying(true);\n      setError(null);\n\n      for (let attempt = 0; attempt <= maxRetries; attempt++) {\n        try {\n          const result = await asyncFn();\n          setIsRetrying(false);\n          retryCountRef.current = 0;\n          return result;\n        } catch (error) {\n          if (attempt === maxRetries) {\n            captureAsyncError(error as Error);\n            setIsRetrying(false);\n            retryCountRef.current = attempt + 1;\n            throw error;\n          }\n\n          // Wait before retry with exponential backoff\n          await new Promise((resolve) =>\n            setTimeout(resolve, Math.pow(2, attempt) * 1000)\n          );\n        }\n      }\n\n      throw new Error(\"Async retry loop exited unexpectedly\");\n    },\n    [captureAsyncError]\n  );\n\n  const clearError = useCallback(() => {\n    setError(null);\n    retryCountRef.current = 0;\n  }, []);\n\n  return {\n    error,\n    isRetrying,\n    retryCount: retryCountRef.current,\n    captureAsyncError,\n    retryAsync,\n    clearError,\n  };\n}\n\n/**\n * Hook for graceful degradation\n */\nexport function useGracefulDegradation<T>(\n  primaryFeature: () => T,\n  fallbackFeature: () => T,\n  testCondition: () => boolean\n): T {\n  const [result, setResult] = useState<T>(() => {\n    try {\n      return testCondition() ? primaryFeature() : fallbackFeature();\n    } catch {\n      return fallbackFeature();\n    }\n  });\n\n  useEffect(() => {\n    try {\n      const shouldUsePrimary = testCondition();\n      setResult(shouldUsePrimary ? primaryFeature() : fallbackFeature());\n    } catch {\n      setResult(fallbackFeature());\n    }\n  }, [primaryFeature, fallbackFeature, testCondition]);\n\n  return result;\n}\n\n/**\n * Hook for error reporting and analytics\n */\nexport function useErrorReporting(\n  options: {\n    enableReporting?: boolean;\n    endpoint?: string;\n    apiKey?: string;\n    userId?: string;\n    sessionId?: string;\n  } = {}\n) {\n  const {\n    enableReporting = false,\n    endpoint,\n    apiKey,\n    userId,\n    sessionId,\n  } = options;\n\n  const reportError = useCallback(\n    async (\n      error: Error,\n      context: {\n        component?: string;\n        action?: string;\n        metadata?: Record<string, unknown>;\n      } = {}\n    ) => {\n      if (!enableReporting || !endpoint) return;\n\n      try {\n        const errorReport = {\n          message: error.message,\n          stack: error.stack,\n          timestamp: Date.now(),\n          url: window.location.href,\n          userAgent: navigator.userAgent,\n          userId,\n          sessionId,\n          context,\n        };\n\n        await fetch(endpoint, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            ...(apiKey && { Authorization: `Bearer ${apiKey}` }),\n          },\n          body: JSON.stringify(errorReport),\n        });\n      } catch {\n        // Reporting failures should not surface through the UI.\n      }\n    },\n    [enableReporting, endpoint, apiKey, userId, sessionId]\n  );\n\n  return { reportError };\n}\n", "\"use client\";\nimport React from \"react\";\nimport { useState, useEffect, useRef, useCallback } from \"react\";\nimport { useEnhancedPerformance } from \"./useEnhancedPerformance\";\n\nexport interface IntersectionOptions {\n  threshold?: number | number[];\n  rootMargin?: string;\n  root?: Element | null;\n  triggerOnce?: boolean;\n  skip?: boolean;\n  delay?: number;\n}\n\nexport interface IntersectionState {\n  isIntersecting: boolean;\n  intersectionRatio: number;\n  boundingClientRect: DOMRectReadOnly | null;\n  rootBounds: DOMRectReadOnly | null;\n  target: Element | null;\n  hasIntersected: boolean;\n}\n\n/**\n * Enhanced intersection observer hook with performance optimizations\n */\nexport function useGlassIntersection(\n  options: IntersectionOptions = {}\n): [React.RefObject<HTMLElement>, IntersectionState] {\n  const {\n    threshold = 0.1,\n    rootMargin = \"0px\",\n    root = null,\n    triggerOnce = false,\n    skip = false,\n    delay = 0,\n  } = options;\n\n  const [state, setState] = useState<IntersectionState>({\n    isIntersecting: false,\n    intersectionRatio: 0,\n    boundingClientRect: null,\n    rootBounds: null,\n    target: null,\n    hasIntersected: false,\n  });\n\n  const ref = useRef<HTMLElement>(null);\n  const observerRef = useRef<IntersectionObserver>();\n  const timeoutRef = useRef<NodeJS.Timeout>();\n  const { performanceMode } = useEnhancedPerformance();\n\n  // Performance-aware threshold adjustment\n  const adaptiveThreshold = Array.isArray(threshold)\n    ? threshold\n    : performanceMode === \"low\"\n      ? Math.max(threshold, 0.25) // Higher threshold for low-end devices\n      : threshold;\n\n  // Performance-aware root margin adjustment\n  const adaptiveRootMargin =\n    performanceMode === \"low\"\n      ? \"0px\" // No preloading for low-end devices\n      : rootMargin;\n\n  const handleIntersection = useCallback(\n    (entries: IntersectionObserverEntry[]) => {\n      const entry = entries[0];\n\n      const updateState = () => {\n        setState((prevState) => {\n          const newState: IntersectionState = {\n            isIntersecting: entry.isIntersecting,\n            intersectionRatio: entry.intersectionRatio,\n            boundingClientRect: entry.boundingClientRect,\n            rootBounds: entry.rootBounds,\n            target: entry.target,\n            hasIntersected: prevState.hasIntersected || entry.isIntersecting,\n          };\n\n          return newState;\n        });\n\n        // Disconnect observer if triggerOnce and has intersected\n        if (triggerOnce && entry.isIntersecting && observerRef.current) {\n          observerRef.current.disconnect();\n        }\n      };\n\n      // Apply delay if specified\n      if (delay > 0 && entry.isIntersecting) {\n        timeoutRef.current = setTimeout(updateState, delay);\n      } else {\n        updateState();\n      }\n    },\n    [triggerOnce, delay]\n  );\n\n  // Set up intersection observer\n  useEffect(() => {\n    if (skip || !ref.current) return;\n\n    // Clean up existing observer\n    if (observerRef.current) {\n      observerRef.current.disconnect();\n    }\n\n    // Create new observer\n    try {\n      observerRef.current = new IntersectionObserver(handleIntersection, {\n        threshold: adaptiveThreshold,\n        rootMargin: adaptiveRootMargin,\n        root,\n      });\n\n      observerRef.current.observe(ref.current);\n    } catch {\n      // Fallback: assume element is visible\n      setState((prev: any) => ({\n        ...prev,\n        isIntersecting: true,\n        hasIntersected: true,\n      }));\n    }\n\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, [skip, handleIntersection, adaptiveThreshold, adaptiveRootMargin, root]);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, []);\n\n  return [ref, state];\n}\n\n/**\n * Hook for lazy loading images with intersection observer\n */\nexport function useGlassLazyImage(\n  src: string,\n  options: IntersectionOptions & {\n    placeholder?: string;\n    lowQualitySrc?: string;\n    webpSrc?: string;\n    avifSrc?: string;\n  } = {}\n): {\n  ref: React.RefObject<HTMLImageElement>;\n  currentSrc: string;\n  isLoading: boolean;\n  isLoaded: boolean;\n  error: string | null;\n} {\n  const {\n    placeholder,\n    lowQualitySrc,\n    webpSrc,\n    avifSrc,\n    ...intersectionOptions\n  } = options;\n\n  const [elementRef, { isIntersecting, hasIntersected }] = useGlassIntersection(\n    {\n      triggerOnce: true,\n      ...intersectionOptions,\n    }\n  );\n\n  const [currentSrc, setCurrentSrc] = useState(\n    placeholder || lowQualitySrc || \"\"\n  );\n  const [isLoading, setIsLoading] = useState(false);\n  const [isLoaded, setIsLoaded] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const { performanceMode, metrics } = useEnhancedPerformance();\n\n  const imageRef = useRef<HTMLImageElement>(null);\n\n  // Determine best image format based on performance\n  const getBestImageSrc = useCallback(() => {\n    const networkSpeed = metrics?.networkSpeed || \"4g\";\n\n    // Use low quality for slow networks or low performance mode\n    if (\n      performanceMode === \"low\" ||\n      networkSpeed === \"2g\" ||\n      networkSpeed === \"slow-2g\"\n    ) {\n      return lowQualitySrc || src;\n    }\n\n    // Use modern formats for fast networks and high performance\n    if (\n      performanceMode === \"high\" &&\n      (networkSpeed === \"4g\" || networkSpeed === \"5g\")\n    ) {\n      if (avifSrc && CSS.supports(\"image-format\", \"avif\")) {\n        return avifSrc;\n      }\n      if (webpSrc && CSS.supports(\"image-format\", \"webp\")) {\n        return webpSrc;\n      }\n    }\n\n    return src;\n  }, [src, lowQualitySrc, webpSrc, avifSrc, performanceMode, metrics]);\n\n  // Load image when intersecting\n  useEffect(() => {\n    if (!isIntersecting && !hasIntersected) return;\n\n    const loadImage = async () => {\n      setIsLoading(true);\n      setError(null);\n\n      try {\n        const targetSrc = getBestImageSrc();\n        const img = new Image();\n\n        await new Promise<void>((resolve, reject) => {\n          img.onload = () => resolve();\n          img.onerror = () => reject(new Error(\"Image failed to load\"));\n          img.src = targetSrc;\n        });\n\n        setCurrentSrc(targetSrc);\n        setIsLoaded(true);\n      } catch (err) {\n        setError(err instanceof Error ? err.message : \"Failed to load image\");\n        setCurrentSrc(src); // Fallback to original\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    loadImage();\n  }, [isIntersecting, hasIntersected, getBestImageSrc, src]);\n\n  return {\n    ref: imageRef,\n    currentSrc,\n    isLoading,\n    isLoaded,\n    error,\n  };\n}\n\n/**\n * Hook for animating elements on intersection\n */\nexport function useGlassIntersectionAnimation(\n  animationClass: string = \"animate-fade-in\",\n  options: IntersectionOptions = {}\n): [React.RefObject<HTMLElement>, boolean] {\n  const [ref, { isIntersecting, hasIntersected }] = useGlassIntersection({\n    threshold: 0.1,\n    triggerOnce: true,\n    ...options,\n  });\n\n  const shouldAnimate = isIntersecting || hasIntersected;\n\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n\n    if (shouldAnimate) {\n      element.classList.add(animationClass);\n    } else {\n      element.classList.remove(animationClass);\n    }\n  }, [shouldAnimate, animationClass]);\n\n  return [ref, shouldAnimate];\n}\n\n/**\n * Hook for progressive content loading\n */\nexport function useProgressiveLoading<T>(\n  items: T[],\n  options: {\n    batchSize?: number;\n    delay?: number;\n    threshold?: number;\n  } = {}\n): {\n  visibleItems: T[];\n  isLoading: boolean;\n  loadedCount: number;\n  totalCount: number;\n  loadNext: () => void;\n  loadAll: () => void;\n  scrollRef: React.RefObject<HTMLElement>;\n} {\n  const { batchSize = 10, delay = 100, threshold = 0.8 } = options;\n\n  const [loadedCount, setLoadedCount] = useState(batchSize);\n  const [isLoading, setIsLoading] = useState(false);\n  const { performanceMode } = useEnhancedPerformance();\n\n  // Adjust batch size based on performance\n  const adaptiveBatchSize =\n    performanceMode === \"low\"\n      ? Math.max(1, Math.floor(batchSize / 2))\n      : performanceMode === \"high\"\n        ? batchSize * 2\n        : batchSize;\n\n  const visibleItems = items.slice(0, loadedCount);\n\n  const loadNext = useCallback(async () => {\n    if (isLoading || loadedCount >= items.length) return;\n\n    setIsLoading(true);\n\n    // Simulate loading delay for better UX\n    if (delay > 0) {\n      await new Promise((resolve) => setTimeout(resolve, delay));\n    }\n\n    setLoadedCount((prev: any) =>\n      Math.min(items.length, prev + adaptiveBatchSize)\n    );\n    setIsLoading(false);\n  }, [isLoading, loadedCount, items.length, delay, adaptiveBatchSize]);\n\n  const loadAll = useCallback(() => {\n    setLoadedCount(items.length);\n    setIsLoading(false);\n  }, [items.length]);\n\n  // Auto-load more when scrolled near bottom\n  const [scrollRef] = useGlassIntersection({\n    threshold: threshold,\n    rootMargin: \"100px\",\n  });\n\n  return {\n    visibleItems,\n    isLoading,\n    loadedCount,\n    totalCount: items.length,\n    loadNext,\n    loadAll,\n    scrollRef,\n  };\n}\n", "\"use client\";\nimport React, {\n  useState,\n  useEffect,\n  useCallback,\n  useRef,\n  useMemo,\n} from \"react\";\nimport { useAccessibilitySettings } from \"./useAccessibilitySettings\";\nimport { useEnhancedPerformance } from \"./useEnhancedPerformance\";\nimport {\n  createGlassStyle,\n  type GlassElevation,\n  type GlassOptions,\n} from \"../core/mixins/glassMixins\";\nimport { type QualityTier } from \"../tokens/glass\";\n\nexport interface GlassOptimizationConfig {\n  enableAdaptiveBlur?: boolean;\n  enablePerformanceMode?: boolean;\n  enableAccessibilityMode?: boolean;\n  enableBatching?: boolean;\n  maxConcurrentAnimations?: number;\n  throttleAnimations?: boolean;\n}\n\nexport interface OptimizedGlassStyles {\n  base: React.CSSProperties;\n  hover: React.CSSProperties;\n  focus: React.CSSProperties;\n  disabled: React.CSSProperties;\n  loading: React.CSSProperties;\n}\n\n/**\n * Comprehensive glass optimization hook that adapts to device capabilities and user preferences\n */\nexport function useGlassOptimization(\n  baseOptions: GlassOptions = {},\n  config: GlassOptimizationConfig = {}\n) {\n  const {\n    enableAdaptiveBlur = true,\n    enablePerformanceMode = true,\n    enableAccessibilityMode = true,\n    enableBatching = true,\n    maxConcurrentAnimations = 5,\n    throttleAnimations = true,\n  } = config;\n\n  const { settings: a11ySettings } = useAccessibilitySettings();\n  const { performanceMode, metrics } = useEnhancedPerformance();\n\n  const [optimizedOptions, setOptimizedOptions] = useState(baseOptions);\n  const [activeAnimations, setActiveAnimations] = useState(0);\n  const animationQueueRef = useRef<(() => void)[]>([]);\n  const batchTimeoutRef = useRef<NodeJS.Timeout>();\n\n  // Adaptive blur based on performance\n  const adaptiveBlur = useMemo(() => {\n    if (!enableAdaptiveBlur)\n      return baseOptions.tier === \"low\" ? \"subtle\" : \"medium\";\n\n    const frameRate = metrics?.frameRate || 60;\n    const memoryUsage = metrics?.memoryUsage || 0;\n\n    if (performanceMode === \"low\" || frameRate < 30 || memoryUsage > 0.8) {\n      return \"subtle\";\n    } else if (\n      performanceMode === \"high\" &&\n      frameRate >= 60 &&\n      memoryUsage < 0.5\n    ) {\n      return \"intense\";\n    }\n\n    return \"medium\";\n  }, [enableAdaptiveBlur, baseOptions.tier, metrics, performanceMode]);\n\n  // Get tier based on adaptive blur (for backwards compatibility)\n  const getTierFromBlur = (blur: string): QualityTier => {\n    switch (blur) {\n      case \"subtle\":\n        return \"low\";\n      case \"intense\":\n        return \"high\";\n      default:\n        return \"medium\";\n    }\n  };\n\n  // Performance-aware options\n  const performanceAwareOptions = useMemo(() => {\n    let options = { ...baseOptions };\n\n    if (enablePerformanceMode) {\n      switch (performanceMode) {\n        case \"low\":\n          options = {\n            ...options,\n            elevation: \"level1\",\n            tier: \"low\",\n          };\n          break;\n        case \"high\":\n          options = {\n            ...options,\n            tier: \"high\",\n          };\n          break;\n        default:\n          options = {\n            ...options,\n            tier: \"medium\",\n          };\n      }\n    }\n\n    return options;\n  }, [baseOptions, enablePerformanceMode, performanceMode]);\n\n  // Accessibility-aware options\n  const accessibilityAwareOptions = useMemo(() => {\n    if (!enableAccessibilityMode) return performanceAwareOptions;\n\n    let options = { ...performanceAwareOptions };\n\n    // Reduce effects for users who prefer reduced motion\n    if (a11ySettings.reducedMotion) {\n      options = {\n        ...options,\n        interactive: false,\n        elevation: \"level1\",\n      };\n    }\n\n    // Enhance contrast for high contrast mode\n    if (a11ySettings.highContrast) {\n      options = {\n        ...options,\n        intent: \"neutral\",\n        tier: \"high\",\n      };\n    }\n\n    // Adjust for forced colors mode\n    if (a11ySettings.forcedColors) {\n      options = {\n        ...options,\n        intent: \"neutral\",\n        tier: \"high\",\n      };\n    }\n\n    return options;\n  }, [performanceAwareOptions, enableAccessibilityMode, a11ySettings]);\n\n  // Update optimized options when dependencies change\n  useEffect(() => {\n    setOptimizedOptions(accessibilityAwareOptions);\n  }, [accessibilityAwareOptions]);\n\n  // Generate optimized styles\n  const optimizedStyles = useMemo((): OptimizedGlassStyles => {\n    const performanceOptions = {\n      mode: performanceMode,\n      prefersReducedMotion: a11ySettings.reducedMotion,\n    };\n\n    const baseStyles = {\n      ...createGlassStyle(optimizedOptions),\n      // Performance options applied directly\n    };\n\n    return {\n      base: baseStyles,\n      hover: {\n        ...baseStyles,\n        transform: a11ySettings.reducedMotion\n          ? \"none\"\n          : \"translateY(-2px) scale(1.02)\",\n        boxShadow: optimizedOptions.elevation\n          ? `0 8px 32px rgba(0, 0, 0, 0.2)`\n          : baseStyles.boxShadow,\n      },\n      focus: {\n        ...baseStyles,\n        outline: \"none\",\n        boxShadow: `${baseStyles.boxShadow}, 0 0 0 3px hsl(var(--glass-color-primary)/0.3)`,\n      },\n      disabled: {\n        ...baseStyles,\n        opacity: 0.5,\n        cursor: \"not-allowed\",\n        pointerEvents: \"none\",\n        filter: \"grayscale(0.3)\",\n      },\n      loading: {\n        ...baseStyles,\n        position: \"relative\",\n        overflow: \"hidden\",\n        // Note: CSS pseudo-elements cannot be applied via React.CSSProperties.\n        // Use companion CSS modules or dedicated classnames for complex layering.\n      },\n    };\n  }, [optimizedOptions, performanceMode, a11ySettings]);\n\n  // Animation batching system\n  const batchAnimation = useCallback(\n    (animationFn: () => void) => {\n      if (!enableBatching) {\n        animationFn();\n        return;\n      }\n\n      animationQueueRef.current.push(animationFn);\n\n      if (batchTimeoutRef.current) {\n        clearTimeout(batchTimeoutRef.current);\n      }\n\n      batchTimeoutRef.current = setTimeout(() => {\n        const animations = animationQueueRef.current.splice(0);\n\n        // Execute animations in batches to avoid overwhelming the browser\n        const batchSize = Math.min(animations.length, maxConcurrentAnimations);\n\n        for (let i = 0; i < animations.length; i += batchSize) {\n          const batch = animations.slice(i, i + batchSize);\n\n          setTimeout(() => {\n            batch.forEach((animation: any) => {\n              try {\n                animation();\n              } catch {\n                // Continue the remaining animation batch.\n              }\n            });\n          }, i * 16); // Stagger batches by 16ms (60fps)\n        }\n      }, 16); // Batch animations for one frame\n    },\n    [enableBatching, maxConcurrentAnimations]\n  );\n\n  // Throttled animation executor\n  const executeAnimation = useCallback(\n    (animationFn: () => void) => {\n      if (!throttleAnimations || activeAnimations < maxConcurrentAnimations) {\n        setActiveAnimations((prev: any) => prev + 1);\n\n        try {\n          animationFn();\n        } finally {\n          // Decrement counter after animation completes\n          setTimeout(() => {\n            setActiveAnimations((prev: any) => Math.max(0, prev - 1));\n          }, 300); // Assume average animation duration\n        }\n      } else {\n        // Queue animation for later execution\n        batchAnimation(animationFn);\n      }\n    },\n    [\n      throttleAnimations,\n      activeAnimations,\n      maxConcurrentAnimations,\n      batchAnimation,\n    ]\n  );\n\n  // Cleanup batched animations on unmount\n  useEffect(() => {\n    return () => {\n      if (batchTimeoutRef.current) {\n        clearTimeout(batchTimeoutRef.current);\n      }\n      animationQueueRef.current = [];\n    };\n  }, []);\n\n  return {\n    optimizedOptions,\n    optimizedStyles,\n    performanceMode,\n    isHighPerformance: performanceMode === \"high\",\n    isLowPerformance: performanceMode === \"low\",\n    shouldReduceEffects:\n      a11ySettings.reducedMotion || performanceMode === \"low\",\n    shouldUseHighContrast: a11ySettings.highContrast,\n    executeAnimation,\n    batchAnimation,\n    activeAnimations,\n    metrics,\n  };\n}\n\n/**\n * Hook for optimized glass component rendering\n */\nexport function useOptimizedGlassComponent<P extends object>(\n  Component: React.ComponentType<P>,\n  glassOptions: GlassOptions = {},\n  optimizationConfig: GlassOptimizationConfig = {}\n) {\n  const { optimizedStyles, shouldReduceEffects, executeAnimation } =\n    useGlassOptimization(glassOptions, optimizationConfig);\n\n  const OptimizedComponent = useMemo(() => {\n    return React.memo(\n      React.forwardRef<HTMLElement, P>((props, ref) => {\n        const componentRef = useRef<HTMLElement>(null);\n        const mergedRef = useCallback(\n          (node: HTMLElement | null) => {\n            if (componentRef.current !== node) {\n              (\n                componentRef as React.MutableRefObject<HTMLElement | null>\n              ).current = node;\n            }\n            if (typeof ref === \"function\") {\n              ref(node);\n            } else if (ref) {\n              (ref as React.MutableRefObject<HTMLElement | null>).current =\n                node;\n            }\n          },\n          [ref]\n        );\n\n        // Apply optimized styles\n        useEffect(() => {\n          const element = componentRef.current;\n          if (!element) return;\n\n          Object.assign(element.style, optimizedStyles.base);\n\n          // Set up interaction handlers if not reduced motion\n          if (!shouldReduceEffects) {\n            const handleMouseEnter = () => {\n              executeAnimation(() => {\n                Object.assign(element.style, optimizedStyles.hover);\n              });\n            };\n\n            const handleMouseLeave = () => {\n              executeAnimation(() => {\n                Object.assign(element.style, optimizedStyles.base);\n              });\n            };\n\n            element.addEventListener(\"mouseenter\", handleMouseEnter);\n            element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n            return () => {\n              element.removeEventListener(\"mouseenter\", handleMouseEnter);\n              element.removeEventListener(\"mouseleave\", handleMouseLeave);\n            };\n          }\n        }, []);\n\n        return <Component {...(props as P)} ref={mergedRef} />;\n      })\n    );\n  }, [Component, optimizedStyles, shouldReduceEffects, executeAnimation]);\n\n  return OptimizedComponent;\n}\n\n/**\n * Hook for adaptive component loading based on performance\n */\nexport function useAdaptiveComponentLoading<T>(\n  heavyComponent: () => Promise<{ default: React.ComponentType<T> }>,\n  lightComponent: React.ComponentType<T>,\n  threshold: {\n    memoryUsage?: number;\n    frameRate?: number;\n    networkSpeed?: string[];\n  } = {}\n): {\n  Component: React.ComponentType<T> | null;\n  isLoading: boolean;\n  error: Error | null;\n} {\n  const {\n    memoryUsage = 0.7,\n    frameRate = 45,\n    networkSpeed = [\"4g\", \"5g\"],\n  } = threshold;\n\n  const [Component, setComponent] = useState<React.ComponentType<T> | null>(\n    null\n  );\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<Error | null>(null);\n  const { metrics } = useEnhancedPerformance();\n\n  useEffect(() => {\n    const loadComponent = async () => {\n      try {\n        setIsLoading(true);\n        setError(null);\n\n        // Determine if we should load the heavy component\n        const shouldLoadHeavy =\n          !metrics ||\n          (metrics.memoryUsage < memoryUsage &&\n            metrics.frameRate >= frameRate &&\n            networkSpeed.includes(metrics.networkSpeed));\n\n        if (shouldLoadHeavy) {\n          const heavyModule = await heavyComponent();\n          setComponent(() => heavyModule.default);\n        } else {\n          setComponent(() => lightComponent);\n        }\n      } catch (err) {\n        setError(err as Error);\n        setComponent(() => lightComponent); // Fallback to light component\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    loadComponent();\n  }, [\n    heavyComponent,\n    lightComponent,\n    metrics,\n    memoryUsage,\n    frameRate,\n    networkSpeed,\n  ]);\n\n  return {\n    Component,\n    isLoading,\n    error,\n  };\n}\n", "'use client';\nimport { useEffect, useState } from 'react';\nimport { isBrowser, safeMatchMedia } from '../utils/env';\n\n/**\n * Enhanced hook for detecting user's reduced motion preference.\n *\n * This hook monitors the user's system-level preference for reduced motion\n * and updates reactively when the preference changes. It's SSR-safe and\n * provides more granular control compared to the basic `useReducedMotion` hook.\n *\n * @returns {boolean} True if the user prefers reduced motion, false otherwise\n *\n * @example\n * ```tsx\n * function AnimatedComponent() {\n *   const prefersReducedMotion = useEnhancedReducedMotion();\n *\n *   return (\n *     <motion.div\n *       animate={{ opacity: 1 }}\n *       transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }}\n *     >\n *       Content\n *     </motion.div>\n *   );\n * }\n * ```\n *\n * @see {@link useReducedMotion} for a simpler version\n */\nexport function useEnhancedReducedMotion(): boolean {\n  const [prefersReducedMotion, setPrefersReducedMotion] = useState(() => {\n    // SSR-safe initialization with conservative default\n    return safeMatchMedia('(prefers-reduced-motion: reduce)')?.matches ?? true;\n  });\n\n  useEffect(() => {\n    if (!isBrowser()) return;\n\n    const mediaQuery = safeMatchMedia('(prefers-reduced-motion: reduce)');\n    if (!mediaQuery) return;\n\n    setPrefersReducedMotion(mediaQuery.matches);\n\n    const handleChange = (event: MediaQueryListEvent) => {\n      setPrefersReducedMotion(event.matches);\n    };\n\n    if (typeof mediaQuery.addEventListener === 'function') {\n      mediaQuery.addEventListener('change', handleChange);\n      return () => mediaQuery.removeEventListener('change', handleChange);\n    }\n\n    if (typeof (mediaQuery as any).addListener === 'function') {\n      (mediaQuery as any).addListener(handleChange);\n      return () => (mediaQuery as any).removeListener(handleChange);\n    }\n  }, []);\n\n  return prefersReducedMotion;\n}", "'use client';\nimport React from 'react';\nimport { useRef, useEffect, useCallback, useState } from 'react';\nimport { useAccessibleAnimation } from './useAccessibilitySettings';\n\nexport interface PhysicsInteractionOptions {\n  scale?: number;\n  duration?: number;\n  easing?: string;\n  damping?: number;\n  stiffness?: number;\n  mass?: number;\n  enableHover?: boolean;\n  enableClick?: boolean;\n  enableDrag?: boolean;\n  threshold?: number;\n  onInteractionStart?: () => void;\n  onInteractionEnd?: () => void;\n}\n\nexport interface PhysicsState {\n  isInteracting: boolean;\n  velocity: { x: number; y: number };\n  position: { x: number; y: number };\n  scale: number;\n  rotation: number;\n}\n\nconst DEFAULT_OPTIONS: Required<PhysicsInteractionOptions> = {\n  scale: 1.02,\n  duration: 200,\n  easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  damping: 0.8,\n  stiffness: 100,\n  mass: 1,\n  enableHover: true,\n  enableClick: true,\n  enableDrag: false,\n  threshold: 5,\n  onInteractionStart: () => {},\n  onInteractionEnd: () => {},\n};\n\n/**\n * Enhanced physics interaction hook with spring animations and accessibility\n */\nexport function usePhysicsInteraction(options: PhysicsInteractionOptions = {}) {\n  const mergedOptions = { ...DEFAULT_OPTIONS, ...options };\n  const {\n    scale,\n    duration,\n    easing,\n    damping,\n    stiffness,\n    mass,\n    enableHover,\n    enableClick,\n    enableDrag,\n    threshold,\n    onInteractionStart,\n    onInteractionEnd,\n  } = mergedOptions;\n\n  const ref = useRef<HTMLElement>(null);\n  const animationFrameRef = useRef<number>();\n  const isDraggingRef = useRef(false);\n  const startPositionRef = useRef({ x: 0, y: 0 });\n  const velocityRef = useRef({ x: 0, y: 0 });\n\n  const [physicsState, setPhysicsState] = useState<PhysicsState>({\n    isInteracting: false,\n    velocity: { x: 0, y: 0 },\n    position: { x: 0, y: 0 },\n    scale: 1,\n    rotation: 0,\n  });\n\n  const { shouldAnimate, transitionDuration } = useAccessibleAnimation();\n\n  // Spring physics calculation\n  const calculateSpringForce = useCallback((\n    current: number,\n    target: number,\n    velocity: number\n  ): { position: number; velocity: number } => {\n    const force = -stiffness * (current - target) - damping * velocity;\n    const acceleration = force / mass;\n    const newVelocity = velocity + acceleration * 0.016; // 60fps\n    const newPosition = current + newVelocity * 0.016;\n\n    return { position: newPosition, velocity: newVelocity };\n  }, [stiffness, damping, mass]);\n\n  // Apply transform with physics\n  const applyTransform = useCallback((element: HTMLElement, state: Partial<PhysicsState>) => {\n    if (!shouldAnimate) return;\n\n    const transforms = [];\n    \n    if (state.position) {\n      transforms.push(`translate3d(${state.position.x}px, ${state.position.y}px, 0)`);\n    }\n    \n    if (state.scale && state.scale !== 1) {\n      transforms.push(`scale(${state.scale})`);\n    }\n    \n    if (state.rotation && state.rotation !== 0) {\n      transforms.push(`rotate(${state.rotation}deg)`);\n    }\n\n    element.style.transform = transforms.length > 0 ? transforms.join(' ') : 'none';\n    element.style.transition = shouldAnimate \n      ? `transform ${transitionDuration}ms ${easing}`\n      : 'none';\n  }, [shouldAnimate, transitionDuration, easing]);\n\n  // Animation loop for spring physics\n  const animateSpring = useCallback(() => {\n    const element = ref.current;\n    if (!element || !physicsState.isInteracting) return;\n\n    setPhysicsState(prevState => {\n      const targetX = isDraggingRef.current ? prevState.position.x : 0;\n      const targetY = isDraggingRef.current ? prevState.position.y : 0;\n      const targetScale = prevState.isInteracting ? scale : 1;\n\n      const newX = calculateSpringForce(prevState.position.x, targetX, prevState.velocity.x);\n      const newY = calculateSpringForce(prevState.position.y, targetY, prevState.velocity.y);\n      const newScale = calculateSpringForce(prevState.scale, targetScale, 0);\n\n      const newState = {\n        ...prevState,\n        position: { x: newX.position, y: newY.position },\n        velocity: { x: newX.velocity, y: newY.velocity },\n        scale: newScale.position,\n      };\n\n      applyTransform(element, newState);\n\n      // Check if animation should continue\n      const isStable = (\n        Math.abs(newX.velocity) < 0.01 &&\n        Math.abs(newY.velocity) < 0.01 &&\n        Math.abs(newState.scale - targetScale) < 0.001\n      );\n\n      if (isStable && !isDraggingRef.current) {\n        return { ...newState, isInteracting: false };\n      }\n\n      return newState;\n    });\n\n    if (physicsState.isInteracting) {\n      animationFrameRef.current = requestAnimationFrame(animateSpring);\n    }\n  }, [physicsState.isInteracting, scale, calculateSpringForce, applyTransform]);\n\n  // Start interaction\n  const startInteraction = useCallback(() => {\n    setPhysicsState((prev: any) => ({ ...prev, isInteracting: true }));\n    onInteractionStart();\n    \n    if (shouldAnimate && !animationFrameRef.current) {\n      animateSpring();\n    }\n  }, [shouldAnimate, animateSpring, onInteractionStart]);\n\n  // End interaction\n  const endInteraction = useCallback(() => {\n    isDraggingRef.current = false;\n    onInteractionEnd();\n    \n    // Let spring animation finish naturally\n    setTimeout(() => {\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n        animationFrameRef.current = undefined;\n      }\n    }, duration);\n  }, [duration, onInteractionEnd]);\n\n  // Mouse/Touch event handlers\n  const handlePointerDown = useCallback((e: PointerEvent) => {\n    if (!enableClick && !enableDrag) return;\n\n    startPositionRef.current = { x: e.clientX, y: e.clientY };\n    \n    if (enableDrag) {\n      isDraggingRef.current = true;\n      startInteraction();\n    }\n  }, [enableClick, enableDrag, startInteraction]);\n\n  const handlePointerMove = useCallback((e: PointerEvent) => {\n    if (!isDraggingRef.current || !enableDrag) return;\n\n    const deltaX = e.clientX - startPositionRef.current.x;\n    const deltaY = e.clientY - startPositionRef.current.y;\n\n    if (Math.abs(deltaX) > threshold || Math.abs(deltaY) > threshold) {\n      setPhysicsState((prev: any) => ({\n        ...prev,\n        position: { x: deltaX * 0.5, y: deltaY * 0.5 }, // Damped movement\n      }));\n    }\n  }, [enableDrag, threshold]);\n\n  const handlePointerUp = useCallback(() => {\n    if (isDraggingRef.current) {\n      endInteraction();\n    }\n  }, [endInteraction]);\n\n  const handleMouseEnter = useCallback(() => {\n    if (!enableHover || !shouldAnimate) return;\n    \n    const element = ref.current;\n    if (!element) return;\n\n    startInteraction();\n    applyTransform(element, { scale });\n  }, [enableHover, shouldAnimate, startInteraction, applyTransform, scale]);\n\n  const handleMouseLeave = useCallback(() => {\n    if (!enableHover || !shouldAnimate) return;\n    \n    const element = ref.current;\n    if (!element) return;\n\n    endInteraction();\n    applyTransform(element, { scale: 1, position: { x: 0, y: 0 } });\n  }, [enableHover, shouldAnimate, endInteraction, applyTransform]);\n\n  const handleClick = useCallback(() => {\n    if (!enableClick || !shouldAnimate) return;\n\n    const element = ref.current;\n    if (!element) return;\n\n    // Quick scale animation for click feedback\n    applyTransform(element, { scale: scale * 0.95 });\n    setTimeout(() => {\n      applyTransform(element, { scale: 1 });\n    }, 100);\n  }, [enableClick, shouldAnimate, applyTransform, scale]);\n\n  // Set up event listeners\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n\n    // Mouse events\n    if (enableHover) {\n      element.addEventListener('mouseenter', handleMouseEnter, { passive: true });\n      element.addEventListener('mouseleave', handleMouseLeave, { passive: true });\n    }\n\n    if (enableClick) {\n      element.addEventListener('click', handleClick, { passive: true });\n    }\n\n    // Pointer events for drag\n    if (enableDrag) {\n      element.addEventListener('pointerdown', handlePointerDown, { passive: true });\n      document.addEventListener('pointermove', handlePointerMove, { passive: true });\n      document.addEventListener('pointerup', handlePointerUp, { passive: true });\n    }\n\n    // Keyboard support for accessibility\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === 'Enter' || e.key === ' ') {\n        handleClick();\n      }\n    };\n\n    element.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      // Cleanup event listeners\n      element.removeEventListener('mouseenter', handleMouseEnter);\n      element.removeEventListener('mouseleave', handleMouseLeave);\n      element.removeEventListener('click', handleClick);\n      element.removeEventListener('pointerdown', handlePointerDown);\n      element.removeEventListener('keydown', handleKeyDown);\n      \n      document.removeEventListener('pointermove', handlePointerMove);\n      document.removeEventListener('pointerup', handlePointerUp);\n\n      // Cleanup animation\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, [\n    enableHover,\n    enableClick,\n    enableDrag,\n    handleMouseEnter,\n    handleMouseLeave,\n    handleClick,\n    handlePointerDown,\n    handlePointerMove,\n    handlePointerUp,\n  ]);\n\n  return {\n    ref,\n    physicsState,\n    isInteracting: physicsState.isInteracting,\n    startInteraction,\n    endInteraction,\n  };\n}\n\n/**\n * Simplified physics interaction hook for basic hover effects\n */\nexport function useSimplePhysicsHover(scale: number = 1.02, duration: number = 200) {\n  return usePhysicsInteraction({\n    scale,\n    duration,\n    enableHover: true,\n    enableClick: false,\n    enableDrag: false,\n  });\n}\n\n/**\n * Physics interaction hook optimized for buttons\n */\nexport function usePhysicsButton(options: Partial<PhysicsInteractionOptions> = {}) {\n  return usePhysicsInteraction({\n    scale: 0.95,\n    duration: 150,\n    enableHover: true,\n    enableClick: true,\n    enableDrag: false,\n    ...options,\n  });\n}\n\n/**\n * Physics interaction hook for draggable elements\n */\nexport function usePhysicsDrag(options: Partial<PhysicsInteractionOptions> = {}) {\n  return usePhysicsInteraction({\n    scale: 1.05,\n    duration: 300,\n    enableHover: false,\n    enableClick: false,\n    enableDrag: true,\n    damping: 0.9,\n    stiffness: 150,\n    ...options,\n  });\n}", "\"use client\";\nimport React from \"react\";\nimport { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { useEnhancedPerformance } from \"./useEnhancedPerformance\";\n\nexport interface VirtualizationOptions {\n  itemHeight: number | ((index: number) => number);\n  containerHeight: number;\n  overscan?: number;\n  enableHorizontal?: boolean;\n  itemWidth?: number | ((index: number) => number);\n  containerWidth?: number;\n  threshold?: number;\n  onScroll?: (scrollTop: number, scrollLeft: number) => void;\n}\n\nexport interface VirtualizedItem<T> {\n  index: number;\n  data: T;\n  style: React.CSSProperties;\n}\n\nexport interface VirtualizationState<T> {\n  startIndex: number;\n  endIndex: number;\n  visibleItems: VirtualizedItem<T>[];\n  totalHeight: number;\n  totalWidth: number;\n  scrollTop: number;\n  scrollLeft: number;\n}\n\n/**\n * High-performance virtualization hook for large datasets\n */\nexport function useVirtualization<T>(\n  items: T[],\n  options: VirtualizationOptions\n): VirtualizationState<T> & {\n  containerProps: React.HTMLAttributes<HTMLDivElement> & {\n    ref: React.RefObject<HTMLDivElement>;\n  };\n  scrollElementProps: React.HTMLAttributes<HTMLDivElement>;\n  measureElement: (index: number, element: HTMLElement) => void;\n  scrollToIndex: (index: number, align?: \"start\" | \"center\" | \"end\") => void;\n} {\n  const {\n    itemHeight,\n    containerHeight,\n    overscan = 3,\n    enableHorizontal = false,\n    itemWidth,\n    containerWidth = 0,\n    threshold = 100,\n    onScroll,\n  } = options;\n\n  const [scrollTop, setScrollTop] = useState(0);\n  const [scrollLeft, setScrollLeft] = useState(0);\n  const [measuredSizes, setMeasuredSizes] = useState<\n    Map<number, { width: number; height: number }>\n  >(new Map());\n\n  const { performanceMode } = useEnhancedPerformance();\n  const containerRef = useRef<HTMLDivElement>(null);\n  const isScrollingRef = useRef(false);\n  const scrollTimeoutRef = useRef<NodeJS.Timeout>();\n\n  // Calculate item dimensions\n  const getItemHeight = useCallback(\n    (index: number): number => {\n      if (typeof itemHeight === \"function\") {\n        return itemHeight(index);\n      }\n      return measuredSizes.get(index)?.height || itemHeight;\n    },\n    [itemHeight, measuredSizes]\n  );\n\n  const getItemWidth = useCallback(\n    (index: number): number => {\n      if (!enableHorizontal || !itemWidth) return containerWidth;\n\n      if (typeof itemWidth === \"function\") {\n        return itemWidth(index);\n      }\n      return measuredSizes.get(index)?.width || itemWidth;\n    },\n    [enableHorizontal, itemWidth, containerWidth, measuredSizes]\n  );\n\n  // Calculate total dimensions\n  const totalHeight = useMemo(() => {\n    if (typeof itemHeight === \"number\") {\n      return (items?.length || 0) * itemHeight;\n    }\n\n    let total = 0;\n    for (let i = 0; i < (items?.length || 0); i++) {\n      total += getItemHeight(i);\n    }\n    return total;\n  }, [items.length, itemHeight, getItemHeight]);\n\n  const totalWidth = useMemo(() => {\n    if (!enableHorizontal || typeof itemWidth === \"number\") {\n      return containerWidth;\n    }\n\n    let total = 0;\n    for (let i = 0; i < (items?.length || 0); i++) {\n      total += getItemWidth(i);\n    }\n    return total;\n  }, [enableHorizontal, itemWidth, containerWidth, items.length, getItemWidth]);\n\n  // Calculate visible range\n  const visibleRange = useMemo(() => {\n    let startIndex = 0;\n    let endIndex = items.length - 1;\n\n    if (typeof itemHeight === \"number\") {\n      // Fixed height optimization\n      startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n      endIndex = Math.min(\n        (items?.length || 1) - 1,\n        Math.ceil((scrollTop + containerHeight) / itemHeight) + overscan\n      );\n    } else {\n      // Variable height calculation\n      let currentOffset = 0;\n\n      // Find start index\n      for (let i = 0; i < (items?.length || 0); i++) {\n        const height = getItemHeight(i);\n        if (currentOffset + height > scrollTop) {\n          startIndex = Math.max(0, i - overscan);\n          break;\n        }\n        currentOffset += height;\n      }\n\n      // Find end index\n      currentOffset = 0;\n      for (let i = 0; i < startIndex; i++) {\n        currentOffset += getItemHeight(i);\n      }\n\n      for (let i = startIndex; i < items.length; i++) {\n        const height = getItemHeight(i);\n        if (currentOffset > scrollTop + containerHeight) {\n          endIndex = Math.min(items.length - 1, i + overscan);\n          break;\n        }\n        currentOffset += height;\n      }\n    }\n\n    return { startIndex, endIndex };\n  }, [\n    items.length,\n    itemHeight,\n    scrollTop,\n    containerHeight,\n    overscan,\n    getItemHeight,\n  ]);\n\n  // Calculate visible items with positions\n  const visibleItems = useMemo((): VirtualizedItem<T>[] => {\n    const result: VirtualizedItem<T>[] = [];\n    let currentOffset = 0;\n\n    // Calculate offset to start index\n    for (let i = 0; i < visibleRange.startIndex; i++) {\n      currentOffset += getItemHeight(i);\n    }\n\n    // Generate visible items\n    for (\n      let i = visibleRange.startIndex;\n      i <= visibleRange.endIndex && i < items.length;\n      i++\n    ) {\n      const height = getItemHeight(i);\n      const width = getItemWidth(i);\n\n      result.push({\n        index: i,\n        data: items[i],\n        style: {\n          position: \"absolute\",\n          top: currentOffset,\n          left: enableHorizontal ? 0 : undefined,\n          width: enableHorizontal ? width : \"100%\",\n          height,\n          contain: \"layout style paint\",\n        },\n      });\n\n      currentOffset += height;\n    }\n\n    return result;\n  }, [visibleRange, items, getItemHeight, getItemWidth, enableHorizontal]);\n\n  // Measure element size\n  const measureElement = useCallback((index: number, element: HTMLElement) => {\n    if (!element) return;\n\n    const rect = element.getBoundingClientRect();\n    setMeasuredSizes(\n      (prev: any) =>\n        new Map(\n          prev.set(index, {\n            width: rect.width,\n            height: rect.height,\n          })\n        )\n    );\n  }, []);\n\n  // Optimized scroll handler\n  const handleScroll = useCallback(\n    (e: React.UIEvent<HTMLDivElement>) => {\n      const target = e.currentTarget;\n      const newScrollTop = target.scrollTop;\n      const newScrollLeft = target.scrollLeft;\n\n      setScrollTop(newScrollTop);\n      setScrollLeft(newScrollLeft);\n\n      isScrollingRef.current = true;\n\n      // Clear existing timeout\n      if (scrollTimeoutRef.current) {\n        clearTimeout(scrollTimeoutRef.current);\n      }\n\n      // Set timeout to detect end of scrolling\n      scrollTimeoutRef.current = setTimeout(() => {\n        isScrollingRef.current = false;\n      }, 150);\n\n      onScroll?.(newScrollTop, newScrollLeft);\n    },\n    [onScroll]\n  );\n\n  // Scroll to index\n  const scrollToIndex = useCallback(\n    (index: number, align: \"start\" | \"center\" | \"end\" = \"start\") => {\n      if (!containerRef.current) return;\n\n      let offset = 0;\n      for (let i = 0; i < index; i++) {\n        offset += getItemHeight(i);\n      }\n\n      const itemHeight = getItemHeight(index);\n\n      switch (align) {\n        case \"center\":\n          offset -= (containerHeight - itemHeight) / 2;\n          break;\n        case \"end\":\n          offset -= containerHeight - itemHeight;\n          break;\n      }\n\n      containerRef.current.scrollTo({\n        top: Math.max(0, offset),\n        behavior: \"smooth\",\n      });\n    },\n    [getItemHeight, containerHeight]\n  );\n\n  // Performance optimization: disable virtualization for small lists\n  const shouldVirtualize = useMemo(() => {\n    if (performanceMode === \"high\") return (items?.length || 0) > threshold * 2;\n    if (performanceMode === \"low\") return (items?.length || 0) > threshold / 2;\n    return (items?.length || 0) > threshold;\n  }, [items?.length, threshold, performanceMode]);\n\n  // Container props\n  const containerProps: React.HTMLAttributes<HTMLDivElement> & {\n    ref: React.RefObject<HTMLDivElement>;\n  } = {\n    ref: containerRef,\n    onScroll: handleScroll,\n    style: {\n      height: containerHeight,\n      width: enableHorizontal ? containerWidth : \"100%\",\n      overflow: \"auto\",\n      contain: \"strict\",\n      WebkitOverflowScrolling: \"touch\",\n    },\n  };\n\n  // Scroll element props (inner container)\n  const scrollElementProps: React.HTMLAttributes<HTMLDivElement> = {\n    style: {\n      height: totalHeight,\n      width: enableHorizontal ? totalWidth : \"100%\",\n      position: \"relative\",\n      contain: \"layout\",\n    },\n  };\n\n  // Return all items if virtualization is disabled\n  const finalVisibleItems = shouldVirtualize\n    ? visibleItems\n    : items.map((data, index) => ({\n        index,\n        data,\n        style: {\n          position: \"relative\" as const,\n          contain: \"layout style paint\",\n        },\n      }));\n\n  return {\n    startIndex: shouldVirtualize ? visibleRange.startIndex : 0,\n    endIndex: shouldVirtualize ? visibleRange.endIndex : items.length - 1,\n    visibleItems: finalVisibleItems,\n    totalHeight,\n    totalWidth,\n    scrollTop,\n    scrollLeft,\n    containerProps,\n    scrollElementProps,\n    measureElement,\n    scrollToIndex,\n  };\n}\n\n/**\n * Hook for grid virtualization\n */\nexport function useGridVirtualization<T>(\n  items: T[],\n  options: {\n    itemHeight: number;\n    itemWidth: number;\n    containerHeight: number;\n    containerWidth: number;\n    columns: number;\n    gap?: number;\n    overscan?: number;\n  }\n) {\n  const {\n    itemHeight,\n    itemWidth,\n    containerHeight,\n    containerWidth,\n    columns,\n    gap = 0,\n    overscan = 3,\n  } = options;\n\n  const [scrollTop, setScrollTop] = useState(0);\n  const rows = Math.ceil(items.length / columns);\n  const totalHeight = rows * (itemHeight + gap) - gap;\n\n  const startRow = Math.max(\n    0,\n    Math.floor(scrollTop / (itemHeight + gap)) - overscan\n  );\n  const endRow = Math.min(\n    rows - 1,\n    Math.ceil((scrollTop + containerHeight) / (itemHeight + gap)) + overscan\n  );\n\n  const visibleItems = useMemo(() => {\n    const result: Array<VirtualizedItem<T> & { row: number; col: number }> = [];\n\n    for (let row = startRow; row <= endRow; row++) {\n      for (let col = 0; col < columns; col++) {\n        const index = row * columns + col;\n        if (index >= (items?.length || 0)) break;\n\n        result.push({\n          index,\n          data: items[index],\n          row,\n          col,\n          style: {\n            position: \"absolute\",\n            top: row * (itemHeight + gap),\n            left: col * (itemWidth + gap),\n            width: itemWidth,\n            height: itemHeight,\n            contain: \"layout style paint\",\n          },\n        });\n      }\n    }\n\n    return result;\n  }, [items, startRow, endRow, columns, itemHeight, itemWidth, gap]);\n\n  const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n    setScrollTop(e.currentTarget.scrollTop);\n  }, []);\n\n  return {\n    visibleItems,\n    totalHeight,\n    containerProps: {\n      onScroll: handleScroll,\n      style: {\n        height: containerHeight,\n        width: containerWidth,\n        overflow: \"auto\",\n        contain: \"strict\",\n      },\n    },\n    scrollElementProps: {\n      style: {\n        height: totalHeight,\n        width: containerWidth,\n        position: \"relative\",\n        contain: \"layout\",\n      },\n    },\n  };\n}\n\n/**\n * Hook for infinite scroll with virtualization\n */\nexport function useInfiniteVirtualization<T>(\n  items: T[],\n  options: VirtualizationOptions & {\n    loadMore: () => Promise<T[]>;\n    hasMore: boolean;\n    isLoading: boolean;\n  }\n) {\n  const { loadMore, hasMore, isLoading, ...virtualizationOptions } = options;\n  const [allItems, setAllItems] = useState(items);\n  const loadingRef = useRef(false);\n\n  const virtualization = useVirtualization(allItems, virtualizationOptions);\n\n  // Load more items when scrolled near bottom\n  const handleLoadMore = useCallback(async () => {\n    if (loadingRef.current || !hasMore || isLoading) return;\n\n    const { containerHeight } = virtualizationOptions;\n    const { scrollTop, totalHeight } = virtualization;\n    const scrollPercentage = (scrollTop + (containerHeight || 0)) / totalHeight;\n\n    if (scrollPercentage > 0.8) {\n      loadingRef.current = true;\n\n      try {\n        const newItems = await loadMore();\n        setAllItems((prev: any) => [...prev, ...newItems]);\n      } catch {\n        // Keep existing items and allow future load attempts.\n      } finally {\n        loadingRef.current = false;\n      }\n    }\n  }, [virtualization, hasMore, isLoading, loadMore]);\n\n  // Monitor scroll for infinite loading\n  useEffect(() => {\n    handleLoadMore();\n  }, [handleLoadMore]);\n\n  return {\n    ...virtualization,\n    isLoadingMore: loadingRef.current,\n    totalItems: allItems?.length || 0,\n  };\n}\n\n/**\n * Hook for window virtualization (entire viewport)\n */\nexport function useWindowVirtualization<T>(\n  items: T[],\n  itemHeight: number | ((index: number) => number),\n  overscan: number = 5\n) {\n  const [scrollY, setScrollY] = useState(0);\n  const [windowHeight, setWindowHeight] = useState(\n    typeof window !== \"undefined\" ? window.innerHeight : 600\n  );\n\n  // Update scroll position\n  useEffect(() => {\n    const handleScroll = () => {\n      setScrollY(window.scrollY);\n    };\n\n    const handleResize = () => {\n      setWindowHeight(window.innerHeight);\n    };\n\n    window.addEventListener(\"scroll\", handleScroll, { passive: true });\n    window.addEventListener(\"resize\", handleResize, { passive: true });\n\n    return () => {\n      window.removeEventListener(\"scroll\", handleScroll);\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  const visibleRange = useMemo(() => {\n    if (typeof itemHeight === \"number\") {\n      const startIndex = Math.max(\n        0,\n        Math.floor(scrollY / itemHeight) - overscan\n      );\n      const endIndex = Math.min(\n        (items?.length || 1) - 1,\n        Math.ceil((scrollY + windowHeight) / itemHeight) + overscan\n      );\n      return { startIndex, endIndex };\n    }\n\n    // Variable height calculation\n    let currentOffset = 0;\n    let startIndex = 0;\n    let endIndex = items.length - 1;\n\n    // Find start index\n    for (let i = 0; i < (items?.length || 0); i++) {\n      const height =\n        typeof itemHeight === \"function\" ? itemHeight(i) : itemHeight;\n      if (currentOffset + height > scrollY) {\n        startIndex = Math.max(0, i - overscan);\n        break;\n      }\n      currentOffset += height;\n    }\n\n    // Find end index\n    for (let i = startIndex; i < items.length; i++) {\n      const height =\n        typeof itemHeight === \"function\" ? itemHeight(i) : itemHeight;\n      if (currentOffset > scrollY + windowHeight) {\n        endIndex = Math.min(items.length - 1, i + overscan);\n        break;\n      }\n      currentOffset += height;\n    }\n\n    return { startIndex, endIndex };\n  }, [scrollY, windowHeight, items.length, itemHeight, overscan]);\n\n  const visibleItems = useMemo((): VirtualizedItem<T>[] => {\n    const result: VirtualizedItem<T>[] = [];\n    let currentOffset = 0;\n\n    // Calculate offset to start index\n    for (let i = 0; i < visibleRange.startIndex; i++) {\n      const height =\n        typeof itemHeight === \"function\" ? itemHeight(i) : itemHeight;\n      currentOffset += height;\n    }\n\n    // Generate visible items\n    for (\n      let i = visibleRange.startIndex;\n      i <= visibleRange.endIndex && i < items.length;\n      i++\n    ) {\n      const height =\n        typeof itemHeight === \"function\" ? itemHeight(i) : itemHeight;\n\n      result.push({\n        index: i,\n        data: items[i],\n        style: {\n          position: \"absolute\",\n          top: currentOffset,\n          width: \"100%\",\n          height,\n          contain: \"layout style paint\",\n        },\n      });\n\n      currentOffset += height;\n    }\n\n    return result;\n  }, [visibleRange, items, itemHeight]);\n\n  return {\n    startIndex: visibleRange.startIndex,\n    endIndex: visibleRange.endIndex,\n    visibleItems,\n    scrollY,\n    windowHeight,\n  };\n}\n\n/**\n * Hook for table virtualization with fixed headers\n */\nexport function useTableVirtualization<T>(\n  data: T[],\n  options: {\n    rowHeight: number;\n    headerHeight: number;\n    containerHeight: number;\n    columns: Array<{\n      key: string;\n      width: number;\n      fixed?: boolean;\n    }>;\n    overscan?: number;\n  }\n) {\n  const {\n    rowHeight,\n    headerHeight,\n    containerHeight,\n    columns,\n    overscan = 3,\n  } = options;\n\n  const [scrollTop, setScrollTop] = useState(0);\n  const [scrollLeft, setScrollLeft] = useState(0);\n\n  const availableHeight = containerHeight - headerHeight;\n  const startIndex = Math.max(0, Math.floor(scrollTop / rowHeight) - overscan);\n  const endIndex = Math.min(\n    data.length - 1,\n    Math.ceil((scrollTop + availableHeight) / rowHeight) + overscan\n  );\n\n  const visibleRows = useMemo((): Array<\n    VirtualizedItem<T> & { columns: typeof columns }\n  > => {\n    const result: Array<VirtualizedItem<T> & { columns: typeof columns }> = [];\n\n    for (let i = startIndex; i <= endIndex && i < data.length; i++) {\n      result.push({\n        index: i,\n        data: data[i],\n        columns,\n        style: {\n          position: \"absolute\",\n          top: headerHeight + i * rowHeight,\n          left: 0,\n          width: \"100%\",\n          height: rowHeight,\n          display: \"flex\",\n          contain: \"layout style paint\",\n        },\n      });\n    }\n\n    return result;\n  }, [startIndex, endIndex, data, columns, headerHeight, rowHeight]);\n\n  const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n    setScrollTop(e.currentTarget.scrollTop);\n    setScrollLeft(e.currentTarget.scrollLeft);\n  }, []);\n\n  const totalHeight = headerHeight + data.length * rowHeight;\n  const totalWidth = columns.reduce((sum, col) => sum + col.width, 0);\n\n  return {\n    visibleRows,\n    totalHeight,\n    totalWidth,\n    scrollTop,\n    scrollLeft,\n    headerHeight,\n    containerProps: {\n      onScroll: handleScroll,\n      style: {\n        height: containerHeight,\n        overflow: \"auto\",\n        contain: \"strict\",\n      },\n    },\n    scrollElementProps: {\n      style: {\n        height: totalHeight,\n        width: totalWidth,\n        position: \"relative\",\n        contain: \"layout\",\n      },\n    },\n  };\n}\n", "'use client';\nimport { useCallback, useEffect, useState } from 'react';\nimport { DEFAULT_DEVICE_INFO, DeviceInfo, detectDevice, refreshDeviceDetection } from '../utils/deviceCapabilities';\nimport { isBrowser, runClientEffect } from '../utils/env';\n\n/**\n * Hook for accessing device capabilities and information.\n *\n * This hook wraps the device detection utility and provides React state management\n * for device information. It's SSR-safe and provides a reload function for\n * refreshing device detection when needed.\n *\n * @returns Object containing device information and reload function\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n *   const { deviceInfo, reload } = useDeviceCapabilities();\n *\n *   return (\n *     <div>\n *       <p>Device Type: {deviceInfo.type}</p>\n *       <p>Performance Tier: {deviceInfo.performance.tier}</p>\n *       <button onClick={reload} className=\"glass-focus glass-touch-target glass-contrast-guard\">Refresh Detection</button>\n *     </div>\n *   );\n * }\n * ```\n */\nexport function useDeviceCapabilities() {\n  const [deviceInfo, setDeviceInfo] = useState<DeviceInfo>(() => {\n    if (!isBrowser()) {\n      return { ...DEFAULT_DEVICE_INFO };\n    }\n    return detectDevice();\n  });\n\n  // Detect device on mount (client-side only)\n  useEffect(() => {\n    return runClientEffect(() => {\n      const info = detectDevice();\n      setDeviceInfo(info);\n    });\n  }, []);\n\n  // Provide a reload function to refresh device detection\n  const reload = useCallback(() => {\n    if (!isBrowser()) return;\n    const info = refreshDeviceDetection();\n    setDeviceInfo(info);\n  }, []);\n\n  return {\n    deviceInfo,\n    reload,\n  };\n}", "import { useState, useRef, useCallback, useEffect } from 'react';\nimport type { Chart as ChartJS } from 'chart.js';\n\n/**\n * Physics-based chart interaction options\n */\nexport interface ChartPhysicsOptions {\n  /** Enable zoom/pan interactions */\n  enabled?: boolean;\n  /** Zoom mode: 'x', 'y', or 'xy' */\n  mode?: 'x' | 'y' | 'xy';\n  /** Physics parameters */\n  physics?: {\n    tension: number;\n    friction: number;\n    mass: number;\n  };\n  /** Minimum zoom level */\n  minZoom?: number;\n  /** Maximum zoom level */\n  maxZoom?: number;\n  /** Mouse wheel sensitivity */\n  wheelSensitivity?: number;\n  /** Inertia duration in milliseconds */\n  inertiaDuration?: number;\n  /** Respect user's reduced motion preference */\n  respectReducedMotion?: boolean;\n}\n\n/**\n * Return type for the useChartPhysicsInteraction hook\n */\nexport interface ChartPhysicsInteraction {\n  /** Whether the chart is currently being panned */\n  isPanning: boolean;\n  /** Current zoom level (1 = 100%) */\n  zoomLevel: number;\n  /** Apply a specific zoom level */\n  applyZoom: (level: number) => void;\n  /** Reset zoom to default (1.0) */\n  resetZoom: () => void;\n}\n\ntype ChartAxis = 'x' | 'y';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === 'object' && value !== null;\n\nconst getScaleAxis = (scale: unknown, scaleId: string): ChartAxis | null => {\n  if (isRecord(scale)) {\n    const { axis } = scale as { axis?: unknown };\n    if (axis === 'x' || axis === 'y') {\n      return axis;\n    }\n  }\n\n  const fallback = scaleId.charAt(0).toLowerCase();\n  return fallback === 'x' || fallback === 'y' ? (fallback as ChartAxis) : null;\n};\n\nconst hasNumericRange = (\n  scale: unknown\n): scale is { min: number; max: number } => {\n  if (!isRecord(scale)) {\n    return false;\n  }\n\n  const { min, max } = scale as { min?: unknown; max?: unknown };\n  return (\n    typeof min === 'number' &&\n    typeof max === 'number' &&\n    Number.isFinite(min) &&\n    Number.isFinite(max)\n  );\n};\n\nconst axisMatchesMode = (\n  axis: ChartAxis,\n  mode: NonNullable<ChartPhysicsOptions['mode']>\n) => mode === 'xy' || mode === axis;\n\n/**\n * Hook for physics-based chart interactions (zoom/pan)\n *\n * Provides smooth, physics-based zoom and pan interactions for Chart.js charts\n * with configurable spring physics and constraints.\n *\n * @param chartRef - Reference to the Chart.js instance\n * @param wrapperRef - Reference to the chart wrapper element\n * @param options - Configuration options for interactions\n *\n * @returns Object containing interaction state and control functions\n *\n * @example\n * ```tsx\n * function PhysicsChart() {\n *   const chartRef = useRef<ChartJS>(null);\n *   const wrapperRef = useRef<HTMLDivElement>(null);\n *\n *   const { isPanning, zoomLevel, applyZoom, resetZoom } = useChartPhysicsInteraction(\n *     chartRef,\n *     wrapperRef,\n *     {\n *       enabled: true,\n *       mode: 'xy',\n *       minZoom: 0.5,\n *       maxZoom: 5,\n *     }\n *   );\n *\n *   return (\n *     <div ref={wrapperRef}>\n *       <Chart ref={chartRef} {...chartProps} />\n *       <button onClick={resetZoom} className=\"glass-focus glass-touch-target glass-contrast-guard\">Reset</button>\n *     </div>\n *   );\n * }\n * ```\n */\nexport function useChartPhysicsInteraction(\n  chartRef: React.RefObject<ChartJS | null>,\n  wrapperRef: React.RefObject<HTMLDivElement | null>,\n  options: ChartPhysicsOptions = {}\n): ChartPhysicsInteraction {\n  const {\n    enabled = false,\n    mode = 'xy',\n    physics = { tension: 300, friction: 30, mass: 1 },\n    minZoom = 0.5,\n    maxZoom = 5,\n    wheelSensitivity = 0.1,\n    inertiaDuration = 500,\n    respectReducedMotion = true,\n  } = options;\n\n  const [isPanning, setIsPanning] = useState(false);\n  const [zoomLevel, setZoomLevel] = useState(1);\n\n  const panStartRef = useRef<{ x: number; y: number } | null>(null);\n  const velocityRef = useRef({ x: 0, y: 0 });\n  const lastPosRef = useRef({ x: 0, y: 0 });\n  const animationFrameRef = useRef<number | null>(null);\n\n  /**\n   * Apply zoom with physics constraints\n   */\n  const applyZoom = useCallback(\n    (level: number) => {\n      if (!enabled || !chartRef.current) return;\n\n      // Clamp zoom level\n      const clampedLevel = Math.max(minZoom, Math.min(maxZoom, level));\n      setZoomLevel(clampedLevel);\n\n      const chart = chartRef.current;\n\n      // Apply zoom transformations to chart scales\n      if (chart.options.scales) {\n        Object.keys(chart.options.scales).forEach((scaleId) => {\n          const scale = chart.options.scales![scaleId];\n          if (!scale) return;\n\n          const axis = getScaleAxis(scale, scaleId);\n          if (!axis || !axisMatchesMode(axis, mode)) return;\n\n          // Only apply zoom to enabled axes based on mode\n          if (!hasNumericRange(scale)) return;\n\n          const range = scale.max - scale.min;\n          const center = (scale.max + scale.min) / 2;\n          const newRange = range / clampedLevel;\n\n          scale.min = center - newRange / 2;\n          scale.max = center + newRange / 2;\n        });\n      }\n\n      chart.update('none');\n    },\n    [enabled, chartRef, minZoom, maxZoom, mode]\n  );\n\n  /**\n   * Reset zoom to default level\n   */\n  const resetZoom = useCallback(() => {\n    applyZoom(1);\n  }, [applyZoom]);\n\n  /**\n   * Handle wheel events for zooming\n   */\n  const handleWheel = useCallback(\n    (event: WheelEvent) => {\n      if (!enabled || !chartRef.current) return;\n\n      event.preventDefault();\n\n      const delta = -event.deltaY * wheelSensitivity;\n      const newZoom = zoomLevel * (1 + delta);\n\n      applyZoom(newZoom);\n    },\n    [enabled, chartRef, wheelSensitivity, zoomLevel, applyZoom]\n  );\n\n  /**\n   * Handle mouse down for panning\n   */\n  const handleMouseDown = useCallback(\n    (event: MouseEvent) => {\n      if (!enabled || !chartRef.current) return;\n\n      setIsPanning(true);\n      panStartRef.current = { x: event.clientX, y: event.clientY };\n      lastPosRef.current = { x: event.clientX, y: event.clientY };\n      velocityRef.current = { x: 0, y: 0 };\n    },\n    [enabled, chartRef]\n  );\n\n  /**\n   * Handle mouse move for panning\n   */\n  const handleMouseMove = useCallback(\n    (event: MouseEvent) => {\n      if (!isPanning || !panStartRef.current || !chartRef.current) return;\n\n      const deltaX = event.clientX - lastPosRef.current.x;\n      const deltaY = event.clientY - lastPosRef.current.y;\n\n      // Update velocity for inertia\n      velocityRef.current = { x: deltaX, y: deltaY };\n\n      const chart = chartRef.current;\n\n      // Apply pan transformations to chart scales\n      if (chart.options.scales) {\n        Object.keys(chart.options.scales).forEach((scaleId) => {\n          const scale = chart.options.scales![scaleId];\n          if (!scale) return;\n\n          const axis = getScaleAxis(scale, scaleId);\n          if (!axis || !axisMatchesMode(axis, mode)) return;\n\n          // Only pan enabled axes based on mode\n          if (!hasNumericRange(scale)) return;\n\n          const range = scale.max - scale.min;\n          const panAmount = axis === 'x'\n            ? -(deltaX / (wrapperRef.current?.offsetWidth || 1)) * range\n            : (deltaY / (wrapperRef.current?.offsetHeight || 1)) * range;\n\n          scale.min += panAmount;\n          scale.max += panAmount;\n        });\n\n        chart.update('none');\n      }\n\n      lastPosRef.current = { x: event.clientX, y: event.clientY };\n    },\n    [isPanning, chartRef, mode, wrapperRef]\n  );\n\n  /**\n   * Handle mouse up to end panning with inertia\n   */\n  const handleMouseUp = useCallback(() => {\n    if (!isPanning) return;\n\n    setIsPanning(false);\n    panStartRef.current = null;\n\n    // Apply inertia if enabled\n    if (!respectReducedMotion) {\n      const applyInertia = () => {\n        const { x, y } = velocityRef.current;\n\n        if (Math.abs(x) < 0.1 && Math.abs(y) < 0.1) {\n          // Inertia complete\n          if (animationFrameRef.current) {\n            cancelAnimationFrame(animationFrameRef.current);\n            animationFrameRef.current = null;\n          }\n          return;\n        }\n\n        // Apply friction\n        velocityRef.current.x *= 0.95;\n        velocityRef.current.y *= 0.95;\n\n        // Continue animation\n        animationFrameRef.current = requestAnimationFrame(applyInertia);\n      };\n\n      applyInertia();\n    }\n  }, [isPanning, respectReducedMotion]);\n\n  /**\n   * Setup event listeners\n   */\n  useEffect(() => {\n    if (!enabled || !wrapperRef.current) return;\n\n    const wrapper = wrapperRef.current;\n\n    wrapper.addEventListener('wheel', handleWheel, { passive: false });\n    wrapper.addEventListener('mousedown', handleMouseDown);\n    window.addEventListener('mousemove', handleMouseMove);\n    window.addEventListener('mouseup', handleMouseUp);\n\n    return () => {\n      wrapper.removeEventListener('wheel', handleWheel);\n      wrapper.removeEventListener('mousedown', handleMouseDown);\n      window.removeEventListener('mousemove', handleMouseMove);\n      window.removeEventListener('mouseup', handleMouseUp);\n\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, [enabled, wrapperRef, handleWheel, handleMouseDown, handleMouseMove, handleMouseUp]);\n\n  return {\n    isPanning,\n    zoomLevel,\n    applyZoom,\n    resetZoom,\n  };\n}\n", "/**\n * AuraGlass Adaptive AI-Powered UI System\n * Machine learning-driven UI optimization and personalization\n */\n\nimport { useState, useEffect } from \"react\";\n\ninterface UserBehavior {\n  clicks: {\n    element: string;\n    timestamp: number;\n    position: { x: number; y: number };\n  }[];\n  hovers: { element: string; duration: number; timestamp: number }[];\n  scrollPatterns: { depth: number; speed: number; timestamp: number }[];\n  preferences: Map<string, unknown>;\n  interactionHeatmap: number[][];\n  sessionDuration: number;\n  deviceType: string;\n  timezone: string;\n}\n\ninterface AdaptiveConfig {\n  glassIntensity: number; // 0-1\n  animationSpeed: number; // 0-2\n  colorScheme: \"light\" | \"dark\" | \"auto\";\n  layoutDensity: \"compact\" | \"comfortable\" | \"spacious\";\n  focusMode: boolean;\n  reducedMotion: boolean;\n  contrastLevel: \"normal\" | \"high\" | \"highest\";\n  fontSize: number; // 0.8-1.5\n  hapticStrength: number; // 0-1\n  soundEnabled: boolean;\n}\n\ninterface Prediction {\n  nextAction: string;\n  confidence: number;\n  suggestions: string[];\n  optimizations: AdaptiveConfig;\n}\n\ninterface InteractionHotspot {\n  x: number;\n  y: number;\n  intensity: number;\n}\n\ninterface AdaptivePreferences extends Record<string, unknown> {\n  prefersReducedMotion: boolean;\n  interactionStyle: \"active\" | \"passive\";\n  timeOfDay: \"night\" | \"morning\" | \"afternoon\" | \"evening\";\n}\n\ninterface BehaviorAnalysis {\n  clickVelocity: number;\n  avgScrollSpeed: number;\n  hotspots: InteractionHotspot[];\n  preferences: AdaptivePreferences;\n  sessionDuration: number;\n  deviceType: string;\n}\n\ntype AdaptiveNumericConfigKey =\n  | \"glassIntensity\"\n  | \"animationSpeed\"\n  | \"fontSize\"\n  | \"hapticStrength\";\n\nexport class AdaptiveAIEngine {\n  private static instance: AdaptiveAIEngine;\n  private userBehavior: UserBehavior;\n  private adaptiveConfig: AdaptiveConfig;\n  private modelWeights: Map<string, number>;\n  private learningRate: number = 0.01;\n  private sessionStartTime: number;\n  private interactionHistory: unknown[] = [];\n\n  private constructor() {\n    this.userBehavior = this.initUserBehavior();\n    this.adaptiveConfig = this.getDefaultConfig();\n    this.modelWeights = new Map();\n    this.sessionStartTime = Date.now();\n    this.initializeTracking();\n  }\n\n  static getInstance(): AdaptiveAIEngine {\n    if (!AdaptiveAIEngine.instance) {\n      AdaptiveAIEngine.instance = new AdaptiveAIEngine();\n    }\n    return AdaptiveAIEngine.instance;\n  }\n\n  /**\n   * Initialize user behavior tracking\n   */\n  private initUserBehavior(): UserBehavior {\n    return {\n      clicks: [],\n      hovers: [],\n      scrollPatterns: [],\n      preferences: new Map(),\n      interactionHeatmap: Array(10)\n        .fill(null)\n        .map(() => Array(10).fill(0)),\n      sessionDuration: 0,\n      deviceType: this.detectDeviceType(),\n      timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n    };\n  }\n\n  /**\n   * Get default adaptive configuration\n   */\n  private getDefaultConfig(): AdaptiveConfig {\n    return {\n      glassIntensity: 0.7,\n      animationSpeed: 1,\n      colorScheme: \"auto\",\n      layoutDensity: \"comfortable\",\n      focusMode: false,\n      reducedMotion: false,\n      contrastLevel: \"normal\",\n      fontSize: 1,\n      hapticStrength: 0.5,\n      soundEnabled: true,\n    };\n  }\n\n  /**\n   * Detect device type\n   */\n  private detectDeviceType(): string {\n    if (typeof window === \"undefined\") return \"unknown\";\n\n    const userAgent = navigator.userAgent.toLowerCase();\n    if (/mobile|android|iphone/i.test(userAgent)) return \"mobile\";\n    if (/tablet|ipad/i.test(userAgent)) return \"tablet\";\n    if (/tv|television|smart-tv/i.test(userAgent)) return \"tv\";\n    return \"desktop\";\n  }\n\n  /**\n   * Initialize behavior tracking\n   */\n  private initializeTracking() {\n    if (typeof document === \"undefined\") return;\n\n    // Track clicks\n    document.addEventListener(\"click\", (e) => {\n      const target = e.target as HTMLElement;\n      this.userBehavior.clicks.push({\n        element: target.tagName + (target.id ? `#${target.id}` : \"\"),\n        timestamp: Date.now(),\n        position: { x: e.clientX, y: e.clientY },\n      });\n\n      // Update heatmap\n      const gridX = Math.floor((e.clientX / window.innerWidth) * 10);\n      const gridY = Math.floor((e.clientY / window.innerHeight) * 10);\n      if (this.userBehavior.interactionHeatmap[gridY]?.[gridX] !== undefined) {\n        this.userBehavior.interactionHeatmap[gridY][gridX]++;\n      }\n\n      this.analyzeAndAdapt();\n    });\n\n    // Track scroll\n    let lastScrollY = 0;\n    let lastScrollTime = Date.now();\n\n    document.addEventListener(\"scroll\", () => {\n      const currentScrollY = window.scrollY;\n      const currentTime = Date.now();\n      const scrollSpeed =\n        Math.abs(currentScrollY - lastScrollY) / (currentTime - lastScrollTime);\n\n      this.userBehavior.scrollPatterns.push({\n        depth: currentScrollY,\n        speed: scrollSpeed,\n        timestamp: currentTime,\n      });\n\n      lastScrollY = currentScrollY;\n      lastScrollTime = currentTime;\n\n      // Adapt based on scroll behavior\n      if (this.userBehavior.scrollPatterns.length % 10 === 0) {\n        this.analyzeAndAdapt();\n      }\n    });\n\n    // Track session duration\n    setInterval(() => {\n      this.userBehavior.sessionDuration = Date.now() - this.sessionStartTime;\n    }, 1000);\n  }\n\n  /**\n   * Analyze user behavior and adapt UI\n   */\n  private analyzeAndAdapt() {\n    // Analyze interaction patterns\n    const analysis = this.analyzePatterns();\n\n    // Generate predictions\n    const predictions = this.generatePredictions(analysis);\n\n    // Update adaptive configuration\n    this.updateConfiguration(predictions);\n\n    // Apply optimizations\n    this.applyOptimizations();\n  }\n\n  /**\n   * Analyze user interaction patterns\n   */\n  private analyzePatterns(): BehaviorAnalysis {\n    const recentClicks = this.userBehavior.clicks.slice(-20);\n    const recentScrolls = this.userBehavior.scrollPatterns.slice(-20);\n\n    // Calculate interaction velocity\n    const clickVelocity =\n      recentClicks.length /\n      (Date.now() - (recentClicks[0]?.timestamp || Date.now()));\n\n    // Calculate average scroll speed\n    const avgScrollSpeed =\n      recentScrolls.reduce((sum, s) => sum + s.speed, 0) /\n      (recentScrolls.length || 1);\n\n    // Identify interaction hotspots\n    const hotspots = this.identifyHotspots();\n\n    // Detect user preferences\n    const preferences = this.detectPreferences();\n\n    return {\n      clickVelocity,\n      avgScrollSpeed,\n      hotspots,\n      preferences,\n      sessionDuration: this.userBehavior.sessionDuration,\n      deviceType: this.userBehavior.deviceType,\n    };\n  }\n\n  /**\n   * Identify interaction hotspots\n   */\n  private identifyHotspots(): InteractionHotspot[] {\n    const hotspots: InteractionHotspot[] = [];\n\n    this.userBehavior.interactionHeatmap.forEach((row, y) => {\n      row.forEach((value, x) => {\n        if (value > 5) {\n          hotspots.push({\n            x: (x / 10) * 100, // Convert to percentage\n            y: (y / 10) * 100,\n            intensity: value,\n          });\n        }\n      });\n    });\n\n    return hotspots;\n  }\n\n  /**\n   * Detect user preferences from behavior\n   */\n  private detectPreferences(): AdaptivePreferences {\n    const avgScrollSpeed =\n      this.userBehavior.scrollPatterns.reduce((sum, s) => sum + s.speed, 0) /\n      (this.userBehavior.scrollPatterns.length || 1);\n    const hour = new Date().getHours();\n\n    const preferences: AdaptivePreferences = {\n      prefersReducedMotion: avgScrollSpeed < 0.5,\n      interactionStyle:\n        this.userBehavior.clicks.length > 50 ? \"active\" : \"passive\",\n      timeOfDay:\n        hour < 6\n          ? \"night\"\n          : hour < 12\n            ? \"morning\"\n            : hour < 18\n              ? \"afternoon\"\n              : \"evening\",\n    };\n\n    return preferences;\n  }\n\n  /**\n   * Generate AI predictions\n   */\n  private generatePredictions(analysis: BehaviorAnalysis): Prediction {\n    // Simple neural network-like prediction\n    const features = [\n      analysis.clickVelocity,\n      analysis.avgScrollSpeed,\n      analysis.sessionDuration / 60000, // Convert to minutes\n      analysis.deviceType === \"mobile\" ? 1 : 0,\n      analysis.preferences.prefersReducedMotion ? 1 : 0,\n    ];\n\n    // Calculate weighted prediction\n    let prediction = 0;\n    features.forEach((feature, i) => {\n      const weight = this.modelWeights.get(`w${i}`) || Math.random();\n      prediction += feature * weight;\n    });\n\n    // Sigmoid activation\n    const confidence = 1 / (1 + Math.exp(-prediction));\n\n    // Generate suggestions based on patterns\n    const suggestions = this.generateSuggestions(analysis);\n\n    // Generate optimized configuration\n    const optimizations = this.generateOptimizations(analysis);\n\n    return {\n      nextAction: this.predictNextAction(analysis),\n      confidence,\n      suggestions,\n      optimizations,\n    };\n  }\n\n  /**\n   * Predict next user action\n   */\n  private predictNextAction(analysis: BehaviorAnalysis): string {\n    // Markov chain-like prediction based on recent actions\n    const recentActions = this.userBehavior.clicks\n      .slice(-5)\n      .map((c) => c.element);\n\n    if (recentActions.length === 0) return \"explore\";\n\n    // Find most common pattern\n    const patterns = new Map<string, number>();\n    for (let i = 0; i < recentActions.length - 1; i++) {\n      const pattern = `${recentActions[i]}->${recentActions[i + 1]}`;\n      patterns.set(pattern, (patterns.get(pattern) || 0) + 1);\n    }\n\n    // Return most likely next action\n    const lastAction = recentActions[recentActions.length - 1];\n    let maxCount = 0;\n    let predictedAction = \"unknown\";\n\n    patterns.forEach((count, pattern) => {\n      if (pattern.startsWith(lastAction) && count > maxCount) {\n        maxCount = count;\n        predictedAction = pattern.split(\"->\")[1];\n      }\n    });\n\n    return predictedAction;\n  }\n\n  /**\n   * Generate UI suggestions\n   */\n  private generateSuggestions(analysis: BehaviorAnalysis): string[] {\n    const suggestions: string[] = [];\n\n    if (analysis.avgScrollSpeed > 2) {\n      suggestions.push(\"Enable quick navigation shortcuts\");\n    }\n\n    if (analysis.preferences.prefersReducedMotion) {\n      suggestions.push(\"Reduce animation complexity\");\n    }\n\n    if (analysis.deviceType === \"mobile\") {\n      suggestions.push(\"Optimize for touch interactions\");\n    }\n\n    if (analysis.sessionDuration > 300000) {\n      // 5 minutes\n      suggestions.push(\"Enable focus mode for better concentration\");\n    }\n\n    if (analysis.preferences.timeOfDay === \"night\") {\n      suggestions.push(\"Switch to dark mode for eye comfort\");\n    }\n\n    return suggestions;\n  }\n\n  /**\n   * Generate optimized configuration\n   */\n  private generateOptimizations(analysis: BehaviorAnalysis): AdaptiveConfig {\n    const config = { ...this.adaptiveConfig };\n\n    // Adjust glass intensity based on device and time\n    if (analysis.deviceType === \"mobile\") {\n      config.glassIntensity = 0.5; // Less intensive for mobile\n    }\n\n    // Adjust animation speed\n    if (analysis.preferences.prefersReducedMotion) {\n      config.animationSpeed = 0.5;\n      config.reducedMotion = true;\n    }\n\n    // Adjust color scheme\n    if (analysis.preferences.timeOfDay === \"night\") {\n      config.colorScheme = \"dark\";\n    }\n\n    // Adjust layout density\n    if (analysis.clickVelocity > 0.1) {\n      config.layoutDensity = \"compact\"; // More content for active users\n    }\n\n    // Adjust contrast for long sessions\n    if (analysis.sessionDuration > 600000) {\n      // 10 minutes\n      config.contrastLevel = \"high\";\n    }\n\n    return config;\n  }\n\n  /**\n   * Update configuration with predictions\n   */\n  private updateConfiguration(predictions: Prediction) {\n    // Gradually update configuration using exponential moving average\n    const nextConfig: AdaptiveConfig = { ...this.adaptiveConfig };\n    const mutableConfig = nextConfig as Record<\n      keyof AdaptiveConfig,\n      AdaptiveConfig[keyof AdaptiveConfig]\n    >;\n    const numericKeys: AdaptiveNumericConfigKey[] = [\n      \"glassIntensity\",\n      \"animationSpeed\",\n      \"fontSize\",\n      \"hapticStrength\",\n    ];\n\n    numericKeys.forEach((key) => {\n      const currentValue = this.adaptiveConfig[key];\n      const predictedValue = predictions.optimizations[key];\n      mutableConfig[key] = currentValue * 0.9 + predictedValue * 0.1;\n    });\n\n    (\n      Object.keys(predictions.optimizations) as Array<keyof AdaptiveConfig>\n    ).forEach((key) => {\n      if (numericKeys.includes(key as AdaptiveNumericConfigKey)) return;\n      mutableConfig[key] = predictions.optimizations[key];\n    });\n\n    this.adaptiveConfig = nextConfig;\n  }\n\n  /**\n   * Apply optimizations to the UI\n   */\n  private applyOptimizations() {\n    if (typeof document === \"undefined\") return;\n\n    const root = document.documentElement;\n\n    // Apply CSS variables\n    root.style.setProperty(\n      \"--glass-ai-intensity\",\n      String(this.adaptiveConfig.glassIntensity)\n    );\n    root.style.setProperty(\n      \"--glass-ai-animation-speed\",\n      String(this.adaptiveConfig.animationSpeed)\n    );\n    root.style.setProperty(\n      \"--glass-ai-font-size\",\n      String(this.adaptiveConfig.fontSize)\n    );\n\n    // Apply data attributes\n    root.setAttribute(\"data-ai-color-scheme\", this.adaptiveConfig.colorScheme);\n    root.setAttribute(\n      \"data-ai-layout-density\",\n      this.adaptiveConfig.layoutDensity\n    );\n    root.setAttribute(\"data-ai-contrast\", this.adaptiveConfig.contrastLevel);\n    root.setAttribute(\n      \"data-ai-reduced-motion\",\n      String(this.adaptiveConfig.reducedMotion)\n    );\n    root.setAttribute(\n      \"data-ai-focus-mode\",\n      String(this.adaptiveConfig.focusMode)\n    );\n  }\n\n  /**\n   * Get current adaptive configuration\n   */\n  getConfiguration(): AdaptiveConfig {\n    return { ...this.adaptiveConfig };\n  }\n\n  /**\n   * Get behavior insights\n   */\n  getInsights() {\n    return {\n      totalInteractions: this.userBehavior.clicks.length,\n      sessionDuration: this.userBehavior.sessionDuration,\n      averageScrollSpeed:\n        this.userBehavior.scrollPatterns.reduce((sum, s) => sum + s.speed, 0) /\n        (this.userBehavior.scrollPatterns.length || 1),\n      hotspots: this.identifyHotspots(),\n      preferences: this.detectPreferences(),\n      adaptiveConfig: this.adaptiveConfig,\n    };\n  }\n\n  /**\n   * Reset learning\n   */\n  reset() {\n    this.userBehavior = this.initUserBehavior();\n    this.adaptiveConfig = this.getDefaultConfig();\n    this.modelWeights.clear();\n    this.interactionHistory = [];\n    this.sessionStartTime = Date.now();\n  }\n\n  /**\n   * Export learning data\n   */\n  exportData() {\n    return {\n      userBehavior: this.userBehavior,\n      adaptiveConfig: this.adaptiveConfig,\n      modelWeights: Array.from(this.modelWeights.entries()),\n      interactionHistory: this.interactionHistory,\n    };\n  }\n\n  /**\n   * Import learning data\n   */\n  importData(data: ReturnType<typeof this.exportData>) {\n    this.userBehavior = data.userBehavior;\n    this.adaptiveConfig = data.adaptiveConfig;\n    this.modelWeights = new Map(data.modelWeights);\n    this.interactionHistory = data.interactionHistory;\n    this.applyOptimizations();\n  }\n}\n\n// Export singleton\nexport const adaptiveAI = AdaptiveAIEngine.getInstance();\n\n// React hook for adaptive AI\nexport function useAdaptiveAI() {\n  const [config, setConfig] = useState(adaptiveAI.getConfiguration());\n  const [insights, setInsights] = useState(adaptiveAI.getInsights());\n\n  useEffect(() => {\n    const interval = setInterval(() => {\n      setConfig(adaptiveAI.getConfiguration());\n      setInsights(adaptiveAI.getInsights());\n    }, 5000); // Update every 5 seconds\n\n    return () => clearInterval(interval);\n  }, []);\n\n  return { config, insights, ai: adaptiveAI };\n}\n", "'use client';\nimport React, { ReactNode, useEffect, useState } from 'react';\nimport { isBrowser } from '../../utils/env';\n\nexport interface AuraGlassClientBoundaryProps {\n  children: ReactNode;\n  fallback?: ReactNode;\n}\n\nexport const AuraGlassClientBoundary: React.FC<AuraGlassClientBoundaryProps> = ({\n  children,\n  fallback = null,\n}) => {\n  const [isClient, setIsClient] = useState(() => isBrowser());\n\n  useEffect(() => {\n    if (isClient) return;\n    setIsClient(true);\n  }, [isClient]);\n\n  if (!isClient) {\n    return <>{fallback}</>;\n  }\n\n  return <>{children}</>;\n};\n\nexport default AuraGlassClientBoundary;", "'use client';\n/**\n * Physics Engine Hook\n * React hook for managing physics engine instance and body interactions\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n  AuraPhysicsEngineAPI,\n  PhysicsBodyState,\n  PhysicsBodyOptions,\n  CollisionEvent,\n} from '../../physics/AuraPhysicsEngine';\nimport { Vector2D } from '../../types/common';\n\n/**\n * Physics engine hook options\n */\nexport interface UsePhysicsEngineOptions {\n  autoStart?: boolean;\n  gravity?: Vector2D;\n  timeScale?: number;\n}\n\n/**\n * Hook for managing a physics engine instance\n */\nexport const usePhysicsEngine = (options: UsePhysicsEngineOptions = {}) => {\n  const { autoStart = false, gravity, timeScale = 1.0 } = options;\n\n  const engineRef = useRef<AuraPhysicsEngineAPI | null>(null);\n  const [isRunning, setIsRunning] = useState(false);\n  const [bodyStates, setBodyStates] = useState<Map<string, PhysicsBodyState>>(new Map());\n\n  /**\n   * Initialize engine\n   */\n  useEffect(() => {\n    engineRef.current = new AuraPhysicsEngineAPI();\n\n    if (gravity) {\n      engineRef.current.setGravity(gravity);\n    }\n\n    engineRef.current.setTimeScale(timeScale);\n\n    if (autoStart) {\n      engineRef.current.start();\n      setIsRunning(true);\n    }\n\n    return () => {\n      if (engineRef.current) {\n        engineRef.current.stop();\n        engineRef.current.clear();\n      }\n    };\n  }, []);\n\n  /**\n   * Update gravity\n   */\n  useEffect(() => {\n    if (engineRef.current && gravity) {\n      engineRef.current.setGravity(gravity);\n    }\n  }, [gravity]);\n\n  /**\n   * Update time scale\n   */\n  useEffect(() => {\n    if (engineRef.current) {\n      engineRef.current.setTimeScale(timeScale);\n    }\n  }, [timeScale]);\n\n  /**\n   * Create a physics body\n   */\n  const createBody = useCallback(\n    (id: string, options?: PhysicsBodyOptions): string => {\n      if (!engineRef.current) {\n        throw new Error('Physics engine not initialized');\n      }\n      return engineRef.current.createBody(id, options);\n    },\n    []\n  );\n\n  /**\n   * Remove a physics body\n   */\n  const removeBody = useCallback((id: string): void => {\n    engineRef.current?.removeBody(id);\n    setBodyStates((prev) => {\n      const next = new Map(prev);\n      next.delete(id);\n      return next;\n    });\n  }, []);\n\n  /**\n   * Apply force to a body\n   */\n  const applyForce = useCallback((id: string, force: Vector2D): void => {\n    engineRef.current?.applyForce(id, force);\n  }, []);\n\n  /**\n   * Apply impulse to a body\n   */\n  const applyImpulse = useCallback((id: string, impulse: Vector2D): void => {\n    engineRef.current?.applyImpulse(id, impulse);\n  }, []);\n\n  /**\n   * Set velocity of a body\n   */\n  const setVelocity = useCallback((id: string, velocity: Vector2D): void => {\n    engineRef.current?.setVelocity(id, velocity);\n  }, []);\n\n  /**\n   * Set position of a body\n   */\n  const setPosition = useCallback((id: string, position: Vector2D): void => {\n    engineRef.current?.setPosition(id, position);\n  }, []);\n\n  /**\n   * Get body state\n   */\n  const getBodyState = useCallback((id: string): PhysicsBodyState | null => {\n    return engineRef.current?.getBodyState(id) || null;\n  }, []);\n\n  /**\n   * Subscribe to collision events\n   */\n  const onCollision = useCallback(\n    (id: string, callback: (event: CollisionEvent) => void): (() => void) => {\n      if (!engineRef.current) {\n        return () => {};\n      }\n      return engineRef.current.onCollision(id, callback);\n    },\n    []\n  );\n\n  /**\n   * Start the physics engine\n   */\n  const start = useCallback(() => {\n    engineRef.current?.start();\n    setIsRunning(true);\n  }, []);\n\n  /**\n   * Stop the physics engine\n   */\n  const stop = useCallback(() => {\n    engineRef.current?.stop();\n    setIsRunning(false);\n  }, []);\n\n  /**\n   * Force update\n   */\n  const forceUpdate = useCallback(() => {\n    engineRef.current?.forceUpdate();\n  }, []);\n\n  /**\n   * Set gravity\n   */\n  const setGravity = useCallback((newGravity: Vector2D): void => {\n    engineRef.current?.setGravity(newGravity);\n  }, []);\n\n  /**\n   * Set time scale\n   */\n  const setTimeScale = useCallback((scale: number): void => {\n    engineRef.current?.setTimeScale(scale);\n  }, []);\n\n  /**\n   * Get all body IDs\n   */\n  const getBodies = useCallback((): string[] => {\n    return engineRef.current?.getBodies() || [];\n  }, []);\n\n  /**\n   * Clear all bodies\n   */\n  const clear = useCallback(() => {\n    engineRef.current?.clear();\n    setBodyStates(new Map());\n  }, []);\n\n  /**\n   * Update body states periodically\n   */\n  useEffect(() => {\n    if (!isRunning || !engineRef.current) return;\n\n    const interval = setInterval(() => {\n      if (engineRef.current) {\n        const bodies = engineRef.current.getBodies();\n        const states = new Map<string, PhysicsBodyState>();\n\n        bodies.forEach((bodyId) => {\n          const state = engineRef.current?.getBodyState(bodyId);\n          if (state) {\n            states.set(bodyId, state);\n          }\n        });\n\n        setBodyStates(states);\n      }\n    }, 16); // ~60fps\n\n    return () => clearInterval(interval);\n  }, [isRunning]);\n\n  return {\n    // Engine control\n    start,\n    stop,\n    forceUpdate,\n    isRunning,\n\n    // Body management\n    createBody,\n    removeBody,\n    getBodies,\n    clear,\n\n    // Body manipulation\n    applyForce,\n    applyImpulse,\n    setVelocity,\n    setPosition,\n    getBodyState,\n\n    // Configuration\n    setGravity,\n    setTimeScale,\n\n    // Events\n    onCollision,\n\n    // State\n    bodyStates,\n    engine: engineRef.current,\n  };\n};", "/**\n * Common Types and Utilities\n * Shared type definitions used across the AuraGlass design system\n */\n\n/**\n * 2D Vector representation for position, velocity, and force calculations\n */\nexport interface Vector2D {\n  x: number;\n  y: number;\n}\n\n/**\n * Unsubscribe function type for event listeners and subscriptions\n * @returns void or Promise<void> for cleanup operations\n */\nexport type UnsubscribeFunction = () => void | Promise<void>;\n\n/**\n * Generic callback function type\n */\nexport type CallbackFunction<T = void> = () => T;\n\n/**\n * Event handler type with generic event parameter\n */\nexport type EventHandler<T = Event> = (event: T) => void;\n\n/**\n * Async callback function type\n */\nexport type AsyncCallback<T = void> = () => Promise<T>;\n\n/**\n * Subscription object with unsubscribe method\n */\nexport interface Subscription {\n  unsubscribe: UnsubscribeFunction;\n}\n\n/**\n * Creates a subscription object from an unsubscribe function\n */\nexport const createSubscription = (unsubscribe: UnsubscribeFunction): Subscription => ({\n  unsubscribe,\n});\n\n/**\n * Utility to create a 2D vector\n */\nexport const createVector2D = (x: number = 0, y: number = 0): Vector2D => ({ x, y });\n\n/**\n * Add two vectors\n */\nexport const addVectors = (v1: Vector2D, v2: Vector2D): Vector2D => ({\n  x: v1.x + v2.x,\n  y: v1.y + v2.y,\n});\n\n/**\n * Subtract two vectors\n */\nexport const subtractVectors = (v1: Vector2D, v2: Vector2D): Vector2D => ({\n  x: v1.x - v2.x,\n  y: v1.y - v2.y,\n});\n\n/**\n * Multiply vector by scalar\n */\nexport const multiplyVector = (v: Vector2D, scalar: number): Vector2D => ({\n  x: v.x * scalar,\n  y: v.y * scalar,\n});\n\n/**\n * Calculate magnitude of a vector\n */\nexport const vectorMagnitude = (v: Vector2D): number =>\n  Math.sqrt(v.x * v.x + v.y * v.y);\n\n/**\n * Normalize a vector\n */\nexport const normalizeVector = (v: Vector2D): Vector2D => {\n  const mag = vectorMagnitude(v);\n  return mag > 0 ? multiplyVector(v, 1 / mag) : { x: 0, y: 0 };\n};\n\n/**\n * Calculate distance between two vectors\n */\nexport const vectorDistance = (v1: Vector2D, v2: Vector2D): number =>\n  vectorMagnitude(subtractVectors(v1, v2));\n", "/**\n * AuraGlass Physics Engine\n * A comprehensive 2D physics simulation system with collision detection,\n * spring dynamics, and gesture-based interactions\n */\n\nimport { Vector2D, createVector2D, addVectors, multiplyVector, subtractVectors } from '../types/common';\n\n/**\n * Physics body state representing position, velocity, and acceleration\n */\nexport interface PhysicsBodyState {\n  position: Vector2D;\n  velocity: Vector2D;\n  acceleration: Vector2D;\n  rotation: number;\n  angularVelocity: number;\n  mass: number;\n  timestamp: number;\n}\n\n/**\n * Options for configuring a physics body\n */\nexport interface PhysicsBodyOptions {\n  mass?: number;\n  friction?: number;\n  restitution?: number; // Bounciness (0-1)\n  fixedRotation?: boolean;\n  gravityScale?: number;\n  damping?: number;\n  angularDamping?: number;\n  initialPosition?: Vector2D;\n  initialVelocity?: Vector2D;\n  bounds?: {\n    min: Vector2D;\n    max: Vector2D;\n  };\n}\n\n/**\n * Collision event data\n */\nexport interface CollisionEvent {\n  bodyA: string; // Body ID\n  bodyB: string; // Body ID\n  point: Vector2D;\n  normal: Vector2D;\n  penetration: number;\n  timestamp: number;\n}\n\n/**\n * Physics body internal representation\n */\ninterface PhysicsBody {\n  id: string;\n  state: PhysicsBodyState;\n  options: Required<PhysicsBodyOptions>;\n  forces: Vector2D[];\n  collisionListeners: Array<(event: CollisionEvent) => void>;\n}\n\n/**\n * AuraGlass Physics Engine API\n */\nexport class AuraPhysicsEngineAPI {\n  private bodies: Map<string, PhysicsBody> = new Map();\n  private running: boolean = false;\n  private lastTime: number = 0;\n  private animationFrameId: number | null = null;\n  private gravity: Vector2D = createVector2D(0, 9.8);\n  private timeScale: number = 1.0;\n\n  constructor() {\n    this.update = this.update.bind(this);\n  }\n\n  /**\n   * Create a new physics body\n   */\n  createBody(id: string, options: PhysicsBodyOptions = {}): string {\n    const defaultOptions: Required<PhysicsBodyOptions> = {\n      mass: options.mass ?? 1,\n      friction: options.friction ?? 0.3,\n      restitution: options.restitution ?? 0.5,\n      fixedRotation: options.fixedRotation ?? false,\n      gravityScale: options.gravityScale ?? 1,\n      damping: options.damping ?? 0.01,\n      angularDamping: options.angularDamping ?? 0.01,\n      initialPosition: options.initialPosition ?? createVector2D(0, 0),\n      initialVelocity: options.initialVelocity ?? createVector2D(0, 0),\n      bounds: options.bounds ?? {\n        min: createVector2D(-Infinity, -Infinity),\n        max: createVector2D(Infinity, Infinity),\n      },\n    };\n\n    const body: PhysicsBody = {\n      id,\n      state: {\n        position: { ...defaultOptions.initialPosition },\n        velocity: { ...defaultOptions.initialVelocity },\n        acceleration: createVector2D(0, 0),\n        rotation: 0,\n        angularVelocity: 0,\n        mass: defaultOptions.mass,\n        timestamp: Date.now(),\n      },\n      options: defaultOptions,\n      forces: [],\n      collisionListeners: [],\n    };\n\n    this.bodies.set(id, body);\n    return id;\n  }\n\n  /**\n   * Remove a physics body\n   */\n  removeBody(id: string): void {\n    this.bodies.delete(id);\n  }\n\n  /**\n   * Apply force to a body\n   */\n  applyForce(id: string, force: Vector2D): void {\n    const body = this.bodies.get(id);\n    if (body) {\n      body.forces.push(force);\n    }\n  }\n\n  /**\n   * Apply impulse (instant velocity change) to a body\n   */\n  applyImpulse(id: string, impulse: Vector2D): void {\n    const body = this.bodies.get(id);\n    if (body) {\n      body.state.velocity = addVectors(\n        body.state.velocity,\n        multiplyVector(impulse, 1 / body.state.mass)\n      );\n    }\n  }\n\n  /**\n   * Set velocity of a body\n   */\n  setVelocity(id: string, velocity: Vector2D): void {\n    const body = this.bodies.get(id);\n    if (body) {\n      body.state.velocity = { ...velocity };\n    }\n  }\n\n  /**\n   * Set position of a body\n   */\n  setPosition(id: string, position: Vector2D): void {\n    const body = this.bodies.get(id);\n    if (body) {\n      body.state.position = { ...position };\n    }\n  }\n\n  /**\n   * Get the current state of a body\n   */\n  getBodyState(id: string): PhysicsBodyState | null {\n    const body = this.bodies.get(id);\n    return body ? { ...body.state } : null;\n  }\n\n  /**\n   * Add collision listener to a body\n   */\n  onCollision(id: string, listener: (event: CollisionEvent) => void): () => void {\n    const body = this.bodies.get(id);\n    if (body) {\n      body.collisionListeners.push(listener);\n      return () => {\n        const index = body.collisionListeners.indexOf(listener);\n        if (index !== -1) {\n          body.collisionListeners.splice(index, 1);\n        }\n      };\n    }\n    return () => {};\n  }\n\n  /**\n   * Set gravity\n   */\n  setGravity(gravity: Vector2D): void {\n    this.gravity = gravity;\n  }\n\n  /**\n   * Set time scale (slow motion / speed up)\n   */\n  setTimeScale(scale: number): void {\n    this.timeScale = Math.max(0, scale);\n  }\n\n  /**\n   * Start the physics simulation\n   */\n  start(): void {\n    if (!this.running) {\n      this.running = true;\n      this.lastTime = performance.now();\n      this.update();\n    }\n  }\n\n  /**\n   * Stop the physics simulation\n   */\n  stop(): void {\n    this.running = false;\n    if (this.animationFrameId !== null) {\n      cancelAnimationFrame(this.animationFrameId);\n      this.animationFrameId = null;\n    }\n  }\n\n  /**\n   * Force an update of the physics simulation\n   */\n  forceUpdate(): void {\n    const currentTime = performance.now();\n    const deltaTime = (currentTime - this.lastTime) / 1000;\n    this.lastTime = currentTime;\n    this.step(deltaTime * this.timeScale);\n  }\n\n  /**\n   * Main update loop\n   */\n  private update(): void {\n    if (!this.running) return;\n\n    const currentTime = performance.now();\n    const deltaTime = (currentTime - this.lastTime) / 1000;\n    this.lastTime = currentTime;\n\n    this.step(deltaTime * this.timeScale);\n\n    this.animationFrameId = requestAnimationFrame(this.update);\n  }\n\n  /**\n   * Physics simulation step\n   */\n  private step(deltaTime: number): void {\n    // Cap delta time to prevent instability\n    const dt = Math.min(deltaTime, 0.016); // Max 60 FPS equivalent\n\n    this.bodies.forEach((body) => {\n      // Apply gravity\n      const gravityForce = multiplyVector(\n        this.gravity,\n        body.state.mass * body.options.gravityScale\n      );\n      body.forces.push(gravityForce);\n\n      // Calculate net force\n      const netForce = body.forces.reduce(\n        (acc, force) => addVectors(acc, force),\n        createVector2D(0, 0)\n      );\n\n      // Calculate acceleration (F = ma)\n      body.state.acceleration = multiplyVector(netForce, 1 / body.state.mass);\n\n      // Update velocity\n      body.state.velocity = addVectors(\n        body.state.velocity,\n        multiplyVector(body.state.acceleration, dt)\n      );\n\n      // Apply damping\n      body.state.velocity = multiplyVector(\n        body.state.velocity,\n        Math.pow(1 - body.options.damping, dt)\n      );\n\n      // Update position\n      body.state.position = addVectors(\n        body.state.position,\n        multiplyVector(body.state.velocity, dt)\n      );\n\n      // Apply bounds\n      if (body.options.bounds) {\n        const { min, max } = body.options.bounds;\n\n        if (body.state.position.x < min.x) {\n          body.state.position.x = min.x;\n          body.state.velocity.x *= -body.options.restitution;\n        }\n        if (body.state.position.x > max.x) {\n          body.state.position.x = max.x;\n          body.state.velocity.x *= -body.options.restitution;\n        }\n        if (body.state.position.y < min.y) {\n          body.state.position.y = min.y;\n          body.state.velocity.y *= -body.options.restitution;\n        }\n        if (body.state.position.y > max.y) {\n          body.state.position.y = max.y;\n          body.state.velocity.y *= -body.options.restitution;\n        }\n      }\n\n      // Update rotation\n      if (!body.options.fixedRotation) {\n        body.state.rotation += body.state.angularVelocity * dt;\n        body.state.angularVelocity *= Math.pow(1 - body.options.angularDamping, dt);\n      }\n\n      // Update timestamp\n      body.state.timestamp = Date.now();\n\n      // Clear forces for next frame\n      body.forces = [];\n    });\n\n    // Detect collisions (simple AABB for now)\n    this.detectCollisions();\n  }\n\n  /**\n   * Simple collision detection\n   */\n  private detectCollisions(): void {\n    const bodyArray = Array.from(this.bodies.values());\n\n    for (let i = 0; i < bodyArray.length; i++) {\n      for (let j = i + 1; j < bodyArray.length; j++) {\n        const bodyA = bodyArray[i];\n        const bodyB = bodyArray[j];\n\n        // Simple distance-based collision\n        const distance = Math.sqrt(\n          Math.pow(bodyA.state.position.x - bodyB.state.position.x, 2) +\n          Math.pow(bodyA.state.position.y - bodyB.state.position.y, 2)\n        );\n\n        // Assume radius of 20 for simplicity\n        const collisionThreshold = 40;\n\n        if (distance < collisionThreshold) {\n          const collisionPoint = createVector2D(\n            (bodyA.state.position.x + bodyB.state.position.x) / 2,\n            (bodyA.state.position.y + bodyB.state.position.y) / 2\n          );\n\n          const normal = subtractVectors(bodyB.state.position, bodyA.state.position);\n          const normalMagnitude = Math.sqrt(normal.x * normal.x + normal.y * normal.y);\n          const normalizedNormal: Vector2D = normalMagnitude > 0\n            ? multiplyVector(normal, 1 / normalMagnitude)\n            : createVector2D(0, 0);\n\n          const event: CollisionEvent = {\n            bodyA: bodyA.id,\n            bodyB: bodyB.id,\n            point: collisionPoint,\n            normal: normalizedNormal,\n            penetration: collisionThreshold - distance,\n            timestamp: Date.now(),\n          };\n\n          // Notify listeners\n          bodyA.collisionListeners.forEach((listener) => listener(event));\n          bodyB.collisionListeners.forEach((listener) => listener(event));\n        }\n      }\n    }\n  }\n\n  /**\n   * Get all body IDs\n   */\n  getBodies(): string[] {\n    return Array.from(this.bodies.keys());\n  }\n\n  /**\n   * Clear all bodies\n   */\n  clear(): void {\n    this.bodies.clear();\n  }\n}\n\n// Global instance\nlet globalPhysicsEngine: AuraPhysicsEngineAPI | null = null;\n\n/**\n * Get the global physics engine instance\n */\nexport const getGlobalPhysicsEngine = (): AuraPhysicsEngineAPI => {\n  if (!globalPhysicsEngine) {\n    globalPhysicsEngine = new AuraPhysicsEngineAPI();\n  }\n  return globalPhysicsEngine;\n};\n\n/**\n * Force update the global physics engine\n */\nexport const forcePhysicsEngineUpdate = (): void => {\n  const engine = getGlobalPhysicsEngine();\n  engine.forceUpdate();\n};\n\n/**\n * Get physics body state from the global engine\n */\nexport const getPhysicsBodyState = (bodyId: string): PhysicsBodyState | null => {\n  const engine = getGlobalPhysicsEngine();\n  return engine.getBodyState(bodyId);\n};\n", "'use client';\n/**\n * Physics Layout Hook\n * Provides physics-based layout positioning and arrangement\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePhysicsEngine } from './usePhysicsEngine';\nimport { Vector2D, createVector2D } from '../../types/common';\nimport { PhysicsBodyOptions } from '../../physics/AuraPhysicsEngine';\n\n/**\n * Layout element configuration\n */\nexport interface LayoutElement {\n  id: string;\n  width: number;\n  height: number;\n  initialPosition?: Vector2D;\n  mass?: number;\n  fixed?: boolean; // Fixed elements don't move\n}\n\n/**\n * Layout configuration\n */\nexport interface PhysicsLayoutConfig {\n  elements: LayoutElement[];\n  containerWidth: number;\n  containerHeight: number;\n  padding?: number;\n  spacing?: number;\n  attraction?: number; // Force attracting elements to their target positions\n  repulsion?: number; // Force repelling overlapping elements\n  damping?: number;\n  mode?: 'grid' | 'flow' | 'force' | 'magnetic' | 'cluster';\n}\n\n/**\n * Layout result\n */\nexport interface LayoutResult {\n  positions: Map<string, Vector2D>;\n  isStable: boolean;\n  iterations: number;\n}\n\n/**\n * Hook for physics-based layout\n */\nexport const usePhysicsLayout = (config: PhysicsLayoutConfig) => {\n  const {\n    elements = [],\n    containerWidth,\n    containerHeight,\n    padding = 20,\n    spacing = 10,\n    attraction = 0.1,\n    repulsion = 100,\n    damping = 0.3,\n    mode = 'force',\n  } = config;\n\n  const {\n    createBody,\n    removeBody,\n    applyForce,\n    getBodyState,\n    start,\n    stop,\n    isRunning,\n    bodyStates,\n  } = usePhysicsEngine({\n    autoStart: false,\n    gravity: createVector2D(0, 0), // No gravity for layouts\n    timeScale: 1.0,\n  });\n\n  const [positions, setPositions] = useState<Map<string, Vector2D>>(new Map());\n  const [isStable, setIsStable] = useState(false);\n  const iterationsRef = useRef(0);\n  const targetPositionsRef = useRef<Map<string, Vector2D>>(new Map());\n\n  /**\n   * Calculate target positions based on layout mode\n   */\n  const calculateTargetPositions = useCallback(() => {\n    const targets = new Map<string, Vector2D>();\n\n    switch (mode) {\n      case 'grid': {\n        // Calculate grid layout\n        const cols = Math.floor(containerWidth / (100 + spacing));\n        elements.forEach((element, index) => {\n          const col = index % cols;\n          const row = Math.floor(index / cols);\n          targets.set(\n            element.id,\n            createVector2D(\n              padding + col * (100 + spacing),\n              padding + row * (100 + spacing)\n            )\n          );\n        });\n        break;\n      }\n\n      case 'flow': {\n        // Flow layout (like flexbox)\n        let x = padding;\n        let y = padding;\n        let rowHeight = 0;\n\n        elements.forEach((element) => {\n          if (x + element.width > containerWidth - padding) {\n            x = padding;\n            y += rowHeight + spacing;\n            rowHeight = 0;\n          }\n\n          targets.set(element.id, createVector2D(x, y));\n          x += element.width + spacing;\n          rowHeight = Math.max(rowHeight, element.height);\n        });\n        break;\n      }\n\n      case 'force':\n      case 'magnetic':\n      case 'cluster': {\n        // For force-based layouts, use center as initial target\n        elements.forEach((element) => {\n          if (element.initialPosition) {\n            targets.set(element.id, element.initialPosition);\n          } else {\n            targets.set(\n              element.id,\n              createVector2D(\n                containerWidth / 2 + (Math.random() - 0.5) * 100,\n                containerHeight / 2 + (Math.random() - 0.5) * 100\n              )\n            );\n          }\n        });\n        break;\n      }\n    }\n\n    targetPositionsRef.current = targets;\n    return targets;\n  }, [mode, elements, containerWidth, containerHeight, padding, spacing]);\n\n  /**\n   * Initialize physics bodies\n   */\n  useEffect(() => {\n    // Calculate target positions\n    const targets = calculateTargetPositions();\n\n    // Create physics bodies\n    elements.forEach((element) => {\n      const target = targets.get(element.id) || createVector2D(0, 0);\n\n      const bodyOptions: PhysicsBodyOptions = {\n        mass: element.mass || 1,\n        damping: damping,\n        initialPosition: target,\n        initialVelocity: createVector2D(0, 0),\n        bounds: {\n          min: createVector2D(padding, padding),\n          max: createVector2D(\n            containerWidth - padding - element.width,\n            containerHeight - padding - element.height\n          ),\n        },\n      };\n\n      createBody(element.id, bodyOptions);\n    });\n\n    // Start simulation\n    start();\n    iterationsRef.current = 0;\n\n    return () => {\n      elements.forEach((element) => removeBody(element.id));\n      stop();\n    };\n  }, [elements, calculateTargetPositions, createBody, removeBody, start, stop, damping, padding, containerWidth, containerHeight]);\n\n  /**\n   * Apply layout forces\n   */\n  useEffect(() => {\n    if (!isRunning) return;\n\n    const applyLayoutForces = () => {\n      elements.forEach((element, index) => {\n        if (element.fixed) return;\n\n        const state = getBodyState(element.id);\n        if (!state) return;\n\n        const target = targetPositionsRef.current.get(element.id);\n        if (!target) return;\n\n        // Attraction force to target position\n        const attractionForce: Vector2D = {\n          x: (target.x - state.position.x) * attraction,\n          y: (target.y - state.position.y) * attraction,\n        };\n\n        applyForce(element.id, attractionForce);\n\n        // Repulsion force from other elements\n        elements.forEach((otherElement, otherIndex) => {\n          if (index === otherIndex) return;\n\n          const otherState = getBodyState(otherElement.id);\n          if (!otherState) return;\n\n          const dx = state.position.x - otherState.position.x;\n          const dy = state.position.y - otherState.position.y;\n          const distance = Math.sqrt(dx * dx + dy * dy);\n\n          if (distance < 150 && distance > 0) {\n            const force = (repulsion / (distance * distance));\n            const repulsionForce: Vector2D = {\n              x: (dx / distance) * force,\n              y: (dy / distance) * force,\n            };\n\n            applyForce(element.id, repulsionForce);\n          }\n        });\n\n        // Magnetic mode: attraction between nearby elements\n        if (mode === 'magnetic') {\n          elements.forEach((otherElement, otherIndex) => {\n            if (index === otherIndex) return;\n\n            const otherState = getBodyState(otherElement.id);\n            if (!otherState) return;\n\n            const dx = otherState.position.x - state.position.x;\n            const dy = otherState.position.y - state.position.y;\n            const distance = Math.sqrt(dx * dx + dy * dy);\n\n            if (distance > 150 && distance < 300 && distance > 0) {\n              const force = 0.05;\n              const magneticForce: Vector2D = {\n                x: (dx / distance) * force,\n                y: (dy / distance) * force,\n              };\n\n              applyForce(element.id, magneticForce);\n            }\n          });\n        }\n      });\n\n      iterationsRef.current += 1;\n\n      // Check stability\n      const isLayoutStable = elements.every((element) => {\n        const state = getBodyState(element.id);\n        if (!state) return false;\n\n        const velocityMag = Math.sqrt(\n          state.velocity.x * state.velocity.x + state.velocity.y * state.velocity.y\n        );\n\n        return velocityMag < 0.1;\n      });\n\n      setIsStable(isLayoutStable);\n\n      if (isLayoutStable) {\n        stop();\n      }\n    };\n\n    const interval = setInterval(applyLayoutForces, 16); // ~60fps\n\n    return () => clearInterval(interval);\n  }, [\n    isRunning,\n    elements,\n    getBodyState,\n    applyForce,\n    attraction,\n    repulsion,\n    mode,\n    stop,\n  ]);\n\n  /**\n   * Update positions from physics states\n   */\n  useEffect(() => {\n    const newPositions = new Map<string, Vector2D>();\n\n    elements.forEach((element) => {\n      const state = bodyStates.get(element.id);\n      if (state) {\n        newPositions.set(element.id, state.position);\n      }\n    });\n\n    setPositions(newPositions);\n  }, [bodyStates, elements]);\n\n  /**\n   * Reset layout\n   */\n  const reset = useCallback(() => {\n    elements.forEach((element) => removeBody(element.id));\n    calculateTargetPositions();\n    elements.forEach((element) => {\n      const target = targetPositionsRef.current.get(element.id) || createVector2D(0, 0);\n      createBody(element.id, {\n        initialPosition: target,\n        mass: element.mass || 1,\n        damping: damping,\n      });\n    });\n    iterationsRef.current = 0;\n    setIsStable(false);\n    start();\n  }, [elements, removeBody, createBody, calculateTargetPositions, damping, start]);\n\n  /**\n   * Get layout result\n   */\n  const getLayout = useCallback((): LayoutResult => {\n    return {\n      positions,\n      isStable,\n      iterations: iterationsRef.current,\n    };\n  }, [positions, isStable]);\n\n  return {\n    positions,\n    isStable,\n    iterations: iterationsRef.current,\n    reset,\n    getLayout,\n    start,\n    stop,\n    isRunning,\n  };\n};", "'use client';\n/**\n * 3D Transform Hook\n * Provides advanced 3D CSS transform capabilities with perspective and rotation\n */\n\nimport { useCallback, useState, useRef, CSSProperties } from 'react';\nimport { Vector2D } from '../../types/common';\n\n/**\n * 3D Transform state\n */\nexport interface Transform3DState {\n  rotateX: number; // Rotation around X axis (degrees)\n  rotateY: number; // Rotation around Y axis (degrees)\n  rotateZ: number; // Rotation around Z axis (degrees)\n  translateX: number; // Translation on X axis (px)\n  translateY: number; // Translation on Y axis (px)\n  translateZ: number; // Translation on Z axis (px)\n  scale: number; // Uniform scale\n  scaleX: number; // Scale on X axis\n  scaleY: number; // Scale on Y axis\n  scaleZ: number; // Scale on Z axis\n  perspective: number; // Perspective (px)\n}\n\n/**\n * 3D Transform options\n */\nexport interface Use3DTransformOptions {\n  initialTransform?: Partial<Transform3DState>;\n  perspective?: number;\n  transformOrigin?: string;\n  backfaceVisibility?: 'visible' | 'hidden';\n  transformStyle?: 'flat' | 'preserve-3d';\n}\n\n/**\n * Hook for 3D transforms\n */\nexport const use3DTransform = (options: Use3DTransformOptions = {}) => {\n  const {\n    initialTransform = {},\n    perspective = 1000,\n    transformOrigin = 'center center',\n    backfaceVisibility = 'visible',\n    transformStyle = 'preserve-3d',\n  } = options;\n\n  const defaultTransform: Transform3DState = {\n    rotateX: 0,\n    rotateY: 0,\n    rotateZ: 0,\n    translateX: 0,\n    translateY: 0,\n    translateZ: 0,\n    scale: 1,\n    scaleX: 1,\n    scaleY: 1,\n    scaleZ: 1,\n    perspective: perspective,\n    ...initialTransform,\n  };\n\n  const [transform, setTransform] = useState<Transform3DState>(defaultTransform);\n  const animationFrameRef = useRef<number | null>(null);\n\n  /**\n   * Generate CSS transform string\n   */\n  const getTransformString = useCallback((state: Transform3DState = transform): string => {\n    return [\n      `perspective(${state.perspective}px)`,\n      `rotateX(${state.rotateX}deg)`,\n      `rotateY(${state.rotateY}deg)`,\n      `rotateZ(${state.rotateZ}deg)`,\n      `translateX(${state.translateX}px)`,\n      `translateY(${state.translateY}px)`,\n      `translateZ(${state.translateZ}px)`,\n      `scale3d(${state.scaleX}, ${state.scaleY}, ${state.scaleZ})`,\n    ].join(' ');\n  }, [transform]);\n\n  /**\n   * Get CSS style object\n   */\n  const getStyle = useCallback((): CSSProperties => {\n    return {\n      transform: getTransformString(),\n      transformOrigin,\n      backfaceVisibility,\n      transformStyle,\n    };\n  }, [getTransformString, transformOrigin, backfaceVisibility, transformStyle]);\n\n  /**\n   * Update transform\n   */\n  const updateTransform = useCallback((updates: Partial<Transform3DState>) => {\n    setTransform((prev) => ({ ...prev, ...updates }));\n  }, []);\n\n  /**\n   * Set rotation\n   */\n  const setRotation = useCallback((x: number, y: number, z: number = 0) => {\n    updateTransform({ rotateX: x, rotateY: y, rotateZ: z });\n  }, [updateTransform]);\n\n  /**\n   * Set translation\n   */\n  const setTranslation = useCallback((x: number, y: number, z: number = 0) => {\n    updateTransform({ translateX: x, translateY: y, translateZ: z });\n  }, [updateTransform]);\n\n  /**\n   * Set scale\n   */\n  const setScale = useCallback((scale: number | { x: number; y: number; z?: number }) => {\n    if (typeof scale === 'number') {\n      updateTransform({ scale, scaleX: scale, scaleY: scale, scaleZ: scale });\n    } else {\n      updateTransform({\n        scaleX: scale.x,\n        scaleY: scale.y,\n        scaleZ: scale.z ?? 1,\n      });\n    }\n  }, [updateTransform]);\n\n  /**\n   * Rotate from mouse/touch position\n   */\n  const rotateFromPointer = useCallback(\n    (\n      x: number,\n      y: number,\n      containerWidth: number,\n      containerHeight: number,\n      maxRotation: number = 20\n    ) => {\n      const centerX = containerWidth / 2;\n      const centerY = containerHeight / 2;\n\n      const rotateY = ((x - centerX) / centerX) * maxRotation;\n      const rotateX = -((y - centerY) / centerY) * maxRotation;\n\n      setRotation(rotateX, rotateY, transform.rotateZ);\n    },\n    [setRotation, transform.rotateZ]\n  );\n\n  /**\n   * Animated rotation\n   */\n  const animateRotation = useCallback(\n    (\n      targetX: number,\n      targetY: number,\n      targetZ: number = 0,\n      duration: number = 300\n    ) => {\n      const startTime = Date.now();\n      const startX = transform.rotateX;\n      const startY = transform.rotateY;\n      const startZ = transform.rotateZ;\n\n      const animate = () => {\n        const elapsed = Date.now() - startTime;\n        const progress = Math.min(elapsed / duration, 1);\n\n        // Easing function (ease-out)\n        const eased = 1 - Math.pow(1 - progress, 3);\n\n        const currentX = startX + (targetX - startX) * eased;\n        const currentY = startY + (targetY - startY) * eased;\n        const currentZ = startZ + (targetZ - startZ) * eased;\n\n        setRotation(currentX, currentY, currentZ);\n\n        if (progress < 1) {\n          animationFrameRef.current = requestAnimationFrame(animate);\n        }\n      };\n\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n\n      animationFrameRef.current = requestAnimationFrame(animate);\n    },\n    [transform, setRotation]\n  );\n\n  /**\n   * Reset transform\n   */\n  const reset = useCallback((animated: boolean = true) => {\n    if (animated) {\n      animateRotation(0, 0, 0);\n      // Animate other properties too\n      const startTime = Date.now();\n      const duration = 300;\n\n      const animate = () => {\n        const elapsed = Date.now() - startTime;\n        const progress = Math.min(elapsed / duration, 1);\n        const eased = 1 - Math.pow(1 - progress, 3);\n\n        updateTransform({\n          translateX: transform.translateX * (1 - eased),\n          translateY: transform.translateY * (1 - eased),\n          translateZ: transform.translateZ * (1 - eased),\n          scale: transform.scale + (1 - transform.scale) * eased,\n          scaleX: transform.scaleX + (1 - transform.scaleX) * eased,\n          scaleY: transform.scaleY + (1 - transform.scaleY) * eased,\n          scaleZ: transform.scaleZ + (1 - transform.scaleZ) * eased,\n        });\n\n        if (progress < 1) {\n          requestAnimationFrame(animate);\n        }\n      };\n\n      animate();\n    } else {\n      setTransform(defaultTransform);\n    }\n  }, [animateRotation, updateTransform, transform, defaultTransform]);\n\n  /**\n   * Apply card flip effect\n   */\n  const flip = useCallback((duration: number = 600) => {\n    const targetY = transform.rotateY >= 180 ? 0 : 180;\n    animateRotation(transform.rotateX, targetY, transform.rotateZ, duration);\n  }, [transform, animateRotation]);\n\n  /**\n   * Apply wobble effect\n   */\n  const wobble = useCallback((intensity: number = 10, duration: number = 500) => {\n    const steps = 4;\n    const stepDuration = duration / steps;\n\n    const wobbleSequence = [\n      { x: intensity, y: -intensity },\n      { x: -intensity, y: intensity },\n      { x: intensity, y: -intensity },\n      { x: 0, y: 0 },\n    ];\n\n    let currentStep = 0;\n\n    const performStep = () => {\n      if (currentStep < wobbleSequence.length) {\n        const { x, y } = wobbleSequence[currentStep];\n        animateRotation(x, y, 0, stepDuration);\n        currentStep++;\n        setTimeout(performStep, stepDuration);\n      }\n    };\n\n    performStep();\n  }, [animateRotation]);\n\n  /**\n   * Cleanup animation frame on unmount\n   */\n  useCallback(() => {\n    return () => {\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, []);\n\n  return {\n    transform,\n    style: getStyle(),\n    setRotation,\n    setTranslation,\n    setScale,\n    updateTransform,\n    rotateFromPointer,\n    animateRotation,\n    reset,\n    flip,\n    wobble,\n    getTransformString,\n  };\n};", "'use client';\n/**\n * Ambient Tilt Hook\n * Provides subtle ambient tilting effects based on device orientation or cursor position\n */\n\nimport { useCallback, useEffect, useRef, useState, CSSProperties } from 'react';\nimport { useReducedMotion } from '../useReducedMotion';\n\n/**\n * Tilt configuration options\n */\nexport interface UseAmbientTiltOptions {\n  maxTilt?: number; // Maximum tilt angle in degrees\n  reverse?: boolean; // Reverse tilt direction\n  perspective?: number; // CSS perspective value\n  scale?: number; // Scale on tilt\n  speed?: number; // Animation speed (higher = slower)\n  easing?: string; // CSS easing function\n  glare?: boolean; // Enable glare effect\n  gyroscope?: boolean; // Use device gyroscope\n  onTilt?: (tiltX: number, tiltY: number) => void;\n}\n\n/**\n * Tilt state\n */\ninterface TiltState {\n  tiltX: number;\n  tiltY: number;\n  glareOpacity: number;\n  glarePosition: { x: number; y: number };\n}\n\n/**\n * Hook for ambient tilt effects\n */\nexport const useAmbientTilt = (options: UseAmbientTiltOptions = {}) => {\n  const {\n    maxTilt = 15,\n    reverse = false,\n    perspective = 1000,\n    scale = 1.05,\n    speed = 300,\n    easing = 'cubic-bezier(0.03, 0.98, 0.52, 0.99)',\n    glare = false,\n    gyroscope = false,\n    onTilt,\n  } = options;\n\n  const prefersReducedMotion = useReducedMotion();\n  const containerRef = useRef<HTMLElement | null>(null);\n  const [tiltState, setTiltState] = useState<TiltState>({\n    tiltX: 0,\n    tiltY: 0,\n    glareOpacity: 0,\n    glarePosition: { x: 50, y: 50 },\n  });\n\n  const [isHovering, setIsHovering] = useState(false);\n  const animationFrameRef = useRef<number | null>(null);\n\n  /**\n   * Calculate tilt from cursor position\n   */\n  const calculateTilt = useCallback(\n    (clientX: number, clientY: number, element: HTMLElement) => {\n      const rect = element.getBoundingClientRect();\n      const centerX = rect.left + rect.width / 2;\n      const centerY = rect.top + rect.height / 2;\n\n      // Calculate offset from center\n      const offsetX = clientX - centerX;\n      const offsetY = clientY - centerY;\n\n      // Calculate tilt angles\n      let tiltX = (offsetY / (rect.height / 2)) * maxTilt;\n      let tiltY = (offsetX / (rect.width / 2)) * maxTilt;\n\n      if (reverse) {\n        tiltX = -tiltX;\n        tiltY = -tiltY;\n      }\n\n      // Calculate glare position (as percentage)\n      const glareX = ((clientX - rect.left) / rect.width) * 100;\n      const glareY = ((clientY - rect.top) / rect.height) * 100;\n\n      return {\n        tiltX: -tiltX, // Invert X for natural feel\n        tiltY: tiltY,\n        glarePosition: { x: glareX, y: glareY },\n      };\n    },\n    [maxTilt, reverse]\n  );\n\n  /**\n   * Handle mouse move\n   */\n  const handleMouseMove = useCallback(\n    (event: MouseEvent) => {\n      if (!containerRef.current || prefersReducedMotion) return;\n\n      const { tiltX, tiltY, glarePosition } = calculateTilt(\n        event.clientX,\n        event.clientY,\n        containerRef.current\n      );\n\n      setTiltState({\n        tiltX,\n        tiltY,\n        glareOpacity: glare ? 0.3 : 0,\n        glarePosition,\n      });\n\n      onTilt?.(tiltX, tiltY);\n    },\n    [calculateTilt, glare, onTilt, prefersReducedMotion]\n  );\n\n  /**\n   * Handle mouse enter\n   */\n  const handleMouseEnter = useCallback(() => {\n    setIsHovering(true);\n  }, []);\n\n  /**\n   * Handle mouse leave\n   */\n  const handleMouseLeave = useCallback(() => {\n    setIsHovering(false);\n    setTiltState({\n      tiltX: 0,\n      tiltY: 0,\n      glareOpacity: 0,\n      glarePosition: { x: 50, y: 50 },\n    });\n    onTilt?.(0, 0);\n  }, [onTilt]);\n\n  /**\n   * Handle device orientation (gyroscope)\n   */\n  const handleDeviceOrientation = useCallback(\n    (event: DeviceOrientationEvent) => {\n      if (!gyroscope || prefersReducedMotion) return;\n\n      // Beta is the front-to-back tilt in degrees (-180 to 180)\n      // Gamma is the left-to-right tilt in degrees (-90 to 90)\n      const beta = event.beta || 0;\n      const gamma = event.gamma || 0;\n\n      const tiltX = Math.max(-maxTilt, Math.min(maxTilt, (beta / 90) * maxTilt));\n      const tiltY = Math.max(-maxTilt, Math.min(maxTilt, (gamma / 90) * maxTilt));\n\n      setTiltState((prev) => ({\n        ...prev,\n        tiltX: reverse ? -tiltX : tiltX,\n        tiltY: reverse ? -tiltY : tiltY,\n      }));\n\n      onTilt?.(tiltX, tiltY);\n    },\n    [gyroscope, maxTilt, reverse, onTilt, prefersReducedMotion]\n  );\n\n  /**\n   * Set up event listeners\n   */\n  useEffect(() => {\n    const element = containerRef.current;\n    if (!element) return;\n\n    element.addEventListener('mousemove', handleMouseMove as EventListener);\n    element.addEventListener('mouseenter', handleMouseEnter);\n    element.addEventListener('mouseleave', handleMouseLeave);\n\n    // Add device orientation listener if gyroscope is enabled\n    if (gyroscope && window.DeviceOrientationEvent) {\n      window.addEventListener('deviceorientation', handleDeviceOrientation as EventListener);\n    }\n\n    return () => {\n      element.removeEventListener('mousemove', handleMouseMove as EventListener);\n      element.removeEventListener('mouseenter', handleMouseEnter);\n      element.removeEventListener('mouseleave', handleMouseLeave);\n\n      if (gyroscope) {\n        window.removeEventListener('deviceorientation', handleDeviceOrientation as EventListener);\n      }\n\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, [handleMouseMove, handleMouseEnter, handleMouseLeave, handleDeviceOrientation, gyroscope]);\n\n  /**\n   * Get transform style\n   */\n  const getTransformStyle = useCallback((): CSSProperties => {\n    if (prefersReducedMotion) {\n      return {\n        transform: 'none',\n      };\n    }\n\n    const scaleValue = isHovering ? scale : 1;\n\n    return {\n      transform: `perspective(${perspective}px) rotateX(${tiltState.tiltX}deg) rotateY(${tiltState.tiltY}deg) scale3d(${scaleValue}, ${scaleValue}, ${scaleValue})`,\n      transition: `transform ${speed}ms ${easing}`,\n      transformStyle: 'preserve-3d' as const,\n    };\n  }, [tiltState, isHovering, perspective, scale, speed, easing, prefersReducedMotion]);\n\n  /**\n   * Get glare style\n   */\n  const getGlareStyle = useCallback((): CSSProperties => {\n    if (!glare || prefersReducedMotion) {\n      return { display: 'none' };\n    }\n\n    return {\n      position: 'absolute',\n      top: 0,\n      left: 0,\n      width: '100%',\n      height: '100%',\n      background: `radial-gradient(circle at ${tiltState.glarePosition.x}% ${tiltState.glarePosition.y}%, rgba(255, 255, 255, ${tiltState.glareOpacity}), transparent 50%)`,\n      pointerEvents: 'none',\n      transition: `opacity ${speed}ms ${easing}`,\n      borderRadius: 'inherit',\n    };\n  }, [glare, tiltState, speed, easing, prefersReducedMotion]);\n\n  /**\n   * Reset tilt\n   */\n  const reset = useCallback(() => {\n    setTiltState({\n      tiltX: 0,\n      tiltY: 0,\n      glareOpacity: 0,\n      glarePosition: { x: 50, y: 50 },\n    });\n    setIsHovering(false);\n    onTilt?.(0, 0);\n  }, [onTilt]);\n\n  /**\n   * Set manual tilt\n   */\n  const setTilt = useCallback((tiltX: number, tiltY: number) => {\n    setTiltState((prev) => ({\n      ...prev,\n      tiltX: Math.max(-maxTilt, Math.min(maxTilt, tiltX)),\n      tiltY: Math.max(-maxTilt, Math.min(maxTilt, tiltY)),\n    }));\n    onTilt?.(tiltX, tiltY);\n  }, [maxTilt, onTilt]);\n\n  return {\n    ref: containerRef,\n    tiltX: tiltState.tiltX,\n    tiltY: tiltState.tiltY,\n    isHovering,\n    transformStyle: getTransformStyle(),\n    glareStyle: getGlareStyle(),\n    reset,\n    setTilt,\n  };\n};", "'use client';\n/**\n * Magnetic Element Hook\n * Creates magnetic attraction effect where elements follow the cursor\n */\n\nimport { useCallback, useEffect, useRef, useState, CSSProperties } from 'react';\nimport { Vector2D, createVector2D } from '../../types/common';\nimport { useReducedMotion } from '../useReducedMotion';\n\n/**\n * Magnetic element options\n */\nexport interface UseMagneticElementOptions {\n  strength?: number; // Magnetic strength (0-1)\n  range?: number; // Activation range in pixels\n  speed?: number; // Animation speed\n  maxDistance?: number; // Maximum distance element can move\n  returnSpeed?: number; // Speed of returning to original position\n  onActivate?: () => void;\n  onDeactivate?: () => void;\n  disabled?: boolean;\n}\n\n/**\n * Hook for magnetic element effect\n */\nexport const useMagneticElement = (options: UseMagneticElementOptions = {}) => {\n  const {\n    strength = 0.3,\n    range = 100,\n    speed = 0.15,\n    maxDistance = 30,\n    returnSpeed = 0.2,\n    onActivate,\n    onDeactivate,\n    disabled = false,\n  } = options;\n\n  const prefersReducedMotion = useReducedMotion();\n  const elementRef = useRef<HTMLElement | null>(null);\n  const [position, setPosition] = useState<Vector2D>(createVector2D(0, 0));\n  const [isActive, setIsActive] = useState(false);\n\n  const targetPositionRef = useRef<Vector2D>(createVector2D(0, 0));\n  const currentPositionRef = useRef<Vector2D>(createVector2D(0, 0));\n  const animationFrameRef = useRef<number | null>(null);\n\n  /**\n   * Calculate magnetic force\n   */\n  const calculateMagneticForce = useCallback(\n    (mouseX: number, mouseY: number, element: HTMLElement): Vector2D | null => {\n      const rect = element.getBoundingClientRect();\n      const centerX = rect.left + rect.width / 2;\n      const centerY = rect.top + rect.height / 2;\n\n      // Calculate distance from center\n      const dx = mouseX - centerX;\n      const dy = mouseY - centerY;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n\n      // Check if within range\n      if (distance > range) {\n        return null;\n      }\n\n      // Calculate magnetic pull\n      const pullStrength = (1 - distance / range) * strength;\n\n      // Calculate target position\n      let targetX = dx * pullStrength;\n      let targetY = dy * pullStrength;\n\n      // Limit maximum distance\n      const targetDistance = Math.sqrt(targetX * targetX + targetY * targetY);\n      if (targetDistance > maxDistance) {\n        const scale = maxDistance / targetDistance;\n        targetX *= scale;\n        targetY *= scale;\n      }\n\n      return createVector2D(targetX, targetY);\n    },\n    [strength, range, maxDistance]\n  );\n\n  /**\n   * Lerp (linear interpolation) function\n   */\n  const lerp = useCallback((start: number, end: number, factor: number): number => {\n    return start + (end - start) * factor;\n  }, []);\n\n  /**\n   * Animation loop\n   */\n  const animate = useCallback(() => {\n    const current = currentPositionRef.current;\n    const target = targetPositionRef.current;\n\n    // Lerp current position towards target\n    const newX = lerp(current.x, target.x, isActive ? speed : returnSpeed);\n    const newY = lerp(current.y, target.y, isActive ? speed : returnSpeed);\n\n    currentPositionRef.current = createVector2D(newX, newY);\n    setPosition(createVector2D(newX, newY));\n\n    // Continue animation if not at target\n    const distance = Math.sqrt(\n      Math.pow(target.x - newX, 2) + Math.pow(target.y - newY, 2)\n    );\n\n    if (distance > 0.1) {\n      animationFrameRef.current = requestAnimationFrame(animate);\n    }\n  }, [isActive, speed, returnSpeed, lerp]);\n\n  /**\n   * Handle mouse move\n   */\n  const handleMouseMove = useCallback(\n    (event: MouseEvent) => {\n      if (!elementRef.current || disabled || prefersReducedMotion) return;\n\n      const force = calculateMagneticForce(\n        event.clientX,\n        event.clientY,\n        elementRef.current\n      );\n\n      if (force) {\n        if (!isActive) {\n          setIsActive(true);\n          onActivate?.();\n        }\n\n        targetPositionRef.current = force;\n\n        // Start animation loop if not already running\n        if (!animationFrameRef.current) {\n          animationFrameRef.current = requestAnimationFrame(animate);\n        }\n      } else {\n        if (isActive) {\n          setIsActive(false);\n          onDeactivate?.();\n        }\n\n        // Return to original position\n        targetPositionRef.current = createVector2D(0, 0);\n\n        if (!animationFrameRef.current) {\n          animationFrameRef.current = requestAnimationFrame(animate);\n        }\n      }\n    },\n    [\n      disabled,\n      prefersReducedMotion,\n      calculateMagneticForce,\n      isActive,\n      animate,\n      onActivate,\n      onDeactivate,\n    ]\n  );\n\n  /**\n   * Handle mouse leave (for document)\n   */\n  const handleMouseLeave = useCallback(() => {\n    if (isActive) {\n      setIsActive(false);\n      onDeactivate?.();\n    }\n\n    targetPositionRef.current = createVector2D(0, 0);\n\n    if (!animationFrameRef.current) {\n      animationFrameRef.current = requestAnimationFrame(animate);\n    }\n  }, [isActive, animate, onDeactivate]);\n\n  /**\n   * Set up event listeners\n   */\n  useEffect(() => {\n    if (disabled || prefersReducedMotion) {\n      return;\n    }\n\n    window.addEventListener('mousemove', handleMouseMove);\n    document.addEventListener('mouseleave', handleMouseLeave);\n\n    return () => {\n      window.removeEventListener('mousemove', handleMouseMove);\n      document.removeEventListener('mouseleave', handleMouseLeave);\n\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n        animationFrameRef.current = null;\n      }\n    };\n  }, [handleMouseMove, handleMouseLeave, disabled, prefersReducedMotion]);\n\n  /**\n   * Get transform style\n   */\n  const getStyle = useCallback((): CSSProperties => {\n    if (prefersReducedMotion || disabled) {\n      return {};\n    }\n\n    return {\n      transform: `translate3d(${position.x}px, ${position.y}px, 0)`,\n      transition: 'none', // Smooth animation handled by RAF\n    };\n  }, [position, prefersReducedMotion, disabled]);\n\n  /**\n   * Reset position\n   */\n  const reset = useCallback(() => {\n    targetPositionRef.current = createVector2D(0, 0);\n    currentPositionRef.current = createVector2D(0, 0);\n    setPosition(createVector2D(0, 0));\n    setIsActive(false);\n  }, []);\n\n  return {\n    ref: elementRef,\n    position,\n    isActive,\n    style: getStyle(),\n    reset,\n  };\n};", "'use client';\nimport React from 'react';\nimport { useRef, useCallback, useEffect, useState } from 'react';\nimport { ZSpaceManager, zSpaceLayer } from '../../core/mixins/zSpaceLayer';\nimport { useMultiSpring, SpringConfig } from '../../animations/hooks/useMultiSpringBasic';\n\nexport interface ZSpaceLayer {\n  id: string;\n  zIndex: number;\n  elevation: number;\n  opacity: number;\n  scale: number;\n  blur: number;\n  transform: string;\n}\n\nexport interface ZSpaceAnimationConfig {\n  /** Enable z-space animations */\n  enabled?: boolean;\n  /** Spring configuration for z-space transitions */\n  springConfig?: SpringConfig;\n  /** Default transition duration */\n  duration?: number;\n  /** Enable layered animations */\n  layered?: boolean;\n  /** Layer stagger delay */\n  staggerDelay?: number;\n  /** Maximum concurrent animations */\n  maxConcurrent?: number;\n  /** Enable depth-based scaling */\n  depthScaling?: boolean;\n  /** Depth scaling factor */\n  depthScaleFactor?: number;\n  /** Enable blur effects based on depth */\n  depthBlur?: boolean;\n  /** Maximum blur amount */\n  maxBlur?: number;\n}\n\nexport type ZSpaceConfig = ZSpaceAnimationConfig;\n\nconst DEFAULT_CONFIG: Required<ZSpaceAnimationConfig> = {\n  enabled: true,\n  springConfig: { stiffness: 200, damping: 25, mass: 1 },\n  duration: 300,\n  layered: true,\n  staggerDelay: 50,\n  maxConcurrent: 5,\n  depthScaling: true,\n  depthScaleFactor: 0.02,\n  depthBlur: true,\n  maxBlur: 5,\n};\n\nexport function useZSpaceAnimation(\n  initialLayers: ZSpaceLayer[] = [],\n  config: ZSpaceAnimationConfig = {}\n) {\n  const finalConfig = { ...DEFAULT_CONFIG, ...config };\n  const zSpaceManagerRef = useRef(ZSpaceManager.getInstance());\n  const [layers, setLayers] = useState<ZSpaceLayer[]>(initialLayers);\n  const [animatingLayers, setAnimatingLayers] = useState<Set<string>>(new Set());\n  const springSystem = useMultiSpring({}, { config: finalConfig.springConfig });\n\n  // Initialize layers with z-space management\n  useEffect(() => {\n    initialLayers.forEach((layer: any) => {\n      zSpaceManagerRef.current.registerLayer(layer.id, layer.zIndex);\n    });\n\n    setLayers(initialLayers);\n\n    return () => {\n      initialLayers.forEach((layer: any) => {\n        zSpaceManagerRef.current.unregisterLayer(layer.id);\n      });\n    };\n  }, [initialLayers]);\n\n  // Animate layer to new z-space position\n  const animateToZSpace = useCallback((\n    layerId: string,\n    targetElevation: number,\n    options: {\n      duration?: number;\n      easing?: string;\n      onComplete?: () => void;\n    } = {}\n  ) => {\n    if (!finalConfig.enabled) return;\n\n    const layer = layers.find(l => l.id === layerId);\n    if (!layer) return;\n\n    const { duration = finalConfig.duration, onComplete } = options;\n\n    // Mark as animating\n    setAnimatingLayers((prev: Set<string>) => new Set(prev).add(layerId));\n\n    // Create spring animation targets\n    const springTargets: Record<string, number> = {\n      [`${layerId}-elevation`]: targetElevation,\n      [`${layerId}-opacity`]: targetElevation > layer.elevation ? 1 : 0.8,\n      [`${layerId}-scale`]: finalConfig.depthScaling\n        ? 1 + (targetElevation * finalConfig.depthScaleFactor)\n        : 1,\n      [`${layerId}-blur`]: finalConfig.depthBlur\n        ? Math.min(finalConfig.maxBlur, targetElevation * 0.1)\n        : 0,\n    };\n\n    springSystem.start(springTargets);\n\n    // Update layer after animation\n    setTimeout(() => {\n      setLayers((prev: any) => prev.map((l: any) =>\n        l.id === layerId\n          ? {\n              ...l,\n              elevation: targetElevation,\n              zIndex: zSpaceManagerRef.current.getLayerZIndex(layerId),\n              opacity: springTargets?.[`${layerId}-opacity`],\n              scale: springTargets?.[`${layerId}-scale`],\n              blur: springTargets?.[`${layerId}-blur`],\n              transform: `scale(${springTargets?.[`${layerId}-scale`]}) translateZ(${targetElevation}px)`,\n            }\n          : l\n      ));\n\n      setAnimatingLayers((prev: Set<string>) => {\n        const next = new Set(prev);\n        next.delete(layerId);\n        return next;\n      });\n\n      onComplete?.();\n    }, duration);\n  }, [layers, finalConfig, springSystem]);\n\n  // Animate layered transition\n  const animateLayeredTransition = useCallback((\n    layerUpdates: Array<{\n      id: string;\n      elevation: number;\n      delay?: number;\n    }>,\n    globalOptions: {\n      staggerDelay?: number;\n      duration?: number;\n    } = {}\n  ) => {\n    if (!finalConfig.enabled || !finalConfig.layered) return;\n\n    const { staggerDelay = finalConfig.staggerDelay, duration } = globalOptions;\n\n    layerUpdates.forEach((update, index) => {\n      const delay = update.delay ?? (index * staggerDelay);\n\n      setTimeout(() => {\n        animateToZSpace(update.id, update.elevation, { duration });\n      }, delay);\n    });\n  }, [finalConfig, animateToZSpace]);\n\n  // Bring layer to front\n  const bringToFront = useCallback((\n    layerId: string,\n    options?: { duration?: number; onComplete?: () => void }\n  ) => {\n    const maxElevation = Math.max(...layers.map((l: any) => l.elevation)) + 10;\n    animateToZSpace(layerId, maxElevation, options);\n  }, [layers, animateToZSpace]);\n\n  // Send layer to back\n  const sendToBack = useCallback((\n    layerId: string,\n    options?: { duration?: number; onComplete?: () => void }\n  ) => {\n    const minElevation = Math.min(...layers.map((l: any) => l.elevation)) - 10;\n    animateToZSpace(layerId, minElevation, options);\n  }, [layers, animateToZSpace]);\n\n  // Create depth-based stacking\n  const createDepthStack = useCallback((\n    layerIds: string[],\n    baseElevation: number = 0,\n    elevationStep: number = 5\n  ) => {\n    const updates = layerIds.map((id, index) => ({\n      id,\n      elevation: baseElevation + (index * elevationStep),\n    }));\n\n    animateLayeredTransition(updates);\n  }, [animateLayeredTransition]);\n\n  // Animate focus transition\n  const animateFocusTransition = useCallback((\n    focusedLayerId: string,\n    backgroundLayers: string[],\n    options: {\n      focusElevation?: number;\n      backgroundElevation?: number;\n      duration?: number;\n    } = {}\n  ) => {\n    const {\n      focusElevation = 20,\n      backgroundElevation = -5,\n      duration = finalConfig.duration,\n    } = options;\n\n    // Bring focused layer to front\n    animateToZSpace(focusedLayerId, focusElevation, { duration });\n\n    // Push background layers back\n    setTimeout(() => {\n      backgroundLayers.forEach((layerId: any) => {\n        animateToZSpace(layerId, backgroundElevation, { duration: duration * 0.8 });\n      });\n    }, duration * 0.2);\n  }, [animateToZSpace, finalConfig.duration]);\n\n  // Get layer styles for rendering\n  const getLayerStyles = useCallback((layerId: string) => {\n    const layer = layers.find(l => l.id === layerId);\n    if (!layer) return {};\n\n    const isAnimating = animatingLayers.has(layerId);\n    const springValues = springSystem.values;\n\n    // Use spring values if animating, otherwise use layer values\n    const elevation = isAnimating\n      ? springValues[`${layerId}-elevation`] ?? layer.elevation\n      : layer.elevation;\n\n    const opacity = isAnimating\n      ? springValues[`${layerId}-opacity`] ?? layer.opacity\n      : layer.opacity;\n\n    const scale = isAnimating\n      ? springValues[`${layerId}-scale`] ?? layer.scale\n      : layer.scale;\n\n    const blur = isAnimating\n      ? springValues[`${layerId}-blur`] ?? layer.blur\n      : layer.blur;\n\n    return {\n      ...zSpaceLayer({\n        zIndex: zSpaceManagerRef.current.getLayerZIndex(layerId),\n        elevation,\n        opacity,\n      }),\n      transform: `scale(${scale}) translateZ(${elevation}px)`,\n      filter: blur > 0 ? `blur(${blur}px)` : 'none',\n      transition: finalConfig.enabled ? `all ${finalConfig.duration}ms ease` : 'none',\n    };\n  }, [layers, animatingLayers, springSystem.values, finalConfig]);\n\n  // Add new layer\n  const addLayer = useCallback((\n    layer: Omit<ZSpaceLayer, 'zIndex'>,\n    options: {\n      animateIn?: boolean;\n      initialElevation?: number;\n      duration?: number;\n    } = {}\n  ) => {\n    const { animateIn = true, initialElevation = 0, duration } = options;\n\n    const newLayer: ZSpaceLayer = {\n      ...layer,\n      zIndex: zSpaceManagerRef.current.registerLayer(layer.id),\n      elevation: initialElevation,\n      opacity: 0,\n      scale: 0.8,\n      blur: 0,\n      transform: `scale(0.8) translateZ(${initialElevation}px)`,\n    };\n\n    setLayers((prev: any) => [...prev, newLayer]);\n\n    if (animateIn) {\n      setTimeout(() => {\n        animateToZSpace(layer.id, layer.elevation, { duration });\n      }, 16); // Next frame\n    }\n  }, [animateToZSpace]);\n\n  // Remove layer\n  const removeLayer = useCallback((\n    layerId: string,\n    options: {\n      animateOut?: boolean;\n      duration?: number;\n      onComplete?: () => void;\n    } = {}\n  ) => {\n    const { animateOut = true, duration, onComplete } = options;\n\n    if (animateOut) {\n      animateToZSpace(layerId, -20, {\n        duration,\n        onComplete: () => {\n          setLayers((prev: any) => prev.filter((l: any) => l.id !== layerId));\n          zSpaceManagerRef.current.unregisterLayer(layerId);\n          onComplete?.();\n        },\n      });\n    } else {\n      setLayers((prev: any) => prev.filter((l: any) => l.id !== layerId));\n      zSpaceManagerRef.current.unregisterLayer(layerId);\n      onComplete?.();\n    }\n  }, [animateToZSpace]);\n\n  // Update layer properties\n  const updateLayer = useCallback((\n    layerId: string,\n    updates: Partial<ZSpaceLayer>,\n    options: {\n      animate?: boolean;\n      duration?: number;\n    } = {}\n  ) => {\n    const { animate = true, duration } = options;\n\n    if (animate && updates.elevation !== undefined) {\n      animateToZSpace(layerId, updates.elevation, { duration });\n    } else {\n      setLayers((prev: any) => prev.map((layer: any) =>\n        layer.id === layerId ? { ...layer, ...updates } : layer\n      ));\n    }\n  }, [animateToZSpace]);\n\n  // Get layer information\n  const getLayer = useCallback((layerId: string): ZSpaceLayer | undefined => {\n    return layers.find(l => l.id === layerId);\n  }, [layers]);\n\n  // Get all layer information\n  const getAllLayers = useCallback((): ZSpaceLayer[] => {\n    return [...layers];\n  }, [layers]);\n\n  // Check if layer is animating\n  const isLayerAnimating = useCallback((layerId: string): boolean => {\n    return animatingLayers.has(layerId);\n  }, [animatingLayers]);\n\n  // Get animation progress\n  const getAnimationProgress = useCallback((layerId: string): number => {\n    if (!isLayerAnimating(layerId)) return 1;\n\n    const springValues = springSystem.values;\n    const targetElevation = layers.find(l => l.id === layerId)?.elevation ?? 0;\n    const currentElevation = springValues[`${layerId}-elevation`] ?? targetElevation;\n\n    // Simple progress calculation\n    return Math.abs(currentElevation / targetElevation) || 0;\n  }, [isLayerAnimating, springSystem.values, layers]);\n\n  return {\n    layers,\n    animatingLayers,\n\n    // Layer management\n    addLayer,\n    removeLayer,\n    updateLayer,\n    getLayer,\n    getAllLayers,\n\n    // Animation methods\n    animateToZSpace,\n    animateLayeredTransition,\n    bringToFront,\n    sendToBack,\n    createDepthStack,\n    animateFocusTransition,\n\n    // Style methods\n    getLayerStyles,\n\n    // State methods\n    isLayerAnimating,\n    getAnimationProgress,\n\n    // Configuration\n    config: finalConfig,\n    zSpaceManager: zSpaceManagerRef.current,\n  };\n}\n\n// Hook for parallax z-space effects\nexport function useParallaxZSpace(\n  layers: Array<{ id: string; depth: number; content: React.ReactNode }>,\n  config: ZSpaceAnimationConfig & {\n    mouseInfluence?: number;\n    scrollInfluence?: number;\n  } = {}\n) {\n  const {\n    mouseInfluence = 0.1,\n    scrollInfluence = 0.5,\n    ...zSpaceConfig\n  } = config;\n\n  const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n  const [scrollPosition, setScrollPosition] = useState(0);\n\n  const zSpaceAnimation = useZSpaceAnimation(\n    layers.map((layer: any) => ({\n      id: layer.id,\n      zIndex: 1,\n      elevation: 0,\n      opacity: 1,\n      scale: 1,\n      blur: 0,\n      transform: '',\n    })),\n    zSpaceConfig\n  );\n\n  // Mouse parallax effect\n  useEffect(() => {\n    const handleMouseMove = (event: MouseEvent) => {\n      const x = (event.clientX / window.innerWidth - 0.5) * 2;\n      const y = (event.clientY / window.innerHeight - 0.5) * 2;\n      setMousePosition({ x, y });\n    };\n\n    window.addEventListener('mousemove', handleMouseMove);\n    return () => window.removeEventListener('mousemove', handleMouseMove);\n  }, []);\n\n  // Scroll parallax effect\n  useEffect(() => {\n    const handleScroll = () => {\n      setScrollPosition(window.scrollY);\n    };\n\n    window.addEventListener('scroll', handleScroll);\n    return () => window.removeEventListener('scroll', handleScroll);\n  }, []);\n\n  // Apply parallax effects\n  useEffect(() => {\n    layers.forEach((layer: any) => {\n      const mouseOffset = {\n        x: mousePosition.x * layer.depth * mouseInfluence * 10,\n        y: mousePosition.y * layer.depth * mouseInfluence * 10,\n      };\n\n      const scrollOffset = scrollPosition * layer.depth * scrollInfluence * 0.1;\n\n      const totalElevation = mouseOffset.y + scrollOffset;\n\n      zSpaceAnimation.animateToZSpace(layer.id, totalElevation, {\n        duration: 50, // Quick response for parallax\n      });\n    });\n  }, [layers, mousePosition, scrollPosition, mouseInfluence, scrollInfluence, zSpaceAnimation]);\n\n  return {\n    ...zSpaceAnimation,\n    mousePosition,\n    scrollPosition,\n  };\n}\n\n// Hook for 3D card stacking effects\nexport function useCardStackZSpace(\n  cardCount: number,\n  config: ZSpaceAnimationConfig & {\n    cardSpacing?: number;\n    maxRotation?: number;\n    interactionRadius?: number;\n  } = {}\n) {\n  const {\n    cardSpacing = 2,\n    maxRotation = 15,\n    interactionRadius = 200,\n    ...zSpaceConfig\n  } = config;\n\n  const [hoveredCard, setHoveredCard] = useState<number | null>(null);\n  const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });\n\n  // Create card layers\n  const cardLayers: ZSpaceLayer[] = Array.from({ length: cardCount }, (_, index) => ({\n    id: `card-${index}`,\n    zIndex: cardCount - index,\n    elevation: index * cardSpacing,\n    opacity: 1,\n    scale: 1,\n    blur: 0,\n    transform: `translateZ(${index * cardSpacing}px)`,\n  }));\n\n  const zSpaceAnimation = useZSpaceAnimation(cardLayers, zSpaceConfig);\n\n  // Mouse interaction for 3D effects\n  useEffect(() => {\n    const handleMouseMove = (event: MouseEvent) => {\n      setMousePosition({ x: event.clientX, y: event.clientY });\n    };\n\n    window.addEventListener('mousemove', handleMouseMove);\n    return () => window.removeEventListener('mousemove', handleMouseMove);\n  }, []);\n\n  // Apply 3D card effects\n  useEffect(() => {\n    cardLayers.forEach((_, index) => {\n      const cardId = `card-${index}`;\n      const baseElevation = index * cardSpacing;\n\n      if (hoveredCard === index) {\n        // Lift hovered card\n        zSpaceAnimation.animateToZSpace(cardId, baseElevation + 20, {\n          duration: 200,\n        });\n      } else if (hoveredCard !== null) {\n        // Adjust other cards based on proximity to hovered card\n        const distance = Math.abs(index - hoveredCard);\n        const elevationOffset = Math.max(0, 10 - distance * 2);\n        zSpaceAnimation.animateToZSpace(cardId, baseElevation + elevationOffset, {\n          duration: 300,\n        });\n      } else {\n        // Return to base position\n        zSpaceAnimation.animateToZSpace(cardId, baseElevation, {\n          duration: 400,\n        });\n      }\n    });\n  }, [cardLayers, hoveredCard, cardSpacing, zSpaceAnimation]);\n\n  const handleCardHover = useCallback((cardIndex: number) => {\n    setHoveredCard(cardIndex);\n  }, []);\n\n  const handleCardLeave = useCallback(() => {\n    setHoveredCard(null);\n  }, []);\n\n  return {\n    ...zSpaceAnimation,\n    hoveredCard,\n    handleCardHover,\n    handleCardLeave,\n    cardCount,\n  };\n}\n\n// Hook for depth-based navigation\nexport function useDepthNavigation(\n  navigationItems: Array<{ id: string; label: string; depth: number }>,\n  config: ZSpaceAnimationConfig = {}\n) {\n  const [activeItem, setActiveItem] = useState<string | null>(null);\n  const [navigationPath, setNavigationPath] = useState<string[]>([]);\n\n  // Create navigation layers with depth-based positioning\n  const navLayers: ZSpaceLayer[] = navigationItems.map((item, index) => ({\n    id: item?.id,\n    zIndex: 10 - item?.depth,\n    elevation: item?.depth * 5,\n    opacity: 1,\n    scale: 1 - (item?.depth * 0.1),\n    blur: item?.depth * 2,\n    transform: `scale(${1 - (item?.depth * 0.1)}) translateZ(${item?.depth * 5}px)`,\n  }));\n\n  const zSpaceAnimation = useZSpaceAnimation(navLayers, config);\n\n  const navigateTo = useCallback((itemId: string) => {\n    const item = navigationItems.find(i => i.id === itemId);\n    if (!item) return;\n\n    // Update navigation path\n    const newPath = [...navigationPath];\n    const existingIndex = newPath.indexOf(itemId);\n\n    if (existingIndex >= 0) {\n      // Going back in navigation\n      newPath.splice(existingIndex + 1);\n    } else {\n      // Going deeper\n      newPath.push(itemId);\n    }\n\n    setNavigationPath(newPath);\n    setActiveItem(itemId);\n\n    // Animate depth changes\n    navigationItems.forEach((navItem: any) => {\n      const isInPath = newPath.includes(navItem.id);\n      const isActive = navItem.id === itemId;\n\n      const targetElevation = isActive ? 15 :\n                            isInPath ? 10 - (newPath.indexOf(navItem.id) * 2) :\n                            navItem.depth * 5;\n\n      zSpaceAnimation.animateToZSpace(navItem.id, targetElevation, {\n        duration: 300,\n      });\n    });\n  }, [navigationItems, navigationPath, zSpaceAnimation]);\n\n  const goBack = useCallback(() => {\n    if ((navigationPath?.length || 0) > 1) {\n      const previousItem = navigationPath[(navigationPath?.length || 0) - 2];\n      navigateTo(previousItem);\n    }\n  }, [navigationPath, navigateTo]);\n\n  const goHome = useCallback(() => {\n    if ((navigationPath?.length || 0) > 0) {\n      navigateTo(navigationPath[0]);\n    }\n  }, [navigationPath, navigateTo]);\n\n  return {\n    ...zSpaceAnimation,\n    activeItem,\n    navigationPath,\n    navigateTo,\n    goBack,\n    goHome,\n    canGoBack: (navigationPath?.length || 0) > 1,\n  };\n}\n\nexport type ZSpaceAnimationResult = ReturnType<typeof useZSpaceAnimation>;", "import React from 'react';\nimport { CSSProperties } from 'react';\n\nexport interface ZSpaceLayerConfig {\n  zIndex?: number;\n  elevation?: number | 'level1' | 'level2' | 'level3' | 'level4';\n  backdrop?: boolean;\n  blur?: number;\n  opacity?: number;\n}\n\nexport const zSpaceLayer = (config: ZSpaceLayerConfig = {}): CSSProperties => {\n  const {\n    zIndex = 1,\n    elevation = 0,\n    backdrop = false,\n    blur = 0,\n    opacity = 1,\n  } = config;\n\n  // Convert string elevations to numbers\n  const elevationMap: Record<string, number> = {\n    'level1': 1,\n    'level2': 2,\n    'level3': 3,\n    'level4': 4,\n  };\n\n  const numericElevation = typeof elevation === 'string'\n    ? elevationMap[elevation] || 0\n    : elevation;\n\n  const baseElevation = numericElevation * 100;\n  const backdropFilter = blur > 0 ? `blur(${blur}px)` : 'none';\n\n  return {\n    position: 'relative',\n    zIndex,\n    transform: `translateZ(${baseElevation}px)`,\n    opacity,\n    ...(backdrop && {\n      // Use createGlassStyle() instead,\n      // Use createGlassStyle() instead, // Safari support\n    }),\n  };\n};\n\nexport const createZSpaceLayers = (layers: ZSpaceLayerConfig[]): CSSProperties[] => {\n  return layers.map((layer, index) => ({\n    ...zSpaceLayer({\n      ...layer,\n      zIndex: layer.zIndex ?? index + 1,\n    }),\n  }));\n};\n\nexport const zSpacePresets = {\n  background: {\n    zIndex: 0,\n    elevation: 0,\n    backdrop: true,\n    blur: 10,\n  },\n  content: {\n    zIndex: 1,\n    elevation: 'level1',\n    backdrop: false,\n  },\n  overlay: {\n    zIndex: 10,\n    elevation: 'level2',\n    backdrop: true,\n    blur: 5,\n  },\n  modal: {\n    zIndex: 100,\n    elevation: 'level3',\n    backdrop: true,\n    blur: 8,\n  },\n  tooltip: {\n    zIndex: 1000,\n    elevation: 'level4',\n    backdrop: true,\n    blur: 4,\n  },\n  dropdown: {\n    zIndex: 100,\n    elevation: 'level2',\n    backdrop: true,\n    blur: 3,\n  },\n} as const;\n\nexport const getZSpaceLayer = (preset: keyof typeof zSpacePresets): CSSProperties => {\n  return zSpaceLayer(zSpacePresets[preset]);\n};\n\n// Utility for managing z-space hierarchies\nexport class ZSpaceManager {\n  private static instance: ZSpaceManager;\n  private layers: Map<string, number> = new Map();\n\n  static getInstance(): ZSpaceManager {\n    if (!ZSpaceManager.instance) {\n      ZSpaceManager.instance = new ZSpaceManager();\n    }\n    return ZSpaceManager.instance;\n  }\n\n  registerLayer(id: string, baseZIndex: number = 1): number {\n    const existing = this.layers.get(id);\n    if (existing !== undefined) {\n      return existing;\n    }\n\n    // Find the highest z-index and add 1\n    const highestZ = Math.max(...Array.from(this.layers.values()), baseZIndex - 1);\n    const newZ = highestZ + 1;\n\n    this.layers.set(id, newZ);\n    return newZ;\n  }\n\n  unregisterLayer(id: string): void {\n    this.layers.delete(id);\n  }\n\n  getLayerZIndex(id: string): number {\n    return this.layers.get(id) ?? 1;\n  }\n\n  clear(): void {\n    this.layers.clear();\n  }\n}\n\nexport const zSpaceManager = ZSpaceManager.getInstance();\n", "\"use client\";\nimport React from \"react\";\nimport { useRef, useEffect, useCallback, useState, useMemo } from \"react\";\nimport {\n  PerformanceMonitor,\n  MemoryManager,\n  type PerformanceMetrics as MonitorPerformanceMetrics,\n} from \"../../utils/performanceOptimizations\";\n\nexport type PerformanceLevel = \"low\" | \"medium\" | \"high\" | \"ultra\";\n\nexport interface GlassPerformanceReport extends MonitorPerformanceMetrics {\n  memoryStats?: ReturnType<MemoryManager[\"getStats\"]>;\n  recommendations: string[];\n}\n\nexport interface GlassPerformanceOptions {\n  /** Enable performance monitoring */\n  enableMonitoring?: boolean;\n  /** Target FPS for animations */\n  targetFPS?: number;\n  /** Memory limit in MB */\n  memoryLimit?: number;\n  /** Enable automatic quality adjustment */\n  autoAdjustQuality?: boolean;\n  /** Quality adjustment threshold */\n  qualityThreshold?: number;\n  /** Performance metrics callback */\n  onPerformanceMetrics?: (metrics: GlassPerformanceReport) => void;\n  /** Quality change callback */\n  onQualityChange?: (quality: number) => void;\n}\n\nexport interface GlassPerformanceMetrics {\n  fps: number;\n  frameTime: number;\n  memoryUsage: number;\n  renderTime: number;\n  quality: number;\n  isThrottled: boolean;\n  recommendations: string[];\n}\n\nconst DEFAULT_OPTIONS: Required<GlassPerformanceOptions> = {\n  enableMonitoring: true,\n  targetFPS: 60,\n  memoryLimit: 100,\n  autoAdjustQuality: true,\n  qualityThreshold: 45,\n  onPerformanceMetrics: () => {},\n  onQualityChange: () => {},\n};\n\nexport function useGlassPerformance(options: GlassPerformanceOptions = {}) {\n  const finalOptions = { ...DEFAULT_OPTIONS, ...options };\n  const monitorRef = useRef<PerformanceMonitor>();\n  const memoryManagerRef = useRef<MemoryManager>();\n  const frameCountRef = useRef(0);\n  const lastTimeRef = useRef(0);\n  const qualityRef = useRef(1.0);\n\n  const [metrics, setMetrics] = useState<GlassPerformanceMetrics>({\n    fps: 0,\n    frameTime: 0,\n    memoryUsage: 0,\n    renderTime: 0,\n    quality: 1.0,\n    isThrottled: false,\n    recommendations: [],\n  });\n\n  // Initialize performance monitoring\n  useEffect(() => {\n    if (!finalOptions.enableMonitoring) return;\n\n    monitorRef.current = PerformanceMonitor.getInstance({\n      targetFPS: finalOptions.targetFPS,\n      maxMemoryUsage: finalOptions.memoryLimit * 1024 * 1024,\n    });\n\n    memoryManagerRef.current = MemoryManager.getInstance(\n      finalOptions.memoryLimit * 1024 * 1024\n    );\n\n    return () => {\n      // PerformanceMonitor is a singleton and doesn't need explicit cleanup\n    };\n  }, [\n    finalOptions.enableMonitoring,\n    finalOptions.targetFPS,\n    finalOptions.memoryLimit,\n  ]);\n\n  // FPS monitoring\n  const measureFPS = useCallback(() => {\n    const currentTime = performance.now();\n    frameCountRef.current++;\n\n    if (lastTimeRef.current === 0) {\n      lastTimeRef.current = currentTime;\n    }\n\n    const deltaTime = currentTime - lastTimeRef.current;\n\n    if (deltaTime >= 1000) {\n      const fps = Math.round((frameCountRef.current * 1000) / deltaTime);\n      const frameTime = deltaTime / frameCountRef.current;\n\n      setMetrics((prev) => ({\n        ...prev,\n        fps,\n        frameTime,\n      }));\n\n      frameCountRef.current = 0;\n      lastTimeRef.current = currentTime;\n\n      // Quality adjustment\n      if (finalOptions.autoAdjustQuality) {\n        adjustQuality(fps);\n      }\n    }\n\n    requestAnimationFrame(measureFPS);\n  }, [finalOptions.autoAdjustQuality]);\n\n  const adjustQuality = useCallback(\n    (fps: number) => {\n      const targetFPS = finalOptions.targetFPS;\n      const threshold = finalOptions.qualityThreshold;\n\n      let newQuality = qualityRef.current;\n\n      if (fps < threshold) {\n        // Reduce quality\n        newQuality = Math.max(0.1, qualityRef.current * 0.9);\n      } else if (fps > targetFPS * 0.9) {\n        // Increase quality\n        newQuality = Math.min(1.0, qualityRef.current * 1.05);\n      }\n\n      if (newQuality !== qualityRef.current) {\n        qualityRef.current = newQuality;\n        finalOptions.onQualityChange(newQuality);\n\n        setMetrics((prev) => ({\n          ...prev,\n          quality: newQuality,\n        }));\n      }\n    },\n    [finalOptions]\n  );\n\n  // Start monitoring\n  useEffect(() => {\n    if (!finalOptions.enableMonitoring) return;\n\n    const animationId = requestAnimationFrame(measureFPS);\n\n    return () => {\n      cancelAnimationFrame(animationId);\n    };\n  }, [finalOptions.enableMonitoring, measureFPS]);\n\n  // Performance metrics callback\n  useEffect(() => {\n    if (!monitorRef.current) return;\n\n    const interval = setInterval(() => {\n      const monitorMetrics = monitorRef.current?.getMetrics();\n      const memoryStats = memoryManagerRef.current?.getStats();\n\n      if (monitorMetrics) {\n        const recommendations =\n          monitorRef.current?.getOptimizationSuggestions() || [];\n\n        setMetrics((prev) => ({\n          ...prev,\n          memoryUsage: monitorMetrics.memoryUsage,\n          renderTime: monitorMetrics.frameTime,\n          isThrottled: prev.fps < finalOptions.qualityThreshold,\n          recommendations,\n        }));\n\n        finalOptions.onPerformanceMetrics({\n          ...monitorMetrics,\n          memoryStats,\n          recommendations,\n        });\n      }\n    }, 2000);\n\n    return () => clearInterval(interval);\n  }, [finalOptions]);\n\n  // Performance optimization methods\n  const optimizeForLowPerformance = useCallback(() => {\n    return {\n      reduceParticles: true,\n      disableShadows: true,\n      lowerResolution: true,\n      reduceAnimationComplexity: true,\n    };\n  }, []);\n\n  const getOptimalSettings = useCallback(() => {\n    const currentFPS = metrics.fps;\n    const memoryUsage = metrics.memoryUsage;\n    const memoryLimit = finalOptions.memoryLimit * 1024 * 1024;\n\n    return {\n      particleCount: currentFPS > 50 ? 100 : currentFPS > 30 ? 50 : 25,\n      shadowQuality: memoryUsage < memoryLimit * 0.8 ? \"high\" : \"low\",\n      textureSize: currentFPS > 50 ? 1024 : 512,\n      animationEnabled: currentFPS > 25,\n      blurEnabled: currentFPS > 40,\n    };\n  }, [metrics.fps, metrics.memoryUsage, finalOptions.memoryLimit]);\n\n  return {\n    metrics,\n    quality: qualityRef.current,\n    optimizeForLowPerformance,\n    getOptimalSettings,\n    isLowPerformance: metrics.fps < finalOptions.qualityThreshold,\n    isHighPerformance: metrics.fps > finalOptions.targetFPS * 0.9,\n  };\n}\n\n// Hook for debounced performance monitoring\nexport function useDebouncedPerformance(\n  callback: (metrics: GlassPerformanceReport) => void,\n  delay: number = 1000,\n  options: GlassPerformanceOptions = {}\n) {\n  const [debouncedMetrics, setDebouncedMetrics] =\n    useState<GlassPerformanceReport | null>(null);\n  const timeoutRef = useRef<NodeJS.Timeout>();\n\n  const performance = useGlassPerformance({\n    ...options,\n    onPerformanceMetrics: (metrics) => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n\n      timeoutRef.current = setTimeout(() => {\n        setDebouncedMetrics(metrics);\n        callback(metrics);\n      }, delay);\n    },\n  });\n\n  useEffect(() => {\n    return () => {\n      if (timeoutRef.current) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, []);\n\n  return {\n    ...performance,\n    debouncedMetrics,\n  };\n}\n\n// Hook for conditional rendering based on performance\nexport function useConditionalRendering(\n  performance: ReturnType<typeof useGlassPerformance>,\n  thresholds: {\n    low: number;\n    medium: number;\n    high: number;\n  } = { low: 30, medium: 45, high: 55 }\n) {\n  const performanceLevel = useMemo<PerformanceLevel>(() => {\n    const fps = performance.metrics.fps;\n\n    if (fps < thresholds.low) return \"low\";\n    if (fps < thresholds.medium) return \"medium\";\n    if (fps < thresholds.high) return \"high\";\n    return \"ultra\";\n  }, [performance.metrics.fps, thresholds]);\n\n  const shouldRender = useCallback(\n    (minPerformance: keyof typeof thresholds) => {\n      const levels = [\"low\", \"medium\", \"high\", \"ultra\"];\n      const currentIndex = levels.indexOf(performanceLevel);\n      const minIndex = levels.indexOf(minPerformance);\n\n      return currentIndex >= minIndex;\n    },\n    [performanceLevel]\n  );\n\n  const getComponentVariant = useCallback(\n    <T>(variants: Partial<Record<PerformanceLevel | \"default\", T>>) => {\n      return variants[performanceLevel] || variants.default;\n    },\n    [performanceLevel]\n  );\n\n  return {\n    performanceLevel,\n    shouldRender,\n    getComponentVariant,\n  };\n}\n\n// Hook for lazy loading based on performance\nexport function useLazyPerformance<P extends object = Record<string, unknown>>(\n  component: React.ComponentType<P>,\n  fallback?: React.ComponentType<P>,\n  options: GlassPerformanceOptions & {\n    minFPS?: number;\n    loadDelay?: number;\n  } = {}\n) {\n  const { minFPS = 30, loadDelay = 1000, ...performanceOptions } = options;\n  const [isLoaded, setIsLoaded] = useState(false);\n  const performance = useGlassPerformance(performanceOptions);\n\n  useEffect(() => {\n    if (performance.metrics.fps >= minFPS) {\n      const timer = setTimeout(() => {\n        setIsLoaded(true);\n      }, loadDelay);\n\n      return () => clearTimeout(timer);\n    }\n  }, [performance.metrics.fps, minFPS, loadDelay]);\n\n  const Component = isLoaded ? component : fallback || (() => null);\n\n  return {\n    Component,\n    isLoaded,\n    performance,\n  };\n}\n\n// Hook for progressive enhancement\nexport function useProgressiveEnhancement(\n  performance: ReturnType<typeof useGlassPerformance>,\n  features: Array<{\n    name: string;\n    component: React.ComponentType<Record<string, unknown>>;\n    minFPS: number;\n    fallback?: React.ComponentType<Record<string, unknown>>;\n  }>\n) {\n  const enabledFeatures = useMemo(() => {\n    return features.filter(\n      (feature) => performance.metrics.fps >= feature.minFPS\n    );\n  }, [features, performance.metrics.fps]);\n\n  const getFeatureComponent = useCallback(\n    (featureName: string) => {\n      const feature = enabledFeatures.find((f) => f.name === featureName);\n      return feature?.component || (() => null);\n    },\n    [enabledFeatures]\n  );\n\n  const isFeatureEnabled = useCallback(\n    (featureName: string) => {\n      return enabledFeatures.some((f) => f.name === featureName);\n    },\n    [enabledFeatures]\n  );\n\n  return {\n    enabledFeatures,\n    getFeatureComponent,\n    isFeatureEnabled,\n    performanceLevel:\n      performance.metrics.fps >= 50\n        ? \"high\"\n        : performance.metrics.fps >= 30\n          ? \"medium\"\n          : \"low\",\n  };\n}\n", "/**\n * SSR (Server-Side Rendering) Utilities\n *\n * Shared helpers for safe browser API access across all components.\n * Prevents hydration mismatches and runtime errors during SSR.\n */\n\n// Re-export existing browser detection utilities\nexport { isBrowser, isServer } from \"./env\";\n\n/**\n * Check if DOM is available (alias for isBrowser)\n * React convention name\n */\nexport const canUseDOM =\n  typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\n/**\n * Safely access window, returns undefined during SSR\n */\nexport const safeWindow = canUseDOM ? window : undefined;\n\n/**\n * Safely access document, returns undefined during SSR\n */\nexport const safeDocument = canUseDOM ? document : undefined;\n\n/**\n * Safely access navigator, returns undefined during SSR\n */\nexport const safeNavigator = canUseDOM ? navigator : undefined;\n\n/**\n * Safe wrapper for code that requires browser APIs\n * Returns undefined during SSR, executes callback in browser\n *\n * @example\n * const userAgent = safeBrowserExec(() => navigator.userAgent);\n */\nexport function safeBrowserExec<T>(callback: () => T): T | undefined {\n  if (!canUseDOM) return undefined;\n  try {\n    return callback();\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Get a browser API value with a fallback for SSR\n *\n * @example\n * const width = getBrowserValue(() => window.innerWidth, 1024);\n */\nexport function getBrowserValue<T>(getter: () => T, fallback: T): T {\n  if (!canUseDOM) return fallback;\n  try {\n    return getter();\n  } catch {\n    return fallback;\n  }\n}\n\n// Note: prefersReducedMotion is already exported from animations/accessible\n// We don't re-export it here to avoid conflicts\n\n/**\n * Get user agent string safely\n * Returns empty string during SSR\n */\nexport function getUserAgent(): string {\n  return getBrowserValue(() => navigator.userAgent, \"\");\n}\n\n/**\n * Check if touch is supported\n * Returns false during SSR\n */\nexport function isTouchDevice(): boolean {\n  return getBrowserValue(\n    () => \"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n    false\n  );\n}\n\n/**\n * Get viewport dimensions\n * Returns default dimensions during SSR\n */\nexport function getViewportSize(): { width: number; height: number } {\n  return getBrowserValue(\n    () => ({ width: window.innerWidth, height: window.innerHeight }),\n    { width: 1024, height: 768 }\n  );\n}\n\n/**\n * Get device pixel ratio\n * Returns 1 during SSR\n */\nexport function getDevicePixelRatio(): number {\n  return getBrowserValue(() => window.devicePixelRatio, 1);\n}\n\n/**\n * Check if WebGL is supported\n * Returns false during SSR\n */\nexport function isWebGLSupported(): boolean {\n  return getBrowserValue(() => {\n    try {\n      const canvas = document.createElement(\"canvas\");\n      return !!(\n        canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\")\n      );\n    } catch {\n      return false;\n    }\n  }, false);\n}\n\n/**\n * Check if localStorage is available\n * Returns false during SSR and in privacy mode\n */\nexport function isLocalStorageAvailable(): boolean {\n  return getBrowserValue(() => {\n    try {\n      const test = \"__storage_test__\";\n      localStorage.setItem(test, test);\n      localStorage.removeItem(test);\n      return true;\n    } catch {\n      return false;\n    }\n  }, false);\n}\n\n/**\n * SSR-safe event listener helper\n * No-op during SSR, works normally in browser\n */\nexport function addBrowserEventListener<K extends keyof WindowEventMap>(\n  type: K,\n  listener: (this: Window, ev: WindowEventMap[K]) => void,\n  options?: boolean | AddEventListenerOptions\n): () => void {\n  if (!canUseDOM) return () => {};\n\n  window.addEventListener(type, listener, options);\n  return () => window.removeEventListener(type, listener, options);\n}\n\n/**\n * SSR-safe requestAnimationFrame\n * Uses setTimeout fallback during SSR\n */\nexport function safeRequestAnimationFrame(\n  callback: FrameRequestCallback\n): number {\n  if (!canUseDOM) {\n    return setTimeout(callback, 16) as unknown as number;\n  }\n  return requestAnimationFrame(callback);\n}\n\n/**\n * SSR-safe cancelAnimationFrame\n */\nexport function safeCancelAnimationFrame(handle: number): void {\n  if (!canUseDOM) {\n    clearTimeout(handle);\n    return;\n  }\n  cancelAnimationFrame(handle);\n}\n\n/**\n * Create an SSR-safe ref callback that only runs in browser\n */\nexport function createBrowserRefCallback<T extends HTMLElement>(\n  callback: (element: T) => void | (() => void)\n): (element: T | null) => void {\n  if (!canUseDOM) {\n    return () => {};\n  }\n\n  let cleanup: void | (() => void);\n  return (element) => {\n    if (cleanup) {\n      cleanup();\n    }\n    if (element) {\n      cleanup = callback(element);\n    }\n  };\n}\n\n/**\n * Get connection information safely\n * Returns default values during SSR\n */\nexport function getConnectionInfo(): {\n  effectiveType: string;\n  downlink: number;\n  rtt: number;\n  saveData: boolean;\n} {\n  return getBrowserValue(\n    () => {\n      const nav = navigator as any;\n      const connection =\n        nav.connection || nav.mozConnection || nav.webkitConnection;\n      if (!connection) {\n        return { effectiveType: \"4g\", downlink: 10, rtt: 50, saveData: false };\n      }\n      return {\n        effectiveType: connection.effectiveType || \"4g\",\n        downlink: connection.downlink || 10,\n        rtt: connection.rtt || 50,\n        saveData: connection.saveData || false,\n      };\n    },\n    { effectiveType: \"4g\", downlink: 10, rtt: 50, saveData: false }\n  );\n}\n\n/**\n * Check if running in development mode\n */\nexport const isDevelopment = process.env.NODE_ENV === \"development\";\n\n/**\n * Check if running in production mode\n */\nexport const isProduction = process.env.NODE_ENV === \"production\";\n", "import React from \"react\";\nimport {\n  canUseDOM,\n  safeRequestAnimationFrame,\n  safeCancelAnimationFrame,\n} from \"./ssr\";\n// Performance optimization utilities\n\nexport interface PerformanceMetrics {\n  fps: number;\n  frameTime: number;\n  memoryUsage: number;\n  renderTime: number;\n  layoutTime: number;\n  paintTime: number;\n  compositeTime: number;\n  networkLatency: number;\n  cacheHitRate: number;\n}\n\nexport interface OptimizationConfig {\n  enableFPSMonitoring: boolean;\n  enableMemoryMonitoring: boolean;\n  enableNetworkMonitoring: boolean;\n  targetFPS: number;\n  maxMemoryUsage: number;\n  enableAdaptiveQuality: boolean;\n  enableVirtualization: boolean;\n  enableLazyLoading: boolean;\n  enableCaching: boolean;\n  enableCompression: boolean;\n}\n\n// Performance monitoring\nexport class PerformanceMonitor {\n  private static instance: PerformanceMonitor;\n  private metrics: PerformanceMetrics;\n  private observers: PerformanceObserver[] = [];\n  private frameCount = 0;\n  private lastTime = 0;\n  private config: OptimizationConfig;\n  private measurements = new Map<\n    string,\n    { startTime: number; endTime?: number }\n  >();\n\n  constructor(config: Partial<OptimizationConfig> = {}) {\n    this.config = {\n      enableFPSMonitoring: true,\n      enableMemoryMonitoring: false,\n      enableNetworkMonitoring: false,\n      targetFPS: 60,\n      maxMemoryUsage: 100 * 1024 * 1024, // 100MB\n      enableAdaptiveQuality: true,\n      enableVirtualization: true,\n      enableLazyLoading: true,\n      enableCaching: true,\n      enableCompression: false,\n      ...config,\n    };\n\n    this.metrics = {\n      fps: 0,\n      frameTime: 0,\n      memoryUsage: 0,\n      renderTime: 0,\n      layoutTime: 0,\n      paintTime: 0,\n      compositeTime: 0,\n      networkLatency: 0,\n      cacheHitRate: 0,\n    };\n\n    this.initializeMonitoring();\n  }\n\n  static getInstance(config?: Partial<OptimizationConfig>): PerformanceMonitor {\n    if (!PerformanceMonitor.instance) {\n      PerformanceMonitor.instance = new PerformanceMonitor(config);\n    }\n    return PerformanceMonitor.instance;\n  }\n\n  private initializeMonitoring(): void {\n    // Skip monitoring during SSR\n    if (!canUseDOM) return;\n\n    if (this.config.enableFPSMonitoring) {\n      this.startFPSMonitoring();\n    }\n\n    if (this.config.enableMemoryMonitoring && \"memory\" in performance) {\n      this.startMemoryMonitoring();\n    }\n\n    if (this.config.enableNetworkMonitoring) {\n      this.startNetworkMonitoring();\n    }\n  }\n\n  private startFPSMonitoring(): void {\n    const measureFPS = (timestamp: number) => {\n      this.frameCount++;\n\n      if (this.lastTime === 0) {\n        this.lastTime = timestamp;\n        requestAnimationFrame(measureFPS);\n        return;\n      }\n\n      const deltaTime = timestamp - this.lastTime;\n\n      if (deltaTime >= 1000) {\n        // Update every second\n        this.metrics.fps = Math.round((this.frameCount * 1000) / deltaTime);\n        this.metrics.frameTime = deltaTime / this.frameCount;\n\n        this.frameCount = 0;\n        this.lastTime = timestamp;\n      }\n\n      requestAnimationFrame(measureFPS);\n    };\n\n    requestAnimationFrame(measureFPS);\n  }\n\n  private startMemoryMonitoring(): void {\n    setInterval(() => {\n      const memory = (performance as any).memory;\n      if (memory) {\n        this.metrics.memoryUsage = memory.usedJSHeapSize;\n      }\n    }, 5000); // Check every 5 seconds\n  }\n\n  private startNetworkMonitoring(): void {\n    // Skip during SSR - no fetch API available\n    if (!canUseDOM) return;\n\n    // Monitor fetch requests\n    const originalFetch = window.fetch;\n    let requestCount = 0;\n    let cacheHits = 0;\n\n    window.fetch = async (...args) => {\n      const startTime = Date.now();\n      requestCount++;\n\n      try {\n        const response = await originalFetch(...args);\n        const duration = Date.now() - startTime;\n\n        // Estimate cache hit based on response time\n        if (duration < 50) {\n          cacheHits++;\n        }\n\n        this.metrics.networkLatency = duration;\n        this.metrics.cacheHitRate = (cacheHits / requestCount) * 100;\n\n        return response;\n      } catch (error) {\n        throw error;\n      }\n    };\n  }\n\n  getMetrics(): PerformanceMetrics {\n    return { ...this.metrics };\n  }\n\n  isPerformanceGood(): boolean {\n    return (\n      this.metrics.fps >= this.config.targetFPS * 0.8 &&\n      this.metrics.memoryUsage <= this.config.maxMemoryUsage\n    );\n  }\n\n  getOptimizationSuggestions(): string[] {\n    const suggestions: string[] = [];\n\n    if (this.metrics.fps < this.config.targetFPS * 0.8) {\n      suggestions.push(\"Consider reducing animation complexity\");\n      suggestions.push(\"Enable virtualization for large lists\");\n      suggestions.push(\"Reduce particle effects or simplify shaders\");\n    }\n\n    if (this.metrics.memoryUsage > this.config.maxMemoryUsage * 0.8) {\n      suggestions.push(\"Implement memory cleanup\");\n      suggestions.push(\"Reduce texture sizes\");\n      suggestions.push(\"Unload unused assets\");\n    }\n\n    if (this.metrics.renderTime > 16.67) {\n      // 60 FPS threshold\n      suggestions.push(\"Optimize render pipeline\");\n      suggestions.push(\"Use CSS transforms instead of layout properties\");\n      suggestions.push(\"Implement object pooling\");\n    }\n\n    return suggestions;\n  }\n\n  startMeasure(name: string): void {\n    this.measurements.set(name, { startTime: performance.now() });\n  }\n\n  stop(): void {\n    // Stop all measurements.\n    for (const [name, measurement] of this.measurements) {\n      if (!measurement.endTime) {\n        measurement.endTime = performance.now();\n      }\n    }\n    this.measurements.clear();\n  }\n\n  getMeasurementDuration(name: string): number | null {\n    const measurement = this.measurements.get(name);\n    if (measurement && measurement.endTime) {\n      return measurement.endTime - measurement.startTime;\n    }\n    return null;\n  }\n}\n\n// Memory management\nexport class MemoryManager {\n  private static instance: MemoryManager;\n  private cache = new Map<string, any>();\n  private maxCacheSize: number;\n  private currentCacheSize = 0;\n\n  constructor(maxCacheSize: number = 50 * 1024 * 1024) {\n    // 50MB default\n    this.maxCacheSize = maxCacheSize;\n  }\n\n  static getInstance(maxCacheSize?: number): MemoryManager {\n    if (!MemoryManager.instance) {\n      MemoryManager.instance = new MemoryManager(maxCacheSize);\n    }\n    return MemoryManager.instance;\n  }\n\n  set(key: string, value: any, size: number = 0): void {\n    if (this.currentCacheSize + size > this.maxCacheSize) {\n      this.evictOldEntries(size);\n    }\n\n    this.cache.set(key, { value, size, lastAccessed: Date.now() });\n    this.currentCacheSize += size;\n  }\n\n  get(key: string): any {\n    const entry = this.cache.get(key);\n    if (entry) {\n      entry.lastAccessed = Date.now();\n      return entry.value;\n    }\n    return null;\n  }\n\n  delete(key: string): boolean {\n    const entry = this.cache.get(key);\n    if (entry) {\n      this.currentCacheSize -= entry.size;\n      return this.cache.delete(key);\n    }\n    return false;\n  }\n\n  clear(): void {\n    this.cache.clear();\n    this.currentCacheSize = 0;\n  }\n\n  private evictOldEntries(requiredSize: number): void {\n    const entries = Array.from(this.cache.entries()).sort(\n      (a, b) => a[1].lastAccessed - b[1].lastAccessed\n    );\n\n    let freedSize = 0;\n    for (const [key, entry] of entries) {\n      if (freedSize >= requiredSize) break;\n      freedSize += entry.size;\n      this.cache.delete(key);\n    }\n\n    this.currentCacheSize -= freedSize;\n  }\n\n  getStats(): { size: number; entries: number; hitRate: number } {\n    return {\n      size: this.currentCacheSize,\n      entries: this.cache.size,\n      hitRate: 0, // Would need to track hits/misses\n    };\n  }\n}\n\n// Rendering optimizations\nexport const renderingOptimizations = {\n  // Use transform instead of changing layout properties\n  useTransformForMovement: (\n    element: HTMLElement,\n    x: number,\n    y: number\n  ): void => {\n    element.style.transform = `translate(${x}px, ${y}px)`;\n    element.style.willChange = \"transform\";\n  },\n\n  // Optimize for 60fps animations\n  optimizeFor60FPS: (callback: () => void): void => {\n    let lastTime = 0;\n    const animate = (timestamp: number) => {\n      if (timestamp - lastTime >= 16.67) {\n        // ~60fps\n        callback();\n        lastTime = timestamp;\n      }\n      requestAnimationFrame(animate);\n    };\n    requestAnimationFrame(animate);\n  },\n\n  // Batch DOM updates\n  batchDOMUpdates: (updates: Array<() => void>): void => {\n    requestAnimationFrame(() => {\n      updates.forEach((update: any) => update());\n    });\n  },\n\n  // Use CSS containment for performance\n  enableCSSContainment: (element: HTMLElement): void => {\n    element.style.contain = \"layout style paint\";\n  },\n\n  // Optimize canvas rendering\n  optimizeCanvasRendering: (canvas: HTMLCanvasElement): void => {\n    const ctx = canvas.getContext(\"2d\");\n    if (ctx) {\n      ctx.imageSmoothingEnabled = false;\n      ctx.globalCompositeOperation = \"source-over\";\n    }\n  },\n};\n\n// Network optimizations\nexport const networkOptimizations = {\n  // Lazy load images\n  lazyLoadImage: (img: HTMLImageElement, src: string): void => {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry: any) => {\n        if (entry.isIntersecting) {\n          img.src = src;\n          observer.disconnect();\n        }\n      });\n    });\n    observer.observe(img);\n  },\n\n  // Preload critical resources\n  preloadCriticalResources: (resources: string[]): void => {\n    // Skip during SSR - no document API available\n    if (!canUseDOM) return;\n\n    resources.forEach((resource: any) => {\n      const link = document.createElement(\"link\");\n      link.rel = \"preload\";\n      link.href = resource;\n      document.head.appendChild(link);\n    });\n  },\n\n  // Cache API wrapper\n  cacheAPI: {\n    async set(key: string, data: any): Promise<void> {\n      if (\"caches\" in window) {\n        const cache = await caches.open(\"glass-cache-v1\");\n        await cache.put(key, new Response(JSON.stringify(data)));\n      }\n    },\n\n    async get(key: string): Promise<any> {\n      if (\"caches\" in window) {\n        const cache = await caches.open(\"glass-cache-v1\");\n        const response = await cache.match(key);\n        if (response) {\n          return response.json();\n        }\n      }\n      return null;\n    },\n  },\n};\n\n// Virtualization utilities\nexport class VirtualScroller {\n  private container: HTMLElement;\n  private itemHeight: number;\n  private totalItems: number;\n  private visibleItems: number;\n  private scrollTop = 0;\n\n  constructor(\n    container: HTMLElement,\n    itemHeight: number,\n    totalItems: number,\n    visibleItems: number\n  ) {\n    this.container = container;\n    this.itemHeight = itemHeight;\n    this.totalItems = totalItems;\n    this.visibleItems = visibleItems;\n\n    this.setupEventListeners();\n  }\n\n  private setupEventListeners(): void {\n    this.container.addEventListener(\"scroll\", this.handleScroll.bind(this));\n  }\n\n  private handleScroll(): void {\n    this.scrollTop = this.container.scrollTop;\n    this.updateVisibleItems();\n  }\n\n  private updateVisibleItems(): void {\n    const startIndex = Math.floor(this.scrollTop / this.itemHeight);\n    const endIndex = Math.min(startIndex + this.visibleItems, this.totalItems);\n\n    // Dispatch custom event with visible range\n    const event = new CustomEvent(\"virtualScroll\", {\n      detail: { startIndex, endIndex },\n    });\n    this.container.dispatchEvent(event);\n  }\n\n  getVisibleRange(): { start: number; end: number } {\n    const start = Math.floor(this.scrollTop / this.itemHeight);\n    const end = Math.min(start + this.visibleItems, this.totalItems);\n    return { start, end };\n  }\n\n  scrollToItem(index: number): void {\n    this.container.scrollTop = index * this.itemHeight;\n  }\n}\n\n// Adaptive quality system\nexport class AdaptiveQuality {\n  private qualityLevel = 1.0;\n  private monitor: PerformanceMonitor;\n\n  constructor(monitor: PerformanceMonitor) {\n    this.monitor = monitor;\n  }\n\n  updateQuality(): number {\n    const metrics = this.monitor.getMetrics();\n    const targetFPS = 60;\n    const fpsRatio = metrics.fps / targetFPS;\n\n    if (fpsRatio < 0.8) {\n      // Reduce quality\n      this.qualityLevel = Math.max(0.1, this.qualityLevel * 0.9);\n    } else if (fpsRatio > 1.2) {\n      // Increase quality\n      this.qualityLevel = Math.min(1.0, this.qualityLevel * 1.05);\n    }\n\n    return this.qualityLevel;\n  }\n\n  getQualitySettings(): {\n    particleCount: number;\n    textureSize: number;\n    shadowQuality: number;\n    antialiasing: boolean;\n  } {\n    return {\n      particleCount: Math.floor(1000 * this.qualityLevel),\n      textureSize: Math.floor(1024 * this.qualityLevel),\n      shadowQuality: Math.floor(4 * this.qualityLevel),\n      antialiasing: this.qualityLevel > 0.5,\n    };\n  }\n}\n\n// Export utilities\nexport const performanceUtils = {\n  monitor: PerformanceMonitor.getInstance,\n  memory: MemoryManager.getInstance,\n  adaptiveQuality: (monitor: PerformanceMonitor) =>\n    new AdaptiveQuality(monitor),\n  virtualScroller: VirtualScroller,\n};\n", "\"use client\";\nimport React from \"react\";\nimport { useState, useCallback, useMemo } from \"react\";\n\nexport type SortDirection = \"asc\" | \"desc\" | null;\nexport type SortKey<T> = keyof T | null;\n\nexport interface SortConfig<T> {\n  key: SortKey<T>;\n  direction: SortDirection;\n}\n\nexport interface SortableDataOptions<T> {\n  /** Initial sort configuration */\n  initialSort?: SortConfig<T>;\n  /** Custom sort function */\n  customSort?: (a: T, b: T, key: keyof T, direction: SortDirection) => number;\n  /** Enable multi-column sorting */\n  multiSort?: boolean;\n  /** Maximum number of sort levels for multi-sort */\n  maxSortLevels?: number;\n  /** Stable sort (preserves original order for equal items) */\n  stable?: boolean;\n  /** Case-sensitive sorting for strings */\n  caseSensitive?: boolean;\n  /** Null/undefined handling */\n  nullsFirst?: boolean;\n  /** Custom value getter for sorting */\n  getValue?: (item: T, key: keyof T) => unknown;\n}\n\nexport interface SortableDataResult<T> {\n  /** Sorted data */\n  data: T[];\n  /** Current sort configuration */\n  sortConfig: SortConfig<T>;\n  /** Multi-sort configurations */\n  sortConfigs: SortConfig<T>[];\n  /** Sort function */\n  sort: (key: keyof T, direction?: SortDirection, append?: boolean) => void;\n  /** Clear all sorting */\n  clearSort: () => void;\n  /** Toggle sort direction */\n  toggleSort: (key: keyof T) => void;\n  /** Check if column is sorted */\n  isSorted: (key: keyof T) => boolean;\n  /** Get sort direction for column */\n  getSortDirection: (key: keyof T) => SortDirection;\n  /** Get sort priority for column (for multi-sort) */\n  getSortPriority: (key: keyof T) => number | null;\n}\n\nconst DEFAULT_OPTIONS = {\n  multiSort: false,\n  maxSortLevels: 3,\n  stable: true,\n  caseSensitive: false,\n  nullsFirst: false,\n};\n\nconst compareKnownValues = (aValue: unknown, bValue: unknown): number => {\n  if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n    return aValue - bValue;\n  }\n\n  if (aValue instanceof Date && bValue instanceof Date) {\n    return aValue.getTime() - bValue.getTime();\n  }\n\n  if (typeof aValue === \"boolean\" && typeof bValue === \"boolean\") {\n    return Number(aValue) - Number(bValue);\n  }\n\n  return String(aValue).localeCompare(String(bValue));\n};\n\nconst applyDirection = (\n  comparison: number,\n  direction: SortDirection\n): number => {\n  return direction === \"asc\" ? comparison : -comparison;\n};\n\nexport function useSortableData<T>(\n  data: T[],\n  options: SortableDataOptions<T> = {}\n): SortableDataResult<T> {\n  const finalOptions = { ...DEFAULT_OPTIONS, ...options };\n\n  const [sortConfigs, setSortConfigs] = useState<SortConfig<T>[]>(\n    finalOptions.initialSort ? [finalOptions.initialSort] : []\n  );\n\n  // Get the primary sort config\n  const sortConfig = sortConfigs[0] || { key: null, direction: null };\n\n  // Default sort function\n  const defaultSort = useCallback(\n    (a: T, b: T, key: keyof T, direction: SortDirection): number => {\n      const aValue = finalOptions.getValue\n        ? finalOptions.getValue(a, key)\n        : a[key];\n      const bValue = finalOptions.getValue\n        ? finalOptions.getValue(b, key)\n        : b[key];\n\n      // Handle null/undefined values\n      if (aValue == null && bValue == null) return 0;\n      if (aValue == null) return finalOptions.nullsFirst ? -1 : 1;\n      if (bValue == null) return finalOptions.nullsFirst ? 1 : -1;\n\n      // String comparison\n      if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n        const comparison = finalOptions.caseSensitive\n          ? aValue.localeCompare(bValue)\n          : aValue.toLowerCase().localeCompare(bValue.toLowerCase());\n\n        return applyDirection(comparison, direction);\n      }\n\n      return applyDirection(compareKnownValues(aValue, bValue), direction);\n    },\n    [finalOptions]\n  );\n\n  // Sort data based on configurations\n  const sortedData = useMemo(() => {\n    if (!sortConfigs || (sortConfigs?.length || 0) === 0) return data;\n\n    const sortFn = finalOptions.customSort || defaultSort;\n\n    return [...data].sort((a, b) => {\n      for (const config of sortConfigs) {\n        if (config.key === null) continue;\n\n        const result = sortFn(a, b, config.key, config.direction);\n        if (result !== 0) return result;\n      }\n\n      return 0;\n    });\n  }, [data, sortConfigs, defaultSort, finalOptions.customSort]);\n\n  // Sort function\n  const sort = useCallback(\n    (key: keyof T, direction?: SortDirection, append: boolean = false) => {\n      setSortConfigs((prevConfigs) => {\n        // If not appending, replace all configs\n        if (!finalOptions.multiSort || !append) {\n          const newDirection =\n            direction ||\n            (prevConfigs[0]?.key === key && prevConfigs[0]?.direction === \"asc\"\n              ? \"desc\"\n              : \"asc\");\n          return [{ key, direction: newDirection }];\n        }\n\n        // Multi-sort logic\n        const existingIndex = prevConfigs.findIndex(\n          (config) => config.key === key\n        );\n\n        if (existingIndex >= 0) {\n          // Toggle direction or remove if already desc\n          const currentDirection = prevConfigs[existingIndex].direction;\n          if (currentDirection === \"desc\") {\n            // Remove this sort level\n            return prevConfigs.filter((_, index) => index !== existingIndex);\n          } else {\n            // Change to desc\n            const newConfigs = [...prevConfigs];\n            if (newConfigs) {\n              newConfigs[existingIndex] = {\n                ...newConfigs?.[existingIndex],\n                direction: \"desc\" as const,\n              };\n            }\n            return newConfigs;\n          }\n        } else {\n          // Add new sort level\n          if ((prevConfigs?.length || 0) >= finalOptions.maxSortLevels) {\n            // Remove oldest if at max levels\n            return [\n              ...prevConfigs.slice(1),\n              { key, direction: direction || \"asc\" },\n            ];\n          } else {\n            return [...prevConfigs, { key, direction: direction || \"asc\" }];\n          }\n        }\n      });\n    },\n    [finalOptions.multiSort, finalOptions.maxSortLevels]\n  );\n\n  // Clear all sorting\n  const clearSort = useCallback(() => {\n    setSortConfigs([]);\n  }, []);\n\n  // Toggle sort direction\n  const toggleSort = useCallback(\n    (key: keyof T) => {\n      const existingConfig = sortConfigs.find((config) => config.key === key);\n      if (existingConfig) {\n        sort(key, existingConfig.direction === \"asc\" ? \"desc\" : \"asc\", true);\n      } else {\n        sort(key, \"asc\", true);\n      }\n    },\n    [sortConfigs, sort]\n  );\n\n  // Check if column is sorted\n  const isSorted = useCallback(\n    (key: keyof T): boolean => {\n      return sortConfigs.some((config) => config.key === key);\n    },\n    [sortConfigs]\n  );\n\n  // Get sort direction for column\n  const getSortDirection = useCallback(\n    (key: keyof T): SortDirection => {\n      const config = sortConfigs.find((config) => config.key === key);\n      return config?.direction || null;\n    },\n    [sortConfigs]\n  );\n\n  // Get sort priority for column\n  const getSortPriority = useCallback(\n    (key: keyof T): number | null => {\n      const index = sortConfigs.findIndex((config) => config.key === key);\n      return index >= 0 ? index + 1 : null;\n    },\n    [sortConfigs]\n  );\n\n  return {\n    data: sortedData,\n    sortConfig,\n    sortConfigs,\n    sort,\n    clearSort,\n    toggleSort,\n    isSorted,\n    getSortDirection,\n    getSortPriority,\n  };\n}\n\n// Hook for searchable and sortable data\nexport function useSearchableSortableData<T>(\n  data: T[],\n  searchFields: (keyof T)[],\n  options: SortableDataOptions<T> & {\n    searchQuery?: string;\n    searchDebounce?: number;\n    caseSensitive?: boolean;\n    fuzzy?: boolean;\n  } = {}\n) {\n  const {\n    searchQuery = \"\",\n    searchDebounce = 300,\n    caseSensitive = false,\n    fuzzy = false,\n    ...sortOptions\n  } = options;\n\n  const [debouncedQuery, setDebouncedQuery] = useState(searchQuery);\n\n  // Debounce search query\n  useMemo(() => {\n    if (searchDebounce > 0) {\n      const timer = setTimeout(() => {\n        setDebouncedQuery(searchQuery);\n      }, searchDebounce);\n\n      return () => clearTimeout(timer);\n    } else {\n      setDebouncedQuery(searchQuery);\n    }\n  }, [searchQuery, searchDebounce]);\n\n  // Filter data based on search query\n  const filteredData = useMemo(() => {\n    if (!debouncedQuery.trim()) return data;\n\n    const query = caseSensitive ? debouncedQuery : debouncedQuery.toLowerCase();\n\n    return data?.filter((item) => {\n      return searchFields.some((field) => {\n        const value = String(item[field] ?? \"\").trim();\n        const normalizedValue = caseSensitive ? value : value.toLowerCase();\n\n        if (fuzzy) {\n          // Simple fuzzy search\n          return normalizedValue.includes(query);\n        } else {\n          return normalizedValue.includes(query);\n        }\n      });\n    });\n  }, [data, debouncedQuery, searchFields, caseSensitive, fuzzy]);\n\n  // Apply sorting to filtered data\n  const sortableResult = useSortableData(filteredData, sortOptions);\n\n  return {\n    ...sortableResult,\n    filteredData,\n    searchQuery: debouncedQuery,\n    totalCount: data?.length || 0,\n    filteredCount: filteredData?.length || 0,\n  };\n}\n\n// Hook for paginated sortable data\nexport function usePaginatedSortableData<T>(\n  data: T[],\n  itemsPerPage: number = 10,\n  options: SortableDataOptions<T> & {\n    initialPage?: number;\n    onPageChange?: (page: number) => void;\n  } = {}\n) {\n  const { initialPage = 1, onPageChange, ...sortOptions } = options;\n  const [currentPage, setCurrentPage] = useState(initialPage);\n\n  const sortableResult = useSortableData(data, sortOptions);\n\n  // Calculate pagination\n  const totalPages = Math.ceil(\n    (sortableResult.data?.length || 0) / itemsPerPage\n  );\n  const startIndex = (currentPage - 1) * itemsPerPage;\n  const endIndex = startIndex + itemsPerPage;\n  const paginatedData = sortableResult.data?.slice(startIndex, endIndex);\n\n  const goToPage = useCallback(\n    (page: number) => {\n      const validPage = Math.max(1, Math.min(page, totalPages));\n      setCurrentPage(validPage);\n      onPageChange?.(validPage);\n    },\n    [totalPages, onPageChange]\n  );\n\n  const nextPage = useCallback(() => {\n    if (currentPage < totalPages) {\n      goToPage(currentPage + 1);\n    }\n  }, [currentPage, totalPages, goToPage]);\n\n  const previousPage = useCallback(() => {\n    if (currentPage > 1) {\n      goToPage(currentPage - 1);\n    }\n  }, [currentPage, goToPage]);\n\n  return {\n    ...sortableResult,\n    data: paginatedData,\n    currentPage,\n    totalPages,\n    itemsPerPage,\n    totalItems: sortableResult.data?.length || 0,\n    goToPage,\n    nextPage,\n    previousPage,\n    hasNextPage: currentPage < totalPages,\n    hasPreviousPage: currentPage > 1,\n  };\n}\n\n// Utility functions for sorting\nexport const sortUtils = {\n  // Natural sort for strings with numbers\n  naturalSort: (\n    a: string,\n    b: string,\n    direction: SortDirection = \"asc\"\n  ): number => {\n    const regex = /(\\d+|[^\\d]+)/g;\n    const aParts = a.match(regex) || [];\n    const bParts = b.match(regex) || [];\n\n    for (\n      let i = 0;\n      i < Math.max(aParts?.length || 0, bParts?.length || 0);\n      i++\n    ) {\n      const aPart = aParts[i] || \"\";\n      const bPart = bParts[i] || \"\";\n\n      const aIsNumber = /^\\d+$/.test(aPart);\n      const bIsNumber = /^\\d+$/.test(bPart);\n\n      if (aIsNumber && bIsNumber) {\n        const diff = parseInt(aPart) - parseInt(bPart);\n        if (diff !== 0) return direction === \"asc\" ? diff : -diff;\n      } else {\n        const comparison = aPart.localeCompare(bPart);\n        if (comparison !== 0)\n          return direction === \"asc\" ? comparison : -comparison;\n      }\n    }\n\n    return 0;\n  },\n\n  // Sort by multiple criteria with weights\n  weightedSort: <T>(\n    items: T[],\n    criteria: Array<{\n      key: keyof T;\n      weight: number;\n      direction?: SortDirection;\n    }>\n  ): T[] => {\n    return [...items].sort((a, b) => {\n      let score = 0;\n\n      for (const criterion of criteria) {\n        const aValue = a[criterion.key];\n        const bValue = b[criterion.key];\n        const direction = criterion.direction || \"asc\";\n        const multiplier = direction === \"asc\" ? 1 : -1;\n\n        if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n          score += (aValue - bValue) * criterion.weight * multiplier;\n        } else if (typeof aValue === \"string\" && typeof bValue === \"string\") {\n          score += aValue.localeCompare(bValue) * criterion.weight * multiplier;\n        }\n      }\n\n      return score;\n    });\n  },\n\n  // Group sort (sort within groups)\n  groupSort: <T, K extends keyof T>(\n    items: T[],\n    groupBy: K,\n    sortBy: K,\n    direction: SortDirection = \"asc\"\n  ): T[] => {\n    const groups = new Map<T[K], T[]>();\n\n    // Group items\n    items.forEach((item) => {\n      const groupKey = item[groupBy];\n      if (!groups.has(groupKey)) {\n        groups.set(groupKey, []);\n      }\n      groups.get(groupKey)!.push(item);\n    });\n\n    // Sort within each group\n    groups.forEach((group) => {\n      group.sort((a, b) => {\n        const aValue = a[sortBy];\n        const bValue = b[sortBy];\n\n        if (aValue != null && bValue != null) {\n          return applyDirection(compareKnownValues(aValue, bValue), direction);\n        }\n        return 0;\n      });\n    });\n\n    // Flatten groups back into array\n    return Array.from(groups.values()).flat();\n  },\n};\n", "\"use client\";\nimport React from \"react\";\nimport { useRef, useState, useCallback, useEffect } from \"react\";\nimport {\n  useMultiSpring,\n  SpringConfig,\n} from \"../../animations/hooks/useMultiSpringBasic\";\n\nexport interface DraggableItem {\n  id: string;\n  content: React.ReactNode;\n  data?: unknown;\n}\n\nexport interface DragState {\n  isDragging: boolean;\n  draggedItem: DraggableItem | null;\n  dragIndex: number;\n  hoverIndex: number;\n  dragOffset: { x: number; y: number };\n  dropTarget: HTMLElement | null;\n}\n\nexport interface DraggableListPhysicsOptions {\n  /** Enable physics-based animations */\n  enablePhysics?: boolean;\n  /** Spring configuration for drag animations */\n  springConfig?: SpringConfig;\n  /** Drag threshold in pixels */\n  dragThreshold?: number;\n  /** Enable haptic feedback on mobile */\n  enableHaptics?: boolean;\n  /** Custom drag handle selector */\n  dragHandle?: string;\n  /** Enable auto-scroll when dragging near edges */\n  autoScroll?: boolean;\n  /** Auto-scroll threshold from edges */\n  autoScrollThreshold?: number;\n  /** Auto-scroll speed */\n  autoScrollSpeed?: number;\n  /** Enable drop zones */\n  enableDropZones?: boolean;\n  /** Custom drop zone validator */\n  validateDrop?: (draggedItem: DraggableItem, targetIndex: number) => boolean;\n  /** Enable multi-select drag */\n  multiSelect?: boolean;\n  /** Selected items for multi-select */\n  selectedItems?: string[];\n}\n\nconst DEFAULT_OPTIONS: Required<DraggableListPhysicsOptions> = {\n  enablePhysics: true,\n  springConfig: { stiffness: 300, damping: 30, mass: 1 },\n  dragThreshold: 5,\n  enableHaptics: true,\n  dragHandle: \"\",\n  autoScroll: true,\n  autoScrollThreshold: 50,\n  autoScrollSpeed: 10,\n  enableDropZones: false,\n  validateDrop: () => true,\n  multiSelect: false,\n  selectedItems: [],\n};\n\nexport function useDraggableListPhysics(\n  items: DraggableItem[],\n  onReorder: (\n    fromIndex: number,\n    toIndex: number,\n    draggedItems?: DraggableItem[]\n  ) => void,\n  options: DraggableListPhysicsOptions = {}\n) {\n  const finalOptions = { ...DEFAULT_OPTIONS, ...options };\n\n  const [dragState, setDragState] = useState<DragState>({\n    isDragging: false,\n    draggedItem: null,\n    dragIndex: -1,\n    hoverIndex: -1,\n    dragOffset: { x: 0, y: 0 },\n    dropTarget: null,\n  });\n\n  const [selectedItems, setSelectedItems] = useState<string[]>(\n    finalOptions.selectedItems\n  );\n\n  const containerRef = useRef<HTMLElement>(null);\n  const dragStartPos = useRef({ x: 0, y: 0 });\n  const dragElement = useRef<HTMLElement | null>(null);\n  const autoScrollInterval = useRef<NodeJS.Timeout>();\n  const physicsSprings = useMultiSpring(\n    {},\n    { config: finalOptions.springConfig }\n  );\n\n  // Physics-based animations for list items\n  const animateListReorder = useCallback(\n    (fromIndex: number, toIndex: number, draggedItems: DraggableItem[]) => {\n      if (!finalOptions.enablePhysics) {\n        onReorder(fromIndex, toIndex, draggedItems);\n        return;\n      }\n\n      const springTargets: Record<string, number> = {};\n\n      // Calculate new positions for all items\n      items.forEach((item, index) => {\n        let newIndex = index;\n\n        if (finalOptions.multiSelect && (draggedItems?.length || 0) > 1) {\n          // Handle multi-item drag\n          const draggedIndices = draggedItems\n            .map((item: any) => items.findIndex((i) => i.id === item?.id))\n            .sort((a, b) => a - b);\n\n          if (draggedIndices.includes(index)) {\n            // This item is being dragged\n            const relativeIndex = draggedIndices.indexOf(index);\n            newIndex = toIndex + relativeIndex;\n          } else if (\n            index >= Math.min(fromIndex, toIndex) &&\n            index <= Math.max(fromIndex, toIndex)\n          ) {\n            // This item needs to shift\n            if (fromIndex < toIndex) {\n              newIndex = index - (draggedIndices?.length || 0);\n            } else {\n              newIndex = index + (draggedIndices?.length || 0);\n            }\n          }\n        } else {\n          // Single item drag\n          if (index === fromIndex) {\n            newIndex = toIndex;\n          } else if (fromIndex < toIndex) {\n            if (index > fromIndex && index <= toIndex) {\n              newIndex = index - 1;\n            }\n          } else {\n            if (index < fromIndex && index >= toIndex) {\n              newIndex = index + 1;\n            }\n          }\n        }\n\n        if (springTargets) {\n          springTargets[`item-${item?.id}`] = newIndex * 60; // Assume 60px item height\n        }\n      });\n\n      physicsSprings.start(springTargets);\n\n      // Trigger reorder after animation completes\n      setTimeout(() => {\n        onReorder(fromIndex, toIndex, draggedItems);\n      }, 300);\n    },\n    [items, onReorder, finalOptions, physicsSprings]\n  );\n\n  // Handle drag start\n  const handleDragStart = useCallback(\n    (\n      event: React.DragEvent | React.TouchEvent | MouseEvent,\n      item: DraggableItem,\n      index: number\n    ) => {\n      event.preventDefault();\n\n      const clientX =\n        \"touches\" in event\n          ? event.touches[0].clientX\n          : (event as MouseEvent).clientX;\n      const clientY =\n        \"touches\" in event\n          ? event.touches[0].clientY\n          : (event as MouseEvent).clientY;\n\n      dragStartPos.current = { x: clientX, y: clientY };\n      dragElement.current = event.target as HTMLElement;\n\n      // Handle multi-select\n      let draggedItems = [item];\n      if (\n        finalOptions.multiSelect &&\n        (selectedItems?.length || 0) > 1 &&\n        selectedItems.includes(item?.id)\n      ) {\n        draggedItems = items.filter((item: any) =>\n          selectedItems.includes(item?.id)\n        );\n      }\n\n      setDragState({\n        isDragging: true,\n        draggedItem: item,\n        dragIndex: index,\n        hoverIndex: index,\n        dragOffset: { x: 0, y: 0 },\n        dropTarget: null,\n      });\n\n      // Add global drag listeners\n      document.addEventListener(\"mousemove\", handleDragMove);\n      document.addEventListener(\"touchmove\", handleDragMove, {\n        passive: false,\n      });\n      document.addEventListener(\"mouseup\", handleDragEnd);\n      document.addEventListener(\"touchend\", handleDragEnd);\n\n      // Trigger haptic feedback\n      if (finalOptions.enableHaptics && \"vibrate\" in navigator) {\n        navigator.vibrate(50);\n      }\n    },\n    [items, selectedItems, finalOptions]\n  );\n\n  // Handle drag move\n  const handleDragMove = useCallback(\n    (event: MouseEvent | TouchEvent) => {\n      if (!dragState.isDragging) return;\n\n      event.preventDefault();\n\n      const clientX =\n        \"touches\" in event ? event.touches[0].clientX : event.clientX;\n      const clientY =\n        \"touches\" in event ? event.touches[0].clientY : event.clientY;\n\n      const deltaX = clientX - dragStartPos.current.x;\n      const deltaY = clientY - dragStartPos.current.y;\n\n      // Check drag threshold\n      if (\n        Math.abs(deltaX) < finalOptions.dragThreshold &&\n        Math.abs(deltaY) < finalOptions.dragThreshold\n      ) {\n        return;\n      }\n\n      setDragState((prev: any) => ({\n        ...prev,\n        dragOffset: { x: deltaX, y: deltaY },\n      }));\n\n      // Auto-scroll functionality\n      if (finalOptions.autoScroll && containerRef.current) {\n        const container = containerRef.current;\n        const rect = container.getBoundingClientRect();\n        const threshold = finalOptions.autoScrollThreshold;\n\n        if (clientY < rect.top + threshold) {\n          // Scroll up\n          container.scrollTop -= finalOptions.autoScrollSpeed;\n        } else if (clientY > rect.bottom - threshold) {\n          // Scroll down\n          container.scrollTop += finalOptions.autoScrollSpeed;\n        }\n      }\n\n      // Find hover index\n      if (containerRef.current) {\n        const elements = containerRef.current.querySelectorAll(\n          \"[data-draggable-item]\"\n        );\n        let hoverIndex = -1;\n\n        for (let i = 0; i < (elements?.length || 0); i++) {\n          const element = elements[i] as HTMLElement;\n          const rect = element.getBoundingClientRect();\n\n          if (clientY >= rect.top && clientY <= rect.bottom) {\n            hoverIndex = parseInt(element.getAttribute(\"data-index\") || \"-1\");\n            break;\n          }\n        }\n\n        if (hoverIndex !== -1 && hoverIndex !== dragState.hoverIndex) {\n          setDragState((prev: any) => ({\n            ...prev,\n            hoverIndex,\n          }));\n        }\n      }\n    },\n    [dragState, finalOptions]\n  );\n\n  // Handle drag end\n  const handleDragEnd = useCallback(() => {\n    if (!dragState.isDragging) return;\n\n    // Clear auto-scroll\n    if (autoScrollInterval.current) {\n      clearInterval(autoScrollInterval.current);\n      autoScrollInterval.current = undefined;\n    }\n\n    // Validate drop\n    const draggedItems =\n      finalOptions.multiSelect && (selectedItems?.length || 0) > 1\n        ? items.filter((item: any) => selectedItems.includes(item?.id))\n        : [dragState.draggedItem!];\n\n    const isValidDrop = finalOptions.validateDrop(\n      dragState.draggedItem!,\n      dragState.hoverIndex\n    );\n\n    if (isValidDrop && dragState.dragIndex !== dragState.hoverIndex) {\n      animateListReorder(\n        dragState.dragIndex,\n        dragState.hoverIndex,\n        draggedItems\n      );\n    }\n\n    // Reset drag state\n    setDragState({\n      isDragging: false,\n      draggedItem: null,\n      dragIndex: -1,\n      hoverIndex: -1,\n      dragOffset: { x: 0, y: 0 },\n      dropTarget: null,\n    });\n\n    // Remove global listeners\n    document.removeEventListener(\"mousemove\", handleDragMove);\n    document.removeEventListener(\"touchmove\", handleDragMove);\n    document.removeEventListener(\"mouseup\", handleDragEnd);\n    document.removeEventListener(\"touchend\", handleDragEnd);\n\n    dragElement.current = null;\n  }, [dragState, selectedItems, items, finalOptions, animateListReorder]);\n\n  // Multi-select functionality\n  const toggleItemSelection = useCallback(\n    (itemId: string) => {\n      if (!finalOptions.multiSelect) return;\n\n      setSelectedItems((prev: any) => {\n        if (prev.includes(itemId)) {\n          return prev.filter((id: any) => id !== itemId);\n        } else {\n          return [...prev, itemId];\n        }\n      });\n    },\n    [finalOptions.multiSelect]\n  );\n\n  const selectItemRange = useCallback(\n    (startId: string, endId: string) => {\n      if (!finalOptions.multiSelect) return;\n\n      const startIndex = items.findIndex((item) => item?.id === startId);\n      const endIndex = items.findIndex((item) => item?.id === endId);\n\n      if (startIndex === -1 || endIndex === -1) return;\n\n      const minIndex = Math.min(startIndex, endIndex);\n      const maxIndex = Math.max(startIndex, endIndex);\n\n      const rangeIds = items\n        .slice(minIndex, maxIndex + 1)\n        .map((item: any) => item?.id);\n      setSelectedItems(rangeIds);\n    },\n    [items, finalOptions.multiSelect]\n  );\n\n  const clearSelection = useCallback(() => {\n    setSelectedItems([]);\n  }, []);\n\n  // Keyboard navigation for accessibility\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent, itemId: string) => {\n      const currentIndex = items.findIndex((item) => item?.id === itemId);\n      if (currentIndex === -1) return;\n\n      switch (event.key) {\n        case \"ArrowUp\":\n          event.preventDefault();\n          if (currentIndex > 0) {\n            const targetItem = items[currentIndex - 1];\n            animateListReorder(currentIndex, currentIndex - 1, [\n              items[currentIndex],\n            ]);\n          }\n          break;\n\n        case \"ArrowDown\":\n          event.preventDefault();\n          if (currentIndex < (items?.length || 0) - 1) {\n            const targetItem = items[currentIndex + 1];\n            animateListReorder(currentIndex, currentIndex + 1, [\n              items[currentIndex],\n            ]);\n          }\n          break;\n\n        case \"Enter\":\n        case \" \":\n          if (finalOptions.multiSelect) {\n            event.preventDefault();\n            toggleItemSelection(itemId);\n          }\n          break;\n      }\n    },\n    [items, animateListReorder, toggleItemSelection, finalOptions.multiSelect]\n  );\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (autoScrollInterval.current) {\n        clearInterval(autoScrollInterval.current);\n      }\n    };\n  }, []);\n\n  return {\n    dragState,\n    containerRef,\n    selectedItems,\n    physicsValues: physicsSprings.values,\n\n    // Event handlers\n    handleDragStart,\n    handleKeyDown,\n\n    // Multi-select methods\n    toggleItemSelection,\n    selectItemRange,\n    clearSelection,\n\n    // Utility methods\n    isSelected: (itemId: string) => selectedItems.includes(itemId),\n    isDragging: dragState.isDragging,\n    canDrop: (targetIndex: number) =>\n      finalOptions.validateDrop(dragState.draggedItem!, targetIndex),\n  };\n}\n\n// Hook for physics-based item transitions\nexport function useItemTransitions(\n  items: DraggableItem[],\n  transitionType: \"slide\" | \"fade\" | \"scale\" | \"bounce\" = \"slide\",\n  options: {\n    duration?: number;\n    stagger?: number;\n    direction?: \"up\" | \"down\" | \"left\" | \"right\";\n    easing?: string;\n  } = {}\n) {\n  const {\n    duration = 300,\n    stagger = 50,\n    direction = \"up\",\n    easing = \"ease-out\",\n  } = options;\n\n  const [animatingItems, setAnimatingItems] = useState<Set<string>>(new Set());\n\n  const getTransitionStyle = useCallback(\n    (itemId: string, index: number) => {\n      const delay = index * stagger;\n      const isAnimating = animatingItems.has(itemId);\n\n      let transform = \"\";\n      let opacity = 1;\n\n      if (!isAnimating) {\n        switch (transitionType) {\n          case \"slide\":\n            switch (direction) {\n              case \"up\":\n                transform = \"translateY(20px)\";\n                break;\n              case \"down\":\n                transform = \"translateY(-20px)\";\n                break;\n              case \"left\":\n                transform = \"translateX(20px)\";\n                break;\n              case \"right\":\n                transform = \"translateX(-20px)\";\n                break;\n            }\n            opacity = 0;\n            break;\n\n          case \"fade\":\n            opacity = 0;\n            break;\n\n          case \"scale\":\n            transform = \"scale(0.8)\";\n            opacity = 0;\n            break;\n\n          case \"bounce\":\n            transform = \"scale(0.3) translateY(10px)\";\n            opacity = 0;\n            break;\n        }\n      }\n\n      return {\n        transition: `all ${duration}ms ${easing} ${delay}ms`,\n        transform,\n        opacity,\n      };\n    },\n    [transitionType, direction, duration, stagger, easing, animatingItems]\n  );\n\n  const animateItem = useCallback(\n    (itemId: string) => {\n      setAnimatingItems((prev: Set<string>) => new Set(prev).add(itemId));\n\n      setTimeout(() => {\n        setAnimatingItems((prev: Set<string>) => {\n          const next = new Set(prev);\n          next.delete(itemId);\n          return next;\n        });\n      }, duration);\n    },\n    [duration]\n  );\n\n  const animateAllItems = useCallback(() => {\n    items.forEach((item, index) => {\n      setTimeout(() => animateItem(item?.id), index * stagger);\n    });\n  }, [items, animateItem, stagger]);\n\n  return {\n    getTransitionStyle,\n    animateItem,\n    animateAllItems,\n    isAnimating: animatingItems.size > 0,\n  };\n}\n\n// Hook for physics-based drop zones\nexport function useDropZones(\n  zones: Array<{\n    id: string;\n    accepts: (item: DraggableItem) => boolean;\n    onDrop: (item: DraggableItem, zoneId: string) => void;\n  }>\n) {\n  const [activeZone, setActiveZone] = useState<string | null>(null);\n  const [isOverZone, setIsOverZone] = useState(false);\n\n  // The currently dragged item is tracked in a ref because DraggableItem.content\n  // is a React node and cannot be round-tripped through HTML5 dataTransfer (which\n  // only carries serializable strings). Draggables register the item on drag start\n  // via getDraggableHandlers; drop zones read it back here.\n  const draggedItemRef = useRef<DraggableItem | null>(null);\n\n  const resolveDraggedItem = useCallback(\n    (event: React.DragEvent): DraggableItem | null => {\n      // Prefer the ref populated by getDraggableHandlers; fall back to an item\n      // explicitly attached to the event by external drag sources.\n      return (\n        draggedItemRef.current ??\n        (event as unknown as { draggedItem?: DraggableItem }).draggedItem ??\n        null\n      );\n    },\n    []\n  );\n\n  // Spread onto a draggable element so its DraggableItem is available to drop zones.\n  const getDraggableHandlers = useCallback(\n    (item: DraggableItem) => ({\n      draggable: true,\n      onDragStart: (event: React.DragEvent) => {\n        draggedItemRef.current = item;\n        // Mark the drag as a move so browsers render the correct cursor.\n        if (event.dataTransfer) {\n          event.dataTransfer.effectAllowed = \"move\";\n          // Store the id so cross-component / external consumers can identify it.\n          event.dataTransfer.setData(\"text/plain\", item.id);\n        }\n      },\n      onDragEnd: () => {\n        draggedItemRef.current = null;\n        setActiveZone(null);\n        setIsOverZone(false);\n      },\n    }),\n    []\n  );\n\n  const handleDragOver = useCallback(\n    (event: React.DragEvent, zoneId: string) => {\n      event.preventDefault();\n\n      const zone = zones.find((z) => z.id === zoneId);\n      if (!zone) return;\n\n      const draggedItem = resolveDraggedItem(event);\n\n      if (draggedItem && zone.accepts(draggedItem)) {\n        if (event.dataTransfer) {\n          event.dataTransfer.dropEffect = \"move\";\n        }\n        setActiveZone(zoneId);\n        setIsOverZone(true);\n      } else if (event.dataTransfer) {\n        event.dataTransfer.dropEffect = \"none\";\n      }\n    },\n    [zones, resolveDraggedItem]\n  );\n\n  const handleDragLeave = useCallback((event?: React.DragEvent) => {\n    // Ignore leave events that bubble from child elements still within the zone.\n    if (event) {\n      const related = event.relatedTarget as Node | null;\n      const current = event.currentTarget as Node;\n      if (related && current.contains(related)) {\n        return;\n      }\n    }\n    setActiveZone(null);\n    setIsOverZone(false);\n  }, []);\n\n  const handleDrop = useCallback(\n    (event: React.DragEvent, zoneId: string) => {\n      event.preventDefault();\n\n      const zone = zones.find((z) => z.id === zoneId);\n      if (!zone) return;\n\n      const draggedItem = resolveDraggedItem(event);\n\n      if (draggedItem && zone.accepts(draggedItem)) {\n        zone.onDrop(draggedItem, zoneId);\n      }\n\n      draggedItemRef.current = null;\n      setActiveZone(null);\n      setIsOverZone(false);\n    },\n    [zones, resolveDraggedItem]\n  );\n\n  return {\n    activeZone,\n    isOverZone,\n    getDraggableHandlers,\n    handleDragOver,\n    handleDragLeave,\n    handleDrop,\n    isValidDrop: (zoneId: string, item: DraggableItem) => {\n      const zone = zones.find((z) => z.id === zoneId);\n      return zone ? zone.accepts(item) : false;\n    },\n  };\n}\n", "\"use client\";\nimport React from \"react\";\nimport { useRef, useCallback, useEffect, useState } from \"react\";\nimport {\n  GalileoPhysicsSystem,\n  PhysicsBody,\n} from \"../../animations/physics/galileoPhysicsSystem\";\n\nexport interface GalileoVector {\n  x: number;\n  y: number;\n}\n\nexport interface GalileoSpringConfig {\n  /** Spring stiffness */\n  stiffness?: number;\n  /** Spring damping */\n  damping?: number;\n  /** Spring mass */\n  mass?: number;\n  /** Rest precision */\n  precision?: number;\n  /** Initial velocity */\n  velocity?: number;\n  /** Enable gravity */\n  gravity?: boolean;\n  /** Gravity strength */\n  gravityStrength?: number;\n  /** Enable collisions */\n  enableCollisions?: boolean;\n  /** Bounds for physics world */\n  bounds?: {\n    left: number;\n    right: number;\n    top: number;\n    bottom: number;\n  };\n}\n\nexport interface GalileoSpringTarget {\n  id: string;\n  position: GalileoVector;\n  target?: GalileoVector;\n  velocity?: GalileoVector;\n  mass?: number;\n  radius?: number;\n  fixed?: boolean;\n}\n\nexport interface GalileoSpringConnection {\n  from: string;\n  to: string;\n  strength: number;\n}\n\nexport interface GalileoSoftBodyNode {\n  id: string;\n  x: number;\n  y: number;\n  mass: number;\n}\n\nexport interface GalileoSoftBodySpring {\n  from: string;\n  to: string;\n  stiffness: number;\n  restLength: number;\n}\n\nexport interface GalileoSoftBodyDefinition {\n  nodes: GalileoSoftBodyNode[];\n  springs: GalileoSoftBodySpring[];\n}\n\nexport type GalileoSpringBatchUpdate =\n  | {\n      type: \"springTo\";\n      id: string;\n      data: GalileoVector;\n      config?: Partial<GalileoSpringConfig>;\n    }\n  | {\n      type: \"impulse\";\n      id: string;\n      data: GalileoVector;\n    }\n  | {\n      type: \"setPosition\";\n      id: string;\n      data: GalileoVector;\n    }\n  | {\n      type: \"addBody\";\n      id: string;\n      data: GalileoSpringTarget;\n    }\n  | {\n      type: \"removeBody\";\n      id: string;\n      data?: never;\n    };\n\nconst DEFAULT_CONFIG: Required<GalileoSpringConfig> = {\n  stiffness: 100,\n  damping: 10,\n  mass: 1,\n  precision: 0.01,\n  velocity: 0,\n  gravity: false,\n  gravityStrength: 9.81,\n  enableCollisions: false,\n  bounds: {\n    left: -Infinity,\n    right: Infinity,\n    top: -Infinity,\n    bottom: Infinity,\n  },\n};\n\nexport function useGalileoSprings(\n  targets: GalileoSpringTarget[] = [],\n  config: GalileoSpringConfig = {}\n) {\n  const finalConfig = { ...DEFAULT_CONFIG, ...config };\n  const physicsSystemRef = useRef<GalileoPhysicsSystem>();\n  const [positions, setPositions] = useState<Record<string, GalileoVector>>({});\n  const [isAnimating, setIsAnimating] = useState(false);\n\n  // Initialize physics system\n  useEffect(() => {\n    physicsSystemRef.current = new GalileoPhysicsSystem({\n      gravity: finalConfig.gravity\n        ? { x: 0, y: finalConfig.gravityStrength }\n        : { x: 0, y: 0 },\n      bounds: finalConfig.bounds,\n    });\n\n    // Add initial bodies\n    targets.forEach((target) => {\n      physicsSystemRef.current!.addBody({\n        id: target.id,\n        position: { ...target.position },\n        velocity: target.velocity || { x: 0, y: 0 },\n        acceleration: { x: 0, y: 0 },\n        mass: target.mass || finalConfig.mass,\n        radius: target.radius || 10,\n        friction: 0.1,\n        restitution: 0.8,\n        fixed: target.fixed || false,\n        forces: [],\n      });\n    });\n\n    physicsSystemRef.current.start();\n\n    return () => {\n      physicsSystemRef.current?.stop();\n    };\n  }, [targets, finalConfig]);\n\n  // Update positions when physics system updates\n  useEffect(() => {\n    if (!physicsSystemRef.current) return;\n\n    const updatePositions = () => {\n      const bodies = physicsSystemRef.current!.getAllBodies();\n      const newPositions: Record<string, GalileoVector> = {};\n\n      bodies.forEach((body) => {\n        newPositions[body.id] = { ...body.position };\n      });\n\n      setPositions(newPositions);\n\n      // Track whether bodies are still moving.\n      const hasMovingBodies = bodies.some(\n        (body) =>\n          Math.abs(body.velocity.x) > finalConfig.precision ||\n          Math.abs(body.velocity.y) > finalConfig.precision\n      );\n\n      setIsAnimating(hasMovingBodies);\n\n      if (hasMovingBodies) {\n        requestAnimationFrame(updatePositions);\n      }\n    };\n\n    updatePositions();\n  }, [finalConfig.precision]);\n\n  // Apply spring force to move body to target\n  const springTo = useCallback(\n    (\n      id: string,\n      target: GalileoVector,\n      customConfig?: Partial<GalileoSpringConfig>\n    ) => {\n      if (!physicsSystemRef.current) return;\n\n      const body = physicsSystemRef.current.getBody(id);\n      if (!body) return;\n\n      const springConfig = { ...finalConfig, ...customConfig };\n\n      // Calculate spring force\n      const dx = target.x - body.position.x;\n      const dy = target.y - body.position.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n\n      if (distance > springConfig.precision) {\n        const force = {\n          x:\n            dx * springConfig.stiffness -\n            body.velocity.x * springConfig.damping,\n          y:\n            dy * springConfig.stiffness -\n            body.velocity.y * springConfig.damping,\n        };\n\n        physicsSystemRef.current.applyForce(id, force, 1 / 60); // Apply for one frame\n      }\n    },\n    [finalConfig]\n  );\n\n  // Apply impulse to body\n  const impulse = useCallback((id: string, impulse: GalileoVector) => {\n    if (!physicsSystemRef.current) return;\n    physicsSystemRef.current.applyImpulse(id, impulse);\n  }, []);\n\n  // Set body position directly\n  const setPosition = useCallback((id: string, position: GalileoVector) => {\n    if (!physicsSystemRef.current) return;\n\n    const body = physicsSystemRef.current.getBody(id);\n    if (body) {\n      body.position = { ...position };\n      body.velocity = { x: 0, y: 0 };\n      body.acceleration = { x: 0, y: 0 };\n    }\n  }, []);\n\n  // Add new body to physics system\n  const addBody = useCallback(\n    (body: GalileoSpringTarget) => {\n      if (!physicsSystemRef.current) return;\n\n      physicsSystemRef.current.addBody({\n        id: body.id,\n        position: { ...body.position },\n        velocity: body.velocity || { x: 0, y: 0 },\n        acceleration: { x: 0, y: 0 },\n        mass: body.mass || finalConfig.mass,\n        radius: body.radius || 10,\n        friction: 0.1,\n        restitution: 0.8,\n        fixed: body.fixed || false,\n        forces: [],\n      });\n    },\n    [finalConfig.mass]\n  );\n\n  // Remove body from physics system\n  const removeBody = useCallback((id: string) => {\n    if (!physicsSystemRef.current) return;\n    physicsSystemRef.current.removeBody(id);\n  }, []);\n\n  // Get body information\n  const getBody = useCallback((id: string): PhysicsBody | undefined => {\n    if (!physicsSystemRef.current) return;\n    return physicsSystemRef.current.getBody(id);\n  }, []);\n\n  // Update physics configuration\n  const updateConfig = useCallback(\n    (newConfig: Partial<GalileoSpringConfig>) => {\n      Object.assign(finalConfig, newConfig);\n\n      if (physicsSystemRef.current) {\n        physicsSystemRef.current.setGravity(\n          finalConfig.gravity\n            ? { x: 0, y: finalConfig.gravityStrength }\n            : { x: 0, y: 0 }\n        );\n\n        physicsSystemRef.current.setBounds(finalConfig.bounds);\n      }\n    },\n    [finalConfig]\n  );\n\n  // Batch operations\n  const batchUpdate = useCallback(\n    (updates: GalileoSpringBatchUpdate[]) => {\n      updates.forEach((update) => {\n        switch (update.type) {\n          case \"springTo\":\n            springTo(update.id, update.data, update.config);\n            break;\n          case \"impulse\":\n            impulse(update.id, update.data);\n            break;\n          case \"setPosition\":\n            setPosition(update.id, update.data);\n            break;\n          case \"addBody\":\n            addBody(update.data);\n            break;\n          case \"removeBody\":\n            removeBody(update.id);\n            break;\n        }\n      });\n    },\n    [springTo, impulse, setPosition, addBody, removeBody]\n  );\n\n  return {\n    positions,\n    isAnimating,\n    springTo,\n    impulse,\n    setPosition,\n    addBody,\n    removeBody,\n    getBody,\n    updateConfig,\n    batchUpdate,\n    physicsSystem: physicsSystemRef.current,\n  };\n}\n\n// Hook for chain reactions (bodies affecting each other)\nexport function useChainReaction(\n  bodies: GalileoSpringTarget[],\n  connections: GalileoSpringConnection[],\n  config: GalileoSpringConfig = {}\n) {\n  const galileoSprings = useGalileoSprings(bodies, config);\n\n  const triggerChainReaction = useCallback(\n    (startId: string, initialImpulse: GalileoVector) => {\n      // Apply initial impulse\n      galileoSprings.impulse(startId, initialImpulse);\n\n      // Propagate through connections\n      const visited = new Set<string>();\n      const queue = [startId];\n\n      const propagate = () => {\n        if (queue.length === 0) return;\n\n        const currentId = queue.shift()!;\n        if (visited.has(currentId)) return;\n\n        visited.add(currentId);\n\n        // Find connections from current body\n        const currentConnections = connections.filter(\n          (conn) => conn.from === currentId\n        );\n\n        currentConnections.forEach((connection) => {\n          if (!visited.has(connection.to)) {\n            // Calculate propagated impulse\n            const currentBody = galileoSprings.getBody(currentId);\n            if (currentBody) {\n              const propagatedImpulse = {\n                x: currentBody.velocity.x * connection.strength,\n                y: currentBody.velocity.y * connection.strength,\n              };\n\n              galileoSprings.impulse(connection.to, propagatedImpulse);\n              queue.push(connection.to);\n            }\n          }\n        });\n\n        // Continue propagation\n        setTimeout(propagate, 50); // Small delay for visual effect\n      };\n\n      propagate();\n    },\n    [galileoSprings, connections]\n  );\n\n  return {\n    ...galileoSprings,\n    triggerChainReaction,\n  };\n}\n\n// Hook for orbital mechanics\nexport function useOrbitalMechanics(\n  centralBody: GalileoSpringTarget,\n  orbitingBodies: GalileoSpringTarget[],\n  config: GalileoSpringConfig & {\n    gravitationalConstant?: number;\n    timeScale?: number;\n  } = {}\n) {\n  const {\n    gravitationalConstant = 100,\n    timeScale = 1,\n    ...springConfig\n  } = config;\n\n  const allBodies = [centralBody, ...orbitingBodies];\n  const galileoSprings = useGalileoSprings(allBodies, springConfig);\n\n  const updateOrbits = useCallback(() => {\n    orbitingBodies.forEach((body) => {\n      const orbitingBody = galileoSprings.getBody(body.id);\n      const central = galileoSprings.getBody(centralBody.id);\n\n      if (!orbitingBody || !central) return;\n\n      // Calculate gravitational force\n      const dx = central.position.x - orbitingBody.position.x;\n      const dy = central.position.y - orbitingBody.position.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n\n      if (distance > 0) {\n        const centralMass =\n          centralBody.mass ?? springConfig.mass ?? DEFAULT_CONFIG.mass;\n        const orbitingMass =\n          body.mass ?? springConfig.mass ?? DEFAULT_CONFIG.mass;\n        const force =\n          (gravitationalConstant * centralMass * orbitingMass) /\n          (distance * distance);\n        const forceX = (force * dx) / distance;\n        const forceY = (force * dy) / distance;\n\n        // Apply gravitational force\n        galileoSprings.physicsSystem?.applyForce(\n          body.id,\n          {\n            x: forceX * timeScale,\n            y: forceY * timeScale,\n          },\n          1 / 60\n        );\n      }\n    });\n  }, [\n    galileoSprings,\n    centralBody,\n    orbitingBodies,\n    gravitationalConstant,\n    timeScale,\n  ]);\n\n  useEffect(() => {\n    const interval = setInterval(updateOrbits, 1000 / 60); // 60 FPS\n    return () => clearInterval(interval);\n  }, [updateOrbits]);\n\n  return {\n    ...galileoSprings,\n    centralBody: centralBody.id,\n    orbitingBodies: orbitingBodies.map((body) => body.id),\n    updateOrbits,\n  };\n}\n\n// Hook for particle systems\nexport function useParticleSystem(\n  emitterPosition: GalileoVector,\n  config: {\n    particleCount?: number;\n    emissionRate?: number;\n    particleLife?: number;\n    initialVelocity?: GalileoVector;\n    spread?: number;\n    gravity?: number;\n  } = {}\n) {\n  const {\n    particleCount = 50,\n    emissionRate = 10,\n    particleLife = 3000,\n    initialVelocity = { x: 0, y: -100 },\n    spread = 30,\n    gravity = 9.81,\n  } = config;\n\n  const particles: GalileoSpringTarget[] = [];\n  const particleIds: string[] = [];\n\n  // Create particle bodies\n  for (let i = 0; i < particleCount; i++) {\n    const angle = ((Math.random() - 0.5) * spread * Math.PI) / 180;\n    const speed = Math.random() * 50 + 25;\n\n    particles.push({\n      id: `particle-${i}`,\n      position: { ...emitterPosition },\n      velocity: {\n        x: initialVelocity.x + Math.cos(angle) * speed,\n        y: initialVelocity.y + Math.sin(angle) * speed,\n      },\n      mass: 0.1,\n      radius: 2,\n    });\n\n    particleIds.push(`particle-${i}`);\n  }\n\n  const galileoSprings = useGalileoSprings(particles, {\n    gravity: true,\n    gravityStrength: gravity,\n    enableCollisions: false,\n  });\n\n  // Live emitter position so continuous emission picks up updateEmitter() moves\n  // without re-creating the particle bodies.\n  const emitterRef = useRef<GalileoVector>({ ...emitterPosition });\n  // Round-robin cursor: continuous emission recycles the oldest particle.\n  const nextParticleRef = useRef(0);\n\n  const emitOne = useCallback(\n    (id: string) => {\n      const angle = ((Math.random() - 0.5) * spread * Math.PI) / 180;\n      const speed = Math.random() * 50 + 25;\n      galileoSprings.setPosition(id, { ...emitterRef.current });\n      galileoSprings.impulse(id, {\n        x: initialVelocity.x + Math.cos(angle) * speed,\n        y: initialVelocity.y + Math.sin(angle) * speed,\n      });\n    },\n    [galileoSprings, spread, initialVelocity]\n  );\n\n  const emit = useCallback(() => {\n    // One-shot burst: reset every particle to the emitter.\n    particleIds.forEach((id) => emitOne(id));\n  }, [particleIds, emitOne]);\n\n  const updateEmitter = useCallback((newPosition: GalileoVector) => {\n    // Move the live emitter so subsequent (continuous) emissions originate here.\n    emitterRef.current = { ...emitterRef.current, ...newPosition };\n  }, []);\n\n  // Continuous emission: recycle `emissionRate` particles per second from the\n  // current emitter position. emissionRate <= 0 disables continuous emission\n  // (the one-shot emit() still works).\n  useEffect(() => {\n    if (!emissionRate || emissionRate <= 0 || particleIds.length === 0) {\n      return;\n    }\n    const intervalMs = 1000 / emissionRate;\n    const interval = setInterval(() => {\n      const id = particleIds[nextParticleRef.current % particleIds.length];\n      nextParticleRef.current += 1;\n      emitOne(id);\n    }, intervalMs);\n    return () => clearInterval(interval);\n  }, [emissionRate, particleIds, emitOne]);\n\n  return {\n    ...galileoSprings,\n    particleIds,\n    emit,\n    updateEmitter,\n  };\n}\n\n// Hook for soft body physics\nexport function useSoftBodyPhysics(\n  bodyDefinition: GalileoSoftBodyDefinition,\n  config: GalileoSpringConfig = {}\n) {\n  const nodes = bodyDefinition.nodes.map((node) => ({\n    id: node.id,\n    position: { x: node.x, y: node.y },\n    mass: node.mass,\n    radius: 5,\n  }));\n\n  const galileoSprings = useGalileoSprings(nodes, config);\n\n  const updateSprings = useCallback(() => {\n    bodyDefinition.springs.forEach((spring) => {\n      const fromBody = galileoSprings.getBody(spring.from);\n      const toBody = galileoSprings.getBody(spring.to);\n\n      if (!fromBody || !toBody) return;\n\n      const dx = toBody.position.x - fromBody.position.x;\n      const dy = toBody.position.y - fromBody.position.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n      const displacement = distance - spring.restLength;\n\n      if (Math.abs(displacement) > 1) {\n        const force = displacement * spring.stiffness;\n        const forceX = (force * dx) / distance;\n        const forceY = (force * dy) / distance;\n\n        galileoSprings.impulse(spring.from, { x: forceX, y: forceY });\n        galileoSprings.impulse(spring.to, { x: -forceX, y: -forceY });\n      }\n    });\n  }, [galileoSprings, bodyDefinition.springs]);\n\n  useEffect(() => {\n    const interval = setInterval(updateSprings, 1000 / 60);\n    return () => clearInterval(interval);\n  }, [updateSprings]);\n\n  return {\n    ...galileoSprings,\n    springs: bodyDefinition.springs,\n    updateSprings,\n  };\n}\n", "import React from 'react';\nimport { useRef, useEffect } from 'react';\nimport { SpringConfig } from '../hooks/useMultiSpringBasic';\n\nexport interface PhysicsBody {\n  id: string;\n  position: { x: number; y: number };\n  velocity: { x: number; y: number };\n  acceleration: { x: number; y: number };\n  mass: number;\n  radius: number;\n  friction: number;\n  restitution: number; // Bounciness\n  fixed: boolean;\n  forces: Array<{ x: number; y: number; duration?: number }>;\n}\n\nexport interface PhysicsWorld {\n  bodies: Map<string, PhysicsBody>;\n  gravity: { x: number; y: number };\n  bounds: {\n    left: number;\n    right: number;\n    top: number;\n    bottom: number;\n  };\n  timeStep: number;\n  substeps: number;\n}\n\nexport interface CollisionInfo {\n  bodyA: PhysicsBody;\n  bodyB: PhysicsBody;\n  normal: { x: number; y: number };\n  penetration: number;\n  contactPoint: { x: number; y: number };\n}\n\nexport class GalileoPhysicsSystem {\n  private world: PhysicsWorld;\n  private animationFrame: number | null = null;\n  private lastTime = 0;\n  private paused = false;\n\n  constructor(config: Partial<PhysicsWorld> = {}) {\n    this.world = {\n      bodies: new Map(),\n      gravity: { x: 0, y: 0 },\n      bounds: {\n        left: -Infinity,\n        right: Infinity,\n        top: -Infinity,\n        bottom: Infinity,\n      },\n      timeStep: 1 / 60, // 60 FPS\n      substeps: 1,\n      ...config,\n    };\n  }\n\n  // Body management\n  addBody(body: PhysicsBody): void {\n    this.world.bodies.set(body.id, body);\n  }\n\n  removeBody(id: string): void {\n    this.world.bodies.delete(id);\n  }\n\n  getBody(id: string): PhysicsBody | undefined {\n    return this.world.bodies.get(id);\n  }\n\n  updateBody(id: string, updates: Partial<PhysicsBody>): void {\n    const body = this.world.bodies.get(id);\n    if (body) {\n      Object.assign(body, updates);\n    }\n  }\n\n  // Force management\n  applyForce(id: string, force: { x: number; y: number }, duration?: number): void {\n    const body = this.world.bodies.get(id);\n    if (body) {\n      body.forces.push({ ...force, duration });\n    }\n  }\n\n  applyImpulse(id: string, impulse: { x: number; y: number }): void {\n    const body = this.world.bodies.get(id);\n    if (body && !body.fixed) {\n      body.velocity.x += impulse.x / body.mass;\n      body.velocity.y += impulse.y / body.mass;\n    }\n  }\n\n  // Physics simulation\n  start(): void {\n    if (this.animationFrame) return;\n    this.lastTime = performance.now();\n        if (this.animate) this.animate();\n  }\n\n  stop(): void {\n    if (this.animationFrame) {\n      cancelAnimationFrame(this.animationFrame);\n      this.animationFrame = null;\n    }\n  }\n\n  pause(): void {\n    this.paused = true;\n  }\n\n  resume(): void {\n    this.paused = false;\n    this.lastTime = performance.now();\n  }\n\n  private animate = (): void => {\n    const currentTime = performance.now();\n    const deltaTime = Math.min((currentTime - this.lastTime) / 1000, 1 / 30); // Cap at 30 FPS minimum\n\n    if (!this.paused) {\n      for (let i = 0; i < this.world.substeps; i++) {\n        this.step(deltaTime / this.world.substeps);\n      }\n    }\n\n    this.lastTime = currentTime;\n    this.animationFrame = requestAnimationFrame(this.animate);\n  };\n\n  private step(deltaTime: number): void {\n    // Update forces\n    this.updateForces(deltaTime);\n\n    // Integrate motion\n    this.integrateMotion(deltaTime);\n\n    // Handle collisions\n    this.handleCollisions();\n\n    // Apply constraints\n    this.applyConstraints();\n  }\n\n  private updateForces(deltaTime: number): void {\n    this.world.bodies.forEach((body: any) => {\n      if (body.fixed) return;\n\n      // Reset acceleration\n      body.acceleration.x = 0;\n      body.acceleration.y = 0;\n\n      // Apply gravity\n      body.acceleration.x += this.world.gravity.x;\n      body.acceleration.y += this.world.gravity.y;\n\n      // Apply custom forces\n      body.forces = body.forces.filter((force: any) => {\n        body.acceleration.x += force.x / body.mass;\n        body.acceleration.y += force.y / body.mass;\n\n        if (force.duration !== undefined) {\n          force.duration -= deltaTime;\n          return force.duration > 0;\n        }\n        return true; // Permanent forces\n      });\n\n      // Apply friction\n      const speed = Math.sqrt(body.velocity.x ** 2 + body.velocity.y ** 2);\n      if (speed > 0.001) {\n        const frictionForce = body.friction * body.mass * Math.abs(this.world.gravity.y || 1);\n        const frictionX = -body.velocity.x / speed * frictionForce / body.mass;\n        const frictionY = -body.velocity.y / speed * frictionForce / body.mass;\n\n        body.acceleration.x += frictionX;\n        body.acceleration.y += frictionY;\n      }\n    });\n  }\n\n  private integrateMotion(deltaTime: number): void {\n    this.world.bodies.forEach((body: any) => {\n      if (body.fixed) return;\n\n      // Verlet integration for better stability\n      const newVelocityX = body.velocity.x + body.acceleration.x * deltaTime;\n      const newVelocityY = body.velocity.y + body.acceleration.y * deltaTime;\n\n      body.position.x += (body.velocity.x + newVelocityX) * 0.5 * deltaTime;\n      body.position.y += (body.velocity.y + newVelocityY) * 0.5 * deltaTime;\n\n      body.velocity.x = newVelocityX;\n      body.velocity.y = newVelocityY;\n    });\n  }\n\n  private handleCollisions(): void {\n    const bodies = Array.from(this.world.bodies.values());\n    const collisions: CollisionInfo[] = [];\n\n    // Check all pairs for collisions\n    for (let i = 0; i < bodies.length; i++) {\n      for (let j = i + 1; j < bodies.length; j++) {\n        const collision = this.checkCollision(bodies[i], bodies[j]);\n        if (collision) {\n          collisions.push(collision);\n        }\n      }\n    }\n\n    // Resolve collisions\n    collisions.forEach((collision: any) => {\n      this.resolveCollision(collision);\n    });\n  }\n\n  private checkCollision(bodyA: PhysicsBody, bodyB: PhysicsBody): CollisionInfo | null {\n    const dx = bodyB.position.x - bodyA.position.x;\n    const dy = bodyB.position.y - bodyA.position.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    const minDistance = bodyA.radius + bodyB.radius;\n\n    if (distance < minDistance) {\n      const penetration = minDistance - distance;\n      const normal = {\n        x: dx / distance,\n        y: dy / distance,\n      };\n\n      return {\n        bodyA,\n        bodyB,\n        normal,\n        penetration,\n        contactPoint: {\n          x: bodyA.position.x + normal.x * bodyA.radius,\n          y: bodyA.position.y + normal.y * bodyA.radius,\n        },\n      };\n    }\n\n    return null;\n  }\n\n  private resolveCollision(collision: CollisionInfo): void {\n    const { bodyA, bodyB, normal, penetration } = collision;\n\n    // Separate bodies\n    const separationX = normal.x * penetration * 0.5;\n    const separationY = normal.y * penetration * 0.5;\n\n    if (!bodyA.fixed) {\n      bodyA.position.x -= separationX;\n      bodyA.position.y -= separationY;\n    }\n\n    if (!bodyB.fixed) {\n      bodyB.position.x += separationX;\n      bodyB.position.y += separationY;\n    }\n\n    // Calculate relative velocity\n    const relativeVelocityX = bodyB.velocity.x - bodyA.velocity.x;\n    const relativeVelocityY = bodyB.velocity.y - bodyA.velocity.y;\n    const velocityAlongNormal = relativeVelocityX * normal.x + relativeVelocityY * normal.y;\n\n    // Don't resolve if velocities are separating\n    if (velocityAlongNormal > 0) return;\n\n    // Calculate restitution\n    const restitution = Math.min(bodyA.restitution, bodyB.restitution);\n\n    // Calculate impulse scalar\n    const impulseScalar = -(1 + restitution) * velocityAlongNormal;\n    const totalMass = bodyA.mass + bodyB.mass;\n\n    let impulseX = impulseScalar * normal.x;\n    let impulseY = impulseScalar * normal.y;\n\n    // Apply mass weighting\n    if (!bodyA.fixed && !bodyB.fixed) {\n      impulseX /= totalMass / bodyA.mass;\n      impulseY /= totalMass / bodyA.mass;\n    }\n\n    // Apply impulses\n    if (!bodyA.fixed) {\n      bodyA.velocity.x -= impulseX / bodyA.mass;\n      bodyA.velocity.y -= impulseY / bodyA.mass;\n    }\n\n    if (!bodyB.fixed) {\n      bodyB.velocity.x += impulseX / bodyB.mass;\n      bodyB.velocity.y += impulseY / bodyB.mass;\n    }\n  }\n\n  private applyConstraints(): void {\n    this.world.bodies.forEach((body: any) => {\n      if (body.fixed) return;\n\n      // Boundary constraints\n      const { bounds } = this.world;\n\n      if (body.position.x - body.radius < bounds.left) {\n        body.position.x = bounds.left + body.radius;\n        body.velocity.x *= -body.restitution;\n      }\n\n      if (body.position.x + body.radius > bounds.right) {\n        body.position.x = bounds.right - body.radius;\n        body.velocity.x *= -body.restitution;\n      }\n\n      if (body.position.y - body.radius < bounds.top) {\n        body.position.y = bounds.top + body.radius;\n        body.velocity.y *= -body.restitution;\n      }\n\n      if (body.position.y + body.radius > bounds.bottom) {\n        body.position.y = bounds.bottom - body.radius;\n        body.velocity.y *= -body.restitution;\n      }\n    });\n  }\n\n  // Utility methods\n  setGravity(gravity: { x: number; y: number }): void {\n    this.world.gravity = gravity;\n  }\n\n  setBounds(bounds: Partial<PhysicsWorld['bounds']>): void {\n    this.world.bounds = { ...this.world.bounds, ...bounds };\n  }\n\n  getAllBodies(): PhysicsBody[] {\n    return Array.from(this.world.bodies.values());\n  }\n\n  clear(): void {\n    this.world.bodies.clear();\n  }\n\n  // Factory methods for common body types\n  static createCircleBody(\n    id: string,\n    x: number,\n    y: number,\n    radius: number,\n    mass: number = 1,\n    options: Partial<PhysicsBody> = {}\n  ): PhysicsBody {\n    return {\n      id,\n      position: { x, y },\n      velocity: { x: 0, y: 0 },\n      acceleration: { x: 0, y: 0 },\n      mass,\n      radius,\n      friction: 0.1,\n      restitution: 0.8,\n      fixed: false,\n      forces: [],\n      ...options,\n    };\n  }\n\n  static createFixedBody(\n    id: string,\n    x: number,\n    y: number,\n    radius: number\n  ): PhysicsBody {\n    return {\n      id,\n      position: { x, y },\n      velocity: { x: 0, y: 0 },\n      acceleration: { x: 0, y: 0 },\n      mass: Infinity,\n      radius,\n      friction: 0,\n      restitution: 1,\n      fixed: true,\n      forces: [],\n    };\n  }\n}\n\n// Hook for using physics system\nexport function usePhysicsSystem(config?: Partial<PhysicsWorld>) {\n  const systemRef = useRef<GalileoPhysicsSystem>();\n\n  useEffect(() => {\n    systemRef.current = new GalileoPhysicsSystem(config);\n    return () => {\n      systemRef.current?.stop();\n    };\n  }, []);\n\n  return systemRef.current;\n}\n\n// Spring physics utilities\nexport class SpringPhysics {\n  static calculateSpringForce(\n    current: number,\n    target: number,\n    velocity: number,\n    config: SpringConfig\n  ): { force: number; newVelocity: number } {\n    const displacement = target - current;\n    const springForce = displacement * (config.stiffness ?? 100);\n    const dampingForce = -velocity * (config.damping ?? 10);\n    const totalForce = springForce + dampingForce;\n\n    const acceleration = totalForce / (config.mass ?? 1);\n    const newVelocity = velocity + acceleration * 0.016; // Assuming 60fps\n\n    return { force: totalForce, newVelocity };\n  }\n\n  static interpolateSpring(\n    from: number,\n    to: number,\n    progress: number,\n    config: SpringConfig\n  ): number {\n    // Simplified spring interpolation\n    const t = progress;\n    const stiffness = config.stiffness || 100;\n    const damping = config.damping || 10;\n\n    // Critically damped spring\n    const omega = Math.sqrt(stiffness);\n    const zeta = damping / (2 * Math.sqrt(stiffness));\n\n    if (zeta >= 1) {\n      // Over-damped\n      const r1 = -omega * (zeta - Math.sqrt(zeta * zeta - 1));\n      const r2 = -omega * (zeta + Math.sqrt(zeta * zeta - 1));\n      return to + (from - to) * (r1 * Math.exp(r1 * t) - r2 * Math.exp(r2 * t)) / (r1 - r2);\n    } else {\n      // Under-damped\n      const alpha = omega * Math.sqrt(1 - zeta * zeta);\n      const beta = omega * zeta;\n      return to + (from - to) * Math.exp(-beta * t) * Math.cos(alpha * t);\n    }\n  }\n}\n\n// Advanced physics utilities\nexport const physicsUtils = {\n  // Calculate trajectory\n  calculateTrajectory: (\n    initialPosition: { x: number; y: number },\n    initialVelocity: { x: number; y: number },\n    gravity: { x: number; y: number },\n    time: number\n  ) => {\n    return {\n      x: initialPosition.x + initialVelocity.x * time + 0.5 * gravity.x * time * time,\n      y: initialPosition.y + initialVelocity.y * time + 0.5 * gravity.y * time * time,\n    };\n  },\n\n  // Calculate collision point\n  calculateCollisionPoint: (\n    bodyA: PhysicsBody,\n    bodyB: PhysicsBody\n  ): { x: number; y: number } | null => {\n    const dx = bodyB.position.x - bodyA.position.x;\n    const dy = bodyB.position.y - bodyA.position.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n\n    if (distance < bodyA.radius + bodyB.radius) {\n      const overlap = bodyA.radius + bodyB.radius - distance;\n      return {\n        x: bodyA.position.x + (dx / distance) * (bodyA.radius - overlap / 2),\n        y: bodyA.position.y + (dy / distance) * (bodyA.radius - overlap / 2),\n      };\n    }\n\n    return null;\n  },\n\n  // Apply explosion force\n  applyExplosion: (\n    bodies: PhysicsBody[],\n    center: { x: number; y: number },\n    force: number,\n    radius: number\n  ): void => {\n    bodies.forEach((body: any) => {\n      const dx = body.position.x - center.x;\n      const dy = body.position.y - center.y;\n      const distance = Math.sqrt(dx * dx + dy * dy);\n\n      if (distance < radius && distance > 0) {\n        const strength = (1 - distance / radius) * force;\n        const impulse = {\n          x: (dx / distance) * strength / body.mass,\n          y: (dy / distance) * strength / body.mass,\n        };\n\n        body.velocity.x += impulse.x;\n        body.velocity.y += impulse.y;\n      }\n    });\n  },\n};\n", "/**\n * Gesture Physics System\n * Provides physics-based gesture interactions with preset configurations\n */\n\nimport { useCallback, useRef, useState, useEffect } from 'react';\nimport { Vector2D, createVector2D, addVectors, multiplyVector, UnsubscribeFunction } from '../../types/common';\nimport { SpringConfig } from './springPhysics';\n\n/**\n * Gesture types supported by the physics system\n */\nexport enum GestureType {\n  TAP = 'tap',\n  DOUBLE_TAP = 'double_tap',\n  LONG_PRESS = 'long_press',\n  PAN = 'pan',\n  SWIPE = 'swipe',\n  PINCH = 'pinch',\n  ROTATE = 'rotate',\n  HOVER = 'hover',\n}\n\n/**\n * Gesture physics preset configurations\n */\nexport interface GesturePhysicsPreset {\n  name: string;\n  damping: number;\n  stiffness: number;\n  mass: number;\n  velocity: number;\n  restDelta: number;\n  restSpeed: number;\n  gestures: GestureType[];\n}\n\n/**\n * Predefined gesture physics presets\n */\nexport const GESTURE_PRESETS: Record<string, GesturePhysicsPreset> = {\n  smooth: {\n    name: 'smooth',\n    damping: 26,\n    stiffness: 170,\n    mass: 1,\n    velocity: 0,\n    restDelta: 0.01,\n    restSpeed: 0.01,\n    gestures: [GestureType.PAN, GestureType.HOVER],\n  },\n  snappy: {\n    name: 'snappy',\n    damping: 20,\n    stiffness: 300,\n    mass: 0.5,\n    velocity: 0,\n    restDelta: 0.001,\n    restSpeed: 0.001,\n    gestures: [GestureType.TAP, GestureType.DOUBLE_TAP],\n  },\n  bouncy: {\n    name: 'bouncy',\n    damping: 15,\n    stiffness: 400,\n    mass: 1.5,\n    velocity: 0,\n    restDelta: 0.05,\n    restSpeed: 0.05,\n    gestures: [GestureType.SWIPE, GestureType.PAN],\n  },\n  gentle: {\n    name: 'gentle',\n    damping: 30,\n    stiffness: 120,\n    mass: 1.2,\n    velocity: 0,\n    restDelta: 0.01,\n    restSpeed: 0.01,\n    gestures: [GestureType.HOVER, GestureType.LONG_PRESS],\n  },\n  precise: {\n    name: 'precise',\n    damping: 40,\n    stiffness: 500,\n    mass: 0.8,\n    velocity: 0,\n    restDelta: 0.0001,\n    restSpeed: 0.0001,\n    gestures: [GestureType.PINCH, GestureType.ROTATE],\n  },\n};\n\n/**\n * Gesture event data\n */\nexport interface GestureEvent {\n  type: GestureType;\n  position: Vector2D;\n  delta: Vector2D;\n  velocity: Vector2D;\n  distance: number;\n  angle: number;\n  scale: number;\n  timestamp: number;\n}\n\n/**\n * Gesture state\n */\ninterface GestureState {\n  active: boolean;\n  gestureType: GestureType | null;\n  startPosition: Vector2D;\n  currentPosition: Vector2D;\n  velocity: Vector2D;\n  startTime: number;\n  lastTime: number;\n}\n\n/**\n * Options for gesture physics hook\n */\nexport interface UseGesturePhysicsOptions {\n  preset?: keyof typeof GESTURE_PRESETS | GesturePhysicsPreset;\n  enabledGestures?: GestureType[];\n  onGesture?: (event: GestureEvent) => void;\n  onGestureStart?: (event: GestureEvent) => void;\n  onGestureEnd?: (event: GestureEvent) => void;\n  threshold?: number;\n  velocityThreshold?: number;\n  longPressDelay?: number;\n}\n\n/**\n * Hook for gesture-based physics interactions\n */\nexport const useGesturePhysics = (options: UseGesturePhysicsOptions = {}) => {\n  const {\n    preset = 'smooth',\n    enabledGestures = Object.values(GestureType),\n    onGesture,\n    onGestureStart,\n    onGestureEnd,\n    threshold = 10,\n    velocityThreshold = 100,\n    longPressDelay = 500,\n  } = options;\n\n  const gestureState = useRef<GestureState>({\n    active: false,\n    gestureType: null,\n    startPosition: createVector2D(0, 0),\n    currentPosition: createVector2D(0, 0),\n    velocity: createVector2D(0, 0),\n    startTime: 0,\n    lastTime: 0,\n  });\n\n  const longPressTimer = useRef<NodeJS.Timeout | null>(null);\n  const tapTimer = useRef<NodeJS.Timeout | null>(null);\n  const lastTapTime = useRef<number>(0);\n\n  const [position, setPosition] = useState<Vector2D>(createVector2D(0, 0));\n  const [isGestureActive, setIsGestureActive] = useState(false);\n\n  // Get preset configuration\n  const presetConfig: GesturePhysicsPreset =\n    typeof preset === 'string' ? GESTURE_PRESETS[preset] : preset;\n\n  /**\n   * Create gesture event\n   */\n  const createGestureEvent = (type: GestureType): GestureEvent => {\n    const state = gestureState.current;\n    const delta = {\n      x: state.currentPosition.x - state.startPosition.x,\n      y: state.currentPosition.y - state.startPosition.y,\n    };\n    const distance = Math.sqrt(delta.x * delta.x + delta.y * delta.y);\n    const angle = Math.atan2(delta.y, delta.x);\n\n    return {\n      type,\n      position: state.currentPosition,\n      delta,\n      velocity: state.velocity,\n      distance,\n      angle,\n      scale: 1,\n      timestamp: Date.now(),\n    };\n  };\n\n  /**\n   * Handle gesture start\n   */\n  const handleGestureStart = useCallback(\n    (clientX: number, clientY: number) => {\n      const state = gestureState.current;\n      const currentTime = Date.now();\n\n      state.active = true;\n      state.startPosition = createVector2D(clientX, clientY);\n      state.currentPosition = createVector2D(clientX, clientY);\n      state.velocity = createVector2D(0, 0);\n      state.startTime = currentTime;\n      state.lastTime = currentTime;\n\n      setIsGestureActive(true);\n\n      // Check for double tap\n      if (enabledGestures.includes(GestureType.DOUBLE_TAP)) {\n        if (currentTime - lastTapTime.current < 300) {\n          state.gestureType = GestureType.DOUBLE_TAP;\n          const event = createGestureEvent(GestureType.DOUBLE_TAP);\n          onGestureStart?.(event);\n          onGesture?.(event);\n          lastTapTime.current = 0;\n          return;\n        }\n        lastTapTime.current = currentTime;\n      }\n\n      // Start long press timer\n      if (enabledGestures.includes(GestureType.LONG_PRESS)) {\n        longPressTimer.current = setTimeout(() => {\n          if (state.active) {\n            state.gestureType = GestureType.LONG_PRESS;\n            const event = createGestureEvent(GestureType.LONG_PRESS);\n            onGestureStart?.(event);\n            onGesture?.(event);\n          }\n        }, longPressDelay);\n      }\n\n      state.gestureType = GestureType.TAP;\n      onGestureStart?.(createGestureEvent(GestureType.TAP));\n    },\n    [enabledGestures, onGestureStart, onGesture, longPressDelay]\n  );\n\n  /**\n   * Handle gesture move\n   */\n  const handleGestureMove = useCallback(\n    (clientX: number, clientY: number) => {\n      const state = gestureState.current;\n      if (!state.active) return;\n\n      const currentTime = Date.now();\n      const dt = (currentTime - state.lastTime) / 1000;\n\n      const newPosition = createVector2D(clientX, clientY);\n      const delta = {\n        x: newPosition.x - state.currentPosition.x,\n        y: newPosition.y - state.currentPosition.y,\n      };\n\n      // Calculate velocity\n      state.velocity = {\n        x: dt > 0 ? delta.x / dt : 0,\n        y: dt > 0 ? delta.y / dt : 0,\n      };\n\n      state.currentPosition = newPosition;\n      state.lastTime = currentTime;\n\n      // Determine gesture type\n      const totalDistance = Math.sqrt(\n        Math.pow(newPosition.x - state.startPosition.x, 2) +\n        Math.pow(newPosition.y - state.startPosition.y, 2)\n      );\n\n      if (totalDistance > threshold) {\n        // Clear long press timer\n        if (longPressTimer.current) {\n          clearTimeout(longPressTimer.current);\n          longPressTimer.current = null;\n        }\n\n        const velocityMagnitude = Math.sqrt(\n          state.velocity.x * state.velocity.x +\n          state.velocity.y * state.velocity.y\n        );\n\n        if (velocityMagnitude > velocityThreshold && enabledGestures.includes(GestureType.SWIPE)) {\n          state.gestureType = GestureType.SWIPE;\n        } else if (enabledGestures.includes(GestureType.PAN)) {\n          state.gestureType = GestureType.PAN;\n        }\n      }\n\n      setPosition(newPosition);\n      if (state.gestureType) {\n        onGesture?.(createGestureEvent(state.gestureType));\n      }\n    },\n    [enabledGestures, onGesture, threshold, velocityThreshold]\n  );\n\n  /**\n   * Handle gesture end\n   */\n  const handleGestureEnd = useCallback(() => {\n    const state = gestureState.current;\n    if (!state.active) return;\n\n    // Clear timers\n    if (longPressTimer.current) {\n      clearTimeout(longPressTimer.current);\n      longPressTimer.current = null;\n    }\n\n    if (state.gestureType) {\n      onGestureEnd?.(createGestureEvent(state.gestureType));\n    }\n\n    state.active = false;\n    state.gestureType = null;\n    setIsGestureActive(false);\n  }, [onGestureEnd]);\n\n  /**\n   * Handlers for different input methods\n   */\n  const handlers = {\n    // Mouse events\n    onMouseDown: (e: React.MouseEvent) => {\n      handleGestureStart(e.clientX, e.clientY);\n    },\n    onMouseMove: (e: React.MouseEvent) => {\n      handleGestureMove(e.clientX, e.clientY);\n    },\n    onMouseUp: () => {\n      handleGestureEnd();\n    },\n    onMouseLeave: () => {\n      handleGestureEnd();\n    },\n\n    // Touch events\n    onTouchStart: (e: React.TouchEvent) => {\n      const touch = e.touches[0];\n      if (touch) {\n        handleGestureStart(touch.clientX, touch.clientY);\n      }\n    },\n    onTouchMove: (e: React.TouchEvent) => {\n      const touch = e.touches[0];\n      if (touch) {\n        handleGestureMove(touch.clientX, touch.clientY);\n      }\n    },\n    onTouchEnd: () => {\n      handleGestureEnd();\n    },\n    onTouchCancel: () => {\n      handleGestureEnd();\n    },\n  };\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (longPressTimer.current) {\n        clearTimeout(longPressTimer.current);\n      }\n      if (tapTimer.current) {\n        clearTimeout(tapTimer.current);\n      }\n    };\n  }, []);\n\n  return {\n    handlers,\n    position,\n    isActive: isGestureActive,\n    gestureType: gestureState.current.gestureType,\n    velocity: gestureState.current.velocity,\n    preset: presetConfig,\n  };\n};\n", "/**\n * Animation Orchestration Hook\n * Provides synchronized multi-element animation control with sequencing and choreography\n */\n\nimport { useCallback, useRef, useState, useEffect } from \"react\";\nimport { UnsubscribeFunction } from \"../../types/common\";\n\n/**\n * Public animation stage states\n */\nexport enum PublicAnimationStage {\n  IDLE = \"idle\",\n  PREPARING = \"preparing\",\n  ENTERING = \"entering\",\n  ACTIVE = \"active\",\n  EXITING = \"exiting\",\n  COMPLETED = \"completed\",\n  PAUSED = \"paused\",\n  ERROR = \"error\",\n}\n\n/**\n * Animation element configuration\n */\nexport interface AnimationElement {\n  id: string;\n  delay?: number;\n  duration?: number;\n  easing?: string;\n  properties?: Record<string, unknown>;\n  onStart?: () => void;\n  onComplete?: () => void;\n}\n\n/**\n * Orchestration sequence configuration\n */\nexport interface OrchestrationSequence {\n  elements: AnimationElement[];\n  mode?: \"parallel\" | \"sequential\" | \"stagger\";\n  staggerDelay?: number;\n  loop?: boolean | number; // false, true (infinite), or number of iterations\n  onSequenceStart?: () => void;\n  onSequenceComplete?: () => void;\n  onStageChange?: (stage: PublicAnimationStage) => void;\n}\n\n/**\n * Orchestration state\n */\ninterface OrchestrationState {\n  stage: PublicAnimationStage;\n  currentElementIndex: number;\n  iteration: number;\n  startTime: number;\n  pausedTime: number;\n  elapsedTime: number;\n}\n\n/**\n * Hook for orchestrating complex animations\n */\nexport const useOrchestration = (sequence: OrchestrationSequence) => {\n  const {\n    elements = [],\n    mode = \"sequential\",\n    staggerDelay = 100,\n    loop = false,\n    onSequenceStart,\n    onSequenceComplete,\n    onStageChange,\n  } = sequence;\n\n  const [stage, setStage] = useState<PublicAnimationStage>(\n    PublicAnimationStage.IDLE\n  );\n  const [progress, setProgress] = useState(0);\n  const [currentElementId, setCurrentElementId] = useState<string | null>(null);\n\n  const stateRef = useRef<OrchestrationState>({\n    stage: PublicAnimationStage.IDLE,\n    currentElementIndex: 0,\n    iteration: 0,\n    startTime: 0,\n    pausedTime: 0,\n    elapsedTime: 0,\n  });\n\n  const timersRef = useRef<NodeJS.Timeout[]>([]);\n  const activeAnimationsRef = useRef<Set<string>>(new Set());\n\n  /**\n   * Update stage\n   */\n  const updateStage = useCallback(\n    (newStage: PublicAnimationStage) => {\n      setStage(newStage);\n      stateRef.current.stage = newStage;\n      onStageChange?.(newStage);\n    },\n    [onStageChange]\n  );\n\n  /**\n   * Clear all timers\n   */\n  const clearAllTimers = useCallback(() => {\n    timersRef.current.forEach(clearTimeout);\n    timersRef.current = [];\n  }, []);\n\n  /**\n   * Animate single element\n   */\n  const animateElement = useCallback(\n    (element: AnimationElement, delay: number = 0): Promise<void> => {\n      return new Promise((resolve) => {\n        const timer = setTimeout(() => {\n          activeAnimationsRef.current.add(element.id);\n          setCurrentElementId(element.id);\n          element.onStart?.();\n\n          // Simulate animation duration\n          const animationTimer = setTimeout(() => {\n            element.onComplete?.();\n            activeAnimationsRef.current.delete(element.id);\n            resolve();\n          }, element.duration || 300);\n\n          timersRef.current.push(animationTimer);\n        }, delay);\n\n        timersRef.current.push(timer);\n      });\n    },\n    []\n  );\n\n  /**\n   * Execute sequence in parallel mode\n   */\n  const executeParallel = useCallback(async () => {\n    updateStage(PublicAnimationStage.ENTERING);\n    const promises = elements.map((element) =>\n      animateElement(element, element.delay || 0)\n    );\n    await Promise.all(promises);\n    updateStage(PublicAnimationStage.COMPLETED);\n  }, [elements, animateElement, updateStage]);\n\n  /**\n   * Execute sequence in sequential mode\n   */\n  const executeSequential = useCallback(async () => {\n    updateStage(PublicAnimationStage.ENTERING);\n\n    for (let i = 0; i < elements.length; i++) {\n      stateRef.current.currentElementIndex = i;\n      await animateElement(elements[i], elements[i].delay || 0);\n      setProgress(((i + 1) / elements.length) * 100);\n    }\n\n    updateStage(PublicAnimationStage.COMPLETED);\n  }, [elements, animateElement, updateStage]);\n\n  /**\n   * Execute sequence in stagger mode\n   */\n  const executeStagger = useCallback(async () => {\n    updateStage(PublicAnimationStage.ENTERING);\n\n    const promises = elements.map((element, index) =>\n      animateElement(element, (element.delay || 0) + index * staggerDelay)\n    );\n\n    await Promise.all(promises);\n    updateStage(PublicAnimationStage.COMPLETED);\n  }, [elements, staggerDelay, animateElement, updateStage]);\n\n  /**\n   * Start the orchestration\n   */\n  const start = useCallback(async () => {\n    if (stateRef.current.stage !== PublicAnimationStage.IDLE) {\n      return;\n    }\n\n    clearAllTimers();\n    updateStage(PublicAnimationStage.PREPARING);\n    stateRef.current.startTime = Date.now();\n    stateRef.current.iteration = 0;\n\n    onSequenceStart?.();\n\n    const execute = async () => {\n      updateStage(PublicAnimationStage.ACTIVE);\n\n      switch (mode) {\n        case \"parallel\":\n          await executeParallel();\n          break;\n        case \"sequential\":\n          await executeSequential();\n          break;\n        case \"stagger\":\n          await executeStagger();\n          break;\n      }\n\n      // Handle looping\n      if (loop) {\n        stateRef.current.iteration += 1;\n\n        if (typeof loop === \"number\" && stateRef.current.iteration >= loop) {\n          updateStage(PublicAnimationStage.COMPLETED);\n          onSequenceComplete?.();\n        } else {\n          // Restart sequence\n          stateRef.current.currentElementIndex = 0;\n          setProgress(0);\n          await execute();\n        }\n      } else {\n        onSequenceComplete?.();\n      }\n    };\n\n    await execute();\n  }, [\n    loop,\n    mode,\n    clearAllTimers,\n    updateStage,\n    executeParallel,\n    executeSequential,\n    executeStagger,\n    onSequenceStart,\n    onSequenceComplete,\n  ]);\n\n  /**\n   * Pause the orchestration\n   */\n  const pause = useCallback(() => {\n    if (stateRef.current.stage === PublicAnimationStage.ACTIVE) {\n      clearAllTimers();\n      stateRef.current.pausedTime = Date.now();\n      updateStage(PublicAnimationStage.PAUSED);\n    }\n  }, [clearAllTimers, updateStage]);\n\n  /**\n   * Resume the orchestration\n   */\n  const resume = useCallback(() => {\n    if (stateRef.current.stage === PublicAnimationStage.PAUSED) {\n      const pausedDuration = Date.now() - stateRef.current.pausedTime;\n      stateRef.current.startTime += pausedDuration;\n      updateStage(PublicAnimationStage.ACTIVE);\n      // Would need to re-execute remaining animations\n    }\n  }, [updateStage]);\n\n  /**\n   * Stop the orchestration\n   */\n  const stop = useCallback(() => {\n    clearAllTimers();\n    activeAnimationsRef.current.clear();\n    setProgress(0);\n    setCurrentElementId(null);\n    stateRef.current.currentElementIndex = 0;\n    stateRef.current.iteration = 0;\n    updateStage(PublicAnimationStage.IDLE);\n  }, [clearAllTimers, updateStage]);\n\n  /**\n   * Reset the orchestration\n   */\n  const reset = useCallback(() => {\n    stop();\n  }, [stop]);\n\n  /**\n   * Seek to specific element\n   */\n  const seekToElement = useCallback(\n    (elementId: string) => {\n      const index = elements.findIndex((el) => el.id === elementId);\n      if (index !== -1) {\n        stateRef.current.currentElementIndex = index;\n        setCurrentElementId(elementId);\n        setProgress((index / elements.length) * 100);\n      }\n    },\n    [elements]\n  );\n\n  /**\n   * Get current state\n   */\n  const getState = useCallback(() => {\n    return {\n      stage: stateRef.current.stage,\n      currentElementIndex: stateRef.current.currentElementIndex,\n      currentElementId,\n      iteration: stateRef.current.iteration,\n      progress,\n      activeAnimations: Array.from(activeAnimationsRef.current),\n      elapsedTime: Date.now() - stateRef.current.startTime,\n    };\n  }, [currentElementId, progress]);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      clearAllTimers();\n    };\n  }, [clearAllTimers]);\n\n  return {\n    stage,\n    progress,\n    currentElementId,\n    start,\n    pause,\n    resume,\n    stop,\n    reset,\n    seekToElement,\n    getState,\n    isAnimating:\n      stage === PublicAnimationStage.ACTIVE ||\n      stage === PublicAnimationStage.ENTERING,\n    isPaused: stage === PublicAnimationStage.PAUSED,\n    isCompleted: stage === PublicAnimationStage.COMPLETED,\n  };\n};\n\n/**\n * Higher-order function to create orchestration sequences\n */\nexport const createOrchestrationSequence = (\n  elements: AnimationElement[],\n  options: Partial<OrchestrationSequence> = {}\n): OrchestrationSequence => ({\n  elements,\n  mode: options.mode || \"sequential\",\n  staggerDelay: options.staggerDelay || 100,\n  loop: options.loop || false,\n  onSequenceStart: options.onSequenceStart,\n  onSequenceComplete: options.onSequenceComplete,\n  onStageChange: options.onStageChange,\n});\n", "// Edge effects mixin\nexport const edgeEffects = {\n  boxShadow: '0 0 20px rgba(0, 0, 0, 0.1)',\n  borderRadius: '8px',\n};\n\nexport const subtleEdge = {\n  boxShadow: '0 0 10px rgba(0, 0, 0, 0.05)',\n};\n\nexport const strongEdge = {\n  boxShadow: '0 0 30px rgba(0, 0, 0, 0.15)',\n};\n\nexport const edgeHighlight = {\n  boxShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 20px rgba(0, 0, 0, 0.1)',\n  border: '1px solid rgba(255, 255, 255, 0.1)',\n};\n", "import { CSSProperties } from \"react\";\n\nexport interface GlowConfig {\n  color?: string;\n  intensity?: \"subtle\" | \"light\" | \"standard\" | \"strong\" | \"intense\";\n  size?: number;\n  spread?: number;\n  blur?: number;\n  animated?: boolean;\n  animationDuration?: number;\n  pulsing?: boolean;\n  pulseSpeed?: number;\n}\n\nexport interface GlowPreset {\n  primary: GlowConfig;\n  secondary: GlowConfig;\n  success: GlowConfig;\n  warning: GlowConfig;\n  error: GlowConfig;\n  info: GlowConfig;\n}\n\n// Glow effects mixin\nexport const glowEffects = {\n  subtle: \"0 0 10px rgba(255, 255, 255, 0.1)\",\n  light: \"0 0 20px rgba(255, 255, 255, 0.2)\",\n  standard: \"0 0 30px rgba(255, 255, 255, 0.3)\",\n  strong: \"0 0 40px rgba(255, 255, 255, 0.4)\",\n  intense: \"0 0 50px rgba(255, 255, 255, 0.5)\",\n};\n\nexport const createGlowEffect = (config: GlowConfig = {}): CSSProperties => {\n  const {\n    color = \"var(--glass-white)\",\n    intensity = \"standard\",\n    size = 30,\n    spread = 0,\n    blur = size,\n    animated = false,\n    animationDuration = 2000,\n    pulsing = false,\n    pulseSpeed = 2000,\n  } = config;\n\n  // Convert hex to rgba if needed\n  const glowColor = color.startsWith(\"#\") ? hexToRgba(color, 0.3) : color;\n\n  const baseStyles: CSSProperties = {\n    boxShadow: `0 0 ${blur}px ${spread}px ${glowColor}`,\n    filter: `drop-shadow(0 0 ${blur / 2}px ${glowColor})`,\n  };\n\n  if (animated || pulsing) {\n    baseStyles.animation = pulsing\n      ? `glow-pulse ${pulseSpeed}ms ease-in-out infinite alternate`\n      : `glow-animate ${animationDuration}ms ease-in-out infinite`;\n  }\n\n  return baseStyles;\n};\n\n// Helper function to convert hex to rgba\nconst hexToRgba = (hex: string, alpha: number): string => {\n  const r = parseInt(hex.slice(1, 3), 16);\n  const g = parseInt(hex.slice(3, 5), 16);\n  const b = parseInt(hex.slice(5, 7), 16);\n  return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n\n// Predefined glow colors\nexport const glowColors = {\n  white: \"var(--glass-white)\",\n  blue: \"hsl(var(--glass-color-primary))\",\n  indigo: \"#6366f1\",\n  purple: \"#8b5cf6\",\n  pink: \"#ec4899\",\n  red: \"hsl(var(--glass-color-danger))\",\n  orange: \"#f97316\",\n  amber: \"hsl(var(--glass-color-warning))\",\n  yellow: \"#eab308\",\n  lime: \"#84cc16\",\n  green: \"#22c55e\",\n  emerald: \"hsl(var(--glass-color-success))\",\n  teal: \"#14b8a6\",\n  cyan: \"#06b6d4\",\n  sky: \"#0ea5e9\",\n  gray: \"var(--glass-gray-500)\",\n} as const;\n\n// Preset glow effects\nexport const glowPresets: GlowPreset = {\n  primary: {\n    color: glowColors.blue,\n    intensity: \"standard\",\n    animated: true,\n  },\n  secondary: {\n    color: glowColors.gray,\n    intensity: \"light\",\n    animated: false,\n  },\n  success: {\n    color: glowColors.green,\n    intensity: \"light\",\n    pulsing: true,\n  },\n  warning: {\n    color: glowColors.amber,\n    intensity: \"standard\",\n    pulsing: true,\n  },\n  error: {\n    color: glowColors.red,\n    intensity: \"strong\",\n    pulsing: true,\n    pulseSpeed: 1000,\n  },\n  info: {\n    color: glowColors.cyan,\n    intensity: \"light\",\n    animated: true,\n  },\n};\n\n// Specific glow effects for different elements\nexport const blueGlow = createGlowEffect(glowPresets.primary);\nexport const greenGlow = createGlowEffect(glowPresets.success);\nexport const redGlow = createGlowEffect(glowPresets.error);\nexport const whiteGlow = createGlowEffect({ color: glowColors.white });\nexport const purpleGlow = createGlowEffect({ color: glowColors.purple });\nexport const orangeGlow = createGlowEffect({ color: glowColors.orange });\n\n// Intensity-based glow effects\nexport const subtleGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, intensity: \"subtle\" });\n\nexport const lightGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, intensity: \"light\" });\n\nexport const standardGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, intensity: \"standard\" });\n\nexport const strongGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, intensity: \"strong\" });\n\nexport const intenseGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, intensity: \"intense\" });\n\n// Animated glow effects\nexport const pulsingGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, pulsing: true });\n\nexport const animatedGlow = (color: string = glowColors.white) =>\n  createGlowEffect({ color, animated: true });\n\n// Multi-color glow effects\nexport const rainbowGlow = (): CSSProperties => ({\n  boxShadow: `\n    0 0 10px ${glowColors.red},\n    0 0 20px ${glowColors.orange},\n    0 0 30px ${glowColors.yellow},\n    0 0 40px ${glowColors.green},\n    0 0 50px ${glowColors.blue},\n    0 0 60px ${glowColors.indigo},\n    0 0 70px ${glowColors.purple}\n  `,\n  animation: \"rainbow-glow 3000ms ease-in-out infinite\",\n});\n\nexport const dualGlow = (color1: string, color2: string): CSSProperties => ({\n  boxShadow: `\n    0 0 20px ${color1},\n    0 0 40px ${color2}\n  `,\n  animation: \"dual-glow 2000ms ease-in-out infinite alternate\",\n});\n\n// Contextual glow effects\nexport const contextualGlow = {\n  hover: (color: string = glowColors.blue) =>\n    createGlowEffect({\n      color,\n      intensity: \"light\",\n      animated: true,\n      animationDuration: 300,\n    }),\n\n  focus: (color: string = glowColors.blue) =>\n    createGlowEffect({\n      color,\n      intensity: \"standard\",\n      size: 20,\n    }),\n\n  active: (color: string = glowColors.blue) =>\n    createGlowEffect({\n      color,\n      intensity: \"strong\",\n      size: 15,\n    }),\n\n  disabled: () =>\n    createGlowEffect({\n      color: glowColors.gray,\n      intensity: \"subtle\",\n      size: 5,\n    }),\n\n  loading: (color: string = glowColors.blue) =>\n    createGlowEffect({\n      color,\n      intensity: \"light\",\n      pulsing: true,\n      pulseSpeed: 1500,\n    }),\n\n  success: () => createGlowEffect(glowPresets.success),\n  error: () => createGlowEffect(glowPresets.error),\n  warning: () => createGlowEffect(glowPresets.warning),\n};\n\n// CSS keyframes for glow animations (to be injected into global styles)\nexport const glowKeyframes = `\n  @keyframes glow-animate {\n    0% { filter: drop-shadow(0 0 5px currentColor); }\n    50% { filter: drop-shadow(0 0 20px currentColor); }\n    100% { filter: drop-shadow(0 0 5px currentColor); }\n  }\n\n  @keyframes glow-pulse {\n    0% { box-shadow: 0 0 5px currentColor; }\n    100% { box-shadow: 0 0 25px currentColor; }\n  }\n\n  @keyframes rainbow-glow {\n    0% { filter: hue-rotate(0deg); }\n    100% { filter: hue-rotate(360deg); }\n  }\n\n  @keyframes dual-glow {\n    0% { filter: brightness(1); }\n    100% { filter: brightness(1.3); }\n  }\n`;\n\n// Utility to inject glow keyframes\nexport const injectGlowKeyframes = (): void => {\n  const styleId = \"aura-glass-glow-keyframes\";\n\n  if (document.getElementById(styleId)) {\n    return; // Already injected\n  }\n\n  const style = document.createElement(\"style\");\n  style.id = styleId;\n  style.textContent = glowKeyframes;\n  document.head.appendChild(style);\n};\n", "/**\n * @deprecated Use createGlassStyle() from glassMixins instead\n * This file contains hardcoded glass interaction patterns that bypass our token system.\n\n */\n\nimport { CSSProperties } from 'react';\n\n\n\n\nexport interface InteractiveGlassConfig {\n  hover?: boolean;\n  active?: boolean;\n  focus?: boolean;\n  disabled?: boolean;\n  scale?: number;\n  glow?: boolean;\n  ripple?: boolean;\n  transition?: string;\n}\n\n/**\n\n\n */\nexport const interactiveGlass = (config: InteractiveGlassConfig = {}): CSSProperties => {\n\n  \n  const {\n    hover = true,\n    active = true,\n    focus = true,\n    disabled = false,\n    scale = 1.02,\n    glow = true,\n    ripple = false,\n    transition = 'all 0.2s ease',\n  } = config;\n\n  // Use the unified glass style with interactive options\n  const baseStyles = {\n    intent: 'neutral',\n    elevation: 'level2',\n    interactive: true,\n    hoverLift: hover,\n    focusRing: focus,\n  };\n\n  // Add legacy interactive behavior\n  const legacyStyles: CSSProperties = {\n    cursor: disabled ? 'not-allowed' : 'pointer',\n    userSelect: 'none',\n  };\n\n  if (disabled) {\n    legacyStyles.opacity = 0.5;\n    legacyStyles.pointerEvents = 'none';\n  }\n\n  return { ...baseStyles, ...legacyStyles };\n};\n\n/**\n\n\n */\nexport const createInteractiveGlassVariants = () => {\n  return {\n    // Note: Interactive glass variants are now handled by the unified glass system\n  };\n};\n\n/**\n\n\n */\nexport const createRippleEffect = (color: string = 'rgba(255, 255, 255, 0.3)'): CSSProperties => {\n  return {\n    position: 'relative',\n    overflow: 'hidden',\n    // Note: Ripple effects are now handled by the unified glass system\n  };\n};\n\n/**\n\n\n */\nexport const createMagneticEffect = (strength: number = 0.3): CSSProperties => {\n  return {\n    transition: 'transform 0.3s ease',\n    // Note: Magnetic effects are now handled by the unified glass system\n  };\n};\n\n/**\n\n\n */\nexport const glassButtonVariants = (() => {\n  return {\n    // Note: Button variants are now handled by the unified glass system\n  };\n})();\n\n// Interactive state management\nexport interface InteractiveState {\n  isHovered: boolean;\n  isActive: boolean;\n  isFocused: boolean;\n  isDisabled: boolean;\n}\n\n/**\n\n\n */\nexport const createInteractiveStateStyles = (state: InteractiveState): CSSProperties => {\n  const styles: CSSProperties = {};\n\n  if (state.isDisabled) {\n    styles.opacity = 0.5;\n    styles.cursor = 'not-allowed';\n    styles.pointerEvents = 'none';\n  } else {\n    if (state.isHovered) {\n      styles.transform = 'scale(1.02)';\n      styles.boxShadow = '0 0 20px rgba(255, 255, 255, 0.2)';\n    }\n\n    if (state.isActive) {\n      styles.transform = 'scale(0.98)';\n    }\n\n    if (state.isFocused) {\n      styles.outline = '2px solid rgba(255, 255, 255, 0.5)';\n      styles.outlineOffset = '2px';\n    }\n  }\n\n  return styles;\n};\n\n/**\n\n\n */\nexport const createAccessibleInteractiveStyles = (): CSSProperties => {\n  return {\n    // Note: These styles are now handled by the unified glass system\n  };\n};\n\n/**\n\n\n */\nexport const createTouchOptimizedStyles = (): CSSProperties => {\n  return {\n    // Increase touch target size\n    minWidth: '44px',\n    minHeight: '44px',\n    // Note: Touch optimizations are now handled by the unified glass system\n    // Prevent text selection on touch\n    WebkitTouchCallout: 'none',\n    WebkitUserSelect: 'none',\n    KhtmlUserSelect: 'none',\n    MozUserSelect: 'none',\n    msUserSelect: 'none',\n    userSelect: 'none',\n  };\n};\n", "import React from 'react';\nimport { useRef, useEffect, useCallback, useState } from 'react';\n\nexport interface MagneticEffectConfig {\n  strength?: number;\n  range?: number;\n  scale?: number;\n  rotation?: number;\n  easing?: string;\n  duration?: number;\n  enabled?: boolean;\n  resetOnLeave?: boolean;\n}\n\nexport interface MagneticEffectState {\n  isActive: boolean;\n  distance: number;\n  intensity: number;\n  transform: {\n    x: number;\n    y: number;\n    scale: number;\n    rotation: number;\n  };\n}\n\nconst DEFAULT_CONFIG: Required<MagneticEffectConfig> = {\n  strength: 0.3,\n  range: 100,\n  scale: 1.1,\n  rotation: 5,\n  easing: 'cubic-bezier(0.23, 1, 0.32, 1)',\n  duration: 300,\n  enabled: true,\n  resetOnLeave: true,\n};\n\nexport function useMouseMagneticEffect(\n  config: MagneticEffectConfig = {}\n) {\n  const elementRef = useRef<HTMLElement>(null);\n  const [state, setState] = useState<MagneticEffectState>({\n    isActive: false,\n    distance: 0,\n    intensity: 0,\n    transform: {\n      x: 0,\n      y: 0,\n      scale: 1,\n      rotation: 0,\n    },\n  });\n\n  const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n  const calculateMagneticEffect = useCallback((\n    mouseX: number,\n    mouseY: number,\n    elementRect: DOMRect\n  ): MagneticEffectState => {\n    const centerX = elementRect.left + elementRect.width / 2;\n    const centerY = elementRect.top + elementRect.height / 2;\n\n    const deltaX = mouseX - centerX;\n    const deltaY = mouseY - centerY;\n    const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n    if (distance > finalConfig.range) {\n      return {\n        isActive: false,\n        distance,\n        intensity: 0,\n        transform: {\n          x: 0,\n          y: 0,\n          scale: 1,\n          rotation: 0,\n        },\n      };\n    }\n\n    const intensity = Math.max(0, 1 - distance / finalConfig.range);\n    const strength = finalConfig.strength * intensity;\n\n    const transform = {\n      x: deltaX * strength,\n      y: deltaY * strength,\n      scale: 1 + (finalConfig.scale - 1) * intensity,\n      rotation: (deltaX / distance) * finalConfig.rotation * intensity,\n    };\n\n    return {\n      isActive: true,\n      distance,\n      intensity,\n      transform,\n    };\n  }, [finalConfig]);\n\n  const handleMouseMove = useCallback((event: MouseEvent) => {\n    if (!elementRef.current || !finalConfig.enabled) return;\n\n    const elementRect = elementRef.current.getBoundingClientRect();\n    const newState = calculateMagneticEffect(\n      event.clientX,\n      event.clientY,\n      elementRect\n    );\n\n    setState(newState);\n\n    // Apply transform directly to element\n    if (elementRef.current) {\n      const { transform } = newState;\n      elementRef.current.style.transform = `\n        translate(${transform.x}px, ${transform.y}px)\n        scale(${transform.scale})\n        rotate(${transform.rotation}deg)\n      `;\n      elementRef.current.style.transition = finalConfig.duration > 0\n        ? `transform ${finalConfig.duration}ms ${finalConfig.easing}`\n        : 'none';\n    }\n  }, [calculateMagneticEffect, finalConfig]);\n\n  const handleMouseLeave = useCallback(() => {\n    if (!finalConfig.resetOnLeave || !elementRef.current) return;\n\n    setState({\n      isActive: false,\n      distance: 0,\n      intensity: 0,\n      transform: {\n        x: 0,\n        y: 0,\n        scale: 1,\n        rotation: 0,\n      },\n    });\n\n    // Reset transform\n    elementRef.current.style.transform = 'translate(0, 0) scale(1) rotate(0deg)';\n  }, [finalConfig.resetOnLeave]);\n\n  const reset = useCallback(() => {\n    if (!elementRef.current) return;\n\n    setState({\n      isActive: false,\n      distance: 0,\n      intensity: 0,\n      transform: {\n        x: 0,\n        y: 0,\n        scale: 1,\n        rotation: 0,\n      },\n    });\n\n    elementRef.current.style.transform = 'translate(0, 0) scale(1) rotate(0deg)';\n  }, []);\n\n  useEffect(() => {\n    const element = elementRef.current;\n    if (!element || !finalConfig.enabled) return;\n\n    // Add event listeners\n    element.addEventListener('mousemove', handleMouseMove);\n    element.addEventListener('mouseleave', handleMouseLeave);\n\n    return () => {\n      element.removeEventListener('mousemove', handleMouseMove);\n      element.removeEventListener('mouseleave', handleMouseLeave);\n    };\n  }, [handleMouseMove, handleMouseLeave, finalConfig.enabled]);\n\n  return {\n    ref: elementRef,\n    state,\n    reset,\n    config: finalConfig,\n  };\n}\n\n// Hook for applying magnetic effect to multiple elements\nexport function useMagneticField(\n  config: MagneticEffectConfig = {}\n) {\n  const containerRef = useRef<HTMLElement>(null);\n  const elementsRef = useRef<Map<string, HTMLElement>>(new Map());\n  const [activeElement, setActiveElement] = useState<string | null>(null);\n\n  const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n  const registerElement = useCallback((id: string, element: HTMLElement) => {\n    elementsRef.current.set(id, element);\n    return () => {\n      elementsRef.current.delete(id);\n    };\n  }, []);\n\n  const unregisterElement = useCallback((id: string) => {\n    elementsRef.current.delete(id);\n    if (activeElement === id) {\n      setActiveElement(null);\n    }\n  }, [activeElement]);\n\n  const handleMouseMove = useCallback((event: MouseEvent) => {\n    if (!finalConfig.enabled) return;\n\n    let closestElement: string | null = null;\n    let minDistance = Infinity;\n\n    elementsRef.current.forEach((element, id) => {\n      const rect = element.getBoundingClientRect();\n      const centerX = rect.left + rect.width / 2;\n      const centerY = rect.top + rect.height / 2;\n\n      const distance = Math.sqrt(\n        Math.pow(event.clientX - centerX, 2) +\n        Math.pow(event.clientY - centerY, 2)\n      );\n\n      if (distance < minDistance && distance <= finalConfig.range) {\n        minDistance = distance;\n        closestElement = id;\n      }\n    });\n\n    if (closestElement !== activeElement) {\n      // Reset previous active element\n      if (activeElement && elementsRef.current.has(activeElement)) {\n        const prevElement = elementsRef.current.get(activeElement)!;\n        prevElement.style.transform = 'translate(0, 0) scale(1) rotate(0deg)';\n      }\n\n      setActiveElement(closestElement);\n\n      // Apply effect to new active element\n      if (closestElement && elementsRef.current.has(closestElement)) {\n        const element = elementsRef.current.get(closestElement)!;\n        const rect = element.getBoundingClientRect();\n        const intensity = Math.max(0, 1 - minDistance / finalConfig.range);\n\n        const centerX = rect.left + rect.width / 2;\n        const centerY = rect.top + rect.height / 2;\n        const deltaX = event.clientX - centerX;\n        const deltaY = event.clientY - centerY;\n\n        const transform = {\n          x: deltaX * finalConfig.strength * intensity,\n          y: deltaY * finalConfig.strength * intensity,\n          scale: 1 + (finalConfig.scale - 1) * intensity,\n          rotation: (deltaX / minDistance) * finalConfig.rotation * intensity,\n        };\n\n        element.style.transform = `\n          translate(${transform.x}px, ${transform.y}px)\n          scale(${transform.scale})\n          rotate(${transform.rotation}deg)\n        `;\n        element.style.transition = finalConfig.duration > 0\n          ? `transform ${finalConfig.duration}ms ${finalConfig.easing}`\n          : 'none';\n      }\n    }\n  }, [activeElement, finalConfig]);\n\n  const resetAll = useCallback(() => {\n    elementsRef.current.forEach((element) => {\n      element.style.transform = 'translate(0, 0) scale(1) rotate(0deg)';\n    });\n    setActiveElement(null);\n  }, []);\n\n  useEffect(() => {\n    const container = containerRef.current;\n    if (!container || !finalConfig.enabled) return;\n\n    container.addEventListener('mousemove', handleMouseMove);\n    container.addEventListener('mouseleave', resetAll);\n\n    return () => {\n      container.removeEventListener('mousemove', handleMouseMove);\n      container.removeEventListener('mouseleave', resetAll);\n    };\n  }, [handleMouseMove, resetAll, finalConfig.enabled]);\n\n  return {\n    containerRef,\n    registerElement,\n    unregisterElement,\n    activeElement,\n    resetAll,\n    config: finalConfig,\n  };\n}\n\n// Utility hook for magnetic buttons\nexport function useMagneticButton(\n  config: MagneticEffectConfig & {\n    onClick?: () => void;\n    disabled?: boolean;\n  } = {}\n) {\n  const { onClick, disabled, ...magneticConfig } = config;\n  const magnetic = useMouseMagneticEffect(magneticConfig);\n\n  const handleClick = useCallback(() => {\n    if (!disabled && onClick) {\n      // Add click feedback animation\n      if (magnetic.ref.current) {\n        magnetic.ref.current.style.animation = 'magnetic-click 0.2s ease-out';\n        setTimeout(() => {\n          if (magnetic.ref.current) {\n            magnetic.ref.current.style.animation = '';\n          }\n        }, 200);\n      }\n      onClick();\n    }\n  }, [disabled, onClick, magnetic.ref]);\n\n  useEffect(() => {\n    const element = magnetic.ref.current;\n    if (!element) return;\n\n    if (disabled) {\n      element.style.pointerEvents = 'none';\n      element.style.opacity = '0.5';\n    } else {\n      element.style.pointerEvents = 'auto';\n      element.style.opacity = '1';\n    }\n  }, [disabled, magnetic.ref]);\n\n  return {\n    ...magnetic,\n    handleClick,\n    disabled: disabled || false,\n  };\n}\n", "import React from \"react\";\nimport { useRef, useCallback, useEffect, useState } from \"react\";\n\nexport interface AnimationStep {\n  id: string;\n  duration: number;\n  delay?: number;\n  easing?: string;\n  transform?: {\n    x?: number;\n    y?: number;\n    scale?: number;\n    rotation?: number;\n    opacity?: number;\n  };\n  style?: React.CSSProperties;\n  onStart?: () => void;\n  onComplete?: () => void;\n  onUpdate?: (progress: number) => void;\n}\n\nexport interface AnimationSequenceConfig {\n  autoPlay?: boolean;\n  loop?: boolean;\n  reverse?: boolean;\n  speed?: number;\n  paused?: boolean;\n}\n\nexport interface AnimationSequenceState {\n  isPlaying: boolean;\n  isPaused: boolean;\n  currentStep: number;\n  totalSteps: number;\n  progress: number;\n  elapsed: number;\n  totalDuration: number;\n}\n\nexport function useAnimationSequence(\n  steps: AnimationStep[],\n  config: AnimationSequenceConfig = {}\n) {\n  const {\n    autoPlay = false,\n    loop = false,\n    reverse = false,\n    speed = 1,\n    paused = false,\n  } = config;\n\n  const [state, setState] = useState<AnimationSequenceState>({\n    isPlaying: false,\n    isPaused: false,\n    currentStep: 0,\n    totalSteps: steps.length,\n    progress: 0,\n    elapsed: 0,\n    totalDuration: steps.reduce(\n      (total, step) => total + step.duration + (step.delay || 0),\n      0\n    ),\n  });\n\n  const elementRef = useRef<HTMLElement>(null);\n  const animationRef = useRef<number>();\n  const startTimeRef = useRef<number>(0);\n  const pausedTimeRef = useRef<number>(0);\n  const currentStepRef = useRef<number>(0);\n  const stepStartTimeRef = useRef<number>(0);\n\n  // Calculate total duration including delays\n  const totalDuration = steps.reduce((total, step) => {\n    return total + step.duration + (step.delay || 0);\n  }, 0);\n\n  const applyStepTransform = useCallback(\n    (step: AnimationStep, progress: number = 1) => {\n      if (!elementRef.current) return;\n\n      const element = elementRef.current;\n      const transform = step.transform;\n\n      if (transform) {\n        const transforms: string[] = [];\n\n        if (transform.x !== undefined || transform.y !== undefined) {\n          transforms.push(\n            `translate(${transform.x || 0}px, ${transform.y || 0}px)`\n          );\n        }\n\n        if (transform.scale !== undefined) {\n          transforms.push(`scale(${transform.scale})`);\n        }\n\n        if (transform.rotation !== undefined) {\n          transforms.push(`rotate(${transform.rotation}deg)`);\n        }\n\n        if (transforms.length > 0) {\n          element.style.transform = transforms.join(\" \");\n        }\n\n        if (transform.opacity !== undefined) {\n          element.style.opacity = transform.opacity.toString();\n        }\n      }\n\n      // Apply additional styles\n      if (step.style) {\n        Object.assign(element.style, step.style);\n      }\n    },\n    []\n  );\n\n  const animateStep = useCallback(\n    (stepIndex: number, stepProgress: number) => {\n      const step = steps[stepIndex];\n      if (!step) return;\n\n      // Apply transform based on progress\n      const easedProgress = step.easing\n        ? easeValue(stepProgress, step.easing)\n        : stepProgress;\n\n      // Interpolate between current and target values\n      if (step.transform) {\n        const interpolatedTransform = {\n          x:\n            step.transform.x !== undefined\n              ? step.transform.x * easedProgress\n              : undefined,\n          y:\n            step.transform.y !== undefined\n              ? step.transform.y * easedProgress\n              : undefined,\n          scale:\n            step.transform.scale !== undefined\n              ? 1 + (step.transform.scale - 1) * easedProgress\n              : undefined,\n          rotation:\n            step.transform.rotation !== undefined\n              ? step.transform.rotation * easedProgress\n              : undefined,\n          opacity:\n            step.transform.opacity !== undefined\n              ? step.transform.opacity * easedProgress\n              : undefined,\n        };\n\n        if (elementRef.current) {\n          applyStepTransform({ ...step, transform: interpolatedTransform }, 1);\n        }\n      }\n\n      // Call update callback\n      step.onUpdate?.(easedProgress);\n    },\n    [steps, applyStepTransform]\n  );\n\n  const runAnimation = useCallback(\n    (timestamp: number) => {\n      if (!startTimeRef.current) {\n        startTimeRef.current = timestamp;\n      }\n\n      const elapsed = (timestamp - startTimeRef.current) * speed;\n      const totalElapsed = elapsed + pausedTimeRef.current;\n\n      if (totalElapsed >= totalDuration) {\n        // Animation complete\n        setState((prev) => ({\n          ...prev,\n          isPlaying: false,\n          progress: 1,\n          elapsed: totalDuration,\n        }));\n\n        // Apply final step\n        const finalStep = reverse ? steps[0] : steps[steps.length - 1];\n        applyStepTransform(finalStep, 1);\n        finalStep.onComplete?.();\n\n        if (loop) {\n          // Restart animation\n          startTimeRef.current = 0;\n          pausedTimeRef.current = 0;\n          currentStepRef.current = 0;\n          stepStartTimeRef.current = 0;\n          setState((prev) => ({\n            ...prev,\n            isPlaying: true,\n            currentStep: 0,\n            progress: 0,\n            elapsed: 0,\n          }));\n          animationRef.current = requestAnimationFrame(runAnimation);\n        }\n\n        return;\n      }\n\n      // Find current step\n      let accumulatedTime = 0;\n      let currentStepIndex = 0;\n      let stepElapsed = 0;\n\n      for (let i = 0; i < steps.length; i++) {\n        const step = steps[i];\n        const stepDuration = step.duration + (step.delay || 0);\n\n        if (\n          totalElapsed >= accumulatedTime &&\n          totalElapsed < accumulatedTime + stepDuration\n        ) {\n          currentStepIndex = i;\n          stepElapsed = totalElapsed - accumulatedTime;\n          break;\n        }\n\n        accumulatedTime += stepDuration;\n      }\n\n      // Handle step transitions\n      if (currentStepIndex !== currentStepRef.current) {\n        // Complete previous step\n        const prevStep = steps[currentStepRef.current];\n        prevStep?.onComplete?.();\n\n        // Start new step\n        const newStep = steps[currentStepIndex];\n        newStep?.onStart?.();\n        stepStartTimeRef.current = totalElapsed;\n\n        currentStepRef.current = currentStepIndex;\n      }\n\n      // Calculate step progress\n      const currentStep = steps[currentStepIndex];\n      const stepDelay = currentStep.delay || 0;\n      const stepDuration = currentStep.duration;\n      const stepProgress = Math.max(\n        0,\n        Math.min(1, (stepElapsed - stepDelay) / stepDuration)\n      );\n\n      // Apply animation\n      animateStep(currentStepIndex, stepProgress);\n\n      // Update state\n      const overallProgress = totalElapsed / totalDuration;\n      setState((prev) => ({\n        ...prev,\n        currentStep: currentStepIndex,\n        progress: overallProgress,\n        elapsed: totalElapsed,\n      }));\n\n      animationRef.current = requestAnimationFrame(runAnimation);\n    },\n    [\n      steps,\n      speed,\n      totalDuration,\n      reverse,\n      loop,\n      applyStepTransform,\n      animateStep,\n    ]\n  );\n\n  const play = useCallback(() => {\n    if (state.isPlaying) return;\n\n    setState((prev) => ({\n      ...prev,\n      isPlaying: true,\n      isPaused: false,\n    }));\n\n    startTimeRef.current = 0;\n    animationRef.current = requestAnimationFrame(runAnimation);\n  }, [state.isPlaying, runAnimation]);\n\n  const pause = useCallback(() => {\n    if (!state.isPlaying) return;\n\n    setState((prev) => ({\n      ...prev,\n      isPaused: true,\n    }));\n\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n\n    pausedTimeRef.current = state.elapsed;\n  }, [state.isPlaying, state.elapsed]);\n\n  const stop = useCallback(() => {\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n\n    startTimeRef.current = 0;\n    pausedTimeRef.current = 0;\n    currentStepRef.current = 0;\n    stepStartTimeRef.current = 0;\n\n    setState((prev) => ({\n      ...prev,\n      isPlaying: false,\n      isPaused: false,\n      currentStep: 0,\n      progress: 0,\n      elapsed: 0,\n    }));\n\n    // Reset to initial state\n    if (elementRef.current && steps.length > 0) {\n      applyStepTransform(steps[0], 0);\n    }\n  }, [applyStepTransform, steps]);\n\n  const seek = useCallback(\n    (progress: number) => {\n      const seekTime = progress * totalDuration;\n      pausedTimeRef.current = seekTime;\n\n      setState((prev) => ({\n        ...prev,\n        progress,\n        elapsed: seekTime,\n      }));\n\n      // Find the step at this progress\n      let accumulatedTime = 0;\n      let targetStepIndex = 0;\n\n      for (let i = 0; i < steps.length; i++) {\n        const step = steps[i];\n        const stepDuration = step.duration + (step.delay || 0);\n\n        if (\n          seekTime >= accumulatedTime &&\n          seekTime < accumulatedTime + stepDuration\n        ) {\n          targetStepIndex = i;\n          break;\n        }\n\n        accumulatedTime += stepDuration;\n      }\n\n      currentStepRef.current = targetStepIndex;\n\n      // Apply the state at this progress\n      if (elementRef.current) {\n        const step = steps[targetStepIndex];\n        const stepStartTime = accumulatedTime - (step.delay || 0);\n        const stepProgress = Math.max(\n          0,\n          Math.min(1, (seekTime - stepStartTime) / step.duration)\n        );\n\n        animateStep(targetStepIndex, stepProgress);\n      }\n    },\n    [totalDuration, steps, animateStep]\n  );\n\n  // Auto-play on mount\n  useEffect(() => {\n    if (autoPlay && !paused) {\n      play();\n    }\n\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, [autoPlay, paused, play]);\n\n  // Handle pause state\n  useEffect(() => {\n    if (paused && state.isPlaying) {\n      pause();\n    }\n  }, [paused, state.isPlaying, pause]);\n\n  return {\n    ref: elementRef,\n    state,\n    play,\n    pause,\n    stop,\n    seek,\n    totalDuration,\n  };\n}\n\n// Easing function utilities\nfunction easeValue(progress: number, easing: string): number {\n  // Simple easing function parser\n  const [type, ...params] = easing.split(\"(\");\n  const values = params\n    .join(\"(\")\n    .replace(\")\", \"\")\n    .split(\",\")\n    .map((v) => parseFloat(v.trim()));\n\n  switch (type) {\n    case \"ease-in\":\n      return progress * progress;\n    case \"ease-out\":\n      return progress * (2 - progress);\n    case \"ease-in-out\":\n      return progress < 0.5\n        ? 2 * progress * progress\n        : -1 + (4 - 2 * progress) * progress;\n    case \"cubic-bezier\":\n      return cubicBezier(progress, values[0], values[1], values[2], values[3]);\n    default:\n      return progress;\n  }\n}\n\nfunction cubicBezier(\n  t: number,\n  p0: number,\n  p1: number,\n  p2: number,\n  p3: number\n): number {\n  const u = 1 - t;\n  return 3 * u * u * t * p1 + 3 * u * t * t * p3 + t * t * t;\n}\n\n// Predefined animation sequences\nexport const createFadeInSequence = (\n  duration: number = 500\n): AnimationStep[] => [\n  {\n    id: \"fade-in\",\n    duration,\n    easing: \"ease-out\",\n    transform: { opacity: 1 },\n    onStart: () => undefined,\n    onComplete: () => undefined,\n  },\n];\n\nexport const createSlideInSequence = (\n  direction: \"left\" | \"right\" | \"up\" | \"down\",\n  distance: number = 50,\n  duration: number = 500\n): AnimationStep[] => {\n  const transforms = {\n    left: { x: 0, opacity: 1 },\n    right: { x: 0, opacity: 1 },\n    up: { y: 0, opacity: 1 },\n    down: { y: 0, opacity: 1 },\n  };\n\n  return [\n    {\n      id: `slide-in-${direction}`,\n      duration,\n      easing: \"ease-out\",\n      transform: transforms[direction],\n    },\n  ];\n};\n\nexport const createScaleInSequence = (\n  scale: number = 1.2,\n  duration: number = 500\n): AnimationStep[] => [\n  {\n    id: \"scale-in\",\n    duration,\n    easing: \"ease-out\",\n    transform: { scale, opacity: 1 },\n  },\n];\n\nexport const createComplexSequence = (config: {\n  fade?: boolean;\n  slide?: { direction: \"left\" | \"right\" | \"up\" | \"down\"; distance?: number };\n  scale?: number;\n  duration?: number;\n}): AnimationStep[] => {\n  const { fade = true, slide, scale, duration = 500 } = config;\n\n  const steps: AnimationStep[] = [];\n  const stepDuration = duration / (1 + (slide ? 1 : 0) + (scale ? 1 : 0));\n\n  if (fade) {\n    steps.push({\n      id: \"fade-in\",\n      duration: stepDuration,\n      easing: \"ease-out\",\n      transform: { opacity: 1 },\n    });\n  }\n\n  if (slide) {\n    const { direction, distance = 50 } = slide;\n    const transform = {\n      left: { x: 0, opacity: 1 },\n      right: { x: 0, opacity: 1 },\n      up: { y: 0, opacity: 1 },\n      down: { y: 0, opacity: 1 },\n    }[direction];\n\n    steps.push({\n      id: `slide-in-${direction}`,\n      duration: stepDuration,\n      delay: fade ? stepDuration * 0.5 : 0,\n      easing: \"ease-out\",\n      transform,\n    });\n  }\n\n  if (scale) {\n    steps.push({\n      id: \"scale-in\",\n      duration: stepDuration,\n      delay: fade || slide ? stepDuration * 0.7 : 0,\n      easing: \"ease-out\",\n      transform: { scale, opacity: 1 },\n    });\n  }\n\n  return steps;\n};\n", "import React from 'react';\nimport { ChartDataPoint, ChartSeries, ChartAnimation } from '../../components/charts/types';\nimport { InterpolationUtils, interpolate } from './interpolation';\n\nexport interface ChartAnimationConfig extends ChartAnimation {\n  stagger?: number;\n  direction?: 'up' | 'down' | 'left' | 'right' | 'center';\n  easing?: keyof typeof easingFunctions;\n  delay?: number;\n}\n\nexport interface ChartTransition {\n  from: ChartSeries[];\n  to: ChartSeries[];\n  duration: number;\n  easing: keyof typeof easingFunctions;\n  stagger: number;\n}\n\nconst easingFunctions = {\n  linear: (t: number) => t,\n  easeInQuad: (t: number) => t * t,\n  easeOutQuad: (t: number) => t * (2 - t),\n  easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n  easeInCubic: (t: number) => t * t * t,\n  easeOutCubic: (t: number) => --t * t * t + 1,\n  easeInOutCubic: (t: number) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),\n  easeInQuart: (t: number) => t * t * t * t,\n  easeOutQuart: (t: number) => 1 - --t * t * t * t,\n  easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t),\n  easeInSine: (t: number) => 1 - Math.cos((t * Math.PI) / 2),\n  easeOutSine: (t: number) => Math.sin((t * Math.PI) / 2),\n  easeInOutSine: (t: number) => -(Math.cos(Math.PI * t) - 1) / 2,\n  easeInExpo: (t: number) => (t === 0 ? 0 : Math.pow(2, 10 * t - 10)),\n  easeOutExpo: (t: number) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),\n  easeInOutExpo: (t: number) => {\n    if (t === 0) return 0;\n    if (t === 1) return 1;\n    return t < 0.5\n      ? Math.pow(2, 20 * t - 10) / 2\n      : (2 - Math.pow(2, -20 * t + 10)) / 2;\n  },\n  easeInBack: (t: number) => {\n    const c1 = 1.70158;\n    const c3 = c1 + 1;\n    return c3 * t * t * t - c1 * t * t;\n  },\n  easeOutBack: (t: number) => {\n    const c1 = 1.70158;\n    const c3 = c1 + 1;\n    return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n  },\n  easeInOutBack: (t: number) => {\n    const c1 = 1.70158;\n    const c2 = c1 * 1.525;\n    return t < 0.5\n      ? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2\n      : (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;\n  },\n  easeOutElastic: (t: number) => {\n    const c4 = (2 * Math.PI) / 3;\n    return t === 0\n      ? 0\n      : t === 1\n      ? 1\n      : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;\n  },\n};\n\nexport class ChartAnimationUtils {\n  /**\n   * Animate chart data points with various effects\n   */\n  static animateDataPoints(\n    dataPoints: ChartDataPoint[],\n    config: ChartAnimationConfig,\n    onUpdate?: (points: ChartDataPoint[], progress: number) => void,\n    onComplete?: (points: ChartDataPoint[]) => void\n  ): () => void {\n    const {\n      duration = 1000,\n      stagger = 0,\n      direction = 'up',\n      easing = 'easeOutQuad',\n      delay = 0,\n    } = config;\n\n    const startTime = Date.now() + delay;\n    const easeFn = easingFunctions?.[easing];\n    const animatedPoints = [...dataPoints];\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const rawProgress = Math.min(elapsed / duration, 1);\n      const progress = easeFn(rawProgress);\n\n      // Apply direction-based animation\n      dataPoints.forEach((point, index) => {\n        const staggerDelay = index * stagger;\n        const pointProgress = Math.max(0, Math.min(1, (elapsed - staggerDelay) / duration));\n        const easedPointProgress = easeFn(pointProgress);\n\n        const animatedPoint = this.applyDirectionalAnimation(\n          point,\n          easedPointProgress,\n          direction\n        );\n\n        if (animatedPoints) {\n          animatedPoints[index] = animatedPoint;\n        }\n      });\n\n      onUpdate?.(animatedPoints, progress);\n\n      if (rawProgress < 1) {\n        requestAnimationFrame(animate);\n      } else {\n        onComplete?.(animatedPoints);\n      }\n    };\n\n    const timeoutId = setTimeout(() => {\n      requestAnimationFrame(animate);\n    }, delay);\n\n    return () => clearTimeout(timeoutId);\n  }\n\n  /**\n   * Animate entire chart series\n   */\n  static animateSeries(\n    series: ChartSeries[],\n    config: ChartAnimationConfig,\n    onUpdate?: (series: ChartSeries[], progress: number) => void,\n    onComplete?: (series: ChartSeries[]) => void\n  ): () => void {\n    const {\n      duration = 1000,\n      stagger = 100,\n      direction = 'up',\n      easing = 'easeOutQuad',\n      delay = 0,\n    } = config;\n\n    const startTime = Date.now() + delay;\n    const easeFn = easingFunctions?.[easing];\n    const animatedSeries = series.map((s: any) => ({ ...s, data: [...s.data] }));\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const rawProgress = Math.min(elapsed / duration, 1);\n      const progress = easeFn(rawProgress);\n\n      series.forEach((seriesItem, seriesIndex) => {\n        const seriesDelay = seriesIndex * stagger;\n        const seriesProgress = Math.max(0, Math.min(1, (elapsed - seriesDelay) / duration));\n        const easedSeriesProgress = easeFn(seriesProgress);\n\n        seriesItem.data?.forEach((point, pointIndex) => {\n          const animatedPoint = this.applyDirectionalAnimation(\n            point,\n            easedSeriesProgress,\n            direction\n          );\n\n          if (animatedSeries[seriesIndex].data) {\n            animatedSeries[seriesIndex].data[pointIndex] = animatedPoint;\n          }\n        });\n      });\n\n      onUpdate?.(animatedSeries, progress);\n\n      if (rawProgress < 1) {\n        requestAnimationFrame(animate);\n      } else {\n        onComplete?.(animatedSeries);\n      }\n    };\n\n    const timeoutId = setTimeout(() => {\n      requestAnimationFrame(animate);\n    }, delay);\n\n    return () => clearTimeout(timeoutId);\n  }\n\n  /**\n   * Create morphing animation between two data sets\n   */\n  static createMorphingAnimation(\n    fromSeries: ChartSeries[],\n    toSeries: ChartSeries[],\n    config: ChartAnimationConfig,\n    onUpdate?: (series: ChartSeries[], progress: number) => void,\n    onComplete?: (series: ChartSeries[]) => void\n  ): () => void {\n    const {\n      duration = 1000,\n      easing = 'easeInOutQuad',\n      delay = 0,\n    } = config;\n\n    const startTime = Date.now() + delay;\n    const easeFn = easingFunctions?.[easing];\n    const morphedSeries = toSeries.map((s: any) => ({ ...s, data: [...s.data] }));\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const rawProgress = Math.min(elapsed / duration, 1);\n      const progress = easeFn(rawProgress);\n\n      toSeries.forEach((toSeriesItem, seriesIndex) => {\n        const fromSeriesItem = fromSeries?.[seriesIndex];\n        if (!fromSeriesItem) return;\n\n        toSeriesItem.data?.forEach((toPoint, pointIndex) => {\n          const fromPoint = fromSeriesItem.data?.[pointIndex];\n          if (!fromPoint) return;\n\n          const morphedPoint = {\n            ...toPoint,\n            x: InterpolationUtils.lerp(fromPoint.x as number, toPoint.x as number, progress),\n            y: InterpolationUtils.lerp(fromPoint.y as number, toPoint.y as number, progress),\n          };\n\n          if (morphedSeries[seriesIndex].data) {\n            morphedSeries[seriesIndex].data[pointIndex] = morphedPoint;\n          }\n        });\n      });\n\n      onUpdate?.(morphedSeries, progress);\n\n      if (rawProgress < 1) {\n        requestAnimationFrame(animate);\n      } else {\n        onComplete?.(morphedSeries);\n      }\n    };\n\n    const timeoutId = setTimeout(() => {\n      requestAnimationFrame(animate);\n    }, delay);\n\n    return () => clearTimeout(timeoutId);\n  }\n\n  /**\n   * Create entrance animation for chart elements\n   */\n  static createEntranceAnimation(\n    series: ChartSeries[],\n    effect: 'fadeIn' | 'slideIn' | 'scaleIn' | 'bounceIn' | 'elasticIn',\n    config: ChartAnimationConfig,\n    onUpdate?: (series: ChartSeries[], progress: number) => void,\n    onComplete?: (series: ChartSeries[]) => void\n  ): () => void {\n    const {\n      duration = 1000,\n      stagger = 100,\n      direction = 'up',\n      delay = 0,\n    } = config;\n\n    const effects = {\n      fadeIn: { opacity: 0 },\n      slideIn: this.getDirectionalTransform(direction, 50),\n      scaleIn: { scale: 0 },\n      bounceIn: { scale: 0.3 },\n      elasticIn: { scale: 0, rotation: -180 },\n    };\n\n    const effectConfig = effects?.[effect];\n    const animatedSeries = series.map((s: any) => ({ ...s, data: [...s.data] }));\n\n    return this.animateSeries(\n      series,\n      { ...config, duration, stagger, delay },\n      (updatedSeries, progress) => {\n        updatedSeries.forEach((seriesItem, seriesIndex) => {\n          seriesItem.data?.forEach((point, pointIndex) => {\n            if (animatedSeries[seriesIndex].data) {\n              animatedSeries[seriesIndex].data[pointIndex] = {\n                ...point,\n                ...this.interpolatePointProperties(\n                  effectConfig,\n                  point,\n                  progress\n                ),\n              };\n            }\n          });\n        });\n\n        onUpdate?.(animatedSeries, progress);\n      },\n      onComplete\n    );\n  }\n\n  /**\n   * Create exit animation for chart elements\n   */\n  static createExitAnimation(\n    series: ChartSeries[],\n    effect: 'fadeOut' | 'slideOut' | 'scaleOut' | 'bounceOut',\n    config: ChartAnimationConfig,\n    onUpdate?: (series: ChartSeries[], progress: number) => void,\n    onComplete?: (series: ChartSeries[]) => void\n  ): () => void {\n    const {\n      duration = 500,\n      stagger = 50,\n      direction = 'down',\n      delay = 0,\n    } = config;\n\n    const effects = {\n      fadeOut: { opacity: 1 },\n      slideOut: this.getDirectionalTransform(direction, 0),\n      scaleOut: { scale: 1 },\n      bounceOut: { scale: 1 },\n    };\n\n    const effectConfig = effects?.[effect];\n    const animatedSeries = series.map((s: any) => ({ ...s, data: [...s.data] }));\n\n    return this.animateSeries(\n      series,\n      { ...config, duration, stagger, delay },\n      (updatedSeries, progress) => {\n        const exitProgress = 1 - progress;\n\n        updatedSeries.forEach((seriesItem, seriesIndex) => {\n          seriesItem.data?.forEach((point, pointIndex) => {\n            if (animatedSeries[seriesIndex].data) {\n              animatedSeries[seriesIndex].data[pointIndex] = {\n                ...point,\n                ...this.interpolatePointProperties(\n                  effectConfig,\n                  point,\n                  exitProgress\n                ),\n              };\n            }\n          });\n        });\n\n        onUpdate?.(animatedSeries, progress);\n      },\n      onComplete\n    );\n  }\n\n  private static applyDirectionalAnimation(\n    point: ChartDataPoint,\n    progress: number,\n    direction: string\n  ): ChartDataPoint {\n    const transform = this.getDirectionalTransform(direction, 1 - progress);\n    return {\n      ...point,\n      ...this.interpolatePointProperties(transform, point, progress),\n    };\n  }\n\n  private static getDirectionalTransform(direction: string, distance: number) {\n    switch (direction) {\n      case 'up':\n        return { y: distance * 50 };\n      case 'down':\n        return { y: -distance * 50 };\n      case 'left':\n        return { x: distance * 50 };\n      case 'right':\n        return { x: -distance * 50 };\n      case 'center':\n        return { scale: distance };\n      default:\n        return { y: distance * 50 };\n    }\n  }\n\n  private static interpolatePointProperties(\n    transform: any,\n    point: ChartDataPoint,\n    progress: number\n  ): Partial<ChartDataPoint> {\n    const result: any = {};\n\n    if (transform.x !== undefined) {\n      result.x = (point.x as number) + transform.x * (1 - progress);\n    }\n\n    if (transform.y !== undefined) {\n      result.y = (point.y as number) + transform.y * (1 - progress);\n    }\n\n    if (transform.scale !== undefined) {\n      // Scale would typically be handled by CSS transform\n      result.scale = InterpolationUtils.lerp(transform.scale, 1, progress);\n    }\n\n    if (transform.opacity !== undefined) {\n      result.opacity = InterpolationUtils.lerp(transform.opacity, 1, progress);\n    }\n\n    if (transform.rotation !== undefined) {\n      result.rotation = InterpolationUtils.lerp(transform.rotation, 0, progress);\n    }\n\n    return result;\n  }\n\n  /**\n   * Create a smooth transition between chart states\n   */\n  static createChartTransition(\n    transition: ChartTransition,\n    onUpdate?: (series: ChartSeries[], progress: number) => void,\n    onComplete?: (series: ChartSeries[]) => void\n  ): () => void {\n    const { from, to, duration, easing, stagger } = transition;\n    const easeFn = easingFunctions?.[easing];\n\n    const startTime = Date.now();\n    const animatedSeries = to.map((s: any) => ({ ...s, data: [...s.data] }));\n\n    const animate = () => {\n      const elapsed = Date.now() - startTime;\n      const rawProgress = Math.min(elapsed / duration, 1);\n      const progress = easeFn(rawProgress);\n\n      to.forEach((toSeriesItem, seriesIndex) => {\n        const fromSeriesItem = from?.[seriesIndex];\n        if (!fromSeriesItem) return;\n\n        const seriesDelay = seriesIndex * stagger;\n        const seriesProgress = Math.max(0, Math.min(1,\n          (elapsed - seriesDelay) / duration\n        ));\n        const easedSeriesProgress = easeFn(seriesProgress);\n\n        toSeriesItem.data?.forEach((toPoint, pointIndex) => {\n          const fromPoint = fromSeriesItem.data?.[pointIndex];\n          if (!fromPoint) return;\n\n          if (animatedSeries[seriesIndex].data) {\n            animatedSeries[seriesIndex].data[pointIndex] = {\n              ...toPoint,\n              x: InterpolationUtils.lerp(fromPoint.x as number, toPoint.x as number, easedSeriesProgress),\n              y: InterpolationUtils.lerp(fromPoint.y as number, toPoint.y as number, easedSeriesProgress),\n            };\n          }\n        });\n      });\n\n      onUpdate?.(animatedSeries, progress);\n\n      if (rawProgress < 1) {\n        requestAnimationFrame(animate);\n      } else {\n        onComplete?.(animatedSeries);\n      }\n    };\n\n    const animationId = requestAnimationFrame(animate);\n\n    return () => cancelAnimationFrame(animationId);\n  }\n}\n\n// Predefined animation presets\nexport const chartAnimationPresets = {\n  gentleFadeIn: {\n    duration: 800,\n    easing: 'easeOutQuad' as const,\n    stagger: 50,\n    direction: 'up' as const,\n  },\n\n  dramaticEntrance: {\n    duration: 1200,\n    easing: 'easeOutBack' as const,\n    stagger: 100,\n    direction: 'center' as const,\n  },\n\n  smoothSlideIn: {\n    duration: 600,\n    easing: 'easeOutCubic' as const,\n    stagger: 75,\n    direction: 'left' as const,\n  },\n\n  bouncyScale: {\n    duration: 1000,\n    easing: 'easeOutElastic' as const,\n    stagger: 150,\n    direction: 'center' as const,\n  },\n\n  subtleMorph: {\n    duration: 500,\n    easing: 'easeInOutQuad' as const,\n    stagger: 0,\n    direction: 'up' as const,\n  },\n};\n\n// Utility functions for common chart animations\nexport const animateChart = {\n  fadeIn: (\n    series: ChartSeries[],\n    config?: Partial<ChartAnimationConfig>,\n    callbacks?: { onUpdate?: (series: ChartSeries[], progress: number) => void; onComplete?: (series: ChartSeries[]) => void }\n  ) => ChartAnimationUtils.createEntranceAnimation(series, 'fadeIn', { ...chartAnimationPresets.gentleFadeIn, ...config }, callbacks?.onUpdate, callbacks?.onComplete),\n\n  slideIn: (\n    series: ChartSeries[],\n    direction: 'up' | 'down' | 'left' | 'right' = 'up',\n    config?: Partial<ChartAnimationConfig>,\n    callbacks?: { onUpdate?: (series: ChartSeries[], progress: number) => void; onComplete?: (series: ChartSeries[]) => void }\n  ) => ChartAnimationUtils.createEntranceAnimation(series, 'slideIn', { ...chartAnimationPresets.smoothSlideIn, direction, ...config }, callbacks?.onUpdate, callbacks?.onComplete),\n\n  scaleIn: (\n    series: ChartSeries[],\n    config?: Partial<ChartAnimationConfig>,\n    callbacks?: { onUpdate?: (series: ChartSeries[], progress: number) => void; onComplete?: (series: ChartSeries[]) => void }\n  ) => ChartAnimationUtils.createEntranceAnimation(series, 'scaleIn', { ...chartAnimationPresets.bouncyScale, ...config }, callbacks?.onUpdate, callbacks?.onComplete),\n\n  morph: (\n    from: ChartSeries[],\n    to: ChartSeries[],\n    config?: Partial<ChartAnimationConfig>,\n    callbacks?: { onUpdate?: (series: ChartSeries[], progress: number) => void; onComplete?: (series: ChartSeries[]) => void }\n  ) => ChartAnimationUtils.createMorphingAnimation(from, to, { ...chartAnimationPresets.subtleMorph, ...config }, callbacks?.onUpdate, callbacks?.onComplete),\n\n  transition: (\n    transition: ChartTransition,\n    callbacks?: { onUpdate?: (series: ChartSeries[], progress: number) => void; onComplete?: (series: ChartSeries[]) => void }\n  ) => ChartAnimationUtils.createChartTransition(transition, callbacks?.onUpdate, callbacks?.onComplete),\n};\n", "import React from \"react\";\nimport { useRef, useCallback, useEffect, useState } from \"react\";\n\nexport interface OrchestratedAnimationStep {\n  id: string;\n  duration: number;\n  delay?: number;\n  easing?: string;\n  transform?: {\n    x?: number;\n    y?: number;\n    scale?: number;\n    rotation?: number;\n    opacity?: number;\n  };\n  style?: React.CSSProperties;\n  onStart?: () => void;\n  onComplete?: () => void;\n  onUpdate?: (progress: number) => void;\n}\n\nexport interface OrchestrationConfig {\n  autoPlay?: boolean;\n  loop?: boolean;\n  reverse?: boolean;\n  speed?: number;\n  paused?: boolean;\n  parallel?: boolean; // Run steps in parallel instead of sequence\n}\n\nexport interface OrchestrationState {\n  isPlaying: boolean;\n  isPaused: boolean;\n  currentStep: number;\n  totalSteps: number;\n  progress: number;\n  elapsed: number;\n  totalDuration: number;\n}\n\nexport function useAnimationSequence(\n  steps: OrchestratedAnimationStep[],\n  config: OrchestrationConfig = {}\n) {\n  const {\n    autoPlay = false,\n    loop = false,\n    reverse = false,\n    speed = 1,\n    paused = false,\n    parallel = false,\n  } = config;\n\n  const [state, setState] = useState<OrchestrationState>({\n    isPlaying: false,\n    isPaused: false,\n    currentStep: 0,\n    totalSteps: steps.length,\n    progress: 0,\n    elapsed: 0,\n    totalDuration: parallel\n      ? Math.max(...steps.map((step) => step.duration + (step.delay || 0)))\n      : steps.reduce(\n          (total, step) => total + step.duration + (step.delay || 0),\n          0\n        ),\n  });\n\n  const elementRef = useRef<HTMLElement>(null);\n  const animationRef = useRef<number>();\n  const startTimeRef = useRef<number>(0);\n  const stepStartTimesRef = useRef<number[]>([]);\n  const completedStepsRef = useRef<Set<number>>(new Set());\n\n  // Calculate total duration\n  const totalDuration = parallel\n    ? Math.max(...steps.map((step) => step.duration + (step.delay || 0)))\n    : steps.reduce(\n        (total, step) => total + step.duration + (step.delay || 0),\n        0\n      );\n\n  const applyStepTransform = useCallback(\n    (step: OrchestratedAnimationStep, progress: number = 1) => {\n      if (!elementRef.current) return;\n\n      const element = elementRef.current;\n      const transform = step.transform;\n\n      if (transform) {\n        const transforms: string[] = [];\n\n        if (transform.x !== undefined || transform.y !== undefined) {\n          transforms.push(\n            `translate(${transform.x || 0}px, ${transform.y || 0}px)`\n          );\n        }\n\n        if (transform.scale !== undefined) {\n          transforms.push(`scale(${transform.scale})`);\n        }\n\n        if (transform.rotation !== undefined) {\n          transforms.push(`rotate(${transform.rotation}deg)`);\n        }\n\n        if (transforms.length > 0) {\n          element.style.transform = transforms.join(\" \");\n        }\n\n        if (transform.opacity !== undefined) {\n          element.style.opacity = transform.opacity.toString();\n        }\n      }\n\n      // Apply additional styles\n      if (step.style) {\n        Object.assign(element.style, step.style);\n      }\n    },\n    []\n  );\n\n  const animateStep = useCallback(\n    (stepIndex: number, stepProgress: number) => {\n      const step = steps[stepIndex];\n      if (!step) return;\n\n      // Apply transform based on progress\n      const easedProgress = step.easing\n        ? easeValue(stepProgress, step.easing)\n        : stepProgress;\n\n      // Interpolate between current and target values\n      if (step.transform) {\n        const interpolatedTransform = {\n          x:\n            step.transform.x !== undefined\n              ? step.transform.x * easedProgress\n              : undefined,\n          y:\n            step.transform.y !== undefined\n              ? step.transform.y * easedProgress\n              : undefined,\n          scale:\n            step.transform.scale !== undefined\n              ? 1 + (step.transform.scale - 1) * easedProgress\n              : undefined,\n          rotation:\n            step.transform.rotation !== undefined\n              ? step.transform.rotation * easedProgress\n              : undefined,\n          opacity:\n            step.transform.opacity !== undefined\n              ? step.transform.opacity * easedProgress\n              : undefined,\n        };\n\n        if (elementRef.current) {\n          applyStepTransform({ ...step, transform: interpolatedTransform }, 1);\n        }\n      }\n\n      // Call update callback\n      step.onUpdate?.(easedProgress);\n    },\n    [steps, applyStepTransform]\n  );\n\n  const runAnimation = useCallback(\n    (timestamp: number) => {\n      if (!startTimeRef.current) {\n        startTimeRef.current = timestamp;\n        stepStartTimesRef.current = new Array(steps.length).fill(0);\n        completedStepsRef.current.clear();\n      }\n\n      const elapsed = (timestamp - startTimeRef.current) * speed;\n\n      if (parallel) {\n        // Parallel execution\n        let allCompleted = true;\n        let maxProgress = 0;\n\n        steps.forEach((step, index) => {\n          const stepDelay = step.delay || 0;\n          const stepStartTime =\n            stepStartTimesRef.current[index] ||\n            startTimeRef.current + stepDelay;\n\n          if (elapsed >= stepDelay) {\n            if (stepStartTimesRef.current[index] === 0) {\n              stepStartTimesRef.current[index] = timestamp;\n              step.onStart?.();\n            }\n\n            const stepElapsed = (timestamp - stepStartTime) * speed;\n            const stepProgress = Math.min(stepElapsed / step.duration, 1);\n\n            animateStep(index, stepProgress);\n            maxProgress = Math.max(maxProgress, stepProgress);\n\n            if (stepProgress >= 1 && !completedStepsRef.current.has(index)) {\n              completedStepsRef.current.add(index);\n              step.onComplete?.();\n            }\n\n            if (stepProgress < 1) {\n              allCompleted = false;\n            }\n          } else {\n            allCompleted = false;\n          }\n        });\n\n        setState((prev) => ({\n          ...prev,\n          progress: maxProgress,\n          elapsed,\n        }));\n\n        if (allCompleted) {\n          setState((prev) => ({ ...prev, isPlaying: false, progress: 1 }));\n\n          if (loop) {\n            // Restart animation\n            startTimeRef.current = 0;\n            stepStartTimesRef.current = new Array(steps.length).fill(0);\n            completedStepsRef.current.clear();\n            setState((prev) => ({\n              ...prev,\n              isPlaying: true,\n              currentStep: 0,\n              progress: 0,\n              elapsed: 0,\n            }));\n            animationRef.current = requestAnimationFrame(runAnimation);\n          }\n          return;\n        }\n      } else {\n        // Sequential execution\n        let accumulatedTime = 0;\n        let currentStepIndex = 0;\n        let stepElapsed = 0;\n\n        for (let i = 0; i < steps.length; i++) {\n          const step = steps[i];\n          const stepDuration = step.duration + (step.delay || 0);\n\n          if (\n            elapsed >= accumulatedTime &&\n            elapsed < accumulatedTime + stepDuration\n          ) {\n            currentStepIndex = i;\n            stepElapsed = elapsed - accumulatedTime;\n            break;\n          }\n\n          accumulatedTime += stepDuration;\n        }\n\n        // Handle step transitions\n        if (currentStepIndex !== state.currentStep) {\n          // Complete previous step\n          const prevStep = steps[state.currentStep];\n          prevStep?.onComplete?.();\n\n          // Start new step\n          const newStep = steps[currentStepIndex];\n          newStep?.onStart?.();\n        }\n\n        // Calculate step progress\n        const currentStep = steps[currentStepIndex];\n        const stepDelay = currentStep.delay || 0;\n        const stepDuration = currentStep.duration;\n        const stepProgress = Math.max(\n          0,\n          Math.min(1, (stepElapsed - stepDelay) / stepDuration)\n        );\n\n        // Apply animation\n        animateStep(currentStepIndex, stepProgress);\n\n        // Update state\n        const overallProgress = elapsed / totalDuration;\n        setState((prev) => ({\n          ...prev,\n          currentStep: currentStepIndex,\n          progress: overallProgress,\n          elapsed,\n        }));\n\n        if (elapsed >= totalDuration) {\n          // Animation complete\n          setState((prev) => ({\n            ...prev,\n            isPlaying: false,\n            progress: 1,\n          }));\n\n          // Complete final step\n          const finalStep = steps[steps.length - 1];\n          finalStep.onComplete?.();\n\n          if (loop) {\n            // Restart animation\n            startTimeRef.current = 0;\n            stepStartTimesRef.current = new Array(steps.length).fill(0);\n            completedStepsRef.current.clear();\n            setState((prev) => ({\n              ...prev,\n              isPlaying: true,\n              currentStep: 0,\n              progress: 0,\n              elapsed: 0,\n            }));\n            animationRef.current = requestAnimationFrame(runAnimation);\n          }\n\n          return;\n        }\n      }\n\n      animationRef.current = requestAnimationFrame(runAnimation);\n    },\n    [\n      steps,\n      speed,\n      totalDuration,\n      reverse,\n      loop,\n      parallel,\n      applyStepTransform,\n      animateStep,\n      state.currentStep,\n    ]\n  );\n\n  const play = useCallback(() => {\n    if (state.isPlaying) return;\n\n    setState((prev) => ({\n      ...prev,\n      isPlaying: true,\n      isPaused: false,\n    }));\n\n    startTimeRef.current = 0;\n    stepStartTimesRef.current = new Array(steps.length).fill(0);\n    completedStepsRef.current = new Set();\n    animationRef.current = requestAnimationFrame(runAnimation);\n  }, [state.isPlaying, runAnimation]);\n\n  const pause = useCallback(() => {\n    if (!state.isPlaying) return;\n\n    setState((prev) => ({\n      ...prev,\n      isPaused: true,\n    }));\n\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n  }, [state.isPlaying]);\n\n  const stop = useCallback(() => {\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n\n    startTimeRef.current = 0;\n    stepStartTimesRef.current = new Array(steps.length).fill(0);\n    completedStepsRef.current = new Set();\n\n    setState((prev) => ({\n      ...prev,\n      isPlaying: false,\n      isPaused: false,\n      currentStep: 0,\n      progress: 0,\n      elapsed: 0,\n    }));\n\n    // Reset to initial state\n    if (elementRef.current && steps.length > 0) {\n      applyStepTransform(steps[0], 0);\n    }\n  }, [applyStepTransform, steps]);\n\n  const seek = useCallback(\n    (progress: number) => {\n      const seekTime = progress * totalDuration;\n      startTimeRef.current = Date.now() - seekTime / speed;\n\n      setState((prev) => ({\n        ...prev,\n        progress,\n        elapsed: seekTime,\n      }));\n\n      // This is a simplified seek implementation\n      // In a full implementation, you'd need to calculate which step and at what progress\n    },\n    [totalDuration, speed]\n  );\n\n  // Auto-play on mount\n  useEffect(() => {\n    if (autoPlay && !paused) {\n      play();\n    }\n\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, [autoPlay, paused, play]);\n\n  // Handle pause state\n  useEffect(() => {\n    if (paused && state.isPlaying) {\n      pause();\n    }\n  }, [paused, state.isPlaying, pause]);\n\n  return {\n    ref: elementRef,\n    state,\n    play,\n    pause,\n    stop,\n    seek,\n    totalDuration,\n  };\n}\n\n// Easing function utilities\nfunction easeValue(progress: number, easing: string): number {\n  // Simple easing function parser\n  const [type, ...params] = easing.split(\"(\");\n  const values = params\n    .join(\"(\")\n    .replace(\")\", \"\")\n    .split(\",\")\n    .map((v) => parseFloat(v.trim()));\n\n  switch (type) {\n    case \"ease-in\":\n      return progress * progress;\n    case \"ease-out\":\n      return progress * (2 - progress);\n    case \"ease-in-out\":\n      return progress < 0.5\n        ? 2 * progress * progress\n        : -1 + (4 - 2 * progress) * progress;\n    case \"cubic-bezier\":\n      return cubicBezier(progress, values[0], values[1], values[2], values[3]);\n    default:\n      return progress;\n  }\n}\n\nfunction cubicBezier(\n  t: number,\n  p0: number,\n  p1: number,\n  p2: number,\n  p3: number\n): number {\n  const u = 1 - t;\n  const tt = t * t;\n  const uu = u * u;\n  const uuu = uu * u;\n  const ttt = tt * t;\n\n  return 3 * uu * t * p1 + 3 * u * tt * p2 + ttt;\n}\n\n// Predefined orchestration sequences\nexport const orchestrationPresets = {\n  staggeredFadeIn: [\n    { id: \"step1\", duration: 300, delay: 0, transform: { opacity: 1 } },\n    { id: \"step2\", duration: 300, delay: 100, transform: { opacity: 1 } },\n    { id: \"step3\", duration: 300, delay: 200, transform: { opacity: 1 } },\n  ],\n\n  cascadingSlideIn: [\n    {\n      id: \"slide1\",\n      duration: 400,\n      delay: 0,\n      transform: { x: 0 },\n      easing: \"ease-out\",\n    },\n    {\n      id: \"slide2\",\n      duration: 400,\n      delay: 150,\n      transform: { x: 0 },\n      easing: \"ease-out\",\n    },\n    {\n      id: \"slide3\",\n      duration: 400,\n      delay: 300,\n      transform: { x: 0 },\n      easing: \"ease-out\",\n    },\n  ],\n\n  parallelScaleIn: [\n    {\n      id: \"scale1\",\n      duration: 500,\n      delay: 0,\n      transform: { scale: 1 },\n      easing: \"ease-out\",\n    },\n    {\n      id: \"scale2\",\n      duration: 500,\n      delay: 0,\n      transform: { scale: 1 },\n      easing: \"ease-out\",\n    },\n    {\n      id: \"scale3\",\n      duration: 500,\n      delay: 0,\n      transform: { scale: 1 },\n      easing: \"ease-out\",\n    },\n  ],\n\n  complexOrchestration: [\n    { id: \"initial\", duration: 200, transform: { opacity: 1, scale: 0.8 } },\n    {\n      id: \"grow\",\n      duration: 300,\n      delay: 100,\n      transform: { scale: 1.1 },\n      easing: \"ease-out\",\n    },\n    {\n      id: \"settle\",\n      duration: 200,\n      delay: 50,\n      transform: { scale: 1 },\n      easing: \"ease-in-out\",\n    },\n    {\n      id: \"slide\",\n      duration: 400,\n      delay: 0,\n      transform: { x: 0 },\n      easing: \"ease-out\",\n    },\n  ],\n};\n\n// Utility functions for creating complex orchestrations\nexport const createOrchestration = {\n  fromSteps: (\n    steps: OrchestratedAnimationStep[],\n    config?: OrchestrationConfig\n  ) => ({\n    steps,\n    config: { ...config },\n  }),\n\n  staggered: (\n    baseStep: Omit<OrchestratedAnimationStep, \"id\" | \"delay\">,\n    count: number,\n    staggerDelay: number\n  ): OrchestratedAnimationStep[] => {\n    return Array.from({ length: count }, (_, i) => ({\n      ...baseStep,\n      id: `step-${i}`,\n      delay: i * staggerDelay,\n    }));\n  },\n\n  parallel: (\n    steps: Omit<OrchestratedAnimationStep, \"id\">[]\n  ): OrchestratedAnimationStep[] => {\n    return steps.map((step, i) => ({\n      ...step,\n      id: `parallel-${i}`,\n      delay: step.delay || 0,\n    }));\n  },\n\n  sequence: (\n    steps: Omit<OrchestratedAnimationStep, \"id\">[]\n  ): OrchestratedAnimationStep[] => {\n    let accumulatedDelay = 0;\n    return steps.map((step, i) => {\n      const result = {\n        ...step,\n        id: `sequence-${i}`,\n        delay: accumulatedDelay,\n      };\n      accumulatedDelay += step.duration + (step.delay || 0);\n      return result;\n    });\n  },\n};\n", "// Accessible animation utilities\nimport { safeMatchMedia } from \"../utils/env\";\n\nexport const prefersReducedMotion = () => {\n  return safeMatchMedia(\"(prefers-reduced-motion: reduce)\")?.matches ?? true;\n};\n\nexport interface AccessibleAnimationConfig {\n  duration?: number;\n  [key: string]: unknown;\n}\n\nexport const createAccessibleAnimation = <T extends AccessibleAnimationConfig>(\n  animation: T\n): T => {\n  if (prefersReducedMotion()) {\n    return { ...animation, duration: 0 };\n  }\n  return animation;\n};\n", "import React from 'react';\nimport { useRef, useCallback, useState, useEffect } from 'react';\n\nexport interface SpringConfig {\n  stiffness: number;\n  damping: number;\n  mass: number;\n  precision?: number;\n  velocity?: number;\n}\n\nexport interface SpringValue {\n  current: number;\n  target: number;\n  velocity: number;\n  isAnimating: boolean;\n}\n\nexport interface MultiSpringState {\n  [key: string]: SpringValue;\n}\n\nexport interface MultiSpringOptions {\n  config?: SpringConfig;\n  immediate?: boolean;\n  onRest?: (key: string) => void;\n  onFrame?: (values: Record<string, number>) => void;\n}\n\nconst DEFAULT_CONFIG: SpringConfig = {\n  stiffness: 170,\n  damping: 26,\n  mass: 1,\n  precision: 0.01,\n  velocity: 0,\n};\n\nexport function useMultiSpring(\n  initialValues: Record<string, number>,\n  options: MultiSpringOptions = {}\n) {\n  const {\n    config = DEFAULT_CONFIG,\n    immediate = false,\n    onRest,\n    onFrame,\n  } = options;\n\n  const [values, setValues] = useState<Record<string, number>>(initialValues);\n  const springStateRef = useRef<MultiSpringState>({});\n  const animationRef = useRef<number>();\n  const lastTimeRef = useRef<number>(0);\n\n  // Initialize spring state\n  useEffect(() => {\n    Object.keys(initialValues).forEach((key: any) => {\n      if (!springStateRef.current[key]) {\n        springStateRef.current[key] = {\n          current: initialValues[key],\n          target: initialValues[key],\n          velocity: config.velocity || 0,\n          isAnimating: false,\n        };\n      }\n    });\n  }, [initialValues, config.velocity]);\n\n  // Physics simulation\n  const simulate = useCallback((deltaTime: number) => {\n    let hasAnimatingValues = false;\n    const newValues: Record<string, number> = {};\n\n    Object.keys(springStateRef.current).forEach((key: any) => {\n      const spring = springStateRef.current[key];\n      \n      if (!spring.isAnimating) {\n        newValues[key] = spring.current;\n        return;\n      }\n\n      // Spring physics calculation\n      const displacement = spring.target - spring.current;\n      const springForce = displacement * config.stiffness;\n      const dampingForce = spring.velocity * config.damping;\n      const acceleration = (springForce - dampingForce) / config.mass;\n\n      // Update velocity and position\n      spring.velocity += acceleration * deltaTime;\n      spring.current += spring.velocity * deltaTime;\n\n      // Check if animation should stop\n      const isAtRest = \n        Math.abs(displacement) < (config.precision || 0.01) &&\n        Math.abs(spring.velocity) < (config.precision || 0.01);\n\n      if (isAtRest) {\n        spring.current = spring.target;\n        spring.velocity = 0;\n        spring.isAnimating = false;\n        onRest?.(key);\n      } else {\n        hasAnimatingValues = true;\n      }\n\n      newValues[key] = spring.current;\n    });\n\n    setValues(newValues);\n    onFrame?.(newValues);\n\n    return hasAnimatingValues;\n  }, [config, onRest, onFrame]);\n\n  // Animation loop\n  const animate = useCallback((timestamp: number) => {\n    if (!lastTimeRef.current) {\n      lastTimeRef.current = timestamp;\n    }\n\n    const deltaTime = Math.min((timestamp - lastTimeRef.current) / 1000, 0.016); // Cap at 60fps\n    lastTimeRef.current = timestamp;\n\n    const hasAnimatingValues = simulate(deltaTime);\n\n    if (hasAnimatingValues) {\n      animationRef.current = requestAnimationFrame(animate);\n    } else {\n      animationRef.current = undefined;\n      lastTimeRef.current = 0;\n    }\n  }, [simulate]);\n\n  // Start animation to new targets\n  const start = useCallback((targets: Record<string, number>) => {\n    Object.keys(targets).forEach((key: any) => {\n      const targetValue = targets[key];\n      \n      if (!springStateRef.current[key]) {\n        springStateRef.current[key] = {\n          current: targetValue,\n          target: targetValue,\n          velocity: 0,\n          isAnimating: false,\n        };\n      }\n\n      const spring = springStateRef.current[key];\n      \n      if (immediate) {\n        spring.current = targetValue;\n        spring.target = targetValue;\n        spring.velocity = 0;\n        spring.isAnimating = false;\n      } else {\n        spring.target = targetValue;\n        spring.isAnimating = true;\n      }\n    });\n\n    // Update current values immediately if immediate mode\n    if (immediate) {\n      setValues(targets);\n      onFrame?.(targets);\n    } else {\n      // Start animation if not already running\n      if (!animationRef.current) {\n        animationRef.current = requestAnimationFrame(animate);\n      }\n    }\n  }, [immediate, animate, onFrame]);\n\n  // Stop all animations\n  const stop = useCallback(() => {\n    if (animationRef.current) {\n      cancelAnimationFrame(animationRef.current);\n      animationRef.current = undefined;\n    }\n\n    Object.keys(springStateRef.current).forEach((key: any) => {\n      const spring = springStateRef.current[key];\n      spring.target = spring.current;\n      spring.velocity = 0;\n      spring.isAnimating = false;\n    });\n\n    lastTimeRef.current = 0;\n  }, []);\n\n  // Set immediate value without animation\n  const set = useCallback((newValues: Record<string, number>) => {\n    Object.keys(newValues).forEach((key: any) => {\n      if (!springStateRef.current[key]) {\n        springStateRef.current[key] = {\n          current: newValues[key],\n          target: newValues[key],\n          velocity: 0,\n          isAnimating: false,\n        };\n      } else {\n        const spring = springStateRef.current[key];\n        spring.current = newValues[key];\n        spring.target = newValues[key];\n        spring.velocity = 0;\n        spring.isAnimating = false;\n      }\n    });\n\n    setValues((prev: any) => ({ ...prev, ...newValues }));\n    onFrame?.({ ...values, ...newValues });\n  }, [values, onFrame]);\n\n  // Get current velocity for a key\n  const getVelocity = useCallback((key: string): number => {\n    return springStateRef.current[key]?.velocity || 0;\n  }, []);\n\n  // Check if any values are animating\n  const isAnimating = useCallback((): boolean => {\n    return Object.values(springStateRef.current).some(spring => spring.isAnimating);\n  }, []);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (animationRef.current) {\n        cancelAnimationFrame(animationRef.current);\n      }\n    };\n  }, []);\n\n  return {\n    values,\n    start,\n    stop,\n    set,\n    getVelocity,\n    isAnimating,\n    config,\n  };\n}\n\n// Preset spring configurations\nexport const springPresets = {\n  default: { stiffness: 170, damping: 26, mass: 1 },\n  gentle: { stiffness: 120, damping: 14, mass: 1 },\n  wobbly: { stiffness: 180, damping: 12, mass: 1 },\n  stiff: { stiffness: 210, damping: 20, mass: 1 },\n  slow: { stiffness: 280, damping: 60, mass: 1 },\n  bouncy: { stiffness: 170, damping: 8, mass: 1 },\n};\n\n// Utility hook for single value spring\nexport function useSpring(\n  initialValue: number,\n  config: SpringConfig = DEFAULT_CONFIG\n) {\n  const multiSpring = useMultiSpring({ value: initialValue }, { config });\n\n  const setValue = useCallback((target: number) => {\n    multiSpring.start({ value: target });\n  }, [multiSpring]);\n\n  return {\n    value: multiSpring.values.value,\n    setValue,\n    isAnimating: multiSpring.isAnimating,\n    config: multiSpring.config,\n  };\n}\n", "import React from \"react\";\nimport { detectDevice } from \"./deviceCapabilities\";\n/**\n * Production utilities for AuraGlass components\n * These utilities are optimized for production environments\n */\n\n// === Environment Detection ===\n\nexport const isProduction = (): boolean => {\n  return process.env.NODE_ENV === \"production\";\n};\n\nexport const isDevelopment = (): boolean => {\n  return process.env.NODE_ENV === \"development\";\n};\n\nexport const isTest = (): boolean => {\n  return process.env.NODE_ENV === \"test\";\n};\n\n// === Logging Utilities ===\n\nexport const logger = {\n  error: (message: string, ...args: unknown[]) => {\n    if (isDevelopment()) {\n      globalThis.console?.error(`[AuraGlass Error]: ${message}`, ...args);\n    }\n  },\n\n  warn: (message: string, ...args: unknown[]) => {\n    if (isDevelopment()) {\n      globalThis.console?.warn(`[AuraGlass Warning]: ${message}`, ...args);\n    }\n  },\n\n  info: (message: string, ...args: unknown[]) => {\n    if (isDevelopment()) {\n      globalThis.console?.info(`[AuraGlass Info]: ${message}`, ...args);\n    }\n  },\n\n  debug: (message: string, ...args: unknown[]) => {\n    if (isDevelopment()) {\n      globalThis.console?.debug(`[AuraGlass Debug]: ${message}`, ...args);\n    }\n  },\n};\n\n// === Performance Utilities ===\n\nexport const performance = {\n  measure: (name: string, fn: () => void): number => {\n    if (!isDevelopment()) {\n      fn();\n      return 0;\n    }\n\n    const start = Date.now();\n    fn();\n    const end = Date.now();\n    const duration = end - start;\n\n    logger.debug(`Performance: ${name} took ${duration}ms`);\n    return duration;\n  },\n\n  measureAsync: async (\n    name: string,\n    fn: () => Promise<void>\n  ): Promise<number> => {\n    if (!isDevelopment()) {\n      await fn();\n      return 0;\n    }\n\n    const start = Date.now();\n    await fn();\n    const end = Date.now();\n    const duration = end - start;\n\n    logger.debug(`Performance: ${name} took ${duration}ms`);\n    return duration;\n  },\n};\n\n// === Error Handling ===\n\nexport const safeExecute = <T>(\n  fn: () => T,\n  fallback: T,\n  errorMessage?: string\n): T => {\n  try {\n    return fn();\n  } catch (error) {\n    logger.error(errorMessage || \"Safe execution failed\", error);\n    return fallback;\n  }\n};\n\nexport const safeExecuteAsync = async <T>(\n  fn: () => Promise<T>,\n  fallback: T,\n  errorMessage?: string\n): Promise<T> => {\n  try {\n    return await fn();\n  } catch (error) {\n    logger.error(errorMessage || \"Safe async execution failed\", error);\n    return fallback;\n  }\n};\n\n// === Feature Detection ===\n\nexport const features = {\n  supportsIntersectionObserver: (): boolean => {\n    return typeof IntersectionObserver !== \"undefined\";\n  },\n\n  supportsResizeObserver: (): boolean => {\n    return typeof ResizeObserver !== \"undefined\";\n  },\n\n  supportsBackdropFilter: (): boolean => {\n    if (typeof CSS === \"undefined\") return false;\n    return (\n      CSS.supports(\"backdrop-filter\", \"blur(1px)\") ||\n      CSS.supports(\"-webkit-backdrop-filter\", \"blur(1px)\")\n    );\n  },\n\n  supportsWebGL: (): boolean => {\n    if (typeof window === \"undefined\") return false;\n    // Use cached device detection to avoid creating contexts repeatedly\n    return detectDevice().capabilities.webgl;\n  },\n\n  supportsWebP: (): boolean => {\n    if (typeof CSS === \"undefined\") return false;\n    return CSS.supports(\"image-format\", \"webp\");\n  },\n\n  supportsAVIF: (): boolean => {\n    if (typeof CSS === \"undefined\") return false;\n    return CSS.supports(\"image-format\", \"avif\");\n  },\n\n  supportsContainerQueries: (): boolean => {\n    if (typeof CSS === \"undefined\") return false;\n    return CSS.supports(\"container-type\", \"inline-size\");\n  },\n};\n\n// === Memory Management ===\n\nexport const memory = {\n  cleanup: (refs: React.RefObject<unknown>[]): void => {\n    refs.forEach((ref) => {\n      if (ref.current) {\n        (ref as React.MutableRefObject<unknown | null>).current = null;\n      }\n    });\n  },\n\n  debounce: <T extends (...args: never[]) => void>(\n    func: T,\n    wait: number\n  ): T => {\n    let timeout: NodeJS.Timeout;\n\n    return ((...args: Parameters<T>) => {\n      clearTimeout(timeout);\n      timeout = setTimeout(() => func.apply(null, args), wait);\n    }) as T;\n  },\n\n  throttle: <T extends (...args: never[]) => void>(\n    func: T,\n    limit: number\n  ): T => {\n    let inThrottle: boolean;\n\n    return ((...args: Parameters<T>) => {\n      if (!inThrottle) {\n        func.apply(null, args);\n        inThrottle = true;\n        setTimeout(() => (inThrottle = false), limit);\n      }\n    }) as T;\n  },\n};\n\n// === Validation ===\n\nexport const validate = {\n  isValidHexColor: (color: string): boolean => {\n    return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\n  },\n\n  isValidRgbaColor: (color: string): boolean => {\n    return /^rgba?\\(\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*[\\d.]+)?\\s*\\)$/.test(\n      color\n    );\n  },\n\n  isValidCSSUnit: (value: string): boolean => {\n    return /^-?\\d+(\\.\\d+)?(px|em|rem|%|vh|vw|vmin|vmax|ch|ex)$/.test(value);\n  },\n\n  isValidEmail: (email: string): boolean => {\n    return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n  },\n\n  isValidUrl: (url: string): boolean => {\n    try {\n      new URL(url);\n      return true;\n    } catch {\n      return false;\n    }\n  },\n};\n\n// === Data Utilities ===\n\nexport const data = {\n  generateId: (prefix: string = \"glass\"): string => {\n    return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n  },\n\n  deepClone: <T>(obj: T): T => {\n    if (obj === null || typeof obj !== \"object\") return obj;\n    if (obj instanceof Date) return new Date(obj.getTime()) as unknown as T;\n    if (obj instanceof Array) return obj.map(data.deepClone) as unknown as T;\n    if (typeof obj === \"object\") {\n      const cloned = {} as T;\n      for (const key in obj) {\n        cloned[key] = data.deepClone(obj[key]);\n      }\n      return cloned;\n    }\n    return obj;\n  },\n\n  isEqual: (a: unknown, b: unknown): boolean => {\n    if (a === b) return true;\n    if (a == null || b == null) return false;\n    if (Array.isArray(a) && Array.isArray(b)) {\n      if (a.length !== b.length) return false;\n      return a.every((val, index) => data.isEqual(val, b[index]));\n    }\n    if (typeof a === \"object\" && typeof b === \"object\") {\n      const objectA = a as Record<string, unknown>;\n      const objectB = b as Record<string, unknown>;\n      const keysA = Object.keys(objectA);\n      const keysB = Object.keys(objectB);\n      if (keysA.length !== keysB.length) return false;\n      return keysA.every((key) => data.isEqual(objectA[key], objectB[key]));\n    }\n    return false;\n  },\n\n  omit: <T extends Record<string, unknown>, K extends keyof T>(\n    obj: T,\n    keys: K[]\n  ): Omit<T, K> => {\n    const result = { ...obj };\n    keys.forEach((key) => delete result[key]);\n    return result;\n  },\n\n  pick: <T extends Record<string, unknown>, K extends keyof T>(\n    obj: T,\n    keys: K[]\n  ): Pick<T, K> => {\n    const result = {} as Pick<T, K>;\n    keys.forEach((key) => {\n      if (key in obj) {\n        result[key] = obj[key];\n      }\n    });\n    return result;\n  },\n};\n\n// === CSS Utilities ===\n\nexport const css = {\n  classNames: (...classes: (string | undefined | null | false)[]): string => {\n    return classes.filter(Boolean).join(\" \");\n  },\n\n  mergeStyles: (\n    ...styles: (React.CSSProperties | undefined)[]\n  ): React.CSSProperties => {\n    return styles\n      .filter((style): style is React.CSSProperties => style !== undefined)\n      .reduce(\n        (merged, style) => ({ ...merged, ...style }),\n        {} as React.CSSProperties\n      );\n  },\n\n  pxToRem: (px: number, baseFontSize: number = 16): string => {\n    return `${px / baseFontSize}rem`;\n  },\n\n  hexToRgba: (hex: string, alpha: number): string => {\n    const r = parseInt(hex.slice(1, 3), 16);\n    const g = parseInt(hex.slice(3, 5), 16);\n    const b = parseInt(hex.slice(5, 7), 16);\n    return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n  },\n};\n\n// === Browser Utilities ===\n\nexport const browser = {\n  isChrome: (): boolean => {\n    return (\n      /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)\n    );\n  },\n\n  isFirefox: (): boolean => {\n    return /Firefox/.test(navigator.userAgent);\n  },\n\n  isSafari: (): boolean => {\n    return (\n      /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent)\n    );\n  },\n\n  isEdge: (): boolean => {\n    return /Edg/.test(navigator.userAgent);\n  },\n\n  isMobile: (): boolean => {\n    return /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n      navigator.userAgent\n    );\n  },\n\n  isTouch: (): boolean => {\n    return \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n  },\n\n  getViewportSize: (): { width: number; height: number } => {\n    return {\n      width: window.innerWidth,\n      height: window.innerHeight,\n    };\n  },\n\n  getDevicePixelRatio: (): number => {\n    return window.devicePixelRatio || 1;\n  },\n};\n\n// === Storage Utilities ===\n\nexport const storage = {\n  set: (key: string, value: unknown): void => {\n    safeExecute(\n      () => {\n        localStorage.setItem(key, JSON.stringify(value));\n      },\n      undefined,\n      `Failed to save to localStorage: ${key}`\n    );\n  },\n\n  get: <T>(key: string, fallback: T): T => {\n    return safeExecute(\n      () => {\n        const item = localStorage.getItem(key);\n        return item ? JSON.parse(item) : fallback;\n      },\n      fallback,\n      `Failed to read from localStorage: ${key}`\n    );\n  },\n\n  remove: (key: string): void => {\n    safeExecute(\n      () => {\n        localStorage.removeItem(key);\n      },\n      undefined,\n      `Failed to remove from localStorage: ${key}`\n    );\n  },\n\n  clear: (): void => {\n    safeExecute(\n      () => {\n        localStorage.clear();\n      },\n      undefined,\n      \"Failed to clear localStorage\"\n    );\n  },\n};\n\n// === Analytics Utilities ===\n\nexport const analytics = {\n  track: (event: string, properties?: Record<string, unknown>): void => {\n    if (isProduction()) {\n      // Integration point for analytics service\n      // Example: analyticsService.track(event, properties);\n      safeExecute(\n        () => {\n          // Your analytics implementation here\n          if (isDevelopment()) {\n            logger.debug(`Analytics: ${event}`, properties);\n          }\n        },\n        undefined,\n        `Failed to track analytics event: ${event}`\n      );\n    }\n  },\n\n  page: (page: string, properties?: Record<string, unknown>): void => {\n    if (isProduction()) {\n      // Integration point for page tracking\n      // Example: analyticsService.page(page, properties);\n      safeExecute(\n        () => {\n          // Your page tracking implementation here\n          if (isDevelopment()) {\n            logger.debug(`Page: ${page}`, properties);\n          }\n        },\n        undefined,\n        `Failed to track page view: ${page}`\n      );\n    }\n  },\n\n  identify: (userId: string, traits?: Record<string, unknown>): void => {\n    if (isProduction()) {\n      // Integration point for user identification\n      // Example: analyticsService.identify(userId, traits);\n      safeExecute(\n        () => {\n          // Your user identification implementation here\n          if (isDevelopment()) {\n            logger.debug(`Identify: ${userId}`, traits);\n          }\n        },\n        undefined,\n        `Failed to identify user: ${userId}`\n      );\n    }\n  },\n};\n\n// === Production Configuration ===\n\nexport const productionConfig = {\n  // Error reporting configuration\n  errorReporting: {\n    enabled: isProduction(),\n    endpoint: process.env.REACT_APP_ERROR_ENDPOINT || \"\",\n    apiKey: process.env.REACT_APP_ERROR_API_KEY || \"\",\n    maxRetries: 3,\n    retryDelay: 1000,\n  },\n\n  // Analytics configuration\n  analytics: {\n    enabled: isProduction(),\n    trackingId: process.env.REACT_APP_ANALYTICS_ID || \"\",\n    sampleRate: 1.0,\n    enableAutoPageTracking: true,\n  },\n\n  // Performance configuration\n  performance: {\n    enableMonitoring: isProduction(),\n    sampleRate: 0.1, // Monitor 10% of sessions\n    thresholds: {\n      renderTime: 16, // 60fps\n      memoryUsage: 0.8, // 80% of available memory\n      bundleSize: 150 * 1024, // 150KB\n    },\n  },\n\n  // Feature flags\n  features: {\n    enableAdvancedAnimations: true,\n    enableVirtualization: true,\n    enableLazyLoading: true,\n    enableA11yAuditing: isDevelopment(),\n    enablePerformanceMonitoring: true,\n  },\n};\n\n// === Bundle Analysis ===\n\nexport const bundle = {\n  reportSize: (componentName: string, size: number): void => {\n    if (isDevelopment()) {\n      logger.info(`Bundle: ${componentName} is ${(size / 1024).toFixed(2)}KB`);\n\n      if (size > productionConfig.performance.thresholds.bundleSize) {\n        logger.warn(`Bundle: ${componentName} exceeds size threshold`);\n      }\n    }\n  },\n\n  trackImport: (componentName: string): void => {\n    if (isDevelopment()) {\n      logger.debug(`Import: ${componentName} loaded`);\n    }\n\n    analytics.track(\"component_imported\", {\n      component: componentName,\n      timestamp: Date.now(),\n    });\n  },\n};\n\n// === Health Checks ===\n\nexport const health = {\n  checkGlassSupport: (): {\n    supported: boolean;\n    issues: string[];\n  } => {\n    const issues: string[] = [];\n\n    if (!features.supportsBackdropFilter()) {\n      issues.push(\"Backdrop filter not supported\");\n    }\n\n    if (!features.supportsIntersectionObserver()) {\n      issues.push(\"Intersection Observer not supported\");\n    }\n\n    if (!features.supportsResizeObserver()) {\n      issues.push(\"Resize Observer not supported\");\n    }\n\n    return {\n      supported: issues.length === 0,\n      issues,\n    };\n  },\n\n  checkPerformance: (): {\n    score: number;\n    recommendations: string[];\n  } => {\n    const recommendations: string[] = [];\n    let score = 100;\n\n    // Check device capabilities\n    if (!features.supportsWebGL()) {\n      score -= 20;\n      recommendations.push(\"Enable GPU acceleration for better performance\");\n    }\n\n    if (browser.isMobile()) {\n      score -= 10;\n      recommendations.push(\"Consider reduced effects for mobile devices\");\n    }\n\n    // Check memory\n    const memory = (\n      globalThis.performance as Performance & {\n        memory?: { usedJSHeapSize: number; jsHeapSizeLimit: number };\n      }\n    ).memory;\n    if (memory && memory.usedJSHeapSize / memory.jsHeapSizeLimit > 0.8) {\n      score -= 30;\n      recommendations.push(\n        \"High memory usage detected - enable virtualization\"\n      );\n    }\n\n    return { score, recommendations };\n  },\n};\n\n// === Production Initialization ===\n\nexport const initializeProduction = (): void => {\n  if (!isProduction()) return;\n\n  // Set up error handling\n  window.addEventListener(\"error\", (event) => {\n    logger.error(\"Unhandled error:\", event.error);\n  });\n\n  window.addEventListener(\"unhandledrejection\", (event) => {\n    logger.error(\"Unhandled promise rejection:\", event.reason);\n  });\n\n  // Check glass support\n  const glassSupport = health.checkGlassSupport();\n  if (!glassSupport.supported) {\n    logger.warn(\"Glass effects may not work properly:\", glassSupport.issues);\n  }\n\n  // Check performance\n  const performanceCheck = health.checkPerformance();\n  if (performanceCheck.score < 70) {\n    logger.warn(\n      \"Performance issues detected:\",\n      performanceCheck.recommendations\n    );\n  }\n\n  logger.info(\"AuraGlass production mode initialized\");\n};\n\n// === Development Helpers ===\n\nexport const dev = {\n  logComponentRender: (componentName: string, props: unknown): void => {\n    if (isDevelopment()) {\n      logger.debug(`Render: ${componentName}`, props);\n    }\n  },\n\n  logPerformanceWarning: (\n    componentName: string,\n    metric: string,\n    value: number,\n    threshold: number\n  ): void => {\n    if (isDevelopment() && value > threshold) {\n      logger.warn(\n        `Performance: ${componentName} ${metric} (${value}) exceeds threshold (${threshold})`\n      );\n    }\n  },\n\n  validateProps: <T>(\n    props: T,\n    schema: Record<keyof T, (value: unknown) => boolean>\n  ): boolean => {\n    if (!isDevelopment()) return true;\n\n    const errors: string[] = [];\n\n    Object.entries(schema).forEach(([key, validator]) => {\n      const value = (props as Record<keyof T, unknown>)[key as keyof T];\n      const validatorFn = validator as (value: unknown) => boolean;\n      if (value !== undefined && !validatorFn(value)) {\n        errors.push(`Invalid prop: ${key}`);\n      }\n    });\n\n    if (errors.length > 0) {\n      logger.error(\"Prop validation failed:\", errors);\n      return false;\n    }\n\n    return true;\n  },\n};\n", "import React from \"react\";\n/**\n * Runtime Glass Style Probes\n *\n * Monitors glass system performance, compliance, and usage patterns in real-time.\n * Provides telemetry for the unified glass system to ensure proper functioning.\n *\n * Part of Phase 5: Quality & Testing\n */\n\nimport { AURA_GLASS } from \"../tokens/glass\";\nimport { canUseDOM } from \"./ssr\";\n\nexport interface GlassProbeResult {\n  timestamp: number;\n  elementId?: string;\n  glassConfiguration: {\n    intent: string;\n    elevation: string;\n    tier: string;\n  };\n  performance: {\n    backdropSupported: boolean;\n    gpuAccelerated: boolean;\n    renderTime?: number;\n    memoryUsage?: number;\n  };\n  compliance: {\n    wcagContrast: number;\n    minVisibility: boolean;\n    accessibilityScore: number;\n  };\n  usage: {\n    apiUsed: \"createGlassStyle\" | \"css-classes\" | \"legacy\" | \"unknown\";\n    deprecationWarnings: string[];\n  };\n}\n\nexport class GlassStyleProbes {\n  private static instance: GlassStyleProbes;\n  private probeResults: GlassProbeResult[] = [];\n  private observer: MutationObserver | null = null;\n  private performanceObserver: PerformanceObserver | null = null;\n  private isMonitoring = false;\n\n  static getInstance(): GlassStyleProbes {\n    if (!GlassStyleProbes.instance) {\n      GlassStyleProbes.instance = new GlassStyleProbes();\n    }\n    return GlassStyleProbes.instance;\n  }\n\n  // Start monitoring glass elements\n  startMonitoring(): void {\n    // Skip monitoring during SSR\n    if (!canUseDOM || this.isMonitoring) return;\n\n    this.isMonitoring = true;\n    this.setupMutationObserver();\n    this.setupPerformanceObserver();\n    this.schedulePeriodicProbes();\n\n    // Initial scan of existing glass elements\n    this.scanExistingElements();\n  }\n\n  // Stop monitoring\n  stopMonitoring(): void {\n    if (!this.isMonitoring) return;\n\n    this.isMonitoring = false;\n\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n\n    if (this.performanceObserver) {\n      this.performanceObserver.disconnect();\n      this.performanceObserver = null;\n    }\n  }\n\n  private setupMutationObserver(): void {\n    if (!canUseDOM) return;\n\n    this.observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === \"childList\") {\n          mutation.addedNodes.forEach((node) => {\n            if (node.nodeType === Node.ELEMENT_NODE) {\n              this.probeElement(node as Element);\n            }\n          });\n        } else if (mutation.type === \"attributes\") {\n          if (\n            mutation.attributeName === \"class\" ||\n            mutation.attributeName === \"style\"\n          ) {\n            this.probeElement(mutation.target as Element);\n          }\n        }\n      });\n    });\n\n    this.observer.observe(document.body, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: [\"class\", \"style\"],\n    });\n  }\n\n  private setupPerformanceObserver(): void {\n    if (!canUseDOM) return;\n\n    if (\"PerformanceObserver\" in window) {\n      try {\n        this.performanceObserver = new PerformanceObserver((list) => {\n          const entries = list.getEntries();\n          entries.forEach((entry) => {\n            if (\n              entry.name.includes(\"glass\") ||\n              entry.name.includes(\"backdrop\")\n            ) {\n              (window as any).__auraglassPerformanceEntries = [\n                ...((window as any).__auraglassPerformanceEntries || []),\n                entry,\n              ].slice(-50);\n            }\n          });\n        });\n\n        this.performanceObserver.observe({\n          entryTypes: [\"measure\", \"paint\", \"layout-shift\"],\n        });\n      } catch {\n        this.performanceObserver = null;\n      }\n    }\n  }\n\n  private schedulePeriodicProbes(): void {\n    // Run comprehensive probes every 10 seconds\n    setInterval(() => {\n      if (this.isMonitoring) {\n        this.runComprehensiveProbe();\n      }\n    }, 10000);\n  }\n\n  private scanExistingElements(): void {\n    if (!canUseDOM) return;\n\n    const glassElements = document.querySelectorAll('[class*=\"glass-\"]');\n    glassElements.forEach((element) => {\n      this.probeElement(element);\n    });\n  }\n\n  private probeElement(element: Element): void {\n    if (!this.isGlassElement(element)) return;\n\n    const result = this.analyzeElement(element);\n    this.probeResults.push(result);\n\n    // Keep only last 100 results to prevent memory issues\n    if (this.probeResults.length > 100) {\n      this.probeResults = this.probeResults.slice(-100);\n    }\n\n    // Critical probe issues are retained in probeResults for callers to inspect.\n  }\n\n  private isGlassElement(element: Element): boolean {\n    const classes = element.className || \"\";\n    return (\n      classes.includes(\"glass-\") ||\n      element.getAttribute(\"data-glass\") !== null ||\n      this.hasGlassStyles(element)\n    );\n  }\n\n  private hasGlassStyles(element: Element): boolean {\n    const computedStyle = window.getComputedStyle(element);\n    return (\n      computedStyle.backdropFilter !== \"none\" ||\n      computedStyle.backdropFilter !== \"none\"\n    );\n  }\n\n  private analyzeElement(element: Element): GlassProbeResult {\n    const startTime = performance.now();\n\n    const glassConfig = this.extractGlassConfiguration(element);\n    const performanceData = this.analyzePerformance(element);\n    const complianceData = this.analyzeCompliance(element);\n    const usageData = this.analyzeUsage(element);\n\n    const endTime = performance.now();\n    performanceData.renderTime = endTime - startTime;\n\n    return {\n      timestamp: Date.now(),\n      elementId: element.id,\n      glassConfiguration: glassConfig,\n      performance: performanceData,\n      compliance: complianceData,\n      usage: usageData,\n    };\n  }\n\n  private extractGlassConfiguration(\n    element: Element\n  ): GlassProbeResult[\"glassConfiguration\"] {\n    const classes = element.className || \"\";\n\n    // Extract intent from class names like \"glass-primary-level2\"\n    const intentMatch = classes.match(\n      /glass-(neutral|primary|secondary|success|warning|danger|info)-/\n    );\n    const elevationMatch = classes.match(/glass-\\w+-(level[1-4])/);\n    const tierMatch =\n      classes.match(/glass-tier-(high|medium|low)/) ||\n      classes.match(/tier-(high|medium|low)/);\n\n    return {\n      intent: intentMatch ? intentMatch[1] : \"unknown\",\n      elevation: elevationMatch ? elevationMatch[1] : \"unknown\",\n      tier: tierMatch ? tierMatch[1] : \"high\", // default to high\n    };\n  }\n\n  private analyzePerformance(\n    element: Element\n  ): GlassProbeResult[\"performance\"] {\n    const computedStyle = window.getComputedStyle(element);\n\n    const backdropSupported = this.testBackdropSupport();\n    const gpuAccelerated = this.testGPUAcceleration(computedStyle);\n\n    // Estimate memory usage (rough approximation)\n    const memoryUsage = this.estimateMemoryUsage(element);\n\n    return {\n      backdropSupported,\n      gpuAccelerated,\n      memoryUsage,\n    };\n  }\n\n  private analyzeCompliance(element: Element): GlassProbeResult[\"compliance\"] {\n    const computedStyle = window.getComputedStyle(element);\n\n    const contrastRatio = this.calculateContrastRatio(element);\n    const minVisibility = this.checkMinimumVisibility(computedStyle);\n    const accessibilityScore = this.calculateAccessibilityScore(element);\n\n    return {\n      wcagContrast: contrastRatio,\n      minVisibility,\n      accessibilityScore,\n    };\n  }\n\n  private analyzeUsage(element: Element): GlassProbeResult[\"usage\"] {\n    const classes = element.className || \"\";\n    const inlineStyles = element.getAttribute(\"style\") || \"\";\n    const warnings: string[] = [];\n\n    // Determine which API was used\n    let apiUsed: GlassProbeResult[\"usage\"][\"apiUsed\"] = \"unknown\";\n\n    if (classes.match(/glass-\\w+-level[1-4]/)) {\n      apiUsed = \"css-classes\"; // Using generated CSS classes\n    } else if (\n      inlineStyles.includes(\"backdrop\") ||\n      classes.includes(\"createGlassStyle\")\n    ) {\n      apiUsed = \"createGlassStyle\"; // Using unified API\n    } else if (\n      classes.includes(\"glassSurface\") ||\n      classes.includes(\"glassBorder\")\n    ) {\n      apiUsed = \"legacy\";\n      warnings.push(\n        \"Using deprecated glass API - migrate to createGlassStyle()\"\n      );\n    }\n\n    // Check for deprecated patterns\n    if (inlineStyles.includes(\"backdrop-filter\")) {\n      warnings.push(\n        \"Inline backdrop-filter detected - should use unified token system\"\n      );\n    }\n\n    if (inlineStyles.match(/rgba\\(\\s*255,\\s*255,\\s*255,\\s*0\\.[0-9]/)) {\n      warnings.push(\"Hardcoded glass background - should use token system\");\n    }\n\n    return {\n      apiUsed,\n      deprecationWarnings: warnings,\n    };\n  }\n\n  private testBackdropSupport(): boolean {\n    const testEl = document.createElement(\"div\");\n    testEl.style.backdropFilter = \"blur(1px)\";\n    return testEl.style.backdropFilter !== \"\";\n  }\n\n  private testGPUAcceleration(computedStyle: CSSStyleDeclaration): boolean {\n    return (\n      computedStyle.transform !== \"none\" ||\n      computedStyle.willChange.includes(\"transform\")\n    );\n  }\n\n  private estimateMemoryUsage(element: Element): number {\n    // Rough estimation based on element complexity\n    const rect = element.getBoundingClientRect();\n    const area = rect.width * rect.height;\n    const complexity =\n      (element.children.length + 1) * (element.className.split(\" \").length + 1);\n\n    return Math.round((area * complexity) / 1000); // KB estimate\n  }\n\n  private calculateContrastRatio(element: Element): number {\n    try {\n      const computedStyle = window.getComputedStyle(element);\n      const backgroundColor = computedStyle.backgroundColor;\n      const color = computedStyle.color;\n\n      // Simplified contrast calculation\n      const bgLuminance = this.getColorLuminance(backgroundColor);\n      const textLuminance = this.getColorLuminance(color);\n\n      const lighter = Math.max(bgLuminance, textLuminance);\n      const darker = Math.min(bgLuminance, textLuminance);\n\n      return (lighter + 0.05) / (darker + 0.05);\n    } catch {\n      return 1; // Fallback if calculation fails\n    }\n  }\n\n  private getColorLuminance(color: string): number {\n    // Simplified luminance calculation\n    const rgb = this.parseColor(color);\n    if (!rgb) return 1;\n\n    const [r, g, b] = rgb.map((c: any) => {\n      c = c / 255;\n      return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);\n    });\n\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n  }\n\n  private parseColor(color: string): number[] | null {\n    const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n    return match\n      ? [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])]\n      : null;\n  }\n\n  private checkMinimumVisibility(computedStyle: CSSStyleDeclaration): boolean {\n    const opacity = parseFloat(computedStyle.opacity);\n    const backgroundAlpha = this.extractAlphaFromBackground(\n      computedStyle.backgroundColor\n    );\n\n    return opacity >= 0.05 && backgroundAlpha >= 0.05;\n  }\n\n  private extractAlphaFromBackground(backgroundColor: string): number {\n    const match = backgroundColor.match(\n      /rgba?\\([^,]+,[^,]+,[^,]+,\\s*([\\d.]+)\\)/\n    );\n    return match ? parseFloat(match[1]) : 1;\n  }\n\n  private calculateAccessibilityScore(element: Element): number {\n    let score = 1.0;\n\n    const contrastRatio = this.calculateContrastRatio(element);\n    if (contrastRatio < 4.5) score -= 0.3; // WCAG AA failure\n    if (contrastRatio < 3.0) score -= 0.3; // Severe contrast issue\n\n    const computedStyle = window.getComputedStyle(element);\n    if (!this.checkMinimumVisibility(computedStyle)) score -= 0.2;\n\n    if (!element.getAttribute(\"aria-label\") && !element.textContent) {\n      score -= 0.1; // Missing accessibility info\n    }\n\n    return Math.max(0, score);\n  }\n\n  private runComprehensiveProbe(): void {\n    const glassElements = document.querySelectorAll('[class*=\"glass-\"]');\n    const summary = {\n      timestamp: Date.now(),\n      totalElements: glassElements.length,\n      compliance: {\n        passed: 0,\n        warning: 0,\n        failed: 0,\n      },\n      performance: {\n        backdropSupported: this.testBackdropSupport(),\n        averageRenderTime: 0,\n        memoryUsage: 0,\n      },\n      usage: {\n        unified: 0,\n        legacy: 0,\n        unknown: 0,\n      },\n      deprecationWarnings: [] as string[],\n    };\n\n    let totalRenderTime = 0;\n    let totalMemory = 0;\n\n    this.probeResults.slice(-glassElements.length).forEach((result: any) => {\n      // Compliance scoring\n      if (result.compliance.accessibilityScore >= 0.8)\n        summary.compliance.passed++;\n      else if (result.compliance.accessibilityScore >= 0.6)\n        summary.compliance.warning++;\n      else summary.compliance.failed++;\n\n      // Performance aggregation\n      if (result.performance.renderTime)\n        totalRenderTime += result.performance.renderTime;\n      if (result.performance.memoryUsage)\n        totalMemory += result.performance.memoryUsage;\n\n      // Usage patterns\n      if (\n        result.usage.apiUsed === \"createGlassStyle\" ||\n        result.usage.apiUsed === \"css-classes\"\n      ) {\n        summary.usage.unified++;\n      } else if (result.usage.apiUsed === \"legacy\") {\n        summary.usage.legacy++;\n      } else {\n        summary.usage.unknown++;\n      }\n\n      // Collect warnings\n      summary.deprecationWarnings.push(...result.usage.deprecationWarnings);\n    });\n\n    summary.performance.averageRenderTime =\n      totalRenderTime / glassElements.length;\n    summary.performance.memoryUsage = totalMemory;\n\n    // Remove duplicate warnings\n    summary.deprecationWarnings = [...new Set(summary.deprecationWarnings)];\n\n    // Store for potential reporting\n    (window as any).__auraglassProbeData = {\n      latestSummary: summary,\n      allResults: this.probeResults,\n    };\n  }\n\n  // Public API for accessing probe data\n  getProbeResults(): GlassProbeResult[] {\n    return [...this.probeResults];\n  }\n\n  getLatestSummary(): unknown {\n    return (window as any).__auraglassProbeData?.latestSummary;\n  }\n\n  // Force a probe of specific element\n  probeElementById(elementId: string): GlassProbeResult | null {\n    const element = document.getElementById(elementId);\n    if (!element) return null;\n\n    return this.analyzeElement(element);\n  }\n}\n\n/**\n * Utility to manually start probes (call from useEffect or initialization code)\n * @param options - Configuration options\n */\nexport function startGlassProbes(options?: { exposeGlobally?: boolean }) {\n  if (!canUseDOM) return;\n\n  const probes = GlassStyleProbes.getInstance();\n\n  // Start monitoring after DOM is ready\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      probes.startMonitoring();\n    });\n  } else {\n    probes.startMonitoring();\n  }\n\n  // Expose to global scope for debugging if requested\n  if (options?.exposeGlobally && process.env.NODE_ENV === \"development\") {\n    (window as any).__auraglassProbes = probes;\n  }\n\n  return probes;\n}\n\n/**\n * Utility to stop probes\n */\nexport function stopGlassProbes() {\n  if (!canUseDOM) return;\n  GlassStyleProbes.getInstance().stopMonitoring();\n}\n\nexport default GlassStyleProbes;\n", "/**\n * Consciousness Interface Performance Optimization Utilities\n */\n\nimport { useCallback, useMemo, useRef, useEffect } from \"react\";\n\nexport type ConsciousnessGazeData = unknown;\nexport type ConsciousnessBiometricData = unknown;\nexport type ConsciousnessPredictivePattern = unknown;\n\nexport interface ConsciousnessPredictiveResult {\n  predictions: unknown[];\n  confidence: number;\n  message?: string;\n  [key: string]: unknown;\n}\n\nexport interface ConsciousnessOperationStats {\n  avg: number;\n  max: number;\n  min: number;\n  count: number;\n}\n\n// Performance optimization strategies for consciousness features\nexport const OPTIMIZATION_STRATEGIES = {\n  LAZY_LOADING: \"lazy\",\n  WEB_WORKER: \"worker\",\n  DEBOUNCING: \"debounce\",\n  THROTTLING: \"throttle\",\n  CACHING: \"cache\",\n  BATCHING: \"batch\",\n} as const;\n\n// Consciousness feature resource pool\nclass ConsciousnessResourcePool {\n  private eyeTrackingWorkers: Worker[] = [];\n  private biometricProcessors: Worker[] = [];\n  private predictiveAnalyzers: Worker[] = [];\n  private spatialAudioContexts: AudioContext[] = [];\n\n  // Initialize resource pools\n  initialize() {\n    // Pre-create Web Workers for heavy computations\n    // Only runs in browser environment, not during SSR\n    if (typeof Worker !== \"undefined\") {\n      try {\n        // Create workers with error handling to prevent build failures\n        const eyeWorker = new Worker(\n          new URL(\"../workers/eyeTrackingWorker.js\", import.meta.url)\n        );\n        this.eyeTrackingWorkers.push(eyeWorker);\n\n        const bioWorker = new Worker(\n          new URL(\"../workers/biometricWorker.js\", import.meta.url)\n        );\n        this.biometricProcessors.push(bioWorker);\n\n        const predWorker = new Worker(\n          new URL(\"../workers/predictiveWorker.js\", import.meta.url)\n        );\n        this.predictiveAnalyzers.push(predWorker);\n      } catch {\n        // Workers not available in this environment (e.g., SSR, old browsers)\n      }\n    }\n  }\n\n  // Get eye tracking worker\n  getEyeTrackingWorker(): Worker | null {\n    return this.eyeTrackingWorkers.pop() || null;\n  }\n\n  // Return eye tracking worker\n  returnEyeTrackingWorker(worker: Worker) {\n    this.eyeTrackingWorkers.push(worker);\n  }\n\n  // Get biometric processor\n  getBiometricProcessor(): Worker | null {\n    return this.biometricProcessors.pop() || null;\n  }\n\n  // Return biometric processor\n  returnBiometricProcessor(worker: Worker) {\n    this.biometricProcessors.push(worker);\n  }\n\n  // Get spatial audio context\n  getSpatialAudioContext(): AudioContext | null {\n    return this.spatialAudioContexts.pop() || null;\n  }\n\n  // Return spatial audio context\n  returnSpatialAudioContext(context: AudioContext) {\n    this.spatialAudioContexts.push(context);\n  }\n\n  // Clean up resources\n  cleanup() {\n    [\n      ...this.eyeTrackingWorkers,\n      ...this.biometricProcessors,\n      ...this.predictiveAnalyzers,\n    ].forEach((worker) => worker.terminate());\n\n    this.spatialAudioContexts.forEach((context) => {\n      if (context.state !== \"closed\") {\n        context.close();\n      }\n    });\n  }\n}\n\n// Global resource pool (singleton, lazy initialization)\nlet consciousnessResourcePoolInstance: ConsciousnessResourcePool | null = null;\n\n/**\n * Get or create the consciousness resource pool\n * Call this from useEffect or component initialization\n */\nexport function getConsciousnessResourcePool(): ConsciousnessResourcePool {\n  if (!consciousnessResourcePoolInstance) {\n    consciousnessResourcePoolInstance = new ConsciousnessResourcePool();\n\n    // Only initialize if in browser context\n    if (typeof window !== \"undefined\") {\n      consciousnessResourcePoolInstance.initialize();\n\n      // Cleanup on unload\n      window.addEventListener(\"beforeunload\", () => {\n        consciousnessResourcePoolInstance?.cleanup();\n      });\n    }\n  }\n\n  return consciousnessResourcePoolInstance;\n}\n\n/**\n * @deprecated Use getConsciousnessResourcePool() instead\n * Kept for backward compatibility - will lazy-initialize on first access\n */\nexport const consciousnessResourcePool = new Proxy(\n  {} as ConsciousnessResourcePool,\n  {\n    get(target, prop) {\n      return getConsciousnessResourcePool()[\n        prop as keyof ConsciousnessResourcePool\n      ];\n    },\n  }\n);\n\n// Performance-optimized consciousness hooks\nexport const useOptimizedEyeTracking = (\n  enabled: boolean,\n  onGazeChange: (data: ConsciousnessGazeData) => void,\n  options: { throttleMs?: number } = {}\n) => {\n  const { throttleMs = 16.67 } = options; // 60fps default\n  const lastUpdateRef = useRef<number>(0);\n  const workerRef = useRef<Worker | null>(null);\n\n  const throttledGazeChange = useCallback(\n    (data: ConsciousnessGazeData) => {\n      const now = Date.now();\n      if (now - lastUpdateRef.current >= throttleMs) {\n        lastUpdateRef.current = now;\n        onGazeChange(data);\n      }\n    },\n    [onGazeChange, throttleMs]\n  );\n\n  useEffect(() => {\n    if (!enabled) return;\n\n    // Get worker from pool\n    const worker = consciousnessResourcePool.getEyeTrackingWorker();\n    if (worker) {\n      workerRef.current = worker;\n\n      worker.onmessage = (event) => {\n        throttledGazeChange(event.data);\n      };\n\n      // Start eye tracking\n      worker.postMessage({ command: \"start\" });\n    }\n\n    return () => {\n      if (workerRef.current) {\n        workerRef.current.postMessage({ command: \"stop\" });\n        consciousnessResourcePool.returnEyeTrackingWorker(workerRef.current);\n        workerRef.current = null;\n      }\n    };\n  }, [enabled, throttledGazeChange]);\n\n  return {\n    isActive: enabled && !!workerRef.current,\n  };\n};\n\n// Optimized biometric monitoring\nexport const useOptimizedBiometricMonitoring = (\n  enabled: boolean,\n  onBiometricChange: (data: ConsciousnessBiometricData) => void,\n  options: { batchSize?: number; intervalMs?: number } = {}\n) => {\n  const { batchSize = 10, intervalMs = 100 } = options;\n  const dataBuffer = useRef<ConsciousnessBiometricData[]>([]);\n  const workerRef = useRef<Worker | null>(null);\n\n  const processBatch = useCallback(() => {\n    if (dataBuffer.current.length >= batchSize) {\n      const batch = dataBuffer.current.splice(0, batchSize);\n\n      if (workerRef.current) {\n        workerRef.current.postMessage({\n          command: \"processBatch\",\n          data: batch,\n        });\n      }\n    }\n  }, [batchSize]);\n\n  useEffect(() => {\n    if (!enabled) return;\n\n    const worker = consciousnessResourcePool.getBiometricProcessor();\n    if (worker) {\n      workerRef.current = worker;\n\n      worker.onmessage = (event) => {\n        onBiometricChange(event.data);\n      };\n\n      // Process batches at regular intervals\n      const interval = setInterval(processBatch, intervalMs);\n\n      return () => {\n        clearInterval(interval);\n        if (workerRef.current) {\n          consciousnessResourcePool.returnBiometricProcessor(workerRef.current);\n          workerRef.current = null;\n        }\n      };\n    }\n  }, [enabled, onBiometricChange, processBatch, intervalMs]);\n\n  const addBiometricData = useCallback(\n    (data: ConsciousnessBiometricData) => {\n      dataBuffer.current.push(data);\n\n      // Process immediately if buffer is full\n      if (dataBuffer.current.length >= batchSize) {\n        processBatch();\n      }\n    },\n    [batchSize, processBatch]\n  );\n\n  return {\n    addBiometricData,\n    bufferSize: dataBuffer.current.length,\n    isActive: enabled && !!workerRef.current,\n  };\n};\n\n// Optimized predictive analysis with caching\nexport const useOptimizedPredictiveAnalysis = (\n  enabled: boolean,\n  patterns: ConsciousnessPredictivePattern[],\n  options: { cacheSize?: number; debounceMs?: number } = {}\n) => {\n  const { cacheSize = 100, debounceMs = 200 } = options;\n  const cacheRef = useRef<Map<string, ConsciousnessPredictiveResult>>(\n    new Map()\n  );\n  const debounceRef = useRef<NodeJS.Timeout>();\n\n  const getCacheKey = useCallback(\n    (patterns: ConsciousnessPredictivePattern[]) => {\n      return JSON.stringify(patterns.slice(0, 10)); // Use first 10 patterns for key\n    },\n    []\n  );\n\n  const runPredictiveAnalysis = useCallback(\n    async (\n      patterns: ConsciousnessPredictivePattern[]\n    ): Promise<ConsciousnessPredictiveResult> => {\n      const cacheKey = getCacheKey(patterns);\n\n      // Check cache first\n      if (cacheRef.current.has(cacheKey)) {\n        return cacheRef.current.get(cacheKey)!;\n      }\n\n      return new Promise<ConsciousnessPredictiveResult>((resolve) => {\n        try {\n          const worker = new Worker(\n            new URL(\"../workers/predictiveWorker.ts\", import.meta.url)\n          );\n\n          worker.onmessage = (event) => {\n            const result = event.data as ConsciousnessPredictiveResult;\n\n            // Cache result\n            if (cacheRef.current.size >= cacheSize) {\n              const firstKey = cacheRef.current.keys().next().value;\n              if (firstKey !== undefined) {\n                cacheRef.current.delete(firstKey);\n              }\n            }\n            cacheRef.current.set(cacheKey, result);\n\n            worker.terminate();\n            resolve(result);\n          };\n\n          worker.onerror = () => {\n            worker.terminate();\n            resolve({\n              predictions: [],\n              confidence: 0,\n              message: \"Worker unavailable\",\n            });\n          };\n\n          worker.postMessage({ patterns });\n        } catch (error) {\n          // Worker not available (SSR or unsupported browser)\n          resolve({\n            predictions: [],\n            confidence: 0,\n            message: \"Worker not available in this environment\",\n          });\n        }\n      });\n    },\n    [getCacheKey, cacheSize]\n  );\n\n  const debouncedAnalysis = useCallback(\n    (patterns: ConsciousnessPredictivePattern[]) => {\n      if (debounceRef.current) {\n        clearTimeout(debounceRef.current);\n      }\n\n      debounceRef.current = setTimeout(() => {\n        runPredictiveAnalysis(patterns);\n      }, debounceMs);\n    },\n    [runPredictiveAnalysis, debounceMs]\n  );\n\n  useEffect(() => {\n    if (enabled && patterns.length > 0) {\n      debouncedAnalysis(patterns);\n    }\n\n    return () => {\n      if (debounceRef.current) {\n        clearTimeout(debounceRef.current);\n      }\n    };\n  }, [enabled, patterns, debouncedAnalysis]);\n\n  return {\n    getCachedResult: (patterns: ConsciousnessPredictivePattern[]) => {\n      const cacheKey = getCacheKey(patterns);\n      return cacheRef.current.get(cacheKey);\n    },\n    cacheSize: cacheRef.current.size,\n    runAnalysis: runPredictiveAnalysis,\n  };\n};\n\n// Optimized spatial audio with pooled contexts\nexport const useOptimizedSpatialAudio = (\n  enabled: boolean,\n  position: { x: number; y: number; z: number },\n  options: { maxSources?: number } = {}\n) => {\n  const { maxSources = 8 } = options;\n  const contextRef = useRef<AudioContext | null>(null);\n  const sourcesRef = useRef<AudioBufferSourceNode[]>([]);\n  const pannersRef = useRef<PannerNode[]>([]);\n\n  useEffect(() => {\n    if (!enabled) return;\n\n    // Get audio context from pool or create new one\n    contextRef.current = consciousnessResourcePool.getSpatialAudioContext();\n    if (!contextRef.current && typeof AudioContext !== \"undefined\") {\n      contextRef.current = new AudioContext();\n    }\n\n    return () => {\n      // Clean up sources and panners\n      sourcesRef.current.forEach((source) => {\n        try {\n          source.disconnect();\n          source.stop();\n        } catch (e) {\n          // Source might already be stopped\n        }\n      });\n\n      pannersRef.current.forEach((panner) => {\n        panner.disconnect();\n      });\n\n      sourcesRef.current = [];\n      pannersRef.current = [];\n\n      // Return context to pool\n      if (contextRef.current) {\n        consciousnessResourcePool.returnSpatialAudioContext(contextRef.current);\n        contextRef.current = null;\n      }\n    };\n  }, [enabled]);\n\n  const playSound = useCallback(\n    async (audioUrl: string, volume: number = 1) => {\n      if (!contextRef.current || sourcesRef.current.length >= maxSources)\n        return;\n\n      try {\n        const response = await fetch(audioUrl);\n        const arrayBuffer = await response.arrayBuffer();\n        const audioBuffer =\n          await contextRef.current.decodeAudioData(arrayBuffer);\n\n        const source = contextRef.current.createBufferSource();\n        const panner = contextRef.current.createPanner();\n        const gainNode = contextRef.current.createGain();\n\n        source.buffer = audioBuffer;\n        panner.positionX.setValueAtTime(\n          position.x,\n          contextRef.current.currentTime\n        );\n        panner.positionY.setValueAtTime(\n          position.y,\n          contextRef.current.currentTime\n        );\n        panner.positionZ.setValueAtTime(\n          position.z,\n          contextRef.current.currentTime\n        );\n        gainNode.gain.setValueAtTime(volume, contextRef.current.currentTime);\n\n        source.connect(panner);\n        panner.connect(gainNode);\n        gainNode.connect(contextRef.current.destination);\n\n        source.onended = () => {\n          // Clean up\n          const sourceIndex = sourcesRef.current.indexOf(source);\n          const pannerIndex = pannersRef.current.indexOf(panner);\n\n          if (sourceIndex > -1) sourcesRef.current.splice(sourceIndex, 1);\n          if (pannerIndex > -1) pannersRef.current.splice(pannerIndex, 1);\n\n          source.disconnect();\n          panner.disconnect();\n          gainNode.disconnect();\n        };\n\n        source.start();\n\n        sourcesRef.current.push(source);\n        pannersRef.current.push(panner);\n      } catch {\n        // Spatial audio is optional and may be blocked by browser policy.\n      }\n    },\n    [position, maxSources]\n  );\n\n  const updateListenerPosition = useCallback(\n    (listenerPos: { x: number; y: number; z: number }) => {\n      if (contextRef.current?.listener) {\n        const { listener } = contextRef.current;\n        listener.positionX.setValueAtTime(\n          listenerPos.x,\n          contextRef.current.currentTime\n        );\n        listener.positionY.setValueAtTime(\n          listenerPos.y,\n          contextRef.current.currentTime\n        );\n        listener.positionZ.setValueAtTime(\n          listenerPos.z,\n          contextRef.current.currentTime\n        );\n      }\n    },\n    []\n  );\n\n  return {\n    playSound,\n    updateListenerPosition,\n    activeSourcesCount: sourcesRef.current.length,\n    isActive: enabled && !!contextRef.current,\n  };\n};\n\n// Performance monitoring integration\nexport const useConsciousnessPerformanceOptimization = (\n  componentName: string\n) => {\n  const metricsRef = useRef<{\n    renderTimes: number[];\n    consciousnessOperations: Map<string, number[]>;\n  }>({\n    renderTimes: [],\n    consciousnessOperations: new Map(),\n  });\n\n  const measureRender = useCallback(() => {\n    const startTime = performance.now();\n\n    return () => {\n      const endTime = performance.now();\n      const renderTime = endTime - startTime;\n\n      metricsRef.current.renderTimes.push(renderTime);\n\n      // Keep only last 100 measurements\n      if (metricsRef.current.renderTimes.length > 100) {\n        metricsRef.current.renderTimes.shift();\n      }\n    };\n  }, [componentName]);\n\n  const measureConsciousnessOperation = useCallback((operation: string) => {\n    const startTime = performance.now();\n\n    return () => {\n      const endTime = performance.now();\n      const duration = endTime - startTime;\n\n      if (!metricsRef.current.consciousnessOperations.has(operation)) {\n        metricsRef.current.consciousnessOperations.set(operation, []);\n      }\n\n      const measurements =\n        metricsRef.current.consciousnessOperations.get(operation)!;\n      measurements.push(duration);\n\n      // Keep only last 50 measurements per operation\n      if (measurements.length > 50) {\n        measurements.shift();\n      }\n    };\n  }, []);\n\n  const getPerformanceReport = useCallback(() => {\n    const { renderTimes, consciousnessOperations } = metricsRef.current;\n\n    const avgRenderTime =\n      renderTimes.length > 0\n        ? renderTimes.reduce((a, b) => a + b) / renderTimes.length\n        : 0;\n\n    const consciousnessStats: Record<string, ConsciousnessOperationStats> = {};\n    consciousnessOperations.forEach((measurements, operation) => {\n      if (measurements.length > 0) {\n        consciousnessStats[operation] = {\n          avg: measurements.reduce((a, b) => a + b) / measurements.length,\n          max: Math.max(...measurements),\n          min: Math.min(...measurements),\n          count: measurements.length,\n        };\n      }\n    });\n\n    return {\n      component: componentName,\n      avgRenderTime,\n      maxRenderTime: Math.max(...renderTimes),\n      consciousness: consciousnessStats,\n      timestamp: Date.now(),\n    };\n  }, [componentName]);\n\n  return {\n    measureRender,\n    measureConsciousnessOperation,\n    getPerformanceReport,\n  };\n};\n", "/**\n * Date Adapters\n * Provides adapters for different date libraries (date-fns, dayjs, luxon, etc.)\n */\n\n/**\n * Date adapter interface\n */\nexport interface DateAdapter {\n  format: (date: Date | number | string, formatStr: string) => string;\n  parse: (dateStr: string, formatStr: string) => Date;\n  isValid: (date: unknown) => boolean;\n  addDays: (date: Date, days: number) => Date;\n  addMonths: (date: Date, months: number) => Date;\n  addYears: (date: Date, years: number) => Date;\n  startOfDay: (date: Date) => Date;\n  startOfWeek: (date: Date) => Date;\n  startOfMonth: (date: Date) => Date;\n  startOfYear: (date: Date) => Date;\n  endOfDay: (date: Date) => Date;\n  endOfWeek: (date: Date) => Date;\n  endOfMonth: (date: Date) => Date;\n  endOfYear: (date: Date) => Date;\n  isBefore: (date: Date, dateToCompare: Date) => boolean;\n  isAfter: (date: Date, dateToCompare: Date) => boolean;\n  isSameDay: (date: Date, dateToCompare: Date) => boolean;\n  getDaysInMonth: (date: Date) => number;\n}\n\ntype DateInput = Date | number | string;\n\nconst toDateInput = (date: unknown): DateInput => {\n  if (\n    date instanceof Date ||\n    typeof date === \"number\" ||\n    typeof date === \"string\"\n  ) {\n    return date;\n  }\n  return new Date(NaN);\n};\n\nconst loadOptionalDateLibrary = (packageName: string): any => {\n  try {\n    return require(packageName);\n  } catch (error) {\n    throw new Error(\n      `${packageName} is not installed. Please install it: npm install ${packageName}`\n    );\n  }\n};\n\n/**\n * Create date-fns adapter\n * Requires date-fns to be installed: npm install date-fns\n */\nexport const createDateFnsAdapter = (): DateAdapter => {\n  const dateFns = loadOptionalDateLibrary(\"date-fns\");\n\n  return {\n    format: (date: Date | number | string, formatStr: string): string => {\n      const dateObj = typeof date === \"string\" ? new Date(date) : date;\n      return dateFns.format(dateObj, formatStr);\n    },\n\n    parse: (dateStr: string, formatStr: string): Date => {\n      return dateFns.parse(dateStr, formatStr, new Date());\n    },\n\n    isValid: (date: unknown): boolean => {\n      return dateFns.isValid(new Date(toDateInput(date)));\n    },\n\n    addDays: (date: Date, days: number): Date => {\n      return dateFns.addDays(date, days);\n    },\n\n    addMonths: (date: Date, months: number): Date => {\n      return dateFns.addMonths(date, months);\n    },\n\n    addYears: (date: Date, years: number): Date => {\n      return dateFns.addYears(date, years);\n    },\n\n    startOfDay: (date: Date): Date => {\n      return dateFns.startOfDay(date);\n    },\n\n    startOfWeek: (date: Date): Date => {\n      return dateFns.startOfWeek(date);\n    },\n\n    startOfMonth: (date: Date): Date => {\n      return dateFns.startOfMonth(date);\n    },\n\n    startOfYear: (date: Date): Date => {\n      return dateFns.startOfYear(date);\n    },\n\n    endOfDay: (date: Date): Date => {\n      return dateFns.endOfDay(date);\n    },\n\n    endOfWeek: (date: Date): Date => {\n      return dateFns.endOfWeek(date);\n    },\n\n    endOfMonth: (date: Date): Date => {\n      return dateFns.endOfMonth(date);\n    },\n\n    endOfYear: (date: Date): Date => {\n      return dateFns.endOfYear(date);\n    },\n\n    isBefore: (date: Date, dateToCompare: Date): boolean => {\n      return dateFns.isBefore(date, dateToCompare);\n    },\n\n    isAfter: (date: Date, dateToCompare: Date): boolean => {\n      return dateFns.isAfter(date, dateToCompare);\n    },\n\n    isSameDay: (date: Date, dateToCompare: Date): boolean => {\n      return dateFns.isSameDay(date, dateToCompare);\n    },\n\n    getDaysInMonth: (date: Date): number => {\n      return dateFns.getDaysInMonth(date);\n    },\n  };\n};\n\n/**\n * Create Day.js adapter\n * Requires dayjs to be installed: npm install dayjs\n */\nexport const createDayJsAdapter = (): DateAdapter => {\n  const dayjs = loadOptionalDateLibrary(\"dayjs\");\n\n  return {\n    format: (date: Date | number | string, formatStr: string): string => {\n      return dayjs(date).format(formatStr);\n    },\n\n    parse: (dateStr: string, formatStr: string): Date => {\n      return dayjs(dateStr, formatStr).toDate();\n    },\n\n    isValid: (date: unknown): boolean => {\n      return dayjs(toDateInput(date)).isValid();\n    },\n\n    addDays: (date: Date, days: number): Date => {\n      return dayjs(date).add(days, \"day\").toDate();\n    },\n\n    addMonths: (date: Date, months: number): Date => {\n      return dayjs(date).add(months, \"month\").toDate();\n    },\n\n    addYears: (date: Date, years: number): Date => {\n      return dayjs(date).add(years, \"year\").toDate();\n    },\n\n    startOfDay: (date: Date): Date => {\n      return dayjs(date).startOf(\"day\").toDate();\n    },\n\n    startOfWeek: (date: Date): Date => {\n      return dayjs(date).startOf(\"week\").toDate();\n    },\n\n    startOfMonth: (date: Date): Date => {\n      return dayjs(date).startOf(\"month\").toDate();\n    },\n\n    startOfYear: (date: Date): Date => {\n      return dayjs(date).startOf(\"year\").toDate();\n    },\n\n    endOfDay: (date: Date): Date => {\n      return dayjs(date).endOf(\"day\").toDate();\n    },\n\n    endOfWeek: (date: Date): Date => {\n      return dayjs(date).endOf(\"week\").toDate();\n    },\n\n    endOfMonth: (date: Date): Date => {\n      return dayjs(date).endOf(\"month\").toDate();\n    },\n\n    endOfYear: (date: Date): Date => {\n      return dayjs(date).endOf(\"year\").toDate();\n    },\n\n    isBefore: (date: Date, dateToCompare: Date): boolean => {\n      return dayjs(date).isBefore(dayjs(dateToCompare));\n    },\n\n    isAfter: (date: Date, dateToCompare: Date): boolean => {\n      return dayjs(date).isAfter(dayjs(dateToCompare));\n    },\n\n    isSameDay: (date: Date, dateToCompare: Date): boolean => {\n      return dayjs(date).isSame(dayjs(dateToCompare), \"day\");\n    },\n\n    getDaysInMonth: (date: Date): number => {\n      return dayjs(date).daysInMonth();\n    },\n  };\n};\n\n/**\n * Create native Date adapter (no dependencies)\n */\nexport const createNativeDateAdapter = (): DateAdapter => {\n  return {\n    format: (date: Date | number | string, formatStr: string): string => {\n      const dateObj = new Date(date);\n      // Simple format implementation\n      return dateObj.toLocaleDateString();\n    },\n\n    parse: (dateStr: string, formatStr: string): Date => {\n      return new Date(dateStr);\n    },\n\n    isValid: (date: unknown): boolean => {\n      const d = new Date(toDateInput(date));\n      return d instanceof Date && !isNaN(d.getTime());\n    },\n\n    addDays: (date: Date, days: number): Date => {\n      const result = new Date(date);\n      result.setDate(result.getDate() + days);\n      return result;\n    },\n\n    addMonths: (date: Date, months: number): Date => {\n      const result = new Date(date);\n      result.setMonth(result.getMonth() + months);\n      return result;\n    },\n\n    addYears: (date: Date, years: number): Date => {\n      const result = new Date(date);\n      result.setFullYear(result.getFullYear() + years);\n      return result;\n    },\n\n    startOfDay: (date: Date): Date => {\n      const result = new Date(date);\n      result.setHours(0, 0, 0, 0);\n      return result;\n    },\n\n    startOfWeek: (date: Date): Date => {\n      const result = new Date(date);\n      const day = result.getDay();\n      const diff = result.getDate() - day;\n      result.setDate(diff);\n      result.setHours(0, 0, 0, 0);\n      return result;\n    },\n\n    startOfMonth: (date: Date): Date => {\n      const result = new Date(date);\n      result.setDate(1);\n      result.setHours(0, 0, 0, 0);\n      return result;\n    },\n\n    startOfYear: (date: Date): Date => {\n      const result = new Date(date);\n      result.setMonth(0, 1);\n      result.setHours(0, 0, 0, 0);\n      return result;\n    },\n\n    endOfDay: (date: Date): Date => {\n      const result = new Date(date);\n      result.setHours(23, 59, 59, 999);\n      return result;\n    },\n\n    endOfWeek: (date: Date): Date => {\n      const result = new Date(date);\n      const day = result.getDay();\n      const diff = 6 - day;\n      result.setDate(result.getDate() + diff);\n      result.setHours(23, 59, 59, 999);\n      return result;\n    },\n\n    endOfMonth: (date: Date): Date => {\n      const result = new Date(date);\n      result.setMonth(result.getMonth() + 1, 0);\n      result.setHours(23, 59, 59, 999);\n      return result;\n    },\n\n    endOfYear: (date: Date): Date => {\n      const result = new Date(date);\n      result.setMonth(11, 31);\n      result.setHours(23, 59, 59, 999);\n      return result;\n    },\n\n    isBefore: (date: Date, dateToCompare: Date): boolean => {\n      return date.getTime() < dateToCompare.getTime();\n    },\n\n    isAfter: (date: Date, dateToCompare: Date): boolean => {\n      return date.getTime() > dateToCompare.getTime();\n    },\n\n    isSameDay: (date: Date, dateToCompare: Date): boolean => {\n      return (\n        date.getFullYear() === dateToCompare.getFullYear() &&\n        date.getMonth() === dateToCompare.getMonth() &&\n        date.getDate() === dateToCompare.getDate()\n      );\n    },\n\n    getDaysInMonth: (date: Date): number => {\n      return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n    },\n  };\n};\n", "import React from \"react\";\nimport { createGlassStyle } from \"../core/mixins/glassMixins\";\n// Browser compatibility detection and fallbacks\n\nexport interface BrowserInfo {\n  name: string;\n  version: number;\n  engine: \"webkit\" | \"blink\" | \"gecko\" | \"edge\" | \"unknown\";\n  mobile: boolean;\n  touch: boolean;\n  supports: BrowserCapabilities;\n}\n\nexport interface BrowserCapabilities {\n  backdropFilter: boolean;\n  cssGrid: boolean;\n  flexbox: boolean;\n  cssVariables: boolean;\n  es6: boolean;\n  webgl: boolean;\n  webgl2: boolean;\n  webAnimations: boolean;\n  intersectionObserver: boolean;\n  resizeObserver: boolean;\n  mutationObserver: boolean;\n  requestIdleCallback: boolean;\n  webWorkers: boolean;\n  serviceWorkers: boolean;\n  indexedDB: boolean;\n  localStorage: boolean;\n  sessionStorage: boolean;\n  webRTC: boolean;\n  webAudio: boolean;\n  canvas: boolean;\n  svg: boolean;\n  video: boolean;\n  audio: boolean;\n}\n\n// Browser detection\nlet __cachedBrowserInfo: BrowserInfo | null = null;\nlet __cachedBrowserCapabilities: BrowserCapabilities | null = null;\nlet __lastBrowserDetectTs = 0;\nconst BROWSER_CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nconst probeGL = (): { webgl: boolean; webgl2: boolean } => {\n  if (typeof document === \"undefined\") return { webgl: false, webgl2: false };\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = 1;\n  canvas.height = 1;\n  const attrs: WebGLContextAttributes & { powerPreference?: any } = {\n    alpha: false,\n    antialias: false,\n    depth: false,\n    stencil: false,\n    preserveDrawingBuffer: false,\n    desynchronized: true as any,\n    failIfMajorPerformanceCaveat: true,\n    powerPreference: \"low-power\",\n  };\n  let gl: WebGLRenderingContext | null = null;\n  let gl2: WebGL2RenderingContext | null = null;\n  try {\n    gl2 = canvas.getContext(\"webgl2\", attrs) as WebGL2RenderingContext | null;\n  } catch {\n    gl2 = null;\n  }\n  if (!gl2) {\n    try {\n      gl =\n        (canvas.getContext(\"webgl\", attrs) as WebGLRenderingContext | null) ||\n        (canvas.getContext(\n          \"experimental-webgl\",\n          attrs\n        ) as WebGLRenderingContext | null) ||\n        null;\n    } catch {\n      gl = null;\n    }\n  }\n  const webgl2 = !!gl2;\n  const webgl = webgl2 || !!gl;\n  try {\n    const ctx: any = gl2 || gl;\n    const lose =\n      ctx &&\n      typeof ctx.getExtension === \"function\" &&\n      ctx.getExtension(\"WEBGL_lose_context\");\n    if (lose && typeof lose.loseContext === \"function\") lose.loseContext();\n  } catch {}\n  try {\n    canvas.width = canvas.height = 0;\n    canvas.remove();\n  } catch {}\n  return { webgl, webgl2 };\n};\n\nexport const detectBrowser = (): BrowserInfo => {\n  const now = Date.now();\n  if (\n    __cachedBrowserInfo &&\n    now - __lastBrowserDetectTs < BROWSER_CACHE_TTL_MS\n  ) {\n    return __cachedBrowserInfo;\n  }\n  const ua = navigator.userAgent;\n  const platform = navigator.platform;\n\n  let name = \"unknown\";\n  let version = 0;\n  let engine: BrowserInfo[\"engine\"] = \"unknown\";\n\n  // Detect browser name and version\n  if (ua.includes(\"Chrome\") && !ua.includes(\"Edg/\")) {\n    name = \"Chrome\";\n    const match = ua.match(/Chrome\\/(\\d+)/);\n    version = match ? parseInt(match[1]) : 0;\n    engine = \"blink\";\n  } else if (ua.includes(\"Firefox\")) {\n    name = \"Firefox\";\n    const match = ua.match(/Firefox\\/(\\d+)/);\n    version = match ? parseInt(match[1]) : 0;\n    engine = \"gecko\";\n  } else if (ua.includes(\"Safari\") && !ua.includes(\"Chrome\")) {\n    name = \"Safari\";\n    const match = ua.match(/Version\\/(\\d+)/);\n    version = match ? parseInt(match[1]) : 0;\n    engine = \"webkit\";\n  } else if (ua.includes(\"Edg/\")) {\n    name = \"Edge\";\n    const match = ua.match(/Edg\\/(\\d+)/);\n    version = match ? parseInt(match[1]) : 0;\n    engine = \"blink\";\n  } else if (ua.includes(\"MSIE\") || ua.includes(\"Trident\")) {\n    name = \"Internet Explorer\";\n    const match = ua.match(/(?:MSIE |Trident\\/.*; rv:)(\\d+)/);\n    version = match ? parseInt(match[1]) : 0;\n    engine = \"edge\";\n  }\n\n  // Detect mobile\n  const mobile =\n    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\n\n  // Detect touch capability\n  const touch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n\n  // Detect capabilities\n  const supports = detectCapabilities();\n\n  const info: BrowserInfo = {\n    name,\n    version,\n    engine,\n    mobile,\n    touch,\n    supports,\n  };\n  __cachedBrowserInfo = info;\n  __lastBrowserDetectTs = now;\n  return info;\n};\n\n// Capability detection\nexport const detectCapabilities = (): BrowserCapabilities => {\n  const now = Date.now();\n  if (\n    __cachedBrowserCapabilities &&\n    now - __lastBrowserDetectTs < BROWSER_CACHE_TTL_MS\n  ) {\n    return __cachedBrowserCapabilities;\n  }\n  const testElement = document.createElement(\"div\");\n  const canvas = document.createElement(\"canvas\");\n  const video = document.createElement(\"video\");\n  const audio = document.createElement(\"audio\");\n\n  const { webgl, webgl2 } = probeGL();\n\n  const supportsBackdropFilter =\n    \"backdropFilter\" in testElement.style ||\n    \"webkitBackdropFilter\" in testElement.style;\n\n  const BACKDROP_CAPABILITY_KEY: keyof BrowserCapabilities = \"backdropFilter\";\n\n  const caps: BrowserCapabilities = {\n    [BACKDROP_CAPABILITY_KEY]: supportsBackdropFilter,\n    // Use createGlassStyle() instead,\n    cssGrid: \"grid\" in testElement.style,\n    flexbox: \"flex\" in testElement.style,\n    cssVariables:\n      \"CSS\" in window &&\n      \"supports\" in window.CSS &&\n      window.CSS.supports(\"--test\", \"value\"),\n    es6: (() => {\n      try {\n        new Function(\"const a = 1; return a;\")();\n        return true;\n      } catch {\n        return false;\n      }\n    })(),\n    webgl,\n    webgl2,\n    webAnimations: \"animate\" in testElement,\n    intersectionObserver: \"IntersectionObserver\" in window,\n    resizeObserver: \"ResizeObserver\" in window,\n    mutationObserver: \"MutationObserver\" in window,\n    requestIdleCallback: \"requestIdleCallback\" in window,\n    webWorkers: \"Worker\" in window,\n    serviceWorkers: \"serviceWorker\" in navigator,\n    indexedDB: \"indexedDB\" in window,\n    localStorage: (() => {\n      try {\n        const test = \"test\";\n        localStorage.setItem(test, test);\n        localStorage.removeItem(test);\n        return true;\n      } catch {\n        return false;\n      }\n    })(),\n    sessionStorage: (() => {\n      try {\n        const test = \"test\";\n        sessionStorage.setItem(test, test);\n        sessionStorage.removeItem(test);\n        return true;\n      } catch {\n        return false;\n      }\n    })(),\n    webRTC:\n      \"RTCPeerConnection\" in window || \"webkitRTCPeerConnection\" in window,\n    webAudio: \"AudioContext\" in window || \"webkitAudioContext\" in window,\n    canvas: !!canvas.getContext(\"2d\"),\n    svg: document.implementation.hasFeature(\n      \"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\n      \"1.1\"\n    ),\n    video: !!video.canPlayType,\n    audio: !!audio.canPlayType,\n  };\n\n  __cachedBrowserCapabilities = caps;\n  __lastBrowserDetectTs = now;\n  return caps;\n};\n\n// Compatibility helpers\nexport const compatibilityHelpers = {\n  // Get fallback styles for unsupported features\n  getFallbackStyles: (\n    feature: keyof BrowserCapabilities\n  ): Record<string, any> => {\n    const browser = detectBrowser();\n\n    switch (feature) {\n      case \"backdropFilter\":\n        if (!browser.supports.backdropFilter) {\n          return {\n            background:\n              \"var(--glass-neutral-level2-surface)\",\n            border: \"1px solid rgba(0, 0, 0, 0.1)\",\n          };\n        }\n        break;\n\n      case \"cssGrid\":\n        if (!browser.supports.cssGrid) {\n          return {\n            display: \"flex\",\n            flexWrap: \"wrap\",\n          };\n        }\n        break;\n\n      case \"flexbox\":\n        if (!browser.supports.flexbox) {\n          return {\n            display: \"block\",\n          };\n        }\n        break;\n\n      case \"webAnimations\":\n        if (!browser.supports.webAnimations) {\n          return {\n            transition: \"all 0.3s ease\",\n          };\n        }\n        break;\n    }\n\n    return {};\n  },\n\n  // Check if browser supports glassmorphism\n  supportsGlassmorphism: (): boolean => {\n    const browser = detectBrowser();\n    return browser.supports.backdropFilter && browser.supports.cssVariables;\n  },\n\n  // Get appropriate animation library\n  getAnimationLibrary: (): \"web-animations\" | \"css-transitions\" | \"none\" => {\n    const browser = detectBrowser();\n\n    if (browser.supports.webAnimations) {\n      return \"web-animations\";\n    } else if (browser.version >= 10) {\n      return \"css-transitions\";\n    } else {\n      return \"none\";\n    }\n  },\n\n  // Check WebGL support level\n  getWebGLSupport: (): \"webgl2\" | \"webgl\" | \"none\" => {\n    const browser = detectBrowser();\n\n    if (browser.supports.webgl2) {\n      return \"webgl2\";\n    } else if (browser.supports.webgl) {\n      return \"webgl\";\n    } else {\n      return \"none\";\n    }\n  },\n\n  // Get appropriate storage mechanism\n  getStorageMechanism: (): \"indexeddb\" | \"localstorage\" | \"memory\" => {\n    const browser = detectBrowser();\n\n    if (browser.supports.indexedDB) {\n      return \"indexeddb\";\n    } else if (browser.supports.localStorage) {\n      return \"localstorage\";\n    } else {\n      return \"memory\";\n    }\n  },\n};\n\n// Polyfill management\nexport class PolyfillManager {\n  private static loadedPolyfills = new Set<string>();\n\n  static async loadPolyfill(name: string, url: string): Promise<void> {\n    if (this.loadedPolyfills.has(name)) {\n      return;\n    }\n\n    return new Promise((resolve, reject) => {\n      const script = document.createElement(\"script\");\n      script.src = url;\n      script.onload = () => {\n        this.loadedPolyfills.add(name);\n        resolve();\n      };\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n  }\n\n  static async loadRequiredPolyfills(): Promise<void> {\n    const browser = detectBrowser();\n    const polyfills: Array<{ name: string; url: string; condition: boolean }> =\n      [\n        {\n          name: \"intersection-observer\",\n          url: \"https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver\",\n          condition: !browser.supports.intersectionObserver,\n        },\n        {\n          name: \"resize-observer\",\n          url: \"https://polyfill.io/v3/polyfill.min.js?features=ResizeObserver\",\n          condition: !browser.supports.resizeObserver,\n        },\n        {\n          name: \"request-idle-callback\",\n          url: \"https://polyfill.io/v3/polyfill.min.js?features=requestIdleCallback\",\n          condition: !browser.supports.requestIdleCallback,\n        },\n        {\n          name: \"web-animations\",\n          url: \"https://cdnjs.cloudflare.com/ajax/libs/web-animations/2.3.2/web-animations.min.js\",\n          condition: !browser.supports.webAnimations,\n        },\n      ];\n\n    const promises = polyfills\n      .filter((polyfill: any) => polyfill.condition)\n      .map((polyfill: any) => this.loadPolyfill(polyfill.name, polyfill.url));\n\n    await Promise.all(promises);\n  }\n\n  static isPolyfillLoaded(name: string): boolean {\n    return this.loadedPolyfills.has(name);\n  }\n}\n\n// Feature detection utilities\nexport const featureDetection = {\n  // Check CSS feature support\n  supportsCSS: (property: string, value?: string): boolean => {\n    const testElement = document.createElement(\"div\");\n    if (value) {\n      testElement.style.setProperty(property, value);\n      return testElement.style.getPropertyValue(property) === value;\n    } else {\n      return property in testElement.style;\n    }\n  },\n\n  // Check JavaScript feature support\n  supportsJS: (feature: string): boolean => {\n    try {\n      switch (feature) {\n        case \"es6\":\n          new Function(\"const a = 1; return a;\")();\n          return true;\n        case \"async-await\":\n          new Function(\"async function test() { await Promise.resolve(); }\")();\n          return true;\n        case \"promises\":\n          return \"Promise\" in window;\n        case \"fetch\":\n          return \"fetch\" in window;\n        case \"proxy\":\n          return \"Proxy\" in window;\n        case \"map\":\n          return \"Map\" in window;\n        case \"set\":\n          return \"Set\" in window;\n        case \"weakmap\":\n          return \"WeakMap\" in window;\n        case \"weakset\":\n          return \"WeakSet\" in window;\n        default:\n          return false;\n      }\n    } catch {\n      return false;\n    }\n  },\n\n  // Check API support\n  supportsAPI: (api: string): boolean => {\n    switch (api) {\n      case \"geolocation\":\n        return \"geolocation\" in navigator;\n      case \"notifications\":\n        return \"Notification\" in window;\n      case \"service-worker\":\n        return \"serviceWorker\" in navigator;\n      case \"web-share\":\n        return \"share\" in navigator;\n      case \"vibration\":\n        return \"vibrate\" in navigator;\n      case \"battery\":\n        return \"getBattery\" in navigator;\n      case \"device-orientation\":\n        return \"DeviceOrientationEvent\" in window;\n      case \"device-motion\":\n        return \"DeviceMotionEvent\" in window;\n      default:\n        return false;\n    }\n  },\n\n  // Get device pixel ratio\n  getDevicePixelRatio: (): number => {\n    return window.devicePixelRatio || 1;\n  },\n\n  // Check if running in iframe\n  isInIframe: (): boolean => {\n    try {\n      return window.self !== window.top;\n    } catch {\n      return true;\n    }\n  },\n\n  // Check if running in WebView\n  isInWebView: (): boolean => {\n    const ua = navigator.userAgent;\n    return (\n      /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua) ||\n      /\\bwv\\b/.test(ua) ||\n      /Android.*Version\\/\\d+\\.\\d+/i.test(ua)\n    );\n  },\n\n  // Check connection quality\n  getConnectionQuality: (): \"slow\" | \"fast\" | \"unknown\" => {\n    const connection = (navigator as any).connection;\n    if (!connection) return \"unknown\";\n\n    const effectiveType = connection.effectiveType;\n    if (effectiveType === \"slow-2g\" || effectiveType === \"2g\") {\n      return \"slow\";\n    } else {\n      return \"fast\";\n    }\n  },\n};\n\n// Browser-specific optimizations\nexport const browserOptimizations = {\n  // Safari-specific optimizations\n  safari: {\n    // Fix backdrop-filter performance\n    optimizeBackdropFilter: () => {\n      const browser = detectBrowser();\n      if (browser.name === \"Safari\" && browser.version < 15) {\n        return {\n          willChange: \"transform\",\n          transform: \"translateZ(0)\",\n        };\n      }\n      return {};\n    },\n\n    // Fix flexbox bugs\n    fixFlexbox: () => {\n      return {\n        minWidth: 0,\n        minHeight: 0,\n      };\n    },\n  },\n\n  // Firefox-specific optimizations\n  firefox: {\n    // Fix backdrop-filter support\n    optimizeBackdropFilter: () => {\n      const browser = detectBrowser();\n      if (browser.name === \"Firefox\" && browser.version < 70) {\n        return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n      }\n      return {};\n    },\n  },\n\n  // Mobile-specific optimizations\n  mobile: {\n    // Optimize for touch interactions\n    optimizeForTouch: () => {\n      const browser = detectBrowser();\n      if (browser.mobile) {\n        return {\n          WebkitTapHighlightColor: \"transparent\",\n          WebkitTouchCallout: \"none\",\n          WebkitUserSelect: \"none\",\n          touchAction: \"manipulation\",\n        };\n      }\n      return {};\n    },\n\n    // Optimize animations for mobile\n    optimizeAnimations: () => {\n      const browser = detectBrowser();\n      if (browser.mobile) {\n        return {\n          willChange: \"transform\",\n          transform: \"translateZ(0)\",\n        };\n      }\n      return {};\n    },\n  },\n};\n", "/**\n * AuraGlass Production Configuration and Utilities\n *\n * This module provides production-ready configuration, optimization utilities,\n * and performance monitoring for the AuraGlass design system.\n */\n\nimport { detectDevice } from \"../utils/deviceCapabilities\";\nimport { PolyfillManager } from \"../utils/browserCompatibility\";\nimport {\n  PerformanceMetrics,\n  PerformanceMonitor,\n} from \"../utils/performanceOptimizations\";\nimport { injectGlowKeyframes } from \"./mixins/glowEffects\";\nimport {\n  getSafeDocument,\n  getSafeNavigator,\n  getSafeWindow,\n  isBrowser,\n  safeMatchMedia,\n} from \"../utils/env\";\n\ninterface BrowserPerformanceMemory {\n  usedJSHeapSize: number;\n  totalJSHeapSize?: number;\n  jsHeapSizeLimit?: number;\n}\n\ntype PerformanceWithMemory = Performance & {\n  memory?: BrowserPerformanceMemory;\n};\n\ntype WindowWithGarbageCollection = Window & {\n  gc?: () => void;\n};\n\nconst getPerformanceWithMemory = (): PerformanceWithMemory | undefined => {\n  const win = getSafeWindow();\n  const perf =\n    typeof performance !== \"undefined\" ? performance : win?.performance;\n  return perf as PerformanceWithMemory | undefined;\n};\n\nexport interface ProductionConfig {\n  /** Enable development mode features */\n  development: boolean;\n  /** Enable performance monitoring */\n  monitoring: boolean;\n  /** Enable analytics */\n  analytics: boolean;\n  /** Enable error reporting */\n  errorReporting: boolean;\n  /** Auto-load polyfills */\n  autoPolyfills: boolean;\n  /** Quality tier override */\n  qualityTier?: \"low\" | \"medium\" | \"high\" | \"ultra\" | \"auto\";\n  /** Enable reduced motion by default */\n  reducedMotion?: boolean;\n  /** Theme preference */\n  defaultTheme?: \"light\" | \"dark\" | \"glass\";\n  /** Animation preferences */\n  animations: {\n    enabled: boolean;\n    duration: number;\n    easing: string;\n  };\n  /** Performance thresholds */\n  performance: {\n    targetFPS: number;\n    memoryLimit: number;\n    autoOptimize: boolean;\n  };\n}\n\nexport const defaultProductionConfig: ProductionConfig = {\n  development: process.env.NODE_ENV === \"development\",\n  monitoring: true,\n  analytics: false,\n  errorReporting: true,\n  autoPolyfills: true,\n  qualityTier: \"auto\",\n  reducedMotion: false,\n  defaultTheme: \"glass\",\n  animations: {\n    enabled: true,\n    duration: 300,\n    easing: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n  },\n  performance: {\n    targetFPS: 60,\n    memoryLimit: 100 * 1024 * 1024, // 100MB\n    autoOptimize: true,\n  },\n};\n\nexport class AuraGlassProduction {\n  private static instance: AuraGlassProduction;\n  private config: ProductionConfig;\n  private performanceMonitor: PerformanceMonitor;\n  private initialized: boolean = false;\n\n  private constructor(config: Partial<ProductionConfig> = {}) {\n    this.config = { ...defaultProductionConfig, ...config };\n    this.performanceMonitor = PerformanceMonitor.getInstance();\n  }\n\n  static getInstance(config?: Partial<ProductionConfig>): AuraGlassProduction {\n    if (!AuraGlassProduction.instance) {\n      AuraGlassProduction.instance = new AuraGlassProduction(config);\n    }\n    return AuraGlassProduction.instance;\n  }\n\n  async initialize(): Promise<void> {\n    if (this.initialized) return;\n\n    const device = detectDevice();\n\n    if (this.config.qualityTier === \"auto\") {\n      this.config.qualityTier = device.performance.tier;\n    }\n\n    if (!isBrowser()) {\n      this.initialized = true;\n      return;\n    }\n\n    try {\n      // 1. Load required polyfills\n      if (\n        this.config.autoPolyfills &&\n        typeof PolyfillManager.loadRequiredPolyfills === \"function\"\n      ) {\n        await PolyfillManager.loadRequiredPolyfills();\n      }\n\n      // 2. Detect device capabilities\n\n      const doc = getSafeDocument();\n      const win = getSafeWindow();\n\n      // 4. Inject CSS animations\n      if (doc) {\n        injectGlowKeyframes();\n        this.injectProductionCSS();\n      }\n\n      // 5. Setup performance monitoring\n      if (this.config.monitoring && win) {\n        this.setupPerformanceMonitoring();\n      }\n\n      // 6. Setup error reporting\n      if (this.config.errorReporting && win) {\n        this.setupErrorReporting();\n      }\n\n      // 7. Apply accessibility preferences\n      if (doc) {\n        this.applyAccessibilityPreferences();\n      }\n\n      // 8. Setup theme system\n      if (doc) {\n        this.setupThemeSystem();\n      }\n\n      this.initialized = true;\n    } catch (error) {\n      throw error;\n    }\n  }\n\n  private injectProductionCSS(): void {\n    const cssId = \"aura-glass-production-styles\";\n    const doc = getSafeDocument();\n    if (!doc) return;\n\n    if (doc.getElementById(cssId)) return;\n\n    const style = doc.createElement(\"style\");\n    style.id = cssId;\n    style.textContent = this.generateProductionCSS();\n    doc.head?.appendChild(style);\n  }\n\n  private generateProductionCSS(): string {\n    return `\n      /* AuraGlass Production Styles */\n      .aura-glass-root {\n        --aura-animation-duration: ${this.config.animations.duration}ms;\n        --aura-animation-easing: ${this.config.animations.easing};\n        --aura-quality-tier: ${this.config.qualityTier};\n      }\n\n      .aura-glass-performance-low {\n        --aura-animation-duration: 200ms;\n        --aura-blur-amount: 4px;\n        --aura-particle-count: 10;\n      }\n\n      .aura-glass-performance-medium {\n        --aura-animation-duration: 300ms;\n        --aura-blur-amount: 8px;\n        --aura-particle-count: 25;\n      }\n\n      .aura-glass-performance-high {\n        --aura-animation-duration: 250ms;\n        --aura-blur-amount: 12px;\n        --aura-particle-count: 50;\n      }\n\n      .aura-glass-performance-ultra {\n        --aura-animation-duration: 200ms;\n        --aura-blur-amount: 16px;\n        --aura-particle-count: 100;\n      }\n\n      /* Reduced motion support */\n      @media (prefers-reduced-motion: reduce) {\n        .aura-glass-root * {\n          animation-duration: 0.01ms !important;\n          animation-iteration-count: 1 !important;\n          transition-duration: 0.01ms !important;\n        }\n      }\n\n      /* High contrast support */\n      @media (prefers-contrast: high) {\n        .aura-glass-surface {\n          border: 2px solid var(--glass-text-secondary) !important;\n          background: rgba(0, 0, 0, 0.95) !important;\n        }\n      }\n    `;\n  }\n\n  private setupPerformanceMonitoring(): void {\n    const win = getSafeWindow();\n    if (!win) return;\n\n    // Monitor component render times\n    this.performanceMonitor.startMeasure(\"aura-glass-render\");\n\n    // Monitor memory usage\n    win.setInterval(() => {\n      const perf = getPerformanceWithMemory();\n      if (perf?.memory) {\n        const memoryInfo = perf.memory;\n        if (memoryInfo.usedJSHeapSize > this.config.performance.memoryLimit) {\n          this.optimizeForMemory();\n        }\n      }\n    }, 5000);\n\n    // Monitor FPS\n    this.monitorFPS();\n  }\n\n  private monitorFPS(): void {\n    const win = getSafeWindow();\n    const perf =\n      typeof performance !== \"undefined\" ? performance : win?.performance;\n    if (!win || !perf || typeof win.requestAnimationFrame !== \"function\") {\n      return;\n    }\n\n    let lastTime = perf.now();\n    let frameCount = 0;\n    let fps = 60;\n\n    const calculateFPS = (currentTime: number) => {\n      frameCount++;\n\n      if (currentTime >= lastTime + 1000) {\n        fps = Math.round((frameCount * 1000) / (currentTime - lastTime));\n        frameCount = 0;\n        lastTime = currentTime;\n\n        // Optimize if FPS is too low\n        if (\n          fps < this.config.performance.targetFPS * 0.8 &&\n          this.config.performance.autoOptimize\n        ) {\n          this.optimizeForPerformance();\n        }\n      }\n\n      win.requestAnimationFrame(calculateFPS);\n    };\n\n    win.requestAnimationFrame(calculateFPS);\n  }\n\n  private optimizeForPerformance(): void {\n    const doc = getSafeDocument();\n    if (!doc) return;\n\n    // Reduce animation quality\n    doc.documentElement.classList.add(\"aura-glass-performance-optimized\");\n\n    // Disable non-essential animations\n    const style = doc.createElement(\"style\");\n    style.textContent = `\n      .aura-glass-performance-optimized * {\n        animation-duration: 0.1s !important;\n        transition-duration: 0.1s !important;\n      }\n      .aura-glass-performance-optimized .aura-glass-particle {\n        display: none !important;\n      }\n    `;\n    doc.head?.appendChild(style);\n  }\n\n  private optimizeForMemory(): void {\n    // Clear unused caches\n    const win = getSafeWindow();\n    const perf = getPerformanceWithMemory();\n\n    if (perf?.memory && win) {\n      // Force garbage collection if available\n      const gc = (win as WindowWithGarbageCollection).gc;\n      gc?.();\n    }\n\n    // Emit memory warning event\n    win?.dispatchEvent(\n      new CustomEvent(\"aura-glass-memory-warning\", {\n        detail: { timestamp: Date.now() },\n      })\n    );\n  }\n\n  private setupErrorReporting(): void {\n    const win = getSafeWindow();\n    if (!win) return;\n\n    win.addEventListener(\"error\", (event) => {\n      if (\n        event.error &&\n        event.error.stack &&\n        event.error.stack.includes(\"aura-glass\")\n      ) {\n        this.reportError(event.error, \"javascript-error\");\n      }\n    });\n\n    win.addEventListener(\"unhandledrejection\", (event) => {\n      if (\n        event.reason &&\n        event.reason.stack &&\n        event.reason.stack.includes(\"aura-glass\")\n      ) {\n        this.reportError(event.reason, \"unhandled-promise\");\n      }\n    });\n  }\n\n  private reportError(error: Error, type: string): void {\n    const win = getSafeWindow();\n    const nav = getSafeNavigator();\n\n    const errorReport = {\n      message: error.message,\n      stack: error.stack,\n      type,\n      timestamp: Date.now(),\n      userAgent: nav?.userAgent,\n      url: win?.location.href,\n      config: this.config,\n    };\n\n    // In production, you would send this to your error reporting service\n    // Example: Sentry, LogRocket, or custom analytics\n  }\n\n  private applyAccessibilityPreferences(): void {\n    const doc = getSafeDocument();\n    if (!doc) return;\n\n    // Check for reduced motion preference\n    if (\n      (safeMatchMedia(\"(prefers-reduced-motion: reduce)\")?.matches ?? false) ||\n      this.config.reducedMotion\n    ) {\n      doc.documentElement.classList.add(\"aura-glass-reduced-motion\");\n      this.config.animations.enabled = false;\n    }\n\n    // Check for high contrast preference\n    if (safeMatchMedia(\"(prefers-contrast: high)\")?.matches) {\n      doc.documentElement.classList.add(\"aura-glass-high-contrast\");\n    }\n\n    // Check for dark mode preference\n    if (\n      safeMatchMedia(\"(prefers-color-scheme: dark)\")?.matches &&\n      this.config.defaultTheme === \"glass\"\n    ) {\n      doc.documentElement.classList.add(\"aura-glass-dark-mode\");\n    }\n  }\n\n  private setupThemeSystem(): void {\n    const doc = getSafeDocument();\n    if (!doc) return;\n\n    // Apply default theme\n    doc.documentElement.setAttribute(\n      \"data-aura-theme\",\n      this.config.defaultTheme || \"glass\"\n    );\n\n    // Apply quality tier class\n    doc.documentElement.classList.add(\n      `aura-glass-quality-${this.config.qualityTier}`\n    );\n\n    // Setup CSS custom properties\n    const root = doc.documentElement;\n    root.style.setProperty(\n      \"--aura-animation-duration\",\n      `${this.config.animations.duration}ms`\n    );\n    root.style.setProperty(\n      \"--aura-animation-easing\",\n      this.config.animations.easing\n    );\n    root.style.setProperty(\n      \"--aura-target-fps\",\n      this.config.performance.targetFPS.toString()\n    );\n  }\n\n  // Public API methods\n  getConfig(): ProductionConfig {\n    return { ...this.config };\n  }\n\n  updateConfig(updates: Partial<ProductionConfig>): void {\n    this.config = { ...this.config, ...updates };\n\n    if (this.initialized) {\n      this.applyConfigChanges(updates);\n    }\n  }\n\n  private applyConfigChanges(updates: Partial<ProductionConfig>): void {\n    const doc = getSafeDocument();\n    if (!doc) return;\n\n    if (updates.qualityTier) {\n      doc.documentElement.className = doc.documentElement.className.replace(\n        /aura-glass-quality-\\w+/,\n        `aura-glass-quality-${updates.qualityTier}`\n      );\n    }\n\n    if (updates.animations?.duration) {\n      doc.documentElement.style.setProperty(\n        \"--aura-animation-duration\",\n        `${updates.animations.duration}ms`\n      );\n    }\n\n    if (updates.animations?.easing) {\n      doc.documentElement.style.setProperty(\n        \"--aura-animation-easing\",\n        updates.animations.easing\n      );\n    }\n\n    if (updates.defaultTheme) {\n      doc.documentElement.setAttribute(\"data-aura-theme\", updates.defaultTheme);\n    }\n  }\n\n  getPerformanceMetrics(): PerformanceMetrics {\n    return this.performanceMonitor.getMetrics();\n  }\n\n  optimizePerformance(): void {\n    this.optimizeForPerformance();\n  }\n\n  isInitialized(): boolean {\n    return this.initialized;\n  }\n\n  destroy(): void {\n    // Cleanup resources\n    if (this.performanceMonitor) {\n      this.performanceMonitor.stop();\n    }\n\n    // Remove injected styles\n    const doc = getSafeDocument();\n    if (doc) {\n      const styles = doc.querySelectorAll('style[id^=\"aura-glass\"]');\n      styles.forEach((style) => style.remove());\n\n      // Remove classes\n      doc.documentElement.className = doc.documentElement.className.replace(\n        /aura-glass-[\\w-]+/g,\n        \"\"\n      );\n    }\n\n    this.initialized = false;\n  }\n}\n\n// Global initialization function\nexport async function initializeAuraGlass(\n  config?: Partial<ProductionConfig>\n): Promise<AuraGlassProduction> {\n  const instance = AuraGlassProduction.getInstance(config);\n  await instance.initialize();\n  return instance;\n}\n\nexport async function initializeAuraGlassClient(\n  config?: Partial<ProductionConfig>\n): Promise<AuraGlassProduction> {\n  const instance = AuraGlassProduction.getInstance(config);\n  if (!isBrowser()) {\n    return instance;\n  }\n  await instance.initialize();\n  return instance;\n}\n\n// Utility functions for production use\nexport const productionUtils = {\n  // Check if AuraGlass is ready\n  isReady: (): boolean => {\n    return AuraGlassProduction.getInstance().isInitialized();\n  },\n\n  // Get current configuration\n  getConfig: (): ProductionConfig => {\n    return AuraGlassProduction.getInstance().getConfig();\n  },\n\n  // Update configuration\n  updateConfig: (updates: Partial<ProductionConfig>): void => {\n    AuraGlassProduction.getInstance().updateConfig(updates);\n  },\n\n  // Get performance metrics\n  getMetrics: (): PerformanceMetrics => {\n    return AuraGlassProduction.getInstance().getPerformanceMetrics();\n  },\n\n  // Force performance optimization\n  optimize: (): void => {\n    if (!isBrowser()) return;\n    const instance = AuraGlassProduction.getInstance();\n    instance.optimizePerformance();\n  },\n\n  // Check device capabilities\n  getDeviceInfo: () => {\n    return detectDevice();\n  },\n\n  // Validate production readiness\n  validateProduction: (): { ready: boolean; issues: string[] } => {\n    const issues: string[] = [];\n\n    if (!isBrowser()) {\n      return {\n        ready: false,\n        issues: [\"Production validation requires a browser environment.\"],\n      };\n    }\n\n    // Check required APIs\n    const win = getSafeWindow();\n    if (!win?.requestAnimationFrame) {\n      issues.push(\"RequestAnimationFrame not available\");\n    }\n\n    if (!win?.getComputedStyle) {\n      issues.push(\"GetComputedStyle not available\");\n    }\n\n    // Check CSS support\n    const doc = getSafeDocument();\n    if (doc) {\n      const testElement = doc.createElement(\"div\");\n      if (\n        !(\"backdropFilter\" in testElement.style) &&\n        !(\"webkitBackdropFilter\" in testElement.style)\n      ) {\n        issues.push(\n          \"Backdrop filter not supported - glassmorphism effects will be limited\"\n        );\n      }\n      if (!(\"grid\" in testElement.style)) {\n        issues.push(\"CSS Grid not supported - layout may be affected\");\n      }\n    }\n\n    // Check performance capabilities\n    const device = detectDevice();\n    if (device.performance.tier === \"low\") {\n      issues.push(\n        \"Low performance device detected - consider enabling performance optimizations\"\n      );\n    }\n\n    return {\n      ready: issues.length === 0,\n      issues,\n    };\n  },\n};\n\n// Export singleton instance getter\nexport const getAuraGlass = () => AuraGlassProduction.getInstance();\n\n// Development utilities (only available in development)\nexport const devUtils =\n  process.env.NODE_ENV === \"development\"\n    ? {\n        // Enable debug mode\n        enableDebug: (): void => {\n          const doc = getSafeDocument();\n          if (!doc) return;\n\n          doc.documentElement.classList.add(\"aura-glass-debug\");\n\n          const debugStyle = doc.createElement(\"style\");\n          debugStyle.id = \"aura-glass-debug-styles\";\n          debugStyle.textContent = `\n      .aura-glass-debug .glass-surface {\n        outline: 1px dashed rgba(255, 0, 0, 0.5) !important;\n      }\n      .aura-glass-debug .glass-surface::before {\n        content: attr(class);\n        position: absolute;\n        top: -20px;\n        left: 0;\n        font-size: 10px;\n        color: red;\n        background: var(--glass-text-secondary-dark);\n        padding: 2px 4px;\n        border-radius: 2px;\n        z-index: 10000;\n      }\n    `;\n          doc.head?.appendChild(debugStyle);\n        },\n\n        // Disable debug mode\n        disableDebug: (): void => {\n          const doc = getSafeDocument();\n          if (!doc) return;\n          doc.documentElement.classList.remove(\"aura-glass-debug\");\n          const debugStyle = doc.getElementById(\"aura-glass-debug-styles\");\n          if (debugStyle) debugStyle.remove();\n        },\n\n        // Log performance metrics\n        logMetrics: (): void => {\n          console.table(getAuraGlass().getPerformanceMetrics());\n        },\n\n        // Test all components\n        testComponents: (): void => {\n          // Component testing logic would go here\n        },\n      }\n    : {};\n\n// Export default configuration\nexport default defaultProductionConfig;\n", "import React from \"react\";\nimport { createGlassStyle } from \"../core/mixins/glassMixins\";\n// Element type detection and utilities\n\nexport type ElementCategory =\n  | \"interactive\"\n  | \"static\"\n  | \"form\"\n  | \"navigation\"\n  | \"media\"\n  | \"layout\"\n  | \"feedback\";\n\nexport type ElementRole =\n  | \"button\"\n  | \"link\"\n  | \"input\"\n  | \"select\"\n  | \"textarea\"\n  | \"checkbox\"\n  | \"radio\"\n  | \"switch\"\n  | \"slider\"\n  | \"progressbar\"\n  | \"tab\"\n  | \"tabpanel\"\n  | \"menu\"\n  | \"menuitem\"\n  | \"dialog\"\n  | \"tooltip\"\n  | \"alert\"\n  | \"status\"\n  | \"img\"\n  | \"video\"\n  | \"audio\"\n  | \"canvas\"\n  | \"svg\"\n  | \"div\"\n  | \"span\"\n  | \"p\"\n  | \"h1\"\n  | \"h2\"\n  | \"h3\"\n  | \"h4\"\n  | \"h5\"\n  | \"h6\"\n  | \"ul\"\n  | \"ol\"\n  | \"li\"\n  | \"table\"\n  | \"tr\"\n  | \"td\"\n  | \"th\"\n  | \"form\"\n  | \"label\"\n  | \"fieldset\"\n  | \"legend\"\n  | \"article\"\n  | \"section\"\n  | \"header\"\n  | \"footer\"\n  | \"aside\"\n  | \"main\"\n  | \"nav\";\n\nexport interface ElementInfo {\n  tagName: string;\n  role: ElementRole;\n  category: ElementCategory;\n  interactive: boolean;\n  focusable: boolean;\n  semantic: boolean;\n  formElement: boolean;\n}\n\nexport interface ElementCapabilities {\n  supportsHover: boolean;\n  supportsFocus: boolean;\n  supportsKeyboard: boolean;\n  supportsTouch: boolean;\n  supportsAnimation: boolean;\n  supportsBackdropFilter: boolean;\n  supportsCSSGrid: boolean;\n  supportsFlexbox: boolean;\n}\n\n// Element type detection\nexport const getElementInfo = (element: Element): ElementInfo => {\n  const tagName = element.tagName.toLowerCase();\n  const role = getElementRole(element);\n  const category = getElementCategory(element);\n  const interactive = isInteractiveElement(element);\n  const focusable = isFocusableElement(element);\n  const semantic = isSemanticElement(element);\n  const formElement = isFormElement(element);\n\n  return {\n    tagName,\n    role,\n    category,\n    interactive,\n    focusable,\n    semantic,\n    formElement,\n  };\n};\n\nconst getElementRole = (element: Element): ElementRole => {\n  const tagName = element.tagName.toLowerCase();\n  const role = element.getAttribute(\"role\");\n\n  // Check explicit role first\n  if (role) {\n    switch (role) {\n      case \"button\":\n        return \"button\";\n      case \"link\":\n        return \"link\";\n      case \"textbox\":\n        return \"input\";\n      case \"checkbox\":\n        return \"checkbox\";\n      case \"radio\":\n        return \"radio\";\n      case \"switch\":\n        return \"switch\";\n      case \"slider\":\n        return \"slider\";\n      case \"progressbar\":\n        return \"progressbar\";\n      case \"tab\":\n        return \"tab\";\n      case \"tabpanel\":\n        return \"tabpanel\";\n      case \"menu\":\n        return \"menu\";\n      case \"menuitem\":\n        return \"menuitem\";\n      case \"dialog\":\n        return \"dialog\";\n      case \"tooltip\":\n        return \"tooltip\";\n      case \"alert\":\n        return \"alert\";\n      case \"status\":\n        return \"status\";\n      case \"img\":\n        return \"img\";\n    }\n  }\n\n  // Map by tag name\n  switch (tagName) {\n    case \"button\":\n      return \"button\";\n    case \"a\":\n      return \"link\";\n    case \"input\": {\n      const type = (element as HTMLInputElement).type;\n      switch (type) {\n        case \"checkbox\":\n          return \"checkbox\";\n        case \"radio\":\n          return \"radio\";\n        default:\n          return \"input\";\n      }\n    }\n    case \"select\":\n      return \"select\";\n    case \"textarea\":\n      return \"textarea\";\n    case \"img\":\n      return \"img\";\n    case \"video\":\n      return \"video\";\n    case \"audio\":\n      return \"audio\";\n    case \"canvas\":\n      return \"canvas\";\n    case \"svg\":\n      return \"svg\";\n    case \"div\":\n      return \"div\";\n    case \"span\":\n      return \"span\";\n    case \"p\":\n      return \"p\";\n    case \"h1\":\n      return \"h1\";\n    case \"h2\":\n      return \"h2\";\n    case \"h3\":\n      return \"h3\";\n    case \"h4\":\n      return \"h4\";\n    case \"h5\":\n      return \"h5\";\n    case \"h6\":\n      return \"h6\";\n    case \"ul\":\n      return \"ul\";\n    case \"ol\":\n      return \"ol\";\n    case \"li\":\n      return \"li\";\n    case \"table\":\n      return \"table\";\n    case \"tr\":\n      return \"tr\";\n    case \"td\":\n      return \"td\";\n    case \"th\":\n      return \"th\";\n    case \"form\":\n      return \"form\";\n    case \"label\":\n      return \"label\";\n    case \"fieldset\":\n      return \"fieldset\";\n    case \"legend\":\n      return \"legend\";\n    case \"article\":\n      return \"article\";\n    case \"section\":\n      return \"section\";\n    case \"header\":\n      return \"header\";\n    case \"footer\":\n      return \"footer\";\n    case \"aside\":\n      return \"aside\";\n    case \"main\":\n      return \"main\";\n    case \"nav\":\n      return \"nav\";\n    default:\n      return \"div\";\n  }\n};\n\nconst getElementCategory = (element: Element): ElementCategory => {\n  const info = getElementInfo(element);\n\n  if (info.interactive) {\n    return \"interactive\";\n  }\n\n  if (info.formElement) {\n    return \"form\";\n  }\n\n  if ([\"nav\", \"menu\", \"menuitem\", \"tab\", \"tabpanel\"].includes(info.role)) {\n    return \"navigation\";\n  }\n\n  if ([\"img\", \"video\", \"audio\", \"canvas\", \"svg\"].includes(info.role)) {\n    return \"media\";\n  }\n\n  if (\n    [\n      \"div\",\n      \"span\",\n      \"section\",\n      \"article\",\n      \"header\",\n      \"footer\",\n      \"aside\",\n      \"main\",\n    ].includes(info.role)\n  ) {\n    return \"layout\";\n  }\n\n  if ([\"alert\", \"status\", \"tooltip\", \"dialog\"].includes(info.role)) {\n    return \"feedback\";\n  }\n\n  return \"static\";\n};\n\nconst isInteractiveElement = (element: Element): boolean => {\n  const tagName = element.tagName.toLowerCase();\n  const role = element.getAttribute(\"role\");\n  const hasClickHandler =\n    element.hasAttribute(\"onclick\") || element.hasAttribute(\"onClick\");\n\n  return (\n    [\"button\", \"a\", \"input\", \"select\", \"textarea\"].includes(tagName) ||\n    [\n      \"button\",\n      \"link\",\n      \"checkbox\",\n      \"radio\",\n      \"switch\",\n      \"slider\",\n      \"tab\",\n      \"menuitem\",\n    ].includes(role || \"\") ||\n    hasClickHandler ||\n    element.getAttribute(\"tabindex\") === \"0\"\n  );\n};\n\nconst isFocusableElement = (element: Element): boolean => {\n  const tagName = element.tagName.toLowerCase();\n\n  // Naturally focusable elements\n  if ([\"button\", \"input\", \"select\", \"textarea\", \"a\"].includes(tagName)) {\n    // Check if disabled\n    if (element.hasAttribute(\"disabled\")) return false;\n    if (tagName === \"a\" && !element.hasAttribute(\"href\")) return false;\n    return true;\n  }\n\n  // Elements with tabindex\n  const tabindex = element.getAttribute(\"tabindex\");\n  if (tabindex) {\n    return parseInt(tabindex) >= 0;\n  }\n\n  // Elements with explicit role\n  const role = element.getAttribute(\"role\");\n  if (\n    [\n      \"button\",\n      \"link\",\n      \"textbox\",\n      \"checkbox\",\n      \"radio\",\n      \"switch\",\n      \"slider\",\n      \"tab\",\n      \"menuitem\",\n    ].includes(role || \"\")\n  ) {\n    return true;\n  }\n\n  return false;\n};\n\nconst isSemanticElement = (element: Element): boolean => {\n  const tagName = element.tagName.toLowerCase();\n  return [\n    \"article\",\n    \"aside\",\n    \"details\",\n    \"figcaption\",\n    \"figure\",\n    \"footer\",\n    \"header\",\n    \"main\",\n    \"mark\",\n    \"nav\",\n    \"section\",\n    \"summary\",\n    \"time\",\n    \"h1\",\n    \"h2\",\n    \"h3\",\n    \"h4\",\n    \"h5\",\n    \"h6\",\n    \"p\",\n    \"blockquote\",\n    \"pre\",\n    \"ol\",\n    \"ul\",\n    \"li\",\n    \"dl\",\n    \"dt\",\n    \"dd\",\n    \"table\",\n    \"thead\",\n    \"tbody\",\n    \"tfoot\",\n    \"tr\",\n    \"th\",\n    \"td\",\n    \"caption\",\n  ].includes(tagName);\n};\n\nconst isFormElement = (element: Element): boolean => {\n  const tagName = element.tagName.toLowerCase();\n  const role = element.getAttribute(\"role\");\n\n  return (\n    [\n      \"input\",\n      \"select\",\n      \"textarea\",\n      \"button\",\n      \"form\",\n      \"label\",\n      \"fieldset\",\n      \"legend\",\n    ].includes(tagName) ||\n    [\"textbox\", \"checkbox\", \"radio\", \"switch\", \"slider\", \"button\"].includes(\n      role || \"\"\n    )\n  );\n};\n\n// Browser capability detection\nexport const detectElementCapabilities = (): ElementCapabilities => {\n  const testElement = document.createElement(\"div\");\n\n  return {\n    supportsHover: window.matchMedia(\"(hover: hover)\").matches,\n    supportsFocus: true, // All modern browsers support focus\n    supportsKeyboard: true, // All modern browsers support keyboard events\n    supportsTouch: \"ontouchstart\" in window,\n    supportsAnimation: \"animate\" in testElement,\n    supportsBackdropFilter:\n      \"backdropFilter\" in testElement.style ||\n      \"webkitBackdropFilter\" in testElement.style,\n    supportsCSSGrid: \"grid\" in testElement.style,\n    supportsFlexbox: \"flex\" in testElement.style,\n  };\n};\n\n// Element behavior utilities\nexport const elementBehaviors = {\n  // Get appropriate cursor for element type\n  getCursor: (element: Element): string => {\n    const info = getElementInfo(element);\n\n    switch (info.role) {\n      case \"button\":\n      case \"link\":\n        return \"pointer\";\n      case \"input\":\n      case \"textarea\":\n        return \"text\";\n      case \"select\":\n        return \"pointer\";\n      default:\n        return \"default\";\n    }\n  },\n\n  // Get appropriate user select behavior\n  getUserSelect: (element: Element): string => {\n    const info = getElementInfo(element);\n\n    if (info.interactive || info.formElement) {\n      return \"none\";\n    }\n\n    return \"text\";\n  },\n\n  // Get appropriate pointer events\n  getPointerEvents: (element: Element): string => {\n    const info = getElementInfo(element);\n\n    if (info.interactive) {\n      return \"auto\";\n    }\n\n    return \"none\";\n  },\n\n  // Check if element supports certain interactions\n  supportsInteraction: (\n    element: Element,\n    interaction: \"hover\" | \"focus\" | \"touch\" | \"keyboard\"\n  ): boolean => {\n    const capabilities = detectElementCapabilities();\n    const info = getElementInfo(element);\n\n    switch (interaction) {\n      case \"hover\":\n        return capabilities.supportsHover && info.interactive;\n      case \"focus\":\n        return capabilities.supportsFocus && info.focusable;\n      case \"touch\":\n        return capabilities.supportsTouch;\n      case \"keyboard\":\n        return capabilities.supportsKeyboard && info.focusable;\n      default:\n        return false;\n    }\n  },\n};\n\n// Element styling utilities\nexport const elementStyles = {\n  // Get base styles for element type\n  getBaseStyles: (element: Element): Record<string, any> => {\n    const info = getElementInfo(element);\n    const capabilities = detectElementCapabilities();\n\n    const baseStyles: Record<string, any> = {\n      cursor: elementBehaviors.getCursor(element),\n      userSelect: elementBehaviors.getUserSelect(element),\n      pointerEvents: elementBehaviors.getPointerEvents(element),\n    };\n\n    // Add focus styles for focusable elements\n    if (info.focusable) {\n      baseStyles.outline = \"none\";\n      baseStyles[\"&:focus-visible\"] = {\n        outline: \"2px solid hsl(var(--glass-color-primary)/0.5)\",\n        outlineOffset: \"2px\",\n      };\n    }\n\n    // Add hover styles for interactive elements\n    if (info.interactive && capabilities.supportsHover) {\n      baseStyles.transition = \"all 0.2s ease\";\n      baseStyles[\"&:hover\"] = {\n        opacity: 0.8,\n      };\n    }\n\n    // Add touch styles for touch devices\n    if (capabilities.supportsTouch && info.interactive) {\n      baseStyles.minWidth = \"44px\";\n      baseStyles.minHeight = \"44px\";\n      baseStyles.WebkitTapHighlightColor = \"transparent\";\n    }\n\n    return baseStyles;\n  },\n\n  // Get glassmorphism styles for element\n  getGlassStyles: (element: Element): Record<string, any> => {\n    const capabilities = detectElementCapabilities();\n\n    if (!capabilities.supportsBackdropFilter) {\n      return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n    }\n\n    return createGlassStyle({ intent: \"neutral\", elevation: \"level2\" });\n  },\n\n  // Get animation styles for element\n  getAnimationStyles: (element: Element): Record<string, any> => {\n    const capabilities = detectElementCapabilities();\n    const info = getElementInfo(element);\n\n    if (!capabilities.supportsAnimation) {\n      return {};\n    }\n\n    if (info.interactive) {\n      return {\n        transition: \"all 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n        \"&:active\": {\n          transform: \"scale(0.98)\",\n        },\n      };\n    }\n\n    return {\n      transition: \"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)\",\n    };\n  },\n};\n\n// Element accessibility utilities\nexport const elementAccessibility = {\n  // Get appropriate ARIA attributes\n  getAriaAttributes: (element: Element): Record<string, string> => {\n    const info = getElementInfo(element);\n    const attributes: Record<string, string> = {};\n\n    // Add role if not already present and needed\n    if (!element.hasAttribute(\"role\") && info.semantic) {\n      attributes.role = info.role;\n    }\n\n    // Add focus management\n    if (info.focusable && !element.hasAttribute(\"tabindex\")) {\n      attributes.tabindex = \"0\";\n    }\n\n    // Add live region for dynamic content\n    if ([\"alert\", \"status\", \"log\", \"progressbar\"].includes(info.role)) {\n      attributes[\"aria-live\"] = \"polite\";\n    }\n\n    return attributes;\n  },\n\n  // Check accessibility compliance\n  isAccessible: (element: Element): boolean => {\n    const info = getElementInfo(element);\n\n    // Check focus management\n    if (info.interactive && !info.focusable) {\n      return false;\n    }\n\n    // Check semantic structure\n    if (!info.semantic && !element.getAttribute(\"role\")) {\n      return false;\n    }\n\n    // Check form elements\n    if (info.formElement) {\n      const hasLabel =\n        element.hasAttribute(\"aria-label\") ||\n        element.hasAttribute(\"aria-labelledby\") ||\n        (element.hasAttribute(\"id\") &&\n          document.querySelector(`label[for=\"${element.id}\"]`));\n\n      if (!hasLabel) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n};\n", "import React from \"react\";\nimport { CSSProperties } from \"react\";\n\nexport interface ThemeColors {\n  primary: string;\n  secondary: string;\n  accent: string;\n  background: string;\n  surface: string;\n  text: string;\n  textSecondary: string;\n  border: string;\n  error: string;\n  warning: string;\n  success: string;\n  info: string;\n}\n\nexport interface ThemeSpacing {\n  xs: string;\n  sm: string;\n  md: string;\n  lg: string;\n  xl: string;\n  xxl: string;\n}\n\nexport interface ThemeTypography {\n  fontFamily: string;\n  fontSize: {\n    xs: string;\n    sm: string;\n    md: string;\n    lg: string;\n    xl: string;\n    xxl: string;\n  };\n  fontWeight: {\n    light: number;\n    normal: number;\n    medium: number;\n    semibold: number;\n    bold: number;\n  };\n  lineHeight: {\n    tight: number;\n    normal: number;\n    relaxed: number;\n  };\n}\n\nexport interface GlassTheme {\n  colors: ThemeColors;\n  spacing: ThemeSpacing;\n  typography: ThemeTypography;\n  borderRadius: string;\n  boxShadow: string;\n  backdropFilter: string;\n  transition: string;\n}\n\n// Theme helper functions\nexport const createGlassTheme = (\n  baseTheme: Partial<GlassTheme> = {}\n): GlassTheme => {\n  const defaultColors: ThemeColors = {\n    primary: \"hsl(var(--glass-color-primary))\",\n    secondary: \"var(--glass-gray-500)\",\n    accent: \"#8b5cf6\",\n    background: \"#0b1220\",\n    surface: \"rgba(255,255,255,0.06)\",\n    text: \"rgba(255,255,255,0.92)\",\n    textSecondary: \"var(--glass-text-secondary)\",\n    border: \"rgba(255,255,255,0.16)\",\n    error: \"hsl(var(--glass-color-danger))\",\n    warning: \"hsl(var(--glass-color-warning))\",\n    success: \"hsl(var(--glass-color-success))\",\n    info: \"#0ea5e9\",\n  };\n\n  const BACKDROP_FILTER_PROP = \"backdropFilter\" as const;\n\n  return {\n    colors: { ...defaultColors, ...(baseTheme.colors || {}) },\n    spacing: {\n      xs: \"0.25rem\",\n      sm: \"0.5rem\",\n      md: \"1rem\",\n      lg: \"1.5rem\",\n      xl: \"2rem\",\n      xxl: \"3rem\",\n      ...baseTheme.spacing,\n    },\n    typography: {\n      fontFamily: \"system-ui, -apple-system, sans-serif\",\n      fontSize: {\n        xs: \"0.75rem\",\n        sm: \"0.875rem\",\n        md: \"1rem\",\n        lg: \"1.125rem\",\n        xl: \"1.25rem\",\n        xxl: \"1.5rem\",\n      },\n      fontWeight: {\n        light: 300,\n        normal: 400,\n        medium: 500,\n        semibold: 600,\n        bold: 700,\n      },\n      lineHeight: {\n        tight: 1.25,\n        normal: 1.5,\n        relaxed: 1.75,\n      },\n      ...baseTheme.typography,\n    },\n    borderRadius: \"12px\",\n    boxShadow: \"0 8px 32px rgba(0, 0, 0, 0.18)\",\n    [BACKDROP_FILTER_PROP]: \"var(--glass-backdrop-filter, blur(16px))\",\n    // Use tokenized backdrop via CSS variables on surfaces\n    // Use createGlassStyle() instead,\n    transition: \"all 0.2s ease\",\n    ...baseTheme,\n  };\n};\n\nexport const getThemeValue = (\n  theme: GlassTheme,\n  path: string,\n  fallback?: any\n): any => {\n  const keys = path.split(\".\");\n  let value: any = theme;\n\n  for (const key of keys) {\n    if (value && typeof value === \"object\" && key in value) {\n      value = value[key];\n    } else {\n      return fallback;\n    }\n  }\n\n  return value;\n};\n\nexport const createThemeVariant = (\n  baseTheme: GlassTheme,\n  overrides: Partial<GlassTheme>\n): GlassTheme => {\n  return {\n    ...baseTheme,\n    ...overrides,\n    colors: {\n      ...baseTheme.colors,\n      ...overrides.colors,\n    },\n    spacing: {\n      ...baseTheme.spacing,\n      ...overrides.spacing,\n    },\n    typography: {\n      ...baseTheme.typography,\n      ...overrides.typography,\n      fontSize: {\n        ...baseTheme.typography.fontSize,\n        ...overrides.typography?.fontSize,\n      },\n      fontWeight: {\n        ...baseTheme.typography.fontWeight,\n        ...overrides.typography?.fontWeight,\n      },\n      lineHeight: {\n        ...baseTheme.typography.lineHeight,\n        ...overrides.typography?.lineHeight,\n      },\n    },\n  };\n};\n\n// Color manipulation utilities\nexport const adjustColorOpacity = (color: string, opacity: number): string => {\n  // Handle hex colors\n  if (color.startsWith(\"#\")) {\n    const hex = color.replace(\"#\", \"\");\n    const r = parseInt(hex.substr(0, 2), 16);\n    const g = parseInt(hex.substr(2, 2), 16);\n    const b = parseInt(hex.substr(4, 2), 16);\n    return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n  }\n\n  // Handle rgba colors\n  if (color.startsWith(\"rgba\")) {\n    const parts = color.match(/rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([\\d.]+)\\)/);\n    if (parts) {\n      return `rgba(${parts[1]}, ${parts[2]}, ${parts[3]}, ${opacity})`;\n    }\n  }\n\n  // Handle rgb colors\n  if (color.startsWith(\"rgb\")) {\n    const parts = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n    if (parts) {\n      return `rgba(${parts[1]}, ${parts[2]}, ${parts[3]}, ${opacity})`;\n    }\n  }\n\n  return color;\n};\n\nexport const lightenColor = (color: string, amount: number): string => {\n  // Simple color lightening - in a real implementation you'd use a proper color library\n  if (color.startsWith(\"#\")) {\n    const hex = color.replace(\"#\", \"\");\n    const r = Math.min(255, parseInt(hex.substr(0, 2), 16) + amount);\n    const g = Math.min(255, parseInt(hex.substr(2, 2), 16) + amount);\n    const b = Math.min(255, parseInt(hex.substr(4, 2), 16) + amount);\n    return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n  }\n\n  return color;\n};\n\nexport const darkenColor = (color: string, amount: number): string => {\n  if (color.startsWith(\"#\")) {\n    const hex = color.replace(\"#\", \"\");\n    const r = Math.max(0, parseInt(hex.substr(0, 2), 16) - amount);\n    const g = Math.max(0, parseInt(hex.substr(2, 2), 16) - amount);\n    const b = Math.max(0, parseInt(hex.substr(4, 2), 16) - amount);\n    return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n  }\n\n  return color;\n};\n\n// Spacing utilities\nexport const createSpacingScale = (base: number = 4): ThemeSpacing => {\n  return {\n    xs: `${base}px`,\n    sm: `${base * 2}px`,\n    md: `${base * 4}px`,\n    lg: `${base * 6}px`,\n    xl: `${base * 8}px`,\n    xxl: `${base * 12}px`,\n  };\n};\n\nexport const getSpacingValue = (\n  spacing: ThemeSpacing,\n  size: keyof ThemeSpacing\n): string => {\n  return spacing[size];\n};\n\n// Typography utilities\nexport const createTypographyScale = (\n  baseSize: number = 16,\n  scale: number = 1.25\n): ThemeTypography[\"fontSize\"] => {\n  return {\n    xs: `${baseSize / scale ** 2}px`,\n    sm: `${baseSize / scale}px`,\n    md: `${baseSize}px`,\n    lg: `${baseSize * scale}px`,\n    xl: `${baseSize * scale ** 2}px`,\n    xxl: `${baseSize * scale ** 3}px`,\n  };\n};\n\nexport const createFontWeightScale = (): ThemeTypography[\"fontWeight\"] => {\n  return {\n    light: 300,\n    normal: 400,\n    medium: 500,\n    semibold: 600,\n    bold: 700,\n  };\n};\n\n// Theme validation\nexport const validateTheme = (theme: Partial<GlassTheme>): string[] => {\n  const errors: string[] = [];\n\n  if (!theme.colors) {\n    errors.push(\"Theme must include colors\");\n  } else {\n    const requiredColors: (keyof ThemeColors)[] = [\n      \"primary\",\n      \"background\",\n      \"text\",\n    ];\n\n    requiredColors.forEach((color: any) => {\n      if (!(theme.colors as any)![color]) {\n        errors.push(`Theme colors must include ${color}`);\n      }\n    });\n  }\n\n  if (!theme.spacing) {\n    errors.push(\"Theme must include spacing\");\n  }\n\n  if (!theme.typography) {\n    errors.push(\"Theme must include typography\");\n  }\n\n  return errors;\n};\n\n// CSS custom properties generation\nexport const generateThemeCSSVariables = (theme: GlassTheme): string => {\n  const variables: string[] = [];\n\n  // Colors\n  Object.entries(theme.colors).forEach(([key, value]) => {\n    variables.push(`  --color-${key}: ${value};`);\n  });\n\n  // Spacing\n  Object.entries(theme.spacing).forEach(([key, value]) => {\n    variables.push(`  --spacing-${key}: ${value};`);\n  });\n\n  // Typography\n  Object.entries(theme.typography.fontSize).forEach(([key, value]) => {\n    variables.push(`  --font-size-${key}: ${value};`);\n  });\n\n  Object.entries(theme.typography.fontWeight).forEach(([key, value]) => {\n    variables.push(`  --font-weight-${key}: ${value};`);\n  });\n\n  Object.entries(theme.typography.lineHeight).forEach(([key, value]) => {\n    variables.push(`  --line-height-${key}: ${value};`);\n  });\n\n  variables.push(`  --font-family: ${theme.typography.fontFamily};`);\n  variables.push(`  --border-radius: ${theme.borderRadius};`);\n  variables.push(`  --box-shadow: ${theme.boxShadow};`);\n  variables.push(`  --backdrop-filter: ${theme.backdropFilter};`);\n  variables.push(`  --transition: ${theme.transition};`);\n\n  return `:root {\\n${variables.join(\"\\n\")}\\n}`;\n};\n\n// Theme merging utilities\nexport const mergeThemes = (\n  ...themes: Partial<GlassTheme>[]\n): Partial<GlassTheme> => {\n  const merged = themes.reduce((acc, theme) => {\n    return {\n      ...acc,\n      ...theme,\n      colors: {\n        ...acc.colors,\n        ...theme.colors,\n      },\n      spacing: {\n        ...acc.spacing,\n        ...theme.spacing,\n      },\n      typography: {\n        ...acc.typography,\n        ...theme.typography,\n        fontSize: {\n          ...acc.typography?.fontSize,\n          ...theme.typography?.fontSize,\n        },\n        fontWeight: {\n          ...acc.typography?.fontWeight,\n          ...theme.typography?.fontWeight,\n        },\n        lineHeight: {\n          ...acc.typography?.lineHeight,\n          ...theme.typography?.lineHeight,\n        },\n      },\n    } as Partial<GlassTheme>;\n  }, {} as Partial<GlassTheme>);\n\n  // Validate and provide defaults\n  validateTheme(merged);\n\n  return createGlassTheme(merged);\n};\n\n// Theme preset generators\nexport const createDarkTheme = (): GlassTheme => {\n  return createGlassTheme({\n    colors: {\n      primary: \"var(--glass-color-primary-light)\",\n      secondary: \"var(--glass-gray-400)\",\n      accent: \"#a78bfa\",\n      background: \"var(--glass-primary-level2-surface)\",\n      surface: \"rgba(31, 41, 55, 0.8)\",\n      text: \"var(--glass-gray-50)\",\n      textSecondary: \"rgba(156, 163, 175, 0.8)\",\n      border: \"rgba(75, 85, 99, 0.3)\",\n      error: \"var(--glass-color-danger-light)\",\n      warning: \"var(--glass-color-warning-light)\",\n      success: \"var(--glass-color-success-light)\",\n      info: \"var(--glass-color-primary-light)\",\n    },\n  });\n};\n\nexport const createLightTheme = (): GlassTheme => {\n  return createGlassTheme({\n    colors: {\n      primary: \"hsl(var(--glass-color-primary))\",\n      secondary: \"var(--glass-gray-500)\",\n      accent: \"#8b5cf6\",\n      background: \"var(--glass-neutral-level2-surface)\",\n      surface: \"rgba(249, 250, 251, 0.8)\",\n      text: \"var(--glass-gray-900)\",\n      textSecondary: \"rgba(75, 85, 99, 0.7)\",\n      border: \"rgba(229, 231, 235, 0.5)\",\n      error: \"hsl(var(--glass-color-danger))\",\n      warning: \"hsl(var(--glass-color-warning))\",\n      success: \"hsl(var(--glass-color-success))\",\n      info: \"hsl(var(--glass-color-primary))\",\n    },\n  });\n};\n", "/**\n * Simple deterministic pseudo-random number generator for SSR consistency.\n */\nexport class SeededRandom {\n  private state: number;\n\n  constructor(seed: number | string = Date.now()) {\n    this.state = SeededRandom.normalizeSeed(seed);\n  }\n\n  static normalizeSeed(seed: number | string): number {\n    if (typeof seed === 'number' && Number.isFinite(seed)) {\n      return SeededRandom.hash(seed);\n    }\n\n    if (typeof seed === 'string') {\n      let hash = 0;\n      for (let i = 0; i < seed.length; i++) {\n        hash = (hash << 5) - hash + seed.charCodeAt(i);\n        hash |= 0; // Convert to 32-bit integer\n      }\n      return SeededRandom.hash(hash);\n    }\n\n    return SeededRandom.hash(Date.now());\n  }\n\n  private static hash(input: number): number {\n    let x = input | 0;\n    x ^= x >>> 16;\n    x = Math.imul(x, 0x7feb352d);\n    x ^= x >>> 15;\n    x = Math.imul(x, 0x846ca68b);\n    x ^= x >>> 16;\n    return x >>> 0;\n  }\n\n  next(): number {\n    // LCG parameters from Numerical Recipes\n    this.state = (1664525 * this.state + 1013904223) >>> 0;\n    return this.state / 0xffffffff;\n  }\n\n  nextInRange(min: number, max: number): number {\n    return min + (max - min) * this.next();\n  }\n\n  nextInt(min: number, max: number): number {\n    return Math.floor(this.nextInRange(min, max + 1));\n  }\n\n  nextSigned(): number {\n    return this.next() * 2 - 1;\n  }\n}\n\nexport const createSeededRandom = (seed?: number | string): SeededRandom => {\n  return new SeededRandom(seed);\n};\n", "// token-lint-ignore-file: theme tokens intentionally defined with raw values\nimport React from \"react\";\n// Theme tokens for the AuraGlass design system\n\nimport AURA_GLASS, { glassTokenUtils } from \"./glass\";\nimport {\n  COLORS,\n  TYPOGRAPHY,\n  SPACING,\n  BORDER_RADIUS,\n  BOX_SHADOW,\n  Z_INDEX,\n  BREAKPOINTS,\n  ANIMATION,\n} from \"./designConstants\";\n\nexport interface ThemeTokens {\n  // Color tokens\n  colors: {\n    // Glass morphism colors\n    glass: {\n      surface: string;\n      border: string;\n      text: string;\n      textSecondary: string;\n      shadow: string;\n    };\n\n    // Semantic colors\n    semantic: typeof COLORS.semantic;\n\n    // Neutral colors\n    neutral: typeof COLORS.neutral;\n\n    // Component-specific colors\n    components: {\n      button: {\n        primary: string;\n        secondary: string;\n        danger: string;\n        success: string;\n        warning: string;\n      };\n      input: {\n        background: string;\n        border: string;\n        focus: string;\n        error: string;\n      };\n      card: {\n        background: string;\n        border: string;\n        shadow: string;\n      };\n    };\n  };\n\n  // Typography tokens\n  typography: typeof TYPOGRAPHY & {\n    // Glass-specific typography\n    glass: {\n      heading: {\n        fontSize: string;\n        fontWeight: number;\n        lineHeight: number;\n        color: string;\n      };\n      body: {\n        fontSize: string;\n        fontWeight: number;\n        lineHeight: number;\n        color: string;\n      };\n      caption: {\n        fontSize: string;\n        fontWeight: number;\n        lineHeight: number;\n        color: string;\n      };\n    };\n  };\n\n  // Spacing tokens\n  spacing: typeof SPACING & {\n    // Glass-specific spacing\n    glass: {\n      container: string;\n      component: string;\n      element: string;\n    };\n  };\n\n  // Layout tokens\n  layout: {\n    borderRadius: typeof BORDER_RADIUS;\n    boxShadow: typeof BOX_SHADOW;\n    zIndex: typeof Z_INDEX;\n    breakpoints: typeof BREAKPOINTS;\n  };\n\n  // Animation tokens\n  animation: typeof ANIMATION & {\n    // Glass-specific animations\n    glass: {\n      appear: {\n        duration: string;\n        easing: string;\n      };\n      hover: {\n        duration: string;\n        easing: string;\n        scale: number;\n      };\n      focus: {\n        duration: string;\n        easing: string;\n      };\n    };\n  };\n\n  // Glass morphism tokens\n  glass: typeof AURA_GLASS;\n\n  // Component-specific tokens\n  components: {\n    button: {\n      size: {\n        sm: { height: string; padding: string; fontSize: string };\n        md: { height: string; padding: string; fontSize: string };\n        lg: { height: string; padding: string; fontSize: string };\n      };\n      variant: {\n        primary: {\n          background: string;\n          color: string;\n          hover: { background: string; shadow: string };\n          active: { background: string; shadow: string };\n        };\n        secondary: {\n          background: string;\n          color: string;\n          border: string;\n          hover: { background: string; border: string };\n          active: { background: string; border: string };\n        };\n      };\n    };\n\n    input: {\n      size: {\n        sm: { height: string; padding: string; fontSize: string };\n        md: { height: string; padding: string; fontSize: string };\n        lg: { height: string; padding: string; fontSize: string };\n      };\n      state: {\n        default: { border: string; background: string };\n        focus: { border: string; background: string; shadow: string };\n        error: { border: string; background: string };\n        disabled: { border: string; background: string; opacity: number };\n      };\n    };\n\n    card: {\n      variant: {\n        default: {\n          background: string;\n          border: string;\n          shadow: string;\n          hover: { shadow: string; transform: string };\n        };\n        elevated: {\n          background: string;\n          border: string;\n          shadow: string;\n          hover: { shadow: string; transform: string };\n        };\n        outlined: {\n          background: string;\n          border: string;\n          shadow: string;\n          hover: { border: string; shadow: string };\n        };\n      };\n    };\n  };\n}\n\n// Light theme tokens\nexport const lightTheme: ThemeTokens = {\n  colors: {\n    glass: {\n      surface: AURA_GLASS.surfaces.neutral.level1.surface.base,\n      border: AURA_GLASS.surfaces.neutral.level1.border.color,\n      text: AURA_GLASS.surfaces.neutral.level1.text.primary,\n      textSecondary: AURA_GLASS.surfaces.neutral.level1.text.secondary,\n      shadow: AURA_GLASS.surfaces.neutral.level1.outerShadow\n        ? `${AURA_GLASS.surfaces.neutral.level1.outerShadow.x}px ${AURA_GLASS.surfaces.neutral.level1.outerShadow.y}px ${AURA_GLASS.surfaces.neutral.level1.outerShadow.blur}px ${AURA_GLASS.surfaces.neutral.level1.outerShadow.spread}px ${AURA_GLASS.surfaces.neutral.level1.outerShadow.color}`\n        : \"none\",\n    },\n    semantic: COLORS.semantic,\n    neutral: COLORS.neutral,\n    components: {\n      button: {\n        primary: COLORS.semantic.primary,\n        secondary: COLORS.neutral.gray[100],\n        danger: COLORS.semantic.error,\n        success: COLORS.semantic.success,\n        warning: COLORS.semantic.warning,\n      },\n      input: {\n        background: COLORS.neutral.white,\n        border: COLORS.neutral.gray[300],\n        focus: COLORS.semantic.primary,\n        error: COLORS.semantic.error,\n      },\n      card: {\n        background: COLORS.neutral.white,\n        border: COLORS.neutral.gray[200],\n        shadow: BOX_SHADOW.sm,\n      },\n    },\n  },\n\n  typography: {\n    ...TYPOGRAPHY,\n    glass: {\n      heading: {\n        fontSize: TYPOGRAPHY.fontSize.xl,\n        fontWeight: TYPOGRAPHY.fontWeight.bold,\n        lineHeight: TYPOGRAPHY.lineHeight.tight,\n        color: COLORS.neutral.gray[900],\n      },\n      body: {\n        fontSize: TYPOGRAPHY.fontSize.base,\n        fontWeight: TYPOGRAPHY.fontWeight.normal,\n        lineHeight: TYPOGRAPHY.lineHeight.normal,\n        color: COLORS.neutral.gray[700],\n      },\n      caption: {\n        fontSize: TYPOGRAPHY.fontSize.sm,\n        fontWeight: TYPOGRAPHY.fontWeight.normal,\n        lineHeight: TYPOGRAPHY.lineHeight.normal,\n        color: COLORS.neutral.gray[500],\n      },\n    },\n  },\n\n  spacing: {\n    ...SPACING,\n    glass: {\n      container: SPACING.space[16],\n      component: SPACING.space[4],\n      element: SPACING.space[2],\n    },\n  },\n\n  layout: {\n    borderRadius: BORDER_RADIUS,\n    boxShadow: BOX_SHADOW,\n    zIndex: Z_INDEX,\n    breakpoints: BREAKPOINTS,\n  },\n\n  animation: {\n    ...ANIMATION,\n    glass: {\n      appear: {\n        duration: `${ANIMATION.DURATION.normal}ms`,\n        easing: ANIMATION.EASING.easeOut,\n      },\n      hover: {\n        duration: `${ANIMATION.DURATION.fast}ms`,\n        easing: ANIMATION.EASING.easeOut,\n        scale: 1.02,\n      },\n      focus: {\n        duration: `${ANIMATION.DURATION.fast}ms`,\n        easing: ANIMATION.EASING.easeOut,\n      },\n    },\n  },\n\n  glass: AURA_GLASS,\n\n  components: {\n    button: {\n      size: {\n        sm: {\n          height: SPACING.space[8],\n          padding: `${SPACING.space[1]} ${SPACING.space[3]}`,\n          fontSize: TYPOGRAPHY.fontSize.sm,\n        },\n        md: {\n          height: SPACING.space[10],\n          padding: `${SPACING.space[2]} ${SPACING.space[4]}`,\n          fontSize: TYPOGRAPHY.fontSize.base,\n        },\n        lg: {\n          height: SPACING.space[12],\n          padding: `${SPACING.space[3]} ${SPACING.space[6]}`,\n          fontSize: TYPOGRAPHY.fontSize.lg,\n        },\n      },\n      variant: {\n        primary: {\n          background: COLORS.semantic.primary,\n          color: COLORS.neutral.white,\n          hover: {\n            background: COLORS.semantic.primary,\n            shadow: BOX_SHADOW.md,\n          },\n          active: {\n            background: COLORS.semantic.primary,\n            shadow: BOX_SHADOW.sm,\n          },\n        },\n        secondary: {\n          background: COLORS.neutral.white,\n          color: COLORS.neutral.gray[900],\n          border: COLORS.neutral.gray[300],\n          hover: {\n            background: COLORS.neutral.gray[50],\n            border: COLORS.neutral.gray[400],\n          },\n          active: {\n            background: COLORS.neutral.gray[100],\n            border: COLORS.neutral.gray[400],\n          },\n        },\n      },\n    },\n\n    input: {\n      size: {\n        sm: {\n          height: SPACING.space[8],\n          padding: `${SPACING.space[1]} ${SPACING.space[3]}`,\n          fontSize: TYPOGRAPHY.fontSize.sm,\n        },\n        md: {\n          height: SPACING.space[10],\n          padding: `${SPACING.space[2]} ${SPACING.space[4]}`,\n          fontSize: TYPOGRAPHY.fontSize.base,\n        },\n        lg: {\n          height: SPACING.space[12],\n          padding: `${SPACING.space[3]} ${SPACING.space[6]}`,\n          fontSize: TYPOGRAPHY.fontSize.lg,\n        },\n      },\n      state: {\n        default: {\n          border: COLORS.neutral.gray[300],\n          background: COLORS.neutral.white,\n        },\n        focus: {\n          border: COLORS.semantic.primary,\n          background: COLORS.neutral.white,\n          shadow: `0 0 0 3px ${COLORS.semantic.primary}20`,\n        },\n        error: {\n          border: COLORS.semantic.error,\n          background: COLORS.neutral.white,\n        },\n        disabled: {\n          border: COLORS.neutral.gray[200],\n          background: COLORS.neutral.gray[50],\n          opacity: 0.5,\n        },\n      },\n    },\n\n    card: {\n      variant: {\n        default: {\n          background: COLORS.neutral.white,\n          border: COLORS.neutral.gray[200],\n          shadow: BOX_SHADOW.sm,\n          hover: {\n            shadow: BOX_SHADOW.md,\n            transform: \"translateY(-2px)\",\n          },\n        },\n        elevated: {\n          background: COLORS.neutral.white,\n          border: COLORS.neutral.gray[200],\n          shadow: BOX_SHADOW.lg,\n          hover: {\n            shadow: BOX_SHADOW.xl,\n            transform: \"translateY(-4px)\",\n          },\n        },\n        outlined: {\n          background: COLORS.neutral.white,\n          border: COLORS.neutral.gray[300],\n          shadow: \"none\",\n          hover: {\n            border: COLORS.neutral.gray[400],\n            shadow: BOX_SHADOW.sm,\n          },\n        },\n      },\n    },\n  },\n};\n\n// Dark theme tokens\nexport const darkTheme: ThemeTokens = {\n  ...lightTheme,\n  colors: {\n    ...lightTheme.colors,\n    glass: {\n      surface: AURA_GLASS.surfaces.neutral.level2.surface.base,\n      border: AURA_GLASS.surfaces.neutral.level2.border.color,\n      text: AURA_GLASS.surfaces.neutral.level2.text.primary,\n      textSecondary: AURA_GLASS.surfaces.neutral.level2.text.secondary,\n      shadow: AURA_GLASS.surfaces.neutral.level2.outerShadow\n        ? `${AURA_GLASS.surfaces.neutral.level2.outerShadow.x}px ${AURA_GLASS.surfaces.neutral.level2.outerShadow.y}px ${AURA_GLASS.surfaces.neutral.level2.outerShadow.blur}px ${AURA_GLASS.surfaces.neutral.level2.outerShadow.spread}px ${AURA_GLASS.surfaces.neutral.level2.outerShadow.color}`\n        : \"none\",\n    },\n    components: {\n      ...lightTheme.colors.components,\n      button: {\n        primary: COLORS.semantic.primary,\n        secondary: COLORS.neutral.gray[800],\n        danger: COLORS.semantic.error,\n        success: COLORS.semantic.success,\n        warning: COLORS.semantic.warning,\n      },\n      input: {\n        background: COLORS.neutral.gray[900],\n        border: COLORS.neutral.gray[700],\n        focus: COLORS.semantic.primary,\n        error: COLORS.semantic.error,\n      },\n      card: {\n        background: COLORS.neutral.gray[900],\n        border: COLORS.neutral.gray[800],\n        shadow: BOX_SHADOW.sm.replace(\"rgba(0, 0, 0\", \"rgba(255, 255, 255\"),\n      },\n    },\n  },\n\n  typography: {\n    ...lightTheme.typography,\n    glass: {\n      ...lightTheme.typography.glass,\n      heading: {\n        ...lightTheme.typography.glass.heading,\n        color: COLORS.neutral.gray[100],\n      },\n      body: {\n        ...lightTheme.typography.glass.body,\n        color: COLORS.neutral.gray[300],\n      },\n      caption: {\n        ...lightTheme.typography.glass.caption,\n        color: COLORS.neutral.gray[500],\n      },\n    },\n  },\n};\n\n// Glass theme tokens (default glassmorphism theme)\nexport const glassTheme: ThemeTokens = {\n  ...lightTheme,\n  colors: {\n    ...lightTheme.colors,\n    glass: {\n      surface: AURA_GLASS.surfaces.neutral.level3.surface.base,\n      border: AURA_GLASS.surfaces.neutral.level3.border.color,\n      text: AURA_GLASS.surfaces.neutral.level3.text.primary,\n      textSecondary: AURA_GLASS.surfaces.neutral.level3.text.secondary,\n      shadow: AURA_GLASS.surfaces.neutral.level3.outerShadow\n        ? `${AURA_GLASS.surfaces.neutral.level3.outerShadow.x}px ${AURA_GLASS.surfaces.neutral.level3.outerShadow.y}px ${AURA_GLASS.surfaces.neutral.level3.outerShadow.blur}px ${AURA_GLASS.surfaces.neutral.level3.outerShadow.spread}px ${AURA_GLASS.surfaces.neutral.level3.outerShadow.color}`\n        : \"none\",\n    },\n  },\n};\n\n// Utility functions for theme management\nexport const themeUtils = {\n  // Get theme value by path\n  get: (theme: ThemeTokens, path: string): unknown => {\n    const keys = path.split(\".\");\n    let value: unknown = theme;\n\n    for (const key of keys) {\n      if (value && typeof value === \"object\" && key in value) {\n        value = (value as Record<string, unknown>)[key];\n      } else {\n        return undefined;\n      }\n    }\n\n    return value;\n  },\n\n  // Merge themes\n  merge: (\n    baseTheme: ThemeTokens,\n    overrides: Partial<ThemeTokens>\n  ): ThemeTokens => {\n    return {\n      ...baseTheme,\n      ...overrides,\n      colors: {\n        ...baseTheme.colors,\n        ...overrides.colors,\n      },\n      typography: {\n        ...baseTheme.typography,\n        ...overrides.typography,\n      },\n      spacing: {\n        ...baseTheme.spacing,\n        ...overrides.spacing,\n      },\n      layout: {\n        ...baseTheme.layout,\n        ...overrides.layout,\n      },\n      animation: {\n        ...baseTheme.animation,\n        ...overrides.animation,\n      },\n      components: {\n        ...baseTheme.components,\n        ...overrides.components,\n      },\n    };\n  },\n\n  // Create custom theme\n  create: (overrides: Partial<ThemeTokens>): ThemeTokens => {\n    return themeUtils.merge(glassTheme, overrides);\n  },\n};\n\n// Export default themes\nexport { lightTheme as light, darkTheme as dark, glassTheme as glass };\nexport default glassTheme;\n", "/**\n * Legacy SSR compatibility layer.\n *\n * The former styled-components integration offered helpers for collecting\n * styles during server-side rendering. AuraGlass has fully migrated to a\n * build-time CSS pipeline, so these utilities now no-op while keeping the API\n * surface for consumers that still import from `aura-glass/ssr`.\n */\n\nimport React from \"react\";\n\nexport interface StyleSheet {\n  collectStyles: (children: React.ReactNode) => React.ReactElement;\n  getStyleElement: () => React.ReactElement[];\n  getStyleTags: () => string;\n  seal: () => void;\n  instance: null;\n}\n\nconst createFallbackSheet = (): StyleSheet => ({\n  collectStyles: (children: React.ReactNode) => <>{children}</>,\n  getStyleElement: () => [],\n  getStyleTags: () => \"\",\n  seal: () => undefined,\n  instance: null,\n});\n\nexport function createStyleSheet(): StyleSheet {\n  return createFallbackSheet();\n}\n\nexport function collectStyles(): StyleSheet {\n  return createFallbackSheet();\n}\n\nexport const AuraGlassSSRProvider: React.FC<{ children: React.ReactNode }> = ({\n  children,\n}) => <>{children}</>;\n\nexport function isStyledComponentsSSRReady(): boolean {\n  return true;\n}\n\nexport function getStyledComponentsVersion(): null {\n  return null;\n}\n", "\"use client\";\n\n// AuraGlass Design System - Main Exports\n// A comprehensive collection of glassmorphism UI components\n\nexport * from \"./icons\";\n\n// Core Glass Primitives\nexport { GlassAdvanced } from \"./primitives/glass/GlassAdvanced\";\nexport { OptimizedGlassAdvanced } from \"./primitives/glass/OptimizedGlassAdvanced\";\nexport {\n  GlassCore as Glass,\n  default as GlassPrimitive,\n} from \"./primitives/GlassCore\";\nexport { MotionFramer } from \"./primitives/motion/MotionFramer\";\nexport { MotionNative as Motion } from \"./primitives/MotionNative\";\nexport { OptimizedGlassCore as OptimizedGlass } from \"./primitives/OptimizedGlassCore\";\nexport { LiquidGlassMaterial } from \"./primitives/LiquidGlassMaterial\";\nexport {\n  LiquidGlassBackdropSampler,\n  type LiquidGlassBackdropSamplerProps,\n} from \"./primitives/LiquidGlassBackdropSampler\";\nexport {\n  LiquidGlassConcentricFrame,\n  getConcentricRadiusValue,\n  type LiquidGlassConcentricFrameProps,\n} from \"./primitives/LiquidGlassConcentricFrame\";\nexport {\n  LiquidGlassEffectGroup,\n  useLiquidGlassEffectGroup,\n  type LiquidGlassEffectGroupProps,\n} from \"./primitives/LiquidGlassEffectGroup\";\nexport {\n  LiquidGlassLayerProvider,\n  LiquidGlassSurfaceLayer,\n  useLiquidGlassLayer,\n  type LiquidGlassLayerProviderProps,\n} from \"./primitives/LiquidGlassLayerProvider\";\nexport {\n  LiquidGlassScrollEdge,\n  type LiquidGlassScrollEdgeProps,\n} from \"./primitives/LiquidGlassScrollEdge\";\nexport {\n  LiquidGlassDestination,\n  LiquidGlassSource,\n  LiquidGlassTransitionProvider as LiquidGlassSourceTransition,\n  LiquidGlassTransitionProvider,\n  useLiquidGlassTransition,\n  type LiquidGlassDestinationProps,\n  type LiquidGlassSourceProps,\n  type LiquidGlassTransitionProviderProps as LiquidGlassSourceTransitionProps,\n  type LiquidGlassTransitionProviderProps,\n} from \"./primitives/LiquidGlassSourceTransition\";\nexport {\n  LIQUID_GLASS_FALLBACK_BACKDROP_SAMPLE,\n  sampleLiquidGlassBackdrop,\n  useLiquidGlassBackdrop,\n  type LiquidGlassBackdropOptions,\n  type LiquidGlassBackdropSample,\n  type LiquidGlassContrastHint,\n} from \"./hooks/useLiquidGlassBackdrop\";\n\n// Localization Provider\nexport { GlassLocalizationProvider } from \"./lib/GlassLocalizationProvider\";\n\n// Theme Components\nexport { GlassContext } from \"./theme/GlassContext\";\nexport { ThemeProvider } from \"./theme/ThemeProvider\";\nexport { PersonaPicker } from \"./components/theme/PersonaPicker\";\n\n// Layout & Structure Components\nexport { GlassAppShell } from \"./components/layout/GlassAppShell\";\nexport { ContentSection } from \"./components/layout/GlassAppShell\";\nexport { Box } from \"./components/layout/Box\";\nexport { GlassBox } from \"./components/layout/GlassBox\";\nexport { GlassContainer } from \"./components/layout/GlassContainer\";\nexport { GlassFlex } from \"./components/layout/GlassFlex\";\nexport { GlassGrid } from \"./components/layout/GlassGrid\";\nexport { GlassMasonry } from \"./components/layout/GlassMasonry\";\nexport { GlassScrollArea } from \"./components/layout/GlassScrollArea\";\nexport { GlassSeparator } from \"./components/layout/GlassSeparator\";\nexport { GlassSplitPane } from \"./components/layout/GlassSplitPane\";\nexport { GlassStack } from \"./components/layout/GlassStack\";\nexport { HStack } from \"./components/layout/HStack\";\nexport { VStack } from \"./components/layout/VStack\";\nexport { OptimizedGlassContainer } from \"./components/layout/OptimizedGlassContainer\";\nexport { ZSpaceAppLayout } from \"./components/layout/ZSpaceAppLayout\";\n\n// Navigation & Chrome Components\nexport { GlassBottomNav } from \"./components/navigation/GlassBottomNav\";\nexport { GlassBreadcrumb } from \"./components/navigation/GlassBreadcrumb\";\nexport { GlassCommandBar } from \"./components/navigation/GlassCommandBar\";\nexport { GlassContextMenu } from \"./components/navigation/GlassContextMenu\";\nexport {\n  GlassDropdownMenu,\n  GlassDropdownMenuCheckboxItem,\n  GlassDropdownMenuContent,\n  GlassDropdownMenuItem,\n  GlassDropdownMenuLabel,\n  GlassDropdownMenuRadioGroup,\n  GlassDropdownMenuRadioItem,\n  GlassDropdownMenuSeparator,\n  GlassDropdownMenuShortcut,\n  GlassDropdownMenuSub,\n  GlassDropdownMenuSubContent,\n  GlassDropdownMenuSubTrigger,\n  GlassDropdownMenuTrigger,\n} from \"./components/navigation/GlassDropdownMenu\";\nexport { GlassHeader } from \"./components/navigation/GlassHeader\";\nexport { GlassMenubar } from \"./components/navigation/GlassMenubar\";\nexport {\n  GlassMenuPrimitive,\n  GlassMenuPrimitiveContent,\n  GlassMenuPrimitiveItem,\n  GlassMenuPrimitiveRoot,\n} from \"./components/navigation/GlassMenuPrimitive\";\nexport type {\n  GlassMenuPrimitiveContentProps,\n  GlassMenuPrimitiveItemProps,\n  GlassMenuPrimitiveRootProps,\n} from \"./components/navigation/GlassMenuPrimitive\";\nexport { GlassMobileNav } from \"./components/navigation/GlassMobileNav\";\nexport {\n  GlassNavigation,\n  GlassNavigation as GlassNavbar,\n} from \"./components/navigation/GlassNavigation\";\nexport type {\n  GlassNavigationProps,\n  GlassNavigationProps as GlassNavbarProps,\n} from \"./components/navigation/types\";\nexport { GlassNavigationMenu } from \"./components/navigation/GlassNavigationMenu\";\nexport { GlassPagination } from \"./components/navigation/GlassPagination\";\nexport {\n  GlassPageTabs,\n  type GlassPageTab,\n  type GlassPageTabsProps,\n} from \"./components/navigation/GlassPageTabs\";\nexport { GlassResponsiveNav } from \"./components/navigation/GlassResponsiveNav\";\nexport { GlassResponsiveNav as ResponsiveNavigation } from \"./components/navigation/GlassResponsiveNav\"; // Alias export\nexport { GlassSegmentedControl } from \"./components/navigation/GlassSegmentedControl\";\nexport { GlassSidebar } from \"./components/navigation/GlassSidebar\";\nexport { GlassTabBar } from \"./components/navigation/GlassTabBar\";\nexport { GlassTabItem } from \"./components/navigation/GlassTabItem\";\nexport {\n  GlassTabs,\n  Tabs as GlassTabsRoot,\n  TabsContent as GlassTabsContent,\n  TabsList as GlassTabsList,\n  TabsTrigger as GlassTabsTrigger,\n} from \"./components/navigation/GlassTabs\";\nexport { EnhancedGlassTabs } from \"./components/navigation/EnhancedGlassTabs\";\nexport { GlassToolbar } from \"./components/navigation/GlassToolbar\";\nexport {\n  LiquidGlassBottomAccessory,\n  type LiquidGlassBottomAccessoryProps,\n} from \"./components/navigation/LiquidGlassBottomAccessory\";\nexport {\n  LiquidGlassInsetSidebar,\n  type LiquidGlassInsetSidebarProps,\n} from \"./components/navigation/LiquidGlassInsetSidebar\";\nexport {\n  LiquidGlassInspectorPanel,\n  type LiquidGlassInspectorPanelProps,\n} from \"./components/navigation/LiquidGlassInspectorPanel\";\nexport {\n  LiquidGlassSegmentedControl,\n  type LiquidGlassSegmentedControlProps,\n} from \"./components/navigation/LiquidGlassSegmentedControl\";\nexport {\n  LiquidGlassTabBar,\n  type LiquidGlassTabBarProps,\n} from \"./components/navigation/LiquidGlassTabBar\";\nexport {\n  LiquidGlassToolbar,\n  type LiquidGlassToolbarProps,\n} from \"./components/navigation/LiquidGlassToolbar\";\n\n// Modal & Overlay Components\nexport { GlassBottomSheet } from \"./components/modal/GlassBottomSheet\";\nexport { GlassDialog } from \"./components/modal/GlassDialog\";\nexport { GlassDrawer } from \"./components/modal/GlassDrawer\";\nexport { GlassHoverCard } from \"./components/modal/GlassHoverCard\";\nexport { GlassModal } from \"./components/modal/GlassModal\";\nexport { GlassPopover } from \"./components/modal/GlassPopover\";\nexport {\n  LiquidGlassAdaptiveSheet,\n  type LiquidGlassAdaptiveSheetProps,\n} from \"./components/modal/LiquidGlassAdaptiveSheet\";\nexport {\n  LiquidGlassPopoverMenu,\n  type LiquidGlassPopoverMenuProps,\n} from \"./components/modal/LiquidGlassPopoverMenu\";\n\n// Form & Input Components\nexport { GlassCheckbox } from \"./components/input/GlassCheckbox\";\nexport { GlassCheckboxGroup } from \"./components/input/GlassCheckboxGroup\";\nexport { GlassColorPicker } from \"./components/input/GlassColorPicker\";\nexport {\n  GlassCombobox,\n  type GlassComboboxOption,\n  type GlassComboboxProps,\n} from \"./components/input/GlassCombobox\";\nexport {\n  GlassDateField,\n  type GlassDateFieldProps,\n} from \"./components/input/GlassDateField\";\nexport { GlassDatePicker } from \"./components/input/GlassDatePicker\";\nexport { GlassDateRangePicker } from \"./components/input/GlassDateRangePicker\";\nexport {\n  GlassFieldGroup,\n  type GlassFieldGroupProps,\n} from \"./components/input/GlassFieldGroup\";\nexport { GlassForm } from \"./components/input/GlassForm\";\nexport {\n  GlassFormField,\n  type GlassFormFieldProps,\n} from \"./components/input/GlassFormField\";\nexport { GlassFormStepper } from \"./components/input/GlassFormStepper\";\nexport { GlassFormTable } from \"./components/input/GlassFormTable\";\nexport { GlassInput } from \"./components/input/GlassInput\";\nexport { GlassLabel } from \"./components/input/GlassLabel\";\nexport { GlassMultiSelect } from \"./components/input/GlassMultiSelect\";\nexport { GlassMultiStepForm } from \"./components/input/GlassMultiStepForm\";\nexport { GlassRadioGroup } from \"./components/input/GlassRadioGroup\";\nexport {\n  GlassSearchField,\n  type GlassSearchFieldProps,\n} from \"./components/input/GlassSearchField\";\nexport { GlassSelect } from \"./components/input/GlassSelect\";\nexport {\n  default as GlassSelectCompound,\n  Select as GlassSelectRoot,\n  SelectContent as GlassSelectContent,\n  SelectGroup as GlassSelectGroup,\n  SelectItem as GlassSelectItem,\n  SelectLabel as GlassSelectLabel,\n  SelectScrollDownButton as GlassSelectScrollDownButton,\n  SelectScrollUpButton as GlassSelectScrollUpButton,\n  SelectSeparator as GlassSelectSeparator,\n  SelectTrigger as GlassSelectTrigger,\n  SelectValue as GlassSelectValue,\n} from \"./components/input/GlassSelectCompound\";\nexport { GlassSlider } from \"./components/input/GlassSlider\";\nexport { GlassStep } from \"./components/input/GlassStep\";\nexport { GlassStepIcon } from \"./components/input/GlassStepIcon\";\nexport { GlassStepLabel } from \"./components/input/GlassStepLabel\";\nexport { GlassSwitch } from \"./components/input/GlassSwitch\";\nexport { GlassTextarea } from \"./components/input/GlassTextarea\";\nexport {\n  GlassTimeField,\n  type GlassTimeFieldProps,\n} from \"./components/input/GlassTimeField\";\nexport { GlassToggle } from \"./components/input/GlassToggle\";\nexport {\n  GlassValidationMessage,\n  type GlassValidationMessageProps,\n} from \"./components/input/GlassValidationMessage\";\nexport { GlassWizard } from \"./components/input/GlassWizard\";\nexport {\n  LiquidGlassControlGroup,\n  type LiquidGlassControlGroupProps,\n} from \"./components/input/LiquidGlassControlGroup\";\n\n// Button & Card Components\nexport { GlassButton } from \"./components/button/GlassButton\";\nexport { GlassButton as Button } from \"./components/button/GlassButton\"; // Alias export\nexport {\n  LiquidGlassButtonStyle,\n  type LiquidGlassButtonStyleProps,\n} from \"./components/button/LiquidGlassButtonStyle\";\nexport { GlassCardLink } from \"./components/card/glass-card-link\";\nexport { GlassCard } from \"./components/card/GlassCard\";\nexport { GlassCard as Card } from \"./components/card/GlassCard\"; // Alias export\nexport { GlowingCard } from \"./components/card/GlowingCard\";\nexport * from \"./components/marketing\";\n\n// Chart Components\nexport { GlassAreaChart } from \"./components/charts/GlassAreaChart\";\nexport { GlassBarChart } from \"./components/charts/GlassBarChart\";\nexport { GlassChart } from \"./components/charts/GlassChart\";\nexport { GlassDataChart } from \"./components/charts/GlassDataChart\";\nexport { GlassDataChart as DataChart } from \"./components/charts/GlassDataChart\";\nexport { GlassLineChart } from \"./components/charts/GlassLineChart\";\nexport { GlassPieChart } from \"./components/charts/GlassPieChart\";\n\n// Data Display Components\nexport { GlassAccordion } from \"./components/data-display/GlassAccordion\";\nexport { GlassAlert } from \"./components/data-display/GlassAlert\";\nexport { GlassAvatar } from \"./components/data-display/GlassAvatar\";\nexport { GlassBadge } from \"./components/data-display/GlassBadge\";\nexport { GlassBadgeLine } from \"./components/data-display/GlassBadgeLine\";\nexport { GlassDataGrid } from \"./components/data-display/GlassDataGrid\";\nexport { GlassDataGridPro } from \"./components/data-display/GlassDataGridPro\";\nexport { GlassDataTable } from \"./components/data-display/GlassDataTable\";\nexport { GlassDiffViewer } from \"./components/data-display/GlassDiffViewer\";\nexport {\n  GlassEmptyState,\n  type GlassEmptyStateProps,\n} from \"./components/data-display/GlassEmptyState\";\nexport {\n  GlassErrorState,\n  type GlassErrorStateProps,\n} from \"./components/data-display/GlassErrorState\";\nexport { GlassHeatmap } from \"./components/data-display/GlassHeatmap\";\nexport { GlassJSONViewer } from \"./components/data-display/GlassJSONViewer\";\nexport {\n  GlassLoadingState,\n  type GlassLoadingStateProps,\n} from \"./components/data-display/GlassLoadingState\";\nexport { GlassLoadingSkeleton } from \"./components/data-display/GlassLoadingSkeleton\";\nexport { GlassMetricChip } from \"./components/data-display/GlassMetricChip\";\nexport { GlassProgress } from \"./components/data-display/GlassProgress\";\nexport { GlassSchemaViewer } from \"./components/data-display/GlassSchemaViewer\";\nexport { GlassSparkline } from \"./components/data-display/GlassSparkline\";\nexport { GlassStatusDot } from \"./components/data-display/GlassStatusDot\";\nexport { GlassTimeline } from \"./components/data-display/GlassTimeline\";\nexport { GlassToast } from \"./components/data-display/GlassToast\";\nexport {\n  GlassToastProvider,\n  GlassToastViewport,\n  useToast,\n  type GlassToastProviderProps,\n  type GlassToastViewportProps,\n} from \"./components/data-display/GlassToastProvider\";\nexport { GlassVirtualTable } from \"./components/data-display/GlassVirtualTable\";\nexport {\n  LiquidGlassBadgeCluster,\n  type LiquidGlassBadgeClusterProps,\n} from \"./components/data-display/LiquidGlassBadgeCluster\";\nexport {\n  LiquidGlassCarouselRail,\n  type LiquidGlassCarouselRailProps,\n} from \"./components/data-display/LiquidGlassCarouselRail\";\n\n// New Components - Phase 1 (High Priority)\nexport {\n  GlassNotificationCenter,\n  GlassNotificationItem,\n  GlassNotificationProvider,\n  useNotifications,\n} from \"./components/data-display/GlassNotificationCenter\";\nexport {\n  GlassSkeleton,\n  GlassSkeletonAvatar,\n  GlassSkeletonButton,\n} from \"./components/data-display/GlassSkeleton\";\nexport {\n  GlassSkeletonCard,\n  GlassSkeletonLoader,\n  GlassSkeletonText,\n} from \"./components/data-display/GlassSkeletonLoader\";\nexport {\n  GlassTooltip,\n  GlassTooltipContent,\n  GlassTooltipTrigger,\n} from \"./components/modal/GlassTooltip\";\n\n// New Components - Phase 2 (Medium Priority)\nexport {\n  GlassAnimated,\n  GlassAnimationSequence,\n  GlassAnimationTimeline,\n  GlassMotionController,\n  animationPresets,\n  useMotionController,\n} from \"./components/animations/GlassMotionController\";\nexport {\n  GlassAnimatedCounter,\n  GlassAnimatedNumber,\n  GlassAnimatedStat,\n  useAnimatedNumber,\n} from \"./components/data-display/GlassAnimatedNumber\";\nexport {\n  GlassCodeEditor,\n  GlassCodeEditorWithFiles,\n} from \"./components/interactive/GlassCodeEditor\";\nexport { GlassColorSchemeGenerator } from \"./components/interactive/GlassColorSchemeGenerator\";\n\n// New Components - Phase 3 (Future Phase)\nexport {\n  GlassA11yAuditor,\n  useA11yAudit,\n} from \"./components/interactive/GlassA11yAuditor\";\nexport {\n  GlassComponentPlayground,\n  createPlaygroundExample,\n  usePlaygroundExample,\n} from \"./components/interactive/GlassComponentPlayground\";\nexport {\n  GlassMindMap,\n  useMindMap,\n} from \"./components/interactive/GlassMindMap\";\nexport { GlassWhiteboard } from \"./components/interactive/GlassWhiteboard\";\nexport {\n  HoudiniGlassProvider,\n  useGlassEffect,\n  useHoudiniGlass,\n} from \"./components/houdini/HoudiniGlassProvider\";\nexport { glassPresets } from \"./components/houdini/index\";\n\n// Interactive Components\nexport { GlassAdvancedSearch } from \"./components/interactive/GlassAdvancedSearch\";\nexport { GlassAvatarGroup } from \"./components/interactive/GlassAvatarGroup\";\nexport { GlassCarousel } from \"./components/interactive/GlassCarousel\";\nexport { GlassChat } from \"./components/interactive/GlassChat\";\nexport { GlassChatInput } from \"./components/interactive/GlassChatInput\";\nexport { GlassCoachmarks } from \"./components/interactive/GlassCoachmarks\";\nexport { GlassCommand } from \"./components/interactive/GlassCommand\";\nexport { GlassCommandPalette } from \"./components/interactive/GlassCommandPalette\";\nexport {\n  LiquidGlassCommandSurface,\n  type LiquidGlassCommandSurfaceProps,\n} from \"./components/interactive/LiquidGlassCommandSurface\";\nexport {\n  LiquidGlassMapControls,\n  type LiquidGlassMapControlsProps,\n} from \"./components/interactive/LiquidGlassMapControls\";\nexport { GlassCommentThread } from \"./components/interactive/GlassCommentThread\";\nexport { GlassDraggable } from \"./components/interactive/GlassDraggable\";\nexport { GlassFacetSearch } from \"./components/interactive/GlassFacetSearch\";\nexport { GlassFileExplorer } from \"./components/interactive/GlassFileExplorer\";\nexport { GlassFileTree } from \"./components/interactive/GlassFileTree\";\nexport { GlassFileUpload } from \"./components/interactive/GlassFileUpload\";\nexport {\n  GlassFilterBar,\n  type GlassFilterBarFilter,\n  type GlassFilterBarProps,\n} from \"./components/interactive/GlassFilterBar\";\nexport { GlassFilterPanel } from \"./components/interactive/GlassFilterPanel\";\nexport { GlassFocusRing } from \"./components/interactive/GlassFocusRing\";\nexport { GlassFormBuilder } from \"./components/interactive/GlassFormBuilder\";\nexport { GlassGallery } from \"./components/interactive/GlassGallery\";\nexport { GlassGradientPicker } from \"./components/interactive/GlassGradientPicker\";\nexport { GlassImageViewer } from \"./components/interactive/GlassImageViewer\";\nexport { GlassInfiniteScroll } from \"./components/interactive/GlassInfiniteScroll\";\nexport { GlassInlineEdit } from \"./components/interactive/GlassInlineEdit\";\nexport { GlassKanban } from \"./components/interactive/GlassKanban\";\nexport { GlassKeyValueEditor } from \"./components/interactive/GlassKeyValueEditor\";\nexport { GlassLazyImage } from \"./components/interactive/GlassLazyImage\";\nexport { GlassMentionList } from \"./components/interactive/GlassMentionList\";\nexport { GlassMessageList } from \"./components/interactive/GlassMessageList\";\nexport { GlassQueryBuilder } from \"./components/interactive/GlassQueryBuilder\";\nexport { GlassReactionBar } from \"./components/interactive/GlassReactionBar\";\nexport { GlassSearchInterface } from \"./components/interactive/GlassSearchInterface\";\nexport { GlassSpotlight } from \"./components/interactive/GlassSpotlight\";\nexport { GlassStepper } from \"./components/interactive/GlassStepper\";\nexport { GlassTagInput } from \"./components/interactive/GlassTagInput\";\nexport { GlassThemeDemo } from \"./components/interactive/GlassThemeDemo\";\nexport { GlassThemeSwitcher } from \"./components/interactive/GlassThemeSwitcher\";\nexport { GlassUserPresence } from \"./components/interactive/GlassUserPresence\";\nexport { GlassVideoPlayer } from \"./components/interactive/GlassVideoPlayer\";\nexport { GlassVirtualList } from \"./components/interactive/GlassVirtualList\";\nexport { GlassIntelligentFormBuilder } from \"./components/ai/GlassIntelligentFormBuilder\";\n\n// Dashboard Components\nexport { GlassActivityFeed } from \"./components/dashboard/GlassActivityFeed\";\nexport { GlassChartWidget } from \"./components/dashboard/GlassChartWidget\";\nexport { GlassKPICard } from \"./components/dashboard/GlassKPICard\";\nexport { GlassMetricCard } from \"./components/dashboard/GlassMetricCard\";\nexport { GlassStatCard } from \"./components/dashboard/GlassStatCard\";\nexport { DimensionalDashboardContainer } from \"./components/dashboard/DimensionalDashboardContainer\";\n\n// Calendar Components\nexport { GlassCalendar } from \"./components/calendar/GlassCalendar\";\n\n// Template Components\nexport { GlassDashboard } from \"./components/templates/dashboard/GlassDashboard\";\nexport { GlassDetailView } from \"./components/templates/detail/GlassDetailView\";\nexport { GlassFormTemplate } from \"./components/templates/forms/GlassFormTemplate\";\nexport { GlassFormWizardSteps } from \"./components/templates/forms/GlassFormWizardSteps\";\nexport { GlassWizardTemplate } from \"./components/templates/forms/GlassWizardTemplate\";\nexport { GlassListView } from \"./components/templates/list/GlassListView\";\n\n// Additional Button Components\nexport { GlassFab } from \"./components/button/GlassFab\";\nexport { MagneticButton } from \"./components/button/GlassMagneticButton\";\n\n// Missing Data Display Components (from README)\nexport { GlassChip } from \"./components/data-display/GlassChip\";\nexport { GlassDivider } from \"./components/data-display/GlassDivider\";\nexport { GlassGanttChart } from \"./components/data-display/GlassGanttChart\";\nexport { GlassKanbanBoard } from \"./components/data-display/GlassKanbanBoard\";\nexport { GlassMetricsGrid } from \"./components/data-display/GlassMetricsGrid\";\nexport { GlassTreeView } from \"./components/data-display/GlassTreeView\";\n\n// Specialized Components\nexport { DynamicAtmosphere } from \"./components/backgrounds/GlassDynamicAtmosphere\";\n\n// Missing Layout Components (from README)\nexport { GlassMasonryGrid } from \"./components/layouts/GlassMasonryGrid\";\n\n// Missing Editor & Chat Components (from README)\nexport { GlassRichTextEditor } from \"./components/editor/GlassRichTextEditor\";\nexport { GlassTypingIndicator } from \"./components/chat/GlassTypingIndicator\";\n\n// Missing Advanced Components (from README)\nexport { ContrastGuard } from \"./components/accessibility/ContrastGuard\";\nexport { GlassA11y } from \"./components/accessibility/GlassA11y\";\nexport {\n  LiquidGlassGPU,\n  LiquidGlassGPUDriver,\n} from \"./components/advanced/LiquidGlassGPU\";\nexport { GlassParallaxLayers } from \"./components/advanced/GlassParallaxLayers\";\nexport { GlassMeshGradient } from \"./components/advanced/GlassMeshGradient\";\nexport { GlassParticles } from \"./components/advanced/GlassParticles\";\nexport { GlassMagneticCursor } from \"./components/advanced/GlassMagneticCursor\";\nexport { GlassLiquidTransition } from \"./components/advanced/GlassLiquidTransition\";\nexport { GlassWebGLShader } from \"./components/advanced/GlassWebGLShader\";\nexport {\n  GlassPredictiveEngine,\n  GlassPredictiveEngineProvider,\n  GlassPredictionIndicator,\n  usePredictiveEngine,\n  useInteractionRecorder,\n  predictiveEnginePresets,\n} from \"./components/advanced/GlassPredictiveEngine\";\nexport {\n  GlassEyeTracking,\n  GlassEyeTrackingProvider,\n  GlassEyeTrackingCalibration,\n  GlassGazeResponsive,\n  GlassGazeVisualization,\n  useEyeTracking,\n  eyeTrackingPresets,\n} from \"./components/advanced/GlassEyeTracking\";\nexport {\n  GlassAchievementSystem,\n  GlassAchievementProvider,\n  useAchievements,\n  GlassAchievementDashboard,\n  GlassAchievementNotifications,\n  useAchievementTracker,\n  achievementPresets,\n} from \"./components/advanced/GlassAchievementSystem\";\nexport {\n  GlassBiometricAdaptation,\n  GlassBiometricAdaptationProvider,\n  GlassStressResponsive,\n  GlassBiometricDashboard,\n  useBiometricAdaptation,\n  BiometricAdaptationEngine,\n  BiometricStressDetector,\n  biometricAdaptationPresets,\n} from \"./components/advanced/GlassBiometricAdaptation\";\nexport {\n  GlassEngine,\n  GlassEngineProvider,\n  useGlassEngine,\n  AdaptiveGlass,\n  GlassOpacityEngine,\n  GlassColorTinting,\n  GlassTextureVariations,\n  EnvironmentalGlass,\n  GlassEngineDemo,\n} from \"./components/advanced/GlassEngine\";\nexport { BrandColorIntegration } from \"./components/advanced/BrandColorIntegration\";\nexport {\n  GlassMetaEngineProvider,\n  useGlassMetaEngine,\n  GlassMetaDashboard,\n  useMetaEngineRecorder,\n  metaEnginePresets,\n} from \"./components/advanced/GlassMetaEngine\";\nexport {\n  GlassNeuroSyncProvider,\n  useNeuroSync,\n  GlassNeuroMetricsDashboard,\n  GlassNeuroFeedback,\n  useNeuroAdaptive,\n  neuroSyncPresets,\n} from \"./components/advanced/GlassNeuroSync\";\nexport {\n  GlassSelfHealingProvider,\n  useSelfHealing,\n  GlassSelfHealingWrapper,\n  GlassSelfHealingDashboard,\n  useComponentSelfHealing,\n  selfHealingPresets,\n} from \"./components/advanced/GlassSelfHealingSystem\";\nexport { useAutoComposer } from \"./components/advanced/GlassAutoComposer\";\nexport {\n  GlassContextualEngine,\n  GlassContextualEngineProvider,\n  GlassContextualDashboard,\n  useContextualEngine,\n  useContextualAdaptation,\n  contextualEnginePresets,\n} from \"./components/advanced/GlassContextualEngine\";\nexport {\n  GlassPerformanceOptimization,\n  GlassPerformanceProvider,\n  GlassPerformanceMonitor,\n  EfficientGlassRendering,\n  LazyGlassLoading,\n  ReducedMotionGlass,\n  BatteryAwareGlass,\n  ProgressiveGlassEnhancement,\n} from \"./components/advanced/GlassPerformanceOptimization\";\nexport { useQuantumStates } from \"./components/advanced/GlassQuantumStates\";\nexport { GlassFoldableSupport } from \"./components/advanced/GlassFoldableSupport\";\nexport { GlassOrientationEffects } from \"./components/advanced/GlassOrientationEffects\";\nexport { GlassContextAware } from \"./components/advanced/GlassContextAware\";\n\n// Spatial Computing Components\nexport { default as SpatialComputingEngine } from \"./components/spatial/SpatialComputingEngine\";\n\n// Advanced & Experimental Components\nexport { AIGlassThemeProvider } from \"./components/ai/AIGlassThemeProvider\";\nexport { GlassDeepDreamGlass } from \"./components/ai/GlassDeepDreamGlass\";\nexport { GlassGANGenerator } from \"./components/ai/GlassGANGenerator\";\nexport { GlassGenerativeArt } from \"./components/ai/GlassGenerativeArt\";\nexport { GlassIntelligentSearch } from \"./components/search/GlassIntelligentSearch\";\nexport {\n  LiquidGlassSearchField,\n  type LiquidGlassSearchFieldProps,\n  type LiquidGlassSearchResult,\n} from \"./components/search/LiquidGlassSearchField\";\nexport {\n  LiquidGlassSearchTab,\n  type LiquidGlassSearchTabProps,\n} from \"./components/search/LiquidGlassSearchTab\";\nexport { GlassLiveFilter } from \"./components/ai/GlassLiveFilter\";\nexport { GlassMusicVisualizer } from \"./components/ai/GlassMusicVisualizer\";\nexport { NeuralWeightVisualization } from \"./components/ai/NeuralWeightVisualization\";\nexport { NeuromorphicLearningNetwork } from \"./components/ai/NeuromorphicLearningNetwork\";\nexport { GlassStyleTransfer } from \"./components/ai/GlassStyleTransfer\";\nexport { GlassTransitions } from \"./components/animations/GlassTransitions\";\n// Advanced AR / R3F-powered components are exposed via the `aura-glass/three` entrypoint.\nexport { AccessibilityProvider } from \"./components/accessibility/AccessibilityProvider\";\nexport { GlassFocusIndicators } from \"./components/accessibility/GlassFocusIndicators\";\nexport {\n  GlassHighContrast,\n  GlassKeyboardNav,\n  GlassMotionControls,\n  GlassScreenReader,\n} from \"./components/accessibility/GlassA11y\";\nexport { EnhancedGlassButton } from \"./components/button/EnhancedGlassButton\";\nexport {\n  AuraElementInteractionPlugin,\n  GalileoElementInteractionPlugin,\n  type AuraInteractionConfig,\n  type GalileoInteractionConfig,\n} from \"./components/charts/plugins/GalileoElementInteractionPlugin\";\nexport { InterpolationUtils } from \"./animations/physics/interpolation\";\n// AuroraPro (R3F-powered) is exposed via the `aura-glass/three` entrypoint.\nexport { Glass3DEngine } from \"./components/effects/Glass3DEngine\";\nexport { GlassMorphingEngine } from \"./components/effects/GlassMorphingEngine\";\nexport { GlassPhysicsEngine } from \"./components/effects/GlassPhysicsEngine\";\nexport { GlassAdvancedDataViz } from \"./components/visualization/GlassAdvancedDataViz\";\nexport { GlassChartsDemo } from \"./components/website-components/GlassChartsDemo\";\nexport { Glass360Viewer } from \"./components/immersive/Glass360Viewer\";\nexport { GlassARPreview } from \"./components/immersive/GlassARPreview\";\nexport { GlassFluidSimulation } from \"./components/immersive/GlassFluidSimulation\";\nexport { GlassHologram } from \"./components/immersive/GlassHologram\";\nexport { GlassParticleField } from \"./components/immersive/GlassParticleField\";\nexport { GlassVortexPortal } from \"./components/immersive/GlassVortexPortal\";\nexport { GlassAuroraDisplay } from \"./components/atmospheric/GlassAuroraDisplay\";\nexport { GlassBiomeSimulator } from \"./components/atmospheric/GlassBiomeSimulator\";\nexport { GlassNebulaClouds } from \"./components/atmospheric/GlassNebulaClouds\";\nexport { GlassWeatherGlass } from \"./components/atmospheric/GlassWeatherGlass\";\nexport { GlassMoodRing } from \"./components/experiential/GlassMoodRing\";\nexport { GlassLiveCursorPresence } from \"./components/advanced/GlassLiveCursorPresence\";\nexport { GlassReactions } from \"./components/advanced/GlassReactions\";\nexport {\n  GlassSpatialAudio,\n  GlassSpatialAudioProvider,\n  GlassAudioReactive,\n  GlassSpatialVisualizer,\n  useSpatialAudio,\n} from \"./components/advanced/GlassSpatialAudio\";\nexport { LivingEcosystemSimulator } from \"./components/advanced/LivingEcosystemSimulator\";\nexport { MolecularBondingInterface } from \"./components/advanced/MolecularBondingInterface\";\nexport { MultiDimensionalGestureRecognizer } from \"./components/advanced/MultiDimensionalGestureRecognizer\";\nexport { GlassCoherenceIndicator } from \"./components/quantum/GlassCoherenceIndicator\";\nexport { GlassProbabilityCloud } from \"./components/quantum/GlassProbabilityCloud\";\nexport { GlassQuantumField } from \"./components/quantum/GlassQuantumField\";\nexport { GlassQuantumTunnel } from \"./components/quantum/GlassQuantumTunnel\";\nexport { GlassSuperpositionalMenu } from \"./components/quantum/GlassSuperpositionalMenu\";\nexport { GlassWaveFunction } from \"./components/quantum/GlassWaveFunction\";\nexport { QuantumEntanglementVisualizer } from \"./components/quantum/QuantumEntanglementVisualizer\";\nexport {\n  QuantumNeuromorphicEngine,\n  runQuantumNeuromorphicCycle,\n} from \"./components/quantum/QuantumNeuromorphicEngine\";\nexport {\n  CollaborativeGlassWorkspace,\n  GlassTeamCursors,\n  GlassTeamCursorsWithEffects,\n} from \"./components/collaboration/CollaborativeGlassWorkspace\";\nexport {\n  CollaborationProvider,\n  GlassCollaborationProvider,\n  useCollaboration,\n  type CollaborationActivity,\n  type CollaborationComment,\n  type CollaborationEdit,\n  type CollaborationUser,\n} from \"./components/collaboration/GlassCollaborationProvider\";\nexport { GlassCollaborativeCursor } from \"./components/collaboration/GlassCollaborativeCursor\";\nexport { GlassCollaborationDashboard } from \"./components/collaboration/GlassCollaborationDashboard\";\nexport { GlassCollaborativeComments } from \"./components/collaboration/GlassCollaborativeComments\";\nexport { MultiUserGlassEditor } from \"./components/collaboration/MultiUserGlassEditor\";\nexport { GlassDragDropProvider } from \"./components/cms/GlassDragDropProvider\";\nexport { GlassPageBuilder } from \"./components/cms/GlassPageBuilder\";\nexport { GlassCanvas } from \"./components/cms/GlassCanvas\";\nexport { GlassComponentPalette } from \"./components/cms/GlassComponentPalette\";\nexport { GlassPageStructure } from \"./components/cms/GlassPageStructure\";\nexport { GlassPropertyPanel } from \"./components/cms/GlassPropertyPanel\";\nexport { GlassEcommerceProvider } from \"./components/ecommerce/GlassEcommerceProvider\";\nexport {\n  GlassSmartShoppingCart,\n  GlassSmartShoppingCart as SmartShoppingCart,\n  type SmartShoppingCartProps,\n} from \"./components/ecommerce/GlassSmartShoppingCart\";\nexport { GlassProductRecommendations } from \"./components/ecommerce/GlassProductRecommendations\";\nexport { GlassImageProcessingProvider } from \"./components/image/GlassImageProcessingProvider\";\nexport { GlassIntelligentImageUploader } from \"./components/image/GlassIntelligentImageUploader\";\nexport { GlassMediaProvider } from \"./components/media/GlassMediaProvider\";\nexport { GlassAdvancedVideoPlayer } from \"./components/media/GlassAdvancedVideoPlayer\";\nexport { GlassAdvancedAudioPlayer } from \"./components/media/GlassAdvancedAudioPlayer\";\nexport {\n  LiquidGlassMediaControls as GlassMediaControls,\n  LiquidGlassMediaControls,\n  type LiquidGlassMediaControlsProps as GlassMediaControlsProps,\n  type LiquidGlassMediaControlsProps,\n} from \"./components/media/LiquidGlassMediaControls\";\nexport {\n  LiquidGlassNowPlayingBar,\n  type LiquidGlassNowPlayingBarProps,\n} from \"./components/media/LiquidGlassNowPlayingBar\";\nexport {\n  LiquidGlassPhotoInspector,\n  type LiquidGlassPhotoInspectorProps,\n} from \"./components/media/LiquidGlassPhotoInspector\";\nexport { GlassActionSheet } from \"./components/mobile/GlassActionSheet\";\nexport { LiquidGlassShowcase } from \"./components/showcase/LiquidGlassShowcase\";\nexport { GlassPullToRefresh } from \"./components/mobile/GlassPullToRefresh\";\nexport {\n  TouchOptimizedGlass,\n  MobileGlassNavigation,\n  AdaptiveGlassDensity,\n  TouchRippleEffects,\n  MobileGlassBottomSheet,\n} from \"./components/mobile/TouchGlassOptimization\";\nexport { GlassPresenceIndicator } from \"./components/social/GlassPresenceIndicator\";\nexport { GlassReactionBubbles } from \"./components/social/GlassReactionBubbles\";\nexport { GlassSharedWhiteboard } from \"./components/social/GlassSharedWhiteboard\";\nexport { GlassSocialFeed } from \"./components/social/GlassSocialFeed\";\nexport { GlassVoiceWaveform } from \"./components/social/GlassVoiceWaveform\";\nexport {\n  default as VoiceGlassControl,\n  GlassVoiceCommands,\n} from \"./components/voice/VoiceGlassControl\";\n// Alias for demo purposes\nexport { default as VoiceGlassDemo } from \"./components/voice/VoiceGlassControl\";\nexport {\n  HoudiniGlassCard,\n  HoudiniGlassShowcase,\n} from \"./components/houdini/HoudiniGlassCard\";\nexport {\n  ConsciousnessStreamProvider,\n  useConsciousnessStream,\n} from \"./contexts/ConsciousnessStreamProvider\";\nexport {\n  component_inventory_json,\n  COMPONENT_INVENTORY_JSON_PATH,\n} from \"./reports/componentInventory\";\nexport {\n  GILDED_TOKENS_CATALOGUE_MD,\n  REDUCED_MOTION_100_COMPLETE_MD,\n  REDUCED_MOTION_101_GUIDE_MD,\n} from \"./reports/legacyDocuments\";\nexport const component_inventory_json_path = \"reports/component_inventory.json\";\nexport const GILDED_TOKENS_CATALOGUE_MD_PATH =\n  \"reports/GILDED_TOKENS_CATALOGUE.md\";\nexport const REDUCED_MOTION_101_GUIDE_MD_PATH =\n  \"reports/REDUCED_MOTION_101_GUIDE.md\";\nexport const REDUCED_MOTION_100_COMPLETE_MD_PATH =\n  \"reports/REDUCED_MOTION_100_COMPLETE.md\";\n\n// Additional Report Files\nexport const TYPESCRIPT_FIX_PROGRESS_MD_PATH =\n  \"reports/TYPESCRIPT_FIX_PROGRESS.md\";\nexport const REDUCED_MOTION_FINAL_REPORT_JSON_PATH =\n  \"reports/reduced-motion-final-report.json\";\nexport { GlassDepthLayer } from \"./components/surfaces/GlassDepthLayer\";\nexport { GlassFractalLayout } from \"./components/layouts/GlassFractalLayout\";\nexport { GlassGoldenRatioGrid } from \"./components/layouts/GlassGoldenRatioGrid\";\nexport { GlassIslandLayout } from \"./components/layouts/GlassIslandLayout\";\nexport { GlassOrbitalMenu } from \"./components/layouts/GlassOrbitalMenu\";\nexport { GlassTessellation } from \"./components/layouts/GlassTessellation\";\n\n// Surface Components\nexport { default as DimensionalGlass } from \"./components/surfaces/DimensionalGlass\";\nexport { default as FrostedGlass } from \"./components/surfaces/FrostedGlass\";\nexport { default as HeatGlass } from \"./components/surfaces/HeatGlass\";\nexport { default as PageGlassContainer } from \"./components/surfaces/PageGlassContainer\";\nexport { default as WidgetGlass } from \"./components/surfaces/WidgetGlass\";\n\n// Background Components\nexport { default as AtmosphericBackground } from \"./components/backgrounds/AtmosphericBackground\";\nexport { default as ParticleBackground } from \"./components/backgrounds/ParticleBackground\";\n\n// Speed Dial Components\nexport { SpeedDial } from \"./components/speed-dial/SpeedDial\";\nexport { default as SpeedDialAction } from \"./components/speed-dial/SpeedDialAction\";\nexport { default as SpeedDialIcon } from \"./components/speed-dial/SpeedDialIcon\";\n\n// Toggle Button Components\nexport { ToggleButton } from \"./components/toggle-button/ToggleButton\";\nexport { ToggleButtonGroup } from \"./components/toggle-button/ToggleButtonGroup\";\n\n// Tree View Components\nexport { TreeItem } from \"./components/tree-view/TreeItem\";\nexport { TreeView } from \"./components/tree-view/TreeView\";\n\n// Visual Feedback Components\nexport { default as FocusIndicator } from \"./components/visual-feedback/FocusIndicator\";\nexport { default as RippleButton } from \"./components/visual-feedback/RippleButton\";\nexport { default as StateIndicator } from \"./components/visual-feedback/StateIndicator\";\nexport { default as VisualFeedback } from \"./components/visual-feedback/VisualFeedback\";\n\n// Image List Components\nexport { ImageList } from \"./components/image-list/ImageList\";\nexport { ImageListItem } from \"./components/image-list/ImageListItem\";\nexport { ImageListItemBar } from \"./components/image-list/ImageListItemBar\";\n\n// Cookie Consent Components\nexport { CompactCookieNotice } from \"./components/cookie-consent/CompactCookieNotice\";\nexport { CookieConsent } from \"./components/cookie-consent/CookieConsent\";\nexport { GlobalCookieConsent } from \"./components/cookie-consent/GlobalCookieConsent\";\n\n// UI Components (App-specific)\nexport { GlassPanel } from \"./components/ui-components/glass-panel\";\nexport { default as GlassAccordionUI } from \"./components/ui-components/GlassAccordionUI\";\nexport { Checkbox as GlassCheckboxUI } from \"./components/ui-components/GlassCheckboxUI\";\n\n// Website Components\nexport { GlassLinkButton } from \"./components/website-components/GlassLinkButton\";\nexport { GlassPrismComparison } from \"./components/website-components/GlassPrismComparison\";\nexport { GlassWipeSlider } from \"./components/website-components/GlassWipeSlider\";\nexport { MotionAwareGlass } from \"./components/website-components/MotionAwareGlass\";\n\n// Enhanced Hooks\nexport {\n  useAccessibilityFeature,\n  useAccessibleAnimation,\n  useAccessibleColors,\n} from \"./hooks/useAccessibilitySettings\";\nexport {\n  useAdaptiveImageLoading,\n  useEnhancedPerformance,\n  usePerformanceAwareRendering,\n  usePerformanceLazyLoading,\n} from \"./hooks/useEnhancedPerformance\";\nexport {\n  useAsyncError,\n  useErrorBoundary,\n  useErrorReporting,\n  useGracefulDegradation,\n} from \"./hooks/useErrorBoundary\";\nexport {\n  useGlassIntersection,\n  useGlassIntersectionAnimation,\n  useGlassLazyImage,\n  useProgressiveLoading,\n} from \"./hooks/useGlassIntersection\";\nexport {\n  useAdaptiveComponentLoading,\n  useGlassOptimization,\n  useOptimizedGlassComponent,\n} from \"./hooks/useGlassOptimization\";\nexport { useMotionPreference } from \"./hooks/useMotionPreference\";\nexport { useReducedMotion } from \"./hooks/useReducedMotion\";\nexport { useEnhancedReducedMotion } from \"./hooks/useEnhancedReducedMotion\";\nexport {\n  useGalileoStateSpring,\n  useGalileoStateSpring as useAuraStateSpring,\n} from \"./hooks/useGalileoStateSpring\";\nexport {\n  usePhysicsInteraction,\n  usePhysicsButton,\n  usePhysicsDrag,\n  useSimplePhysicsHover,\n} from \"./hooks/usePhysicsInteraction\";\nexport {\n  useGridVirtualization,\n  useInfiniteVirtualization,\n  useTableVirtualization,\n  useVirtualization,\n  useWindowVirtualization,\n} from \"./hooks/useVirtualization\";\nexport { useDeviceCapabilities } from \"./hooks/useDeviceCapabilities\";\nexport {\n  useQualityTier,\n  getQualityBasedPhysicsParams,\n  getQualityBasedGlassParams,\n} from \"./components/charts/hooks/useQualityTier\";\nexport { useChartPhysicsInteraction } from \"./components/charts/hooks/useChartPhysicsInteraction\";\nexport {\n  useTheme,\n  useThemeVariant,\n  usePersonaTheme,\n  useThemeProviderPresence,\n} from \"./theme/ThemeProvider\";\nexport { AnimationProvider, useAnimation } from \"./contexts/AnimationContext\";\nexport {\n  MotionPreferenceProvider,\n  useMotionPreferenceContext,\n  type MotionPreferenceContextType,\n  type MotionPreferenceProviderProps,\n} from \"./contexts/MotionPreferenceContext\";\nexport { useA11yId } from \"./utils/a11y\";\nexport { useGlassSound, glassSoundDesign } from \"./utils/soundDesign\";\nexport { adaptiveAI, useAdaptiveAI } from \"./utils/adaptiveAI\";\nexport { AuraGlassClientBoundary } from \"./components/ssr/AuraGlassClientBoundary\";\n\n// Note: The following components and services have server-side dependencies and are not included in the client bundle:\n// - ProductionAIIntegration: imports OpenAIService, SemanticSearchService, VisionService, CollaborationService, AuthService\n// - OpenAIService, SemanticSearchService, VisionService: require backend APIs (OpenAI, Pinecone, Google Vision)\n// - CollaborationService: requires WebSocket server infrastructure\n// - AuthService: requires jsonwebtoken and server-side auth\n// These are meant to be used in a Node.js backend environment, not in the browser.\n// They are available in the source code at src/components/ai/ and src/services/ for backend integration.\n\n// Physics & Transform Hooks\nexport { usePhysicsEngine } from \"./hooks/physics/usePhysicsEngine\";\nexport { usePhysicsLayout } from \"./hooks/physics/usePhysicsLayout\";\nexport { use3DTransform } from \"./hooks/extended/use3DTransform\";\nexport { useAmbientTilt } from \"./hooks/extended/useAmbientTilt\";\nexport { useMagneticElement } from \"./hooks/extended/useMagneticElement\";\nexport { useZSpace } from \"./hooks/extended/useZSpace\";\n\n// Extended Hooks\nexport * from \"./hooks/extended\";\n// Explicit named exports for extended hooks to ensure tree-shaking works correctly\nexport {\n  useZSpaceAnimation,\n  useParallaxZSpace,\n  useCardStackZSpace,\n  useDepthNavigation,\n} from \"./hooks/extended/useZSpaceAnimation\";\nexport { useGlassFocus } from \"./hooks/extended/useGlassFocus\";\nexport { useGlassPerformance } from \"./hooks/extended/useGlassPerformance\";\nexport { useSortableData } from \"./hooks/extended/useSortableData\";\nexport { useDraggableListPhysics } from \"./hooks/extended/useDraggableListPhysics\";\nexport { useGalileoSprings } from \"./hooks/extended/useGalileoSprings\";\n\n// Gesture Physics Hooks\nexport { useGesturePhysics } from \"./animations/physics/gesturePhysics\";\n\n// Orchestration Hooks\nexport { useOrchestration } from \"./animations/orchestration/useOrchestration\";\n\n// Enhanced Core Mixins\nexport {\n  createGlassDisabledMixin,\n  createGlassFocusMixin,\n  createGlassHoverMixin,\n  createGlassStyle,\n  createResponsiveGlassStyle,\n  generateGlassThemeVariables,\n} from \"./core/mixins/glassMixins\";\n\nexport {\n  PerformanceMonitor,\n  createCleanupManager,\n  createDebouncedResizeObserver,\n  createLazyLoadMixin,\n  createMemoryEfficientAnimation,\n  createOptimizedScrollHandler,\n  createOptimizedTransition,\n  createPerformanceMixin,\n  createVirtualizationMixin,\n  detectDeviceCapabilities,\n  getAdaptivePerformanceConfig,\n} from \"./core/mixins/performanceMixins\";\n\n// Additional Mixins\nexport { edgeHighlight } from \"./core/mixins/edgeEffects\";\nexport { glowEffects } from \"./core/mixins/glowEffects\";\n// NOTE: interactiveGlass mixin is deprecated; only focused helpers remain for backward compatibility\nexport {\n  createMagneticEffect,\n  createRippleEffect,\n} from \"./core/mixins/interactiveGlass\";\nexport { createZSpaceLayers, zSpaceLayer } from \"./core/mixins/zSpaceLayer\";\n\n// Animation System\nexport * from \"./animations/hooks\";\nexport * from \"./animations/physics\";\nexport { SpringPresets } from \"./animations/physics/springPhysics\";\n// Explicitly re-export orchestration to resolve ambiguity\nexport {\n  createOrchestration,\n  orchestrationPresets,\n  useAnimationSequence as orchestrationUseAnimationSequence,\n} from \"./animations/orchestration/index\";\n// Accessible animation utilities\nexport * from \"./animations/accessible\";\nexport {\n  prefersReducedMotion,\n  createAccessibleAnimation,\n} from \"./animations/accessible\";\n\n// Additional Animation Hooks (explicit exports)\nexport { useAnimationSequence as useAnimationSequenceBasic } from \"./animations/hooks/useAnimationSequenceBasic\";\nexport { useAnimationSequence as useAnimationSequenceOrchestrator } from \"./animations/orchestration/useAnimationSequenceOrchestrator\";\nexport { useMouseMagneticEffect } from \"./animations/hooks/useMouseMagneticEffect\";\nexport { useMultiSpring as useMultiSpringBasic } from \"./animations/hooks/useMultiSpringBasic\";\nexport { useMultiSpring as useMultiSpringPhysics } from \"./animations/physics/useMultiSpringPhysics\";\n\n// Gesture Physics System\nexport {\n  GestureType,\n  GESTURE_PRESETS as GesturePresets,\n} from \"./animations/physics/gesturePhysics\";\nexport type { GesturePhysicsPreset } from \"./animations/physics/gesturePhysics\";\n\n// Orchestration Types\nexport {\n  PublicAnimationStage,\n  createOrchestrationSequence,\n} from \"./animations/orchestration/useOrchestration\";\n\n// Error Boundaries and Utils\nexport {\n  GlassAsyncErrorBoundary,\n  GlassComponentErrorBoundary,\n  GlassErrorBoundary,\n  GlassLightErrorBoundary,\n  withGlassErrorBoundary,\n} from \"./utils/errorBoundary\";\n\n// Production Utilities\nexport {\n  analytics,\n  browser,\n  css,\n  data,\n  dev,\n  features,\n  initializeProduction,\n  logger,\n  memory,\n  performance,\n  productionConfig,\n  safeExecute,\n  safeExecuteAsync,\n  storage,\n  validate,\n} from \"./utils/productionUtils\";\n\n// Glass Probes Utilities (optional debugging tools)\nexport {\n  startGlassProbes,\n  stopGlassProbes,\n  GlassStyleProbes,\n} from \"./utils/glassStyleProbes\";\nexport type { GlassProbeResult } from \"./utils/glassStyleProbes\";\n\n// Consciousness Optimization Utilities\nexport { getConsciousnessResourcePool } from \"./utils/consciousnessOptimization\";\n\n// Date Utilities\nexport {\n  createDateFnsAdapter,\n  createDayJsAdapter,\n  createNativeDateAdapter,\n} from \"./utils/dateAdapters\";\nexport type { DateAdapter } from \"./utils/dateAdapters\";\n\n// Core Production System\nexport {\n  AuraGlassProduction,\n  defaultProductionConfig,\n  devUtils,\n  getAuraGlass,\n  initializeAuraGlass,\n  initializeAuraGlassClient,\n  productionUtils,\n} from \"./core/productionCore\";\n\n// Library Utilities\nexport * from \"./lib\";\n\n// Utility Modules\nexport * from \"./utils/browserCompatibility\";\nexport * from \"./utils/env\";\nexport * from \"./utils/deviceCapabilities\";\nexport * from \"./utils/elementTypes\";\nexport * from \"./utils/performanceOptimizations\";\nexport * from \"./utils/themeHelpers\";\nexport * from \"./utils/random\";\n// SSR Utilities (selective exports to avoid conflicts)\nexport {\n  canUseDOM,\n  safeWindow,\n  safeDocument,\n  safeNavigator,\n  safeBrowserExec,\n  getBrowserValue,\n  getUserAgent,\n  isTouchDevice,\n  getViewportSize,\n  getDevicePixelRatio,\n  isWebGLSupported,\n  isLocalStorageAvailable,\n  addBrowserEventListener,\n  safeRequestAnimationFrame,\n  safeCancelAnimationFrame,\n  createBrowserRefCallback,\n  getConnectionInfo,\n  isDevelopment,\n  isProduction,\n} from \"./utils/ssr\";\n\n// Design Tokens\nexport * from \"./tokens/glass\";\nexport { constants } from \"./tokens/designConstants\";\nexport { glassTokens } from \"./tokens/glass\";\nexport { lightTheme, themeUtils } from \"./tokens/themeTokens\";\n\n// Primitives\nexport * from \"./primitives\";\n\n// SSR compatibility helpers (legacy API preserved as no-ops)\nexport {\n  AuraGlassSSRProvider,\n  collectStyles,\n  createStyleSheet,\n  isStyledComponentsSSRReady,\n  getStyledComponentsVersion,\n} from \"./ssr\";\n\n// Development Utilities (Development Only)\n// Note: Testing utilities are available in development builds only\n\n// Type exports for TypeScript support\nexport type {\n  GlassAlertProps,\n  // Chart types\n  GlassAreaChartProps,\n  GlassBadgeProps,\n  GlassBarChartProps,\n  // Interactive types\n  GlassCarouselProps,\n  GlassChatProps,\n  GlassCheckboxProps,\n  GlassCommandBarProps,\n  // Layout types\n  GlassContainerProps,\n  // Data display types\n  GlassDataTableProps,\n  // Modal types\n  GlassDialogProps,\n  GlassDrawerProps,\n  GlassGridProps,\n  // Navigation types\n  GlassHeaderProps,\n  // Form types\n  GlassInputProps,\n  // Dashboard types\n  GlassKPICardProps,\n  GlassKanbanProps,\n  GlassLineChartProps,\n  GlassMetricCardProps,\n  GlassModalProps,\n  GlassPieChartProps,\n  GlassPopoverProps,\n  GlassProgressProps,\n  GlassSegmentedControlProps,\n  GlassSelectProps,\n  GlassSidebarProps,\n  GlassSliderProps,\n  GlassSplitPaneProps,\n  GlassStackProps,\n  GlassStatCardProps,\n  GlassSwitchProps,\n  GlassTextareaProps,\n  GlassTimelineProps,\n  GlassToolbarProps,\n  // Glass primitive types\n  OptimizedGlassProps,\n} from \"./types\";\n\n// Additional component type exports\nexport type { GlassCardProps } from \"./components/card/GlassCard\";\nexport type { GlowingCardProps } from \"./components/card/GlowingCard\";\nexport type { GlassTabItemProps } from \"./components/navigation/GlassTabItem\";\nexport type { DateRange } from \"./components/input/GlassDateRangePicker\";\nexport type { ChartDataset } from \"./components/charts/GlassDataChart\";\nexport type {\n  ColumnDefinition,\n  SortState,\n} from \"./components/data-display/types\";\nexport type { MultiSelectOption, Step } from \"./components/input/types\";\nexport type { MasonryItem } from \"./components/layouts/GlassMasonryGrid\";\nexport type {\n  QualityTier as ChartQualityTier,\n  PhysicsParams,\n} from \"./components/charts/hooks/useQualityTier\";\nexport type { QualityTier } from \"./components/charts/hooks/useQualityTier\";\nexport type { DimensionalDashboardContainerProps } from \"./components/dashboard/DimensionalDashboardContainer\";\nexport type { ZSpaceAppLayoutProps } from \"./components/layout/ZSpaceAppLayout\";\nexport type { ContentSectionProps } from \"./components/layout/GlassAppShell\";\nexport type { LiquidGlassMaterialProps } from \"./primitives/LiquidGlassMaterial\";\n// R3F effect prop types live under the `aura-glass/three` entrypoint.\nexport type { IntelligentFormBuilderProps } from \"./components/ai/GlassIntelligentFormBuilder\";\nexport type { HoudiniGlassProviderProps } from \"./components/houdini/HoudiniGlassProvider\";\nexport type { AuraGlassClientBoundaryProps } from \"./components/ssr/AuraGlassClientBoundary\";\n\n// Re-export production types (explicitly to resolve PerformanceMetrics ambiguity)\nexport type {\n  A11yAuditRule,\n  AccessibilitySettings,\n  AnimationConfig,\n  BreadcrumbItem,\n  ChartDataPoint,\n  ComponentTestProps,\n  ConditionalGlassProps,\n  CreateGlassComponent,\n  DrawerState,\n  FlexConfig,\n  FormField,\n  FormState,\n  GlassA11yAuditorProps,\n  GlassAnimatedNumberProps,\n  GlassCodeEditorProps,\n  GlassColorSchemeGeneratorProps,\n  GlassComponentPlaygroundProps,\n  GlassComponentProps,\n  GlassConfig,\n  GlassGlobalState,\n  GlassMindMapProps,\n  GlassMotionControllerProps,\n  GlassNotification,\n  GlassNotificationCenterProps,\n  GlassPlugin,\n  GlassPropsWithChildren,\n  GlassSkeletonLoaderProps,\n  GlassSkeletonProps,\n  GlassTooltipProps,\n  GlassWhiteboardProps,\n  GridConfig,\n  IntersectionReturn,\n  MockData,\n  ModalState,\n  MotionPreferences,\n  NavigationItem,\n  NestedGlassComponent,\n  PartialGlassProps,\n  PhysicsInteractionReturn,\n  PieDataPoint,\n  PerformanceMetrics as ProductionPerformanceMetrics,\n  SelectOption,\n  TableColumn,\n  TableRow,\n  ThemeConfig,\n  TimelineItem,\n  ValidationResult,\n  ValidationRule,\n  VirtualizationConfig,\n} from \"./types/productionTypes\";\n\n// Common types\nexport type {\n  Vector2D,\n  UnsubscribeFunction,\n  CallbackFunction,\n  EventHandler,\n  AsyncCallback,\n  Subscription,\n} from \"./types/common\";\n\n// Physics types\nexport type {\n  PhysicsBodyState,\n  PhysicsBodyOptions,\n  CollisionEvent,\n} from \"./physics/AuraPhysicsEngine\";\n\n// Export physics engine\nexport {\n  AuraPhysicsEngineAPI,\n  getGlobalPhysicsEngine,\n  forcePhysicsEngineUpdate,\n  getPhysicsBodyState,\n} from \"./physics/AuraPhysicsEngine\";\n"],
  "mappings": "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",
  "names": ["Icon", "File", "Image", "Icon", "React", "forwardRef", "jsx", "prefersReducedMotion", "browser", "performance", "memory", "storage", "performance", "forwardRef", "Component", "motion", "prefersReducedMotion", "React", "React", "forwardRef", "useEffect", "useState", "jsx", "prefersReducedMotion", "forwardRef", "clsx", "twMerge", "cn", "target", "wait", "jsx", "forwardRef", "cn", "forwardRef", "useEffect", "useMemo", "useState", "jsx", "copy", "forwardRef", "useState", "useEffect", "useMemo", "forwardRef", "useEffect", "useRef", "useState", "useEffect", "useState", "target", "values", "parseColor", "color", "jsx", "forwardRef", "springConfig", "useRef", "prefersReducedMotion", "useState", "useEffect", "cn", "forwardRef", "useMemo", "useState", "useEffect", "jsx", "forwardRef", "Component", "useState", "useEffect", "useMemo", "cn", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "React", "useEffect", "useMemo", "useRef", "useState", "x", "image", "target", "React", "React", "createContext", "forwardRef", "useContext", "useMemo", "useMemo", "jsx", "prefersReducedMotion", "useMemo", "jsx", "createContext", "forwardRef", "React", "prefersReducedMotion", "useMemo", "cn", "useContext", "jsx", "jsxs", "forwardRef", "useRef", "useState", "prefersReducedMotion", "useCallback", "useMemo", "useEffect", "radiusMap", "cn", "React", "forwardRef", "useRef", "jsx", "forwardRef", "useRef", "React", "React", "forwardRef", "jsx", "forwardRef", "React", "cn", "forwardRef", "useEffect", "useRef", "useState", "jsx", "jsxs", "target", "forwardRef", "useState", "useRef", "useEffect", "cn", "React", "createContext", "forwardRef", "useCallback", "useContext", "useMemo", "useRef", "useState", "jsx", "createContext", "useState", "useRef", "useCallback", "useMemo", "forwardRef", "React", "cn", "useContext", "createContext", "useContext", "jsx", "jsx", "createContext", "useContext", "createContext", "useContext", "useState", "useEffect", "useMemo", "useRef", "useCallback", "jsx", "jsxs", "createContext", "useContext", "useRef", "useState", "useMemo", "useCallback", "storage", "useEffect", "breakpoints", "getBlurStrength", "children", "jsxs", "jsx", "useContext", "clsx", "jsx", "jsxs", "clsx", "React", "forwardRef", "useEffect", "useState", "React", "React", "jsx", "React", "target", "React", "jsx", "target", "React", "jsx", "target", "React", "jsx", "React", "React", "jsx", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useRef", "useState", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "forwardRef", "motion", "useId", "useState", "useEffect", "useRef", "useCallback", "useId", "message", "features", "React", "useRef", "useState", "forwardRef", "useImperativeHandle", "jsx", "ContrastGuard", "forwardRef", "Component", "useRef", "useState", "useImperativeHandle", "React", "cn", "jsx", "jsxs", "data", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "cn", "forwardRef", "motion", "ContrastGuard", "users", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "forwardRef", "motion", "AnimatePresence", "createContext", "useContext", "useState", "useEffect", "jsx", "prefersReducedMotion", "jsx", "jsxs", "x", "settings", "data", "createContext", "useRef", "useState", "useEffect", "useCallback", "useContext", "forwardRef", "GlassStressResponsive", "prefersReducedMotion", "motion", "cn", "ContrastGuard", "GlassBiometricDashboard", "AnimatePresence", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "data", "x", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "ContrastGuard", "cn", "motion", "AnimatePresence", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "x", "data", "target", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "getDeviceType", "useContext", "cn", "motion", "AnimatePresence", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "settings", "volume", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "cn", "useContext", "motion", "AnimatePresence", "jsx", "forwardRef", "useState", "useRef", "useImperativeHandle", "useEffect", "useCallback", "elevation", "cn", "forwardRef", "jsx", "React", "forwardRef", "jsx", "forwardRef", "React", "prefersReducedMotion", "cn", "jsx", "jsxs", "forwardRef", "useState", "prefersReducedMotion", "useEffect", "React", "cn", "React", "React", "Component", "cn", "React", "forwardRef", "jsx", "Box", "forwardRef", "Component", "cn", "jsx", "React", "forwardRef", "jsx", "forwardRef", "prefersReducedMotion", "cn", "forwardRef", "jsx", "forwardRef", "prefersReducedMotion", "cn", "React", "forwardRef", "jsx", "forwardRef", "prefersReducedMotion", "cn", "React", "forwardRef", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "useEffect", "target", "cn", "container", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "prefersReducedMotion", "ContrastGuard", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "React", "prefersReducedMotion", "cn", "ContrastGuard", "forwardRef", "jsx", "HStack", "forwardRef", "prefersReducedMotion", "ContrastGuard", "forwardRef", "jsx", "VStack", "forwardRef", "prefersReducedMotion", "ContrastGuard", "forwardRef", "useState", "useEffect", "useRef", "jsx", "jsxs", "useState", "useRef", "useEffect", "forwardRef", "prefersReducedMotion", "jsxs", "jsx", "cn", "forwardRef", "createGlassStyle", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "createGlassStyle", "forwardRef", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "useImperativeHandle", "Fragment", "jsx", "jsxs", "forwardRef", "GlassButton", "prefersReducedMotion", "useRef", "useState", "useImperativeHandle", "useCallback", "useEffect", "React", "cn", "IconButton", "forwardRef", "ToggleButton", "jsx", "FloatingActionButton", "cn", "ConsciousGlassButton", "GazeResponsiveButton", "PredictiveButton", "AccessibleButton", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "React", "content", "cn", "ContrastGuard", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "active", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "React", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "cn", "React", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "useState", "useRef", "x", "useEffect", "cn", "menu", "React", "React", "forwardRef", "jsx", "jsxs", "React", "composeRefs", "forwardRef", "cn", "React", "forwardRef", "useRef", "useState", "useCallback", "useEffect", "useEffect", "useRef", "useCallback", "Fragment", "jsx", "jsxs", "getFocusableElements", "target", "React", "forwardRef", "useCallback", "useRef", "useState", "forwardRef", "useCallback", "useEffect", "useId", "useRef", "jsx", "jsxs", "forwardRef", "useRef", "useId", "useCallback", "stateStyles", "useEffect", "cn", "jsx", "jsxs", "forwardRef", "useState", "useRef", "React", "useCallback", "cn", "variant", "size", "state", "fullWidth", "leftIcon", "rightIcon", "clearable", "helperText", "errorText", "loading", "onClear", "className", "label", "Fragment", "jsx", "jsxs", "forwardRef", "search", "useRef", "useState", "useEffect", "useCallback", "cn", "React", "user", "statusColors", "forwardRef", "jsx", "React", "useEffect", "useRef", "useState", "React", "jsx", "React", "cn", "jsx", "jsxs", "useState", "cn", "React", "item", "useRef", "useEffect", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "cn", "useCallback", "useEffect", "forwardRef", "useState", "useEffect", "useCallback", "useRef", "useMemo", "createContext", "useContext", "useState", "useEffect", "jsx", "useCallback", "useEffect", "useRef", "useState", "useState", "useRef", "useCallback", "Fragment", "jsx", "jsxs", "useState", "useCallback", "forwardRef", "prefersReducedMotion", "useRef", "item", "useMemo", "useEffect", "getPositionClasses", "position", "cn", "React", "useState", "jsx", "jsxs", "useState", "cn", "React", "React", "jsx", "jsxs", "cn", "React", "jsx", "jsxs", "React", "cn", "jsx", "cn", "forwardRef", "useId", "useState", "jsx", "jsxs", "forwardRef", "useId", "useState", "cn", "forwardRef", "useState", "useEffect", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useEffect", "cn", "forwardRef", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "sizes", "cn", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useCallback", "useEffect", "target", "React", "cn", "React", "createContext", "forwardRef", "useContext", "useEffect", "useRef", "useState", "createPortal", "Fragment", "jsx", "jsxs", "createContext", "useContext", "forwardRef", "useRef", "useState", "useEffect", "cn", "createPortal", "React", "React", "useState", "useRef", "useEffect", "useCallback", "useMemo", "forwardRef", "useImperativeHandle", "useState", "useEffect", "useCallback", "useRef", "settings", "forwardRef", "container", "horizontal", "vertical", "elevated", "noBackground", "selectorBase", "selectorUnderline", "jsx", "forwardRef", "cn", "jsx", "jsxs", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "cn", "Fragment", "jsx", "jsxs", "useState", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "useMemo", "useRef", "useState", "usePhysicsAnimation", "useImperativeHandle", "useCallback", "useEffect", "handleScroll", "width", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "target", "prefersReducedMotion", "Component", "React", "createContext", "forwardRef", "useContext", "useState", "jsx", "jsxs", "createContext", "useContext", "forwardRef", "useState", "React", "cn", "useState", "useEffect", "useRef", "forwardRef", "useImperativeHandle", "useMemo", "jsx", "jsxs", "useState", "useEffect", "forwardRef", "prefersReducedMotion", "useRef", "useImperativeHandle", "activeTabElement", "colors", "useMemo", "cn", "forwardRef", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "cn", "forwardRef", "jsx", "forwardRef", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "useEffect", "useState", "jsx", "jsxs", "forwardRef", "useState", "useEffect", "target", "cn", "React", "forwardRef", "forwardRef", "useEffect", "jsx", "jsxs", "forwardRef", "useEffect", "cn", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "React", "cn", "React", "forwardRef", "useCallback", "useEffect", "useId", "useRef", "useState", "getFocusableElements", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useId", "prefersReducedMotion", "useEffect", "data", "useCallback", "cn", "React", "forwardRef", "jsx", "cn", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "useEffect", "stressLevel", "useCallback", "getSizeClasses", "getPositionClasses", "cn", "React", "forwardRef", "jsx", "cn", "React", "useCallback", "useEffect", "useRef", "useState", "forwardRef", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "useCallback", "x", "useEffect", "cn", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "useMemo", "data", "useEffect", "useCallback", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "React", "colors", "cn", "React", "forwardRef", "useState", "useCallback", "createContext", "useContext", "prefersReducedMotion", "volume", "play", "jsx", "jsxs", "createContext", "useContext", "forwardRef", "play", "colors", "useCallback", "cn", "useState", "React", "useCallback", "useEffect", "useRef", "useState", "forwardRef", "useState", "useEffect", "useCallback", "useRef", "jsx", "jsxs", "position", "cn", "forwardRef", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "Component", "useRef", "useState", "useCallback", "useEffect", "forwardRef", "jsx", "forwardRef", "MagneticButton", "useRef", "useState", "prefersReducedMotion", "useCallback", "useEffect", "cn", "forwardRef", "jsx", "forwardRef", "cn", "React", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "cn", "CardHeader", "React", "CardTitle", "CardContent", "parseRgb", "jsx", "jsxs", "rgbToHex", "format", "palette", "useState", "useRef", "useEffect", "useCallback", "value", "cn", "CardHeader", "CardTitle", "CardContent", "forwardRef", "useId", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useId", "useRef", "useState", "useMemo", "cn", "forwardRef", "jsx", "forwardRef", "React", "forwardRef", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "format", "useState", "useRef", "formatDate", "useEffect", "cn", "React", "React", "useEffect", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "formatDate", "React", "cn", "CardContent", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "jsx", "jsxs", "React", "React", "jsx", "cn", "jsxs", "forwardRef", "useId", "forwardRef", "jsx", "jsxs", "forwardRef", "Icon", "cn", "jsx", "jsxs", "forwardRef", "useId", "cn", "React", "jsx", "jsxs", "cn", "React", "jsx", "jsxs", "cn", "React", "forwardRef", "useCallback", "useEffect", "useId", "useMemo", "useRef", "useState", "jsx", "jsxs", "root", "rootFullWidth", "rootContained", "label", "container", "containerFocused", "containerError", "containerDisabled", "sizeSmall", "containerCompact", "sizeMedium", "sizeLarge", "tokenList", "placeholder", "token", "tokenDisabled", "tokenLabel", "removeButton", "input", "clearButton", "dropdown", "dropdownVisible", "dropdownAbove", "optionList", "option", "optionSelected", "optionFocused", "optionDisabled", "groupHeader", "helperText", "errorText", "noOptions", "loading", "spinner", "spin", "jsx", "jsxs", "useId", "useRef", "useState", "useMemo", "useCallback", "useEffect", "error", "cn", "ContrastGuard", "React", "forwardRef", "createContext", "useCallback", "useContext", "useState", "forwardRef", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "normalizeValue", "useState", "cn", "ContrastGuard", "useRef", "useEffect", "React", "jsx", "jsxs", "React", "prefersReducedMotion", "cn", "React", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "React", "statusColors", "ContrastGuard", "cn", "forwardRef", "jsx", "forwardRef", "cn", "forwardRef", "useEffect", "useState", "useMemo", "useCallback", "table", "headerRow", "headerCell", "headerSortable", "compact", "cell", "dragHandleCell", "sortIndicator", "row", "rowDragging", "dragHandle", "dragHandleActive", "body", "jsx", "jsxs", "data", "useState", "useCallback", "useMemo", "copy", "forwardRef", "useEffect", "cn", "ContrastGuard", "rowStyle", "React", "forwardRef", "useMemo", "useState", "useCallback", "useEffect", "useRef", "React", "forwardRef", "useEffect", "useRef", "useState", "createPortal", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useEffect", "cn", "createPortal", "React", "jsx", "jsxs", "data", "useRef", "prefersReducedMotion", "useState", "useCallback", "useEffect", "target", "useMemo", "cn", "ContrastGuard", "size", "forwardRef", "jsx", "React", "cn", "React", "jsx", "jsxs", "code", "React", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "Icon", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "useCallback", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "data", "prefersReducedMotion", "useState", "useRef", "useMemo", "useCallback", "cn", "ContrastGuard", "jsx", "cn", "ContrastGuard", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "cn", "_", "jsx", "jsxs", "cn", "ContrastGuard", "forwardRef", "useEffect", "useState", "jsx", "jsxs", "forwardRef", "formatValue", "prefersReducedMotion", "useState", "useEffect", "cn", "ContrastGuard", "jsx", "cn", "jsx", "data", "cn", "jsx", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "ContrastGuard", "forwardRef", "jsx", "cn", "jsxs", "ContrastGuard", "createContext", "useContext", "useEffect", "useState", "jsx", "jsxs", "createContext", "useContext", "useState", "useEffect", "getTypeStyles", "cn", "ContrastGuard", "jsx", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "useRef", "Fragment", "jsx", "jsxs", "forwardRef", "useRef", "cn", "useCallback", "useEffect", "useState", "React", "useState", "useEffect", "Fragment", "jsx", "jsxs", "Component", "React", "useState", "useEffect", "Fragment", "jsx", "jsxs", "useState", "useEffect", "useCallback", "cn", "GlassSkeletonText", "GlassSkeletonCard", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "jsxs", "Fragment", "jsx", "cn", "useState", "createContext", "useContext", "forwardRef", "jsx", "jsxs", "createContext", "useContext", "useState", "forwardRef", "getTypeStyles", "cn", "ContrastGuard", "forwardRef", "useEffect", "useImperativeHandle", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useImperativeHandle", "formatNumber", "useEffect", "cn", "ContrastGuard", "Fragment", "jsx", "jsxs", "createContext", "useState", "useCallback", "data", "isValid", "jsx", "jsxs", "cn", "CardHeader", "CardTitle", "CardContent", "Fragment", "React", "createContext", "useContext", "useState", "forwardRef", "jsx", "jsxs", "RadioGroupContext", "createContext", "forwardRef", "useState", "React", "jsxs", "jsx", "cn", "RadioGroupContext", "forwardRef", "jsx", "forwardRef", "React", "Fragment", "jsx", "jsxs", "React", "GlassSelect", "cn", "GlassSelect", "React", "forwardRef", "useCallback", "useRef", "useState", "jsx", "jsxs", "forwardRef", "formatValue", "prefersReducedMotion", "useRef", "useState", "React", "colors", "useCallback", "cn", "forwardRef", "jsx", "cn", "jsx", "cn", "jsx", "jsxs", "getOrientationClasses", "forwardRef", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "React", "colors", "cn", "forwardRef", "jsx", "forwardRef", "React", "createContext", "useContext", "useState", "jsx", "jsxs", "createContext", "useContext", "React", "useState", "getVariantClasses", "cn", "createContext", "useContext", "useEffect", "useState", "Fragment", "jsx", "jsxs", "createContext", "useState", "useEffect", "isValid", "data", "jsx", "jsxs", "cn", "CardHeader", "CardTitle", "CardContent", "Fragment", "forwardRef", "jsx", "forwardRef", "cn", "jsx", "prefersReducedMotion", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "forwardRef", "useMemo", "jsx", "jsxs", "forwardRef", "palette", "motion", "useMemo", "cn", "forwardRef", "jsx", "jsxs", "toCssSize", "forwardRef", "palette", "x", "cn", "React", "forwardRef", "forwardRef", "Component", "italic", "React", "cn", "forwardRef", "forwardRef", "jsx", "forwardRef", "cn", "jsx", "jsxs", "forwardRef", "cn", "forwardRef", "useMemo", "useState", "jsx", "jsxs", "forwardRef", "useState", "useMemo", "cn", "forwardRef", "jsx", "toCssSize", "forwardRef", "palette", "cn", "useMemo", "useState", "jsx", "jsxs", "colors", "useState", "useMemo", "x", "cn", "CardHeader", "CardTitle", "CardContent", "ContrastGuard", "useMemo", "useState", "Fragment", "jsx", "jsxs", "colors", "DEFAULT_CHART_COLORS", "AXIS_TEXT_FILL", "AXIS_TITLE_FILL", "CROSSHAIR_STROKE", "useState", "useMemo", "cn", "ContrastGuard", "useMemo", "useState", "useRef", "useCallback", "useEffect", "forwardRef", "useImperativeHandle", "memo", "useMemo", "useState", "jsx", "jsxs", "toFiniteNumber", "getSeriesColor", "colors", "DEFAULT_CHART_COLORS", "AXIS_TEXT_FILL", "AXIS_TITLE_FILL", "CROSSHAIR_STROKE", "useState", "useMemo", "x", "cn", "CardHeader", "CardTitle", "CardContent", "ContrastGuard", "series", "useMemo", "useState", "forwardRef", "jsx", "jsxs", "toFiniteNumber", "colors", "DEFAULT_CHART_COLORS", "forwardRef", "data", "formatValue", "formatPercentage", "useState", "useMemo", "cn", "CardHeader", "CardTitle", "CardContent", "ContrastGuard", "container", "containerFocused", "header", "title", "description", "controls", "tabs", "toolbar", "typeButton", "typeButtonActive", "content", "contentFocused", "footer", "Fragment", "jsx", "jsxs", "toCssSize", "forwardRef", "cn", "x", "isRecord", "toFiniteNumber", "yValue", "data", "prefersReducedMotion", "useMemo", "useState", "useRef", "useEffect", "useCallback", "useImperativeHandle", "ContrastGuard", "memo", "React", "useState", "useRef", "useEffect", "useCallback", "useMemo", "memo", "forwardRef", "container", "header", "title", "subtitle", "wrapper", "legend", "legendTop", "legendBottom", "legendLeft", "legendRight", "legendGlass", "legendItem", "legendItemInactive", "legendColor", "legendLabel", "tooltip", "tooltipHeader", "tooltipRow", "tooltipLabel", "tooltipValue", "emptyState", "emptyStateTitle", "emptyStateDescription", "Tooltip", "useState", "useRef", "useEffect", "forwardRef", "Fragment", "jsx", "jsxs", "GlassTooltip", "forwardRef", "useState", "useRef", "prefersReducedMotion", "useEffect", "cn", "useMemo", "useCallback", "useState", "memory", "DEFAULT_CHART_COLORS", "palette", "jsx", "jsxs", "palette", "DEFAULT_CHART_COLORS", "getElevationShadow", "ChartContainer", "forwardRef", "cn", "ChartHeader", "ChartTitle", "ContrastGuard", "Tooltip", "memo", "RefreshIcon", "GlassButton", "useMemo", "React", "useRef", "useState", "useEffect", "color", "useCallback", "hexToRgb", "link", "format", "GlassTooltip", "useState", "useEffect", "useRef", "createContext", "useContext", "forwardRef", "jsx", "jsxs", "createContext", "useContext", "forwardRef", "useState", "useRef", "useEffect", "cn", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "code", "useState", "useRef", "useCallback", "useEffect", "cn", "file", "React", "useState", "useCallback", "useMemo", "jsx", "jsxs", "React", "useState", "palette", "useCallback", "h", "s", "l", "hslToHex", "colors", "useMemo", "format", "cn", "useState", "useEffect", "useCallback", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "prefersReducedMotion", "useCallback", "useEffect", "cn", "useState", "useEffect", "useCallback", "jsx", "jsxs", "useState", "useEffect", "useCallback", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "data", "useState", "useRef", "useCallback", "positionedNodes", "useMemo", "useEffect", "cn", "updateNode", "React", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "React", "useState", "useRef", "resolveCanvasColor", "useCallback", "x", "width", "height", "useEffect", "cn", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "useState", "forwardRef", "jsx", "jsxs", "createContext", "forwardRef", "useState", "useEffect", "propertyAPI", "paintAPI", "useCallback", "cn", "ContrastGuard", "useContext", "useMemo", "motion", "useRef", "useState", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "getEffectIcon", "motion", "cn", "useCallback", "useRef", "useState", "forwardRef", "jsx", "jsxs", "forwardRef", "useState", "sortBy", "prefersReducedMotion", "useRef", "useCallback", "search", "Image", "sizes", "cn", "CardHeader", "CardTitle", "CardContent", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "users", "React", "cn", "useCallback", "useEffect", "useRef", "useState", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "useRef", "useState", "useCallback", "useEffect", "cn", "CardContent", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "generateSuggestions", "useCallback", "message", "cn", "CardHeader", "CardTitle", "CardContent", "Image", "File", "file", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "message", "useState", "useRef", "useEffect", "useCallback", "file", "format", "Image", "File", "sizes", "cn", "CardContent", "jsx", "jsxs", "cn", "React", "createContext", "useContext", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "createContext", "groupBy", "useState", "useRef", "defaultFilter", "items", "query", "useEffect", "React", "jsx", "cn", "jsxs", "Fragment", "jsxs", "jsx", "cn", "forwardRef", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "search", "useState", "useRef", "useEffect", "useMemo", "defaultFilter", "cn", "Component", "forwardRef", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useMemo", "cn", "forwardRef", "jsx", "forwardRef", "cn", "React", "jsx", "jsxs", "React", "cn", "createContext", "useCallback", "useContext", "useEffect", "useRef", "useState", "jsx", "jsxs", "createContext", "data", "useState", "useRef", "useCallback", "useEffect", "jsx", "jsxs", "cn", "AnimatePresence", "motion", "React", "useCallback", "useMemo", "useState", "jsx", "jsxs", "React", "prefersReducedMotion", "useState", "useCallback", "useMemo", "cn", "AnimatePresence", "motion", "search", "AnimatePresence", "motion", "React", "useCallback", "useMemo", "useRef", "useState", "Fragment", "jsx", "jsxs", "React", "prefersReducedMotion", "useState", "useRef", "useMemo", "file", "useCallback", "Image", "sizes", "formatDate", "cn", "AnimatePresence", "motion", "AnimatePresence", "motion", "React", "useCallback", "useEffect", "useMemo", "useState", "jsx", "jsxs", "React", "useState", "useEffect", "useCallback", "useMemo", "nodes", "Image", "sizes", "formatDate", "prefersReducedMotion", "cn", "AnimatePresence", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useEffect", "useCallback", "sizes", "file", "error", "files", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "AnimatePresence", "motion", "React", "useCallback", "useMemo", "useState", "jsx", "jsxs", "React", "prefersReducedMotion", "useState", "useCallback", "useMemo", "cn", "AnimatePresence", "motion", "isDateRange", "GlassSelect", "React", "useRef", "useEffect", "useCallback", "useState", "target", "handleKeyDown", "wrapper", "glass-focus-visible", "glass-focus-keyboard", "placeholder", "jsx", "React", "cn", "forwardRef", "useCallback", "useState", "jsx", "jsxs", "forwardRef", "useState", "useCallback", "cn", "useCallback", "useState", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "prefersReducedMotion", "useState", "useRef", "useCallback", "useEffect", "cn", "CardContent", "Fragment", "jsx", "jsxs", "useState", "useCallback", "image", "cn", "CardContent", "useCallback", "useState", "jsx", "jsxs", "useState", "useCallback", "cn", "CardHeader", "ContrastGuard", "CardTitle", "CardContent", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useCallback", "useEffect", "cn", "React", "Fragment", "jsx", "jsxs", "React", "cn", "useCallback", "useEffect", "useState", "jsx", "jsxs", "useState", "useEffect", "useCallback", "cn", "jsx", "jsxs", "cn", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "useCallback", "cn", "Image", "jsx", "jsxs", "cn", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "prefersReducedMotion", "useState", "useRef", "useEffect", "useCallback", "message", "cn", "CardContent", "Image", "File", "jsx", "jsxs", "x", "GlassSelect", "cn", "jsx", "jsxs", "forwardRef", "useCallback", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useCallback", "cn", "forwardRef", "useEffect", "useMemo", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useMemo", "useEffect", "cn", "useEffect", "useRef", "jsx", "jsxs", "useRef", "useEffect", "cn", "React", "jsx", "jsxs", "React", "cn", "forwardRef", "useState", "React", "React", "Component", "sizeClass", "cn", "useCallback", "useState", "Fragment", "jsx", "jsxs", "useState", "useCallback", "cn", "CardHeader", "CardTitle", "CardContent", "forwardRef", "useEffect", "useRef", "jsx", "forwardRef", "useRef", "useEffect", "x", "cn", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "cn", "useCallback", "useState", "Fragment", "jsx", "jsxs", "users", "useState", "useCallback", "user", "cn", "CardHeader", "CardTitle", "CardContent", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "useRef", "useState", "volume", "useCallback", "useEffect", "formatTime", "cn", "CardContent", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useMemo", "useCallback", "scrollTop", "useEffect", "cn", "useState", "useCallback", "useEffect", "useRef", "useState", "useEffect", "useCallback", "settings", "message", "useState", "useEffect", "useCallback", "useRef", "settings", "memory", "list", "Fragment", "jsx", "jsxs", "useState", "useRef", "performance", "useEffect", "useCallback", "cn", "useMemo", "useState", "jsx", "jsxs", "useState", "useMemo", "activity", "cn", "CardHeader", "CardTitle", "ContrastGuard", "CardContent", "useState", "jsx", "jsxs", "useState", "toCssSize", "cn", "CardHeader", "CardTitle", "ContrastGuard", "CardContent", "jsx", "jsxs", "formatValue", "cn", "CardHeader", "CardTitle", "ContrastGuard", "CardContent", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "CardHeader", "CardTitle", "ContrastGuard", "CardContent", "jsx", "jsxs", "data", "value", "x", "cn", "CardHeader", "CardTitle", "ContrastGuard", "CardContent", "forwardRef", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useRef", "useState", "useEffect", "useEffect", "useMemo", "useState", "jsx", "jsxs", "prefersReducedMotion", "useState", "useEffect", "useMemo", "cn", "CardHeader", "CardTitle", "CardContent", "forwardRef", "useState", "useCallback", "Fragment", "jsx", "jsxs", "forwardRef", "useState", "useCallback", "x", "cn", "forwardRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "cn", "forwardRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "errors", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "React", "forwardRef", "useCallback", "useEffect", "useState", "jsx", "jsxs", "forwardRef", "useState", "useCallback", "errors", "isValid", "useEffect", "cn", "forwardRef", "useState", "useMemo", "jsx", "jsxs", "isRangeFilterValue", "forwardRef", "data", "useState", "useMemo", "cn", "forwardRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "play", "useState", "colors", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "colors", "sizeClass", "cn", "ContrastGuard", "forwardRef", "useCallback", "useMemo", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "play", "useState", "useRef", "useMemo", "useCallback", "x", "statusColors", "cn", "ContrastGuard", "forwardRef", "useCallback", "useRef", "useState", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useState", "useRef", "useCallback", "colors", "cn", "ContrastGuard", "forwardRef", "useState", "useCallback", "useMemo", "useRef", "useEffect", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useState", "useRef", "useEffect", "useMemo", "statusColors", "formatValue", "useCallback", "sizes", "cn", "x", "forwardRef", "useState", "useCallback", "createContext", "useContext", "jsx", "jsxs", "createContext", "useContext", "play", "useState", "colors", "cn", "ContrastGuard", "forwardRef", "data", "useCallback", "node", "forwardRef", "useState", "useRef", "useEffect", "useCallback", "useMemo", "subtlePulse", "nebulaMove", "auroraWave", "wavesAnimation", "gradientShift", "particleFloat", "container", "absoluteFill", "effect", "noise", "typeSubtle", "typeNebula", "typeAurora", "typeWaves", "typeGradient", "typeAmbient", "typeDefault", "animateSubtle", "animateNebula", "animateAurora", "animateWaves", "animateGradient", "particleContainer", "particle", "particleAnimated", "reduceMotion", "hidden", "jsx", "jsxs", "forwardRef", "particleCount", "prefersReducedMotion", "useRef", "useState", "useEffect", "useMemo", "cn", "useCallback", "x", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "sortBy", "prefersReducedMotion", "useState", "useRef", "play", "useCallback", "layoutItems", "x", "useEffect", "createGlassStyle", "cn", "motion", "forwardRef", "useRef", "useCallback", "useState", "useEffect", "jsx", "jsxs", "defaultTools", "forwardRef", "tools", "useRef", "useState", "useEffect", "useCallback", "value", "cn", "forwardRef", "Fragment", "jsx", "jsxs", "forwardRef", "users", "prefersReducedMotion", "cn", "AnimatePresence", "motion", "React", "useCallback", "useEffect", "useState", "jsx", "jsxs", "React", "GlassA11y", "prefersReducedMotion", "useState", "useEffect", "useCallback", "motion", "cn", "AnimatePresence", "Component", "GlassHighContrast", "GlassMotionControls", "GlassScreenReader", "GlassKeyboardNav", "useRef", "useEffect", "useState", "jsx", "jsxs", "useRef", "useState", "useEffect", "cn", "motion", "useMotionValue", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useRef", "useState", "prefersReducedMotion", "useCallback", "useMotionValue", "springConfig", "useEffect", "x", "cn", "motion", "ContrastGuard", "useRef", "useEffect", "useMemo", "forwardRef", "Fragment", "jsx", "jsxs", "colors", "prefersReducedMotion", "useRef", "useEffect", "useMemo", "cn", "forwardRef", "GlassMeshBackground", "ContrastGuard", "useRef", "useEffect", "useCallback", "useState", "forwardRef", "useAnimationFrame", "jsx", "jsxs", "forwardRef", "colors", "useRef", "useState", "prefersReducedMotion", "useCallback", "useEffect", "x", "resolveCanvasColor", "useAnimationFrame", "cn", "ContrastGuard", "useEffect", "useRef", "useState", "useCallback", "forwardRef", "motion", "useSpring", "useMotionValue", "AnimatePresence", "Fragment", "jsx", "jsxs", "forwardRef", "GlassMagneticCursor", "useRef", "useState", "prefersReducedMotion", "useMotionValue", "springConfig", "useSpring", "useEffect", "useCallback", "x", "cn", "ContrastGuard", "motion", "AnimatePresence", "GlassMagneticWrapper", "React", "useRef", "useEffect", "useState", "useCallback", "forwardRef", "motion", "useSpring", "AnimatePresence", "useMotionValue", "useTransform", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useRef", "useState", "useMotionValue", "springConfig", "useSpring", "useTransform", "useEffect", "useCallback", "x", "motion", "cn", "ContrastGuard", "AnimatePresence", "particleCount", "React", "useRef", "useEffect", "useState", "jsx", "jsxs", "useRef", "useState", "prefersReducedMotion", "useEffect", "height", "x", "cn", "motion", "useMotionValue", "useSpring", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "defaultConfig", "createContext", "prefersReducedMotion", "useContext", "useState", "useCallback", "Component", "createGlassStyle", "useMemo", "useEffect", "motion", "useMotionValue", "useSpring", "useRef", "colors", "ContrastGuard", "cn", "AnimatePresence", "motion", "useEffect", "useState", "motion", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "useState", "jsx", "jsxs", "createContext", "prefersReducedMotion", "useContext", "jsx", "jsxs", "prefersReducedMotion", "useState", "useEffect", "colors", "hexToRgb", "motion", "AnimatePresence", "cn", "ContrastGuard", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "x", "health", "performance", "memory", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "prefersReducedMotion", "useState", "useEffect", "jsxs", "cn", "motion", "jsx", "AnimatePresence", "ContrastGuard", "health", "useRef", "useCallback", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "cn", "motion", "AnimatePresence", "ContrastGuard", "target", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "memory", "health", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "cn", "motion", "AnimatePresence", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "jsx", "jsxs", "createContext", "useContext", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "x", "createContext", "prefersReducedMotion", "useRef", "useState", "useEffect", "useCallback", "useContext", "cn", "motion", "AnimatePresence", "ContrastGuard", "AnimatePresence", "motion", "useReducedMotion", "React", "createContext", "useContext", "useEffect", "useMemo", "useRef", "useState", "Fragment", "jsx", "jsxs", "createContext", "useState", "useReducedMotion", "useEffect", "useGlassPerformance", "useContext", "useRef", "useMemo", "cn", "AnimatePresence", "motion", "React", "useEffect", "useRef", "useState", "useCallback", "createContext", "useContext", "motion", "AnimatePresence", "jsx", "jsxs", "createContext", "useContext", "React", "useRef", "useEffect", "useState", "useCallback", "motion", "AnimatePresence", "jsx", "jsxs", "isBrowser", "prefersReducedMotion", "useRef", "useState", "useCallback", "useEffect", "motion", "React", "cn", "AnimatePresence", "ContrastGuard", "useRef", "useEffect", "useState", "useCallback", "motion", "useMotionValue", "useSpring", "useTransform", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useMotionValue", "springConfig", "useSpring", "useTransform", "useEffect", "useCallback", "motionData", "x", "cn", "ContrastGuard", "motion", "useRef", "useEffect", "useState", "useCallback", "useMemo", "motion", "useMotionValue", "useSpring", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useMotionValue", "useSpring", "useEffect", "useCallback", "useMemo", "motion", "cn", "ContrastGuard", "useRef", "useEffect", "useCallback", "useState", "useMemo", "motion", "useAnimation", "useSpring", "jsx", "jsxs", "prefersReducedMotion", "position", "x", "createContext", "useCallback", "useContext", "useEffect", "useRef", "useState", "jsx", "data", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "defaultSettings", "forwardRef", "prefersReducedMotion", "useState", "useRef", "settings", "play", "useCallback", "x", "data", "id", "useEffect", "motion", "createGlassStyle", "file", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "readableGlassTextStyle", "forwardRef", "prefersReducedMotion", "useState", "useRef", "play", "useCallback", "model", "data", "x", "colors", "useEffect", "motion", "createGlassStyle", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "readableGlassTextStyle", "forwardRef", "prompt", "prefersReducedMotion", "useState", "settings", "useRef", "play", "useCallback", "data", "useEffect", "motion", "createGlassStyle", "React", "useState", "useCallback", "useEffect", "useRef", "useMemo", "Fragment", "jsx", "jsxs", "data", "search", "useState", "useRef", "prefersReducedMotion", "useMemo", "useEffect", "useCallback", "React", "cn", "forwardRef", "useMemo", "useState", "jsx", "jsxs", "forwardRef", "useState", "useMemo", "cn", "forwardRef", "jsx", "forwardRef", "forwardRef", "useState", "useEffect", "useRef", "useCallback", "motion", "jsx", "jsxs", "readableGlassTextStyle", "forwardRef", "prefersReducedMotion", "useState", "settings", "useRef", "play", "useCallback", "video", "data", "x", "idx", "id", "useEffect", "motion", "file", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "readableGlassTextStyle", "forwardRef", "prefersReducedMotion", "useState", "useRef", "play", "useCallback", "frequencyData", "colors", "data", "x", "useEffect", "cn", "motion", "volume", "createGlassStyle", "useMemo", "jsx", "jsxs", "clamp", "useMemo", "cn", "useEffect", "useMemo", "useState", "jsx", "jsxs", "clamp", "useState", "useMemo", "useEffect", "cn", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "readableGlassTextStyle", "forwardRef", "prefersReducedMotion", "useState", "useRef", "play", "useCallback", "file", "useEffect", "motion", "createGlassStyle", "AnimatePresence", "motion", "useEffect", "useState", "motion", "jsx", "jsxs", "easings", "Fragment", "jsx", "jsxs", "easings", "prefersReducedMotion", "motion", "cn", "AnimatePresence", "useState", "direction", "GlassAccordion", "ContrastGuard", "GlassModal", "useEffect", "GlassTabs", "createContext", "useContext", "useEffect", "useState", "jsx", "defaultSettings", "createContext", "settings", "useState", "useEffect", "useAccessibility", "useContext", "AnimatePresence", "motion", "useEffect", "useRef", "useState", "jsx", "jsxs", "prefersReducedMotion", "useState", "useEffect", "motion", "cn", "settings", "useAccessibility", "useRef", "target", "AnimatePresence", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "useMemo", "useRef", "useEffect", "useCallback", "useState", "motion", "useAnimation", "useMotionValue", "useSpring", "useTransform", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "x", "createParticles", "useCallback", "particles", "useEffect", "y", "cn", "motion", "useAnimation", "useSpring", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useAnimation", "useSpring", "useCallback", "useEffect", "activity", "motion", "cn", "React", "useRef", "useEffect", "useCallback", "useState", "useMemo", "motion", "useAnimation", "useSpring", "useTransform", "jsx", "jsxs", "DEFAULT_LAYERS", "prefersReducedMotion", "x", "useRef", "useEffect", "useCallback", "useState", "useMemo", "motion", "useAnimation", "useSpring", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useAnimation", "useCallback", "useEffect", "useSpring", "useMemo", "motion", "ContrastGuard", "useCallback", "useState", "data", "useCallback", "useRef", "useState", "useEffect", "features", "jsx", "forwardRef", "prefersReducedMotion", "useRef", "useState", "features", "useMemo", "cn", "useEffect", "useCallback", "DEFAULT_CONFIG", "AuraElementInteractionPlugin", "x", "x", "useState", "useCallback", "useRef", "useMemo", "jsx", "jsxs", "toFiniteNumber", "colors", "formatValue", "data", "useState", "useRef", "useMemo", "useCallback", "x", "format", "height", "cn", "useId", "jsx", "jsxs", "useId", "x", "jsxs", "ContrastGuard", "cn", "jsx", "forwardRef", "useState", "useCallback", "useRef", "useEffect", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useEffect", "video", "useCallback", "x", "cn", "forwardRef", "useState", "useCallback", "useRef", "useEffect", "jsx", "jsxs", "forwardRef", "useState", "useRef", "useEffect", "useCallback", "camera", "x", "cn", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "particleCount", "prefersReducedMotion", "play", "useRef", "useState", "useEffect", "useCallback", "particles", "preset", "cn", "forwardRef", "useState", "useCallback", "useRef", "useEffect", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useState", "useRef", "colorSchemes", "colors", "useEffect", "useCallback", "x", "cn", "forwardRef", "useState", "useCallback", "useRef", "useEffect", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "particleCount", "useRef", "colorSchemes", "colors", "useCallback", "useEffect", "x", "cn", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "particleCount", "prefersReducedMotion", "play", "useRef", "useState", "useCallback", "useEffect", "x", "cn", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useRef", "useState", "useCallback", "colors", "x", "particleCount", "useEffect", "star", "ContrastGuard", "cn", "React", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useRef", "useState", "React", "useCallback", "useEffect", "particleCount", "cn", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useRef", "useState", "useCallback", "x", "particleCount", "useEffect", "star", "cn", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useRef", "useState", "useCallback", "useEffect", "colors", "particleCount", "cn", "forwardRef", "useState", "useEffect", "useCallback", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "play", "useState", "useEffect", "useCallback", "cn", "mood", "useRef", "useEffect", "useState", "useCallback", "motion", "AnimatePresence", "Fragment", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useCallback", "message", "user", "x", "useEffect", "cn", "AnimatePresence", "ContrastGuard", "motion", "useRef", "useEffect", "useState", "useCallback", "motion", "AnimatePresence", "useMotionValue", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useState", "useCallback", "x", "useEffect", "cn", "AnimatePresence", "ContrastGuard", "useMotionValue", "motion", "useMemo", "jsx", "jsxs", "DEFAULT_LAYERS", "clamp", "useMemo", "cn", "useMemo", "jsx", "jsxs", "useMemo", "cn", "target", "useCallback", "useMemo", "useState", "jsx", "jsxs", "prefersReducedMotion", "useState", "useMemo", "useCallback", "cn", "forwardRef", "useState", "useEffect", "useMemo", "motion", "jsx", "jsxs", "toFiniteNumber", "clamp", "forwardRef", "prefersReducedMotion", "useState", "useEffect", "useMemo", "x", "cn", "motion", "createGlassStyle", "forwardRef", "useState", "useEffect", "useRef", "useMemo", "motion", "AnimatePresence", "jsx", "jsxs", "x", "forwardRef", "particleCount", "prefersReducedMotion", "useRef", "useState", "useEffect", "useMemo", "cn", "createGlassStyle", "AnimatePresence", "motion", "forwardRef", "useRef", "useEffect", "useState", "useCallback", "jsx", "jsxs", "forwardRef", "particleCount", "prefersReducedMotion", "play", "useRef", "useState", "useCallback", "x", "useEffect", "cn", "forwardRef", "useState", "useEffect", "useRef", "useMemo", "motion", "AnimatePresence", "jsx", "jsxs", "x", "forwardRef", "prefersReducedMotion", "useRef", "useState", "useEffect", "useMemo", "AnimatePresence", "motion", "createGlassStyle", "forwardRef", "useState", "useEffect", "useMemo", "motion", "AnimatePresence", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useEffect", "id", "useMemo", "cn", "motion", "createGlassStyle", "AnimatePresence", "forwardRef", "useState", "useEffect", "useRef", "useMemo", "motion", "jsx", "jsxs", "x", "forwardRef", "useRef", "useState", "useEffect", "useMemo", "data", "cn", "createGlassStyle", "motion", "jsx", "jsxs", "cn", "clamp", "useCallback", "useEffect", "useMemo", "useState", "createContext", "useContext", "useState", "useCallback", "useEffect", "useRef", "jsx", "createContext", "useContext", "colors", "useState", "users", "useRef", "useCallback", "activity", "data", "user", "useEffect", "Fragment", "jsx", "jsxs", "useState", "useEffect", "useCallback", "useMemo", "cn", "user", "target", "users", "message", "useEffect", "useState", "jsx", "jsxs", "users", "useState", "useEffect", "user", "cn", "useState", "jsx", "jsxs", "user", "cn", "activity", "formatTime", "users", "useState", "React", "useState", "useRef", "useEffect", "Fragment", "jsx", "jsxs", "user", "useState", "useRef", "useEffect", "formatTime", "cn", "users", "target", "React", "useEffect", "useMemo", "useState", "jsx", "jsxs", "statusAccent", "MultiUserGlassEditor", "users", "normalizeValue", "useState", "useEffect", "useMemo", "user", "cn", "createContext", "useContext", "useState", "useCallback", "useRef", "forwardRef", "jsx", "createContext", "forwardRef", "useState", "useRef", "useCallback", "target", "props", "data", "cn", "useContext", "useState", "useCallback", "useEffect", "useState", "jsx", "jsxs", "cn", "useState", "useRef", "useState", "jsx", "jsxs", "cn", "useState", "Tag", "prefersReducedMotion", "useRef", "useState", "useCallback", "jsx", "jsxs", "file", "e", "cn", "useState", "useCallback", "useState", "jsx", "jsxs", "toStringProp", "useState", "cn", "data", "file", "e", "jsx", "jsxs", "useCallback", "data", "useEffect", "cn", "useState", "createContext", "useContext", "useState", "useCallback", "jsx", "sortBy", "features", "data", "useContext", "useState", "useCallback", "jsx", "jsxs", "useState", "useCallback", "cn", "code", "item", "useState", "useEffect", "useCallback", "jsx", "jsxs", "useState", "reason", "cn", "useCallback", "useEffect", "productId", "createContext", "useContext", "useState", "useCallback", "useRef", "jsx", "file", "image", "sizes", "useContext", "useState", "useCallback", "useRef", "jsx", "jsxs", "image", "useState", "cn", "useRef", "useCallback", "file", "createContext", "useContext", "useState", "useCallback", "useRef", "useEffect", "jsx", "analytics", "file", "play", "pause", "volume", "useContext", "React", "useState", "useRef", "useEffect", "useCallback", "jsx", "jsxs", "volume", "useState", "cn", "useEffect", "play", "pause", "useRef", "React", "useCallback", "currentTime", "duration", "React", "useState", "useRef", "useEffect", "useCallback", "jsx", "jsxs", "formatTime", "getInlineTranscript", "clampPercent", "useRef", "useState", "useEffect", "x", "useCallback", "data", "TranscriptPanel", "play", "pause", "React", "volume", "currentTime", "duration", "cn", "forwardRef", "jsx", "jsxs", "rangeStyle", "forwardRef", "volume", "cn", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "React", "forwardRef", "jsx", "jsxs", "forwardRef", "React", "React", "forwardRef", "useEffect", "useCallback", "useRef", "createPortal", "jsx", "jsxs", "forwardRef", "message", "React", "useRef", "cn", "useEffect", "useCallback", "createPortal", "useState", "jsx", "jsxs", "useState", "forwardRef", "useState", "useRef", "useCallback", "useEffect", "jsx", "jsxs", "RefreshIcon", "forwardRef", "useState", "useRef", "useEffect", "useCallback", "cn", "AnimatePresence", "motion", "useMotionValue", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useRef", "useMotionValue", "useCallback", "x", "motion", "cn", "AnimatePresence", "prefersReducedMotion", "useState", "useRef", "useCallback", "jsx", "motion", "useEffect", "x", "jsxs", "AnimatePresence", "Fragment", "cn", "forwardRef", "useState", "useEffect", "useMemo", "motion", "jsx", "jsxs", "forwardRef", "users", "prefersReducedMotion", "useState", "play", "useEffect", "user", "useMemo", "getSizeClasses", "jsxs", "motion", "createGlassStyle", "jsx", "cn", "forwardRef", "useState", "useEffect", "useCallback", "useRef", "useMemo", "motion", "AnimatePresence", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "play", "useRef", "useEffect", "x", "useCallback", "motion", "cn", "createGlassStyle", "useMemo", "AnimatePresence", "forwardRef", "useState", "useEffect", "useRef", "useCallback", "motion", "AnimatePresence", "Fragment", "jsx", "jsxs", "forwardRef", "users", "prefersReducedMotion", "useRef", "useState", "play", "useEffect", "user", "isDrawing", "prev", "useCallback", "x", "motion", "createGlassStyle", "cn", "AnimatePresence", "forwardRef", "useState", "useEffect", "useMemo", "motion", "AnimatePresence", "jsx", "jsxs", "forwardRef", "sortBy", "prefersReducedMotion", "useState", "useEffect", "useMemo", "motion", "createGlassStyle", "cn", "AnimatePresence", "forwardRef", "useState", "useEffect", "useRef", "motion", "AnimatePresence", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useRef", "play", "data", "useEffect", "motion", "createGlassStyle", "cn", "AnimatePresence", "AnimatePresence", "motion", "useCallback", "useEffect", "useState", "jsx", "jsxs", "prefersReducedMotion", "getStateColor", "cn", "motion", "AnimatePresence", "createContext", "useCallback", "useContext", "useMemo", "jsx", "createContext", "useCallback", "useMemo", "useContext", "motion", "forwardRef", "useMemo", "jsx", "forwardRef", "prefersReducedMotion", "useMemo", "x", "motion", "AnimatePresence", "motion", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "play", "useEffect", "useCallback", "nodes", "useMemo", "AnimatePresence", "motion", "AnimatePresence", "motion", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "play", "useEffect", "useCallback", "sections", "useMemo", "x", "AnimatePresence", "motion", "motion", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "defaultConfig", "forwardRef", "prefersReducedMotion", "useState", "useRef", "play", "useCallback", "useEffect", "island", "createGlassStyle", "motion", "AnimatePresence", "motion", "useMotionValue", "useTransform", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "play", "useMotionValue", "useTransform", "useEffect", "useCallback", "x", "motion", "AnimatePresence", "AnimatePresence", "motion", "forwardRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "jsx", "jsxs", "forwardRef", "useState", "useRef", "prefersReducedMotion", "play", "useEffect", "useCallback", "x", "useMemo", "AnimatePresence", "motion", "forwardRef", "jsx", "forwardRef", "prefersReducedMotion", "cn", "forwardRef", "useRef", "useState", "useEffect", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "useState", "useRef", "radiusMap", "cn", "React", "forwardRef", "useState", "Fragment", "jsx", "jsxs", "React", "forwardRef", "prefersReducedMotion", "useState", "radiusMap", "cn", "React", "forwardRef", "useState", "useEffect", "jsx", "React", "forwardRef", "prefersReducedMotion", "useState", "radiusMap", "useEffect", "cn", "React", "forwardRef", "useState", "useEffect", "jsx", "jsxs", "React", "forwardRef", "prefersReducedMotion", "useState", "radiusMap", "priority", "useEffect", "cn", "React", "forwardRef", "useState", "useEffect", "useRef", "gradientShift", "cloudMove", "container", "gradientLayer", "gradientInteractive", "animateGradient", "atmosphericEffect", "animateClouds", "blurLayer", "contentLayer", "reduceMotion", "jsx", "jsxs", "prefersReducedMotion", "React", "useState", "useRef", "useEffect", "x", "cn", "forwardRef", "AtmosphericBackground_default", "forwardRef", "useRef", "useEffect", "useState", "useMemo", "useCallback", "container", "canvas", "blurLayer", "backgroundLayer", "contentLayer", "jsx", "jsxs", "particleCount", "prefersReducedMotion", "useRef", "useState", "useEffect", "x", "useCallback", "useMemo", "cn", "forwardRef", "ParticleBackground_default", "React", "forwardRef", "useState", "useEffect", "useCallback", "useMemo", "useRef", "forwardRef", "useCallback", "useMemo", "action", "actionGlass", "actionSolid", "actionDisabled", "sizeSmall", "sizeMedium", "sizeLarge", "hiddenUp", "hiddenDown", "hiddenLeft", "hiddenRight", "tooltip", "tooltipVisible", "tooltipUp", "tooltipDown", "tooltipLeft", "tooltipRight", "actionNoTransition", "jsx", "jsxs", "useMemo", "useCallback", "cn", "forwardRef", "SpeedDialAction_default", "forwardRef", "icon", "iconOpen", "iconContainer", "iconLayer", "iconLayerActive", "jsx", "jsxs", "cn", "forwardRef", "SpeedDialIcon_default", "root", "hidden", "container", "fab", "fabDisabled", "fabGlass", "fabSolidPrimary", "fabSolidSecondary", "fabSolidError", "fabSolidInfo", "fabSolidSuccess", "fabSolidWarning", "fabSolidDefault", "fabSmall", "fabMedium", "fabLarge", "fabHover", "fabActive", "actions", "actionsOpen", "actionsVertical", "actionsHorizontal", "backdrop", "backdropVisible", "Fragment", "jsx", "jsxs", "mergeRefs", "useRef", "useState", "useMemo", "useCallback", "useEffect", "cn", "React", "SpeedDialAction_default", "SpeedDialIcon_default", "forwardRef", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useRef", "useState", "jsx", "jsxs", "getColorIntent", "cn", "getSizeClasses", "useRef", "prefersReducedMotion", "useState", "useImperativeHandle", "useEffect", "useCallback", "safeWindow", "ToggleButton", "forwardRef", "forwardRef", "Children", "useState", "useCallback", "jsx", "cn", "useState", "useCallback", "Children", "forwardRef", "React", "forwardRef", "useContext", "useRef", "useMemo", "useState", "useLayoutEffect", "forwardRef", "useState", "useCallback", "useMemo", "createContext", "root", "sizeSmall", "sizeMedium", "sizeLarge", "disabled", "jsx", "createContext", "useState", "useCallback", "useMemo", "sizeClass", "cn", "forwardRef", "GlassTreeView", "root", "content", "sizeSmall", "sizeMedium", "sizeLarge", "disabled", "glass", "selected", "focused", "icon", "toggleIcon", "label", "children", "jsx", "jsxs", "prefersReducedMotion", "useRef", "useContext", "React", "useMemo", "useState", "useLayoutEffect", "sizeClass", "cn", "TreeItem", "forwardRef", "forwardRef", "useMemo", "jsx", "prefersReducedMotion", "useMemo", "cn", "forwardRef", "forwardRef", "useState", "useRef", "useCallback", "useMemo", "wrapper", "ripples", "ripple", "auraRippleButton", "content", "jsx", "jsxs", "colorToRgb", "prefersReducedMotion", "useState", "useRef", "useCallback", "x", "useMemo", "rest", "cn", "forwardRef", "RippleButton_default", "forwardRef", "useMemo", "container", "overlay", "loading", "auraStateIndicatorPulse", "disabled", "jsx", "jsxs", "colorToRgb", "prefersReducedMotion", "useMemo", "createGlassStyle", "rest", "style", "cn", "forwardRef", "StateIndicator_default", "forwardRef", "useState", "useRef", "useEffect", "useMemo", "container", "rippleOverflow", "pulse", "auraPulse", "glow", "auraGlow", "highlight", "auraHighlight", "bounce", "auraBounce", "shake", "auraShake", "glassOverlay", "content", "ripples", "ripple", "auraRipple", "jsx", "jsxs", "colorToRgb", "prefersReducedMotion", "useRef", "useState", "x", "useEffect", "useMemo", "cn", "forwardRef", "VisualFeedback_default", "React", "forwardRef", "createContext", "useMemo", "useRef", "useEffect", "root", "grid", "variantStandard", "variantQuilted", "variantWoven", "masonry", "glass", "radiusMd", "jsx", "createContext", "useRef", "useEffect", "useMemo", "cn", "React", "forwardRef", "forwardRef", "useContext", "useState", "useMemo", "useCallback", "item", "clickable", "glass", "rounded", "media", "overlay", "overlayVisible", "noTransition", "masonryItem", "elevationLevel1", "elevationLevel2", "elevationLevel3", "elevationLevel4", "jsx", "jsxs", "prefersReducedMotion", "useContext", "useState", "useCallback", "useMemo", "image", "cn", "forwardRef", "forwardRef", "useState", "root", "positionTop", "positionBottom", "positionBelow", "glass", "actionLeft", "titleWrapper", "title", "subtitle", "action", "actionLeftAction", "showOnHover", "visible", "noTransition", "jsx", "jsxs", "prefersReducedMotion", "useState", "cn", "forwardRef", "forwardRef", "useEffect", "useState", "useMemo", "useState", "container", "positionBottom", "positionTop", "positionBottomLeft", "positionBottomRight", "positionTopLeft", "positionTopRight", "buttonGroup", "jsx", "jsxs", "forwardRef", "message", "useState", "prefersReducedMotion", "useEffect", "useMemo", "cn", "forwardRef", "useEffect", "useState", "useMemo", "container", "positionCenterBottom", "positionCenterTop", "positionBottomLeft", "positionBottomRight", "positionTopLeft", "positionTopRight", "buttonContainer", "Fragment", "jsx", "jsxs", "getCookie", "POSITION_CLASS_MAP", "forwardRef", "message", "useState", "prefersReducedMotion", "useEffect", "useMemo", "jsx", "cn", "jsxs", "Fragment", "forwardRef", "useState", "useEffect", "useMemo", "useRef", "container", "positionCenterBottom", "positionCenterTop", "positionBottomLeft", "positionBottomRight", "positionTopLeft", "positionTopRight", "buttonContainer", "categoryContainer", "categoryItem", "categoryHeader", "categoryDescription", "cookieDetailContainer", "detailsToggle", "Fragment", "jsx", "jsxs", "setCookie", "getCookie", "POSITION_CLASS_MAP", "forwardRef", "message", "useState", "prefersReducedMotion", "useMemo", "useRef", "useEffect", "cn", "React", "jsx", "React", "cn", "jsx", "jsx", "forwardRef", "jsx", "jsxs", "forwardRef", "cn", "createGlassStyle", "motion", "useMotionValue", "useSpring", "useTransform", "useState", "useRef", "useEffect", "useEffect", "x", "jsx", "jsxs", "seededRandom", "x", "prefersReducedMotion", "useRef", "useState", "useMotionValue", "springConfig", "useSpring", "useTransform", "useEffect", "prismStyle", "cn", "motion", "data", "React", "motion", "useMotionValue", "useSpring", "useTransform", "useCallback", "useEffect", "useRef", "useState", "memo", "Fragment", "jsx", "jsxs", "ChevronLeftIcon", "memo", "ChevronRightIcon", "ChevronUpIcon", "ChevronDownIcon", "useState", "useRef", "springConfig", "useMotionValue", "useSpring", "useTransform", "React", "useCallback", "duration", "useEffect", "presetValues", "isVertical", "cursorClass", "clipPath", "cn", "motion", "prefersReducedMotion", "motion", "forwardRef", "jsx", "jsxs", "forwardRef", "prefersReducedMotion", "getVariantClasses", "cn", "motion", "useState", "useEffect", "useCallback", "useRef", "prefersReducedMotion", "detectDeviceCapabilities", "throttle", "useState", "useRef", "useCallback", "useEffect", "data", "React", "useState", "useCallback", "useEffect", "useRef", "jsx", "jsxs", "Component", "error", "useState", "useEffect", "useRef", "useCallback", "useState", "useRef", "useCallback", "useEffect", "React", "useState", "useEffect", "useCallback", "useRef", "useMemo", "jsx", "useState", "useRef", "useMemo", "useEffect", "useCallback", "Component", "React", "useEffect", "useState", "prefersReducedMotion", "useState", "useEffect", "useRef", "useEffect", "useCallback", "useState", "DEFAULT_OPTIONS", "useRef", "useState", "useCallback", "target", "useEffect", "useState", "useEffect", "useCallback", "useMemo", "useRef", "useState", "useRef", "useCallback", "useMemo", "target", "itemHeight", "data", "useEffect", "startIndex", "endIndex", "useCallback", "useEffect", "useState", "useState", "useEffect", "useCallback", "useState", "useRef", "useCallback", "useEffect", "isRecord", "useChartPhysicsInteraction", "x", "useState", "useEffect", "target", "x", "features", "data", "useEffect", "useState", "Fragment", "jsx", "useState", "useEffect", "useCallback", "useEffect", "useRef", "useState", "x", "useRef", "useState", "useEffect", "useCallback", "options", "useCallback", "useEffect", "useRef", "useState", "useState", "useRef", "useCallback", "x", "useEffect", "target", "useCallback", "useState", "useRef", "x", "useCallback", "useEffect", "useRef", "useState", "prefersReducedMotion", "useRef", "useState", "useCallback", "useEffect", "scaleValue", "useCallback", "useEffect", "useRef", "useState", "prefersReducedMotion", "useRef", "useState", "useCallback", "lerp", "target", "useEffect", "useRef", "useCallback", "useEffect", "useState", "DEFAULT_CONFIG", "useRef", "useState", "useEffect", "useCallback", "x", "useRef", "useEffect", "useCallback", "useState", "useMemo", "PerformanceMonitor", "memory", "x", "data", "DEFAULT_OPTIONS", "useGlassPerformance", "useRef", "useState", "useEffect", "PerformanceMonitor", "useCallback", "performance", "useMemo", "Component", "features", "useState", "useCallback", "useMemo", "DEFAULT_OPTIONS", "useSortableData", "data", "config", "groupBy", "sortBy", "useRef", "useState", "useCallback", "useEffect", "DEFAULT_OPTIONS", "useDraggableListPhysics", "useState", "useRef", "useCallback", "item", "useEffect", "useRef", "useCallback", "useEffect", "useState", "useRef", "useEffect", "x", "target", "DEFAULT_CONFIG", "useRef", "useState", "useEffect", "target", "useCallback", "springConfig", "impulse", "particleCount", "useCallback", "useRef", "useState", "useEffect", "GestureType", "useRef", "useState", "useCallback", "useEffect", "useCallback", "useRef", "useState", "useEffect", "PublicAnimationStage", "pause", "hexToRgba", "useRef", "useEffect", "useCallback", "useState", "DEFAULT_CONFIG", "useRef", "useCallback", "useEffect", "useState", "stepDuration", "play", "pause", "easingFunctions", "useRef", "useCallback", "useEffect", "useState", "useAnimationSequence", "easeValue", "stepDuration", "play", "pause", "cubicBezier", "prefersReducedMotion", "useRef", "useCallback", "useState", "useEffect", "DEFAULT_CONFIG", "useMultiSpring", "isProduction", "isDevelopment", "message", "isDevelopment", "performance", "wait", "isProduction", "memory", "isProduction", "isDevelopment", "list", "useCallback", "useRef", "useEffect", "target", "detectBrowser", "video", "browser", "PerformanceMonitor", "defaultColors", "x", "createSeededRandom", "Fragment", "jsx"]
}
